diff -urN linux-2.5.21/net/irda/iriap.c linux/net/irda/iriap.c --- linux-2.5.21/net/irda/iriap.c 2002-06-09 07:28:38.000000000 +0200 +++ linux/net/irda/iriap.c 2002-06-09 21:52:11.000000000 +0200 @@ -1,5 +1,5 @@ /********************************************************************* - * + * * Filename: iriap.c * Version: 0.8 * Description: Information Access Protocol (IAP) @@ -8,18 +8,18 @@ * Created at: Thu Aug 21 00:02:07 1997 * Modified at: Sat Dec 25 16:42:42 1999 * Modified by: Dag Brattli - * - * Copyright (c) 1998-1999 Dag Brattli , + * + * Copyright (c) 1998-1999 Dag Brattli , * All Rights Reserved. * Copyright (c) 2000-2001 Jean Tourrilhes - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * Neither Dag Brattli nor University of Tromsų admit liability nor - * provide warranty for any of this software. This material is + * provide warranty for any of this software. This material is * provided "AS-IS" and at no charge. * ********************************************************************/ @@ -59,30 +59,30 @@ #endif /* CONFIG_IRDA_DEBUG */ static hashbin_t *iriap = NULL; -static __u32 service_handle; +static __u32 service_handle; extern char *lmp_reasons[]; static void __iriap_close(struct iriap_cb *self); static int iriap_register_lsap(struct iriap_cb *self, __u8 slsap_sel, int mode); -static void iriap_disconnect_indication(void *instance, void *sap, +static void iriap_disconnect_indication(void *instance, void *sap, LM_REASON reason, struct sk_buff *skb); -static void iriap_connect_indication(void *instance, void *sap, +static void iriap_connect_indication(void *instance, void *sap, struct qos_info *qos, __u32 max_sdu_size, - __u8 max_header_size, + __u8 max_header_size, struct sk_buff *skb); -static void iriap_connect_confirm(void *instance, void *sap, - struct qos_info *qos, +static void iriap_connect_confirm(void *instance, void *sap, + struct qos_info *qos, __u32 max_sdu_size, __u8 max_header_size, struct sk_buff *skb); -static int iriap_data_indication(void *instance, void *sap, +static int iriap_data_indication(void *instance, void *sap, struct sk_buff *skb); /* * Function iriap_init (void) * * Initializes the IrIAP layer, called by the module initialization code - * in irmod.c + * in irmod.c */ int __init iriap_init(void) { @@ -98,12 +98,12 @@ objects = hashbin_new(HB_LOCAL); if (!objects) { - WARNING(__FUNCTION__ "(), Can't allocate objects hashbin!\n"); + WARNING("%s: Can't allocate objects hashbin!\n", __FUNCTION__); return -ENOMEM; } - /* - * Register some default services for IrLMP + /* + * Register some default services for IrLMP */ hints = irlmp_service_to_hint(S_COMPUTER); service_handle = irlmp_register_service(hints); @@ -122,9 +122,9 @@ IAS_KERNEL_ATTR); irias_insert_object(obj); - /* - * Register server support with IrLMP so we can accept incoming - * connections + /* + * Register server support with IrLMP so we can accept incoming + * connections */ server = iriap_open(LSAP_IAS, IAS_SERVER, NULL, NULL); if (!server) { @@ -139,15 +139,15 @@ /* * Function iriap_cleanup (void) * - * Initializes the IrIAP layer, called by the module cleanup code in + * Initializes the IrIAP layer, called by the module cleanup code in * irmod.c */ void iriap_cleanup(void) { irlmp_unregister_service(service_handle); - + hashbin_delete(iriap, (FREE_FUNC) __iriap_close); - hashbin_delete(objects, (FREE_FUNC) __irias_delete_object); + hashbin_delete(objects, (FREE_FUNC) __irias_delete_object); } /* @@ -155,7 +155,7 @@ * * Opens an instance of the IrIAP layer, and registers with IrLMP */ -struct iriap_cb *iriap_open(__u8 slsap_sel, int mode, void *priv, +struct iriap_cb *iriap_open(__u8 slsap_sel, int mode, void *priv, CONFIRM_CALLBACK callback) { struct iriap_cb *self; @@ -164,7 +164,7 @@ self = kmalloc(sizeof(struct iriap_cb), GFP_ATOMIC); if (!self) { - WARNING(__FUNCTION__ "(), Unable to kmalloc!\n"); + WARNING("%s: Unable to kmalloc!\n", __FUNCTION__); return NULL; } @@ -172,7 +172,7 @@ * Initialize instance */ memset(self, 0, sizeof(struct iriap_cb)); - + self->magic = IAS_MAGIC; self->mode = mode; if (mode == IAS_CLIENT) @@ -184,13 +184,13 @@ init_timer(&self->watchdog_timer); hashbin_insert(iriap, (irda_queue_t *) self, (int) self, NULL); - + /* Initialize state machines */ iriap_next_client_state(self, S_DISCONNECT); iriap_next_call_state(self, S_MAKE_CALL); iriap_next_server_state(self, R_DISCONNECT); iriap_next_r_connect_state(self, R_WAITING); - + return self; } @@ -261,7 +261,7 @@ self->lsap = irlmp_open_lsap(slsap_sel, ¬ify, 0); if (self->lsap == NULL) { - ERROR(__FUNCTION__ "(), Unable to allocated LSAP!\n"); + ERROR("%s: Unable to allocated LSAP!\n", __FUNCTION__); return -1; } self->slsap_sel = self->lsap->slsap_sel; @@ -275,8 +275,8 @@ * Got disconnect, so clean up everything assosiated with this connection * */ -static void iriap_disconnect_indication(void *instance, void *sap, - LM_REASON reason, +static void iriap_disconnect_indication(void *instance, void *sap, + LM_REASON reason, struct sk_buff *userdata) { struct iriap_cb *self; @@ -296,18 +296,18 @@ IRDA_DEBUG(4, __FUNCTION__ "(), disconnect as client\n"); - iriap_do_client_event(self, IAP_LM_DISCONNECT_INDICATION, + iriap_do_client_event(self, IAP_LM_DISCONNECT_INDICATION, NULL); - /* - * Inform service user that the request failed by sending + /* + * Inform service user that the request failed by sending * it a NULL value. Warning, the client might close us, so * remember no to use self anymore after calling confirm */ if (self->confirm) - self->confirm(IAS_DISCONNECT, 0, NULL, self->priv); + self->confirm(IAS_DISCONNECT, 0, NULL, self->priv); } else { IRDA_DEBUG(4, __FUNCTION__ "(), disconnect as server\n"); - iriap_do_server_event(self, IAP_LM_DISCONNECT_INDICATION, + iriap_do_server_event(self, IAP_LM_DISCONNECT_INDICATION, NULL); iriap_close(self); } @@ -318,9 +318,6 @@ /* * Function iriap_disconnect_request (handle) - * - * - * */ void iriap_disconnect_request(struct iriap_cb *self) { @@ -338,35 +335,35 @@ return; } - /* - * Reserve space for MUX control and LAP header + /* + * Reserve space for MUX control and LAP header */ - skb_reserve(skb, LMP_MAX_HEADER); + skb_reserve(skb, LMP_MAX_HEADER); irlmp_disconnect_request(self->lsap, skb); } -void iriap_getinfobasedetails_request(void) +void iriap_getinfobasedetails_request(void) { IRDA_DEBUG(0, __FUNCTION__ "(), Not implemented!\n"); } -void iriap_getinfobasedetails_confirm(void) +void iriap_getinfobasedetails_confirm(void) { IRDA_DEBUG(0, __FUNCTION__ "(), Not implemented!\n"); } -void iriap_getobjects_request(void) +void iriap_getobjects_request(void) { IRDA_DEBUG(0, __FUNCTION__ "(), Not implemented!\n"); } -void iriap_getobjects_confirm(void) +void iriap_getobjects_confirm(void) { IRDA_DEBUG(0, __FUNCTION__ "(), Not implemented!\n"); } -void iriap_getvalue(void) +void iriap_getvalue(void) { IRDA_DEBUG(0, __FUNCTION__ "(), Not implemented!\n"); } @@ -378,7 +375,7 @@ * name */ int iriap_getvaluebyclass_request(struct iriap_cb *self, - __u32 saddr, __u32 daddr, + __u32 saddr, __u32 daddr, char *name, char *attr) { struct sk_buff *skb; @@ -391,18 +388,18 @@ /* Client must supply the destination device address */ if (!daddr) return -1; - + self->daddr = daddr; self->saddr = saddr; - /* + /* * Save operation, so we know what the later indication is about */ - self->operation = GET_VALUE_BY_CLASS; + self->operation = GET_VALUE_BY_CLASS; /* Give ourselves 10 secs to finish this operation */ iriap_start_watchdog_timer(self, 10*HZ); - + name_len = strlen(name); /* Up to IAS_MAX_CLASSNAME = 60 */ attr_len = strlen(attr); /* Up to IAS_MAX_ATTRIBNAME = 60 */ @@ -412,7 +409,7 @@ return -ENOMEM; /* Reserve space for MUX and LAP header */ - skb_reserve(skb, self->max_header_size); + skb_reserve(skb, self->max_header_size); skb_put(skb, 3+name_len+attr_len); frame = skb->data; @@ -435,7 +432,7 @@ * to service user. * */ -void iriap_getvaluebyclass_confirm(struct iriap_cb *self, struct sk_buff *skb) +void iriap_getvaluebyclass_confirm(struct iriap_cb *self, struct sk_buff *skb) { struct ias_value *value; int charset; @@ -473,7 +470,7 @@ value = irias_new_integer_value(tmp_cpu32); /* Legal values restricted to 0x01-0x6f, page 15 irttp */ - IRDA_DEBUG(4, __FUNCTION__ "(), lsap=%d\n", value->t.integer); + IRDA_DEBUG(4, __FUNCTION__ "(), lsap=%d\n", value->t.integer); break; case IAS_STRING: charset = fp[n++]; @@ -481,16 +478,16 @@ switch (charset) { case CS_ASCII: break; -/* case CS_ISO_8859_1: */ -/* case CS_ISO_8859_2: */ -/* case CS_ISO_8859_3: */ -/* case CS_ISO_8859_4: */ -/* case CS_ISO_8859_5: */ -/* case CS_ISO_8859_6: */ -/* case CS_ISO_8859_7: */ -/* case CS_ISO_8859_8: */ -/* case CS_ISO_8859_9: */ -/* case CS_UNICODE: */ +/* case CS_ISO_8859_1: */ +/* case CS_ISO_8859_2: */ +/* case CS_ISO_8859_3: */ +/* case CS_ISO_8859_4: */ +/* case CS_ISO_8859_5: */ +/* case CS_ISO_8859_6: */ +/* case CS_ISO_8859_7: */ +/* case CS_ISO_8859_8: */ +/* case CS_ISO_8859_9: */ +/* case CS_UNICODE: */ default: IRDA_DEBUG(0, __FUNCTION__ "(), charset %s, not supported\n", @@ -504,7 +501,7 @@ } value_len = fp[n++]; IRDA_DEBUG(4, __FUNCTION__ "(), strlen=%d\n", value_len); - + /* Make sure the string is null-terminated */ fp[n+value_len] = 0x00; IRDA_DEBUG(4, "Got string %s\n", fp+n); @@ -515,7 +512,7 @@ case IAS_OCT_SEQ: value_len = be16_to_cpu(get_unaligned((__u16 *)(fp+n))); n += 2; - + /* Will truncate to IAS_MAX_OCTET_STRING bytes */ value = irias_new_octseq_value(fp+n, value_len); break; @@ -523,12 +520,12 @@ value = irias_new_missing_value(); break; } - + /* Finished, close connection! */ iriap_disconnect_request(self); /* Warning, the client might close us, so remember no to use self - * anymore after calling confirm + * anymore after calling confirm */ if (self->confirm) self->confirm(IAS_SUCCESS, obj_id, value, self->priv); @@ -543,9 +540,9 @@ * Function iriap_getvaluebyclass_response () * * Send answer back to remote LM-IAS - * + * */ -void iriap_getvaluebyclass_response(struct iriap_cb *self, __u16 obj_id, +void iriap_getvaluebyclass_response(struct iriap_cb *self, __u16 obj_id, __u8 ret_code, struct ias_value *value) { struct sk_buff *skb; @@ -563,8 +560,8 @@ /* Initialize variables */ n = 0; - /* - * We must adjust the size of the response after the length of the + /* + * We must adjust the size of the response after the length of the * value. We add 32 bytes because of the 6 bytes for the frame and * max 5 bytes for the value coding. */ @@ -573,9 +570,9 @@ return; /* Reserve space for MUX and LAP header */ - skb_reserve(skb, self->max_header_size); + skb_reserve(skb, self->max_header_size); skb_put(skb, 6); - + fp = skb->data; /* Build frame */ @@ -584,7 +581,7 @@ /* Insert list length (MSB first) */ tmp_be16 = __constant_htons(0x0001); - memcpy(fp+n, &tmp_be16, 2); n += 2; + memcpy(fp+n, &tmp_be16, 2); n += 2; /* Insert object identifier ( MSB first) */ tmp_be16 = cpu_to_be16(obj_id); @@ -601,7 +598,7 @@ case IAS_INTEGER: skb_put(skb, 5); fp[n++] = value->type; - + tmp_be32 = cpu_to_be32(value->t.integer); memcpy(fp+n, &tmp_be32, 4); n += 4; break; @@ -631,10 +628,10 @@ * getvaluebyclass is requested from peer LM-IAS * */ -void iriap_getvaluebyclass_indication(struct iriap_cb *self, +void iriap_getvaluebyclass_indication(struct iriap_cb *self, struct sk_buff *skb) { - struct ias_object *obj; + struct ias_object *obj; struct ias_attrib *attrib; int name_len; int attr_len; @@ -656,7 +653,7 @@ memcpy(name, fp+n, name_len); n+=name_len; name[name_len] = '\0'; - attr_len = fp[n++]; + attr_len = fp[n++]; memcpy(attr, fp+n, attr_len); n+=attr_len; attr[attr_len] = '\0'; @@ -665,7 +662,7 @@ IRDA_DEBUG(4, "LM-IAS: Looking up %s: %s\n", name, attr); obj = irias_find_object(name); - + if (obj == NULL) { IRDA_DEBUG(2, "LM-IAS: Object %s not found\n", name); iriap_getvaluebyclass_response(self, 0x1235, IAS_CLASS_UNKNOWN, @@ -673,7 +670,7 @@ return; } IRDA_DEBUG(4, "LM-IAS: found %s, id=%d\n", obj->name, obj->id); - + attrib = irias_find_attrib(obj, attr); if (attrib == NULL) { IRDA_DEBUG(2, "LM-IAS: Attribute %s not found\n", attr); @@ -681,11 +678,11 @@ IAS_ATTRIB_UNKNOWN, &missing); return; } - + /* We have a match; send the value. */ - iriap_getvaluebyclass_response(self, obj->id, IAS_SUCCESS, + iriap_getvaluebyclass_response(self, obj->id, IAS_SUCCESS, attrib->value); - + return; } @@ -695,7 +692,7 @@ * Currently not used * */ -void iriap_send_ack(struct iriap_cb *self) +void iriap_send_ack(struct iriap_cb *self) { struct sk_buff *skb; __u8 *frame; @@ -710,7 +707,7 @@ return; /* Reserve space for MUX and LAP header */ - skb_reserve(skb, self->max_header_size); + skb_reserve(skb, self->max_header_size); skb_put(skb, 1); frame = skb->data; @@ -727,8 +724,8 @@ ASSERT(self != NULL, return;); ASSERT(self->magic == IAS_MAGIC, return;); - ret = irlmp_connect_request(self->lsap, LSAP_IAS, - self->saddr, self->daddr, + ret = irlmp_connect_request(self->lsap, LSAP_IAS, + self->saddr, self->daddr, NULL, NULL); if (ret < 0) { IRDA_DEBUG(0, __FUNCTION__ "(), connect failed!\n"); @@ -742,22 +739,22 @@ * LSAP connection confirmed! * */ -static void iriap_connect_confirm(void *instance, void *sap, - struct qos_info *qos, __u32 max_seg_size, - __u8 max_header_size, +static void iriap_connect_confirm(void *instance, void *sap, + struct qos_info *qos, __u32 max_seg_size, + __u8 max_header_size, struct sk_buff *userdata) { struct iriap_cb *self; - + self = (struct iriap_cb *) instance; ASSERT(self != NULL, return;); ASSERT(self->magic == IAS_MAGIC, return;); ASSERT(userdata != NULL, return;); - + self->max_data_size = max_seg_size; self->max_header_size = max_header_size; - + del_timer(&self->watchdog_timer); iriap_do_client_event(self, IAP_LM_CONNECT_CONFIRM, userdata); @@ -769,9 +766,9 @@ * Remote LM-IAS is requesting connection * */ -static void iriap_connect_indication(void *instance, void *sap, +static void iriap_connect_indication(void *instance, void *sap, struct qos_info *qos, __u32 max_seg_size, - __u8 max_header_size, + __u8 max_header_size, struct sk_buff *userdata) { struct iriap_cb *self, *new; @@ -782,46 +779,46 @@ ASSERT(self != NULL, return;); ASSERT(self->magic == IAS_MAGIC, return;); - + /* Start new server */ - new = iriap_open(LSAP_IAS, IAS_SERVER, NULL, NULL); + new = iriap_open(LSAP_IAS, IAS_SERVER, NULL, NULL); if (!new) { IRDA_DEBUG(0, __FUNCTION__ "(), open failed\n"); dev_kfree_skb(userdata); return; } - + /* Now attach up the new "socket" */ new->lsap = irlmp_dup(self->lsap, new); if (!new->lsap) { IRDA_DEBUG(0, __FUNCTION__ "(), dup failed!\n"); return; } - + new->max_data_size = max_seg_size; new->max_header_size = max_header_size; /* Clean up the original one to keep it in listen state */ irlmp_listen(self->lsap); - + iriap_do_server_event(new, IAP_LM_CONNECT_INDICATION, userdata); } - + /* * Function iriap_data_indication (handle, skb) * * Receives data from connection identified by handle from IrLMP * */ -static int iriap_data_indication(void *instance, void *sap, - struct sk_buff *skb) +static int iriap_data_indication(void *instance, void *sap, + struct sk_buff *skb) { struct iriap_cb *self; __u8 *frame; __u8 opcode; - - IRDA_DEBUG(3, __FUNCTION__ "()\n"); - + + IRDA_DEBUG(3, __FUNCTION__ "()\n"); + self = (struct iriap_cb *) instance; ASSERT(self != NULL, return 0;); @@ -830,7 +827,7 @@ ASSERT(skb != NULL, return 0;); frame = skb->data; - + if (self->mode == IAS_SERVER) { /* Call server */ IRDA_DEBUG(4, __FUNCTION__ "(), Calling server!\n"); @@ -840,17 +837,17 @@ } opcode = frame[0]; if (~opcode & IAP_LST) { - WARNING(__FUNCTION__ "(), IrIAS multiframe commands or " - "results is not implemented yet!\n"); + WARNING("%s:, IrIAS multiframe commands or " + "results is not implemented yet!\n", __FUNCTION__); dev_kfree_skb(skb); return 0; } - + /* Check for ack frames since they don't contain any data */ if (opcode & IAP_ACK) { IRDA_DEBUG(0, __FUNCTION__ "() Got ack frame!\n"); dev_kfree_skb(skb); - return 0; + return 0; } opcode &= ~IAP_LST; /* Mask away LST bit */ @@ -862,7 +859,7 @@ break; case GET_VALUE_BY_CLASS: iriap_do_call_event(self, IAP_RECV_F_LST, NULL); - + switch (frame[1]) { case IAS_SUCCESS: iriap_getvaluebyclass_confirm(self, skb); @@ -872,9 +869,9 @@ /* Finished, close connection! */ iriap_disconnect_request(self); - /* + /* * Warning, the client might close us, so remember - * no to use self anymore after calling confirm + * no to use self anymore after calling confirm */ if (self->confirm) self->confirm(IAS_CLASS_UNKNOWN, 0, NULL, @@ -883,22 +880,22 @@ break; case IAS_ATTRIB_UNKNOWN: IRDA_DEBUG(1, __FUNCTION__ "(), No such attribute!\n"); - /* Finished, close connection! */ + /* Finished, close connection! */ iriap_disconnect_request(self); - /* + /* * Warning, the client might close us, so remember - * no to use self anymore after calling confirm + * no to use self anymore after calling confirm */ if (self->confirm) - self->confirm(IAS_ATTRIB_UNKNOWN, 0, NULL, + self->confirm(IAS_ATTRIB_UNKNOWN, 0, NULL, self->priv); dev_kfree_skb(skb); break; - } + } break; default: - IRDA_DEBUG(0, __FUNCTION__ "(), Unknown op-code: %02x\n", + IRDA_DEBUG(0, __FUNCTION__ "(), Unknown op-code: %02x\n", opcode); dev_kfree_skb(skb); break; @@ -927,16 +924,16 @@ opcode = fp[0]; if (~opcode & 0x80) { - WARNING(__FUNCTION__ "(), IrIAS multiframe commands or results" - "is not implemented yet!\n"); + WARNING("%s: IrIAS multiframe commands or results" + "is not implemented yet!\n", __FUNCTION__); return; } opcode &= 0x7f; /* Mask away LST bit */ - + switch (opcode) { case GET_INFO_BASE: - WARNING(__FUNCTION__ - "(), GetInfoBaseDetails not implemented yet!\n"); + WARNING("%s: GetInfoBaseDetails not implemented yet!\n", + __FUNCTION__); break; case GET_VALUE_BY_CLASS: iriap_getvaluebyclass_indication(self, skb); @@ -953,7 +950,7 @@ void iriap_watchdog_timer_expired(void *data) { struct iriap_cb *self = (struct iriap_cb *) data; - + ASSERT(self != NULL, return;); ASSERT(self->magic == IAS_MAGIC, return;); @@ -994,23 +991,23 @@ len += sprintf(buf+len, "\n"); /* List all attributes for this object */ - attrib = (struct ias_attrib *) + attrib = (struct ias_attrib *) hashbin_get_first(obj->attribs); while (attrib != NULL) { ASSERT(attrib->magic == IAS_ATTRIB_MAGIC, return 0;); len += sprintf(buf+len, " - Attribute name: \"%s\", ", attrib->name); - len += sprintf(buf+len, "value[%s]: ", + len += sprintf(buf+len, "value[%s]: ", ias_value_types[attrib->value->type]); - + switch (attrib->value->type) { case IAS_INTEGER: - len += sprintf(buf+len, "%d\n", + len += sprintf(buf+len, "%d\n", attrib->value->t.integer); break; case IAS_STRING: - len += sprintf(buf+len, "\"%s\"\n", + len += sprintf(buf+len, "\"%s\"\n", attrib->value->t.string); break; case IAS_OCT_SEQ: @@ -1020,17 +1017,17 @@ len += sprintf(buf+len, "missing\n"); break; default: - IRDA_DEBUG(0, __FUNCTION__ + IRDA_DEBUG(0, __FUNCTION__ "(), Unknown value type!\n"); return -1; } len += sprintf(buf+len, "\n"); - - attrib = (struct ias_attrib *) + + attrib = (struct ias_attrib *) hashbin_get_next(obj->attribs); } obj = (struct ias_object *) hashbin_get_next(objects); - } + } restore_flags(flags); return len;