Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / net / irda / irttp.c
index 1a8d3b1..8aff254 100644 (file)
@@ -38,7 +38,7 @@
 #include <net/irda/parameters.h>
 #include <net/irda/irttp.h>
 
-static struct irttp_cb *irttp = NULL;
+static struct irttp_cb *irttp;
 
 static void __irttp_close_tsap(struct tsap_cb *self);
 
@@ -86,19 +86,18 @@ static pi_param_info_t param_info = { pi_major_call_table, 1, 0x0f, 4 };
  */
 int __init irttp_init(void)
 {
-       /* Initialize the irttp structure. */
-       if (irttp == NULL) {
-               irttp = kmalloc(sizeof(struct irttp_cb), GFP_KERNEL);
-               if (irttp == NULL)
-                       return -ENOMEM;
-       }
+       irttp = kmalloc(sizeof(struct irttp_cb), GFP_KERNEL);
+       if (irttp == NULL)
+               return -ENOMEM;
        memset(irttp, 0, sizeof(struct irttp_cb));
 
        irttp->magic = TTP_MAGIC;
 
        irttp->tsaps = hashbin_new(HB_LOCK);
        if (!irttp->tsaps) {
-               ERROR("%s: can't allocate IrTTP hashbin!\n", __FUNCTION__);
+               IRDA_ERROR("%s: can't allocate IrTTP hashbin!\n",
+                          __FUNCTION__);
+               kfree(irttp);
                return -ENOMEM;
        }
 
@@ -114,8 +113,7 @@ int __init irttp_init(void)
 void __exit irttp_cleanup(void) 
 {
        /* Check for main structure */
-       ASSERT(irttp != NULL, return;);
-       ASSERT(irttp->magic == TTP_MAGIC, return;);
+       IRDA_ASSERT(irttp->magic == TTP_MAGIC, return;);
 
        /*
         *  Delete hashbin and close all TSAP instances in it
@@ -210,8 +208,8 @@ void irttp_flush_queues(struct tsap_cb *self)
 
        IRDA_DEBUG(4, "%s()\n", __FUNCTION__);
 
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
 
        /* Deallocate frames waiting to be sent */
        while ((skb = skb_dequeue(&self->tx_queue)) != NULL)
@@ -238,8 +236,8 @@ static struct sk_buff *irttp_reassemble_skb(struct tsap_cb *self)
        struct sk_buff *skb, *frag;
        int n = 0;  /* Fragment index */
 
-       ASSERT(self != NULL, return NULL;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return NULL;);
+       IRDA_ASSERT(self != NULL, return NULL;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return NULL;);
 
        IRDA_DEBUG(2, "%s(), self->rx_sdu_size=%d\n", __FUNCTION__,
                   self->rx_sdu_size);
@@ -274,7 +272,7 @@ static struct sk_buff *irttp_reassemble_skb(struct tsap_cb *self)
         * droped the last fragment (when self->rx_sdu_size exceed
         * self->rx_max_sdu_size), where n < self->rx_sdu_size.
         * Jean II */
-       ASSERT(n <= self->rx_sdu_size, n = self->rx_sdu_size;);
+       IRDA_ASSERT(n <= self->rx_sdu_size, n = self->rx_sdu_size;);
 
        /* Set the new length */
        skb_trim(skb, n);
@@ -298,9 +296,9 @@ static inline void irttp_fragment_skb(struct tsap_cb *self,
 
        IRDA_DEBUG(2, "%s()\n", __FUNCTION__);
 
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
-       ASSERT(skb != NULL, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(skb != NULL, return;);
 
        /*
         *  Split frame into a number of segments
@@ -353,8 +351,8 @@ static int irttp_param_max_sdu_size(void *instance, irda_param_t *param,
 
        self = (struct tsap_cb *) instance;
 
-       ASSERT(self != NULL, return -1;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
+       IRDA_ASSERT(self != NULL, return -1;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
 
        if (get)
                param->pv.i = self->tx_max_sdu_size;
@@ -381,8 +379,7 @@ struct tsap_cb *irttp_open_tsap(__u8 stsap_sel, int credit, notify_t *notify)
        struct lsap_cb *lsap;
        notify_t ttp_notify;
 
-       ASSERT(irttp != NULL, return NULL;);
-       ASSERT(irttp->magic == TTP_MAGIC, return NULL;);
+       IRDA_ASSERT(irttp->magic == TTP_MAGIC, return NULL;);
 
        /* The IrLMP spec (IrLMP 1.1 p10) says that we have the right to
         * use only 0x01-0x6F. Of course, we can use LSAP_ANY as well.
@@ -430,7 +427,7 @@ struct tsap_cb *irttp_open_tsap(__u8 stsap_sel, int credit, notify_t *notify)
         */
        lsap = irlmp_open_lsap(stsap_sel, &ttp_notify, 0);
        if (lsap == NULL) {
-               WARNING("%s: unable to allocate LSAP!!\n", __FUNCTION__);
+               IRDA_WARNING("%s: unable to allocate LSAP!!\n", __FUNCTION__);
                return NULL;
        }
 
@@ -466,8 +463,8 @@ EXPORT_SYMBOL(irttp_open_tsap);
 static void __irttp_close_tsap(struct tsap_cb *self)
 {
        /* First make sure we're connected. */
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
 
        irttp_flush_queues(self);
 
@@ -500,14 +497,15 @@ int irttp_close_tsap(struct tsap_cb *self)
 
        IRDA_DEBUG(4, "%s()\n", __FUNCTION__);
 
-       ASSERT(self != NULL, return -1;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
+       IRDA_ASSERT(self != NULL, return -1;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
 
        /* Make sure tsap has been disconnected */
        if (self->connected) {
                /* Check if disconnect is not pending */
                if (!test_bit(0, &self->disconnect_pend)) {
-                       WARNING("%s: TSAP still connected!\n", __FUNCTION__);
+                       IRDA_WARNING("%s: TSAP still connected!\n",
+                                    __FUNCTION__);
                        irttp_disconnect_request(self, NULL, P_NORMAL);
                }
                self->close_pend = TRUE;
@@ -518,7 +516,7 @@ int irttp_close_tsap(struct tsap_cb *self)
 
        tsap = hashbin_remove(irttp->tsaps, (long) self, NULL);
 
-       ASSERT(tsap == self, return -1;);
+       IRDA_ASSERT(tsap == self, return -1;);
 
        /* Close corresponding LSAP */
        if (self->lsap) {
@@ -540,9 +538,9 @@ EXPORT_SYMBOL(irttp_close_tsap);
  */
 int irttp_udata_request(struct tsap_cb *self, struct sk_buff *skb)
 {
-       ASSERT(self != NULL, return -1;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
-       ASSERT(skb != NULL, return -1;);
+       IRDA_ASSERT(self != NULL, return -1;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
+       IRDA_ASSERT(skb != NULL, return -1;);
 
        IRDA_DEBUG(4, "%s()\n", __FUNCTION__);
 
@@ -582,16 +580,16 @@ int irttp_data_request(struct tsap_cb *self, struct sk_buff *skb)
        __u8 *frame;
        int ret;
 
-       ASSERT(self != NULL, return -1;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
-       ASSERT(skb != NULL, return -1;);
+       IRDA_ASSERT(self != NULL, return -1;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
+       IRDA_ASSERT(skb != NULL, return -1;);
 
        IRDA_DEBUG(2, "%s() : queue len = %d\n", __FUNCTION__,
                   skb_queue_len(&self->tx_queue));
 
        /* Check that nothing bad happens */
        if ((skb->len == 0) || (!self->connected)) {
-               WARNING("%s: No data, or not connected\n", __FUNCTION__);
+               IRDA_WARNING("%s: No data, or not connected\n", __FUNCTION__);
                ret = -ENOTCONN;
                goto err;
        }
@@ -601,8 +599,8 @@ int irttp_data_request(struct tsap_cb *self, struct sk_buff *skb)
         *  inside an IrLAP frame
         */
        if ((self->tx_max_sdu_size == 0) && (skb->len > self->max_seg_size)) {
-               ERROR("%s: SAR disabled, and data is to large for IrLAP!\n",
-                               __FUNCTION__);
+               IRDA_ERROR("%s: SAR disabled, and data is to large for IrLAP!\n",
+                          __FUNCTION__);
                ret = -EMSGSIZE;
                goto err;
        }
@@ -615,8 +613,8 @@ int irttp_data_request(struct tsap_cb *self, struct sk_buff *skb)
            (self->tx_max_sdu_size != TTP_SAR_UNBOUND) &&
            (skb->len > self->tx_max_sdu_size))
        {
-               ERROR("%s: SAR enabled, but data is larger than TxMaxSduSize!\n",
-                     __FUNCTION__);
+               IRDA_ERROR("%s: SAR enabled, but data is larger than TxMaxSduSize!\n",
+                          __FUNCTION__);
                ret = -EMSGSIZE;
                goto err;
        }
@@ -638,7 +636,7 @@ int irttp_data_request(struct tsap_cb *self, struct sk_buff *skb)
        /* Queue frame, or queue frame segments */
        if ((self->tx_max_sdu_size == 0) || (skb->len < self->max_seg_size)) {
                /* Queue frame */
-               ASSERT(skb_headroom(skb) >= TTP_HEADER, return -1;);
+               IRDA_ASSERT(skb_headroom(skb) >= TTP_HEADER, return -1;);
                frame = skb_push(skb, TTP_HEADER);
                frame[0] = 0x00; /* Clear more bit */
 
@@ -800,8 +798,8 @@ static inline void irttp_give_credit(struct tsap_cb *self)
        unsigned long flags;
        int n;
 
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
 
        IRDA_DEBUG(4, "%s() send=%d,avail=%d,remote=%d\n",
                   __FUNCTION__,
@@ -857,9 +855,9 @@ static int irttp_udata_indication(void *instance, void *sap,
 
        self = (struct tsap_cb *) instance;
 
-       ASSERT(self != NULL, return -1;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
-       ASSERT(skb != NULL, return -1;);
+       IRDA_ASSERT(self != NULL, return -1;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
+       IRDA_ASSERT(skb != NULL, return -1;);
 
        self->stats.rx_packets++;
 
@@ -974,8 +972,8 @@ static void irttp_status_indication(void *instance,
 
        self = (struct tsap_cb *) instance;
 
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
 
        /* Check if client has already closed the TSAP and gone away */
        if (self->close_pend)
@@ -1003,8 +1001,8 @@ static void irttp_flow_indication(void *instance, void *sap, LOCAL_FLOW flow)
 
        self = (struct tsap_cb *) instance;
 
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
 
        IRDA_DEBUG(4, "%s(instance=%p)\n", __FUNCTION__, self);
 
@@ -1046,8 +1044,8 @@ void irttp_flow_request(struct tsap_cb *self, LOCAL_FLOW flow)
 {
        IRDA_DEBUG(1, "%s()\n", __FUNCTION__);
 
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
 
        switch (flow) {
        case FLOW_STOP:
@@ -1086,8 +1084,8 @@ int irttp_connect_request(struct tsap_cb *self, __u8 dtsap_sel,
 
        IRDA_DEBUG(4, "%s(), max_sdu_size=%d\n", __FUNCTION__, max_sdu_size);
 
-       ASSERT(self != NULL, return -EBADR;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return -EBADR;);
+       IRDA_ASSERT(self != NULL, return -EBADR;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -EBADR;);
 
        if (self->connected) {
                if(userdata)
@@ -1109,8 +1107,8 @@ int irttp_connect_request(struct tsap_cb *self, __u8 dtsap_sel,
                 *  Check that the client has reserved enough space for
                 *  headers
                 */
-               ASSERT(skb_headroom(userdata) >= TTP_MAX_HEADER,
-                      { dev_kfree_skb(userdata); return -1; } );
+               IRDA_ASSERT(skb_headroom(userdata) >= TTP_MAX_HEADER,
+                       { dev_kfree_skb(userdata); return -1; } );
        }
 
        /* Initialize connection parameters */
@@ -1138,8 +1136,8 @@ int irttp_connect_request(struct tsap_cb *self, __u8 dtsap_sel,
 
        /* SAR enabled? */
        if (max_sdu_size > 0) {
-               ASSERT(skb_headroom(tx_skb) >= (TTP_MAX_HEADER + TTP_SAR_HEADER),
-                      { dev_kfree_skb(tx_skb); return -1; } );
+               IRDA_ASSERT(skb_headroom(tx_skb) >= (TTP_MAX_HEADER + TTP_SAR_HEADER),
+                       { dev_kfree_skb(tx_skb); return -1; } );
 
                /* Insert SAR parameters */
                frame = skb_push(tx_skb, TTP_HEADER+TTP_SAR_HEADER);
@@ -1185,9 +1183,9 @@ static void irttp_connect_confirm(void *instance, void *sap,
 
        self = (struct tsap_cb *) instance;
 
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
-       ASSERT(skb != NULL, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(skb != NULL, return;);
 
        self->max_seg_size = max_seg_size - TTP_HEADER;
        self->max_header_size = max_header_size + TTP_HEADER;
@@ -1213,7 +1211,7 @@ static void irttp_connect_confirm(void *instance, void *sap,
 
        parameters = skb->data[0] & 0x80;
 
-       ASSERT(skb->len >= TTP_HEADER, return;);
+       IRDA_ASSERT(skb->len >= TTP_HEADER, return;);
        skb_pull(skb, TTP_HEADER);
 
        if (parameters) {
@@ -1225,8 +1223,8 @@ static void irttp_connect_confirm(void *instance, void *sap,
 
                /* Any errors in the parameter list? */
                if (ret < 0) {
-                       WARNING("%s: error extracting parameters\n",
-                                       __FUNCTION__);
+                       IRDA_WARNING("%s: error extracting parameters\n",
+                                    __FUNCTION__);
                        dev_kfree_skb(skb);
 
                        /* Do not accept this connection attempt */
@@ -1269,9 +1267,9 @@ void irttp_connect_indication(void *instance, void *sap, struct qos_info *qos,
 
        self = (struct tsap_cb *) instance;
 
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
-       ASSERT(skb != NULL, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(skb != NULL, return;);
 
        lsap = (struct lsap_cb *) sap;
 
@@ -1290,7 +1288,7 @@ void irttp_connect_indication(void *instance, void *sap, struct qos_info *qos,
 
        parameters = skb->data[0] & 0x80;
 
-       ASSERT(skb->len >= TTP_HEADER, return;);
+       IRDA_ASSERT(skb->len >= TTP_HEADER, return;);
        skb_pull(skb, TTP_HEADER);
 
        if (parameters) {
@@ -1302,8 +1300,8 @@ void irttp_connect_indication(void *instance, void *sap, struct qos_info *qos,
 
                /* Any errors in the parameter list? */
                if (ret < 0) {
-                       WARNING("%s: error extracting parameters\n",
-                                       __FUNCTION__);
+                       IRDA_WARNING("%s: error extracting parameters\n",
+                                    __FUNCTION__);
                        dev_kfree_skb(skb);
 
                        /* Do not accept this connection attempt */
@@ -1337,8 +1335,8 @@ int irttp_connect_response(struct tsap_cb *self, __u32 max_sdu_size,
        int ret;
        __u8 n;
 
-       ASSERT(self != NULL, return -1;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
+       IRDA_ASSERT(self != NULL, return -1;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
 
        IRDA_DEBUG(4, "%s(), Source TSAP selector=%02x\n", __FUNCTION__,
                   self->stsap_sel);
@@ -1357,8 +1355,8 @@ int irttp_connect_response(struct tsap_cb *self, __u32 max_sdu_size,
                 *  Check that the client has reserved enough space for
                 *  headers
                 */
-               ASSERT(skb_headroom(userdata) >= TTP_MAX_HEADER,
-                      { dev_kfree_skb(userdata); return -1; } );
+               IRDA_ASSERT(skb_headroom(userdata) >= TTP_MAX_HEADER,
+                       { dev_kfree_skb(userdata); return -1; } );
        }
 
        self->avail_credit = 0;
@@ -1380,8 +1378,8 @@ int irttp_connect_response(struct tsap_cb *self, __u32 max_sdu_size,
 
        /* SAR enabled? */
        if (max_sdu_size > 0) {
-               ASSERT(skb_headroom(tx_skb) >= (TTP_MAX_HEADER + TTP_SAR_HEADER),
-                      { dev_kfree_skb(tx_skb); return -1; } );
+               IRDA_ASSERT(skb_headroom(tx_skb) >= (TTP_MAX_HEADER + TTP_SAR_HEADER),
+                       { dev_kfree_skb(tx_skb); return -1; } );
 
                /* Insert TTP header with SAR parameters */
                frame = skb_push(tx_skb, TTP_HEADER+TTP_SAR_HEADER);
@@ -1481,8 +1479,8 @@ int irttp_disconnect_request(struct tsap_cb *self, struct sk_buff *userdata,
 {
        int ret;
 
-       ASSERT(self != NULL, return -1;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
+       IRDA_ASSERT(self != NULL, return -1;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return -1;);
 
        /* Already disconnected? */
        if (!self->connected) {
@@ -1511,7 +1509,7 @@ int irttp_disconnect_request(struct tsap_cb *self, struct sk_buff *userdata,
        /*
         *  Check if there is still data segments in the transmit queue
         */
-       if (skb_queue_len(&self->tx_queue) > 0) {
+       if (!skb_queue_empty(&self->tx_queue)) {
                if (priority == P_HIGH) {
                        /*
                         *  No need to send the queued data, if we are
@@ -1579,8 +1577,8 @@ void irttp_disconnect_indication(void *instance, void *sap, LM_REASON reason,
 
        self = (struct tsap_cb *) instance;
 
-       ASSERT(self != NULL, return;);
-       ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
+       IRDA_ASSERT(self != NULL, return;);
+       IRDA_ASSERT(self->magic == TTP_TSAP_MAGIC, return;);
 
        /* Prevent higher layer to send more data */
        self->connected = FALSE;
@@ -1878,8 +1876,6 @@ static int irttp_seq_open(struct inode *inode, struct file *file)
        struct seq_file *seq;
        int rc = -ENOMEM;
        struct irttp_iter_state *s;
-       
-       ASSERT(irttp != NULL, return -EINVAL;);
 
        s = kmalloc(sizeof(*s), GFP_KERNEL);
        if (!s)