From 0b25a610c1f4e1f9632421e10a0f4c6497ea7deb Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Sat, 27 Feb 2010 17:43:22 +0100 Subject: Staging: vt6655: 80211hdr.h: Checkpatch cleanup ERROR: do not use C99 // comments +// bit type ERROR: do not use C99 // comments +// 802.11 frame related, defined as 802.11 spec ERROR: do not use C99 // comments +//#define WLAN_RATES_MAXLEN 255 ERROR: do not use C99 // comments +//#define WLAN_WEPMAX_KEYLEN 29 ERROR: do not use C99 // comments +// Frame Type ERROR: do not use C99 // comments +// Frame Subtypes ERROR: do not use C99 // comments +// Control ERROR: do not use C99 // comments +// Data ERROR: do not use C99 // comments +// GET & SET Frame Control bit ERROR: do not use C99 // comments +// Sequence Field bit ERROR: do not use C99 // comments +// Capability Field bit ERROR: do not use C99 // comments +// GET & SET Frame Control bit ERROR: do not use C99 // comments +// Sequence Field bit ERROR: do not use C99 // comments +// Capability Field bit ERROR: do not use C99 // comments +#endif //#ifdef __BIG_ENDIAN ERROR: do not use C99 // comments +// ERP Field bit ERROR: do not use C99 // comments +// Support & Basic Rates field ERROR: do not use C99 // comments +// TIM field ERROR: do not use C99 // comments +// 3-Addr & 4-Addr ERROR: do not use C99 // comments +// IEEE ADDR ERROR: do not use C99 // comments +// 802.11 Header Format ERROR: space required after that close brace '}' +}__attribute__ ((__packed__)) ERROR: space required after that close brace '}' +}__attribute__ ((__packed__)) ERROR: space required after that close brace '}' +}__attribute__ ((__packed__)) ERROR: do not use C99 // comments +#endif // __80211HDR_H__ Signed-off-by: Andrea Gelmini diff --git a/drivers/staging/vt6655/80211hdr.h b/drivers/staging/vt6655/80211hdr.h index e5cee6f..b7b170e 100644 --- a/drivers/staging/vt6655/80211hdr.h +++ b/drivers/staging/vt6655/80211hdr.h @@ -34,7 +34,7 @@ #include "ttype.h" /*--------------------- Export Definitions -------------------------*/ -// bit type +/* bit type */ #define BIT0 0x00000001 #define BIT1 0x00000002 #define BIT2 0x00000004 @@ -80,7 +80,7 @@ #define WLAN_HDR_ADDR4_LEN 30 #define WLAN_IEHDR_LEN 2 #define WLAN_SSID_MAXLEN 32 -//#define WLAN_RATES_MAXLEN 255 +/*#define WLAN_RATES_MAXLEN 255*/ #define WLAN_RATES_MAXLEN 16 #define WLAN_RATES_MAXLEN_11B 4 #define WLAN_RSN_MAXLEN 32 @@ -106,7 +106,7 @@ #define WLAN_WEP40_KEYLEN 5 #define WLAN_WEP104_KEYLEN 13 #define WLAN_WEP232_KEYLEN 29 -//#define WLAN_WEPMAX_KEYLEN 29 +/*#define WLAN_WEPMAX_KEYLEN 29*/ #define WLAN_WEPMAX_KEYLEN 32 #define WLAN_CHALLENGE_IE_MAXLEN 255 #define WLAN_CHALLENGE_IE_LEN 130 @@ -115,7 +115,7 @@ #define WLAN_WEP_ICV_LEN 4 #define WLAN_FRAGS_MAX 16 -// Frame Type +/* Frame Type */ #define WLAN_TYPE_MGR 0x00 #define WLAN_TYPE_CTL 0x01 #define WLAN_TYPE_DATA 0x02 @@ -125,7 +125,7 @@ #define WLAN_FTYPE_DATA 0x02 -// Frame Subtypes +/* Frame Subtypes */ #define WLAN_FSTYPE_ASSOCREQ 0x00 #define WLAN_FSTYPE_ASSOCRESP 0x01 #define WLAN_FSTYPE_REASSOCREQ 0x02 @@ -139,7 +139,7 @@ #define WLAN_FSTYPE_DEAUTHEN 0x0c #define WLAN_FSTYPE_ACTION 0x0d -// Control +/* Control */ #define WLAN_FSTYPE_PSPOLL 0x0a #define WLAN_FSTYPE_RTS 0x0b #define WLAN_FSTYPE_CTS 0x0c @@ -147,7 +147,7 @@ #define WLAN_FSTYPE_CFEND 0x0e #define WLAN_FSTYPE_CFENDCFACK 0x0f -// Data +/* Data */ #define WLAN_FSTYPE_DATAONLY 0x00 #define WLAN_FSTYPE_DATA_CFACK 0x01 #define WLAN_FSTYPE_DATA_CFPOLL 0x02 @@ -160,7 +160,7 @@ #ifdef __BIG_ENDIAN -// GET & SET Frame Control bit +/* GET & SET Frame Control bit */ #define WLAN_GET_FC_PRVER(n) ((((WORD)(n) >> 8) & (BIT0 | BIT1)) #define WLAN_GET_FC_FTYPE(n) ((((WORD)(n) >> 8) & (BIT2 | BIT3)) >> 2) #define WLAN_GET_FC_FSTYPE(n) ((((WORD)(n) >> 8) & (BIT4|BIT5|BIT6|BIT7)) >> 4) @@ -173,12 +173,12 @@ #define WLAN_GET_FC_ISWEP(n) ((((WORD)(n) << 8) & (BIT14)) >> 14) #define WLAN_GET_FC_ORDER(n) ((((WORD)(n) << 8) & (BIT15)) >> 15) -// Sequence Field bit +/* Sequence Field bit */ #define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n) >> 8) & (BIT0|BIT1|BIT2|BIT3)) #define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n) >> 8) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4) -// Capability Field bit +/* Capability Field bit */ #define WLAN_GET_CAP_INFO_ESS(n) (((n) >> 8) & BIT0) #define WLAN_GET_CAP_INFO_IBSS(n) ((((n) >> 8) & BIT1) >> 1) #define WLAN_GET_CAP_INFO_CFPOLLABLE(n) ((((n) >> 8) & BIT2) >> 2) @@ -195,7 +195,7 @@ #else -// GET & SET Frame Control bit +/* GET & SET Frame Control bit */ #define WLAN_GET_FC_PRVER(n) (((WORD)(n)) & (BIT0 | BIT1)) #define WLAN_GET_FC_FTYPE(n) ((((WORD)(n)) & (BIT2 | BIT3)) >> 2) #define WLAN_GET_FC_FSTYPE(n) ((((WORD)(n)) & (BIT4|BIT5|BIT6|BIT7)) >> 4) @@ -209,12 +209,12 @@ #define WLAN_GET_FC_ORDER(n) ((((WORD)(n)) & (BIT15)) >> 15) -// Sequence Field bit +/* Sequence Field bit */ #define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n)) & (BIT0|BIT1|BIT2|BIT3)) #define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n)) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4) -// Capability Field bit +/* Capability Field bit */ #define WLAN_GET_CAP_INFO_ESS(n) ((n) & BIT0) #define WLAN_GET_CAP_INFO_IBSS(n) (((n) & BIT1) >> 1) #define WLAN_GET_CAP_INFO_CFPOLLABLE(n) (((n) & BIT2) >> 2) @@ -229,7 +229,7 @@ #define WLAN_GET_CAP_INFO_GRPACK(n) (((n) & BIT14) >> 14) -#endif //#ifdef __BIG_ENDIAN +#endif /*#ifdef __BIG_ENDIAN */ #define WLAN_SET_CAP_INFO_ESS(n) (n) @@ -261,7 +261,7 @@ #define WLAN_SET_SEQ_FRGNUM(n) ((WORD)(n)) #define WLAN_SET_SEQ_SEQNUM(n) (((WORD)(n)) << 4) -// ERP Field bit +/* ERP Field bit */ #define WLAN_GET_ERP_NONERP_PRESENT(n) ((n) & BIT0) #define WLAN_GET_ERP_USE_PROTECTION(n) (((n) & BIT1) >> 1) @@ -273,19 +273,19 @@ -// Support & Basic Rates field +/* Support & Basic Rates field */ #define WLAN_MGMT_IS_BASICRATE(b) ((b) & BIT7) #define WLAN_MGMT_GET_RATE(b) ((b) & ~BIT7) -// TIM field +/* TIM field */ #define WLAN_MGMT_IS_MULTICAST_TIM(b) ((b) & BIT0) #define WLAN_MGMT_GET_TIM_OFFSET(b) (((b) & ~BIT0) >> 1) -// 3-Addr & 4-Addr +/* 3-Addr & 4-Addr */ #define WLAN_HDR_A3_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR3_LEN) #define WLAN_HDR_A4_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR4_LEN) -// IEEE ADDR +/* IEEE ADDR */ #define IEEE_ADDR_UNIVERSAL 0x02 #define IEEE_ADDR_GROUP 0x01 @@ -293,7 +293,7 @@ typedef struct { BYTE abyAddr[6]; } IEEE_ADDR, *PIEEE_ADDR; -// 802.11 Header Format +/* 802.11 Header Format */ typedef struct tagWLAN_80211HDR_A2 { @@ -302,7 +302,7 @@ typedef struct tagWLAN_80211HDR_A2 { BYTE abyAddr1[WLAN_ADDR_LEN]; BYTE abyAddr2[WLAN_ADDR_LEN]; -}__attribute__ ((__packed__)) +} __attribute__ ((__packed__)) WLAN_80211HDR_A2, *PWLAN_80211HDR_A2; typedef struct tagWLAN_80211HDR_A3 { @@ -327,7 +327,7 @@ typedef struct tagWLAN_80211HDR_A4 { WORD wSeqCtl; BYTE abyAddr4[WLAN_ADDR_LEN]; -}__attribute__ ((__packed__)) +} __attribute__ ((__packed__)) WLAN_80211HDR_A4, *PWLAN_80211HDR_A4; @@ -348,6 +348,6 @@ typedef union tagUWLAN_80211HDR { -#endif // __80211HDR_H__ +#endif /* __80211HDR_H__ */ -- cgit v0.10.2 From a88e29cfd8e59c82cf63440117bd1d61761f0f87 Mon Sep 17 00:00:00 2001 From: Graham M Howe Date: Sat, 27 Feb 2010 09:14:22 +0000 Subject: Staging: comedi: fix 80 character line issue in 8253.h This is a patch to the 8253.h file to fix 80 character line warning found by checkpatch.pl tool Signed-off-by: Graham M Howe Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/8253.h b/drivers/staging/comedi/drivers/8253.h index 0bb35db..3eb45d4 100644 --- a/drivers/staging/comedi/drivers/8253.h +++ b/drivers/staging/comedi/drivers/8253.h @@ -214,7 +214,8 @@ static inline void i8253_cascade_ns_to_timer_2div(int i8253_osc_base, #ifndef CMDTEST /* i8254_load programs 8254 counter chip. It should also work for the 8253. - * base_address is the lowest io address for the chip (the address of counter 0). + * base_address is the lowest io address + * for the chip (the address of counter 0). * counter_number is the counter you want to load (0,1 or 2) * count is the number to load into the counter. * -- cgit v0.10.2 From de55a7a5a2f17212c8e7c9a391db8ab5b0187c43 Mon Sep 17 00:00:00 2001 From: Stewart Robertson Date: Sat, 27 Feb 2010 17:05:38 +0000 Subject: Staging: comedi: fix comments over 80 issue in usbduxfast.c This is a patch to the usbduxfast.c file that fixes comments over 80 warnings found by the checkpatch.pl tool Signed-off-by: Stewart Robertson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/usbduxfast.c b/drivers/staging/comedi/drivers/usbduxfast.c index e89b818..05b1973 100644 --- a/drivers/staging/comedi/drivers/usbduxfast.c +++ b/drivers/staging/comedi/drivers/usbduxfast.c @@ -177,8 +177,8 @@ struct usbduxfastsub_s { int16_t *insnBuffer; /* input buffer for single insn */ int ifnum; /* interface number */ struct usb_interface *interface; /* interface structure */ - struct comedi_device *comedidev; /* comedi device for the interrupt - context */ + /* comedi device for the interrupt context */ + struct comedi_device *comedidev; short int ai_cmd_running; /* asynchronous command is running */ short int ai_continous; /* continous aquisition */ long int ai_sample_count; /* number of samples to acquire */ @@ -271,7 +271,8 @@ static int usbduxfast_ai_stop(struct usbduxfastsub_s *udfs, int do_unlink) udfs->ai_cmd_running = 0; if (do_unlink) - ret = usbduxfastsub_unlink_InURBs(udfs); /* stop aquistion */ + /* stop aquistion */ + ret = usbduxfastsub_unlink_InURBs(udfs); return ret; } @@ -451,13 +452,15 @@ static int usbduxfastsub_start(struct usbduxfastsub_s *udfs) /* 7f92 to zero */ local_transfer_buffer[0] = 0; - ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), USBDUXFASTSUB_FIRMWARE, /* bRequest, "Firmware" */ - VENDOR_DIR_OUT, /* bmRequestType */ - USBDUXFASTSUB_CPUCS, /* Value */ - 0x0000, /* Index */ - local_transfer_buffer, /* address of the transfer buffer */ - 1, /* Length */ - EZTIMEOUT); /* Timeout */ + /* bRequest, "Firmware" */ + ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), USBDUXFASTSUB_FIRMWARE, + VENDOR_DIR_OUT, /* bmRequestType */ + USBDUXFASTSUB_CPUCS, /* Value */ + 0x0000, /* Index */ + /* address of the transfer buffer */ + local_transfer_buffer, + 1, /* Length */ + EZTIMEOUT); /* Timeout */ if (ret < 0) { printk("comedi_: usbduxfast_: control msg failed (start)\n"); return ret; @@ -473,7 +476,8 @@ static int usbduxfastsub_stop(struct usbduxfastsub_s *udfs) /* 7f92 to one */ local_transfer_buffer[0] = 1; - ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), USBDUXFASTSUB_FIRMWARE, /* bRequest, "Firmware" */ + /* bRequest, "Firmware" */ + ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), USBDUXFASTSUB_FIRMWARE, VENDOR_DIR_OUT, /* bmRequestType */ USBDUXFASTSUB_CPUCS, /* Value */ 0x0000, /* Index */ @@ -499,13 +503,15 @@ static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, printk(KERN_DEBUG " to addr %d, first byte=%d.\n", startAddr, local_transfer_buffer[0]); #endif - ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), USBDUXFASTSUB_FIRMWARE, /* brequest, firmware */ - VENDOR_DIR_OUT, /* bmRequestType */ - startAddr, /* value */ - 0x0000, /* index */ - local_transfer_buffer, /* our local safe buffer */ - len, /* length */ - EZTIMEOUT); /* timeout */ + /* brequest, firmware */ + ret = usb_control_msg(udfs->usbdev, usb_sndctrlpipe(udfs->usbdev, 0), USBDUXFASTSUB_FIRMWARE, + VENDOR_DIR_OUT, /* bmRequestType */ + startAddr, /* value */ + 0x0000, /* index */ + /* our local safe buffer */ + local_transfer_buffer, + len, /* length */ + EZTIMEOUT); /* timeout */ #ifdef CONFIG_COMEDI_DEBUG printk(KERN_DEBUG "comedi_: usbduxfast: result=%d\n", ret); @@ -1347,7 +1353,7 @@ static int usbduxfast_ai_insn_read(struct comedi_device *dev, #define FIRMWARE_MAX_LEN 0x2000 static int firmwareUpload(struct usbduxfastsub_s *usbduxfastsub, - const u8 * firmwareBinary, int sizeFirmware) + const u8 *firmwareBinary, int sizeFirmware) { int ret; uint8_t *fwBuf; -- cgit v0.10.2 From f681d552012bc61dedc12aace8126339fcab8d7e Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:44 +0100 Subject: Staging: rt2870: rtusb_data.c: Checkpatch cleanup drivers/staging/rt2870/common/rtusb_data.c:127: ERROR: return is not a function, parentheses are not required drivers/staging/rt2870/common/rtusb_data.c:141: ERROR: return is not a function, parentheses are not required drivers/staging/rt2870/common/rtusb_data.c:154: ERROR: space prohibited before that close parenthesis ')' drivers/staging/rt2870/common/rtusb_data.c:204: ERROR: space prohibited after that '&' (ctx:VxW) Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2870/common/rtusb_data.c b/drivers/staging/rt2870/common/rtusb_data.c index 4583764..6936886 100644 --- a/drivers/staging/rt2870/common/rtusb_data.c +++ b/drivers/staging/rt2870/common/rtusb_data.c @@ -124,7 +124,7 @@ int RTUSBFreeDescriptorRequest(struct rt_rtmp_adapter *pAd, } RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); - return (Status); + return Status; } int RTUSBFreeDescriptorRelease(struct rt_rtmp_adapter *pAd, @@ -138,7 +138,7 @@ int RTUSBFreeDescriptorRelease(struct rt_rtmp_adapter *pAd, pHTTXContext->bCurWriting = FALSE; RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); - return (NDIS_STATUS_SUCCESS); + return NDIS_STATUS_SUCCESS; } BOOLEAN RTUSBNeedQueueBackForAgg(struct rt_rtmp_adapter *pAd, u8 BulkOutPipeId) @@ -151,7 +151,7 @@ BOOLEAN RTUSBNeedQueueBackForAgg(struct rt_rtmp_adapter *pAd, u8 BulkOutPipeId) RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); if ((pHTTXContext->IRPPending == - TRUE) /*&& (pAd->TxSwQueue[BulkOutPipeId].Number == 0) */ ) { + TRUE) /*&& (pAd->TxSwQueue[BulkOutPipeId].Number == 0) */) { if ((pHTTXContext->CurWritePosition < pHTTXContext->ENextBulkOutPosition) && @@ -201,7 +201,7 @@ void RTUSBRejectPendingPackets(struct rt_rtmp_adapter *pAd) for (Index = 0; Index < 4; Index++) { NdisAcquireSpinLock(&pAd->TxSwQueueLock[Index]); while (pAd->TxSwQueue[Index].Head != NULL) { - pQueue = (struct rt_queue_header *)& (pAd->TxSwQueue[Index]); + pQueue = (struct rt_queue_header *)&(pAd->TxSwQueue[Index]); pEntry = RemoveHeadQueue(pQueue); pPacket = QUEUE_ENTRY_TO_PACKET(pEntry); RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE); -- cgit v0.10.2 From 2c300f2a65a113440f9fbd0bce7e8d446615fb03 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:45 +0100 Subject: Staging: rt2870: rtusb_io.c: Checkpatch cleanup drivers/staging/rt2870/common/rtusb_io.c:27: ERROR: code indent should use tabs where possible drivers/staging/rt2870/common/rtusb_io.c:404: ERROR: while should follow close brace '}' drivers/staging/rt2870/common/rtusb_io.c:459: ERROR: while should follow close brace '}' drivers/staging/rt2870/common/rtusb_io.c:655: ERROR: return is not a function, parentheses are not required drivers/staging/rt2870/common/rtusb_io.c:659: ERROR: return is not a function, parentheses are not required drivers/staging/rt2870/common/rtusb_io.c:669: ERROR: return is not a function, parentheses are not required drivers/staging/rt2870/common/rtusb_io.c:701: ERROR: return is not a function, parentheses are not required drivers/staging/rt2870/common/rtusb_io.c:729: ERROR: return is not a function, parentheses are not required drivers/staging/rt2870/common/rtusb_io.c:739: ERROR: return is not a function, parentheses are not required drivers/staging/rt2870/common/rtusb_io.c:770: ERROR: return is not a function, parentheses are not required drivers/staging/rt2870/common/rtusb_io.c:1412: ERROR: that open brace { should be on the previous line drivers/staging/rt2870/common/rtusb_io.c:1434: ERROR: that open brace { should be on the previous line Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c index cf0d2f5..cde38fe 100644 --- a/drivers/staging/rt2870/common/rtusb_io.c +++ b/drivers/staging/rt2870/common/rtusb_io.c @@ -24,7 +24,7 @@ * * ************************************************************************* - Module Name: + Module Name: rtusb_io.c Abstract: @@ -400,8 +400,7 @@ int RTUSBWriteBBPRegister(struct rt_rtmp_adapter *pAd, ("RTUSBWriteBBPRegister(BBP_CSR_CFG):retry count=%d!\n", i)); i++; - } - while ((i < RETRY_LIMIT) + } while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); if ((i == RETRY_LIMIT) @@ -455,8 +454,7 @@ int RTUSBWriteRFRegister(struct rt_rtmp_adapter *pAd, u32 Value) ("RTUSBWriteRFRegister(RF_CSR_CFG0):retry count=%d!\n", i)); i++; - } - while ((i < RETRY_LIMIT) + } while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))); if ((i == RETRY_LIMIT) @@ -652,11 +650,11 @@ int RTUSBEnqueueCmdFromNdis(struct rt_rtmp_adapter *pAd, } else #endif - return (NDIS_STATUS_RESOURCES); + return NDIS_STATUS_RESOURCES; status = os_alloc_mem(pAd, (u8 **) (&cmdqelmt), sizeof(struct rt_cmdqelmt)); if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) - return (NDIS_STATUS_RESOURCES); + return NDIS_STATUS_RESOURCES; cmdqelmt->buffer = NULL; if (pInformationBuffer != NULL) { @@ -666,7 +664,7 @@ int RTUSBEnqueueCmdFromNdis(struct rt_rtmp_adapter *pAd, if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL)) { kfree(cmdqelmt); - return (NDIS_STATUS_RESOURCES); + return NDIS_STATUS_RESOURCES; } else { NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, InformationBufferLength); @@ -698,7 +696,7 @@ int RTUSBEnqueueCmdFromNdis(struct rt_rtmp_adapter *pAd, } else RTUSBCMDUp(pAd); - return (NDIS_STATUS_SUCCESS); + return NDIS_STATUS_SUCCESS; } /* @@ -726,7 +724,7 @@ int RTUSBEnqueueInternalCmd(struct rt_rtmp_adapter *pAd, status = os_alloc_mem(pAd, (u8 **) & cmdqelmt, sizeof(struct rt_cmdqelmt)); if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt == NULL)) - return (NDIS_STATUS_RESOURCES); + return NDIS_STATUS_RESOURCES; NdisZeroMemory(cmdqelmt, sizeof(struct rt_cmdqelmt)); if (InformationBufferLength > 0) { @@ -736,7 +734,7 @@ int RTUSBEnqueueInternalCmd(struct rt_rtmp_adapter *pAd, if ((status != NDIS_STATUS_SUCCESS) || (cmdqelmt->buffer == NULL)) { os_free_mem(pAd, cmdqelmt); - return (NDIS_STATUS_RESOURCES); + return NDIS_STATUS_RESOURCES; } else { NdisMoveMemory(cmdqelmt->buffer, pInformationBuffer, InformationBufferLength); @@ -767,7 +765,7 @@ int RTUSBEnqueueInternalCmd(struct rt_rtmp_adapter *pAd, } else RTUSBCMDUp(pAd); } - return (NDIS_STATUS_SUCCESS); + return NDIS_STATUS_SUCCESS; } /* @@ -1071,7 +1069,7 @@ void CMDHandler(struct rt_rtmp_adapter *pAd) TXRXQ_PCNT, &MACValue); if ((MACValue & 0xf00000 - /*0x800000 */ ) == 0) + /*0x800000 */) == 0) break; Index++; RTMPusecDelay(10000); @@ -1406,15 +1404,13 @@ void CMDHandler(struct rt_rtmp_adapter *pAd) /* All transfers must be aborted or cancelled before attempting to reset the pipe. */ { u32 MACValue; - { /*while ((atomic_read(&pAd->PendingRx) > 0) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))) */ if ((pAd->PendingRx > 0) && (!RTMP_TEST_FLAG (pAd, - fRTMP_ADAPTER_NIC_NOT_EXIST))) - { + fRTMP_ADAPTER_NIC_NOT_EXIST))) { DBGPRINT_RAW (RT_DEBUG_ERROR, ("BulkIn IRP Pending!!!\n")); @@ -1424,7 +1420,6 @@ void CMDHandler(struct rt_rtmp_adapter *pAd) pAd->PendingRx = 0; } } - /* Wait 10ms before reading register. */ RTMPusecDelay(10000); ntStatus = -- cgit v0.10.2 From d24e449762facabfb00e4095247f4f027a73caf3 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:46 +0100 Subject: Staging: rt2870:: rtusb_bulk.c: Checkpatch cleanup drivers/staging/rt2870/common/rtusb_bulk.c:45: ERROR: that open brace { should be on the previous line drivers/staging/rt2870/common/rtusb_bulk.c:175: ERROR: space required before the open parenthesis '(' drivers/staging/rt2870/common/rtusb_bulk.c:179: ERROR: space required before the open parenthesis '(' drivers/staging/rt2870/common/rtusb_bulk.c:190: ERROR: "foo * bar" should be "foo *bar" drivers/staging/rt2870/common/rtusb_bulk.c:276: ERROR: space prohibited after that '&' (ctx:VxW) drivers/staging/rt2870/common/rtusb_bulk.c:278: ERROR: space prohibited after that '&' (ctx:WxW) drivers/staging/rt2870/common/rtusb_bulk.c:313: ERROR: space prohibited before that close parenthesis ')' drivers/staging/rt2870/common/rtusb_bulk.c:329: WARNING: __func__ should be used instead of gcc specific __FUNCTION__ drivers/staging/rt2870/common/rtusb_bulk.c:337: ERROR: space prohibited after that '&' (ctx:VxW) drivers/staging/rt2870/common/rtusb_bulk.c:404: WARNING: braces {} are not necessary for single statement blocks drivers/staging/rt2870/common/rtusb_bulk.c:952: WARNING: braces {} are not necessary for single statement blocks drivers/staging/rt2870/common/rtusb_bulk.c:1017: WARNING: braces {} are not necessary for single statement blocks Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2870/common/rtusb_bulk.c b/drivers/staging/rt2870/common/rtusb_bulk.c index 379780c..625b872 100644 --- a/drivers/staging/rt2870/common/rtusb_bulk.c +++ b/drivers/staging/rt2870/common/rtusb_bulk.c @@ -172,11 +172,11 @@ void RTUSBInitRxDesc(struct rt_rtmp_adapter *pAd, struct rt_rx_context *pRxConte */ #define BULK_OUT_LOCK(pLock, IrqFlags) \ - if(1 /*!(in_interrupt() & 0xffff0000)*/) \ + if (1 /*!(in_interrupt() & 0xffff0000)*/) \ RTMP_IRQ_LOCK((pLock), IrqFlags); #define BULK_OUT_UNLOCK(pLock, IrqFlags) \ - if(1 /*!(in_interrupt() & 0xffff0000)*/) \ + if (1 /*!(in_interrupt() & 0xffff0000)*/) \ RTMP_IRQ_UNLOCK((pLock), IrqFlags); void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, @@ -187,7 +187,7 @@ void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, PURB pUrb; int ret = 0; struct rt_txinfo *pTxInfo, *pLastTxInfo = NULL; - struct rt_txwi * pTxWI; + struct rt_txwi *pTxWI; unsigned long TmpBulkEndPos, ThisBulkSize; unsigned long IrqFlags = 0, IrqFlags2 = 0; u8 *pWirelessPkt, *pAppendant; @@ -273,9 +273,9 @@ void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, } do { - pTxInfo = (struct rt_txinfo *)& pWirelessPkt[TmpBulkEndPos]; + pTxInfo = (struct rt_txinfo *)&pWirelessPkt[TmpBulkEndPos]; pTxWI = - (struct rt_txwi *) & pWirelessPkt[TmpBulkEndPos + TXINFO_SIZE]; + (struct rt_txwi *)&pWirelessPkt[TmpBulkEndPos + TXINFO_SIZE]; if (pAd->bForcePrintTX == TRUE) DBGPRINT(RT_DEBUG_TRACE, @@ -310,7 +310,7 @@ void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos; break; - } else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize & 0xfffff800) != 0)) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */ ) { /* For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. */ + } else if (((pAd->BulkOutMaxPacketSize < 512) && ((ThisBulkSize & 0xfffff800) != 0)) /*|| ( (ThisBulkSize != 0) && (pTxWI->AMPDU == 0)) */) { /* For USB 1.1 or peer which didn't support AMPDU, limit the BulkOut size. */ /* For performence in b/g mode, now just check for USB 1.1 and didn't care about the APMDU or not! 2008/06/04. */ pHTTXContext->ENextBulkOutPosition = TmpBulkEndPos; @@ -326,7 +326,7 @@ void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, if (pTxInfo->QSEL != FIFO_EDCA) { DBGPRINT(RT_DEBUG_ERROR, ("%s(): ====> pTxInfo->QueueSel(%d)!= FIFO_EDCA!!!!\n", - __FUNCTION__, pTxInfo->QSEL)); + __func__, pTxInfo->QSEL)); DBGPRINT(RT_DEBUG_ERROR, ("\tCWPos=%ld, NBPos=%ld, ENBPos=%ld, bCopy=%d!\n", pHTTXContext->CurWritePosition, @@ -334,7 +334,7 @@ void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, pHTTXContext->ENextBulkOutPosition, pHTTXContext->bCopySavePad)); hex_dump("Wrong QSel Pkt:", - (u8 *)& pWirelessPkt[TmpBulkEndPos], + (u8 *)&pWirelessPkt[TmpBulkEndPos], (pHTTXContext->CurWritePosition - pHTTXContext->NextBulkOutPosition)); } @@ -401,9 +401,8 @@ void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, } while (TRUE); /* adjust the pTxInfo->USBDMANextVLD value of last pTxInfo. */ - if (pLastTxInfo) { + if (pLastTxInfo) pLastTxInfo->USBDMANextVLD = 0; - } /* We need to copy SavedPad when following condition matched! @@ -949,9 +948,8 @@ void RTUSBKickBulkOut(struct rt_rtmp_adapter *pAd) if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NEED_STOP_TX) ) { /* 2. PS-Poll frame is next */ - if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL)) { + if (RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_PSPOLL)) RTUSBBulkOutPsPoll(pAd); - } /* 5. Mlme frame is next */ else if ((RTUSB_TEST_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME)) || (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE)) { @@ -1014,9 +1012,8 @@ void RTUSBKickBulkOut(struct rt_rtmp_adapter *pAd) } } /* 8. No data avaliable */ - else { - - } + else + ; } } -- cgit v0.10.2 From e67fdbc3ed1522c2594bf5040eaaeed5027e8ccb Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:47 +0100 Subject: Staging: asus_oled: asus_oled.c: Checkpatch cleanup drivers/staging/asus_oled/asus_oled.c:774: ERROR: code indent should use tabs where possible Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/asus_oled/asus_oled.c b/drivers/staging/asus_oled/asus_oled.c index 7ebecc9..5b279fb 100644 --- a/drivers/staging/asus_oled/asus_oled.c +++ b/drivers/staging/asus_oled/asus_oled.c @@ -771,7 +771,7 @@ static struct usb_driver oled_driver = { }; static CLASS_ATTR_STRING(version, S_IRUGO, - ASUS_OLED_UNDERSCORE_NAME " " ASUS_OLED_VERSION); + ASUS_OLED_UNDERSCORE_NAME " " ASUS_OLED_VERSION); static int __init asus_oled_init(void) { -- cgit v0.10.2 From adc6ffc073274770e08e15e65bca4a2ee042170f Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:48 +0100 Subject: Staging: otus: hpfwuinit.c: Checkpatch cleanup drivers/staging/otus/hal/hpfwuinit.c:240: ERROR: spaces required around that '=' (ctx:VxV) Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpfwuinit.c b/drivers/staging/otus/hal/hpfwuinit.c index ed80ffa..5d0dccc 100644 --- a/drivers/staging/otus/hal/hpfwuinit.c +++ b/drivers/staging/otus/hal/hpfwuinit.c @@ -237,4 +237,4 @@ const u32_t zcFwImage[] = { 0x45485441, 0x38731652, 0x89ACFF91, 0xEE55D178, 0xEE000D0A, }; -const u32_t zcFwImageSize=3508; +const u32_t zcFwImageSize = 3508; -- cgit v0.10.2 From 0637fd67093c9dcad988e79445b262f4a0c5d585 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:49 +0100 Subject: Staging: otus: hpfwu.c: Checkpatch cleanup drivers/staging/otus/hal/hpfwu.c:1017: ERROR: spaces required around that '=' (ctx:VxV) Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpfwu.c b/drivers/staging/otus/hal/hpfwu.c index 2b77cba..68fabef 100644 --- a/drivers/staging/otus/hal/hpfwu.c +++ b/drivers/staging/otus/hal/hpfwu.c @@ -1014,4 +1014,4 @@ const u32_t zcFwImage[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; -const u32_t zcFwImageSize=15936; +const u32_t zcFwImageSize = 15936; -- cgit v0.10.2 From 52628626dfcb996a5d12996a15255fbe970d6e6e Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:50 +0100 Subject: Staging: otus: hpfwu_2k.c: Checkpatch cleanup drivers/staging/otus/hal/hpfwu_2k.c:1016: ERROR: spaces required around that '=' (ctx:VxV) Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpfwu_2k.c b/drivers/staging/otus/hal/hpfwu_2k.c index 94e2cac..b675d6d 100644 --- a/drivers/staging/otus/hal/hpfwu_2k.c +++ b/drivers/staging/otus/hal/hpfwu_2k.c @@ -1013,4 +1013,4 @@ const u32_t zcFwImage[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; -const u32_t zcFwImageSize=15928; +const u32_t zcFwImageSize = 15928; -- cgit v0.10.2 From ecd9fe1deddaf0cc0b8e6625659ad7e368ab5557 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:51 +0100 Subject: Staging: otus: hpani.h: Checkpatch cleanup drivers/staging/otus/hal/hpani.h:102: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpani.h:356: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpani.h:395: ERROR: do not use C99 // comments Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpani.h b/drivers/staging/otus/hal/hpani.h index 96e69af..b892413 100644 --- a/drivers/staging/otus/hal/hpani.h +++ b/drivers/staging/otus/hal/hpani.h @@ -99,8 +99,8 @@ typedef enum { ZM_HAL_ANI_PHYERR_RESET, /* reset phy error stats */ } ZM_HAL_ANI_CMD; -#define AR_PHY_COUNTMAX (3 << 22) // Max counted before intr -#define ZM_HAL_PROCESS_ANI 0x00000001 /* ANI state setup */ +#define AR_PHY_COUNTMAX (3 << 22) /* Max counted before intr */ +#define ZM_HAL_PROCESS_ANI 0x00000001 /* ANI state setup */ #define ZM_RSSI_DUMMY_MARKER 0x127 /* PHY registers in ar5416, related base and register offsets @@ -353,7 +353,7 @@ typedef enum { #define AR_PHY_CCK_DETECT 0x1C6208 #define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK 0x0000003F #define AR_PHY_CCK_DETECT_WEAK_SIG_THR_CCK_S 0 -#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME 0x00001FC0 // [12:6] settling time for antenna switch +#define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME 0x00001FC0 /* [12:6] settling time for antenna switch */ #define AR_PHY_CCK_DETECT_ANT_SWITCH_TIME_S 6 #define AR_PHY_CCK_DETECT_BB_ENABLE_ANT_FAST_DIV 0x2000 @@ -392,7 +392,6 @@ typedef enum { #define AR_PHY_TPCRG1_PD_GAIN_2_S 18 #define AR_PHY_TPCRG1_PD_GAIN_3 0x00300000 #define AR_PHY_TPCRG1_PD_GAIN_3_S 20 -// #define AR_PHY_ANALOG_SWAP 0xa268 #define AR_PHY_SWAP_ALT_CHAIN 0x00000040 -- cgit v0.10.2 From 979315513e65efd1f4b7f57726d98fea99eb5094 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:52 +0100 Subject: Staging: otus: hpfwu_OTUS_RC.c: Checkpatch cleanup drivers/staging/otus/hal/hpfwu_OTUS_RC.c:715: ERROR: spaces required around that '=' (ctx:VxV) Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpfwu_OTUS_RC.c b/drivers/staging/otus/hal/hpfwu_OTUS_RC.c index 089d3e0..accbec4 100644 --- a/drivers/staging/otus/hal/hpfwu_OTUS_RC.c +++ b/drivers/staging/otus/hal/hpfwu_OTUS_RC.c @@ -712,4 +712,4 @@ const u32_t zcFwImage[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; -const u32_t zcFwImageSize=11104; +const u32_t zcFwImageSize = 11104; -- cgit v0.10.2 From 86f3b1a8e601098066222a63f0e17d5fbe7ab5bf Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:53 +0100 Subject: Staging: otus: hpfw2.c: Checkpatch cleanup drivers/staging/otus/hal/hpfw2.c:1018: ERROR: spaces required around that '=' (ctx:VxV) Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpfw2.c b/drivers/staging/otus/hal/hpfw2.c index baceb02..17f405b 100644 --- a/drivers/staging/otus/hal/hpfw2.c +++ b/drivers/staging/otus/hal/hpfw2.c @@ -1015,4 +1015,4 @@ const u32_t zcP2FwImage[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; -const u32_t zcP2FwImageSize=15964; +const u32_t zcP2FwImageSize = 15964; -- cgit v0.10.2 From 91cc53b0c78596a73fa708cceb7313e7168bb146 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:54 +0100 Subject: Staging: otus: hpreg.c: Checkpatch cleanup drivers/staging/otus/hal/hpreg.c:33: WARNING: space prohibited between function name and open parenthesis '(' drivers/staging/otus/hal/hpreg.c:33: WARNING: space prohibited between function name and open parenthesis '(' drivers/staging/otus/hal/hpreg.c:38: CHECK: if this code is redundant consider removing it drivers/staging/otus/hal/hpreg.c:81: ERROR: need consistent spacing around '|' (ctx:VxW) drivers/staging/otus/hal/hpreg.c:96: ERROR: Macros with multiple statements should be enclosed in a do - while loop drivers/staging/otus/hal/hpreg.c:98: CHECK: if this code is redundant consider removing it drivers/staging/otus/hal/hpreg.c:275: ERROR: need consistent spacing around '|' (ctx:WxV) drivers/staging/otus/hal/hpreg.c:304: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:362: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:376: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:377: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:402: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:402: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:413: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:413: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:434: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:496: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:497: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:501: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:526: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:529: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:531: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:539: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:539: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:544: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:663: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1335: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1336: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1345: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1345: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1346: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1346: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1347: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1347: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1355: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1356: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1357: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1357: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1365: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1366: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1367: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1367: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1375: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1376: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1377: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1377: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1378: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1378: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1387: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1387: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1388: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1388: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1395: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1396: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1397: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1397: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1398: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1398: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1398: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1398: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1405: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1406: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1407: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1407: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1408: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1408: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1415: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1415: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1415: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1415: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1416: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1416: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1416: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1416: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1416: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1416: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1432: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1432: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1432: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1435: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1435: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1435: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1436: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1436: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1436: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1442: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1442: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1442: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1445: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1445: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1445: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1446: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1446: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1446: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1455: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1455: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1455: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1455: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1456: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1456: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1456: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1456: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1456: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1456: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1465: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1465: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1465: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1465: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1466: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1466: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1466: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1466: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1466: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1466: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1475: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1475: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1475: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1475: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1476: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1476: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1476: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1476: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1476: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1476: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1476: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1476: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1485: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1485: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1485: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1485: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1485: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1486: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1486: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1486: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1486: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1486: ERROR: space required before that '-' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1557: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1558: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1560: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1560: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1560: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1560: ERROR: spaces required around that '<' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1560: ERROR: spaces required around that '&&' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1562: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1568: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1574: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1579: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1590: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1590: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1590: ERROR: space required after that ';' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1590: ERROR: spaces required around that '<' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1592: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1594: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1613: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1613: ERROR: spaces required around that '<' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1635: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:1639: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1639: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1640: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:1643: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1647: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1647: WARNING: suspect code indent for conditional statements (8, 8) drivers/staging/otus/hal/hpreg.c:1649: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1652: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1652: WARNING: suspect code indent for conditional statements (8, 8) drivers/staging/otus/hal/hpreg.c:1654: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1657: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1659: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1660: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1662: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1662: ERROR: else should follow close brace '}' drivers/staging/otus/hal/hpreg.c:1664: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1671: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1674: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1675: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1676: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1676: ERROR: space required after that ',' (ctx:VxO) drivers/staging/otus/hal/hpreg.c:1676: ERROR: space required before that '*' (ctx:OxV) drivers/staging/otus/hal/hpreg.c:1676: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1678: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1681: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1682: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1682: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1683: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1684: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1685: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1686: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1687: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1690: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1692: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1693: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1694: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1695: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1695: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1696: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1696: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1697: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1697: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1698: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1698: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1699: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1700: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1700: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1701: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1702: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1702: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1703: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1706: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1707: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1708: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1710: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1711: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1712: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1713: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1714: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1714: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1717: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1719: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1720: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1721: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1722: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1722: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1723: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1723: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1724: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1724: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1725: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1725: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1726: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1726: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1727: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1728: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1728: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1729: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1730: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1730: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1731: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1734: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1735: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1735: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1736: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1737: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1738: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1739: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1740: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1743: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1744: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1744: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1745: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1746: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1747: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1748: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1749: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1752: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1755: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1755: WARNING: suspect code indent for conditional statements (16, 20) drivers/staging/otus/hal/hpreg.c:1757: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1759: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1760: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1760: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1761: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1762: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1762: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1763: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1764: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1766: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1766: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1767: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1767: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1767: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:1767: ERROR: space prohibited before that close parenthesis ')' drivers/staging/otus/hal/hpreg.c:1768: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1769: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1770: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1772: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1772: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1772: ERROR: space required after that ';' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1772: ERROR: spaces required around that '<' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1774: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1774: ERROR: space required after that ',' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1778: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1779: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1780: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1781: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1781: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1786: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1786: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1787: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1787: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1787: ERROR: spaces required around that '==' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1788: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1789: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1789: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1789: ERROR: space prohibited after that open parenthesis '(' drivers/staging/otus/hal/hpreg.c:1789: ERROR: space prohibited before that close parenthesis ')' drivers/staging/otus/hal/hpreg.c:1789: ERROR: space required before the open parenthesis '(' drivers/staging/otus/hal/hpreg.c:1790: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1791: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1792: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1793: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1794: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1795: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1796: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1797: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1798: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1799: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1799: WARNING: suspect code indent for conditional statements (40, 44) drivers/staging/otus/hal/hpreg.c:1805: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1807: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1809: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1811: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1814: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1816: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1817: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1820: ERROR: space required before the open parenthesis '(' drivers/staging/otus/hal/hpreg.c:1821: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1826: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1837: CHECK: if this code is redundant consider removing it drivers/staging/otus/hal/hpreg.c:1839: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1840: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1841: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1842: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1843: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1845: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1845: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1845: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:1845: ERROR: spaces required around that '=' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1845: ERROR: spaces required around that '<' (ctx:VxV) drivers/staging/otus/hal/hpreg.c:1846: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1847: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1848: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1849: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1850: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1851: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1852: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1853: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1854: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1861: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:1863: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1871: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:1874: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1881: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1883: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1883: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1883: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:1884: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1885: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1887: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1887: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1888: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1888: ERROR: "(foo*)" should be "(foo *)" drivers/staging/otus/hal/hpreg.c:1890: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1890: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1892: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1892: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1893: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1894: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1894: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1896: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1897: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1898: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1899: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1904: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:1908: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1909: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1915: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1916: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1917: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1917: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1919: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1920: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1922: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1922: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1923: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1923: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1923: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:1924: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1925: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1925: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1926: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1926: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1928: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1930: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1930: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1931: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1932: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1933: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1935: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1935: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1936: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1936: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1937: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1937: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1938: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1938: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1939: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1939: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1940: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1940: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1941: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1941: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1942: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1942: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1943: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1943: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1944: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1944: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1945: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1945: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1946: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1946: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1947: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1947: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1948: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1948: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1949: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1949: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1950: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1950: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1951: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1951: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1952: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1952: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1953: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1953: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1954: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1954: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1955: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1955: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1956: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1956: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1957: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1957: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1958: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1958: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1959: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1959: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1960: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1960: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1961: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1961: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1962: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1962: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1963: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1963: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1964: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1964: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1965: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1965: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1966: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1966: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1967: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1967: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1968: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1968: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1969: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1969: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1970: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1970: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1971: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1971: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1973: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1974: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1976: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:1980: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:1984: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1986: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1986: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:1986: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:1987: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1988: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1989: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:1995: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2003: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2005: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2005: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2005: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2006: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2007: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2008: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2009: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2032: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2035: ERROR: space required after that close brace '}' drivers/staging/otus/hal/hpreg.c:2039: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2041: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2041: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2042: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2045: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2047: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2048: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2050: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2050: ERROR: else should follow close brace '}' drivers/staging/otus/hal/hpreg.c:2052: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2055: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2057: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2057: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2057: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2058: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2059: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2060: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2061: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2061: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2062: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2063: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2064: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2065: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2066: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2067: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2073: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2079: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2081: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2081: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2082: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2085: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2085: ERROR: space prohibited after that open parenthesis '(' drivers/staging/otus/hal/hpreg.c:2087: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2087: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2087: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2088: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2089: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2090: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2091: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2093: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2093: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:2094: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2094: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:2096: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2098: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2098: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2098: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2099: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2100: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2101: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2102: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2103: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2105: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2111: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2117: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2119: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2119: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:2120: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2120: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2120: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2121: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2122: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2123: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2124: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2127: ERROR: return is not a function, parentheses are not required drivers/staging/otus/hal/hpreg.c:2130: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2140: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2142: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2142: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:2143: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2143: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2143: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2144: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2145: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2146: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2147: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2152: ERROR: return is not a function, parentheses are not required drivers/staging/otus/hal/hpreg.c:2155: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2160: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2162: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2162: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2162: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2163: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2164: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2165: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2171: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2181: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2183: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2183: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2183: WARNING: suspect code indent for conditional statements (8, 12) drivers/staging/otus/hal/hpreg.c:2184: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2185: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2185: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2186: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2187: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2187: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2187: WARNING: suspect code indent for conditional statements (16, 20) drivers/staging/otus/hal/hpreg.c:2188: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2189: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2190: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2191: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2192: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2193: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2193: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2193: ERROR: else should follow close brace '}' drivers/staging/otus/hal/hpreg.c:2194: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2195: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2195: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2195: WARNING: suspect code indent for conditional statements (16, 20) drivers/staging/otus/hal/hpreg.c:2196: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2197: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2198: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2199: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2200: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2201: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2212: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2216: ERROR: that open brace { should be on the previous line drivers/staging/otus/hal/hpreg.c:2218: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2219: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2220: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2221: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2222: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2223: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2224: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2225: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2226: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2227: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2228: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2229: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2230: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2231: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2232: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2233: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2234: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2235: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2235: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:2236: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2238: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2239: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2239: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:2240: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2242: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2243: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2244: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2245: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2246: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2247: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2248: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2249: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2250: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2251: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2252: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2253: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2254: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2255: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2256: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2257: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2258: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2259: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2260: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2260: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:2261: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2263: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2264: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2265: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2266: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2267: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2268: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2269: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2270: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2271: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2272: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2273: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2274: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2275: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2276: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2277: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2278: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2279: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2280: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2281: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2282: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2283: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2284: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2285: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2286: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2287: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2288: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2289: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2290: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2291: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2292: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2293: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2294: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2295: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2296: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2297: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2298: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2299: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2300: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2301: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2302: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2303: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2304: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2305: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2306: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2307: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2308: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2309: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2310: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2311: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2312: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2313: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2314: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2315: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2316: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2317: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2318: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2319: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2320: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2321: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2322: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2323: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2324: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2325: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2326: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2327: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2328: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2329: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2330: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2331: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2332: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2332: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:2333: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2335: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2336: ERROR: code indent should use tabs where possible drivers/staging/otus/hal/hpreg.c:2338: ERROR: do not use C99 // comments drivers/staging/otus/hal/hpreg.c:2343: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2345: ERROR: "foo* bar" should be "foo *bar" drivers/staging/otus/hal/hpreg.c:2348: ERROR: spaces required around that '=' (ctx:VxV) Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpreg.c b/drivers/staging/otus/hal/hpreg.c index 178777c..da3b774 100644 --- a/drivers/staging/otus/hal/hpreg.c +++ b/drivers/staging/otus/hal/hpreg.c @@ -30,7 +30,7 @@ #include "hpusb.h" /* used throughout this file... */ -#define N(a) (sizeof (a) / sizeof (a[0])) +#define N(a) (sizeof(a) / sizeof(a[0])) #define HAL_MODE_11A_TURBO HAL_MODE_108A #define HAL_MODE_11G_TURBO HAL_MODE_108G @@ -78,7 +78,7 @@ enum { }; #define MKK5GHZ_FLAG1 (DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS) -#define MKK5GHZ_FLAG2 (DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC| LIMIT_FRAME_4MS) +#define MKK5GHZ_FLAG2 (DISALLOW_ADHOC_11A | DISALLOW_ADHOC_11A_TURB | NEED_NFC | LIMIT_FRAME_4MS) typedef enum { DFS_UNINIT_DOMAIN = 0, /* Uninitialized dfs domain */ @@ -272,7 +272,7 @@ static REG_DMN_PAIR_MAPPING regDomainPairs[] = { /* MKK4 */ {MKK4_MKKB, MKK4, MKKA, MKK5GHZ_FLAG2, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA | PSCAN_MKKA_G, CTRY_JAPAN10 }, {MKK4_MKKA1, MKK4, MKKA, MKK5GHZ_FLAG1, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA1 | PSCAN_MKKA1_G, CTRY_JAPAN28 }, - {MKK4_MKKA2, MKK4, MKKA, MKK5GHZ_FLAG1, NEED_NFC, PSCAN_MKK3 |PSCAN_MKKA2 | PSCAN_MKKA2_G, CTRY_JAPAN11 }, + {MKK4_MKKA2, MKK4, MKKA, MKK5GHZ_FLAG1, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA2 | PSCAN_MKKA2_G, CTRY_JAPAN11 }, {MKK4_MKKC, MKK4, MKKC, MKK5GHZ_FLAG1, NEED_NFC, PSCAN_MKK3, CTRY_JAPAN12 }, {MKK4_FCCA, MKK4, FCCA, MKK5GHZ_FLAG1, NEED_NFC, NO_PSCAN, CTRY_JAPAN29 }, {MKK4_MKKA, MKK4, MKKA, MKK5GHZ_FLAG1, NEED_NFC, PSCAN_MKK3 | PSCAN_MKKA, CTRY_JAPAN36 }, @@ -301,7 +301,7 @@ static REG_DMN_PAIR_MAPPING regDomainPairs[] = { {MKK8_MKKA2, MKK8, MKKA, MKK5GHZ_FLAG1, NEED_NFC, PSCAN_MKK1 | PSCAN_MKK3 | PSCAN_MKKA2 | PSCAN_MKKA2_G, CTRY_JAPAN23 }, {MKK8_MKKC, MKK8, MKKC, MKK5GHZ_FLAG1, NEED_NFC, PSCAN_MKK1 | PSCAN_MKK3 , CTRY_JAPAN24 }, - /* MKK9 */ + /* MKK9 */ {MKK9_MKKA, MKK9, MKKA, MKK5GHZ_FLAG1, NEED_NFC, NO_PSCAN, CTRY_JAPAN34 }, {MKK9_FCCA, MKK9, FCCA, MKK5GHZ_FLAG1, NEED_NFC, NO_PSCAN, CTRY_JAPAN37 }, {MKK9_MKKA1, MKK9, MKKA, MKK5GHZ_FLAG1, NEED_NFC, PSCAN_MKKA1 | PSCAN_MKKA1_G, CTRY_JAPAN38 }, @@ -359,7 +359,7 @@ static REG_DMN_PAIR_MAPPING regDomainPairs[] = { #define COUNTRY_CODE_MASK 0x03ff #define CF_INTERFERENCE (CHANNEL_CW_INT | CHANNEL_RADAR_INT) #define CHANNEL_14 (2484) /* 802.11g operation is not permitted on channel 14 */ -#define IS_11G_CH14(_ch,_cf) \ +#define IS_11G_CH14(_ch, _cf) \ (((_ch) == CHANNEL_14) && ((_cf) == CHANNEL_G)) #define YES TRUE @@ -373,183 +373,183 @@ enum { typedef struct { HAL_CTRY_CODE countryCode; HAL_REG_DOMAIN regDmnEnum; - const char* isoName; - const char* name; + const char *isoName; + const char *name; HAL_BOOL allow11g; HAL_BOOL allow11aTurbo; HAL_BOOL allow11gTurbo; - HAL_BOOL allow11na; /* HT-40 allowed in 5GHz? */ - HAL_BOOL allow11ng; /* HT-40 allowed in 2GHz? */ + HAL_BOOL allow11na; /* HT-40 allowed in 5GHz? */ + HAL_BOOL allow11ng; /* HT-40 allowed in 2GHz? */ u16_t outdoorChanStart; } COUNTRY_CODE_TO_ENUM_RD; static COUNTRY_CODE_TO_ENUM_RD allCountries[] = { - {CTRY_DEBUG, NO_ENUMRD, "DB", "DEBUG", YES, YES, YES, YES, YES, 7000 }, - {CTRY_DEFAULT, DEF_REGDMN, "NA", "NO_COUNTRY_SET", YES, YES, YES, YES, YES, 7000 }, - {CTRY_ALBANIA, NULL1_WORLD, "AL", "ALBANIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_ALGERIA, NULL1_WORLD, "DZ", "ALGERIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_ARGENTINA, APL3_WORLD, "AR", "ARGENTINA", YES, NO, NO, NO, NO, 7000 }, - {CTRY_ARMENIA, ETSI4_WORLD, "AM", "ARMENIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_AUSTRALIA, FCC6_WORLD, "AU", "AUSTRALIA", YES, YES, YES, YES, YES, 7000 }, - {CTRY_AUSTRIA, ETSI2_WORLD, "AT", "AUSTRIA", YES, NO, YES, YES, YES, 7000 }, - {CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ", "AZERBAIJAN", YES, YES, YES, YES, YES, 7000 }, - {CTRY_BAHRAIN, APL6_WORLD, "BH", "BAHRAIN", YES, NO, YES, NO, YES, 7000 }, - {CTRY_BELARUS, ETSI1_WORLD, "BY", "BELARUS", YES, NO, YES, YES, YES, 7000 }, - {CTRY_BELGIUM, ETSI1_WORLD, "BE", "BELGIUM", YES, NO, YES, YES, YES, 7000 }, - {CTRY_BELIZE, APL1_ETSIC, "BZ", "BELIZE", YES, YES, YES, YES, YES, 7000 }, - {CTRY_BOLIVIA, APL1_ETSIC, "BO", "BOLVIA", YES, YES, YES, YES, YES, 7000 }, - {CTRY_BRAZIL, FCC3_WORLD, "BR", "BRAZIL", NO, NO, NO, NO, NO, 7000 }, - {CTRY_BRUNEI_DARUSSALAM,APL1_WORLD,"BN", "BRUNEI DARUSSALAM", YES, YES, YES, YES, YES, 7000 }, - {CTRY_BULGARIA, ETSI6_WORLD, "BG", "BULGARIA", YES, NO, YES, YES, YES, 7000 }, - {CTRY_CANADA, FCC6_FCCA, "CA", "CANADA", YES, YES, YES, YES, YES, 7000 }, - {CTRY_CHILE, APL6_WORLD, "CL", "CHILE", YES, YES, YES, YES, YES, 7000 }, - {CTRY_CHINA, APL1_WORLD, "CN", "CHINA", YES, YES, YES, YES, YES, 7000 }, - {CTRY_COLOMBIA, FCC1_FCCA, "CO", "COLOMBIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_COSTA_RICA, FCC1_WORLD, "CR", "COSTA RICA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_CROATIA, ETSI3_WORLD, "HR", "CROATIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_CYPRUS, ETSI3_WORLD, "CY", "CYPRUS", YES, YES, YES, YES, YES, 7000 }, - {CTRY_CZECH, ETSI3_WORLD, "CZ", "CZECH REPUBLIC", YES, NO, YES, YES, YES, 7000 }, - {CTRY_DENMARK, ETSI1_WORLD, "DK", "DENMARK", YES, NO, YES, YES, YES, 7000 }, - {CTRY_DOMINICAN_REPUBLIC,FCC1_FCCA,"DO", "DOMINICAN REPUBLIC", YES, YES, YES, YES, YES, 7000 }, - {CTRY_ECUADOR, FCC1_WORLD, "EC", "ECUADOR", YES, NO, NO, NO, YES, 7000 }, - {CTRY_EGYPT, ETSI3_WORLD, "EG", "EGYPT", YES, NO, YES, NO, YES, 7000 }, - {CTRY_EL_SALVADOR, FCC1_WORLD, "SV", "EL SALVADOR", YES, NO, YES, NO, YES, 7000 }, - {CTRY_ESTONIA, ETSI1_WORLD, "EE", "ESTONIA", YES, NO, YES, YES, YES, 7000 }, - {CTRY_FINLAND, ETSI1_WORLD, "FI", "FINLAND", YES, NO, YES, YES, YES, 7000 }, - {CTRY_FRANCE, ETSI1_WORLD, "FR", "FRANCE", YES, NO, YES, YES, YES, 7000 }, - {CTRY_FRANCE2, ETSI3_WORLD, "F2", "FRANCE_RES", YES, NO, YES, YES, YES, 7000 }, - {CTRY_GEORGIA, ETSI4_WORLD, "GE", "GEORGIA", YES, YES, YES, YES, YES, 7000 }, - {CTRY_GERMANY, ETSI1_WORLD, "DE", "GERMANY", YES, NO, YES, YES, YES, 7000 }, - {CTRY_GREECE, ETSI1_WORLD, "GR", "GREECE", YES, NO, YES, YES, YES, 7000 }, - {CTRY_GUATEMALA, FCC1_FCCA, "GT", "GUATEMALA", YES, YES, YES, YES, YES, 7000 }, - {CTRY_HONDURAS, NULL1_WORLD, "HN", "HONDURAS", YES, NO, YES, NO, YES, 7000 }, - {CTRY_HONG_KONG, FCC2_WORLD, "HK", "HONG KONG", YES, YES, YES, YES, YES, 7000 }, - {CTRY_HUNGARY, ETSI4_WORLD, "HU", "HUNGARY", YES, NO, YES, YES, YES, 7000 }, - {CTRY_ICELAND, ETSI1_WORLD, "IS", "ICELAND", YES, NO, YES, YES, YES, 7000 }, - {CTRY_INDIA, APL6_WORLD, "IN", "INDIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_INDONESIA, APL1_WORLD, "ID", "INDONESIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_IRAN, APL1_WORLD, "IR", "IRAN", YES, YES, YES, YES, YES, 7000 }, - {CTRY_IRELAND, ETSI1_WORLD, "IE", "IRELAND", YES, NO, YES, YES, YES, 7000 }, - {CTRY_ISRAEL, ETSI3_WORLD, "IL", "ISRAEL", YES, NO, YES, NO, YES, 7000 }, - {CTRY_ISRAEL2, NULL1_ETSIB, "ISR","ISRAEL_RES", YES, NO, YES, NO, YES, 7000 }, - {CTRY_ITALY, ETSI1_WORLD, "IT", "ITALY", YES, NO, YES, YES, YES, 7000 }, - {CTRY_JAMAICA, ETSI1_WORLD, "JM", "JAMAICA", YES, NO, YES, YES, YES, 7000 }, - {CTRY_JAPAN, MKK1_MKKA, "JP", "JAPAN", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN1, MKK1_MKKB, "J1", "JAPAN1", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN2, MKK1_FCCA, "J2", "JAPAN2", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN3, MKK2_MKKA, "J3", "JAPAN3", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN4, MKK1_MKKA1, "J4", "JAPAN4", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN5, MKK1_MKKA2, "J5", "JAPAN5", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN6, MKK1_MKKC, "J6", "JAPAN6", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN7, MKK3_MKKB, "J7", "JAPAN7", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN8, MKK3_MKKA2, "J8", "JAPAN8", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN9, MKK3_MKKC, "J9", "JAPAN9", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN10, MKK4_MKKB, "J10", "JAPAN10", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN11, MKK4_MKKA2, "J11", "JAPAN11", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN12, MKK4_MKKC, "J12", "JAPAN12", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN13, MKK5_MKKB, "J13", "JAPAN13", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN14, MKK5_MKKA2, "J14", "JAPAN14", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN15, MKK5_MKKC, "J15", "JAPAN15", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN16, MKK6_MKKB, "J16", "JAPAN16", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN17, MKK6_MKKA2, "J17", "JAPAN17", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN18, MKK6_MKKC, "J18", "JAPAN18", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN19, MKK7_MKKB, "J19", "JAPAN19", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN20, MKK7_MKKA, "J20", "JAPAN20", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN21, MKK7_MKKC, "J21", "JAPAN21", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN22, MKK8_MKKB, "J22", "JAPAN22", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN23, MKK8_MKKA2, "J23", "JAPAN23", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN24, MKK8_MKKC, "J24", "JAPAN24", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN25, MKK3_MKKA, "J25", "JAPAN25", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN26, MKK3_MKKA1, "J26", "JAPAN26", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN27, MKK3_FCCA, "J27", "JAPAN27", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN28, MKK4_MKKA1, "J28", "JAPAN28", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN29, MKK4_FCCA, "J29", "JAPAN29", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN30, MKK6_MKKA1, "J30", "JAPAN30", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN31, MKK6_FCCA, "J31", "JAPAN31", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN32, MKK7_MKKA1, "J32", "JAPAN32", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN33, MKK7_FCCA, "J33", "JAPAN33", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN34, MKK9_MKKA, "J34", "JAPAN34", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN35, MKK10_MKKA, "J35", "JAPAN35", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN36, MKK4_MKKA, "J36", "JAPAN36", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN37, MKK9_FCCA, "J37", "JAPAN37", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN38, MKK9_MKKA1, "J38", "JAPAN38", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN39, MKK9_MKKC, "J39", "JAPAN39", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN40, MKK10_MKKA2, "J40", "JAPAN40", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN41, MKK10_FCCA, "J41", "JAPAN41", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN42, MKK10_MKKA1, "J42", "JAPAN42", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN43, MKK10_MKKC, "J43", "JAPAN43", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN44, MKK10_MKKA2, "J44", "JAPAN44", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN45, MKK11_MKKA, "J45", "JAPAN45", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN46, MKK11_FCCA, "J46", "JAPAN46", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN47, MKK11_MKKA1, "J47", "JAPAN47", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN48, MKK11_MKKC, "J48", "JAPAN48", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN49, MKK11_MKKA2, "J49", "JAPAN49", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN50, MKK12_MKKA, "J50", "JAPAN50", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN51, MKK12_FCCA, "J51", "JAPAN51", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN52, MKK12_MKKA1, "J52", "JAPAN52", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN53, MKK12_MKKC, "J53", "JAPAN53", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JAPAN54, MKK12_MKKA2, "J54", "JAPAN54", YES, NO, NO, NO, NO, 7000 }, - {CTRY_JORDAN, ETSI2_WORLD, "JO", "JORDAN", YES, NO, YES, NO, YES, 7000 }, - {CTRY_KAZAKHSTAN, NULL1_WORLD, "KZ", "KAZAKHSTAN", YES, NO, YES, NO, YES, 7000 }, - {CTRY_KOREA_NORTH, APL9_WORLD, "KP", "NORTH KOREA", YES, NO, NO, YES, YES, 7000 }, - {CTRY_KOREA_ROC, APL9_WORLD, "KR", "KOREA REPUBLIC", YES, NO, NO, NO, NO, 7000 }, - {CTRY_KOREA_ROC2, APL2_APLD, "K2", "KOREA REPUBLIC2",YES, NO, NO, NO, NO, 7000 }, - {CTRY_KOREA_ROC3, APL9_WORLD, "K3", "KOREA REPUBLIC3",YES, NO, NO, NO, NO, 7000 }, - {CTRY_KUWAIT, NULL1_WORLD, "KW", "KUWAIT", YES, NO, YES, NO, YES, 7000 }, - {CTRY_LATVIA, ETSI1_WORLD, "LV", "LATVIA", YES, NO, YES, YES, YES, 7000 }, - {CTRY_LEBANON, NULL1_WORLD, "LB", "LEBANON", YES, NO, YES, NO, YES, 7000 }, - {CTRY_LIECHTENSTEIN,ETSI1_WORLD, "LI", "LIECHTENSTEIN", YES, NO, YES, YES, YES, 7000 }, - {CTRY_LITHUANIA, ETSI1_WORLD, "LT", "LITHUANIA", YES, NO, YES, YES, YES, 7000 }, - {CTRY_LUXEMBOURG, ETSI1_WORLD, "LU", "LUXEMBOURG", YES, NO, YES, YES, YES, 7000 }, - {CTRY_MACAU, FCC2_WORLD, "MO", "MACAU", YES, YES, YES, YES, YES, 7000 }, - {CTRY_MACEDONIA, NULL1_WORLD, "MK", "MACEDONIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_MALAYSIA, APL8_WORLD, "MY", "MALAYSIA", NO, NO, NO, NO, NO, 7000 }, - {CTRY_MALTA, ETSI1_WORLD, "MT", "MALTA", YES, NO, YES, YES, YES, 7000 }, - {CTRY_MEXICO, FCC1_FCCA, "MX", "MEXICO", YES, YES, YES, YES, YES, 7000 }, - {CTRY_MONACO, ETSI4_WORLD, "MC", "MONACO", YES, YES, YES, YES, YES, 7000 }, - {CTRY_MOROCCO, NULL1_WORLD, "MA", "MOROCCO", YES, NO, YES, NO, YES, 7000 }, - {CTRY_NETHERLANDS, ETSI1_WORLD, "NL", "NETHERLANDS", YES, NO, YES, YES, YES, 7000 }, - {CTRY_NETHERLANDS_ANT, ETSI1_WORLD, "AN", "NETHERLANDS-ANTILLES", YES, NO, YES, YES, YES, 7000 }, - {CTRY_NEW_ZEALAND, FCC2_ETSIC, "NZ", "NEW ZEALAND", YES, NO, YES, NO, YES, 7000 }, - {CTRY_NORWAY, ETSI1_WORLD, "NO", "NORWAY", YES, NO, YES, YES, YES, 7000 }, - {CTRY_OMAN, APL6_WORLD, "OM", "OMAN", YES, NO, YES, NO, YES, 7000 }, - {CTRY_PAKISTAN, NULL1_WORLD, "PK", "PAKISTAN", YES, NO, YES, NO, YES, 7000 }, - {CTRY_PANAMA, FCC1_FCCA, "PA", "PANAMA", YES, YES, YES, YES, YES, 7000 }, - {CTRY_PERU, APL1_WORLD, "PE", "PERU", YES, NO, YES, NO, YES, 7000 }, - {CTRY_PHILIPPINES, APL1_WORLD, "PH", "PHILIPPINES", YES, YES, YES, YES, YES, 7000 }, - {CTRY_POLAND, ETSI1_WORLD, "PL", "POLAND", YES, NO, YES, YES, YES, 7000 }, - {CTRY_PORTUGAL, ETSI1_WORLD, "PT", "PORTUGAL", YES, NO, YES, YES, YES, 7000 }, - {CTRY_PUERTO_RICO, FCC1_FCCA, "PR", "PUERTO RICO", YES, YES, YES, YES, YES, 7000 }, - {CTRY_QATAR, NULL1_WORLD, "QA", "QATAR", YES, NO, YES, NO, YES, 7000 }, - {CTRY_ROMANIA, NULL1_WORLD, "RO", "ROMANIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_RUSSIA, NULL1_WORLD, "RU", "RUSSIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_SAUDI_ARABIA,NULL1_WORLD, "SA", "SAUDI ARABIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_SERBIA_MONT, ETSI1_WORLD, "CS", "SERBIA & MONTENEGRO", YES, NO, YES, YES, YES, 7000 }, - {CTRY_SINGAPORE, APL6_WORLD, "SG", "SINGAPORE", YES, YES, YES, YES, YES, 7000 }, - {CTRY_SLOVAKIA, ETSI1_WORLD, "SK", "SLOVAK REPUBLIC",YES, NO, YES, YES, YES, 7000 }, - {CTRY_SLOVENIA, ETSI1_WORLD, "SI", "SLOVENIA", YES, NO, YES, YES, YES, 7000 }, - {CTRY_SOUTH_AFRICA,FCC3_WORLD, "ZA", "SOUTH AFRICA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_SPAIN, ETSI1_WORLD, "ES", "SPAIN", YES, NO, YES, YES, YES, 7000 }, - {CTRY_SRILANKA, FCC3_WORLD, "LK", "SRI LANKA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_SWEDEN, ETSI1_WORLD, "SE", "SWEDEN", YES, NO, YES, YES, YES, 7000 }, - {CTRY_SWITZERLAND, ETSI1_WORLD, "CH", "SWITZERLAND", YES, NO, YES, YES, YES, 7000 }, - {CTRY_SYRIA, NULL1_WORLD, "SY", "SYRIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_TAIWAN, APL3_FCCA, "TW", "TAIWAN", YES, YES, YES, YES, YES, 7000 }, - {CTRY_THAILAND, NULL1_WORLD, "TH", "THAILAND", YES, NO, YES, NO, YES, 7000 }, - {CTRY_TRINIDAD_Y_TOBAGO,ETSI4_WORLD,"TT", "TRINIDAD & TOBAGO", YES, NO, YES, NO, YES, 7000 }, - {CTRY_TUNISIA, ETSI3_WORLD, "TN", "TUNISIA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_TURKEY, ETSI3_WORLD, "TR", "TURKEY", YES, NO, YES, NO, YES, 7000 }, - {CTRY_UKRAINE, NULL1_WORLD, "UA", "UKRAINE", YES, NO, YES, NO, YES, 7000 }, - {CTRY_UAE, NULL1_WORLD, "AE", "UNITED ARAB EMIRATES", YES, NO, YES, NO, YES, 7000 }, - {CTRY_UNITED_KINGDOM, ETSI1_WORLD,"GB", "UNITED KINGDOM", YES, NO, YES, NO, YES, 7000 }, - {CTRY_UNITED_STATES, FCC3_FCCA, "US", "UNITED STATES", YES, YES, YES, YES, YES, 5825 }, - {CTRY_UNITED_STATES_FCC49, FCC4_FCCA, "PS", "UNITED STATES (PUBLIC SAFETY)", YES, YES, YES, YES, YES, 7000 }, - {CTRY_URUGUAY, FCC1_WORLD, "UY", "URUGUAY", YES, NO, YES, NO, YES, 7000 }, - {CTRY_UZBEKISTAN, FCC3_FCCA, "UZ", "UZBEKISTAN", YES, YES, YES, YES, YES, 7000 }, - {CTRY_VENEZUELA, APL2_ETSIC, "VE", "VENEZUELA", YES, NO, YES, NO, YES, 7000 }, - {CTRY_VIET_NAM, NULL1_WORLD, "VN", "VIET NAM", YES, NO, YES, NO, YES, 7000 }, - {CTRY_YEMEN, NULL1_WORLD, "YE", "YEMEN", YES, NO, YES, NO, YES, 7000 }, - {CTRY_ZIMBABWE, NULL1_WORLD, "ZW", "ZIMBABWE", YES, NO, YES, NO, YES, 7000 } + {CTRY_DEBUG, NO_ENUMRD, "DB", "DEBUG", YES, YES, YES, YES, YES, 7000 }, + {CTRY_DEFAULT, DEF_REGDMN, "NA", "NO_COUNTRY_SET", YES, YES, YES, YES, YES, 7000 }, + {CTRY_ALBANIA, NULL1_WORLD, "AL", "ALBANIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_ALGERIA, NULL1_WORLD, "DZ", "ALGERIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_ARGENTINA, APL3_WORLD, "AR", "ARGENTINA", YES, NO, NO, NO, NO, 7000 }, + {CTRY_ARMENIA, ETSI4_WORLD, "AM", "ARMENIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_AUSTRALIA, FCC6_WORLD, "AU", "AUSTRALIA", YES, YES, YES, YES, YES, 7000 }, + {CTRY_AUSTRIA, ETSI2_WORLD, "AT", "AUSTRIA", YES, NO, YES, YES, YES, 7000 }, + {CTRY_AZERBAIJAN, ETSI4_WORLD, "AZ", "AZERBAIJAN", YES, YES, YES, YES, YES, 7000 }, + {CTRY_BAHRAIN, APL6_WORLD, "BH", "BAHRAIN", YES, NO, YES, NO, YES, 7000 }, + {CTRY_BELARUS, ETSI1_WORLD, "BY", "BELARUS", YES, NO, YES, YES, YES, 7000 }, + {CTRY_BELGIUM, ETSI1_WORLD, "BE", "BELGIUM", YES, NO, YES, YES, YES, 7000 }, + {CTRY_BELIZE, APL1_ETSIC, "BZ", "BELIZE", YES, YES, YES, YES, YES, 7000 }, + {CTRY_BOLIVIA, APL1_ETSIC, "BO", "BOLVIA", YES, YES, YES, YES, YES, 7000 }, + {CTRY_BRAZIL, FCC3_WORLD, "BR", "BRAZIL", NO, NO, NO, NO, NO, 7000 }, + {CTRY_BRUNEI_DARUSSALAM, APL1_WORLD, "BN", "BRUNEI DARUSSALAM", YES, YES, YES, YES, YES, 7000 }, + {CTRY_BULGARIA, ETSI6_WORLD, "BG", "BULGARIA", YES, NO, YES, YES, YES, 7000 }, + {CTRY_CANADA, FCC6_FCCA, "CA", "CANADA", YES, YES, YES, YES, YES, 7000 }, + {CTRY_CHILE, APL6_WORLD, "CL", "CHILE", YES, YES, YES, YES, YES, 7000 }, + {CTRY_CHINA, APL1_WORLD, "CN", "CHINA", YES, YES, YES, YES, YES, 7000 }, + {CTRY_COLOMBIA, FCC1_FCCA, "CO", "COLOMBIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_COSTA_RICA, FCC1_WORLD, "CR", "COSTA RICA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_CROATIA, ETSI3_WORLD, "HR", "CROATIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_CYPRUS, ETSI3_WORLD, "CY", "CYPRUS", YES, YES, YES, YES, YES, 7000 }, + {CTRY_CZECH, ETSI3_WORLD, "CZ", "CZECH REPUBLIC", YES, NO, YES, YES, YES, 7000 }, + {CTRY_DENMARK, ETSI1_WORLD, "DK", "DENMARK", YES, NO, YES, YES, YES, 7000 }, + {CTRY_DOMINICAN_REPUBLIC, FCC1_FCCA, "DO", "DOMINICAN REPUBLIC", YES, YES, YES, YES, YES, 7000 }, + {CTRY_ECUADOR, FCC1_WORLD, "EC", "ECUADOR", YES, NO, NO, NO, YES, 7000 }, + {CTRY_EGYPT, ETSI3_WORLD, "EG", "EGYPT", YES, NO, YES, NO, YES, 7000 }, + {CTRY_EL_SALVADOR, FCC1_WORLD, "SV", "EL SALVADOR", YES, NO, YES, NO, YES, 7000 }, + {CTRY_ESTONIA, ETSI1_WORLD, "EE", "ESTONIA", YES, NO, YES, YES, YES, 7000 }, + {CTRY_FINLAND, ETSI1_WORLD, "FI", "FINLAND", YES, NO, YES, YES, YES, 7000 }, + {CTRY_FRANCE, ETSI1_WORLD, "FR", "FRANCE", YES, NO, YES, YES, YES, 7000 }, + {CTRY_FRANCE2, ETSI3_WORLD, "F2", "FRANCE_RES", YES, NO, YES, YES, YES, 7000 }, + {CTRY_GEORGIA, ETSI4_WORLD, "GE", "GEORGIA", YES, YES, YES, YES, YES, 7000 }, + {CTRY_GERMANY, ETSI1_WORLD, "DE", "GERMANY", YES, NO, YES, YES, YES, 7000 }, + {CTRY_GREECE, ETSI1_WORLD, "GR", "GREECE", YES, NO, YES, YES, YES, 7000 }, + {CTRY_GUATEMALA, FCC1_FCCA, "GT", "GUATEMALA", YES, YES, YES, YES, YES, 7000 }, + {CTRY_HONDURAS, NULL1_WORLD, "HN", "HONDURAS", YES, NO, YES, NO, YES, 7000 }, + {CTRY_HONG_KONG, FCC2_WORLD, "HK", "HONG KONG", YES, YES, YES, YES, YES, 7000 }, + {CTRY_HUNGARY, ETSI4_WORLD, "HU", "HUNGARY", YES, NO, YES, YES, YES, 7000 }, + {CTRY_ICELAND, ETSI1_WORLD, "IS", "ICELAND", YES, NO, YES, YES, YES, 7000 }, + {CTRY_INDIA, APL6_WORLD, "IN", "INDIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_INDONESIA, APL1_WORLD, "ID", "INDONESIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_IRAN, APL1_WORLD, "IR", "IRAN", YES, YES, YES, YES, YES, 7000 }, + {CTRY_IRELAND, ETSI1_WORLD, "IE", "IRELAND", YES, NO, YES, YES, YES, 7000 }, + {CTRY_ISRAEL, ETSI3_WORLD, "IL", "ISRAEL", YES, NO, YES, NO, YES, 7000 }, + {CTRY_ISRAEL2, NULL1_ETSIB, "ISR", "ISRAEL_RES", YES, NO, YES, NO, YES, 7000 }, + {CTRY_ITALY, ETSI1_WORLD, "IT", "ITALY", YES, NO, YES, YES, YES, 7000 }, + {CTRY_JAMAICA, ETSI1_WORLD, "JM", "JAMAICA", YES, NO, YES, YES, YES, 7000 }, + {CTRY_JAPAN, MKK1_MKKA, "JP", "JAPAN", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN1, MKK1_MKKB, "J1", "JAPAN1", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN2, MKK1_FCCA, "J2", "JAPAN2", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN3, MKK2_MKKA, "J3", "JAPAN3", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN4, MKK1_MKKA1, "J4", "JAPAN4", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN5, MKK1_MKKA2, "J5", "JAPAN5", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN6, MKK1_MKKC, "J6", "JAPAN6", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN7, MKK3_MKKB, "J7", "JAPAN7", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN8, MKK3_MKKA2, "J8", "JAPAN8", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN9, MKK3_MKKC, "J9", "JAPAN9", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN10, MKK4_MKKB, "J10", "JAPAN10", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN11, MKK4_MKKA2, "J11", "JAPAN11", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN12, MKK4_MKKC, "J12", "JAPAN12", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN13, MKK5_MKKB, "J13", "JAPAN13", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN14, MKK5_MKKA2, "J14", "JAPAN14", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN15, MKK5_MKKC, "J15", "JAPAN15", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN16, MKK6_MKKB, "J16", "JAPAN16", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN17, MKK6_MKKA2, "J17", "JAPAN17", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN18, MKK6_MKKC, "J18", "JAPAN18", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN19, MKK7_MKKB, "J19", "JAPAN19", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN20, MKK7_MKKA, "J20", "JAPAN20", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN21, MKK7_MKKC, "J21", "JAPAN21", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN22, MKK8_MKKB, "J22", "JAPAN22", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN23, MKK8_MKKA2, "J23", "JAPAN23", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN24, MKK8_MKKC, "J24", "JAPAN24", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN25, MKK3_MKKA, "J25", "JAPAN25", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN26, MKK3_MKKA1, "J26", "JAPAN26", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN27, MKK3_FCCA, "J27", "JAPAN27", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN28, MKK4_MKKA1, "J28", "JAPAN28", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN29, MKK4_FCCA, "J29", "JAPAN29", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN30, MKK6_MKKA1, "J30", "JAPAN30", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN31, MKK6_FCCA, "J31", "JAPAN31", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN32, MKK7_MKKA1, "J32", "JAPAN32", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN33, MKK7_FCCA, "J33", "JAPAN33", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN34, MKK9_MKKA, "J34", "JAPAN34", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN35, MKK10_MKKA, "J35", "JAPAN35", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN36, MKK4_MKKA, "J36", "JAPAN36", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN37, MKK9_FCCA, "J37", "JAPAN37", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN38, MKK9_MKKA1, "J38", "JAPAN38", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN39, MKK9_MKKC, "J39", "JAPAN39", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN40, MKK10_MKKA2, "J40", "JAPAN40", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN41, MKK10_FCCA, "J41", "JAPAN41", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN42, MKK10_MKKA1, "J42", "JAPAN42", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN43, MKK10_MKKC, "J43", "JAPAN43", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN44, MKK10_MKKA2, "J44", "JAPAN44", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN45, MKK11_MKKA, "J45", "JAPAN45", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN46, MKK11_FCCA, "J46", "JAPAN46", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN47, MKK11_MKKA1, "J47", "JAPAN47", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN48, MKK11_MKKC, "J48", "JAPAN48", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN49, MKK11_MKKA2, "J49", "JAPAN49", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN50, MKK12_MKKA, "J50", "JAPAN50", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN51, MKK12_FCCA, "J51", "JAPAN51", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN52, MKK12_MKKA1, "J52", "JAPAN52", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN53, MKK12_MKKC, "J53", "JAPAN53", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JAPAN54, MKK12_MKKA2, "J54", "JAPAN54", YES, NO, NO, NO, NO, 7000 }, + {CTRY_JORDAN, ETSI2_WORLD, "JO", "JORDAN", YES, NO, YES, NO, YES, 7000 }, + {CTRY_KAZAKHSTAN, NULL1_WORLD, "KZ", "KAZAKHSTAN", YES, NO, YES, NO, YES, 7000 }, + {CTRY_KOREA_NORTH, APL9_WORLD, "KP", "NORTH KOREA", YES, NO, NO, YES, YES, 7000 }, + {CTRY_KOREA_ROC, APL9_WORLD, "KR", "KOREA REPUBLIC", YES, NO, NO, NO, NO, 7000 }, + {CTRY_KOREA_ROC2, APL2_APLD, "K2", "KOREA REPUBLIC2", YES, NO, NO, NO, NO, 7000 }, + {CTRY_KOREA_ROC3, APL9_WORLD, "K3", "KOREA REPUBLIC3", YES, NO, NO, NO, NO, 7000 }, + {CTRY_KUWAIT, NULL1_WORLD, "KW", "KUWAIT", YES, NO, YES, NO, YES, 7000 }, + {CTRY_LATVIA, ETSI1_WORLD, "LV", "LATVIA", YES, NO, YES, YES, YES, 7000 }, + {CTRY_LEBANON, NULL1_WORLD, "LB", "LEBANON", YES, NO, YES, NO, YES, 7000 }, + {CTRY_LIECHTENSTEIN, ETSI1_WORLD, "LI", "LIECHTENSTEIN", YES, NO, YES, YES, YES, 7000 }, + {CTRY_LITHUANIA, ETSI1_WORLD, "LT", "LITHUANIA", YES, NO, YES, YES, YES, 7000 }, + {CTRY_LUXEMBOURG, ETSI1_WORLD, "LU", "LUXEMBOURG", YES, NO, YES, YES, YES, 7000 }, + {CTRY_MACAU, FCC2_WORLD, "MO", "MACAU", YES, YES, YES, YES, YES, 7000 }, + {CTRY_MACEDONIA, NULL1_WORLD, "MK", "MACEDONIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_MALAYSIA, APL8_WORLD, "MY", "MALAYSIA", NO, NO, NO, NO, NO, 7000 }, + {CTRY_MALTA, ETSI1_WORLD, "MT", "MALTA", YES, NO, YES, YES, YES, 7000 }, + {CTRY_MEXICO, FCC1_FCCA, "MX", "MEXICO", YES, YES, YES, YES, YES, 7000 }, + {CTRY_MONACO, ETSI4_WORLD, "MC", "MONACO", YES, YES, YES, YES, YES, 7000 }, + {CTRY_MOROCCO, NULL1_WORLD, "MA", "MOROCCO", YES, NO, YES, NO, YES, 7000 }, + {CTRY_NETHERLANDS, ETSI1_WORLD, "NL", "NETHERLANDS", YES, NO, YES, YES, YES, 7000 }, + {CTRY_NETHERLANDS_ANT, ETSI1_WORLD, "AN", "NETHERLANDS-ANTILLES", YES, NO, YES, YES, YES, 7000 }, + {CTRY_NEW_ZEALAND, FCC2_ETSIC, "NZ", "NEW ZEALAND", YES, NO, YES, NO, YES, 7000 }, + {CTRY_NORWAY, ETSI1_WORLD, "NO", "NORWAY", YES, NO, YES, YES, YES, 7000 }, + {CTRY_OMAN, APL6_WORLD, "OM", "OMAN", YES, NO, YES, NO, YES, 7000 }, + {CTRY_PAKISTAN, NULL1_WORLD, "PK", "PAKISTAN", YES, NO, YES, NO, YES, 7000 }, + {CTRY_PANAMA, FCC1_FCCA, "PA", "PANAMA", YES, YES, YES, YES, YES, 7000 }, + {CTRY_PERU, APL1_WORLD, "PE", "PERU", YES, NO, YES, NO, YES, 7000 }, + {CTRY_PHILIPPINES, APL1_WORLD, "PH", "PHILIPPINES", YES, YES, YES, YES, YES, 7000 }, + {CTRY_POLAND, ETSI1_WORLD, "PL", "POLAND", YES, NO, YES, YES, YES, 7000 }, + {CTRY_PORTUGAL, ETSI1_WORLD, "PT", "PORTUGAL", YES, NO, YES, YES, YES, 7000 }, + {CTRY_PUERTO_RICO, FCC1_FCCA, "PR", "PUERTO RICO", YES, YES, YES, YES, YES, 7000 }, + {CTRY_QATAR, NULL1_WORLD, "QA", "QATAR", YES, NO, YES, NO, YES, 7000 }, + {CTRY_ROMANIA, NULL1_WORLD, "RO", "ROMANIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_RUSSIA, NULL1_WORLD, "RU", "RUSSIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_SAUDI_ARABIA, NULL1_WORLD, "SA", "SAUDI ARABIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_SERBIA_MONT, ETSI1_WORLD, "CS", "SERBIA & MONTENEGRO", YES, NO, YES, YES, YES, 7000 }, + {CTRY_SINGAPORE, APL6_WORLD, "SG", "SINGAPORE", YES, YES, YES, YES, YES, 7000 }, + {CTRY_SLOVAKIA, ETSI1_WORLD, "SK", "SLOVAK REPUBLIC", YES, NO, YES, YES, YES, 7000 }, + {CTRY_SLOVENIA, ETSI1_WORLD, "SI", "SLOVENIA", YES, NO, YES, YES, YES, 7000 }, + {CTRY_SOUTH_AFRICA, FCC3_WORLD, "ZA", "SOUTH AFRICA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_SPAIN, ETSI1_WORLD, "ES", "SPAIN", YES, NO, YES, YES, YES, 7000 }, + {CTRY_SRILANKA, FCC3_WORLD, "LK", "SRI LANKA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_SWEDEN, ETSI1_WORLD, "SE", "SWEDEN", YES, NO, YES, YES, YES, 7000 }, + {CTRY_SWITZERLAND, ETSI1_WORLD, "CH", "SWITZERLAND", YES, NO, YES, YES, YES, 7000 }, + {CTRY_SYRIA, NULL1_WORLD, "SY", "SYRIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_TAIWAN, APL3_FCCA, "TW", "TAIWAN", YES, YES, YES, YES, YES, 7000 }, + {CTRY_THAILAND, NULL1_WORLD, "TH", "THAILAND", YES, NO, YES, NO, YES, 7000 }, + {CTRY_TRINIDAD_Y_TOBAGO, ETSI4_WORLD, "TT", "TRINIDAD & TOBAGO", YES, NO, YES, NO, YES, 7000 }, + {CTRY_TUNISIA, ETSI3_WORLD, "TN", "TUNISIA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_TURKEY, ETSI3_WORLD, "TR", "TURKEY", YES, NO, YES, NO, YES, 7000 }, + {CTRY_UKRAINE, NULL1_WORLD, "UA", "UKRAINE", YES, NO, YES, NO, YES, 7000 }, + {CTRY_UAE, NULL1_WORLD, "AE", "UNITED ARAB EMIRATES", YES, NO, YES, NO, YES, 7000 }, + {CTRY_UNITED_KINGDOM, ETSI1_WORLD, "GB", "UNITED KINGDOM", YES, NO, YES, NO, YES, 7000 }, + {CTRY_UNITED_STATES, FCC3_FCCA, "US", "UNITED STATES", YES, YES, YES, YES, YES, 5825 }, + {CTRY_UNITED_STATES_FCC49, FCC4_FCCA, "PS", "UNITED STATES (PUBLIC SAFETY)", YES, YES, YES, YES, YES, 7000 }, + {CTRY_URUGUAY, FCC1_WORLD, "UY", "URUGUAY", YES, NO, YES, NO, YES, 7000 }, + {CTRY_UZBEKISTAN, FCC3_FCCA, "UZ", "UZBEKISTAN", YES, YES, YES, YES, YES, 7000 }, + {CTRY_VENEZUELA, APL2_ETSIC, "VE", "VENEZUELA", YES, NO, YES, NO, YES, 7000 }, + {CTRY_VIET_NAM, NULL1_WORLD, "VN", "VIET NAM", YES, NO, YES, NO, YES, 7000 }, + {CTRY_YEMEN, NULL1_WORLD, "YE", "YEMEN", YES, NO, YES, NO, YES, 7000 }, + {CTRY_ZIMBABWE, NULL1_WORLD, "ZW", "ZIMBABWE", YES, NO, YES, NO, YES, 7000 } }; typedef struct RegDmnFreqBand { @@ -660,7 +660,7 @@ enum { W1_5745_5825, W1_5500_5700, W2_5260_5320, - W2_5180_5240, + W2_5180_5240, W2_5825_5825, }; @@ -1332,8 +1332,8 @@ static REG_DOMAIN regDomains[] = { BMZERO, BMZERO, BMZERO, - BM(F2_2312_2372,F2_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), - BM(G2_2312_2372,G2_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(F2_2312_2372, F2_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(G2_2312_2372, G2_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO, BMZERO}, @@ -1342,9 +1342,9 @@ static REG_DOMAIN regDomains[] = { BMZERO, BMZERO, BMZERO, - BM(F1_2457_2472,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), - BM(G1_2457_2472,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), - BM(T2_2437_2437,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(F1_2457_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(G1_2457_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(T2_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, @@ -1352,9 +1352,9 @@ static REG_DOMAIN regDomains[] = { BMZERO, BMZERO, BMZERO, - BM(F1_2432_2442,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(G1_2432_2442,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(T2_2437_2437,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(F1_2432_2442, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(G1_2432_2442, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(T2_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, @@ -1362,9 +1362,9 @@ static REG_DOMAIN regDomains[] = { BMZERO, BMZERO, BMZERO, - BM(F3_2412_2472,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(G3_2412_2472,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(T2_2437_2437,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(F3_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(G3_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(T2_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, @@ -1372,10 +1372,10 @@ static REG_DOMAIN regDomains[] = { BMZERO, BMZERO, BMZERO, - BM(F1_2412_2462,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(G1_2412_2462,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(T2_2437_2437,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), - BM(NG2_2422_2452,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(F1_2412_2462, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(G1_2412_2462, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(T2_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(NG2_2422_2452, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO}, {MKKA, MKK, NO_DFS, PSCAN_MKKA | PSCAN_MKKA_G | PSCAN_MKKA1 | PSCAN_MKKA1_G | PSCAN_MKKA2 | PSCAN_MKKA2_G, DISALLOW_ADHOC_11A_TURB, @@ -1384,36 +1384,36 @@ static REG_DOMAIN regDomains[] = { BMZERO, BM(F2_2412_2462, F1_2467_2472, F2_2484_2484, -1, -1, -1, -1, -1, -1, -1, -1, -1), BM(G2_2412_2462, G1_2467_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), - BM(T2_2437_2437,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), - BM(NG1_2422_2452,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(T2_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(NG1_2422_2452, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO}, {MKKC, MKK, NO_DFS, NO_PSCAN, NO_REQ, BMZERO, BMZERO, BMZERO, - BM(F2_2412_2472,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(G2_2412_2472,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(T2_2437_2437,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), - BM(NG1_2422_2452,-1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(F2_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(G2_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(T2_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(NG1_2422_2452, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO}, {WORLD, ETSI, NO_DFS, NO_PSCAN, NO_REQ, BMZERO, BMZERO, BMZERO, - BM(F2_2412_2472,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(G2_2412_2472,-1,-1,-1,-1,-1,-1,-1, -1, -1, -1, -1), - BM(T2_2437_2437,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), - BM(NG1_2422_2452,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(F2_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(G2_2412_2472, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(T2_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), + BM(NG1_2422_2452, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO}, {WOR0_WORLD, NO_CTL, DFS_FCC3 | DFS_ETSI, PSCAN_WWR, ADHOC_PER_11D, BM(W1_5260_5320, W1_5180_5240, W1_5170_5230, W1_5745_5825, W1_5500_5700, -1, -1, -1, -1, -1, -1, -1), BM(WT1_5210_5250, WT1_5290_5290, WT1_5760_5800, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, - BM(W1_2412_2412,W1_2437_2442,W1_2462_2462,W1_2472_2472,W1_2417_2432, W1_2447_2457, W1_2467_2467, W1_2484_2484, -1, -1, -1, -1), - BM(WG1_2412_2412,WG1_2437_2442,WG1_2462_2462,WG1_2472_2472,WG1_2417_2432,WG1_2447_2457,WG1_2467_2467, -1, -1, -1, -1, -1), + BM(W1_2412_2412, W1_2437_2442, W1_2462_2462, W1_2472_2472, W1_2417_2432, W1_2447_2457, W1_2467_2467, W1_2484_2484, -1, -1, -1, -1), + BM(WG1_2412_2412, WG1_2437_2442, WG1_2462_2462, WG1_2472_2472, WG1_2417_2432, WG1_2447_2457, WG1_2467_2467, -1, -1, -1, -1, -1), BM(T3_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, @@ -1429,21 +1429,21 @@ static REG_DOMAIN regDomains[] = { BMZERO}, {WOR02_WORLD, NO_CTL, DFS_FCC3 | DFS_ETSI, PSCAN_WWR, ADHOC_PER_11D, - BM(W1_5260_5320, W1_5180_5240,W1_5170_5230,W1_5745_5825,W1_5500_5700, -1, -1, -1, -1, -1, -1, -1), + BM(W1_5260_5320, W1_5180_5240, W1_5170_5230, W1_5745_5825, W1_5500_5700, -1, -1, -1, -1, -1, -1, -1), BM(WT1_5210_5250, WT1_5290_5290, WT1_5760_5800, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, - BM(W1_2412_2412,W1_2437_2442,W1_2462_2462, W1_2472_2472,W1_2417_2432, W1_2447_2457, W1_2467_2467, -1, -1, -1, -1, -1), - BM(WG1_2412_2412,WG1_2437_2442,WG1_2462_2462, WG1_2472_2472,WG1_2417_2432, WG1_2447_2457, WG1_2467_2467, -1, -1, -1, -1, -1), + BM(W1_2412_2412, W1_2437_2442, W1_2462_2462, W1_2472_2472, W1_2417_2432, W1_2447_2457, W1_2467_2467, -1, -1, -1, -1, -1), + BM(WG1_2412_2412, WG1_2437_2442, WG1_2462_2462, WG1_2472_2472, WG1_2417_2432, WG1_2447_2457, WG1_2467_2467, -1, -1, -1, -1, -1), BM(T3_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, {EU1_WORLD, NO_CTL, DFS_FCC3 | DFS_ETSI, PSCAN_WWR, ADHOC_PER_11D, - BM(W1_5260_5320, W1_5180_5240,W1_5170_5230,W1_5745_5825,W1_5500_5700, -1, -1, -1, -1, -1, -1, -1), + BM(W1_5260_5320, W1_5180_5240, W1_5170_5230, W1_5745_5825, W1_5500_5700, -1, -1, -1, -1, -1, -1, -1), BM(WT1_5210_5250, WT1_5290_5290, WT1_5760_5800, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, - BM(W1_2412_2412,W1_2437_2442,W1_2462_2462, W2_2472_2472,W1_2417_2432, W1_2447_2457, W2_2467_2467, -1, -1, -1, -1, -1), - BM(WG1_2412_2412,WG1_2437_2442,WG1_2462_2462, WG2_2472_2472,WG1_2417_2432, WG1_2447_2457, WG2_2467_2467, -1, -1, -1, -1, -1), + BM(W1_2412_2412, W1_2437_2442, W1_2462_2462, W2_2472_2472, W1_2417_2432, W1_2447_2457, W2_2467_2467, -1, -1, -1, -1, -1), + BM(WG1_2412_2412, WG1_2437_2442, WG1_2462_2462, WG2_2472_2472, WG1_2417_2432, WG1_2447_2457, WG2_2467_2467, -1, -1, -1, -1, -1), BM(T3_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, @@ -1452,8 +1452,8 @@ static REG_DOMAIN regDomains[] = { BM(W1_5260_5320, W1_5180_5240, W1_5170_5230, W1_5745_5825, W1_5500_5700, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO, - BM(W1_2412_2412,W1_2437_2442,W1_2462_2462,W1_2472_2472,W1_2417_2432, W1_2447_2457, W1_2467_2467, W1_2484_2484, -1, -1, -1, -1), - BM(WG1_2412_2412,WG1_2437_2442,WG1_2462_2462,WG1_2472_2472,WG1_2417_2432,WG1_2447_2457,WG1_2467_2467, -1, -1, -1, -1, -1), + BM(W1_2412_2412, W1_2437_2442, W1_2462_2462, W1_2472_2472, W1_2417_2432, W1_2447_2457, W1_2467_2467, W1_2484_2484, -1, -1, -1, -1), + BM(WG1_2412_2412, WG1_2437_2442, WG1_2462_2462, WG1_2472_2472, WG1_2417_2432, WG1_2447_2457, WG1_2467_2467, -1, -1, -1, -1, -1), BM(T3_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, @@ -1462,8 +1462,8 @@ static REG_DOMAIN regDomains[] = { BM(W1_5260_5320, W1_5180_5240, W1_5170_5230, W1_5745_5825, W1_5500_5700, -1, -1, -1, -1, -1, -1, -1), BM(WT1_5210_5250, WT1_5290_5290, WT1_5760_5800, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, - BM(W1_2412_2412,W1_2437_2442,W1_2462_2462,W1_2472_2472,W1_2417_2432, W1_2447_2457, W1_2467_2467, W1_2484_2484, -1, -1, -1, -1), - BM(WG1_2412_2412,WG1_2437_2442,WG1_2462_2462,WG1_2472_2472,WG1_2417_2432,WG1_2447_2457,WG1_2467_2467, -1, -1, -1, -1, -1), + BM(W1_2412_2412, W1_2437_2442, W1_2462_2462, W1_2472_2472, W1_2417_2432, W1_2447_2457, W1_2467_2467, W1_2484_2484, -1, -1, -1, -1), + BM(WG1_2412_2412, WG1_2437_2442, WG1_2462_2462, WG1_2472_2472, WG1_2417_2432, WG1_2447_2457, WG1_2467_2467, -1, -1, -1, -1, -1), BM(T3_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, @@ -1472,8 +1472,8 @@ static REG_DOMAIN regDomains[] = { BM(W1_5260_5320, W1_5180_5240, W1_5170_5230, W1_5745_5825, -1, -1, -1, -1, -1, -1, -1, -1), BM(WT1_5210_5250, WT1_5290_5290, WT1_5760_5800, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, - BM(W1_2412_2412,W1_2437_2442,W1_2462_2462,W1_2472_2472,W1_2417_2432, W1_2447_2457, W1_2467_2467, -1, -1, -1, -1, -1), - BM(WG1_2412_2412,WG1_2437_2442,WG1_2462_2462,WG1_2472_2472,WG1_2417_2432,WG1_2447_2457,WG1_2467_2467,-1, -1, -1, -1, -1), + BM(W1_2412_2412, W1_2437_2442, W1_2462_2462, W1_2472_2472, W1_2417_2432, W1_2447_2457, W1_2467_2467, -1, -1, -1, -1, -1), + BM(WG1_2412_2412, WG1_2437_2442, WG1_2462_2462, WG1_2472_2472, WG1_2417_2432, WG1_2447_2457, WG1_2467_2467, -1, -1, -1, -1, -1), BM(T3_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, @@ -1482,8 +1482,8 @@ static REG_DOMAIN regDomains[] = { BM(W2_5260_5320, W2_5180_5240, F2_5745_5805, W2_5825_5825, -1, -1, -1, -1, -1, -1, -1, -1), BM(WT1_5210_5250, WT1_5290_5290, WT1_5760_5800, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, - BM(W1_2412_2412,W1_2437_2442,W1_2462_2462, W1_2417_2432,W1_2447_2457,-1, -1, -1, -1, -1, -1, -1), - BM(WG1_2412_2412,WG1_2437_2442,WG1_2462_2462, WG1_2417_2432,WG1_2447_2457,-1, -1, -1, -1, -1, -1, -1), + BM(W1_2412_2412, W1_2437_2442, W1_2462_2462, W1_2417_2432, W1_2447_2457, -1, -1, -1, -1, -1, -1, -1), + BM(WG1_2412_2412, WG1_2437_2442, WG1_2462_2462, WG1_2417_2432, WG1_2447_2457, -1, -1, -1, -1, -1, -1, -1), BM(T3_2437_2437, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1), BMZERO, BMZERO}, @@ -1554,30 +1554,24 @@ static const struct cmode modes[] = { u8_t GetWmRD(u16_t regionCode, u16_t channelFlag, REG_DOMAIN *rd) { s16_t i, found, regDmn; - u64_t flags=NO_REQ; - REG_DMN_PAIR_MAPPING *regPair=NULL; + u64_t flags = NO_REQ; + REG_DMN_PAIR_MAPPING *regPair = NULL; - for (i=0, found=0; (iregDmn2GHz; flags = regPair->flags2GHz; - } - else - { + } else { regDmn = regPair->regDmn5GHz; flags = regPair->flags5GHz; } @@ -1587,19 +1581,16 @@ u8_t GetWmRD(u16_t regionCode, u16_t channelFlag, REG_DOMAIN *rd) * unitary reg domain of the pair */ - for (i=0;ipscan &= regPair->pscanMask; - rd->flags = (u32_t)flags; + rd->flags = (u32_t)flags; return TRUE; } @@ -1610,7 +1601,7 @@ u8_t isChanBitMaskZero(u64_t *bitmask) { u16_t i; - for (i=0; ihpPrivate; + zmw_get_wlan_dev(dev); + hpPriv = wd->hpPrivate; - zmw_declare_for_critical_section(); + zmw_declare_for_critical_section(); - if (!GetWmRD(regionCode, ~ZM_REG_FLAG_CHANNEL_2GHZ, &rd5GHz)) - { - zm_debug_msg1("couldn't find unitary 5GHz reg domain for Region Code ", regionCode); + if (!GetWmRD(regionCode, ~ZM_REG_FLAG_CHANNEL_2GHZ, &rd5GHz)) { + zm_debug_msg1("couldn't find unitary 5GHz reg domain for Region Code ", regionCode); return; } - if (!GetWmRD(regionCode, ZM_REG_FLAG_CHANNEL_2GHZ, &rd2GHz)) - { - zm_debug_msg1("couldn't find unitary 2GHz reg domain for Region Code ", regionCode); + if (!GetWmRD(regionCode, ZM_REG_FLAG_CHANNEL_2GHZ, &rd2GHz)) { + zm_debug_msg1("couldn't find unitary 2GHz reg domain for Region Code ", regionCode); return; } - if (wd->regulationTable.regionCode == regionCode) - { - zm_debug_msg1("current region code is the same with Region Code ", regionCode); - return; - } - else - { - wd->regulationTable.regionCode = regionCode; - } + if (wd->regulationTable.regionCode == regionCode) { + zm_debug_msg1("current region code is the same with Region Code ", regionCode); + return; + } else + wd->regulationTable.regionCode = regionCode; - next = 0; + next = 0; - zmw_enter_critical_section(dev); + zmw_enter_critical_section(dev); - for (cm = modes; cm < &modes[N(modes)]; cm++) - { + for (cm = modes; cm < &modes[N(modes)]; cm++) { u16_t c; - u64_t *channelBM=NULL; - REG_DOMAIN *rd=NULL; - REG_DMN_FREQ_BAND *fband=NULL,*freqs=NULL; + u64_t *channelBM = NULL; + REG_DOMAIN *rd = NULL; + REG_DMN_FREQ_BAND *fband = NULL, *freqs = NULL; - switch (cm->mode) - { + switch (cm->mode) { case HAL_MODE_TURBO: - //we don't have turbo mode so we disable it - //zm_debug_msg0("CWY - HAL_MODE_TURBO"); - channelBM = NULL; - //rd = &rd5GHz; - //channelBM = rd->chan11a_turbo; - //freqs = ®Dmn5GhzTurboFreq[0]; - //ctl = rd->conformanceTestLimit | CTL_TURBO; + /* we don't have turbo mode so we disable it + //zm_debug_msg0("CWY - HAL_MODE_TURBO"); */ + channelBM = NULL; + /* rd = &rd5GHz; + channelBM = rd->chan11a_turbo; + freqs = ®Dmn5GhzTurboFreq[0]; + ctl = rd->conformanceTestLimit | CTL_TURBO; */ break; case HAL_MODE_11A: - if ((hpPriv->OpFlags & 0x1) != 0) - { - rd = &rd5GHz; - channelBM = rd->chan11a; - freqs = ®Dmn5GhzFreq[0]; - c_lo = 4920; //from channel 184 - c_hi = 5825; //to channel 165 - //ctl = rd->conformanceTestLimit; - //zm_debug_msg2("CWY - HAL_MODE_11A, channelBM = 0x", *channelBM); - } - //else - { - //channelBM = NULL; - } + if ((hpPriv->OpFlags & 0x1) != 0) { + rd = &rd5GHz; + channelBM = rd->chan11a; + freqs = ®Dmn5GhzFreq[0]; + c_lo = 4920; /* from channel 184 */ + c_hi = 5825; /* to channel 165 */ + /* ctl = rd->conformanceTestLimit; + zm_debug_msg2("CWY - HAL_MODE_11A, channelBM = 0x", *channelBM); */ + } + /* else + channelBM = NULL; + */ break; case HAL_MODE_11B: - //Disable 11B mode because it only has difference with 11G in PowerDFS Data, - //and we don't use this now. - //zm_debug_msg0("CWY - HAL_MODE_11B"); + /* Disable 11B mode because it only has difference with 11G in PowerDFS Data, + and we don't use this now. + zm_debug_msg0("CWY - HAL_MODE_11B"); */ channelBM = NULL; - //rd = &rd2GHz; - //channelBM = rd->chan11b; - //freqs = ®Dmn2GhzFreq[0]; - //ctl = rd->conformanceTestLimit | CTL_11B; - //zm_debug_msg2("CWY - HAL_MODE_11B, channelBM = 0x", *channelBM); + /* rd = &rd2GHz; + channelBM = rd->chan11b; + freqs = ®Dmn2GhzFreq[0]; + ctl = rd->conformanceTestLimit | CTL_11B; + zm_debug_msg2("CWY - HAL_MODE_11B, channelBM = 0x", *channelBM); */ break; case HAL_MODE_11G: - if ((hpPriv->OpFlags & 0x2) != 0) - { - rd = &rd2GHz; - channelBM = rd->chan11g; - freqs = ®Dmn2Ghz11gFreq[0]; - c_lo = 2412; //from channel 1 - //c_hi = 2462; //to channel 11 - c_hi = 2472; //to channel 13 - //ctl = rd->conformanceTestLimit | CTL_11G; - //zm_debug_msg2("CWY - HAL_MODE_11G, channelBM = 0x", *channelBM); - } - //else - { - //channelBM = NULL; - } + if ((hpPriv->OpFlags & 0x2) != 0) { + rd = &rd2GHz; + channelBM = rd->chan11g; + freqs = ®Dmn2Ghz11gFreq[0]; + c_lo = 2412; /* from channel 1 */ + /* c_hi = 2462; to channel 11 */ + c_hi = 2472; /* to channel 13 */ + /* ctl = rd->conformanceTestLimit | CTL_11G; */ + /* zm_debug_msg2("CWY - HAL_MODE_11G, channelBM = 0x", *channelBM); */ + } + /* else + channelBM = NULL; + */ break; case HAL_MODE_11G_TURBO: - //we don't have turbo mode so we disable it - //zm_debug_msg0("CWY - HAL_MODE_11G_TURBO"); - channelBM = NULL; - //rd = &rd2GHz; - //channelBM = rd->chan11g_turbo; - //freqs = ®Dmn2Ghz11gTurboFreq[0]; - //ctl = rd->conformanceTestLimit | CTL_108G; + /* we don't have turbo mode so we disable it + zm_debug_msg0("CWY - HAL_MODE_11G_TURBO"); */ + channelBM = NULL; + /* rd = &rd2GHz; + channelBM = rd->chan11g_turbo; + freqs = ®Dmn2Ghz11gTurboFreq[0]; + ctl = rd->conformanceTestLimit | CTL_108G; */ break; case HAL_MODE_11A_TURBO: - //we don't have turbo mode so we disable it - //zm_debug_msg0("CWY - HAL_MODE_11A_TURBO"); - channelBM = NULL; - //rd = &rd5GHz; - //channelBM = rd->chan11a_dyn_turbo; - //freqs = ®Dmn5GhzTurboFreq[0]; - //ctl = rd->conformanceTestLimit | CTL_108G; + /* we don't have turbo mode so we disable it + zm_debug_msg0("CWY - HAL_MODE_11A_TURBO"); */ + channelBM = NULL; + /* rd = &rd5GHz; + channelBM = rd->chan11a_dyn_turbo; + freqs = ®Dmn5GhzTurboFreq[0]; + ctl = rd->conformanceTestLimit | CTL_108G; */ break; default: - zm_debug_msg1("Unkonwn HAL mode ", cm->mode); + zm_debug_msg1("Unkonwn HAL mode ", cm->mode); continue; } - if (channelBM == NULL) - { - //zm_debug_msg0("CWY - channelBM is NULL"); + + if (channelBM == NULL) { + /* zm_debug_msg0("CWY - channelBM is NULL"); */ continue; - } - if (isChanBitMaskZero(channelBM)) - { - //zm_debug_msg0("CWY - BitMask is Zero"); - continue; - } - - // RAY:Is it ok?? - if (freqs == NULL ) - { - continue; - } - - for (b=0;b<64*BMLEN; b++) - { - if (IS_BIT_SET(b,channelBM)) - { + } + + if (isChanBitMaskZero(channelBM)) { + /* zm_debug_msg0("CWY - BitMask is Zero"); */ + continue; + } + + /* RAY:Is it ok?? */ + if (freqs == NULL) + continue; + + for (b = 0 ; b < 64*BMLEN ; b++) { + if (IS_BIT_SET(b, channelBM)) { fband = &freqs[b]; - //zm_debug_msg1("CWY - lowChannel = ", fband->lowChannel); - //zm_debug_msg1("CWY - highChannel = ", fband->highChannel); - //zm_debug_msg1("CWY - channelSep = ", fband->channelSep); - for (c=fband->lowChannel; c <= fband->highChannel; - c += fband->channelSep) - { + /* zm_debug_msg1("CWY - lowChannel = ", fband->lowChannel); + zm_debug_msg1("CWY - highChannel = ", fband->highChannel); + zm_debug_msg1("CWY - channelSep = ", fband->channelSep); */ + for (c = fband->lowChannel; c <= fband->highChannel; + c += fband->channelSep) { ZM_HAL_CHANNEL icv; - //Disable all DFS channel - if ((hpPriv->disableDfsCh==0) || (!(fband->useDfs & rd->dfsMask))) - { - if( fband->channelBW < 20 ) - { - /**************************************************************/ - /* */ - /* Temporary discard channel that BW < 20MHz (5 or 10MHz) */ - /* Our architecture does not implemnt it !!! */ - /* */ - /**************************************************************/ - continue; - } - if ((c >= c_lo) && (c <= c_hi)) - { - icv.channel = c; - icv.channelFlags = cm->flags; - icv.maxRegTxPower = fband->powerDfs; - if (fband->usePassScan & rd->pscan) - icv.channelFlags |= ZM_REG_FLAG_CHANNEL_PASSIVE; - else - icv.channelFlags &= ~ZM_REG_FLAG_CHANNEL_PASSIVE; - if (fband->useDfs & rd->dfsMask) - icv.privFlags = ZM_REG_FLAG_CHANNEL_DFS; - else - icv.privFlags = 0; - - /* For now disable radar for FCC3 */ - if (fband->useDfs & rd->dfsMask & DFS_FCC3) - { - icv.privFlags &= ~ZM_REG_FLAG_CHANNEL_DFS; - icv.privFlags |= ZM_REG_FLAG_CHANNEL_DFS_CLEAR; - } - - if(rd->flags & LIMIT_FRAME_4MS) - icv.privFlags |= ZM_REG_FLAG_CHANNEL_DFS_CLEAR; - - icv.minTxPower = 0; - icv.maxTxPower = 0; - - zm_assert(next < 60); - - wd->regulationTable.allowChannel[next++] = icv; - } + /* Disable all DFS channel */ + if ((hpPriv->disableDfsCh == 0) || (!(fband->useDfs & rd->dfsMask))) { + if (fband->channelBW < 20) { + /**************************************************************/ + /* */ + /* Temporary discard channel that BW < 20MHz (5 or 10MHz) */ + /* Our architecture does not implemnt it !!! */ + /* */ + /**************************************************************/ + continue; + } + if ((c >= c_lo) && (c <= c_hi)) { + icv.channel = c; + icv.channelFlags = cm->flags; + icv.maxRegTxPower = fband->powerDfs; + if (fband->usePassScan & rd->pscan) + icv.channelFlags |= ZM_REG_FLAG_CHANNEL_PASSIVE; + else + icv.channelFlags &= ~ZM_REG_FLAG_CHANNEL_PASSIVE; + if (fband->useDfs & rd->dfsMask) + icv.privFlags = ZM_REG_FLAG_CHANNEL_DFS; + else + icv.privFlags = 0; + + /* For now disable radar for FCC3 */ + if (fband->useDfs & rd->dfsMask & DFS_FCC3) { + icv.privFlags &= ~ZM_REG_FLAG_CHANNEL_DFS; + icv.privFlags |= ZM_REG_FLAG_CHANNEL_DFS_CLEAR; + } + + if (rd->flags & LIMIT_FRAME_4MS) + icv.privFlags |= ZM_REG_FLAG_CHANNEL_DFS_CLEAR; + + icv.minTxPower = 0; + icv.maxTxPower = 0; + + zm_assert(next < 60); + + wd->regulationTable.allowChannel[next++] = icv; + } + } } } } } - } wd->regulationTable.allowChannelCnt = next; - #if 0 - { - /* debug print */ - u32_t i; - DbgPrint("\n-------------------------------------------\n"); - DbgPrint("zfHpGetRegulationTable print all channel info regincode = 0x%x\n", wd->regulationTable.regionCode); - DbgPrint("index channel channelFlags maxRegTxPower privFlags useDFS\n"); - - for (i=0; iregulationTable.allowChannelCnt; i++) - { - DbgPrint("%02d %d %04x %02d %x %x\n", - i, - wd->regulationTable.allowChannel[i].channel, - wd->regulationTable.allowChannel[i].channelFlags, - wd->regulationTable.allowChannel[i].maxRegTxPower, - wd->regulationTable.allowChannel[i].privFlags, - wd->regulationTable.allowChannel[i].privFlags & ZM_REG_FLAG_CHANNEL_DFS); - } - } - #endif - - zmw_leave_critical_section(dev); + #if 0 + { + /* debug print */ + u32_t i; + DbgPrint("\n-------------------------------------------\n"); + DbgPrint("zfHpGetRegulationTable print all channel info regincode = 0x%x\n", wd->regulationTable.regionCode); + DbgPrint("index channel channelFlags maxRegTxPower privFlags useDFS\n"); + + for (i = 0 ; i < wd->regulationTable.allowChannelCnt ; i++) { + DbgPrint("%02d %d %04x %02d %x %x\n", i, + wd->regulationTable.allowChannel[i].channel, + wd->regulationTable.allowChannel[i].channelFlags, + wd->regulationTable.allowChannel[i].maxRegTxPower, + wd->regulationTable.allowChannel[i].privFlags, + wd->regulationTable.allowChannel[i].privFlags & ZM_REG_FLAG_CHANNEL_DFS); + } + } + #endif + + zmw_leave_critical_section(dev); } -void zfHpGetRegulationTablefromRegionCode(zdev_t* dev, u16_t regionCode) +void zfHpGetRegulationTablefromRegionCode(zdev_t *dev, u16_t regionCode) { - u16_t c_lo = 2000, c_hi = 6000; //default channel is all enable - u8_t isoName[3] = {'N', 'A', 0}; + u16_t c_lo = 2000, c_hi = 6000; /* default channel is all enable */ + u8_t isoName[3] = {'N', 'A', 0}; - zfCoreSetIsoName(dev, isoName); + zfCoreSetIsoName(dev, isoName); - zfHpGetRegulationTable(dev, regionCode, c_lo, c_hi); + zfHpGetRegulationTable(dev, regionCode, c_lo, c_hi); } -void zfHpGetRegulationTablefromCountry(zdev_t* dev, u16_t CountryCode) +void zfHpGetRegulationTablefromCountry(zdev_t *dev, u16_t CountryCode) { - u16_t i; - u16_t c_lo = 2000, c_hi = 6000; //default channel is all enable - u16_t RegDomain; - - zmw_get_wlan_dev(dev); + u16_t i; + u16_t c_lo = 2000, c_hi = 6000; /* default channel is all enable */ + u16_t RegDomain; - zmw_declare_for_critical_section(); + zmw_get_wlan_dev(dev); - for (i = 0; i < N(allCountries); i++) - { - if (CountryCode == allCountries[i].countryCode) - { - RegDomain = allCountries[i].regDmnEnum; + zmw_declare_for_critical_section(); - // read the ACU country code from EEPROM - zfCoreSetIsoName(dev, (u8_t*)allCountries[i].isoName); + for (i = 0; i < N(allCountries); i++) { + if (CountryCode == allCountries[i].countryCode) { + RegDomain = allCountries[i].regDmnEnum; - //zm_debug_msg_s("CWY - Country Name = ", allCountries[i].name); + /* read the ACU country code from EEPROM */ + zfCoreSetIsoName(dev, (u8_t *)allCountries[i].isoName); - if (wd->regulationTable.regionCode != RegDomain) - { - //zm_debug_msg0("CWY - Change regulatory table"); + /* zm_debug_msg_s("CWY - Country Name = ", allCountries[i].name); */ - zfHpGetRegulationTable(dev, RegDomain, c_lo, c_hi); - } - return; - } - } - zm_debug_msg1("Invalid CountryCode = ", CountryCode); + if (wd->regulationTable.regionCode != RegDomain) { + /* zm_debug_msg0("CWY - Change regulatory table"); */ + zfHpGetRegulationTable(dev, RegDomain, c_lo, c_hi); + } + return; + } + } + zm_debug_msg1("Invalid CountryCode = ", CountryCode); } -u8_t zfHpGetRegulationTablefromISO(zdev_t* dev, u8_t *countryInfo, u8_t length) +u8_t zfHpGetRegulationTablefromISO(zdev_t *dev, u8_t *countryInfo, u8_t length) { - u16_t i; - u16_t RegDomain; - u16_t c_lo = 2000, c_hi = 6000; //default channel is all enable - //u8_t strLen = 2; - - zmw_get_wlan_dev(dev); - - zmw_declare_for_critical_section(); - - if (countryInfo[4] != 0x20) - { // with (I)ndoor/(O)utdoor info - //strLen = 3; - } - //zm_debug_msg_s("Desired iso name = ", isoName); - for (i = 0; i < N(allCountries); i++) - { - //zm_debug_msg_s("Current iso name = ", allCountries[i].isoName); - if (zfMemoryIsEqual((u8_t *)allCountries[i].isoName, (u8_t *)&countryInfo[2], length-1)) - { - //DbgPrint("Set current iso name = %s\n", allCountries[i].isoName); - //zm_debug_msg0("iso name hit!!"); - - RegDomain = allCountries[i].regDmnEnum; - - if (wd->regulationTable.regionCode != RegDomain) - { - zfHpGetRegulationTable(dev, RegDomain, c_lo, c_hi); - } - - //while (index < (countryInfo[1]+2)) - //{ - // if (countryInfo[index] <= 14) - // { - // /* calculate 2.4GHz low boundary channel frequency */ - // ch = countryInfo[index]; - // if ( ch == 14 ) - // c_lo = ZM_CH_G_14; - // else - // c_lo = ZM_CH_G_1 + (ch - 1) * 5; - // /* calculate 2.4GHz high boundary channel frequency */ - // ch = countryInfo[index] + countryInfo[index + 1] - 1; - // if ( ch == 14 ) - // c_hi = ZM_CH_G_14; - // else - // c_hi = ZM_CH_G_1 + (ch - 1) * 5; - // } - // else - // { - // /* calculate 5GHz low boundary channel frequency */ - // ch = countryInfo[index]; - // if ( (ch >= 184)&&(ch <= 196) ) - // c_lo = 4000 + ch*5; - // else - // c_lo = 5000 + ch*5; - // /* calculate 5GHz high boundary channel frequency */ - // ch = countryInfo[index] + countryInfo[index + 1] - 1; - // if ( (ch >= 184)&&(ch <= 196) ) - // c_hi = 4000 + ch*5; - // else - // c_hi = 5000 + ch*5; - // } - // - // zfHpGetRegulationTable(dev, RegDomain, c_lo, c_hi); - // - // index+=3; - //} - - return 0; - } - } - //zm_debug_msg_s("Invalid iso name = ", &countryInfo[2]); - return 1; + u16_t i; + u16_t RegDomain; + u16_t c_lo = 2000, c_hi = 6000; /* default channel is all enable */ + /* u8_t strLen = 2; */ + + zmw_get_wlan_dev(dev); + + zmw_declare_for_critical_section(); + + if (countryInfo[4] != 0x20) { + /* with (I)ndoor/(O)utdoor info + strLen = 3; */ + } + /* zm_debug_msg_s("Desired iso name = ", isoName); */ + for (i = 0; i < N(allCountries); i++) { + /* zm_debug_msg_s("Current iso name = ", allCountries[i].isoName); */ + if (zfMemoryIsEqual((u8_t *)allCountries[i].isoName, (u8_t *)&countryInfo[2], length-1)) { + /* DbgPrint("Set current iso name = %s\n", allCountries[i].isoName); */ + /* zm_debug_msg0("iso name hit!!"); */ + + RegDomain = allCountries[i].regDmnEnum; + + if (wd->regulationTable.regionCode != RegDomain) + zfHpGetRegulationTable(dev, RegDomain, c_lo, c_hi); + /* + while (index < (countryInfo[1]+2)) { + if (countryInfo[index] <= 14) { + // calculate 2.4GHz low boundary channel frequency + ch = countryInfo[index]; + if ( ch == 14 ) + c_lo = ZM_CH_G_14; + else + c_lo = ZM_CH_G_1 + (ch - 1) * 5; + // calculate 2.4GHz high boundary channel frequency + ch = countryInfo[index] + countryInfo[index + 1] - 1; + if ( ch == 14 ) + c_hi = ZM_CH_G_14; + else + c_hi = ZM_CH_G_1 + (ch - 1) * 5; + } else { + // calculate 5GHz low boundary channel frequency + ch = countryInfo[index]; + if ( (ch >= 184)&&(ch <= 196) ) + c_lo = 4000 + ch*5; + else + c_lo = 5000 + ch*5; + // calculate 5GHz high boundary channel frequency + ch = countryInfo[index] + countryInfo[index + 1] - 1; + if ( (ch >= 184)&&(ch <= 196) ) + c_hi = 4000 + ch*5; + else + c_hi = 5000 + ch*5; + } + + zfHpGetRegulationTable(dev, RegDomain, c_lo, c_hi); + + index+=3; + } + */ + return 0; + } + } + /* zm_debug_msg_s("Invalid iso name = ", &countryInfo[2]); */ + return 1; } -const char* zfHpGetisoNamefromregionCode(zdev_t* dev, u16_t regionCode) +const char *zfHpGetisoNamefromregionCode(zdev_t *dev, u16_t regionCode) { - u16_t i; - - for (i = 0; i < N(allCountries); i++) - { - if (allCountries[i].regDmnEnum == regionCode) - { - return allCountries[i].isoName; - } - } - /* no matching item, return default */ - return allCountries[0].isoName; + u16_t i; + + for (i = 0; i < N(allCountries); i++) { + if (allCountries[i].regDmnEnum == regionCode) + return allCountries[i].isoName; + } + /* no matching item, return default */ + return allCountries[0].isoName; } -u16_t zfHpGetRegionCodeFromIsoName(zdev_t* dev, u8_t *countryIsoName) +u16_t zfHpGetRegionCodeFromIsoName(zdev_t *dev, u8_t *countryIsoName) { - u16_t i; - u16_t regionCode; - - /* if no matching item, return default */ - regionCode = DEF_REGDMN; - - for (i = 0; i < N(allCountries); i++) - { - if (zfMemoryIsEqual((u8_t *)allCountries[i].isoName, countryIsoName, 2)) - { - regionCode = allCountries[i].regDmnEnum; - break; - } - } - - return regionCode; + u16_t i; + u16_t regionCode; + + /* if no matching item, return default */ + regionCode = DEF_REGDMN; + + for (i = 0; i < N(allCountries); i++) { + if (zfMemoryIsEqual((u8_t *)allCountries[i].isoName, countryIsoName, 2)) { + regionCode = allCountries[i].regDmnEnum; + break; + } + } + + return regionCode; } /************************************************************************/ @@ -2029,323 +1980,294 @@ u16_t zfHpGetRegionCodeFromIsoName(zdev_t* dev, u8_t *countryIsoName) /* Chao-Wen Yang ZyDAS Technology Corporation 2007.3 */ /* */ /************************************************************************/ -u16_t zfHpDeleteAllowChannel(zdev_t* dev, u16_t freq) +u16_t zfHpDeleteAllowChannel(zdev_t *dev, u16_t freq) { - u16_t i, bandIndex = 0; - u16_t dfs5GBand[][2] = {{5150, 5240}, {5260, 5350}, {5450, 5700}, {5725, 5825}}; - - zmw_get_wlan_dev(dev); - /* Find which band does this frequency belong */ - for (i = 0; i < 4; i++) - { - if ((freq >= dfs5GBand[i][0]) && (freq <= dfs5GBand[i][1])) - bandIndex = i + 1; - } - - if (bandIndex == 0) - { - /* 2.4G, don't care */ - return 0; - } - else - { - bandIndex--; - } - /* Set all channels in this band to passive scan */ - for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) - { - if ((wd->regulationTable.allowChannel[i].channel >= dfs5GBand[bandIndex][0]) && - (wd->regulationTable.allowChannel[i].channel <= dfs5GBand[bandIndex][1])) - { - /* if channel is not passive, set it to be passive and mark it */ - if ((wd->regulationTable.allowChannel[i].channelFlags & - ZM_REG_FLAG_CHANNEL_PASSIVE) == 0) - { - wd->regulationTable.allowChannel[i].channelFlags |= - (ZM_REG_FLAG_CHANNEL_PASSIVE | ZM_REG_FLAG_CHANNEL_CSA); - } - } - } - - return 0; + u16_t i, bandIndex = 0; + u16_t dfs5GBand[][2] = { {5150, 5240}, {5260, 5350}, {5450, 5700}, {5725, 5825} }; + + zmw_get_wlan_dev(dev); + /* Find which band does this frequency belong */ + for (i = 0; i < 4; i++) { + if ((freq >= dfs5GBand[i][0]) && (freq <= dfs5GBand[i][1])) + bandIndex = i + 1; + } + + if (bandIndex == 0) { + /* 2.4G, don't care */ + return 0; + } else + bandIndex--; + /* Set all channels in this band to passive scan */ + for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) { + if ((wd->regulationTable.allowChannel[i].channel >= dfs5GBand[bandIndex][0]) && + (wd->regulationTable.allowChannel[i].channel <= dfs5GBand[bandIndex][1])) { + /* if channel is not passive, set it to be passive and mark it */ + if ((wd->regulationTable.allowChannel[i].channelFlags & + ZM_REG_FLAG_CHANNEL_PASSIVE) == 0) { + wd->regulationTable.allowChannel[i].channelFlags |= + (ZM_REG_FLAG_CHANNEL_PASSIVE | ZM_REG_FLAG_CHANNEL_CSA); + } + } + } + + return 0; } -u16_t zfHpAddAllowChannel(zdev_t* dev, u16_t freq) +u16_t zfHpAddAllowChannel(zdev_t *dev, u16_t freq) { - u16_t i, j, arrayIndex; + u16_t i, j, arrayIndex; - zmw_get_wlan_dev(dev); + zmw_get_wlan_dev(dev); - for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) - { - if (wd->regulationTable.allowChannel[i].channel == freq) - break; - } + for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) { + if (wd->regulationTable.allowChannel[i].channel == freq) + break; + } - if ( i == wd->regulationTable.allowChannelCnt) - { - for (j = 0; j < wd->regulationTable.allowChannelCnt; j++) - { - if (wd->regulationTable.allowChannel[j].channel > freq) - break; - } + if (i == wd->regulationTable.allowChannelCnt) { + for (j = 0; j < wd->regulationTable.allowChannelCnt; j++) { + if (wd->regulationTable.allowChannel[j].channel > freq) + break; + } - //zm_debug_msg1("CWY - add frequency = ", freq); - //zm_debug_msg1("CWY - channel array index = ", j); + /* zm_debug_msg1("CWY - add frequency = ", freq); + zm_debug_msg1("CWY - channel array index = ", j); */ - arrayIndex = j; + arrayIndex = j; - if (arrayIndex < wd->regulationTable.allowChannelCnt) - { - for (j = wd->regulationTable.allowChannelCnt; j > arrayIndex; j--) - wd->regulationTable.allowChannel[j] = wd->regulationTable.allowChannel[j - 1]; - } - wd->regulationTable.allowChannel[arrayIndex].channel = freq; + if (arrayIndex < wd->regulationTable.allowChannelCnt) { + for (j = wd->regulationTable.allowChannelCnt; j > arrayIndex; j--) + wd->regulationTable.allowChannel[j] = wd->regulationTable.allowChannel[j - 1]; + } + wd->regulationTable.allowChannel[arrayIndex].channel = freq; - wd->regulationTable.allowChannelCnt++; - } + wd->regulationTable.allowChannelCnt++; + } - return 0; + return 0; } -u16_t zfHpIsDfsChannelNCS(zdev_t* dev, u16_t freq) +u16_t zfHpIsDfsChannelNCS(zdev_t *dev, u16_t freq) { - u8_t flag = ZM_REG_FLAG_CHANNEL_DFS; - u16_t i; - zmw_get_wlan_dev(dev); - - for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) - { - //DbgPrint("DFS:freq=%d, chan=%d", freq, wd->regulationTable.allowChannel[i].channel); - if (wd->regulationTable.allowChannel[i].channel == freq) - { - flag = wd->regulationTable.allowChannel[i].privFlags; - break; - } - } - - return (flag & (ZM_REG_FLAG_CHANNEL_DFS|ZM_REG_FLAG_CHANNEL_DFS_CLEAR)); + u8_t flag = ZM_REG_FLAG_CHANNEL_DFS; + u16_t i; + zmw_get_wlan_dev(dev); + + for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) { + /* DbgPrint("DFS:freq=%d, chan=%d", freq, wd->regulationTable.allowChannel[i].channel); */ + if (wd->regulationTable.allowChannel[i].channel == freq) { + flag = wd->regulationTable.allowChannel[i].privFlags; + break; } + } + + return flag & (ZM_REG_FLAG_CHANNEL_DFS|ZM_REG_FLAG_CHANNEL_DFS_CLEAR); } -u16_t zfHpIsDfsChannel(zdev_t* dev, u16_t freq) +u16_t zfHpIsDfsChannel(zdev_t *dev, u16_t freq) { - u8_t flag = ZM_REG_FLAG_CHANNEL_DFS; - u16_t i; - zmw_get_wlan_dev(dev); + u8_t flag = ZM_REG_FLAG_CHANNEL_DFS; + u16_t i; + zmw_get_wlan_dev(dev); - zmw_declare_for_critical_section(); + zmw_declare_for_critical_section(); - zmw_enter_critical_section(dev); + zmw_enter_critical_section(dev); - for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) - { - //DbgPrint("DFS:freq=%d, chan=%d", freq, wd->regulationTable.allowChannel[i].channel); - if (wd->regulationTable.allowChannel[i].channel == freq) - { - flag = wd->regulationTable.allowChannel[i].privFlags; - break; - } - } + for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) { + /* DbgPrint("DFS:freq=%d, chan=%d", freq, wd->regulationTable.allowChannel[i].channel); */ + if (wd->regulationTable.allowChannel[i].channel == freq) { + flag = wd->regulationTable.allowChannel[i].privFlags; + break; + } + } - zmw_leave_critical_section(dev); + zmw_leave_critical_section(dev); - return (flag & (ZM_REG_FLAG_CHANNEL_DFS|ZM_REG_FLAG_CHANNEL_DFS_CLEAR)); + return flag & (ZM_REG_FLAG_CHANNEL_DFS|ZM_REG_FLAG_CHANNEL_DFS_CLEAR); } -u16_t zfHpIsAllowedChannel(zdev_t* dev, u16_t freq) +u16_t zfHpIsAllowedChannel(zdev_t *dev, u16_t freq) { - u16_t i; - zmw_get_wlan_dev(dev); - - for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) - { - if (wd->regulationTable.allowChannel[i].channel == freq) - { - return 1; - } - } - - return 0; + u16_t i; + zmw_get_wlan_dev(dev); + + for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) { + if (wd->regulationTable.allowChannel[i].channel == freq) + return 1; + } + + return 0; } -u16_t zfHpFindFirstNonDfsChannel(zdev_t* dev, u16_t aBand) +u16_t zfHpFindFirstNonDfsChannel(zdev_t *dev, u16_t aBand) { - u16_t chan = 2412; - u16_t i; - zmw_get_wlan_dev(dev); - - zmw_declare_for_critical_section(); - - zmw_enter_critical_section(dev); - - for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) - { - if ((wd->regulationTable.allowChannel[i].privFlags & ZM_REG_FLAG_CHANNEL_DFS) != 0) - { - if (aBand) - { - if (wd->regulationTable.allowChannel[i].channel > 3000) - { - chan = wd->regulationTable.allowChannel[i].channel; - break; - } - } - else - { - if (wd->regulationTable.allowChannel[i].channel < 3000) - { - chan = wd->regulationTable.allowChannel[i].channel; - break; - } - } - } - } - - zmw_leave_critical_section(dev); - - return chan; + u16_t chan = 2412; + u16_t i; + zmw_get_wlan_dev(dev); + + zmw_declare_for_critical_section(); + + zmw_enter_critical_section(dev); + + for (i = 0; i < wd->regulationTable.allowChannelCnt; i++) { + if ((wd->regulationTable.allowChannel[i].privFlags & ZM_REG_FLAG_CHANNEL_DFS) != 0) { + if (aBand) { + if (wd->regulationTable.allowChannel[i].channel > 3000) { + chan = wd->regulationTable.allowChannel[i].channel; + break; + } + } else { + if (wd->regulationTable.allowChannel[i].channel < 3000) { + chan = wd->regulationTable.allowChannel[i].channel; + break; + } + } + } + } + + zmw_leave_critical_section(dev); + + return chan; } /* porting from ACU */ /* save RegulatoryDomain in hpriv */ -u8_t zfHpGetRegulatoryDomain(zdev_t* dev) +u8_t zfHpGetRegulatoryDomain(zdev_t *dev) { - zmw_get_wlan_dev(dev); - - switch (wd->regulationTable.regionCode) - { - case NO_ENUMRD: - return 0; - break; - case FCC1_FCCA: - case FCC1_WORLD: - case FCC4_FCCA: - case FCC5_FCCA: - case FCC2_WORLD: - case FCC2_ETSIC: - case FCC3_FCCA: - case FCC3_WORLD: - case FCC1: - case FCC2: - case FCC3: - case FCC4: - case FCC5: - case FCCA: - return 0x10;//WG_AMERICAS DOT11_REG_DOMAIN_FCC United States - break; - - case FCC2_FCCA: - return 0x20;//DOT11_REG_DOMAIN_DOC Canada - break; - - case ETSI1_WORLD: - case ETSI3_ETSIA: - case ETSI2_WORLD: - case ETSI3_WORLD: - case ETSI4_WORLD: - case ETSI4_ETSIC: - case ETSI5_WORLD: - case ETSI6_WORLD: - case ETSI_RESERVED: - case ETSI1: - case ETSI2: - case ETSI3: - case ETSI4: - case ETSI5: - case ETSI6: - case ETSIA: - case ETSIB: - case ETSIC: - return 0x30;//WG_EMEA DOT11_REG_DOMAIN_ETSI Most of Europe - break; - - case MKK1_MKKA: - case MKK1_MKKB: - case MKK2_MKKA: - case MKK1_FCCA: - case MKK1_MKKA1: - case MKK1_MKKA2: - case MKK1_MKKC: - case MKK3_MKKB: - case MKK3_MKKA2: - case MKK3_MKKC: - case MKK4_MKKB: - case MKK4_MKKA2: - case MKK4_MKKC: - case MKK5_MKKB: - case MKK5_MKKA2: - case MKK5_MKKC: - case MKK6_MKKB: - case MKK6_MKKA2: - case MKK6_MKKC: - case MKK7_MKKB: - case MKK7_MKKA: - case MKK7_MKKC: - case MKK8_MKKB: - case MKK8_MKKA2: - case MKK8_MKKC: - case MKK6_MKKA1: - case MKK6_FCCA: - case MKK7_MKKA1: - case MKK7_FCCA: - case MKK9_FCCA: - case MKK9_MKKA1: - case MKK9_MKKC: - case MKK9_MKKA2: - case MKK10_FCCA: - case MKK10_MKKA1: - case MKK10_MKKC: - case MKK10_MKKA2: - case MKK11_MKKA: - case MKK11_FCCA: - case MKK11_MKKA1: - case MKK11_MKKC: - case MKK11_MKKA2: - case MKK12_MKKA: - case MKK12_FCCA: - case MKK12_MKKA1: - case MKK12_MKKC: - case MKK12_MKKA2: - case MKK3_MKKA: - case MKK3_MKKA1: - case MKK3_FCCA: - case MKK4_MKKA: - case MKK4_MKKA1: - case MKK4_FCCA: - case MKK9_MKKA: - case MKK10_MKKA: - case MKK1: - case MKK2: - case MKK3: - case MKK4: - case MKK5: - case MKK6: - case MKK7: - case MKK8: - case MKK9: - case MKK10: - case MKK11: - case MKK12: - case MKKA: - case MKKC: - return 0x40;//WG_JAPAN DOT11_REG_DOMAIN_MKK Japan - break; - - default: - break; - } - return 0xFF;// Didn't input RegDmn by mean to distinguish by customer + zmw_get_wlan_dev(dev); + + switch (wd->regulationTable.regionCode) { + case NO_ENUMRD: + return 0; + break; + case FCC1_FCCA: + case FCC1_WORLD: + case FCC4_FCCA: + case FCC5_FCCA: + case FCC2_WORLD: + case FCC2_ETSIC: + case FCC3_FCCA: + case FCC3_WORLD: + case FCC1: + case FCC2: + case FCC3: + case FCC4: + case FCC5: + case FCCA: + return 0x10;/* WG_AMERICAS DOT11_REG_DOMAIN_FCC United States */ + break; + + case FCC2_FCCA: + return 0x20;/* DOT11_REG_DOMAIN_DOC Canada */ + break; + + case ETSI1_WORLD: + case ETSI3_ETSIA: + case ETSI2_WORLD: + case ETSI3_WORLD: + case ETSI4_WORLD: + case ETSI4_ETSIC: + case ETSI5_WORLD: + case ETSI6_WORLD: + case ETSI_RESERVED: + case ETSI1: + case ETSI2: + case ETSI3: + case ETSI4: + case ETSI5: + case ETSI6: + case ETSIA: + case ETSIB: + case ETSIC: + return 0x30;/* WG_EMEA DOT11_REG_DOMAIN_ETSI Most of Europe */ + break; + + case MKK1_MKKA: + case MKK1_MKKB: + case MKK2_MKKA: + case MKK1_FCCA: + case MKK1_MKKA1: + case MKK1_MKKA2: + case MKK1_MKKC: + case MKK3_MKKB: + case MKK3_MKKA2: + case MKK3_MKKC: + case MKK4_MKKB: + case MKK4_MKKA2: + case MKK4_MKKC: + case MKK5_MKKB: + case MKK5_MKKA2: + case MKK5_MKKC: + case MKK6_MKKB: + case MKK6_MKKA2: + case MKK6_MKKC: + case MKK7_MKKB: + case MKK7_MKKA: + case MKK7_MKKC: + case MKK8_MKKB: + case MKK8_MKKA2: + case MKK8_MKKC: + case MKK6_MKKA1: + case MKK6_FCCA: + case MKK7_MKKA1: + case MKK7_FCCA: + case MKK9_FCCA: + case MKK9_MKKA1: + case MKK9_MKKC: + case MKK9_MKKA2: + case MKK10_FCCA: + case MKK10_MKKA1: + case MKK10_MKKC: + case MKK10_MKKA2: + case MKK11_MKKA: + case MKK11_FCCA: + case MKK11_MKKA1: + case MKK11_MKKC: + case MKK11_MKKA2: + case MKK12_MKKA: + case MKK12_FCCA: + case MKK12_MKKA1: + case MKK12_MKKC: + case MKK12_MKKA2: + case MKK3_MKKA: + case MKK3_MKKA1: + case MKK3_FCCA: + case MKK4_MKKA: + case MKK4_MKKA1: + case MKK4_FCCA: + case MKK9_MKKA: + case MKK10_MKKA: + case MKK1: + case MKK2: + case MKK3: + case MKK4: + case MKK5: + case MKK6: + case MKK7: + case MKK8: + case MKK9: + case MKK10: + case MKK11: + case MKK12: + case MKKA: + case MKKC: + return 0x40;/* WG_JAPAN DOT11_REG_DOMAIN_MKK Japan */ + break; + + default: + break; + } + return 0xFF; /* Didn't input RegDmn by mean to distinguish by customer */ } - -void zfHpDisableDfsChannel(zdev_t* dev, u8_t disableFlag) +void zfHpDisableDfsChannel(zdev_t *dev, u8_t disableFlag) { - struct zsHpPriv* hpPriv; + struct zsHpPriv *hpPriv; - zmw_get_wlan_dev(dev); - hpPriv=wd->hpPrivate; - hpPriv->disableDfsCh = disableFlag; - return; + zmw_get_wlan_dev(dev); + hpPriv = wd->hpPrivate; + hpPriv->disableDfsCh = disableFlag; + return; } -- cgit v0.10.2 From 46712df6c705d2b6e4189c94b94209847e4931ab Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:55 +0100 Subject: Staging: batman-adv: send.c: Checkpatch cleanup drivers/staging/batman-adv/send.c:137: CHECK: multiple assignments should be avoided Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index 2a9fac8..ff7b1f1 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -134,7 +134,8 @@ static void send_packet_to_if(struct forw_packet *forw_packet, if (batman_if->if_active != IF_ACTIVE) return; - packet_num = buff_pos = 0; + packet_num = 0; + buff_pos = 0; batman_packet = (struct batman_packet *) (forw_packet->packet_buff); -- cgit v0.10.2 From 289d4e1b17fd1e29e30929cf1941b7d3349d748f Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Mon, 1 Mar 2010 00:28:56 +0100 Subject: Staging: otus: hpfwu_BA.c: Checkpatch cleanup drivers/staging/otus/hal/hpfwu_BA.c:874: ERROR: spaces required around that '=' (ctx:VxV) Signed-off-by: Andrea Gelmini Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpfwu_BA.c b/drivers/staging/otus/hal/hpfwu_BA.c index 0c74157..f89419b 100644 --- a/drivers/staging/otus/hal/hpfwu_BA.c +++ b/drivers/staging/otus/hal/hpfwu_BA.c @@ -871,4 +871,4 @@ const u32_t zcFwImage[] = { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, }; -const u32_t zcFwImageSize=13656; +const u32_t zcFwImageSize = 13656; -- cgit v0.10.2 From 588063a10f4e21cd3a2cc693c0c1ebb846ac4ce5 Mon Sep 17 00:00:00 2001 From: Ellwyn Cole Date: Mon, 1 Mar 2010 17:43:50 +0000 Subject: staging: comedi: Fix 80 characters limit and printk issues in skel.c This is a patch to the skel.c file that fixes the 80 characters limit and printk warnings found by the checkpatch.pl tool Signed-off-by: Ellwyn Cole Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/skel.c b/drivers/staging/comedi/drivers/skel.c index aba57d9..490753b 100644 --- a/drivers/staging/comedi/drivers/skel.c +++ b/drivers/staging/comedi/drivers/skel.c @@ -131,7 +131,8 @@ MODULE_DEVICE_TABLE(pci, skel_pci_table); /* this structure is for data unique to this hardware driver. If several hardware drivers keep similar information in this structure, - feel free to suggest moving the variable to the struct comedi_device struct. */ + feel free to suggest moving the variable to the struct comedi_device struct. + */ struct skel_private { int data; @@ -211,7 +212,7 @@ static int skel_attach(struct comedi_device *dev, struct comedi_devconfig *it) { struct comedi_subdevice *s; - printk("comedi%d: skel: ", dev->minor); + pr_info("comedi%d: skel: ", dev->minor); /* * If you can probe the device to determine what device in a series @@ -282,7 +283,7 @@ static int skel_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->type = COMEDI_SUBD_UNUSED; } - printk("attached\n"); + pr_info("attached\n"); return 0; } @@ -297,7 +298,7 @@ static int skel_attach(struct comedi_device *dev, struct comedi_devconfig *it) */ static int skel_detach(struct comedi_device *dev) { - printk("comedi%d: skel: remove\n", dev->minor); + pr_info("comedi%d: skel: remove\n", dev->minor); return 0; } @@ -336,7 +337,7 @@ static int skel_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, if (i == TIMEOUT) { /* printk() should be used instead of printk() * whenever the code can be called from real-time. */ - printk("timeout\n"); + pr_info("timeout\n"); return -ETIMEDOUT; } @@ -397,7 +398,8 @@ static int skel_ai_cmdtest(struct comedi_device *dev, if (err) return 1; - /* step 2: make sure trigger sources are unique and mutually compatible */ + /* step 2: make sure trigger sources are unique and mutually compatible + */ /* note that mutual compatibility is not an issue here */ if (cmd->scan_begin_src != TRIG_TIMER && @@ -529,7 +531,7 @@ static int skel_ao_winsn(struct comedi_device *dev, struct comedi_subdevice *s, int i; int chan = CR_CHAN(insn->chanspec); - printk("skel_ao_winsn\n"); + pr_info("skel_ao_winsn\n"); /* Writing a list of values to an AO channel is probably not * very useful, but that's how the interface is defined. */ for (i = 0; i < insn->n; i++) { @@ -623,6 +625,7 @@ static int skel_dio_insn_config(struct comedi_device *dev, * as necessary. */ COMEDI_INITCLEANUP(driver_skel); -/* If you are writing a PCI driver you should use COMEDI_PCI_INITCLEANUP instead. -*/ +/* If you are writing a PCI driver you should use COMEDI_PCI_INITCLEANUP + * instead. + */ /* COMEDI_PCI_INITCLEANUP(driver_skel, skel_pci_table) */ -- cgit v0.10.2 From 50ee11fe383255db8e5c3307319d470015616f27 Mon Sep 17 00:00:00 2001 From: Bob Beers Date: Thu, 4 Mar 2010 08:40:46 -0500 Subject: staging: Add driver to support wanPMC-CxT1E1 card. Obviously still needs serious attention, but it compiles. Original author: Rick Dobbs Add driver to support wanPMC-CxT1E1 card. This card provides 1-4 ports of T1E1 in PMC form factor. Note, Rick doesn't want his email showing up as the "From:" author, but has given his blessing to have the code included in the kernel tree. Signed-off-by: Bob Beers Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 7696a66..8db8632 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -139,5 +139,7 @@ source "drivers/staging/dt3155/Kconfig" source "drivers/staging/crystalhd/Kconfig" +source "drivers/staging/cxt1e1/Kconfig" + endif # !STAGING_EXCLUDE_BUILD endif # STAGING diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index ea2e70e..ab61e26 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -51,3 +51,4 @@ obj-$(CONFIG_PCMCIA_NETWAVE) += netwave/ obj-$(CONFIG_FB_SM7XX) += sm7xx/ obj-$(CONFIG_DT3155) += dt3155/ obj-$(CONFIG_CRYSTALHD) += crystalhd/ +obj-$(CONFIG_CXT1E1) += cxt1e1/ diff --git a/drivers/staging/cxt1e1/Kconfig b/drivers/staging/cxt1e1/Kconfig new file mode 100644 index 0000000..68e9b6d --- /dev/null +++ b/drivers/staging/cxt1e1/Kconfig @@ -0,0 +1,22 @@ +config CXT1E1 + tristate "SBE wanPMC-C[421]E1T1 hardware support" + depends on HDLC && PCI + ---help--- + This driver supports the SBE wanPMC-CxT1E1 1, 2 and 4 port T3 + channelized stream WAN adapter card which contains a HDLC/Transparent + mode controller. + + If you want to compile this driver as a module + say M here and read . + The module will be called 'cxt1e1'. + + If unsure, say N. + +config SBE_PMCC4_NCOMM + bool "SBE PMCC4 NCOMM support" + depends on CXT1E1 + ---help--- + SBE supplies optional support for NCOMM products. + + If you have purchased this optional support you must say Y or M + here to allow the driver to operate with the NCOMM product. diff --git a/drivers/staging/cxt1e1/Makefile b/drivers/staging/cxt1e1/Makefile new file mode 100644 index 0000000..10020d7 --- /dev/null +++ b/drivers/staging/cxt1e1/Makefile @@ -0,0 +1,19 @@ +obj-$(CONFIG_CXT1E1) += cxt1e1.o + +EXTRA_CFLAGS += -DSBE_PMCC4_ENABLE +EXTRA_CFLAGS += -DSBE_ISR_TASKLET +EXTRA_CFLAGS += -DSBE_INCLUDE_SYMBOLS + +cxt1e1-objs += \ + ossiRelease.o \ + musycc.o \ + pmcc4_drv.o \ + comet.o \ + linux.o \ + functions.o \ + hwprobe.o \ + sbeproc.o \ + pmc93x6_eeprom.o \ + sbecrc.o \ + comet_tables.o \ + sbeid.o diff --git a/drivers/staging/cxt1e1/comet.c b/drivers/staging/cxt1e1/comet.c new file mode 100644 index 0000000..b709099 --- /dev/null +++ b/drivers/staging/cxt1e1/comet.c @@ -0,0 +1,566 @@ +/* Copyright (C) 2003-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include "pmcc4_sysdep.h" +#include "sbecom_inline_linux.h" +#include "libsbew.h" +#include "pmcc4.h" +#include "comet.h" +#include "comet_tables.h" + +#ifdef SBE_INCLUDE_SYMBOLS +#define STATIC +#else +#define STATIC static +#endif + + +extern int log_level; + +#define COMET_NUM_SAMPLES 24 /* Number of entries in the waveform table */ +#define COMET_NUM_UNITS 5 /* Number of points per entry in table */ + +/* forward references */ +STATIC void SetPwrLevel (comet_t * comet); +STATIC void WrtRcvEqualizerTbl (ci_t * ci, comet_t * comet, u_int32_t *table); +STATIC void WrtXmtWaveformTbl (ci_t * ci, comet_t * comet, u_int8_t table[COMET_NUM_SAMPLES][COMET_NUM_UNITS]); + + +void *TWV_table[12] = { + TWVLongHaul0DB, TWVLongHaul7_5DB, TWVLongHaul15DB, TWVLongHaul22_5DB, + TWVShortHaul0, TWVShortHaul1, TWVShortHaul2, TWVShortHaul3, TWVShortHaul4, + TWVShortHaul5, + TWV_E1_75Ohm, /** PORT POINT - 75 Ohm not supported **/ + TWV_E1_120Ohm +}; + + +static int +lbo_tbl_lkup (int t1, int lbo) +{ + if ((lbo < CFG_LBO_LH0) || (lbo > CFG_LBO_E120)) /* error switches to + * default */ + { + if (t1) + lbo = CFG_LBO_LH0; /* default T1 waveform table */ + else + lbo = CFG_LBO_E120; /* default E1 waveform table */ + } + return (lbo - 1); /* make index ZERO relative */ +} + + +void +init_comet (void *ci, comet_t * comet, u_int32_t port_mode, int clockmaster, + u_int8_t moreParams) +{ + u_int8_t isT1mode; + u_int8_t tix = CFG_LBO_LH0; /* T1 default */ + + isT1mode = IS_FRAME_ANY_T1 (port_mode); + /* T1 or E1 */ + if (isT1mode) + { + pci_write_32 ((u_int32_t *) &comet->gbl_cfg, 0xa0); /* Select T1 Mode & PIO + * output enabled */ + tix = lbo_tbl_lkup (isT1mode, CFG_LBO_LH0); /* default T1 waveform + * table */ + } else + { + pci_write_32 ((u_int32_t *) &comet->gbl_cfg, 0x81); /* Select E1 Mode & PIO + * output enabled */ + tix = lbo_tbl_lkup (isT1mode, CFG_LBO_E120); /* default E1 waveform + * table */ + } + + if (moreParams & CFG_LBO_MASK) + tix = lbo_tbl_lkup (isT1mode, moreParams & CFG_LBO_MASK); /* dial-in requested + * waveform table */ + + /* Tx line Intfc cfg ** Set for analog & no special patterns */ + pci_write_32 ((u_int32_t *) &comet->tx_line_cfg, 0x00); /* Transmit Line + * Interface Config. */ + + /* master test ** Ignore Test settings for now */ + pci_write_32 ((u_int32_t *) &comet->mtest, 0x00); /* making sure it's + * Default value */ + + /* Turn on Center (CENT) and everything else off */ + pci_write_32 ((u_int32_t *) &comet->rjat_cfg, 0x10); /* RJAT cfg */ + /* Set Jitter Attenuation to recommend T1 values */ + if (isT1mode) + { + pci_write_32 ((u_int32_t *) &comet->rjat_n1clk, 0x2F); /* RJAT Divider N1 + * Control */ + pci_write_32 ((u_int32_t *) &comet->rjat_n2clk, 0x2F); /* RJAT Divider N2 + * Control */ + } else + { + pci_write_32 ((u_int32_t *) &comet->rjat_n1clk, 0xFF); /* RJAT Divider N1 + * Control */ + pci_write_32 ((u_int32_t *) &comet->rjat_n2clk, 0xFF); /* RJAT Divider N2 + * Control */ + } + + /* Turn on Center (CENT) and everything else off */ + pci_write_32 ((u_int32_t *) &comet->tjat_cfg, 0x10); /* TJAT Config. */ + + /* Do not bypass jitter attenuation and bypass elastic store */ + pci_write_32 ((u_int32_t *) &comet->rx_opt, 0x00); /* rx opts */ + + /* TJAT ctrl & TJAT divider ctrl */ + /* Set Jitter Attenuation to recommended T1 values */ + if (isT1mode) + { + pci_write_32 ((u_int32_t *) &comet->tjat_n1clk, 0x2F); /* TJAT Divider N1 + * Control */ + pci_write_32 ((u_int32_t *) &comet->tjat_n2clk, 0x2F); /* TJAT Divider N2 + * Control */ + } else + { + pci_write_32 ((u_int32_t *) &comet->tjat_n1clk, 0xFF); /* TJAT Divider N1 + * Control */ + pci_write_32 ((u_int32_t *) &comet->tjat_n2clk, 0xFF); /* TJAT Divider N2 + * Control */ + } + + /* 1c: rx ELST cfg 20: tx ELST cfg 28&38: rx&tx data link ctrl */ + if (isT1mode) + { /* Select 193-bit frame format */ + pci_write_32 ((u_int32_t *) &comet->rx_elst_cfg, 0x00); + pci_write_32 ((u_int32_t *) &comet->tx_elst_cfg, 0x00); + } else + { /* Select 256-bit frame format */ + pci_write_32 ((u_int32_t *) &comet->rx_elst_cfg, 0x03); + pci_write_32 ((u_int32_t *) &comet->tx_elst_cfg, 0x03); + pci_write_32 ((u_int32_t *) &comet->rxce1_ctl, 0x00); /* disable T1 data link + * receive */ + pci_write_32 ((u_int32_t *) &comet->txci1_ctl, 0x00); /* disable T1 data link + * transmit */ + } + + /* the following is a default value */ + /* Enable 8 out of 10 validation */ + pci_write_32 ((u_int32_t *) &comet->t1_rboc_ena, 0x00); /* t1RBOC + * enable(BOC:BitOriented + * Code) */ + if (isT1mode) + { + + /* IBCD cfg: aka Inband Code Detection ** loopback code length set to */ + pci_write_32 ((u_int32_t *) &comet->ibcd_cfg, 0x04); /* 6 bit down, 5 bit up + * (assert) */ + pci_write_32 ((u_int32_t *) &comet->ibcd_act, 0x08); /* line loopback + * activate pattern */ + pci_write_32 ((u_int32_t *) &comet->ibcd_deact, 0x24); /* deactivate code + * pattern (i.e.001) */ + } + /* 10: CDRC cfg 28&38: rx&tx data link 1 ctrl 48: t1 frmr cfg */ + /* 50: SIGX cfg, COSS (change of signaling state) 54: XBAS cfg */ + /* 60: t1 ALMI cfg */ + /* Configure Line Coding */ + + switch (port_mode) + { + case CFG_FRAME_SF: /* 1 - T1 B8ZS */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->t1_frmr_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->t1_xbas_cfg, 0x20); /* 5:B8ZS */ + pci_write_32 ((u_int32_t *) &comet->t1_almi_cfg, 0); + break; + case CFG_FRAME_ESF: /* 2 - T1 B8ZS */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->rxce1_ctl, 0x20); /* Bit 5: T1 DataLink + * Enable */ + pci_write_32 ((u_int32_t *) &comet->txci1_ctl, 0x20); /* 5: T1 DataLink Enable */ + pci_write_32 ((u_int32_t *) &comet->t1_frmr_cfg, 0x30); /* 4:ESF 5:ESFFA */ + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0x04); /* 2:ESF */ + pci_write_32 ((u_int32_t *) &comet->t1_xbas_cfg, 0x30); /* 4:ESF 5:B8ZS */ + pci_write_32 ((u_int32_t *) &comet->t1_almi_cfg, 0x10); /* 4:ESF */ + break; + case CFG_FRAME_E1PLAIN: /* 3 - HDB3 */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->e1_tran_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->e1_frmr_aopts, 0x40); + break; + case CFG_FRAME_E1CAS: /* 4 - HDB3 */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->e1_tran_cfg, 0x60); + pci_write_32 ((u_int32_t *) &comet->e1_frmr_aopts, 0); + break; + case CFG_FRAME_E1CRC: /* 5 - HDB3 */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->e1_tran_cfg, 0x10); + pci_write_32 ((u_int32_t *) &comet->e1_frmr_aopts, 0xc2); + break; + case CFG_FRAME_E1CRC_CAS: /* 6 - HDB3 */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->e1_tran_cfg, 0x70); + pci_write_32 ((u_int32_t *) &comet->e1_frmr_aopts, 0x82); + break; + case CFG_FRAME_SF_AMI: /* 7 - T1 AMI */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0x80); /* Enable AMI Line + * Decoding */ + pci_write_32 ((u_int32_t *) &comet->t1_frmr_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->t1_xbas_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->t1_almi_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + break; + case CFG_FRAME_ESF_AMI: /* 8 - T1 AMI */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0x80); /* Enable AMI Line + * Decoding */ + pci_write_32 ((u_int32_t *) &comet->rxce1_ctl, 0x20); /* 5: T1 DataLink Enable */ + pci_write_32 ((u_int32_t *) &comet->txci1_ctl, 0x20); /* 5: T1 DataLink Enable */ + pci_write_32 ((u_int32_t *) &comet->t1_frmr_cfg, 0x30); /* Bit 4:ESF 5:ESFFA */ + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0x04); /* 2:ESF */ + pci_write_32 ((u_int32_t *) &comet->t1_xbas_cfg, 0x10); /* 4:ESF */ + pci_write_32 ((u_int32_t *) &comet->t1_almi_cfg, 0x10); /* 4:ESF */ + break; + case CFG_FRAME_E1PLAIN_AMI: /* 9 - AMI */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0x80); /* Enable AMI Line + * Decoding */ + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->e1_tran_cfg, 0x80); + pci_write_32 ((u_int32_t *) &comet->e1_frmr_aopts, 0x40); + break; + case CFG_FRAME_E1CAS_AMI: /* 10 - AMI */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0x80); /* Enable AMI Line + * Decoding */ + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->e1_tran_cfg, 0xe0); + pci_write_32 ((u_int32_t *) &comet->e1_frmr_aopts, 0); + break; + case CFG_FRAME_E1CRC_AMI: /* 11 - AMI */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0x80); /* Enable AMI Line + * Decoding */ + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->e1_tran_cfg, 0x90); + pci_write_32 ((u_int32_t *) &comet->e1_frmr_aopts, 0xc2); + break; + case CFG_FRAME_E1CRC_CAS_AMI: /* 12 - AMI */ + pci_write_32 ((u_int32_t *) &comet->cdrc_cfg, 0x80); /* Enable AMI Line + * Decoding */ + pci_write_32 ((u_int32_t *) &comet->sigx_cfg, 0); + pci_write_32 ((u_int32_t *) &comet->e1_tran_cfg, 0xf0); + pci_write_32 ((u_int32_t *) &comet->e1_frmr_aopts, 0x82); + break; + } /* end switch */ + + /*** + * Set Full Frame mode (NXDSO[1] = 0, NXDSO[0] = 0) + * CMODE=1: Clock slave mode with BRCLK as an input, + * DE=0: Use falling edge of BRCLK for data, + * FE=0: Use falling edge of BRCLK for frame, + * CMS=0: Use backplane freq, + * RATE[1:0]=0,0: T1 + ***/ + + + /* 0x30: "BRIF cfg"; 0x20 is 'CMODE', 0x03 is (bit) rate */ + /* note "rate bits can only be set once after reset" */ + if (clockmaster) + { /* CMODE == clockMode, 0=clock master (so + * all 3 others should be slave) */ + if (isT1mode) /* rate = 1.544 Mb/s */ + pci_write_32 ((u_int32_t *) &comet->brif_cfg, 0x00); /* Comet 0 Master + * Mode(CMODE=0) */ + else /* rate = 2.048 Mb/s */ + pci_write_32 ((u_int32_t *) &comet->brif_cfg, 0x01); /* Comet 0 Master + * Mode(CMODE=0) */ + + /* 31: BRIF frame pulse cfg 06: tx timing options */ + pci_write_32 ((u_int32_t *) &comet->brif_fpcfg, 0x00); /* Master Mode + * i.e.FPMODE=0 (@0x20) */ + if ((moreParams & CFG_CLK_PORT_MASK) == CFG_CLK_PORT_INTERNAL) + { + if (log_level >= LOG_SBEBUG12) + printk (">> init_comet: clockmaster internal clock\n"); + pci_write_32 ((u_int32_t *) &comet->tx_time, 0x0d); /* internal oscillator */ + } else /* external clock source */ + { + if (log_level >= LOG_SBEBUG12) + printk (">> init_comet: clockmaster external clock\n"); + pci_write_32 ((u_int32_t *) &comet->tx_time, 0x09); /* loop timing + * (external) */ + } + + } else /* slave */ + { + if (isT1mode) + pci_write_32 ((u_int32_t *) &comet->brif_cfg, 0x20); /* Slave Mode(CMODE=1, + * see above) */ + else + pci_write_32 ((u_int32_t *) &comet->brif_cfg, 0x21); /* Slave Mode (CMODE=1) */ + pci_write_32 ((u_int32_t *) &comet->brif_fpcfg, 0x20); /* Slave Mode i.e. + * FPMODE=1 (@0x20) */ + if (log_level >= LOG_SBEBUG12) + printk (">> init_comet: clockslave internal clock\n"); + pci_write_32 ((u_int32_t *) &comet->tx_time, 0x0d); /* oscillator timing */ + } + + /* 32: BRIF parity F-bit cfg */ + /* Totem-pole operation */ + pci_write_32 ((u_int32_t *) &comet->brif_pfcfg, 0x01); /* Receive Backplane + * Parity/F-bit */ + + /* dc: RLPS equalizer V ref */ + /* Configuration */ + if (isT1mode) + pci_write_32 ((u_int32_t *) &comet->rlps_eqvr, 0x2c); /* RLPS Equalizer + * Voltage */ + else + pci_write_32 ((u_int32_t *) &comet->rlps_eqvr, 0x34); /* RLPS Equalizer + * Voltage */ + + /* Reserved bit set and SQUELCH enabled */ + /* f8: RLPS cfg & status f9: RLPS ALOS detect/clear threshold */ + pci_write_32 ((u_int32_t *) &comet->rlps_cfgsts, 0x11); /* RLPS Configuration + * Status */ + if (isT1mode) + pci_write_32 ((u_int32_t *) &comet->rlps_alos_thresh, 0x55); /* ? */ + else + pci_write_32 ((u_int32_t *) &comet->rlps_alos_thresh, 0x22); /* ? */ + + + /* Set Full Frame mode (NXDSO[1] = 0, NXDSO[0] = 0) */ + /* CMODE=0: Clock slave mode with BTCLK as an input, DE=1: Use rising */ + /* edge of BTCLK for data, FE=1: Use rising edge of BTCLK for frame, */ + /* CMS=0: Use backplane freq, RATE[1:0]=0,0: T1 */ +/*** Transmit side is always an Input, Slave Clock*/ + /* 40: BTIF cfg 41: BTIF frame pulse cfg */ + if (isT1mode) + pci_write_32 ((u_int32_t *) &comet->btif_cfg, 0x38); /* BTIF Configuration + * Reg. */ + else + pci_write_32 ((u_int32_t *) &comet->btif_cfg, 0x39); /* BTIF Configuration + * Reg. */ + + pci_write_32 ((u_int32_t *) &comet->btif_fpcfg, 0x01); /* BTIF Frame Pulse + * Config. */ + + /* 0a: master diag 06: tx timing options */ + /* if set Comet to loop back */ + + /* Comets set to normal */ + pci_write_32 ((u_int32_t *) &comet->mdiag, 0x00); + + /* BTCLK driven by TCLKI internally (crystal driven) and Xmt Elasted */ + /* Store is enabled. */ + + WrtXmtWaveformTbl (ci, comet, TWV_table[tix]); + if (isT1mode) + WrtRcvEqualizerTbl ((ci_t *) ci, comet, &T1_Equalizer[0]); + else + WrtRcvEqualizerTbl ((ci_t *) ci, comet, &E1_Equalizer[0]); + SetPwrLevel (comet); +} + +/* +** Name: WrtXmtWaveform +** Description: Formulate the Data for the Pulse Waveform Storage +** Write register, (F2), from the sample and unit inputs. +** Write the data to the Pulse Waveform Storage Data register. +** Returns: Nothing +*/ +STATIC void +WrtXmtWaveform (ci_t * ci, comet_t * comet, u_int32_t sample, u_int32_t unit, u_int8_t data) +{ + u_int8_t WaveformAddr; + + WaveformAddr = (sample << 3) + (unit & 7); + pci_write_32 ((u_int32_t *) &comet->xlpg_pwave_addr, WaveformAddr); + pci_flush_write (ci); /* for write order preservation when + * Optimizing driver */ + pci_write_32 ((u_int32_t *) &comet->xlpg_pwave_data, 0x7F & data); +} + +/* +** Name: WrtXmtWaveformTbl +** Description: Fill in the Transmit Waveform Values +** for driving the transmitter DAC. +** Returns: Nothing +*/ +STATIC void +WrtXmtWaveformTbl (ci_t * ci, comet_t * comet, + u_int8_t table[COMET_NUM_SAMPLES][COMET_NUM_UNITS]) +{ + u_int32_t sample, unit; + + for (sample = 0; sample < COMET_NUM_SAMPLES; sample++) + { + for (unit = 0; unit < COMET_NUM_UNITS; unit++) + WrtXmtWaveform (ci, comet, sample, unit, table[sample][unit]); + } + + /* Enable transmitter and set output amplitude */ + pci_write_32 ((u_int32_t *) &comet->xlpg_cfg, table[COMET_NUM_SAMPLES][0]); +} + + +/* +** Name: WrtXmtWaveform +** Description: Fill in the Receive Equalizer RAM from the desired +** table. +** Returns: Nothing +** +** Remarks: Per PM4351 Device Errata, Receive Equalizer RAM Initialization +** is coded with early setup of indirect address. +*/ + +STATIC void +WrtRcvEqualizerTbl (ci_t * ci, comet_t * comet, u_int32_t *table) +{ + u_int32_t ramaddr; + volatile u_int32_t value; + + for (ramaddr = 0; ramaddr < 256; ramaddr++) + { + /*** the following lines are per Errata 7, 2.5 ***/ + { + pci_write_32 ((u_int32_t *) &comet->rlps_eq_rwsel, 0x80); /* Set up for a read + * operation */ + pci_flush_write (ci); /* for write order preservation when + * Optimizing driver */ + pci_write_32 ((u_int32_t *) &comet->rlps_eq_iaddr, (u_int8_t) ramaddr); /* write the addr, + * initiate a read */ + pci_flush_write (ci); /* for write order preservation when + * Optimizing driver */ + /* + * wait 3 line rate clock cycles to ensure address bits are + * captured by T1/E1 clock + */ + OS_uwait (4, "wret"); /* 683ns * 3 = 1366 ns, approx 2us (but + * use 4us) */ + } + + value = *table++; + pci_write_32 ((u_int32_t *) &comet->rlps_idata3, (u_int8_t) (value >> 24)); + pci_write_32 ((u_int32_t *) &comet->rlps_idata2, (u_int8_t) (value >> 16)); + pci_write_32 ((u_int32_t *) &comet->rlps_idata1, (u_int8_t) (value >> 8)); + pci_write_32 ((u_int32_t *) &comet->rlps_idata0, (u_int8_t) value); + pci_flush_write (ci); /* for write order preservation when + * Optimizing driver */ + + /* Storing RAM address, causes RAM to be updated */ + + pci_write_32 ((u_int32_t *) &comet->rlps_eq_rwsel, 0); /* Set up for a write + * operation */ + pci_flush_write (ci); /* for write order preservation when + * Optimizing driver */ + pci_write_32 ((u_int32_t *) &comet->rlps_eq_iaddr, (u_int8_t) ramaddr); /* write the addr, + * initiate a read */ + pci_flush_write (ci); /* for write order preservation when + * Optimizing driver */ + /* + * wait 3 line rate clock cycles to ensure address bits are captured + * by T1/E1 clock + */ + OS_uwait (4, "wret"); /* 683ns * 3 = 1366 ns, approx 2us (but + * use 4us) */ + } + + pci_write_32 ((u_int32_t *) &comet->rlps_eq_cfg, 0xCB); /* Enable Equalizer & + * set it to use 256 + * periods */ +} + + +/* +** Name: SetPwrLevel +** Description: Implement power level setting algorithm described below +** Returns: Nothing +*/ + +STATIC void +SetPwrLevel (comet_t * comet) +{ + volatile u_int32_t temp; + +/* +** Algorithm to Balance the Power Distribution of Ttip Tring +** +** Zero register F6 +** Write 0x01 to register F4 +** Write another 0x01 to register F4 +** Read register F4 +** Remove the 0x01 bit by Anding register F4 with 0xFE +** Write the resultant value to register F4 +** Repeat these steps for register F5 +** Write 0x01 to register F6 +*/ + pci_write_32 ((u_int32_t *) &comet->xlpg_fdata_sel, 0x00); /* XLPG Fuse Data Select */ + + pci_write_32 ((u_int32_t *) &comet->xlpg_atest_pctl, 0x01); /* XLPG Analog Test + * Positive control */ + pci_write_32 ((u_int32_t *) &comet->xlpg_atest_pctl, 0x01); + + temp = pci_read_32 ((u_int32_t *) &comet->xlpg_atest_pctl) & 0xfe; + pci_write_32 ((u_int32_t *) &comet->xlpg_atest_pctl, temp); + + pci_write_32 ((u_int32_t *) &comet->xlpg_atest_nctl, 0x01); /* XLPG Analog Test + * Negative control */ + pci_write_32 ((u_int32_t *) &comet->xlpg_atest_nctl, 0x01); + + temp = pci_read_32 ((u_int32_t *) &comet->xlpg_atest_nctl) & 0xfe; + pci_write_32 ((u_int32_t *) &comet->xlpg_atest_nctl, temp); + pci_write_32 ((u_int32_t *) &comet->xlpg_fdata_sel, 0x01); /* XLPG */ +} + + +/* +** Name: SetCometOps +** Description: Set up the selected Comet's clock edge drive for both +** the transmit out the analog side and receive to the +** backplane side. +** Returns: Nothing +*/ +#if 0 +STATIC void +SetCometOps (comet_t * comet) +{ + volatile u_int8_t rd_value; + + if (comet == mConfig.C4Func1Base + (COMET0_OFFSET >> 2)) + { + rd_value = (u_int8_t) pci_read_32 ((u_int32_t *) &comet->brif_cfg); /* read the BRIF + * Configuration */ + rd_value &= ~0x20; + pci_write_32 ((u_int32_t *) &comet->brif_cfg, (u_int32_t) rd_value); + + rd_value = (u_int8_t) pci_read_32 ((u_int32_t *) &comet->brif_fpcfg); /* read the BRIF Frame + * Pulse Configuration */ + rd_value &= ~0x20; + pci_write_32 ((u_int32_t *) &comet->brif_fpcfg, (u_int8_t) rd_value); + } else + { + rd_value = (u_int8_t) pci_read_32 ((u_int32_t *) &comet->brif_cfg); /* read the BRIF + * Configuration */ + rd_value |= 0x20; + pci_write_32 ((u_int32_t *) &comet->brif_cfg, (u_int32_t) rd_value); + + rd_value = (u_int8_t) pci_read_32 ((u_int32_t *) &comet->brif_fpcfg); /* read the BRIF Frame + * Pulse Configuration */ + rd_value |= 0x20; + pci_write_32 ((u_int32_t *) &comet->brif_fpcfg, (u_int8_t) rd_value); + } +} +#endif + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/comet.h b/drivers/staging/cxt1e1/comet.h new file mode 100644 index 0000000..5cb3afd --- /dev/null +++ b/drivers/staging/cxt1e1/comet.h @@ -0,0 +1,366 @@ +/* + * $Id: comet.h,v 1.3 2005/09/28 00:10:07 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_COMET_H_ +#define _INC_COMET_H_ + +/*----------------------------------------------------------------------------- + * comet.h - + * + * Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.3 $ + * Last changed on $Date: 2005/09/28 00:10:07 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: comet.h,v $ + * Revision 1.3 2005/09/28 00:10:07 rickd + * Add RCS header. Switch to structure usage. + * + * Revision 1.2 2005/04/28 23:43:03 rickd + * Add RCS tracking heading. + * + *----------------------------------------------------------------------------- + */ + +#if defined(__FreeBSD__) || defined (__NetBSD__) +#include +#else +#include +#endif + + +#define VINT32 volatile u_int32_t + +struct s_comet_reg +{ + VINT32 gbl_cfg; /* 00 Global Cfg */ + VINT32 clkmon; /* 01 Clk Monitor */ + VINT32 rx_opt; /* 02 RX Options */ + VINT32 rx_line_cfg; /* 03 RX Line Interface Cfg */ + VINT32 tx_line_cfg; /* 04 TX Line Interface Cfg */ + VINT32 tx_frpass; /* 05 TX Framing & Bypass Options */ + VINT32 tx_time; /* 06 TX Timing Options */ + VINT32 intr_1; /* 07 Intr Source #1 */ + VINT32 intr_2; /* 08 Intr Source #2 */ + VINT32 intr_3; /* 09 Intr Source #3 */ + VINT32 mdiag; /* 0A Master Diagnostics */ + VINT32 mtest; /* 0B Master Test */ + VINT32 adiag; /* 0C Analog Diagnostics */ + VINT32 rev_id; /* 0D Rev/Chip Id/Global PMON Update */ +#define pmon rev_id + VINT32 reset; /* 0E Reset */ + VINT32 prgd_phctl; /* 0F PRGD Positioning/Ctl & HDLC Ctl */ + VINT32 cdrc_cfg; /* 10 CDRC Cfg */ + VINT32 cdrc_ien; /* 11 CDRC Intr Enable */ + VINT32 cdrc_ists; /* 12 CDRC Intr Sts */ + VINT32 cdrc_alos; /* 13 CDRC Alternate Loss of Signal */ + + VINT32 rjat_ists; /* 14 RJAT Intr Sts */ + VINT32 rjat_n1clk; /* 15 RJAT Reference Clk Divisor (N1) Ctl */ + VINT32 rjat_n2clk; /* 16 RJAT Output Clk Divisor (N2) Ctl */ + VINT32 rjat_cfg; /* 17 RJAT Cfg */ + + VINT32 tjat_ists; /* 18 TJAT Intr Sts */ + VINT32 tjat_n1clk; /* 19 TJAT Reference Clk Divisor (N1) Ctl */ + VINT32 tjat_n2clk; /* 1A TJAT Output Clk Divisor (N2) Ctl */ + VINT32 tjat_cfg; /* 1B TJAT Cfg */ + + VINT32 rx_elst_cfg; /* 1C RX-ELST Cfg */ + VINT32 rx_elst_ists; /* 1D RX-ELST Intr Sts */ + VINT32 rx_elst_idle; /* 1E RX-ELST Idle Code */ + VINT32 _rx_elst_res1f; /* 1F RX-ELST Reserved */ + + VINT32 tx_elst_cfg; /* 20 TX-ELST Cfg */ + VINT32 tx_elst_ists; /* 21 TX-ELST Intr Sts */ + VINT32 _tx_elst_res22; /* 22 TX-ELST Reserved */ + VINT32 _tx_elst_res23; /* 23 TX-ELST Reserved */ + VINT32 __res24; /* 24 Reserved */ + VINT32 __res25; /* 25 Reserved */ + VINT32 __res26; /* 26 Reserved */ + VINT32 __res27; /* 27 Reserved */ + + VINT32 rxce1_ctl; /* 28 RXCE RX Data Link 1 Ctl */ + VINT32 rxce1_bits; /* 29 RXCE RX Data Link 1 Bit Select */ + VINT32 rxce2_ctl; /* 2A RXCE RX Data Link 2 Ctl */ + VINT32 rxce2_bits; /* 2B RXCE RX Data Link 2 Bit Select */ + VINT32 rxce3_ctl; /* 2C RXCE RX Data Link 3 Ctl */ + VINT32 rxce3_bits; /* 2D RXCE RX Data Link 3 Bit Select */ + VINT32 _rxce_res2E; /* 2E RXCE Reserved */ + VINT32 _rxce_res2F; /* 2F RXCE Reserved */ + + VINT32 brif_cfg; /* 30 BRIF RX Backplane Cfg */ + VINT32 brif_fpcfg; /* 31 BRIF RX Backplane Frame Pulse Cfg */ + VINT32 brif_pfcfg; /* 32 BRIF RX Backplane Parity/F-Bit Cfg */ + VINT32 brif_tsoff; /* 33 BRIF RX Backplane Time Slot Offset */ + VINT32 brif_boff; /* 34 BRIF RX Backplane Bit Offset */ + VINT32 _brif_res35; /* 35 BRIF RX Backplane Reserved */ + VINT32 _brif_res36; /* 36 BRIF RX Backplane Reserved */ + VINT32 _brif_res37; /* 37 BRIF RX Backplane Reserved */ + + VINT32 txci1_ctl; /* 38 TXCI TX Data Link 1 Ctl */ + VINT32 txci1_bits; /* 39 TXCI TX Data Link 2 Bit Select */ + VINT32 txci2_ctl; /* 3A TXCI TX Data Link 1 Ctl */ + VINT32 txci2_bits; /* 3B TXCI TX Data Link 2 Bit Select */ + VINT32 txci3_ctl; /* 3C TXCI TX Data Link 1 Ctl */ + VINT32 txci3_bits; /* 3D TXCI TX Data Link 2 Bit Select */ + VINT32 _txci_res3E; /* 3E TXCI Reserved */ + VINT32 _txci_res3F; /* 3F TXCI Reserved */ + + VINT32 btif_cfg; /* 40 BTIF TX Backplane Cfg */ + VINT32 btif_fpcfg; /* 41 BTIF TX Backplane Frame Pulse Cfg */ + VINT32 btif_pcfgsts; /* 42 BTIF TX Backplane Parity Cfg & Sts */ + VINT32 btif_tsoff; /* 43 BTIF TX Backplane Time Slot Offset */ + VINT32 btif_boff; /* 44 BTIF TX Backplane Bit Offset */ + VINT32 _btif_res45; /* 45 BTIF TX Backplane Reserved */ + VINT32 _btif_res46; /* 46 BTIF TX Backplane Reserved */ + VINT32 _btif_res47; /* 47 BTIF TX Backplane Reserved */ + VINT32 t1_frmr_cfg; /* 48 T1 FRMR Cfg */ + VINT32 t1_frmr_ien; /* 49 T1 FRMR Intr Enable */ + VINT32 t1_frmr_ists; /* 4A T1 FRMR Intr Sts */ + VINT32 __res_4B; /* 4B Reserved */ + VINT32 ibcd_cfg; /* 4C IBCD Cfg */ + VINT32 ibcd_ies; /* 4D IBCD Intr Enable/Sts */ + VINT32 ibcd_act; /* 4E IBCD Activate Code */ + VINT32 ibcd_deact; /* 4F IBCD Deactivate Code */ + + VINT32 sigx_cfg; /* 50 SIGX Cfg/Change of Signaling State */ + VINT32 sigx_acc_cos; /* 51 SIGX uP Access Sts/Change of Signaling State */ + VINT32 sigx_iac_cos; /* 52 SIGX Channel Indirect + * Addr/Ctl/Change of Signaling State */ + VINT32 sigx_idb_cos; /* 53 SIGX Channel Indirect Data + * Buffer/Change of Signaling State */ + + VINT32 t1_xbas_cfg; /* 54 T1 XBAS Cfg */ + VINT32 t1_xbas_altx; /* 55 T1 XBAS Alarm TX */ + VINT32 t1_xibc_ctl; /* 56 T1 XIBC Ctl */ + VINT32 t1_xibc_lbcode; /* 57 T1 XIBC Loopback Code */ + + VINT32 pmon_ies; /* 58 PMON Intr Enable/Sts */ + VINT32 pmon_fberr; /* 59 PMON Framing Bit Err Cnt */ + VINT32 pmon_feb_lsb; /* 5A PMON OFF/COFA/Far End Block Err Cnt (LSB) */ + VINT32 pmon_feb_msb; /* 5B PMON OFF/COFA/Far End Block Err Cnt (MSB) */ + VINT32 pmon_bed_lsb; /* 5C PMON Bit/Err/CRCE Cnt (LSB) */ + VINT32 pmon_bed_msb; /* 5D PMON Bit/Err/CRCE Cnt (MSB) */ + VINT32 pmon_lvc_lsb; /* 5E PMON LVC Cnt (LSB) */ + VINT32 pmon_lvc_msb; /* 5F PMON LVC Cnt (MSB) */ + + VINT32 t1_almi_cfg; /* 60 T1 ALMI Cfg */ + VINT32 t1_almi_ien; /* 61 T1 ALMI Intr Enable */ + VINT32 t1_almi_ists; /* 62 T1 ALMI Intr Sts */ + VINT32 t1_almi_detsts; /* 63 T1 ALMI Alarm Detection Sts */ + + VINT32 _t1_pdvd_res64; /* 64 T1 PDVD Reserved */ + VINT32 t1_pdvd_ies; /* 65 T1 PDVD Intr Enable/Sts */ + VINT32 _t1_xboc_res66; /* 66 T1 XBOC Reserved */ + VINT32 t1_xboc_code; /* 67 T1 XBOC Code */ + VINT32 _t1_xpde_res68; /* 68 T1 XPDE Reserved */ + VINT32 t1_xpde_ies; /* 69 T1 XPDE Intr Enable/Sts */ + + VINT32 t1_rboc_ena; /* 6A T1 RBOC Enable */ + VINT32 t1_rboc_sts; /* 6B T1 RBOC Code Sts */ + + VINT32 t1_tpsc_cfg; /* 6C TPSC Cfg */ + VINT32 t1_tpsc_sts; /* 6D TPSC uP Access Sts */ + VINT32 t1_tpsc_ciaddr; /* 6E TPSC Channel Indirect + * Addr/Ctl */ + VINT32 t1_tpsc_cidata; /* 6F TPSC Channel Indirect Data + * Buffer */ + VINT32 t1_rpsc_cfg; /* 70 RPSC Cfg */ + VINT32 t1_rpsc_sts; /* 71 RPSC uP Access Sts */ + VINT32 t1_rpsc_ciaddr; /* 72 RPSC Channel Indirect + * Addr/Ctl */ + VINT32 t1_rpsc_cidata; /* 73 RPSC Channel Indirect Data + * Buffer */ + VINT32 __res74; /* 74 Reserved */ + VINT32 __res75; /* 75 Reserved */ + VINT32 __res76; /* 76 Reserved */ + VINT32 __res77; /* 77 Reserved */ + + VINT32 t1_aprm_cfg; /* 78 T1 APRM Cfg/Ctl */ + VINT32 t1_aprm_load; /* 79 T1 APRM Manual Load */ + VINT32 t1_aprm_ists; /* 7A T1 APRM Intr Sts */ + VINT32 t1_aprm_1sec_2; /* 7B T1 APRM One Second Content Octet 2 */ + VINT32 t1_aprm_1sec_3; /* 7C T1 APRM One Second Content Octet 3 */ + VINT32 t1_aprm_1sec_4; /* 7D T1 APRM One Second Content Octet 4 */ + VINT32 t1_aprm_1sec_5; /* 7E T1 APRM One Second Content MSB (Octect 5) */ + VINT32 t1_aprm_1sec_6; /* 7F T1 APRM One Second Content MSB (Octect 6) */ + + VINT32 e1_tran_cfg; /* 80 E1 TRAN Cfg */ + VINT32 e1_tran_txalarm; /* 81 E1 TRAN TX Alarm/Diagnostic Ctl */ + VINT32 e1_tran_intctl; /* 82 E1 TRAN International Ctl */ + VINT32 e1_tran_extrab; /* 83 E1 TRAN Extra Bits Ctl */ + VINT32 e1_tran_ien; /* 84 E1 TRAN Intr Enable */ + VINT32 e1_tran_ists; /* 85 E1 TRAN Intr Sts */ + VINT32 e1_tran_nats; /* 86 E1 TRAN National Bit Codeword + * Select */ + VINT32 e1_tran_nat; /* 87 E1 TRAN National Bit Codeword */ + VINT32 __res88; /* 88 Reserved */ + VINT32 __res89; /* 89 Reserved */ + VINT32 __res8A; /* 8A Reserved */ + VINT32 __res8B; /* 8B Reserved */ + + VINT32 _t1_frmr_res8C; /* 8C T1 FRMR Reserved */ + VINT32 _t1_frmr_res8D; /* 8D T1 FRMR Reserved */ + VINT32 __res8E; /* 8E Reserved */ + VINT32 __res8F; /* 8F Reserved */ + + VINT32 e1_frmr_aopts; /* 90 E1 FRMR Frame Alignment Options */ + VINT32 e1_frmr_mopts; /* 91 E1 FRMR Maintenance Mode Options */ + VINT32 e1_frmr_ien; /* 92 E1 FRMR Framing Sts Intr Enable */ + VINT32 e1_frmr_mien; /* 93 E1 FRMR Maintenance/Alarm Sts Intr Enable */ + VINT32 e1_frmr_ists; /* 94 E1 FRMR Framing Sts Intr Indication */ + VINT32 e1_frmr_mists; /* 95 E1 FRMR Maintenance/Alarm Sts Indication Enable */ + VINT32 e1_frmr_sts; /* 96 E1 FRMR Framing Sts */ + VINT32 e1_frmr_masts; /* 97 E1 FRMR Maintenance/Alarm Sts */ + VINT32 e1_frmr_nat_bits; /* 98 E1 FRMR International/National Bits */ + VINT32 e1_frmr_crc_lsb; /* 99 E1 FRMR CRC Err Cnt - LSB */ + VINT32 e1_frmr_crc_msb; /* 9A E1 FRMR CRC Err Cnt - MSB */ + VINT32 e1_frmr_nat_ien; /* 9B E1 FRMR National Bit Codeword Intr Enables */ + VINT32 e1_frmr_nat_ists; /* 9C E1 FRMR National Bit Codeword Intr/Sts */ + VINT32 e1_frmr_nat; /* 9D E1 FRMR National Bit Codewords */ + VINT32 e1_frmr_fp_ien; /* 9E E1 FRMR Frame Pulse/Alarm Intr Enables */ + VINT32 e1_frmr_fp_ists; /* 9F E1 FRMR Frame Pulse/Alarm Intr/Sts */ + + VINT32 __resA0; /* A0 Reserved */ + VINT32 __resA1; /* A1 Reserved */ + VINT32 __resA2; /* A2 Reserved */ + VINT32 __resA3; /* A3 Reserved */ + VINT32 __resA4; /* A4 Reserved */ + VINT32 __resA5; /* A5 Reserved */ + VINT32 __resA6; /* A6 Reserved */ + VINT32 __resA7; /* A7 Reserved */ + + VINT32 tdpr1_cfg; /* A8 TDPR #1 Cfg */ + VINT32 tdpr1_utl; /* A9 TDPR #1 Upper TX Threshold */ + VINT32 tdpr1_ltl; /* AA TDPR #1 Lower TX Threshold */ + VINT32 tdpr1_ien; /* AB TDPR #1 Intr Enable */ + VINT32 tdpr1_ists; /* AC TDPR #1 Intr Sts/UDR Clear */ + VINT32 tdpr1_data; /* AD TDPR #1 TX Data */ + VINT32 __resAE; /* AE Reserved */ + VINT32 __resAF; /* AF Reserved */ + VINT32 tdpr2_cfg; /* B0 TDPR #2 Cfg */ + VINT32 tdpr2_utl; /* B1 TDPR #2 Upper TX Threshold */ + VINT32 tdpr2_ltl; /* B2 TDPR #2 Lower TX Threshold */ + VINT32 tdpr2_ien; /* B3 TDPR #2 Intr Enable */ + VINT32 tdpr2_ists; /* B4 TDPR #2 Intr Sts/UDR Clear */ + VINT32 tdpr2_data; /* B5 TDPR #2 TX Data */ + VINT32 __resB6; /* B6 Reserved */ + VINT32 __resB7; /* B7 Reserved1 */ + VINT32 tdpr3_cfg; /* B8 TDPR #3 Cfg */ + VINT32 tdpr3_utl; /* B9 TDPR #3 Upper TX Threshold */ + VINT32 tdpr3_ltl; /* BA TDPR #3 Lower TX Threshold */ + VINT32 tdpr3_ien; /* BB TDPR #3 Intr Enable */ + VINT32 tdpr3_ists; /* BC TDPR #3 Intr Sts/UDR Clear */ + VINT32 tdpr3_data; /* BD TDPR #3 TX Data */ + VINT32 __resBE; /* BE Reserved */ + VINT32 __resBF; /* BF Reserved */ + + VINT32 rdlc1_cfg; /* C0 RDLC #1 Cfg */ + VINT32 rdlc1_intctl; /* C1 RDLC #1 Intr Ctl */ + VINT32 rdlc1_sts; /* C2 RDLC #1 Sts */ + VINT32 rdlc1_data; /* C3 RDLC #1 Data */ + VINT32 rdlc1_paddr; /* C4 RDLC #1 Primary Addr Match */ + VINT32 rdlc1_saddr; /* C5 RDLC #1 Secondary Addr Match */ + VINT32 __resC6; /* C6 Reserved */ + VINT32 __resC7; /* C7 Reserved */ + VINT32 rdlc2_cfg; /* C8 RDLC #2 Cfg */ + VINT32 rdlc2_intctl; /* C9 RDLC #2 Intr Ctl */ + VINT32 rdlc2_sts; /* CA RDLC #2 Sts */ + VINT32 rdlc2_data; /* CB RDLC #2 Data */ + VINT32 rdlc2_paddr; /* CC RDLC #2 Primary Addr Match */ + VINT32 rdlc2_saddr; /* CD RDLC #2 Secondary Addr Match */ + VINT32 __resCE; /* CE Reserved */ + VINT32 __resCF; /* CF Reserved */ + VINT32 rdlc3_cfg; /* D0 RDLC #3 Cfg */ + VINT32 rdlc3_intctl; /* D1 RDLC #3 Intr Ctl */ + VINT32 rdlc3_sts; /* D2 RDLC #3 Sts */ + VINT32 rdlc3_data; /* D3 RDLC #3 Data */ + VINT32 rdlc3_paddr; /* D4 RDLC #3 Primary Addr Match */ + VINT32 rdlc3_saddr; /* D5 RDLC #3 Secondary Addr Match */ + + VINT32 csu_cfg; /* D6 CSU Cfg */ + VINT32 _csu_resD7; /* D7 CSU Reserved */ + + VINT32 rlps_idata3; /* D8 RLPS Indirect Data, 24-31 */ + VINT32 rlps_idata2; /* D9 RLPS Indirect Data, 16-23 */ + VINT32 rlps_idata1; /* DA RLPS Indirect Data, 8-15 */ + VINT32 rlps_idata0; /* DB RLPS Indirect Data, 0-7 */ + VINT32 rlps_eqvr; /* DC RLPS Equalizer Voltage Reference + * (E1 missing) */ + VINT32 _rlps_resDD; /* DD RLPS Reserved */ + VINT32 _rlps_resDE; /* DE RLPS Reserved */ + VINT32 _rlps_resDF; /* DF RLPS Reserved */ + + VINT32 prgd_ctl; /* E0 PRGD Ctl */ + VINT32 prgd_ies; /* E1 PRGD Intr Enable/Sts */ + VINT32 prgd_shift_len; /* E2 PRGD Shift Length */ + VINT32 prgd_tap; /* E3 PRGD Tap */ + VINT32 prgd_errin; /* E4 PRGD Err Insertion */ + VINT32 _prgd_resE5; /* E5 PRGD Reserved */ + VINT32 _prgd_resE6; /* E6 PRGD Reserved */ + VINT32 _prgd_resE7; /* E7 PRGD Reserved */ + VINT32 prgd_patin1; /* E8 PRGD Pattern Insertion #1 */ + VINT32 prgd_patin2; /* E9 PRGD Pattern Insertion #2 */ + VINT32 prgd_patin3; /* EA PRGD Pattern Insertion #3 */ + VINT32 prgd_patin4; /* EB PRGD Pattern Insertion #4 */ + VINT32 prgd_patdet1; /* EC PRGD Pattern Detector #1 */ + VINT32 prgd_patdet2; /* ED PRGD Pattern Detector #2 */ + VINT32 prgd_patdet3; /* EE PRGD Pattern Detector #3 */ + VINT32 prgd_patdet4; /* EF PRGD Pattern Detector #4 */ + + VINT32 xlpg_cfg; /* F0 XLPG Line Driver Cfg */ + VINT32 xlpg_ctlsts; /* F1 XLPG Ctl/Sts */ + VINT32 xlpg_pwave_addr; /* F2 XLPG Pulse Waveform Storage Write Addr */ + VINT32 xlpg_pwave_data; /* F3 XLPG Pulse Waveform Storage Data */ + VINT32 xlpg_atest_pctl; /* F4 XLPG Analog Test Positive Ctl */ + VINT32 xlpg_atest_nctl; /* F5 XLPG Analog Test Negative Ctl */ + VINT32 xlpg_fdata_sel; /* F6 XLPG Fuse Data Select */ + VINT32 _xlpg_resF7; /* F7 XLPG Reserved */ + + VINT32 rlps_cfgsts; /* F8 RLPS Cfg & Sts */ + VINT32 rlps_alos_thresh; /* F9 RLPS ALOS Detection/Clearance Threshold */ + VINT32 rlps_alos_dper; /* FA RLPS ALOS Detection Period */ + VINT32 rlps_alos_cper; /* FB RLPS ALOS Clearance Period */ + VINT32 rlps_eq_iaddr; /* FC RLPS Equalization Indirect Addr */ + VINT32 rlps_eq_rwsel; /* FD RLPS Equalization Read/WriteB Select */ + VINT32 rlps_eq_ctlsts; /* FE RLPS Equalizer Loop Sts & Ctl */ + VINT32 rlps_eq_cfg; /* FF RLPS Equalizer Cfg */ +}; + +typedef struct s_comet_reg comet_t; + +/* 00AH: MDIAG Register bit definitions */ +#define COMET_MDIAG_ID5 0x40 +#define COMET_MDIAG_LBMASK 0x3F +#define COMET_MDIAG_PAYLB 0x20 +#define COMET_MDIAG_LINELB 0x10 +#define COMET_MDIAG_RAIS 0x08 +#define COMET_MDIAG_DDLB 0x04 +#define COMET_MDIAG_TXMFP 0x02 +#define COMET_MDIAG_TXLOS 0x01 +#define COMET_MDIAG_LBOFF 0x00 + +#undef VINT32 + +#ifdef __KERNEL__ +extern void +init_comet (void *, comet_t *, u_int32_t, int, u_int8_t); +#endif + +#endif /* _INC_COMET_H_ */ diff --git a/drivers/staging/cxt1e1/comet_tables.c b/drivers/staging/cxt1e1/comet_tables.c new file mode 100644 index 0000000..db1293c --- /dev/null +++ b/drivers/staging/cxt1e1/comet_tables.c @@ -0,0 +1,561 @@ +/* + * $Id: comet_tables.c,v 1.2 2005/10/17 23:55:27 rickd PMCC4_3_1B $ + */ + +/*----------------------------------------------------------------------------- + * comet_tables.c - waveform tables for the PM4351 'COMET' + * + * Copyright (C) 2003-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.2 $ + * Last changed on $Date: 2005/10/17 23:55:27 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: comet_tables.c,v $ + * Revision 1.2 2005/10/17 23:55:27 rickd + * Note that 75 Ohm transmit waveform is not supported on PMCC4. + * + * Revision 1.1 2005/09/28 00:10:05 rickd + * Cosmetic alignment of tables for readability. + * + * Revision 1.0 2005/05/10 22:47:53 rickd + * Initial revision + * + *----------------------------------------------------------------------------- + */ + +char SBEid_pmcc4_comet_tblc[] = + "@(#)comet_tables.c - $Revision: 1.2 $ (c) Copyright 2004-2005 SBE, Inc."; + + +#include + +/***************************************************************************** +* +* Array names: +* +* TWVLongHaul0DB +* TWVLongHaul7_5DB +* TWVLongHaul15DB +* TWVLongHaul22_5DB +* TWVShortHaul0 +* TWVShortHaul1 +* TWVShortHaul2 +* TWVShortHaul3 +* TWVShortHaul4 +* TWVShortHaul5 +* TWV_E1_120Ohm +* TWV_E1_75Ohm +* T1_Equalizer +* E1_Equalizer +* +*****************************************************************************/ + +u_int8_t TWVLongHaul0DB[25][5] =/* T1 Long Haul 0 DB */ +{ + {0x00, 0x44, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x0A, 0x44, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x20, 0x43, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x32, 0x43, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x3E, 0x42, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x3D, 0x42, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x3C, 0x41, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x3B, 0x41, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x39, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x39, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x38, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x37, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x36, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x34, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x29, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x4F, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x4C, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x49, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x46, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x46, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ + {0x0C} /* PMC's suggested value */ +/* {0x14} Output Amplitude */ +}; + +u_int8_t TWVLongHaul7_5DB[25][5] = /* T1 Long Haul 7.5 DB */ +{ + {0x00, 0x10, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x01, 0x0E, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x02, 0x0C, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x04, 0x0A, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x08, 0x08, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x0C, 0x06, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x10, 0x04, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x16, 0x02, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x1A, 0x01, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x1E, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x22, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x26, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x2A, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x2B, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x2C, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x2D, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x2C, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x28, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x24, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x20, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x1C, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x18, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x14, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x12, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ + {0x07} /* PMC's suggested value */ +/* { 0x0A } Output Amplitude */ +}; + +u_int8_t TWVLongHaul15DB[25][5] = /* T1 Long Haul 15 DB */ +{ + {0x00, 0x2A, 0x09, 0x01, 0x00}, /* Sample 0 */ + {0x00, 0x28, 0x08, 0x01, 0x00}, /* Sample 1 */ + {0x00, 0x26, 0x08, 0x01, 0x00}, /* Sample 2 */ + {0x00, 0x24, 0x07, 0x01, 0x00}, /* Sample 3 */ + {0x01, 0x22, 0x07, 0x01, 0x00}, /* Sample 4 */ + {0x02, 0x20, 0x06, 0x01, 0x00}, /* Sample 5 */ + {0x04, 0x1E, 0x06, 0x01, 0x00}, /* Sample 6 */ + {0x07, 0x1C, 0x05, 0x00, 0x00}, /* Sample 7 */ + {0x0A, 0x1B, 0x05, 0x00, 0x00}, /* Sample 8 */ + {0x0D, 0x19, 0x05, 0x00, 0x00}, /* Sample 9 */ + {0x10, 0x18, 0x04, 0x00, 0x00}, /* Sample 10 */ + {0x14, 0x16, 0x04, 0x00, 0x00}, /* Sample 11 */ + {0x18, 0x15, 0x04, 0x00, 0x00}, /* Sample 12 */ + {0x1B, 0x13, 0x03, 0x00, 0x00}, /* Sample 13 */ + {0x1E, 0x12, 0x03, 0x00, 0x00}, /* Sample 14 */ + {0x21, 0x10, 0x03, 0x00, 0x00}, /* Sample 15 */ + {0x24, 0x0F, 0x03, 0x00, 0x00}, /* Sample 16 */ + {0x27, 0x0D, 0x03, 0x00, 0x00}, /* Sample 17 */ + {0x2A, 0x0D, 0x02, 0x00, 0x00}, /* Sample 18 */ + {0x2D, 0x0B, 0x02, 0x00, 0x00}, /* Sample 19 */ + {0x30, 0x0B, 0x02, 0x00, 0x00}, /* Sample 20 */ + {0x30, 0x0A, 0x02, 0x00, 0x00}, /* Sample 21 */ + {0x2E, 0x0A, 0x02, 0x00, 0x00}, /* Sample 22 */ + {0x2C, 0x09, 0x02, 0x00, 0x00}, /* Sample 23 */ + {0x03} /* Output Amplitude */ +}; + +u_int8_t TWVLongHaul22_5DB[25][5] = /* T1 Long Haul 22.5 DB */ +{ + {0x00, 0x1F, 0x16, 0x06, 0x01}, /* Sample 0 */ + {0x00, 0x20, 0x15, 0x05, 0x01}, /* Sample 1 */ + {0x00, 0x21, 0x15, 0x05, 0x01}, /* Sample 2 */ + {0x00, 0x22, 0x14, 0x05, 0x01}, /* Sample 3 */ + {0x00, 0x22, 0x13, 0x04, 0x00}, /* Sample 4 */ + {0x00, 0x23, 0x12, 0x04, 0x00}, /* Sample 5 */ + {0x01, 0x23, 0x12, 0x04, 0x00}, /* Sample 6 */ + {0x01, 0x24, 0x11, 0x03, 0x00}, /* Sample 7 */ + {0x01, 0x23, 0x10, 0x03, 0x00}, /* Sample 8 */ + {0x02, 0x23, 0x10, 0x03, 0x00}, /* Sample 9 */ + {0x03, 0x22, 0x0F, 0x03, 0x00}, /* Sample 10 */ + {0x05, 0x22, 0x0E, 0x03, 0x00}, /* Sample 11 */ + {0x07, 0x21, 0x0E, 0x02, 0x00}, /* Sample 12 */ + {0x09, 0x20, 0x0D, 0x02, 0x00}, /* Sample 13 */ + {0x0B, 0x1E, 0x0C, 0x02, 0x00}, /* Sample 14 */ + {0x0E, 0x1D, 0x0C, 0x02, 0x00}, /* Sample 15 */ + {0x10, 0x1B, 0x0B, 0x02, 0x00}, /* Sample 16 */ + {0x13, 0x1B, 0x0A, 0x02, 0x00}, /* Sample 17 */ + {0x15, 0x1A, 0x0A, 0x02, 0x00}, /* Sample 18 */ + {0x17, 0x19, 0x09, 0x01, 0x00}, /* Sample 19 */ + {0x19, 0x19, 0x08, 0x01, 0x00}, /* Sample 20 */ + {0x1B, 0x18, 0x08, 0x01, 0x00}, /* Sample 21 */ + {0x1D, 0x17, 0x07, 0x01, 0x00}, /* Sample 22 */ + {0x1E, 0x17, 0x06, 0x01, 0x00}, /* Sample 23 */ + {0x02} /* Output Amplitude */ +}; + +u_int8_t TWVShortHaul0[25][5] = /* T1 Short Haul 0 - 110 ft */ +{ + {0x00, 0x45, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x0A, 0x44, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x20, 0x43, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x3F, 0x42, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x3F, 0x42, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x3C, 0x41, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x3B, 0x41, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x39, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x39, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x38, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x37, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x36, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x34, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x29, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x59, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x55, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x50, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x4D, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x48, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x46, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x46, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ + {0x0C} /* Output Amplitude */ +}; + +u_int8_t TWVShortHaul1[25][5] = /* T1 Short Haul 110 - 220 ft */ +{ + {0x00, 0x44, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x0A, 0x44, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x36, 0x42, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x34, 0x42, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x30, 0x41, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x2F, 0x41, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x2E, 0x00, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x2D, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x2C, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x2B, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x2A, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x28, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x26, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x68, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x54, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x4F, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x49, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x46, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ + {0x10} /* Output Amplitude */ +}; + +u_int8_t TWVShortHaul2[25][5] = /* T1 Short Haul 220 - 330 ft */ +{ + {0x00, 0x44, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x0A, 0x44, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x3A, 0x43, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x3A, 0x42, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x38, 0x42, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x30, 0x41, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x2F, 0x41, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x2E, 0x00, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x2D, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x2C, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x2B, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x2A, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x29, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x23, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x6C, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x60, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x4F, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x49, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x46, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ + {0x11} /* Output Amplitude */ +}; + +u_int8_t TWVShortHaul3[25][5] = /* T1 Short Haul 330 - 440 ft */ +{ + {0x00, 0x44, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x0A, 0x44, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x3F, 0x42, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x3F, 0x42, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x2F, 0x41, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x2E, 0x41, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x2D, 0x00, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x2C, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x2B, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x2A, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x29, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x28, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x19, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x7F, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x60, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x4F, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x49, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x46, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ + {0x12} /* Output Amplitude */ +}; + +u_int8_t TWVShortHaul4[25][5] = /* T1 Short Haul 440 - 550 ft */ +{ + {0x00, 0x44, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x0A, 0x44, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x3F, 0x42, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x3F, 0x42, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x30, 0x41, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x2B, 0x41, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x2A, 0x00, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x29, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x28, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x27, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x26, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x26, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x24, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x7F, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x7F, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x4F, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x49, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x46, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ + {0x14} /* Output Amplitude */ +}; + +u_int8_t TWVShortHaul5[25][5] = /* T1 Short Haul 550 - 660 ft */ +{ + {0x00, 0x44, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x0A, 0x44, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x3F, 0x43, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x3F, 0x42, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x3F, 0x42, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x3F, 0x41, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x30, 0x41, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x2A, 0x00, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x29, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x28, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x27, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x26, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x25, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x24, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x4A, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x7F, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x7F, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x5F, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x50, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x49, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x47, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x46, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ + {0x15} /* Output Amplitude */ +}; + +u_int8_t TWV_E1_120Ohm[25][5] = /* E1 120 Ohm */ +{ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x0A, 0x00, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x3F, 0x00, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x3F, 0x00, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x39, 0x00, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x38, 0x00, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x36, 0x00, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x36, 0x00, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x35, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x35, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x35, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x35, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x35, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x35, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x2D, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ + {0x0C} /* PMC's suggested value */ +/* { 0x10 } Output Amplitude */ +}; + + + +u_int8_t TWV_E1_75Ohm[25][5] = /* E1 75 Ohm */ +{ +#ifdef PMCC4_DOES_NOT_SUPPORT + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 0 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 1 */ + {0x0A, 0x00, 0x00, 0x00, 0x00}, /* Sample 2 */ + {0x28, 0x00, 0x00, 0x00, 0x00}, /* Sample 3 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 4 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 5 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 6 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 7 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 8 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 9 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 10 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 11 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 12 */ + {0x3A, 0x00, 0x00, 0x00, 0x00}, /* Sample 13 */ + {0x32, 0x00, 0x00, 0x00, 0x00}, /* Sample 14 */ + {0x14, 0x00, 0x00, 0x00, 0x00}, /* Sample 15 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 16 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 17 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 18 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 19 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 20 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 21 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 22 */ + {0x00, 0x00, 0x00, 0x00, 0x00}, /* Sample 23 */ +#endif + {0x0C} /* Output Amplitude */ +}; + + +u_int32_t T1_Equalizer[256] = /* T1 Receiver Equalizer */ +{ + 0x03FE1840, 0x03F61840, 0x03EE1840, 0x03E61840, /* 000 - 003 */ + 0x03DE1840, 0x03D61840, 0x03D61840, 0x03D61840, /* 004 - 007 */ + 0x03CE1840, 0x03CE1840, 0x03CE1840, 0x03CE1840, /* 008 - 011 */ + 0x03C61840, 0x03C61840, 0x03C61840, 0x0BBE1840, /* 012 - 015 */ + 0x0BBE1840, 0x0BBE1840, 0x0BBE1840, 0x0BB61840, /* 016 - 019 */ + 0x0BB61840, 0x0BB61840, 0x0BB61840, 0x13AE1838, /* 020 - 023 */ + 0x13AE183C, 0x13AE1840, 0x13AE1840, 0x13AE1840, /* 024 - 027 */ + 0x13AE1840, 0x1BB618B8, 0x1BAE18B8, 0x1BAE18BC, /* 028 - 031 */ + 0x1BAE18C0, 0x1BAE18C0, 0x23A618C0, 0x23A618C0, /* 032 - 035 */ + 0x23A618C0, 0x23A618C0, 0x23A618C0, 0x239E18C0, /* 036 - 039 */ + 0x239E18C0, 0x239E18C0, 0x239E18C0, 0x239E18C0, /* 040 - 043 */ + 0x2B9618C0, 0x2B9618C0, 0x2B9618C0, 0x33961940, /* 044 - 047 */ + 0x37961940, 0x37961940, 0x37961940, 0x3F9E19C0, /* 048 - 051 */ + 0x3F9E19C0, 0x3F9E19C0, 0x3FA61A40, 0x3FA61A40, /* 052 - 055 */ + 0x3FA61A40, 0x3FA61A40, 0x3F9619C0, 0x3F9619C0, /* 056 - 059 */ + 0x3F9619C0, 0x3F9619C0, 0x479E1A40, 0x479E1A40, /* 060 - 063 */ + 0x479E1A40, 0x47961A40, 0x47961A40, 0x47961A40, /* 064 - 067 */ + 0x47961A40, 0x4F8E1A40, 0x4F8E1A40, 0x4F8E1A40, /* 068 - 071 */ + 0x4F8E1A40, 0x4F8E1A40, 0x57861A40, 0x57861A40, /* 072 - 075 */ + 0x57861A40, 0x57861A40, 0x57861A40, 0x5F861AC0, /* 076 - 079 */ + 0x5F861AC0, 0x5F861AC0, 0x5F861AC0, 0x5F861AC0, /* 080 - 083 */ + 0x5F861AC0, 0x5F7E1AC0, 0x5F7E1AC0, 0x5F7E1AC0, /* 084 - 087 */ + 0x5F7E1AC0, 0x5F7E1AC0, 0x677E2AC0, 0x677E2AC0, /* 088 - 091 */ + 0x677E2AC0, 0x677E2AC0, 0x67762AC0, 0x67762AC0, /* 092 - 095 */ + 0x67762AC0, 0x67762AC0, 0x67762AC0, 0x6F6E2AC0, /* 096 - 099 */ + 0x6F6E2AC0, 0x6F6E2AC0, 0x6F6E2AC0, 0x776E3AC0, /* 100 - 103 */ + 0x776E3AC0, 0x776E3AC0, 0x776E3AC0, 0x7F663AC0, /* 104 - 107 */ + 0x7F663AC0, 0x7F664AC0, 0x7F664AC0, 0x7F664AC0, /* 108 - 111 */ + 0x7F664AC0, 0x87665AC0, 0x87665AC0, 0x87665AC0, /* 112 - 115 */ + 0x87665AC0, 0x87665AC0, 0x875E5AC0, 0x875E5AC0, /* 116 - 119 */ + 0x875E5AC0, 0x875E5AC0, 0x875E5AC0, 0x8F5E6AC0, /* 120 - 123 */ + 0x8F5E6AC0, 0x8F5E6AC0, 0x8F5E6AC0, 0x975E7AC0, /* 124 - 127 */ + 0x975E7AC0, 0x975E7AC0, 0x975E7AC0, 0x9F5E8AC0, /* 128 - 131 */ + 0x9F5E8AC0, 0x9F5E8AC0, 0x9F5E8AC0, 0x9F5E8AC0, /* 132 - 135 */ + 0xA7569AC0, 0xA7569AC0, 0xA7569AC0, 0xA7569AC0, /* 136 - 139 */ + 0xA756AAC0, 0xA756AAC0, 0xA756AAC0, 0xAF4EAAC0, /* 140 - 143 */ + 0xAF4EAAC0, 0xAF4EAAC0, 0xAF4EAAC0, 0xAF4EAAC0, /* 144 - 147 */ + 0xB746AAC0, 0xB746AAC0, 0xB746AAC0, 0xB746AAC0, /* 148 - 151 */ + 0xB746AAC0, 0xB746AAC0, 0xB746AAC0, 0xB746BAC0, /* 152 - 155 */ + 0xB746BAC0, 0xB746BAC0, 0xBF4EBB40, 0xBF4EBB40, /* 156 - 159 */ + 0xBF4EBB40, 0xBF4EBB40, 0xBF4EBB40, 0xBF4EBB40, /* 160 - 163 */ + 0xBF4EBB40, 0xBF4EBB40, 0xBF4EBB40, 0xBE46CB40, /* 164 - 167 */ + 0xBE46CB40, 0xBE46CB40, 0xBE46CB40, 0xBE46CB40, /* 168 - 171 */ + 0xBE46CB40, 0xBE46DB40, 0xBE46DB40, 0xBE46DB40, /* 172 - 175 */ + 0xC63ECB40, 0xC63ECB40, 0xC63EDB40, 0xC63EDB40, /* 176 - 179 */ + 0xC63EDB40, 0xC644DB40, 0xC644DB40, 0xC644DB40, /* 180 - 183 */ + 0xC644DB40, 0xC63CDB40, 0xC63CDB40, 0xC63CDB40, /* 184 - 187 */ + 0xC63CDB40, 0xD634DB40, 0xD634DB40, 0xD634DB40, /* 188 - 191 */ + 0xD634DB40, 0xD634DB40, 0xDE2CDB3C, 0xDE2CDB3C, /* 192 - 195 */ + 0xDE2CDB3C, 0xE62CDB40, 0xE62CDB40, 0xE62CDB40, /* 196 - 199 */ + 0xE62CDB40, 0xE62CDB40, 0xE62CEB40, 0xE62CEB40, /* 200 - 203 */ + 0xE62CEB40, 0xEE2CFB40, 0xEE2CFB40, 0xEE2CFB40, /* 204 - 207 */ + 0xEE2D0B40, 0xEE2D0B40, 0xEE2D0B40, 0xEE2D0B40, /* 208 - 211 */ + 0xEE2D0B40, 0xF5250B38, 0xF5250B3C, 0xF5250B40, /* 212 - 215 */ + 0xF5251B40, 0xF5251B40, 0xF5251B40, 0xF5251B40, /* 216 - 219 */ + 0xF5251B40, 0xFD252B40, 0xFD252B40, 0xFD252B40, /* 220 - 223 */ + 0xFD252B40, 0xFD252740, 0xFD252740, 0xFD252740, /* 224 - 227 */ + 0xFD252340, 0xFD252340, 0xFD252340, 0xFD253340, /* 228 - 231 */ + 0xFD253340, 0xFD253340, 0xFD253340, 0xFD253340, /* 232 - 235 */ + 0xFD253340, 0xFD253340, 0xFD253340, 0xFC254340, /* 236 - 239 */ + 0xFD254340, 0xFD254340, 0xFD254344, 0xFC254348, /* 240 - 243 */ + 0xFC25434C, 0xFD2543BC, 0xFD2543C0, 0xFC2543C0, /* 244 - 247 */ + 0xFC2343C0, 0xFC2343C0, 0xFD2343C0, 0xFC2143C0, /* 248 - 251 */ + 0xFC2143C0, 0xFC2153C0, 0xFD2153C0, 0xFC2153C0 /* 252 - 255 */ +}; + + +u_int32_t E1_Equalizer[256] = /* E1 Receiver Equalizer */ +{ + 0x07DE182C, 0x07DE182C, 0x07D6182C, 0x07D6182C, /* 000 - 003 */ + 0x07D6182C, 0x07CE182C, 0x07CE182C, 0x07CE182C, /* 004 - 007 */ + 0x07C6182C, 0x07C6182C, 0x07C6182C, 0x07BE182C, /* 008 - 011 */ + 0x07BE182C, 0x07BE182C, 0x07BE182C, 0x07BE182C, /* 012 - 015 */ + 0x07B6182C, 0x07B6182C, 0x07B6182C, 0x07B6182C, /* 016 - 019 */ + 0x07B6182C, 0x07AE182C, 0x07AE182C, 0x07AE182C, /* 020 - 023 */ + 0x07AE182C, 0x07AE182C, 0x07B618AC, 0x07AE18AC, /* 024 - 027 */ + 0x07AE18AC, 0x07AE18AC, 0x07AE18AC, 0x07A618AC, /* 028 - 031 */ + 0x07A618AC, 0x07A618AC, 0x07A618AC, 0x079E18AC, /* 032 - 035 */ + 0x07A6192C, 0x07A6192C, 0x07A6192C, 0x0FA6192C, /* 036 - 039 */ + 0x0FA6192C, 0x0F9E192C, 0x0F9E192C, 0x0F9E192C, /* 040 - 043 */ + 0x179E192C, 0x17A619AC, 0x179E19AC, 0x179E19AC, /* 044 - 047 */ + 0x179619AC, 0x1F9619AC, 0x1F9619AC, 0x1F8E19AC, /* 048 - 051 */ + 0x1F8E19AC, 0x1F8E19AC, 0x278E19AC, 0x278E1A2C, /* 052 - 055 */ + 0x278E1A2C, 0x278E1A2C, 0x278E1A2C, 0x2F861A2C, /* 056 - 059 */ + 0x2F861A2C, 0x2F861A2C, 0x2F7E1A2C, 0x2F7E1A2C, /* 060 - 063 */ + 0x2F7E1A2C, 0x377E1A2C, 0x377E1AAC, 0x377E1AAC, /* 064 - 067 */ + 0x377E1AAC, 0x377E1AAC, 0x3F7E2AAC, 0x3F7E2AAC, /* 068 - 071 */ + 0x3F762AAC, 0x3F862B2C, 0x3F7E2B2C, 0x477E2B2C, /* 072 - 075 */ + 0x477E2F2C, 0x477E2F2C, 0x477E2F2C, 0x47762F2C, /* 076 - 079 */ + 0x4F762F2C, 0x4F762F2C, 0x4F6E2F2C, 0x4F6E2F2C, /* 080 - 083 */ + 0x4F6E2F2C, 0x576E2F2C, 0x576E2F2C, 0x576E3F2C, /* 084 - 087 */ + 0x576E3F2C, 0x576E3F2C, 0x5F6E3F2C, 0x5F6E4F2C, /* 088 - 091 */ + 0x5F6E4F2C, 0x5F6E4F2C, 0x5F664F2C, 0x67664F2C, /* 092 - 095 */ + 0x67664F2C, 0x675E4F2C, 0x675E4F2C, 0x67664F2C, /* 096 - 099 */ + 0x67664F2C, 0x67665F2C, 0x6F6E5F2C, 0x6F6E6F2C, /* 100 - 103 */ + 0x6F6E6F2C, 0x6F6E7F2C, 0x6F6E7F2C, 0x6F6E7F2C, /* 104 - 107 */ + 0x77667F2C, 0x77667F2C, 0x775E6F2C, 0x775E7F2C, /* 108 - 111 */ + 0x775E7F2C, 0x7F5E7F2C, 0x7F5E8F2C, 0x7F5E8F2C, /* 112 - 115 */ + 0x7F5E8F2C, 0x87568F2C, 0x87568F2C, 0x87568F2C, /* 116 - 119 */ + 0x874E8F2C, 0x874E8F2C, 0x874E8F2C, 0x8F4E9F2C, /* 120 - 123 */ + 0x8F4E9F2C, 0x8F4EAF2C, 0x8F4EAF2C, 0x8F4EAF2C, /* 124 - 127 */ + 0x974EAF2C, 0x974EAF2C, 0x974EAB2C, 0x974EAB2C, /* 128 - 131 */ + 0x974EAB2C, 0x9F4EAB2C, 0x9F4EBB2C, 0x9F4EBB2C, /* 132 - 135 */ + 0x9F4EBB2C, 0x9F4ECB2C, 0xA74ECB2C, 0xA74ECB2C, /* 136 - 139 */ + 0xA746CB2C, 0xA746CB2C, 0xA746CB2C, 0xA746DB2C, /* 140 - 143 */ + 0xAF46DB2C, 0xAF46EB2C, 0xAF46EB2C, 0xAF4EEB2C, /* 144 - 147 */ + 0xAE4EEB2C, 0xAE4EEB2C, 0xB546FB2C, 0xB554FB2C, /* 148 - 151 */ + 0xB54CEB2C, 0xB554FB2C, 0xB554FB2C, 0xBD54FB2C, /* 152 - 155 */ + 0xBD4CFB2C, 0xBD4CFB2C, 0xBD4CFB2C, 0xBD44EB2C, /* 156 - 159 */ + 0xC544FB2C, 0xC544FB2C, 0xC544FB2C, 0xC5450B2C, /* 160 - 163 */ + 0xC5450B2C, 0xC5450B2C, 0xCD450B2C, 0xCD450B2C, /* 164 - 167 */ + 0xCD3D0B2C, 0xCD3D0B2C, 0xCD3D0B2C, 0xD53D0B2C, /* 168 - 171 */ + 0xD53D0B2C, 0xD53D1B2C, 0xD53D1B2C, 0xD53D1B2C, /* 172 - 175 */ + 0xDD3D1B2C, 0xDD3D1B2C, 0xDD351B2C, 0xDD351B2C, /* 176 - 179 */ + 0xDD351B2C, 0xE5351B2C, 0xE5351B2C, 0xE52D1B2C, /* 180 - 183 */ + 0xE52D1B2C, 0xE52D3B2C, 0xED2D4B2C, 0xED2D1BA8, /* 184 - 187 */ + 0xED2D1BAC, 0xED2D17AC, 0xED2D17AC, 0xED2D27AC, /* 188 - 191 */ + 0xF52D27AC, 0xF52D27AC, 0xF52D2BAC, 0xF52D2BAC, /* 192 - 195 */ + 0xF52D2BAC, 0xFD2D2BAC, 0xFD2B2BAC, 0xFD2B2BAC, /* 196 - 199 */ + 0xFD2B2BAC, 0xFD2B2BAC, 0xFD232BAC, 0xFD232BAC, /* 200 - 203 */ + 0xFD232BAC, 0xFD212BAC, 0xFD212BAC, 0xFD292BAC, /* 204 - 207 */ + 0xFD292BAC, 0xFD2927AC, 0xFD2937AC, 0xFD2923AC, /* 208 - 211 */ + 0xFD2923AC, 0xFD2923AC, 0xFD2923AC, 0xFD2123AC, /* 212 - 215 */ + 0xFD2123AC, 0xFD2123AC, 0xFD2133AC, 0xFD2133AC, /* 216 - 219 */ + 0xFD2133AC, 0xFD2143AC, 0xFD2143AC, 0xFD2143AC, /* 220 - 223 */ + 0xFC2143AC, 0xFC2143AC, 0xFC1943AC, 0xFC1943AC, /* 224 - 227 */ + 0xFC1943AC, 0xFC1943AC, 0xFC1953AC, 0xFC1953AC, /* 228 - 231 */ + 0xFC1953AC, 0xFC1953AC, 0xFC1963AC, 0xFC1963AC, /* 232 - 235 */ + 0xFC1963AC, 0xFC1973AC, 0xFC1973AC, 0xFC1973AC, /* 236 - 239 */ + 0xFC1973AC, 0xFC1973AC, 0xFC1983AC, 0xFC1983AC, /* 240 - 243 */ + 0xFC1983AC, 0xFC1983AC, 0xFC1983AC, 0xFC1993AC, /* 244 - 247 */ + 0xFC1993AC, 0xFC1993AC, 0xFC19A3AC, 0xFC19A3AC, /* 248 - 251 */ + 0xFC19B3AC, 0xFC19B3AC, 0xFC19B3AC, 0xFC19B3AC /* 252 - 255 */ +}; + +/*** End-of-Files ***/ diff --git a/drivers/staging/cxt1e1/comet_tables.h b/drivers/staging/cxt1e1/comet_tables.h new file mode 100644 index 0000000..80424a2 --- /dev/null +++ b/drivers/staging/cxt1e1/comet_tables.h @@ -0,0 +1,85 @@ +/* + * $Id: comet_tables.h,v 1.5 2006/01/02 22:37:31 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_COMET_TBLS_H_ +#define _INC_COMET_TBLS_H_ + +/*----------------------------------------------------------------------------- + * comet_tables.h - Waveform Tables for the PM4351 'COMET' + * + * Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.5 $ + * Last changed on $Date: 2006/01/02 22:37:31 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: comet_tables.h,v $ + * Revision 1.5 2006/01/02 22:37:31 rickd + * Double indexed arrays need sizings to avoid CC errors under + * gcc 4.0.0 + * + * Revision 1.4 2005/10/17 23:55:28 rickd + * The 75 Ohm transmit waveform is not supported on PMCC4. + * + * Revision 1.3 2005/09/28 00:10:08 rickd + * Add GNU License info. Structures moved to -C- file. + * + * Revision 1.2 2005/04/28 23:43:04 rickd + * Add RCS tracking heading. + * + *----------------------------------------------------------------------------- + */ + + +/***************************************************************************** +* +* Array names: +* +* TWVLongHaul0DB +* TWVLongHaul7_5DB +* TWVLongHaul15DB +* TWVLongHaul22_5DB +* TWVShortHaul0 +* TWVShortHaul1 +* TWVShortHaul2 +* TWVShortHaul3 +* TWVShortHaul4 +* TWVShortHaul5 +* TWV_E1_120Ohm +* TWV_E1_75Ohm +* T1_Equalizer +* E1_Equalizer +* +*****************************************************************************/ + +extern u_int8_t TWVLongHaul0DB[25][5]; /* T1 Long Haul 0 DB */ +extern u_int8_t TWVLongHaul7_5DB[25][5]; /* T1 Long Haul 7.5 DB */ +extern u_int8_t TWVLongHaul15DB[25][5]; /* T1 Long Haul 15 DB */ +extern u_int8_t TWVLongHaul22_5DB[25][5]; /* T1 Long Haul 22.5 DB */ +extern u_int8_t TWVShortHaul0[25][5]; /* T1 Short Haul 0-110 ft */ +extern u_int8_t TWVShortHaul1[25][5]; /* T1 Short Haul 110-220 ft */ +extern u_int8_t TWVShortHaul2[25][5]; /* T1 Short Haul 220-330 ft */ +extern u_int8_t TWVShortHaul3[25][5]; /* T1 Short Haul 330-440 ft */ +extern u_int8_t TWVShortHaul4[25][5]; /* T1 Short Haul 440-550 ft */ +extern u_int8_t TWVShortHaul5[25][5]; /* T1 Short Haul 550-660 ft */ +extern u_int8_t TWV_E1_75Ohm[25][5]; /* E1 75 Ohm */ +extern u_int8_t TWV_E1_120Ohm[25][5]; /* E1 120 Ohm */ +extern u_int32_t T1_Equalizer[256]; /* T1 Receiver Equalizer */ +extern u_int32_t E1_Equalizer[256]; /* E1 Receiver Equalizer */ + +#endif /* _INC_COMET_TBLS_H_ */ diff --git a/drivers/staging/cxt1e1/functions.c b/drivers/staging/cxt1e1/functions.c new file mode 100644 index 0000000..c95c62d --- /dev/null +++ b/drivers/staging/cxt1e1/functions.c @@ -0,0 +1,366 @@ +/* Copyright (C) 2003-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include "pmcc4_sysdep.h" +#include "sbecom_inline_linux.h" +#include "libsbew.h" +#include "pmcc4.h" + + +#ifdef SBE_INCLUDE_SYMBOLS +#define STATIC +#else +#define STATIC static +#endif + +#if defined(CONFIG_SBE_HDLC_V7) || defined(CONFIG_SBE_WAN256T3_HDLC_V7) || \ + defined(CONFIG_SBE_HDLC_V7_MODULE) || defined(CONFIG_SBE_WAN256T3_HDLC_V7_MODULE) +#define _v7_hdlc_ 1 +#else +#define _v7_hdlc_ 0 +#endif + +#if _v7_hdlc_ +#define V7(x) (x ## _v7) +extern int hdlc_netif_rx_v7 (hdlc_device *, struct sk_buff *); +extern int register_hdlc_device_v7 (hdlc_device *); +extern int unregister_hdlc_device_v7 (hdlc_device *); + +#else +#define V7(x) x +#endif + + +#ifndef USE_MAX_INT_DELAY +static int dummy = 0; + +#endif + +extern int log_level; +extern int drvr_state; + + +#if 1 +u_int32_t +pci_read_32 (u_int32_t *p) +{ +#ifdef FLOW_DEBUG + u_int32_t v; + + FLUSH_PCI_READ (); + v = le32_to_cpu (*p); + if (log_level >= LOG_DEBUG) + printk ("pci_read : %x = %x\n", (u_int32_t) p, v); + return v; +#else + FLUSH_PCI_READ (); /* */ + return le32_to_cpu (*p); +#endif +} + +void +pci_write_32 (u_int32_t *p, u_int32_t v) +{ +#ifdef FLOW_DEBUG + if (log_level >= LOG_DEBUG) + printk ("pci_write: %x = %x\n", (u_int32_t) p, v); +#endif + *p = cpu_to_le32 (v); + FLUSH_PCI_WRITE (); /* This routine is called from routines + * which do multiple register writes + * which themselves need flushing between + * writes in order to guarantee write + * ordering. It is less code-cumbersome + * to flush here-in then to investigate + * and code the many other register + * writing routines. */ +} +#endif + + +void +pci_flush_write (ci_t * ci) +{ + volatile u_int32_t v; + + /* issue a PCI read to flush PCI write thru bridge */ + v = *(u_int32_t *) &ci->reg->glcd; /* any address would do */ + + /* + * return nothing, this just reads PCI bridge interface to flush + * previously written data + */ +} + + +STATIC void +watchdog_func (unsigned long arg) +{ + struct watchdog *wd = (void *) arg; + + if (drvr_state != SBE_DRVR_AVAILABLE) + { + if (log_level >= LOG_MONITOR) + printk (KERN_WARNING "watchdog_func: drvr not available (%x)\n", drvr_state); + return; + } +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + /* Initialize the tq entry only the first time */ + if (wd->init_tq) + { + wd->init_tq = 0; + wd->tq.routine = wd->func; + wd->tq.sync = 0; + wd->tq.data = wd->softc; + } + schedule_task (&wd->tq); +#else + schedule_work (&wd->work); +#endif + mod_timer (&wd->h, jiffies + wd->ticks); +} + +int OS_init_watchdog(struct watchdog *wdp, void (*f) (void *), void *c, int usec) +{ + wdp->func = f; + wdp->softc = c; + wdp->ticks = (HZ) * (usec / 1000) / 1000; + INIT_WORK(&wdp->work, (void *)f); + init_timer (&wdp->h); + { + ci_t *ci = (ci_t *) c; + + wdp->h.data = (unsigned long) &ci->wd; + } + wdp->h.function = watchdog_func; + return 0; +} + +void +OS_uwait (int usec, char *description) +{ + int tmp; + + if (usec >= 1000) + { + mdelay (usec / 1000); + /* now delay residual */ + tmp = (usec / 1000) * 1000; /* round */ + tmp = usec - tmp; /* residual */ + if (tmp) + { /* wait on residual */ + udelay (tmp); + } + } else + { + udelay (usec); + } +} + +/* dummy short delay routine called as a subroutine so that compiler + * does not optimize/remove its intent (a short delay) + */ + +void +OS_uwait_dummy (void) +{ +#ifndef USE_MAX_INT_DELAY + dummy++; +#else + udelay (1); +#endif +} + + +void +OS_sem_init (void *sem, int state) +{ + switch (state) + { + case SEM_TAKEN: + init_MUTEX_LOCKED ((struct semaphore *) sem); + break; + case SEM_AVAILABLE: + init_MUTEX ((struct semaphore *) sem); + break; + default: /* otherwise, set sem.count to state's + * value */ + sema_init (sem, state); + break; + } +} + + +int +sd_line_is_ok (void *user) +{ + struct net_device *ndev = (struct net_device *) user; + + return (netif_carrier_ok (ndev)); +} + +void +sd_line_is_up (void *user) +{ + struct net_device *ndev = (struct net_device *) user; + + netif_carrier_on (ndev); + return; +} + +void +sd_line_is_down (void *user) +{ + struct net_device *ndev = (struct net_device *) user; + + netif_carrier_off (ndev); + return; +} + +void +sd_disable_xmit (void *user) +{ + struct net_device *dev = (struct net_device *) user; + + netif_stop_queue (dev); + return; +} + +void +sd_enable_xmit (void *user) +{ + struct net_device *dev = (struct net_device *) user; + + netif_wake_queue (dev); + return; +} + +int +sd_queue_stopped (void *user) +{ + struct net_device *ndev = (struct net_device *) user; + + return (netif_queue_stopped (ndev)); +} + +void sd_recv_consume(void *token, size_t len, void *user) +{ + struct net_device *ndev = user; + struct sk_buff *skb = token; + + skb->dev = ndev; + skb_put (skb, len); + skb->protocol = hdlc_type_trans(skb, ndev); + netif_rx(skb); +} + + +/** + ** Read some reserved location w/in the COMET chip as a usable + ** VMETRO trigger point or other trace marking event. + **/ + +#include "comet.h" + +extern ci_t *CI; /* dummy pointer to board ZERO's data */ +void +VMETRO_TRACE (void *x) +{ + u_int32_t y = (u_int32_t) x; + + pci_write_32 ((u_int32_t *) &CI->cpldbase->leds, y); +} + + +void +VMETRO_TRIGGER (ci_t * ci, int x) +{ + comet_t *comet; + volatile u_int32_t data; + + comet = ci->port[0].cometbase; /* default to COMET # 0 */ + + switch (x) + { + default: + case 0: + data = pci_read_32 ((u_int32_t *) &comet->__res24); /* 0x90 */ + break; + case 1: + data = pci_read_32 ((u_int32_t *) &comet->__res25); /* 0x94 */ + break; + case 2: + data = pci_read_32 ((u_int32_t *) &comet->__res26); /* 0x98 */ + break; + case 3: + data = pci_read_32 ((u_int32_t *) &comet->__res27); /* 0x9C */ + break; + case 4: + data = pci_read_32 ((u_int32_t *) &comet->__res88); /* 0x220 */ + break; + case 5: + data = pci_read_32 ((u_int32_t *) &comet->__res89); /* 0x224 */ + break; + case 6: + data = pci_read_32 ((u_int32_t *) &comet->__res8A); /* 0x228 */ + break; + case 7: + data = pci_read_32 ((u_int32_t *) &comet->__res8B); /* 0x22C */ + break; + case 8: + data = pci_read_32 ((u_int32_t *) &comet->__resA0); /* 0x280 */ + break; + case 9: + data = pci_read_32 ((u_int32_t *) &comet->__resA1); /* 0x284 */ + break; + case 10: + data = pci_read_32 ((u_int32_t *) &comet->__resA2); /* 0x288 */ + break; + case 11: + data = pci_read_32 ((u_int32_t *) &comet->__resA3); /* 0x28C */ + break; + case 12: + data = pci_read_32 ((u_int32_t *) &comet->__resA4); /* 0x290 */ + break; + case 13: + data = pci_read_32 ((u_int32_t *) &comet->__resA5); /* 0x294 */ + break; + case 14: + data = pci_read_32 ((u_int32_t *) &comet->__resA6); /* 0x298 */ + break; + case 15: + data = pci_read_32 ((u_int32_t *) &comet->__resA7); /* 0x29C */ + break; + case 16: + data = pci_read_32 ((u_int32_t *) &comet->__res74); /* 0x1D0 */ + break; + case 17: + data = pci_read_32 ((u_int32_t *) &comet->__res75); /* 0x1D4 */ + break; + case 18: + data = pci_read_32 ((u_int32_t *) &comet->__res76); /* 0x1D8 */ + break; + case 19: + data = pci_read_32 ((u_int32_t *) &comet->__res77); /* 0x1DC */ + break; + } +} + + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/hwprobe.c b/drivers/staging/cxt1e1/hwprobe.c new file mode 100644 index 0000000..0f9d653 --- /dev/null +++ b/drivers/staging/cxt1e1/hwprobe.c @@ -0,0 +1,400 @@ +/* Copyright (C) 2007 One Stop Systems + * Copyright (C) 2003-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include "pmcc4_sysdep.h" +#include "sbecom_inline_linux.h" +#include "libsbew.h" +#include "pmcc4_private.h" +#include "pmcc4.h" +#include "pmcc4_ioctls.h" +#include "pmc93x6_eeprom.h" +#ifdef CONFIG_PROC_FS +#include "sbeproc.h" +#endif + +#ifdef SBE_INCLUDE_SYMBOLS +#define STATIC +#else +#define STATIC static +#endif + +extern int log_level; +extern int error_flag; +extern int drvr_state; + +/* forward references */ +void c4_stopwd (ci_t *); +struct net_device * __init c4_add_dev (hdw_info_t *, int, unsigned long, unsigned long, int, int); + + +struct s_hdw_info hdw_info[MAX_BOARDS]; + + +void __init +show_two (hdw_info_t * hi, int brdno) +{ + ci_t *ci; + struct pci_dev *pdev; + char *bid; + char *bp, banner[80]; + char sn[6]; + + bp = banner; + memset (banner, 0, 80); /* clear print buffer */ + + ci = (ci_t *)(netdev_priv(hi->ndev)); + bid = sbeid_get_bdname (ci); + switch (hi->promfmt) + { + case PROM_FORMAT_TYPE1: + memcpy (sn, (FLD_TYPE1 *) (hi->mfg_info.pft1.Serial), 6); + break; + case PROM_FORMAT_TYPE2: + memcpy (sn, (FLD_TYPE2 *) (hi->mfg_info.pft2.Serial), 6); + break; + default: + memset (sn, 0, 6); + break; + } + + sprintf (banner, "%s: %s S/N %06X, MUSYCC Rev %02X", + hi->devname, bid, + ((sn[3] << 16) & 0xff0000) | + ((sn[4] << 8) & 0x00ff00) | + (sn[5] & 0x0000ff), + (u_int8_t) hi->revid[0]); + + printk ("%s\n", banner); + + pdev = hi->pdev[0]; + printk ("%s: %s at v/p=%lx/%lx (%02x:%02x.%x) irq %d\n", + hi->devname, "MUSYCC", + (unsigned long) hi->addr_mapped[0], hi->addr[0], + hi->pci_busno, (u_int8_t) PCI_SLOT (pdev->devfn), + (u_int8_t) PCI_FUNC (pdev->devfn), pdev->irq); + + pdev = hi->pdev[1]; + printk ("%s: %s at v/p=%lx/%lx (%02x:%02x.%x) irq %d\n", + hi->devname, "EBUS ", + (unsigned long) hi->addr_mapped[1], hi->addr[1], + hi->pci_busno, (u_int8_t) PCI_SLOT (pdev->devfn), + (u_int8_t) PCI_FUNC (pdev->devfn), pdev->irq); +} + + +void __init +hdw_sn_get (hdw_info_t * hi, int brdno) +{ + /* obtain hardware EEPROM information */ + long addr; + + addr = (long) hi->addr_mapped[1] + EEPROM_OFFSET; + + /* read EEPROM with largest known format size... */ + pmc_eeprom_read_buffer (addr, 0, (char *) hi->mfg_info.data, sizeof (FLD_TYPE2)); + +#if 0 + { + unsigned char *ucp = (unsigned char *) &hi->mfg_info.data; + + printk ("eeprom[00]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + *(ucp + 0), *(ucp + 1), *(ucp + 2), *(ucp + 3), *(ucp + 4), *(ucp + 5), *(ucp + 6), *(ucp + 7)); + printk ("eeprom[08]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + *(ucp + 8), *(ucp + 9), *(ucp + 10), *(ucp + 11), *(ucp + 12), *(ucp + 13), *(ucp + 14), *(ucp + 15)); + printk ("eeprom[16]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + *(ucp + 16), *(ucp + 17), *(ucp + 18), *(ucp + 19), *(ucp + 20), *(ucp + 21), *(ucp + 22), *(ucp + 23)); + printk ("eeprom[24]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + *(ucp + 24), *(ucp + 25), *(ucp + 26), *(ucp + 27), *(ucp + 28), *(ucp + 29), *(ucp + 30), *(ucp + 31)); + printk ("eeprom[32]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + *(ucp + 32), *(ucp + 33), *(ucp + 34), *(ucp + 35), *(ucp + 36), *(ucp + 37), *(ucp + 38), *(ucp + 39)); + printk ("eeprom[40]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + *(ucp + 40), *(ucp + 41), *(ucp + 42), *(ucp + 43), *(ucp + 44), *(ucp + 45), *(ucp + 46), *(ucp + 47)); + } +#endif +#if 0 + printk ("sn: %x %x %x %x %x %x\n", + hi->mfg_info.Serial[0], + hi->mfg_info.Serial[1], + hi->mfg_info.Serial[2], + hi->mfg_info.Serial[3], + hi->mfg_info.Serial[4], + hi->mfg_info.Serial[5]); +#endif + + if ((hi->promfmt = pmc_verify_cksum (&hi->mfg_info.data)) == PROM_FORMAT_Unk) + { + /* bad crc, data is suspect */ + if (log_level >= LOG_WARN) + printk ("%s: EEPROM cksum error\n", hi->devname); + hi->mfg_info_sts = EEPROM_CRCERR; + } else + hi->mfg_info_sts = EEPROM_OK; +} + + +void __init +prep_hdw_info (void) +{ + hdw_info_t *hi; + int i; + + for (i = 0, hi = hdw_info; i < MAX_BOARDS; i++, hi++) + { + hi->pci_busno = 0xff; + hi->pci_slot = 0xff; + hi->pci_pin[0] = 0; + hi->pci_pin[1] = 0; + hi->ndev = 0; + hi->addr[0] = 0L; + hi->addr[1] = 0L; + hi->addr_mapped[0] = 0L; + hi->addr_mapped[1] = 0L; + } +} + +void +cleanup_ioremap (void) +{ + hdw_info_t *hi; + int i; + + for (i = 0, hi = hdw_info; i < MAX_BOARDS; i++, hi++) + { + if (hi->pci_slot == 0xff) + break; + if (hi->addr_mapped[0]) + { + iounmap ((void *) (hi->addr_mapped[0])); + release_mem_region ((long) hi->addr[0], hi->len[0]); + hi->addr_mapped[0] = 0; + } + if (hi->addr_mapped[1]) + { + iounmap ((void *) (hi->addr_mapped[1])); + release_mem_region ((long) hi->addr[1], hi->len[1]); + hi->addr_mapped[1] = 0; + } + } +} + + +void +cleanup_devs (void) +{ + hdw_info_t *hi; + int i; + + for (i = 0, hi = hdw_info; i < MAX_BOARDS; i++, hi++) + { + if (hi->pci_slot == 0xff || !hi->ndev) + break; + c4_stopwd(netdev_priv(hi->ndev)); +#ifdef CONFIG_PROC_FS + sbecom_proc_brd_cleanup(netdev_priv(hi->ndev)); +#endif + unregister_netdev (hi->ndev); + free_irq (hi->pdev[0]->irq, hi->ndev); +#ifdef CONFIG_SBE_PMCC4_NCOMM + free_irq (hi->pdev[1]->irq, hi->ndev); +#endif + OS_kfree (hi->ndev); + } +} + + +STATIC int __init +c4_hdw_init (struct pci_dev * pdev, int found) +{ + hdw_info_t *hi; + int i; + int fun, slot; + unsigned char busno = 0xff; + + /* our MUSYCC chip supports two functions, 0 & 1 */ + if ((fun = PCI_FUNC (pdev->devfn)) > 1) + { + printk (KERN_WARNING "%s: unexpected devfun: 0x%x\n", THIS_MODULE->name, pdev->devfn); + return 0; + } + if (pdev->bus) /* obtain bus number */ + busno = pdev->bus->number; + else + busno = 0; /* default for system PCI inconsistency */ + slot = pdev->devfn & ~0x07; + + /* + * Functions 0 & 1 for a given board (identified by same bus(busno) and + * slot(slot)) are placed into the same 'hardware' structure. The first + * part of the board's functionality will be placed into an unpopulated + * element, identified by "slot==(0xff)". The second part of a board's + * functionality will match the previously loaded slot/busno. + */ + for (i = 0, hi = hdw_info; i < MAX_BOARDS; i++, hi++) + { + /* + * match with board's first found interface, otherwise this is first + * found + */ + if ((hi->pci_slot == 0xff) || /* new board */ + ((hi->pci_slot == slot) && (hi->bus == pdev->bus))) + break; /* found for-loop exit */ + } + if (i == MAX_BOARDS) /* no match in above loop means MAX + * exceeded */ + { + printk (KERN_WARNING "%s: exceeded number of allowed devices (>%d)?\n", + THIS_MODULE->name, MAX_BOARDS); + return 0; + } + if (pdev->bus) + hi->pci_busno = pdev->bus->number; + else + hi->pci_busno = 0; /* default for system PCI inconsistency */ + hi->pci_slot = slot; + pci_read_config_byte (pdev, PCI_INTERRUPT_PIN, &hi->pci_pin[fun]); + pci_read_config_byte (pdev, PCI_REVISION_ID, &hi->revid[fun]); + hi->bus = pdev->bus; + hi->addr[fun] = pci_resource_start (pdev, 0); + hi->len[fun] = pci_resource_end (pdev, 0) - hi->addr[fun] + 1; + hi->pdev[fun] = pdev; + + { + /* + * create device name from module name, plus add the appropriate + * board number + */ + char *cp = hi->devname; + + strcpy (cp, THIS_MODULE->name); + cp += strlen (cp); /* reposition */ + *cp++ = '-'; + *cp++ = '0' + (found / 2); /* there are two found interfaces per + * board */ + *cp = 0; /* termination */ + } + + return 1; +} + + +status_t __init +c4hw_attach_all (void) +{ + hdw_info_t *hi; + struct pci_dev *pdev = NULL; + int found = 0, i, j; + + error_flag = 0; + prep_hdw_info (); + /*** scan PCI bus for all possible boards */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) + while ((pdev = pci_get_device (PCI_VENDOR_ID_CONEXANT, + PCI_DEVICE_ID_CN8474, + pdev))) +#else + while ((pdev = pci_find_device (PCI_VENDOR_ID_CONEXANT, + PCI_DEVICE_ID_CN8474, + pdev))) +#endif + { + if (c4_hdw_init (pdev, found)) + found++; + } + if (!found) + { + printk (KERN_WARNING "%s: No boards found.\n", THIS_MODULE->name); + return ENODEV; + } + /* sanity check for consistant hardware found */ + for (i = 0, hi = hdw_info; i < MAX_BOARDS; i++, hi++) + { + if (hi->pci_slot != 0xff && (!hi->addr[0] || !hi->addr[1])) + { + printk (KERN_WARNING "%s: something very wrong with pci_get_device.\n", hi->devname); + return EIO; + } + } + /* bring board's memory regions on/line */ + for (i = 0, hi = hdw_info; i < MAX_BOARDS; i++, hi++) + { + if (hi->pci_slot == 0xff) + break; + for (j = 0; j < 2; j++) + { + if (request_mem_region (hi->addr[j], hi->len[j], hi->devname) == 0) + { + printk (KERN_WARNING "%s: memory in use, addr=0x%lx, len=0x%lx ?\n", + hi->devname, hi->addr[j], hi->len[j]); + cleanup_ioremap (); + return ENOMEM; + } + hi->addr_mapped[j] = (unsigned long) ioremap (hi->addr[j], hi->len[j]); + if (!hi->addr_mapped[j]) + { + printk (KERN_WARNING "%s: ioremap fails, addr=0x%lx, len=0x%lx ?\n", + hi->devname, hi->addr[j], hi->len[j]); + cleanup_ioremap (); + return ENOMEM; + } +#ifdef SBE_MAP_DEBUG + printk (KERN_WARNING "%s: io remapped from phys %x to virt %x\n", + hi->devname, (u_int32_t) hi->addr[j], (u_int32_t) hi->addr_mapped[j]); +#endif + } + } + + drvr_state = SBE_DRVR_AVAILABLE; + + /* Have now memory mapped all boards. Now allow board's access to system */ + for (i = 0, hi = hdw_info; i < MAX_BOARDS; i++, hi++) + { + if (hi->pci_slot == 0xff) + break; + if (pci_enable_device (hi->pdev[0]) || + pci_enable_device (hi->pdev[1])) + { + drvr_state = SBE_DRVR_DOWN; + printk (KERN_WARNING "%s: failed to enable card %d slot %d\n", + hi->devname, i, hi->pci_slot); + cleanup_devs (); + cleanup_ioremap (); + return EIO; + } + pci_set_master (hi->pdev[0]); + pci_set_master (hi->pdev[1]); + if (!(hi->ndev = c4_add_dev (hi, i, (long) hi->addr_mapped[0], + (long) hi->addr_mapped[1], + hi->pdev[0]->irq, + hi->pdev[1]->irq))) + { + drvr_state = SBE_DRVR_DOWN; + cleanup_ioremap (); + /* NOTE: c4_add_dev() does its own device cleanup */ +#if 0 + cleanup_devs (); +#endif + return error_flag; /* error_flag set w/in add_dev() */ + } + show_two (hi, i); /* displays found information */ + } + return 0; +} + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/libsbew.h b/drivers/staging/cxt1e1/libsbew.h new file mode 100644 index 0000000..5c99646 --- /dev/null +++ b/drivers/staging/cxt1e1/libsbew.h @@ -0,0 +1,581 @@ +/* + * $Id: libsbew.h,v 2.1 2005/10/27 18:54:19 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_LIBSBEW_H_ +#define _INC_LIBSBEW_H_ + +/*----------------------------------------------------------------------------- + * libsbew.h - common library elements, charge across mulitple boards + * + * This file contains common Ioctl structures and contents definitions. + * + * Copyright (C) 2004-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 2.1 $ + * Last changed on $Date: 2005/10/27 18:54:19 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: libsbew.h,v $ + * Revision 2.1 2005/10/27 18:54:19 rickd + * Add E1PLAIN support. + * + * Revision 2.0 2005/09/28 00:10:08 rickd + * Customized for PMCC4 comet-per-port design. + * + * Revision 1.15 2005/03/29 00:51:31 rickd + * File imported from C1T3 port, Revision 1.15 + *----------------------------------------------------------------------------- + */ + +#ifndef __KERNEL__ +#include +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/********************************/ +/** set driver logging level **/ +/********************************/ + +/* routine/ioctl: wancfg_set_loglevel() - SBE_IOC_SET_LOGLEVEL */ + +#define LOG_NONE 0 +#define LOG_ERROR 1 +#define LOG_SBEBUG3 3 /* hidden, for development/debug usage */ +#define LOG_LSCHANGE 5 /* line state change logging */ +#define LOG_LSIMMEDIATE 6 /* line state change logging w/o hysterisis */ +#define LOG_WARN 8 +#define LOG_MONITOR 10 +#define LOG_SBEBUG12 12 /* hidden, for development/debug usage */ +#define LOG_MONITOR2 14 /* hidden, for development/debug usage */ +#define LOG_DEBUG 16 + + /* TEMPORARY DEFINES *//* RLD DEBUG */ +#define c4_LOG_NONE LOG_NONE +#define c4_LOG_ERROR LOG_ERROR +#define c4_LOG_WARN LOG_WARN +#define c4_LOG_sTrace LOG_MONITOR /* do some trace logging into + * functions */ +#define c4_LOG_DEBUG LOG_DEBUG +#define c4_LOG_MAX LOG_DEBUG + + + +/******************************/ +/** get driver information **/ +/******************************/ + +/* routine/ioctl: wancfg_get_drvinfo() - SBE_IOC_GET_DRVINFO */ + +#define REL_STRLEN 80 + struct sbe_drv_info + { + int rel_strlen; + char release[REL_STRLEN]; + }; + + +/*****************************/ +/** get board information **/ +/*****************************/ + +/* routine/ioctl: wancfg_get_brdinfo() - SBE_IOC_GET_BRDINFO */ + +#define CHNM_STRLEN 16 + struct sbe_brd_info + { + u_int32_t brd_id; /* SBE's unique PCI VENDOR/DEVID */ + u_int32_t brd_sn; + int brd_chan_cnt; /* number of channels being used */ + int brd_port_cnt; /* number of ports being used */ + unsigned char brdno; /* our board number */ + unsigned char brd_pci_speed; /* PCI speed, 33/66Mhz */ + u_int8_t brd_mac_addr[6]; + char first_iname[CHNM_STRLEN]; /* first assigned channel's + * interface name */ + char last_iname[CHNM_STRLEN]; /* last assigned channel's + * interface name */ + u_int8_t brd_hdw_id; /* on/board unique hdw ID */ + u_int8_t reserved8[3]; /* alignment preservation */ + u_int32_t reserved32[3]; /* size preservation */ + }; + +/* These IDs are sometimes available thru pci_ids.h, but not currently. */ + +#define PCI_VENDOR_ID_SBE 0x1176 +#define PCI_DEVICE_ID_WANPMC_C4T1E1 0x0701 /* BID 0x0X, BTYP 0x0X */ +#define PCI_DEVICE_ID_WANPTMC_C4T1E1 0x0702 /* BID 0x41 */ +#define PCI_DEVICE_ID_WANADAPT_HC4T1E1 0x0703 /* BID 0x44 */ +#define PCI_DEVICE_ID_WANPTMC_256T3_T1 0x0704 /* BID 0x42 (T1 Version) */ +#define PCI_DEVICE_ID_WANPCI_C4T1E1 0x0705 /* BID 0x1X, BTYP 0x0X */ +#define PCI_DEVICE_ID_WANPMC_C1T3 0x0706 /* BID 0x45 */ +#define PCI_DEVICE_ID_WANPCI_C2T1E1 0x0707 /* BID 0x1X, BTYP 0x2X */ +#define PCI_DEVICE_ID_WANPCI_C1T1E1 0x0708 /* BID 0x1X, BTYP 0x1X */ +#define PCI_DEVICE_ID_WANPMC_C2T1E1 0x0709 /* BID 0x0X, BTYP 0x2X */ +#define PCI_DEVICE_ID_WANPMC_C1T1E1 0x070A /* BID 0x0X, BTYP 0x1X */ +#define PCI_DEVICE_ID_WANPTMC_256T3_E1 0x070B /* BID 0x46 (E1 Version) */ +#define PCI_DEVICE_ID_WANPTMC_C24TE1 0x070C /* BID 0x47 */ +#define PCI_DEVICE_ID_WANPMC_C4T1E1_L 0x070D /* BID 0x2X, BTYPE 0x0X w/FP + * LEDs */ +#define PCI_DEVICE_ID_WANPMC_C2T1E1_L 0x070E /* BID 0x2X, BTYPE 0x2X w/FP + * LEDs */ +#define PCI_DEVICE_ID_WANPMC_C1T1E1_L 0x070F /* BID 0x2X, BTYPE 0x1X w/FP + * LEDs */ +#define PCI_DEVICE_ID_WANPMC_2SSI 0x0801 +#define PCI_DEVICE_ID_WANPCI_4SSI 0x0802 +#define PCI_DEVICE_ID_WANPMC_2T3E3 0x0900 /* BID 0x43 */ +#define SBE_BOARD_ID(v,id) ((v<<16) | id) + +#define BINFO_PCI_SPEED_unk 0 +#define BINFO_PCI_SPEED_33 1 +#define BINFO_PCI_SPEED_66 2 + +/***************************/ +/** obtain interface ID **/ +/***************************/ + +/* routine/ioctl: wancfg_get_iid() - SBE_IOC_IID_GET */ + + struct sbe_iid_info + { + u_int32_t channum; /* channel requested */ + char iname[CHNM_STRLEN]; /* channel's interface name */ + }; + +/**************************************/ +/** get board address information **/ +/**************************************/ + +/* routine/ioctl: wancfg_get_brdaddr() - SBE_IOC_BRDADDR_GET */ + + struct sbe_brd_addr + { + unsigned char func; /* select PCI address space function */ + unsigned char brdno; /* returns brdno requested */ + unsigned char irq; + unsigned char size; /* returns size of address */ +#define BRDADDR_SIZE_64 1 +#define BRDADDR_SIZE_32 2 + int reserved1; /* mod64 align, reserved for future use */ + + union + { + unsigned long virt64; /* virtual/mapped address */ + u_int32_t virt32[2]; + } v; + union + { + unsigned long phys64; /* physical bus address */ + u_int32_t phys32[2]; + } p; + int reserved2[4]; /* reserved for future use */ + }; + +/**********************************/ +/** read/write board registers **/ +/**********************************/ + +/* routine/ioctl: wancfg_read_vec() - SBE_IOC_READ_VEC */ +/* routine/ioctl: wancfg_write_vec() - SBE_IOC_WRITE_VEC */ + + struct sbecom_wrt_vec + { + u_int32_t reg; + u_int32_t data; + }; + +#define C1T3_CHIP_MSCC_32 0x01000000 +#define C1T3_CHIP_TECT3_8 0x02000000 +#define C1T3_CHIP_CPLD_8 0x03000000 +#define C1T3_CHIP_EEPROM_8 0x04000000 + +#define W256T3_CHIP_MUSYCC_32 0x02000000 +#define W256T3_CHIP_TEMUX_8 0x10000000 +#define W256T3_CHIP_T8110_8 0x20000000 +#define W256T3_CHIP_T8110_32 0x22000000 +#define W256T3_CHIP_CPLD_8 0x30000000 +#define W256T3_CHIP_EEPROM_8 0x40000000 + + +/**********************************/ +/** read write port parameters **/ +/**********************************/ + +/* routine/ioctl: wancfg_getset_port_param() - SBE_IOC_PORT_GET */ +/* routine/ioctl: wancfg_set_port_param() - SBE_IOC_PORT_SET */ + +/* NOTE: this structure supports hardware which supports individual per/port control */ + +struct sbecom_port_param +{ + u_int8_t portnum; + u_int8_t port_mode; /* variations of T1 or E1 mode */ + u_int8_t portStatus; + u_int8_t portP; /* more port parameters (clock source - 0x80; + * and LBO - 0xf; */ + /* bits 0x70 are reserved for future use ) */ +#ifdef SBE_PMCC4_ENABLE + u_int32_t hypersize; /* RLD DEBUG - add this in until I learn how to make this entry obsolete */ +#endif + int reserved[3-1]; /* reserved for future use */ + int _res[4]; +}; + +#define CFG_CLK_PORT_MASK 0x80 /* Loop timing */ +#define CFG_CLK_PORT_INTERNAL 0x80 /* Loop timing */ +#define CFG_CLK_PORT_EXTERNAL 0x00 /* Loop timing */ + +#define CFG_LBO_MASK 0x0F +#define CFG_LBO_unk 0 /* */ +#define CFG_LBO_LH0 1 /* T1 Long Haul (default) */ +#define CFG_LBO_LH7_5 2 /* T1 Long Haul */ +#define CFG_LBO_LH15 3 /* T1 Long Haul */ +#define CFG_LBO_LH22_5 4 /* T1 Long Haul */ +#define CFG_LBO_SH110 5 /* T1 Short Haul */ +#define CFG_LBO_SH220 6 /* T1 Short Haul */ +#define CFG_LBO_SH330 7 /* T1 Short Haul */ +#define CFG_LBO_SH440 8 /* T1 Short Haul */ +#define CFG_LBO_SH550 9 /* T1 Short Haul */ +#define CFG_LBO_SH660 10 /* T1 Short Haul */ +#define CFG_LBO_E75 11 /* E1 75 Ohm */ +#define CFG_LBO_E120 12 /* E1 120 Ohm (default) */ + + +/*************************************/ +/** read write channel parameters **/ +/*************************************/ + +/* routine/ioctl: wancfg_getset_chan_param() - SBE_IOC_CHAN_GET */ +/* routine/ioctl: wancfg_set_chan_param() - SBE_IOC_CHAN_SET */ + +/* NOTE: this structure supports hardware which supports individual per/channel control */ + + struct sbecom_chan_param + { + u_int32_t channum; /* 0: */ +#ifdef SBE_PMCC4_ENABLE + u_int32_t card; /* RLD DEBUG - add this in until I learn how to make this entry obsolete */ + u_int32_t port; /* RLD DEBUG - add this in until I learn how to make this entry obsolete */ + u_int8_t bitmask[32]; +#endif + u_int32_t intr_mask; /* 4: interrupt mask, specify ored + * (SS7_)INTR_* to disable */ + u_int8_t status; /* 8: channel transceiver status (TX_ENABLED, + * RX_ENABLED) */ + u_int8_t chan_mode; /* 9: protocol mode */ + u_int8_t idlecode; /* A: idle code, in (FLAG_7E, FLAG_FF, + * FLAG_00) */ + u_int8_t pad_fill_count; /* B: pad fill count (1-127), 0 - pad + * fill disabled */ + u_int8_t data_inv; /* C: channel data inversion selection */ + u_int8_t mode_56k; /* D: 56kbps mode */ + u_int8_t reserved[2 + 8]; /* E: */ + }; + +/* SS7 interrupt signals */ +#define SS7_INTR_SFILT 0x00000020 +#define SS7_INTR_SDEC 0x00000040 +#define SS7_INTR_SINC 0x00000080 +#define SS7_INTR_SUERR 0x00000100 +/* Other interrupts that can be masked */ +#define INTR_BUFF 0x00000002 +#define INTR_EOM 0x00000004 +#define INTR_MSG 0x00000008 +#define INTR_IDLE 0x00000010 + +/* transceiver status flags */ +#define TX_ENABLED 0x01 +#define RX_ENABLED 0x02 + +/* Protocol modes */ +#define CFG_CH_PROTO_TRANS 0 +#define CFG_CH_PROTO_SS7 1 +#define CFG_CH_PROTO_HDLC_FCS16 2 +#define CFG_CH_PROTO_HDLC_FCS32 3 +#define CFG_CH_PROTO_ISLP_MODE 4 + +/* Possible idle code assignments */ +#define CFG_CH_FLAG_7E 0 +#define CFG_CH_FLAG_FF 1 +#define CFG_CH_FLAG_00 2 + +/* data inversion selection */ +#define CFG_CH_DINV_NONE 0x00 +#define CFG_CH_DINV_RX 0x01 +#define CFG_CH_DINV_TX 0x02 + + +/* Posssible resettable chipsets/functions */ +#define RESET_DEV_TEMUX 1 +#define RESET_DEV_TECT3 RESET_DEV_TEMUX +#define RESET_DEV_PLL 2 + + +/*********************************************/ +/** read reset channel thruput statistics **/ +/*********************************************/ + +/* routine/ioctl: wancfg_get_chan_stats() - SBE_IOC_CHAN_GET_STAT */ +/* routine/ioctl: wancfg_del_chan_stats() - SBE_IOC_CHAN_DEL_STAT */ +/* routine/ioctl: wancfg_get_card_chan_stats() - SBE_IOC_CARD_CHAN_STAT */ + + struct sbecom_chan_stats + { + unsigned long rx_packets; /* total packets received */ + unsigned long tx_packets; /* total packets transmitted */ + unsigned long rx_bytes; /* total bytes received */ + unsigned long tx_bytes; /* total bytes transmitted */ + unsigned long rx_errors;/* bad packets received */ + unsigned long tx_errors;/* packet transmit problems */ + unsigned long rx_dropped; /* no space in linux buffers */ + unsigned long tx_dropped; /* no space available in linux */ + + /* detailed rx_errors: */ + unsigned long rx_length_errors; + unsigned long rx_over_errors; /* receiver ring buff overflow */ + unsigned long rx_crc_errors; /* recved pkt with crc error */ + unsigned long rx_frame_errors; /* recv'd frame alignment error */ + unsigned long rx_fifo_errors; /* recv'r fifo overrun */ + unsigned long rx_missed_errors; /* receiver missed packet */ + + /* detailed tx_errors */ + unsigned long tx_aborted_errors; + unsigned long tx_fifo_errors; + unsigned long tx_pending; + }; + + +/****************************************/ +/** read write card level parameters **/ +/****************************************/ + + /* NOTE: this structure supports hardware which supports per/card control */ + + struct sbecom_card_param + { + u_int8_t framing_type; /* 0: CBP or M13 */ + u_int8_t loopback; /* 1: one of LOOPBACK_* */ + u_int8_t line_build_out; /* 2: boolean */ + u_int8_t receive_eq; /* 3: boolean */ + u_int8_t transmit_ones; /* 4: boolean */ + u_int8_t clock; /* 5: 0 - internal, i>0 - external (recovered + * from framer i) */ + u_int8_t h110enable; /* 6: */ + u_int8_t disable_leds; /* 7: */ + u_int8_t reserved1; /* 8: available - old 256t3 hypersized, but + * never used */ + u_int8_t rear_io; /* 9: rear I/O off/on */ + u_int8_t disable_tx; /* A: disable TX off/on */ + u_int8_t mute_los; /* B: mute LOS off/on */ + u_int8_t los_threshold; /* C: LOS threshold norm/low + * (default: norm) */ + u_int8_t ds1_mode; /* D: DS1 mode T1/E1 (default: T1) */ + u_int8_t ds3_unchan; /* E: DS3 unchannelized mode off/on */ + u_int8_t reserved[1 + 16]; /* reserved for expansion - must be + * ZERO filled */ + }; + +/* framing types */ +#define FRAMING_M13 0 +#define FRAMING_CBP 1 + +/* card level loopback options */ +#define CFG_CARD_LOOPBACK_NONE 0x00 +#define CFG_CARD_LOOPBACK_DIAG 0x01 +#define CFG_CARD_LOOPBACK_LINE 0x02 +#define CFG_CARD_LOOPBACK_PAYLOAD 0x03 + +/* line level loopback options */ +#define CFG_LIU_LOOPBACK_NONE 0x00 +#define CFG_LIU_LOOPBACK_ANALOG 0x10 +#define CFG_LIU_LOOPBACK_DIGITAL 0x11 +#define CFG_LIU_LOOPBACK_REMOTE 0x12 + +/* card level clock options */ +#define CFG_CLK_INTERNAL 0x00 +#define CFG_CLK_EXTERNAL 0x01 + +/* legacy 256T3 loopback values */ +#define LOOPBACK_NONE 0 +#define LOOPBACK_LIU_ANALOG 1 +#define LOOPBACK_LIU_DIGITAL 2 +#define LOOPBACK_FRAMER_DS3 3 +#define LOOPBACK_FRAMER_T1 4 +#define LOOPBACK_LIU_REMOTE 5 + +/* DS1 mode */ +#define CFG_DS1_MODE_MASK 0x0f +#define CFG_DS1_MODE_T1 0x00 +#define CFG_DS1_MODE_E1 0x01 +#define CFG_DS1_MODE_CHANGE 0x80 + +/* DS3 unchannelized values */ +#define CFG_DS3_UNCHAN_MASK 0x01 +#define CFG_DS3_UNCHAN_OFF 0x00 +#define CFG_DS3_UNCHAN_ON 0x01 + + +/************************************/ +/** read write framer parameters **/ +/************************************/ + +/* routine/ioctl: wancfg_get_framer() - SBE_IOC_FRAMER_GET */ +/* routine/ioctl: wancfg_set_framer() - SBE_IOC_FRAMER_SET */ + + struct sbecom_framer_param + { + u_int8_t framer_num; + u_int8_t frame_type; /* SF, ESF, E1PLAIN, E1CAS, E1CRC, E1CRC+CAS */ + u_int8_t loopback_type; /* DIGITAL, LINE, PAYLOAD */ + u_int8_t auto_alarms;/* auto alarms */ + u_int8_t reserved[12]; /* reserved for expansion - must be + * ZERO filled */ + }; + +/* frame types */ +#define CFG_FRAME_NONE 0 +#define CFG_FRAME_SF 1 /* T1 B8ZS */ +#define CFG_FRAME_ESF 2 /* T1 B8ZS */ +#define CFG_FRAME_E1PLAIN 3 /* HDB3 w/o CAS,CRC */ +#define CFG_FRAME_E1CAS 4 /* HDB3 */ +#define CFG_FRAME_E1CRC 5 /* HDB3 */ +#define CFG_FRAME_E1CRC_CAS 6 /* HDB3 */ +#define CFG_FRAME_SF_AMI 7 /* T1 AMI */ +#define CFG_FRAME_ESF_AMI 8 /* T1 AMI */ +#define CFG_FRAME_E1PLAIN_AMI 9 /* E1 AMI w/o CAS,CRC */ +#define CFG_FRAME_E1CAS_AMI 10 /* E1 AMI */ +#define CFG_FRAME_E1CRC_AMI 11 /* E1 AMI */ +#define CFG_FRAME_E1CRC_CAS_AMI 12 /* E1 AMI */ + +#define IS_FRAME_ANY_T1(field) \ + (((field) == CFG_FRAME_NONE) || \ + ((field) == CFG_FRAME_SF) || \ + ((field) == CFG_FRAME_ESF) || \ + ((field) == CFG_FRAME_SF_AMI) || \ + ((field) == CFG_FRAME_ESF_AMI)) + +#define IS_FRAME_ANY_T1ESF(field) \ + (((field) == CFG_FRAME_ESF) || \ + ((field) == CFG_FRAME_ESF_AMI)) + +#define IS_FRAME_ANY_E1(field) \ + (((field) == CFG_FRAME_E1PLAIN) || \ + ((field) == CFG_FRAME_E1CAS) || \ + ((field) == CFG_FRAME_E1CRC) || \ + ((field) == CFG_FRAME_E1CRC_CAS) || \ + ((field) == CFG_FRAME_E1PLAIN_AMI) || \ + ((field) == CFG_FRAME_E1CAS_AMI) || \ + ((field) == CFG_FRAME_E1CRC_AMI) || \ + ((field) == CFG_FRAME_E1CRC_CAS_AMI)) + +#define IS_FRAME_ANY_AMI(field) \ + (((field) == CFG_FRAME_SF_AMI) || \ + ((field) == CFG_FRAME_ESF_AMI) || \ + ((field) == CFG_FRAME_E1PLAIN_AMI) || \ + ((field) == CFG_FRAME_E1CAS_AMI) || \ + ((field) == CFG_FRAME_E1CRC_AMI) || \ + ((field) == CFG_FRAME_E1CRC_CAS_AMI)) + +/* frame level loopback options */ +#define CFG_FRMR_LOOPBACK_NONE 0 +#define CFG_FRMR_LOOPBACK_DIAG 1 +#define CFG_FRMR_LOOPBACK_LINE 2 +#define CFG_FRMR_LOOPBACK_PAYLOAD 3 + + +/****************************************/ +/** read reset card error statistics **/ +/****************************************/ + +/* routine/ioctl: wancfg_get_card_stats() - SBE_IOC_CARD_GET_STAT */ +/* routine/ioctl: wancfg_del_card_stats() - SBE_IOC_CARD_DEL_STAT */ + + struct temux_card_stats + { + struct temux_stats + { + /* TEMUX DS3 PMON counters */ + u_int32_t lcv; + u_int32_t err_framing; + u_int32_t febe; + u_int32_t err_cpbit; + u_int32_t err_parity; + /* TEMUX DS3 FRMR status */ + u_int8_t los; + u_int8_t oof; + u_int8_t red; + u_int8_t yellow; + u_int8_t idle; + u_int8_t ais; + u_int8_t cbit; + /* TEMUX DS3 FEAC receiver */ + u_int8_t feac; + u_int8_t feac_last; + } t; + u_int32_t tx_pending; /* total */ + }; + +/**************************************************************/ + + struct wancfg + { + int cs, ds; + char *p; + }; + typedef struct wancfg wcfg_t; + + extern wcfg_t *wancfg_init (char *, char *); + extern int wancfg_card_blink (wcfg_t *, int); + extern int wancfg_ctl (wcfg_t *, int, void *, int, void *, int); + extern int wancfg_del_card_stats (wcfg_t *); + extern int wancfg_del_chan_stats (wcfg_t *, int); + extern int wancfg_enable_ports (wcfg_t *, int); + extern int wancfg_free (wcfg_t *); + extern int wancfg_get_brdaddr (wcfg_t *, struct sbe_brd_addr *); + extern int wancfg_get_brdinfo (wcfg_t *, struct sbe_brd_info *); + extern int wancfg_get_card (wcfg_t *, struct sbecom_card_param *); + extern int wancfg_get_card_chan_stats (wcfg_t *, struct sbecom_chan_stats *); + extern int wancfg_get_card_sn (wcfg_t *); + extern int wancfg_get_card_stats (wcfg_t *, struct temux_card_stats *); + extern int wancfg_get_chan (wcfg_t *, int, struct sbecom_chan_param *); + extern int wancfg_get_chan_stats (wcfg_t *, int, struct sbecom_chan_stats *); + extern int wancfg_get_drvinfo (wcfg_t *, int, struct sbe_drv_info *); + extern int wancfg_get_framer (wcfg_t *, int, struct sbecom_framer_param *); + extern int wancfg_get_iid (wcfg_t *, int, struct sbe_iid_info *); + extern int wancfg_get_sn (wcfg_t *, unsigned int *); + extern int wancfg_read (wcfg_t *, int, struct sbecom_wrt_vec *); + extern int wancfg_reset_device (wcfg_t *, int); + extern int wancfg_set_card (wcfg_t *, struct sbecom_card_param *); + extern int wancfg_set_chan (wcfg_t *, int, struct sbecom_chan_param *); + extern int wancfg_set_framer (wcfg_t *, int, struct sbecom_framer_param *); + extern int wancfg_set_loglevel (wcfg_t *, uint); + extern int wancfg_write (wcfg_t *, int, struct sbecom_wrt_vec *); + +#ifdef NOT_YET_COMMON + extern int wancfg_get_tsioc (wcfg_t *, struct wanc1t3_ts_hdr *, struct wanc1t3_ts_param *); + extern int wancfg_set_tsioc (wcfg_t *, struct wanc1t3_ts_param *); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /*** _INC_LIBSBEW_H_ ***/ diff --git a/drivers/staging/cxt1e1/linux.c b/drivers/staging/cxt1e1/linux.c new file mode 100644 index 0000000..23e184d --- /dev/null +++ b/drivers/staging/cxt1e1/linux.c @@ -0,0 +1,1354 @@ +/* Copyright (C) 2007-2008 One Stop Systems + * Copyright (C) 2003-2006 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pmcc4_sysdep.h" +#include "sbecom_inline_linux.h" +#include "libsbew.h" +#include "pmcc4.h" +#include "pmcc4_ioctls.h" +#include "pmcc4_private.h" +#include "sbeproc.h" + +/***************************************************************************************** + * Error out early if we have compiler trouble. + * + * (This section is included from the kernel's init/main.c as a friendly + * spiderman recommendation...) + * + * Versions of gcc older than that listed below may actually compile and link + * okay, but the end product can have subtle run time bugs. To avoid associated + * bogus bug reports, we flatly refuse to compile with a gcc that is known to be + * too old from the very beginning. + */ +#if (__GNUC__ < 3) || (__GNUC__ == 3 && __GNUC_MINOR__ < 2) +#error Sorry, your GCC is too old. It builds incorrect kernels. +#endif + +#if __GNUC__ == 4 && __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ == 0 +#warning gcc-4.1.0 is known to miscompile the kernel. A different compiler version is recommended. +#endif + +/*****************************************************************************************/ + +#ifdef SBE_INCLUDE_SYMBOLS +#define STATIC +#else +#define STATIC static +#endif + +#define CHANNAME "hdlc" + +/*******************************************************************/ +/* forward references */ +status_t c4_chan_work_init (mpi_t *, mch_t *); +void musycc_wq_chan_restart (void *); +status_t __init c4_init (ci_t *, u_char *, u_char *); +status_t __init c4_init2 (ci_t *); +ci_t *__init c4_new (void *); +int __init c4hw_attach_all (void); +void __init hdw_sn_get (hdw_info_t *, int); + +#ifdef CONFIG_SBE_PMCC4_NCOMM +irqreturn_t c4_ebus_intr_th_handler (void *); + +#endif +int c4_frame_rw (ci_t *, struct sbecom_port_param *); +status_t c4_get_port (ci_t *, int); +int c4_loop_port (ci_t *, int, u_int8_t); +int c4_musycc_rw (ci_t *, struct c4_musycc_param *); +int c4_new_chan (ci_t *, int, int, void *); +status_t c4_set_port (ci_t *, int); +int c4_pld_rw (ci_t *, struct sbecom_port_param *); +void cleanup_devs (void); +void cleanup_ioremap (void); +status_t musycc_chan_down (ci_t *, int); +irqreturn_t musycc_intr_th_handler (void *); +int musycc_start_xmit (ci_t *, int, void *); + +extern char pmcc4_OSSI_release[]; +extern ci_t *CI; +extern struct s_hdw_info hdw_info[]; + +#if defined(CONFIG_SBE_HDLC_V7) || defined(CONFIG_SBE_WAN256T3_HDLC_V7) || \ + defined(CONFIG_SBE_HDLC_V7_MODULE) || defined(CONFIG_SBE_WAN256T3_HDLC_V7_MODULE) +#define _v7_hdlc_ 1 +#else +#define _v7_hdlc_ 0 +#endif + +#if _v7_hdlc_ +#define V7(x) (x ## _v7) +extern int hdlc_netif_rx_v7 (hdlc_device *, struct sk_buff *); +extern int register_hdlc_device_v7 (hdlc_device *); +extern int unregister_hdlc_device_v7 (hdlc_device *); + +#else +#define V7(x) x +#endif + +int error_flag; /* module load error reporting */ +int log_level = LOG_ERROR; +int log_level_default = LOG_ERROR; +module_param(log_level, int, 0444); + +int max_mru = MUSYCC_MRU; +int max_mru_default = MUSYCC_MRU; +module_param(max_mru, int, 0444); + +int max_mtu = MUSYCC_MTU; +int max_mtu_default = MUSYCC_MTU; +module_param(max_mtu, int, 0444); + +int max_txdesc_used = MUSYCC_TXDESC_MIN; +int max_txdesc_default = MUSYCC_TXDESC_MIN; +module_param(max_txdesc_used, int, 0444); + +int max_rxdesc_used = MUSYCC_RXDESC_MIN; +int max_rxdesc_default = MUSYCC_RXDESC_MIN; +module_param(max_rxdesc_used, int, 0444); + +/****************************************************************************/ +/****************************************************************************/ +/****************************************************************************/ + +void * +getuserbychan (int channum) +{ + mch_t *ch; + + ch = c4_find_chan (channum); + return ch ? ch->user : 0; +} + + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) +#define DEV_TO_PRIV(dev) ( * (struct c4_priv **) ((hdlc_device*)(dev)+1)) +#else + +char * +get_hdlc_name (hdlc_device * hdlc) +{ + struct c4_priv *priv = hdlc->priv; + struct net_device *dev = getuserbychan (priv->channum); + + return dev->name; +} +#endif + + +static status_t +mkret (int bsd) +{ + if (bsd > 0) + return -bsd; + else + return bsd; +} + +/***************************************************************************/ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41) +#include + +/*** + * One workqueue (wq) per port (since musycc allows simultaneous group + * commands), with individual data for each channel: + * + * mpi_t -> struct workqueue_struct *wq_port; (dynamically allocated using + * create_workqueue()) + * + * With work structure (work) statically allocated for each channel: + * + * mch_t -> struct work_struct ch_work; (statically allocated using ???) + * + ***/ + + +/* + * Called by the start transmit routine when a channel TX_ENABLE is to be + * issued. This queues the transmission start request among other channels + * within a port's group. + */ +void +c4_wk_chan_restart (mch_t * ch) +{ + mpi_t *pi = ch->up; + +#ifdef RLD_RESTART_DEBUG + printk (">> c4_wk_chan_restart: queueing Port %d Chan %d, mch_t @ %p\n", pi->portnum, ch->channum, ch); +#endif + + /* create new entry w/in workqueue for this channel and let'er rip */ + + /** queue_work (struct workqueue_struct *queue, + ** struct work_struct *work); + **/ + queue_work (pi->wq_port, &ch->ch_work); +} + +status_t +c4_wk_chan_init (mpi_t * pi, mch_t * ch) +{ + /* + * this will be used to restart a stopped channel + */ + + /** INIT_WORK (struct work_struct *work, + ** void (*function)(void *), + ** void *data); + **/ + INIT_WORK(&ch->ch_work, (void *)musycc_wq_chan_restart); + return 0; /* success */ +} + +status_t +c4_wq_port_init (mpi_t * pi) +{ + + char name[16], *np; /* NOTE: name of the queue limited by system + * to 10 characters */ + + if (pi->wq_port) + return 0; /* already initialized */ + + np = name; + memset (name, 0, 16); + sprintf (np, "%s%d", pi->up->devname, pi->portnum); /* IE pmcc4-01) */ + +#ifdef RLD_RESTART_DEBUG + printk (">> c4_wq_port_init: creating workqueue <%s> for Port %d.\n", name, pi->portnum); /* RLD DEBUG */ +#endif + if (!(pi->wq_port = create_singlethread_workqueue (name))) + return ENOMEM; + return 0; /* success */ +} + +void +c4_wq_port_cleanup (mpi_t * pi) +{ + /* + * PORT POINT: cannot call this if WQ is statically allocated w/in + * structure since it calls kfree(wq); + */ + if (pi->wq_port) + { + destroy_workqueue (pi->wq_port); /* this also calls + * flush_workqueue() */ + pi->wq_port = 0; + } +} +#endif + +/***************************************************************************/ + +irqreturn_t +c4_linux_interrupt (int irq, void *dev_instance) +{ + struct net_device *ndev = dev_instance; + + return musycc_intr_th_handler(netdev_priv(ndev)); +} + + +#ifdef CONFIG_SBE_PMCC4_NCOMM +irqreturn_t +c4_ebus_interrupt (int irq, void *dev_instance) +{ + struct net_device *ndev = dev_instance; + + return c4_ebus_intr_th_handler(netdev_priv(ndev)); +} +#endif + + +static int +void_open (struct net_device * ndev) +{ + printk ("%s: trying to open master device !\n", ndev->name); + return -1; +} + + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) +#if !defined(GENERIC_HDLC_VERSION) || (GENERIC_HDLC_VERSION < 4) + +/** Linux 2.4.18-19 **/ +STATIC int +chan_open (hdlc_device * hdlc) +{ + status_t ret; + + if ((ret = c4_chan_up (DEV_TO_PRIV (hdlc)->ci, DEV_TO_PRIV (hdlc)->channum))) + return -ret; + MOD_INC_USE_COUNT; + netif_start_queue (hdlc_to_dev (hdlc)); + return 0; /* no error = success */ +} + +#else + +/** Linux 2.4.20 and higher **/ +STATIC int +chan_open (struct net_device * ndev) +{ + hdlc_device *hdlc = dev_to_hdlc (ndev); + status_t ret; + + hdlc->proto = IF_PROTO_HDLC; + if ((ret = hdlc_open (hdlc))) + { + printk ("%s: hdlc_open failure, err %d.\n", THIS_MODULE->name, ret); + return ret; + } + if ((ret = c4_chan_up (DEV_TO_PRIV (hdlc)->ci, DEV_TO_PRIV (hdlc)->channum))) + return -ret; + MOD_INC_USE_COUNT; + netif_start_queue (hdlc_to_dev (hdlc)); + return 0; /* no error = success */ +} +#endif + +#else + +/** Linux 2.6 **/ +STATIC int +chan_open (struct net_device * ndev) +{ + hdlc_device *hdlc = dev_to_hdlc (ndev); + const struct c4_priv *priv = hdlc->priv; + int ret; + + if ((ret = hdlc_open (ndev))) + { + printk ("%s: hdlc_open failure, err %d.\n", THIS_MODULE->name, ret); + return ret; + } + if ((ret = c4_chan_up (priv->ci, priv->channum))) + return -ret; + try_module_get (THIS_MODULE); + netif_start_queue (ndev); + return 0; /* no error = success */ +} +#endif + + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) +#if !defined(GENERIC_HDLC_VERSION) || (GENERIC_HDLC_VERSION < 4) + +/** Linux 2.4.18-19 **/ +STATIC void +chan_close (hdlc_device * hdlc) +{ + netif_stop_queue (hdlc_to_dev (hdlc)); + musycc_chan_down ((ci_t *) 0, DEV_TO_PRIV (hdlc)->channum); + MOD_DEC_USE_COUNT; +} +#else + +/** Linux 2.4.20 and higher **/ +STATIC int +chan_close (struct net_device * ndev) +{ + hdlc_device *hdlc = dev_to_hdlc (ndev); + + netif_stop_queue (hdlc_to_dev (hdlc)); + musycc_chan_down ((ci_t *) 0, DEV_TO_PRIV (hdlc)->channum); + hdlc_close (hdlc); + MOD_DEC_USE_COUNT; + return 0; +} +#endif + +#else + +/** Linux 2.6 **/ +STATIC int +chan_close (struct net_device * ndev) +{ + hdlc_device *hdlc = dev_to_hdlc (ndev); + const struct c4_priv *priv = hdlc->priv; + + netif_stop_queue (ndev); + musycc_chan_down ((ci_t *) 0, priv->channum); + hdlc_close (ndev); + module_put (THIS_MODULE); + return 0; +} +#endif + + +#if !defined(GENERIC_HDLC_VERSION) || (GENERIC_HDLC_VERSION < 4) + +/** Linux 2.4.18-19 **/ +STATIC int +chan_ioctl (hdlc_device * hdlc, struct ifreq * ifr, int cmd) +{ + if (cmd == HDLCSCLOCK) + { + ifr->ifr_ifru.ifru_ivalue = LINE_DEFAULT; + return 0; + } + return -EINVAL; +} +#endif + + +#if !defined(GENERIC_HDLC_VERSION) || (GENERIC_HDLC_VERSION < 4) +STATIC int +chan_dev_ioctl (struct net_device * hdlc, struct ifreq * ifr, int cmd) +{ + if (cmd == HDLCSCLOCK) + { + ifr->ifr_ifru.ifru_ivalue = LINE_DEFAULT; + return 0; + } + return -EINVAL; +} +#else +STATIC int +chan_dev_ioctl (struct net_device * dev, struct ifreq * ifr, int cmd) +{ + return hdlc_ioctl (dev, ifr, cmd); +} + + +STATIC int +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) +chan_attach_noop (hdlc_device * hdlc, unsigned short foo_1, unsigned short foo_2) +#else +chan_attach_noop (struct net_device * ndev, unsigned short foo_1, unsigned short foo_2) +#endif +{ + return 0; /* our driver has nothing to do here, show's + * over, go home */ +} +#endif + + +STATIC struct net_device_stats * +chan_get_stats (struct net_device * ndev) +{ + mch_t *ch; + struct net_device_stats *nstats; + struct sbecom_chan_stats *stats; + int channum; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + channum = DEV_TO_PRIV (ndev)->channum; +#else + { + struct c4_priv *priv; + + priv = (struct c4_priv *) dev_to_hdlc (ndev)->priv; + channum = priv->channum; + } +#endif + + ch = c4_find_chan (channum); + if (ch == NULL) + return NULL; + + nstats = &ndev->stats; + stats = &ch->s; + + memset (nstats, 0, sizeof (struct net_device_stats)); + nstats->rx_packets = stats->rx_packets; + nstats->tx_packets = stats->tx_packets; + nstats->rx_bytes = stats->rx_bytes; + nstats->tx_bytes = stats->tx_bytes; + nstats->rx_errors = stats->rx_length_errors + + stats->rx_over_errors + + stats->rx_crc_errors + + stats->rx_frame_errors + + stats->rx_fifo_errors + + stats->rx_missed_errors; + nstats->tx_errors = stats->tx_dropped + + stats->tx_aborted_errors + + stats->tx_fifo_errors; + nstats->rx_dropped = stats->rx_dropped; + nstats->tx_dropped = stats->tx_dropped; + + nstats->rx_length_errors = stats->rx_length_errors; + nstats->rx_over_errors = stats->rx_over_errors; + nstats->rx_crc_errors = stats->rx_crc_errors; + nstats->rx_frame_errors = stats->rx_frame_errors; + nstats->rx_fifo_errors = stats->rx_fifo_errors; + nstats->rx_missed_errors = stats->rx_missed_errors; + + nstats->tx_aborted_errors = stats->tx_aborted_errors; + nstats->tx_fifo_errors = stats->tx_fifo_errors; + + return nstats; +} + + +static ci_t * +get_ci_by_dev (struct net_device * ndev) +{ + return (ci_t *)(netdev_priv(ndev)); +} + + +#if !defined(GENERIC_HDLC_VERSION) || (GENERIC_HDLC_VERSION < 4) +STATIC int +c4_linux_xmit (hdlc_device * hdlc, struct sk_buff * skb) +{ + int rval; + + rval = musycc_start_xmit (DEV_TO_PRIV (hdlc)->ci, DEV_TO_PRIV (hdlc)->channum, skb); + return -rval; +} +#else /* new */ +STATIC int +c4_linux_xmit (struct sk_buff * skb, struct net_device * ndev) +{ + const struct c4_priv *priv; + int rval; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + priv = DEV_TO_PRIV (ndev); +#else + hdlc_device *hdlc = dev_to_hdlc (ndev); + + priv = hdlc->priv; +#endif + + rval = musycc_start_xmit (priv->ci, priv->channum, skb); + return -rval; +} +#endif /* GENERIC_HDLC_VERSION */ + +static const struct net_device_ops chan_ops = { + .ndo_open = chan_open, + .ndo_stop = chan_close, + .ndo_start_xmit = c4_linux_xmit, + .ndo_do_ioctl = chan_dev_ioctl, + .ndo_get_stats = chan_get_stats, +}; + +STATIC struct net_device * +create_chan (struct net_device * ndev, ci_t * ci, + struct sbecom_chan_param * cp) +{ + hdlc_device *hdlc; + struct net_device *dev; + hdw_info_t *hi; + int ret; + + if (c4_find_chan (cp->channum)) + return 0; /* channel already exists */ + + { + struct c4_priv *priv; + + /* allocate then fill in private data structure */ + priv = OS_kmalloc (sizeof (struct c4_priv)); + if (!priv) + { + printk (KERN_WARNING "%s: no memory for net_device !\n", ci->devname); + return 0; + } + dev = alloc_hdlcdev (priv); + if (!dev) + { + printk (KERN_WARNING "%s: no memory for hdlc_device !\n", ci->devname); + OS_kfree (priv); + return 0; + } + priv->ci = ci; + priv->channum = cp->channum; + } + + hdlc = dev_to_hdlc (dev); + + dev->base_addr = 0; /* not I/O mapped */ + dev->irq = ndev->irq; + dev->type = ARPHRD_RAWHDLC; + *dev->name = 0; /* default ifconfig name = "hdlc" */ + + hi = (hdw_info_t *) ci->hdw_info; + if (hi->mfg_info_sts == EEPROM_OK) + { + switch (hi->promfmt) + { + case PROM_FORMAT_TYPE1: + memcpy (dev->dev_addr, (FLD_TYPE1 *) (hi->mfg_info.pft1.Serial), 6); + break; + case PROM_FORMAT_TYPE2: + memcpy (dev->dev_addr, (FLD_TYPE2 *) (hi->mfg_info.pft2.Serial), 6); + break; + default: + memset (dev->dev_addr, 0, 6); + break; + } + } else + { + memset (dev->dev_addr, 0, 6); + } + + hdlc->xmit = c4_linux_xmit; + + dev->netdev_ops = &chan_ops; + /* + * The native hdlc stack calls this 'attach' routine during + * hdlc_raw_ioctl(), passing parameters for line encoding and parity. + * Since hdlc_raw_ioctl() stack does not interrogate whether an 'attach' + * routine is actually registered or not, we supply a dummy routine which + * does nothing (since encoding and parity are setup for our driver via a + * special configuration application). + */ + + hdlc->attach = chan_attach_noop; + + rtnl_unlock (); /* needed due to Ioctl calling sequence */ + ret = register_hdlc_device (dev); + /* NOTE: setting must occur AFTER registration in order to "take" */ + dev->tx_queue_len = MAX_DEFAULT_IFQLEN; + + rtnl_lock (); /* needed due to Ioctl calling sequence */ + if (ret) + { + if (log_level >= LOG_WARN) + printk ("%s: create_chan[%d] registration error = %d.\n", + ci->devname, cp->channum, ret); + free_netdev (dev); /* cleanup */ + return 0; /* failed to register */ + } + return dev; +} + + +/* the idea here is to get port information and pass it back (using pointer) */ +STATIC status_t +do_get_port (struct net_device * ndev, void *data) +{ + int ret; + ci_t *ci; /* ci stands for card information */ + struct sbecom_port_param pp;/* copy data to kernel land */ + + if (copy_from_user (&pp, data, sizeof (struct sbecom_port_param))) + return -EFAULT; + if (pp.portnum >= MUSYCC_NPORTS) + return -EFAULT; + ci = get_ci_by_dev (ndev); + if (!ci) + return -EINVAL; /* get card info */ + + ret = mkret (c4_get_port (ci, pp.portnum)); + if (ret) + return ret; + if (copy_to_user (data, &ci->port[pp.portnum].p, + sizeof (struct sbecom_port_param))) + return -EFAULT; + return 0; +} + +/* this function copys the user data and then calls the real action function */ +STATIC status_t +do_set_port (struct net_device * ndev, void *data) +{ + ci_t *ci; /* ci stands for card information */ + struct sbecom_port_param pp;/* copy data to kernel land */ + + if (copy_from_user (&pp, data, sizeof (struct sbecom_port_param))) + return -EFAULT; + if (pp.portnum >= MUSYCC_NPORTS) + return -EFAULT; + ci = get_ci_by_dev (ndev); + if (!ci) + return -EINVAL; /* get card info */ + + if (pp.portnum >= ci->max_port) /* sanity check */ + return ENXIO; + + memcpy (&ci->port[pp.portnum].p, &pp, sizeof (struct sbecom_port_param)); + return mkret (c4_set_port (ci, pp.portnum)); +} + +/* work the port loopback mode as per directed */ +STATIC status_t +do_port_loop (struct net_device * ndev, void *data) +{ + struct sbecom_port_param pp; + ci_t *ci; + + if (copy_from_user (&pp, data, sizeof (struct sbecom_port_param))) + return -EFAULT; + ci = get_ci_by_dev (ndev); + if (!ci) + return -EINVAL; + return mkret (c4_loop_port (ci, pp.portnum, pp.port_mode)); +} + +/* set the specified register with the given value / or just read it */ +STATIC status_t +do_framer_rw (struct net_device * ndev, void *data) +{ + struct sbecom_port_param pp; + ci_t *ci; + int ret; + + if (copy_from_user (&pp, data, sizeof (struct sbecom_port_param))) + return -EFAULT; + ci = get_ci_by_dev (ndev); + if (!ci) + return -EINVAL; + ret = mkret (c4_frame_rw (ci, &pp)); + if (ret) + return ret; + if (copy_to_user (data, &pp, sizeof (struct sbecom_port_param))) + return -EFAULT; + return 0; +} + +/* set the specified register with the given value / or just read it */ +STATIC status_t +do_pld_rw (struct net_device * ndev, void *data) +{ + struct sbecom_port_param pp; + ci_t *ci; + int ret; + + if (copy_from_user (&pp, data, sizeof (struct sbecom_port_param))) + return -EFAULT; + ci = get_ci_by_dev (ndev); + if (!ci) + return -EINVAL; + ret = mkret (c4_pld_rw (ci, &pp)); + if (ret) + return ret; + if (copy_to_user (data, &pp, sizeof (struct sbecom_port_param))) + return -EFAULT; + return 0; +} + +/* set the specified register with the given value / or just read it */ +STATIC status_t +do_musycc_rw (struct net_device * ndev, void *data) +{ + struct c4_musycc_param mp; + ci_t *ci; + int ret; + + if (copy_from_user (&mp, data, sizeof (struct c4_musycc_param))) + return -EFAULT; + ci = get_ci_by_dev (ndev); + if (!ci) + return -EINVAL; + ret = mkret (c4_musycc_rw (ci, &mp)); + if (ret) + return ret; + if (copy_to_user (data, &mp, sizeof (struct c4_musycc_param))) + return -EFAULT; + return 0; +} + +STATIC status_t +do_get_chan (struct net_device * ndev, void *data) +{ + struct sbecom_chan_param cp; + int ret; + + if (copy_from_user (&cp, data, + sizeof (struct sbecom_chan_param))) + return -EFAULT; + + if ((ret = mkret (c4_get_chan (cp.channum, &cp)))) + return ret; + + if (copy_to_user (data, &cp, sizeof (struct sbecom_chan_param))) + return -EFAULT; + return 0; +} + +STATIC status_t +do_set_chan (struct net_device * ndev, void *data) +{ + struct sbecom_chan_param cp; + int ret; + ci_t *ci; + + if (copy_from_user (&cp, data, sizeof (struct sbecom_chan_param))) + return -EFAULT; + ci = get_ci_by_dev (ndev); + if (!ci) + return -EINVAL; + switch (ret = mkret (c4_set_chan (cp.channum, &cp))) + { + case 0: + return 0; + default: + return ret; + } +} + +STATIC status_t +do_create_chan (struct net_device * ndev, void *data) +{ + ci_t *ci; + struct net_device *dev; + struct sbecom_chan_param cp; + int ret; + + if (copy_from_user (&cp, data, sizeof (struct sbecom_chan_param))) + return -EFAULT; + ci = get_ci_by_dev (ndev); + if (!ci) + return -EINVAL; + dev = create_chan (ndev, ci, &cp); + if (!dev) + return -EBUSY; + ret = mkret (c4_new_chan (ci, cp.port, cp.channum, dev)); + if (ret) + { +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + rtnl_unlock (); /* needed due to Ioctl calling sequence */ + V7 (unregister_hdlc_device) (dev_to_hdlc (dev)); + rtnl_lock (); /* needed due to Ioctl calling sequence */ + OS_kfree (DEV_TO_PRIV (dev)); + OS_kfree (dev); +#else + rtnl_unlock (); /* needed due to Ioctl calling sequence */ + unregister_hdlc_device (dev); + rtnl_lock (); /* needed due to Ioctl calling sequence */ + free_netdev (dev); +#endif + } + return ret; +} + +STATIC status_t +do_get_chan_stats (struct net_device * ndev, void *data) +{ + struct c4_chan_stats_wrap ccs; + int ret; + + if (copy_from_user (&ccs, data, + sizeof (struct c4_chan_stats_wrap))) + return -EFAULT; + switch (ret = mkret (c4_get_chan_stats (ccs.channum, &ccs.stats))) + { + case 0: + break; + default: + return ret; + } + if (copy_to_user (data, &ccs, + sizeof (struct c4_chan_stats_wrap))) + return -EFAULT; + return 0; +} +STATIC status_t +do_set_loglevel (struct net_device * ndev, void *data) +{ + unsigned int log_level; + + if (copy_from_user (&log_level, data, sizeof (int))) + return -EFAULT; + sbecom_set_loglevel (log_level); + return 0; +} + +STATIC status_t +do_deluser (struct net_device * ndev, int lockit) +{ + if (ndev->flags & IFF_UP) + return -EBUSY; + + { + ci_t *ci; + mch_t *ch; + const struct c4_priv *priv; + int channum; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + priv = DEV_TO_PRIV (ndev); +#else + priv = (struct c4_priv *) dev_to_hdlc (ndev)->priv; +#endif + ci = priv->ci; + channum = priv->channum; + + ch = c4_find_chan (channum); + if (ch == NULL) + return -ENOENT; + ch->user = 0; /* will be freed, below */ + } + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + if (lockit) + rtnl_unlock (); /* needed if Ioctl calling sequence */ + V7 (unregister_hdlc_device) (dev_to_hdlc (ndev)); + if (lockit) + rtnl_lock (); /* needed if Ioctl calling sequence */ + OS_kfree (DEV_TO_PRIV (ndev)); + OS_kfree (ndev); +#else + if (lockit) + rtnl_unlock (); /* needed if Ioctl calling sequence */ + unregister_hdlc_device (ndev); + if (lockit) + rtnl_lock (); /* needed if Ioctl calling sequence */ + free_netdev (ndev); +#endif + return 0; +} + +int +do_del_chan (struct net_device * musycc_dev, void *data) +{ + struct sbecom_chan_param cp; + char buf[sizeof (CHANNAME) + 3]; + struct net_device *dev; + int ret; + + if (copy_from_user (&cp, data, + sizeof (struct sbecom_chan_param))) + return -EFAULT; + sprintf (buf, CHANNAME "%d", cp.channum); + if (!(dev = dev_get_by_name (&init_net, buf))) + return -ENOENT; + dev_put (dev); + ret = do_deluser (dev, 1); + if (ret) + return ret; + return c4_del_chan (cp.channum); +} +int c4_reset_board (void *); + +int +do_reset (struct net_device * musycc_dev, void *data) +{ + const struct c4_priv *priv; + int i; + + for (i = 0; i < 128; i++) + { + struct net_device *ndev; + char buf[sizeof (CHANNAME) + 3]; + + sprintf (buf, CHANNAME "%d", i); + if (!(ndev = dev_get_by_name(&init_net, buf))) + continue; + priv = dev_to_hdlc (ndev)->priv; + + if ((unsigned long) (priv->ci) == + (unsigned long) (netdev_priv(musycc_dev))) + { + ndev->flags &= ~IFF_UP; + dev_put (ndev); + netif_stop_queue (ndev); + do_deluser (ndev, 1); + } else + dev_put (ndev); + } + return 0; +} + +int +do_reset_chan_stats (struct net_device * musycc_dev, void *data) +{ + struct sbecom_chan_param cp; + + if (copy_from_user (&cp, data, + sizeof (struct sbecom_chan_param))) + return -EFAULT; + return mkret (c4_del_chan_stats (cp.channum)); +} + +STATIC status_t +c4_ioctl (struct net_device * ndev, struct ifreq * ifr, int cmd) +{ + ci_t *ci; + void *data; + int iocmd, iolen; + status_t ret; + static struct data + { + union + { + u_int8_t c; + u_int32_t i; + struct sbe_brd_info bip; + struct sbe_drv_info dip; + struct sbe_iid_info iip; + struct sbe_brd_addr bap; + struct sbecom_chan_stats stats; + struct sbecom_chan_param param; + struct temux_card_stats cards; + struct sbecom_card_param cardp; + struct sbecom_framer_param frp; + } u; + } arg; + + + if (!capable (CAP_SYS_ADMIN)) + return -EPERM; + if (cmd != SIOCDEVPRIVATE + 15) + return -EINVAL; + if (!(ci = get_ci_by_dev (ndev))) + return -EINVAL; + if (ci->state != C_RUNNING) + return -ENODEV; + if (copy_from_user (&iocmd, ifr->ifr_data, sizeof (iocmd))) + return -EFAULT; +#if 0 + if (copy_from_user (&len, ifr->ifr_data + sizeof (iocmd), sizeof (len))) + return -EFAULT; +#endif + +#if 0 + printk ("c4_ioctl: iocmd %x, dir %x type %x nr %x iolen %d.\n", iocmd, + _IOC_DIR (iocmd), _IOC_TYPE (iocmd), _IOC_NR (iocmd), + _IOC_SIZE (iocmd)); +#endif + iolen = _IOC_SIZE (iocmd); + data = ifr->ifr_data + sizeof (iocmd); + if (copy_from_user (&arg, data, iolen)) + return -EFAULT; + + ret = 0; + switch (iocmd) + { + case SBE_IOC_PORT_GET: + //printk (">> SBE_IOC_PORT_GET Ioctl...\n"); + ret = do_get_port (ndev, data); + break; + case SBE_IOC_PORT_SET: + //printk (">> SBE_IOC_PORT_SET Ioctl...\n"); + ret = do_set_port (ndev, data); + break; + case SBE_IOC_CHAN_GET: + //printk (">> SBE_IOC_CHAN_GET Ioctl...\n"); + ret = do_get_chan (ndev, data); + break; + case SBE_IOC_CHAN_SET: + //printk (">> SBE_IOC_CHAN_SET Ioctl...\n"); + ret = do_set_chan (ndev, data); + break; + case C4_DEL_CHAN: + //printk (">> C4_DEL_CHAN Ioctl...\n"); + ret = do_del_chan (ndev, data); + break; + case SBE_IOC_CHAN_NEW: + ret = do_create_chan (ndev, data); + break; + case SBE_IOC_CHAN_GET_STAT: + ret = do_get_chan_stats (ndev, data); + break; + case SBE_IOC_LOGLEVEL: + ret = do_set_loglevel (ndev, data); + break; + case SBE_IOC_RESET_DEV: + ret = do_reset (ndev, data); + break; + case SBE_IOC_CHAN_DEL_STAT: + ret = do_reset_chan_stats (ndev, data); + break; + case C4_LOOP_PORT: + ret = do_port_loop (ndev, data); + break; + case C4_RW_FRMR: + ret = do_framer_rw (ndev, data); + break; + case C4_RW_MSYC: + ret = do_musycc_rw (ndev, data); + break; + case C4_RW_PLD: + ret = do_pld_rw (ndev, data); + break; + case SBE_IOC_IID_GET: + ret = (iolen == sizeof (struct sbe_iid_info)) ? c4_get_iidinfo (ci, &arg.u.iip) : -EFAULT; + if (ret == 0) /* no error, copy data */ + if (copy_to_user (data, &arg, iolen)) + return -EFAULT; + break; + default: + //printk (">> c4_ioctl: EINVAL - unknown iocmd <%x>\n", iocmd); + ret = -EINVAL; + break; + } + return mkret (ret); +} + +static const struct net_device_ops c4_ops = { + .ndo_open = void_open, + .ndo_start_xmit = c4_linux_xmit, + .ndo_do_ioctl = c4_ioctl, +}; + +static void c4_setup(struct net_device *dev) +{ + dev->type = ARPHRD_VOID; + dev->netdev_ops = &c4_ops; +} + +struct net_device *__init +c4_add_dev (hdw_info_t * hi, int brdno, unsigned long f0, unsigned long f1, + int irq0, int irq1) +{ + struct net_device *ndev; + ci_t *ci; + + ndev = alloc_netdev(sizeof(ci_t), SBE_IFACETMPL, c4_setup); + if (!ndev) + { + printk (KERN_WARNING "%s: no memory for struct net_device !\n", hi->devname); + error_flag = ENOMEM; + return 0; + } + ci = (ci_t *)(netdev_priv(ndev)); + ndev->irq = irq0; + + ci->hdw_info = hi; + ci->state = C_INIT; /* mark as hardware not available */ + ci->next = c4_list; + c4_list = ci; + ci->brdno = ci->next ? ci->next->brdno + 1 : 0; + + if (CI == 0) + CI = ci; /* DEBUG, only board 0 usage */ + + strcpy (ci->devname, hi->devname); + ci->release = &pmcc4_OSSI_release[0]; + + /* tasklet */ +#if defined(SBE_ISR_TASKLET) + tasklet_init (&ci->ci_musycc_isr_tasklet, + (void (*) (unsigned long)) musycc_intr_bh_tasklet, + (unsigned long) ci); + + if (atomic_read (&ci->ci_musycc_isr_tasklet.count) == 0) + tasklet_disable_nosync (&ci->ci_musycc_isr_tasklet); +#elif defined(SBE_ISR_IMMEDIATE) + ci->ci_musycc_isr_tq.routine = (void *) (unsigned long) musycc_intr_bh_tasklet; + ci->ci_musycc_isr_tq.data = ci; +#endif + + + if (register_netdev (ndev) || + (c4_init (ci, (u_char *) f0, (u_char *) f1) != SBE_DRVR_SUCCESS)) + { + OS_kfree (netdev_priv(ndev)); + OS_kfree (ndev); + error_flag = ENODEV; + return 0; + } + /************************************************************* + * int request_irq(unsigned int irq, + * void (*handler)(int, void *, struct pt_regs *), + * unsigned long flags, const char *dev_name, void *dev_id); + * wherein: + * irq -> The interrupt number that is being requested. + * handler -> Pointer to handling function being installed. + * flags -> A bit mask of options related to interrupt management. + * dev_name -> String used in /proc/interrupts to show owner of interrupt. + * dev_id -> Pointer (for shared interrupt lines) to point to its own + * private data area (to identify which device is interrupting). + * + * extern void free_irq(unsigned int irq, void *dev_id); + **************************************************************/ + + if (request_irq (irq0, &c4_linux_interrupt, +#if defined(SBE_ISR_TASKLET) + IRQF_DISABLED | IRQF_SHARED, +#elif defined(SBE_ISR_IMMEDIATE) + IRQF_DISABLED | IRQF_SHARED, +#elif defined(SBE_ISR_INLINE) + IRQF_SHARED, +#endif + ndev->name, ndev)) + { + printk (KERN_WARNING "%s: MUSYCC could not get irq: %d\n", + ndev->name, irq0); + unregister_netdev (ndev); + OS_kfree (netdev_priv(ndev)); + OS_kfree (ndev); + error_flag = EIO; + return 0; + } +#ifdef CONFIG_SBE_PMCC4_NCOMM + if (request_irq (irq1, &c4_ebus_interrupt, IRQF_SHARED, ndev->name, ndev)) + { + printk (KERN_WARNING "%s: EBUS could not get irq: %d\n", + hi->devname, irq1); + unregister_netdev (ndev); + free_irq (irq0, ndev); + OS_kfree (ndev->priv); + OS_kfree (ndev); + error_flag = EIO; + return 0; + } +#endif + + /* setup board identification information */ + + { + u_int32_t tmp; + + hdw_sn_get (hi, brdno); /* also sets PROM format type (promfmt) + * for later usage */ + + switch (hi->promfmt) + { + case PROM_FORMAT_TYPE1: + memcpy (ndev->dev_addr, (FLD_TYPE1 *) (hi->mfg_info.pft1.Serial), 6); + memcpy (&tmp, (FLD_TYPE1 *) (hi->mfg_info.pft1.Id), 4); /* unaligned data + * acquisition */ + ci->brd_id = cpu_to_be32 (tmp); + break; + case PROM_FORMAT_TYPE2: + memcpy (ndev->dev_addr, (FLD_TYPE2 *) (hi->mfg_info.pft2.Serial), 6); + memcpy (&tmp, (FLD_TYPE2 *) (hi->mfg_info.pft2.Id), 4); /* unaligned data + * acquisition */ + ci->brd_id = cpu_to_be32 (tmp); + break; + default: + ci->brd_id = 0; + memset (ndev->dev_addr, 0, 6); + break; + } + +#if 1 + sbeid_set_hdwbid (ci); /* requires bid to be preset */ +#else + sbeid_set_bdtype (ci); /* requires hdw_bid to be preset */ +#endif + + } + +#ifdef CONFIG_PROC_FS + sbecom_proc_brd_init (ci); +#endif +#if defined(SBE_ISR_TASKLET) + tasklet_enable (&ci->ci_musycc_isr_tasklet); +#endif + + + if ((error_flag = c4_init2 (ci)) != SBE_DRVR_SUCCESS) + { +#ifdef CONFIG_PROC_FS + sbecom_proc_brd_cleanup (ci); +#endif + unregister_netdev (ndev); + free_irq (irq1, ndev); + free_irq (irq0, ndev); + OS_kfree (netdev_priv(ndev)); + OS_kfree (ndev); + return 0; /* failure, error_flag is set */ + } + return ndev; +} + +STATIC int __init +c4_mod_init (void) +{ + int rtn; + + printk (KERN_WARNING "%s: %s\n", THIS_MODULE->name, pmcc4_OSSI_release); + if ((rtn = c4hw_attach_all ())) + return -rtn; /* installation failure - see system log */ + + /* housekeeping notifications */ + if (log_level != log_level_default) + printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", + THIS_MODULE->name, log_level_default, log_level); + if (max_mru != max_mru_default) + printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", + THIS_MODULE->name, max_mru_default, max_mru); + if (max_mtu != max_mtu_default) + printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", + THIS_MODULE->name, max_mtu_default, max_mtu); + if (max_rxdesc_used != max_rxdesc_default) + { + if (max_rxdesc_used > 2000) + max_rxdesc_used = 2000; /* out-of-bounds reset */ + printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", + THIS_MODULE->name, max_rxdesc_default, max_rxdesc_used); + } + if (max_txdesc_used != max_txdesc_default) + { + if (max_txdesc_used > 1000) + max_txdesc_used = 1000; /* out-of-bounds reset */ + printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", + THIS_MODULE->name, max_txdesc_default, max_txdesc_used); + } + return 0; /* installation success */ +} + + + /* + * find any still allocated hdlc registrations and unregister via call to + * do_deluser() + */ + +STATIC void __exit +cleanup_hdlc (void) +{ + hdw_info_t *hi; + ci_t *ci; + struct net_device *ndev; + int i, j, k; + + for (i = 0, hi = hdw_info; i < MAX_BOARDS; i++, hi++) + { + if (hi->ndev) /* a board has been attached */ + { + ci = (ci_t *)(netdev_priv(hi->ndev)); + for (j = 0; j < ci->max_port; j++) + for (k = 0; k < MUSYCC_NCHANS; k++) + if ((ndev = ci->port[j].chan[k]->user)) + { + do_deluser (ndev, 0); + } + } + } +} + + +STATIC void __exit +c4_mod_remove (void) +{ + cleanup_hdlc (); /* delete any missed channels */ + cleanup_devs (); + c4_cleanup (); + cleanup_ioremap (); + printk (KERN_INFO "SBE %s - driver removed.\n", THIS_MODULE->name); +} + +module_init (c4_mod_init); +module_exit (c4_mod_remove); + +#ifndef SBE_INCLUDE_SYMBOLS +#ifndef CONFIG_SBE_WANC24_NCOMM +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) +EXPORT_NO_SYMBOLS; +#endif +#endif +#endif + +MODULE_AUTHOR ("SBE Technical Services "); +MODULE_DESCRIPTION ("wanPCI-CxT1E1 Generic HDLC WAN Driver module"); +#ifdef MODULE_LICENSE +MODULE_LICENSE ("GPL"); +#endif + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/musycc.c b/drivers/staging/cxt1e1/musycc.c new file mode 100644 index 0000000..650c9c0 --- /dev/null +++ b/drivers/staging/cxt1e1/musycc.c @@ -0,0 +1,2180 @@ +/* + * $Id: musycc.c,v 2.1 2007/08/15 23:32:17 rickd PMCC4_3_1B $ + */ + +unsigned int max_intcnt = 0; +unsigned int max_bh = 0; + +/*----------------------------------------------------------------------------- + * musycc.c - + * + * Copyright (C) 2007 One Stop Systems, Inc. + * Copyright (C) 2003-2006 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@onestopsystems.com + * One Stop Systems, Inc. Escondido, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 2.1 $ + * Last changed on $Date: 2007/08/15 23:32:17 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: musycc.c,v $ + * Revision 2.1 2007/08/15 23:32:17 rickd + * Use 'if 0' instead of GNU comment delimeter to avoid line wrap induced compiler errors. + * + * Revision 2.0 2007/08/15 22:13:20 rickd + * Update to printf pointer %p usage and correct some UINT to ULONG for + * 64bit comptibility. + * + * Revision 1.7 2006/04/21 00:56:40 rickd + * workqueue files now prefixed with prefix. + * + * Revision 1.6 2005/10/27 18:54:19 rickd + * Clean out old code. Default to HDLC_FCS16, not TRANS. + * + * Revision 1.5 2005/10/17 23:55:28 rickd + * Initial port of NCOMM support patches from original work found + * in pmc_c4t1e1 as updated by NCOMM. Ref: CONFIG_SBE_PMCC4_NCOMM. + * + * Revision 1.4 2005/10/13 20:35:25 rickd + * Cleanup warning for unused variable. + * + * Revision 1.3 2005/10/13 19:19:22 rickd + * Disable redundant driver removal cleanup code. + * + * Revision 1.2 2005/10/11 18:36:16 rickd + * Clean up warning messages caused by de-implemented some associated + * with spin_lock() removals. + * + * Revision 1.1 2005/10/05 00:45:28 rickd + * Re-enable xmit on flow-controlled and full channel to fix restart hang. + * Add some temp spin-lock debug code (rld_spin_owner). + * + * Revision 1.0 2005/09/28 00:10:06 rickd + * Initial release for C4T1E1 support. Lots of transparent + * mode updates. + * + *----------------------------------------------------------------------------- + */ + +char SBEid_pmcc4_musyccc[] = +"@(#)musycc.c - $Revision: 2.1 $ (c) Copyright 2004-2006 SBE, Inc."; + + +#include +#include "pmcc4_sysdep.h" +#include +#include +#include +#include "sbecom_inline_linux.h" +#include "libsbew.h" +#include "pmcc4_private.h" +#include "pmcc4.h" +#include "musycc.h" + +#ifdef SBE_INCLUDE_SYMBOLS +#define STATIC +#else +#define STATIC static +#endif + +#define sd_find_chan(ci,ch) c4_find_chan(ch) + + +/*******************************************************************/ +/* global driver variables */ +extern ci_t *c4_list; +extern int drvr_state; +extern int log_level; + +extern int max_mru; +extern int max_mtu; +extern int max_rxdesc_used; +extern int max_txdesc_used; +extern ci_t *CI; /* dummy pointr to board ZEROE's data - DEBUG + * USAGE */ + + +/*******************************************************************/ +/* forward references */ +void c4_fifo_free (mpi_t *, int); +void c4_wk_chan_restart (mch_t *); +void musycc_bh_tx_eom (mpi_t *, int); +int musycc_chan_up (ci_t *, int); +status_t __init musycc_init (ci_t *); +STATIC void __init musycc_init_port (mpi_t *); +void musycc_intr_bh_tasklet (ci_t *); +void musycc_serv_req (mpi_t *, u_int32_t); +void musycc_update_timeslots (mpi_t *); + +/*******************************************************************/ + +#if 1 +STATIC int +musycc_dump_rxbuffer_ring (mch_t * ch, int lockit) +{ + struct mdesc *m; + unsigned long flags = 0; + + u_int32_t status; + int n; + + if (lockit) + { + spin_lock_irqsave (&ch->ch_rxlock, flags); + } + if (ch->rxd_num == 0) + { + printk (" ZERO receive buffers allocated for this channel."); + } else + { + FLUSH_MEM_READ (); + m = &ch->mdr[ch->rxix_irq_srv]; + for (n = ch->rxd_num; n; n--) + { + status = le32_to_cpu (m->status); + { + printk ("%c %08lx[%2d]: sts %08x (%c%c%c%c:%d.) Data [%08x] Next [%08x]\n", + (m == &ch->mdr[ch->rxix_irq_srv]) ? 'F' : ' ', + (unsigned long) m, n, + status, + m->data ? (status & HOST_RX_OWNED ? 'H' : 'M') : '-', + status & POLL_DISABLED ? 'P' : '-', + status & EOBIRQ_ENABLE ? 'b' : '-', + status & EOMIRQ_ENABLE ? 'm' : '-', + status & LENGTH_MASK, + le32_to_cpu (m->data), le32_to_cpu (m->next)); +#ifdef RLD_DUMP_BUFDATA + { + u_int32_t *dp; + int len = status & LENGTH_MASK; + +#if 1 + if (m->data && (status & HOST_RX_OWNED)) +#else + if (m->data) /* always dump regardless of valid RX + * data */ +#endif + { + dp = (u_int32_t *) OS_phystov ((void *) (le32_to_cpu (m->data))); + if (len >= 0x10) + printk (" %x[%x]: %08X %08X %08X %08x\n", (u_int32_t) dp, len, + *dp, *(dp + 1), *(dp + 2), *(dp + 3)); + else if (len >= 0x08) + printk (" %x[%x]: %08X %08X\n", (u_int32_t) dp, len, + *dp, *(dp + 1)); + else + printk (" %x[%x]: %08X\n", (u_int32_t) dp, len, *dp); + } + } +#endif + } + m = m->snext; + } + } /* -for- */ + printk ("\n"); + + if (lockit) + { + spin_unlock_irqrestore (&ch->ch_rxlock, flags); + } + return 0; +} +#endif + +#if 1 +STATIC int +musycc_dump_txbuffer_ring (mch_t * ch, int lockit) +{ + struct mdesc *m; + unsigned long flags = 0; + u_int32_t status; + int n; + + if (lockit) + { + spin_lock_irqsave (&ch->ch_txlock, flags); + } + if (ch->txd_num == 0) + { + printk (" ZERO transmit buffers allocated for this channel."); + } else + { + FLUSH_MEM_READ (); + m = ch->txd_irq_srv; + for (n = ch->txd_num; n; n--) + { + status = le32_to_cpu (m->status); + { + printk ("%c%c %08lx[%2d]: sts %08x (%c%c%c%c:%d.) Data [%08x] Next [%08x]\n", + (m == ch->txd_usr_add) ? 'F' : ' ', + (m == ch->txd_irq_srv) ? 'L' : ' ', + (unsigned long) m, n, + status, + m->data ? (status & MUSYCC_TX_OWNED ? 'M' : 'H') : '-', + status & POLL_DISABLED ? 'P' : '-', + status & EOBIRQ_ENABLE ? 'b' : '-', + status & EOMIRQ_ENABLE ? 'm' : '-', + status & LENGTH_MASK, + le32_to_cpu (m->data), le32_to_cpu (m->next)); +#ifdef RLD_DUMP_BUFDATA + { + u_int32_t *dp; + int len = status & LENGTH_MASK; + + if (m->data) + { + dp = (u_int32_t *) OS_phystov ((void *) (le32_to_cpu (m->data))); + if (len >= 0x10) + printk (" %x[%x]: %08X %08X %08X %08x\n", (u_int32_t) dp, len, + *dp, *(dp + 1), *(dp + 2), *(dp + 3)); + else if (len >= 0x08) + printk (" %x[%x]: %08X %08X\n", (u_int32_t) dp, len, + *dp, *(dp + 1)); + else + printk (" %x[%x]: %08X\n", (u_int32_t) dp, len, *dp); + } + } +#endif + } + m = m->snext; + } + } /* -for- */ + printk ("\n"); + + if (lockit) + { + spin_unlock_irqrestore (&ch->ch_txlock, flags); + } + return 0; +} +#endif + + +/* + * The following supports a backdoor debug facility which can be used to + * display the state of a board's channel. + */ + +status_t +musycc_dump_ring (ci_t * ci, unsigned int chan) +{ + mch_t *ch; + + if (chan >= MAX_CHANS_USED) + { + return SBE_DRVR_FAIL; /* E2BIG */ + } + { + int bh; + + bh = atomic_read (&ci->bh_pending); + printk (">> bh_pend %d [%d] ihead %d itail %d [%d] th_cnt %d bh_cnt %d wdcnt %d note %d\n", + bh, max_bh, ci->iqp_headx, ci->iqp_tailx, max_intcnt, + ci->intlog.drvr_intr_thcount, + ci->intlog.drvr_intr_bhcount, + ci->wdcount, ci->wd_notify); + max_bh = 0; /* reset counter */ + max_intcnt = 0; /* reset counter */ + } + + if (!(ch = sd_find_chan (dummy, chan))) + { + printk (">> musycc_dump_ring: channel %d not up.\n", chan); + return ENOENT; + } + printk (">> CI %p CHANNEL %3d @ %p: state %x status/p %x/%x\n", ci, chan, ch, ch->state, + ch->status, ch->p.status); + printk ("--------------------------------\nTX Buffer Ring - Channel %d, txd_num %d. (bd/ch pend %d %d), TXD required %d, txpkt %lu\n", + chan, ch->txd_num, + (u_int32_t) atomic_read (&ci->tx_pending), (u_int32_t) atomic_read (&ch->tx_pending), ch->txd_required, ch->s.tx_packets); + printk ("++ User 0x%p IRQ_SRV 0x%p USR_ADD 0x%p QStopped %x, start_tx %x tx_full %d txd_free %d mode %x\n", + ch->user, ch->txd_irq_srv, ch->txd_usr_add, + sd_queue_stopped (ch->user), + ch->ch_start_tx, ch->tx_full, ch->txd_free, ch->p.chan_mode); + musycc_dump_txbuffer_ring (ch, 1); + printk ("RX Buffer Ring - Channel %d, rxd_num %d. IRQ_SRV[%d] 0x%p, start_rx %x rxpkt %lu\n", + chan, ch->rxd_num, ch->rxix_irq_srv, + &ch->mdr[ch->rxix_irq_srv], ch->ch_start_rx, ch->s.rx_packets); + musycc_dump_rxbuffer_ring (ch, 1); + + return SBE_DRVR_SUCCESS; +} + + +status_t +musycc_dump_rings (ci_t * ci, unsigned int start_chan) +{ + unsigned int chan; + + for (chan = start_chan; chan < (start_chan + 5); chan++) + musycc_dump_ring (ci, chan); + return SBE_DRVR_SUCCESS; +} + + +/* + * NOTE on musycc_init_mdt(): These MUSYCC writes are only operational after + * a MUSYCC GROUP_INIT command has been issued. + */ + +void +musycc_init_mdt (mpi_t * pi) +{ + u_int32_t *addr, cfg; + int i; + + /* + * This Idle Code insertion takes effect prior to channel's first + * transmitted message. After that, each message contains its own Idle + * Code information which is to be issued after the message is + * transmitted (Ref.MUSYCC 5.2.2.3: MCENBL bit in Group Configuration + * Descriptor). + */ + + addr = (u_int32_t *) ((u_long) pi->reg + MUSYCC_MDT_BASE03_ADDR); + cfg = CFG_CH_FLAG_7E << IDLE_CODE; + + for (i = 0; i < 32; addr++, i++) + { + pci_write_32 (addr, cfg); + } +} + + +/* Set TX thp to the next unprocessed md */ + +void +musycc_update_tx_thp (mch_t * ch) +{ + struct mdesc *md; + unsigned long flags; + + spin_lock_irqsave (&ch->ch_txlock, flags); + while (1) + { + md = ch->txd_irq_srv; + FLUSH_MEM_READ (); + if (!md->data) + { + /* No MDs with buffers to process */ + spin_unlock_irqrestore (&ch->ch_txlock, flags); + return; + } + if ((le32_to_cpu (md->status)) & MUSYCC_TX_OWNED) + { + /* this is the MD to restart TX with */ + break; + } + /* + * Otherwise, we have a valid, host-owned message descriptor which + * has been successfully transmitted and whose buffer can be freed, + * so... process this MD, it's owned by the host. (This might give + * as a new, updated txd_irq_srv.) + */ + musycc_bh_tx_eom (ch->up, ch->gchan); + } + md = ch->txd_irq_srv; + ch->up->regram->thp[ch->gchan] = cpu_to_le32 (OS_vtophys (md)); + FLUSH_MEM_WRITE (); + + if (ch->tx_full) + { + ch->tx_full = 0; + ch->txd_required = 0; + sd_enable_xmit (ch->user); /* re-enable to catch flow controlled + * channel */ + } + spin_unlock_irqrestore (&ch->ch_txlock, flags); + +#ifdef RLD_TRANS_DEBUG + printk ("++ musycc_update_tx_thp[%d]: setting thp = %p, sts %x\n", ch->channum, md, md->status); +#endif +} + + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41) +/* + * This is the workq task executed by the OS when our queue_work() is + * scheduled and run. It can fire off either RX or TX ACTIVATION depending + * upon the channel's ch_start_tx and ch_start_rx variables. This routine + * is implemented as a work queue so that the call to the service request is + * able to sleep, awaiting an interrupt acknowledgment response (SACK) from + * the hardware. + */ + +void +musycc_wq_chan_restart (void *arg) /* channel private structure */ +{ + mch_t *ch; + mpi_t *pi; + struct mdesc *md; +#if 0 + unsigned long flags; +#endif + + ch = container_of(arg, struct c4_chan_info, ch_work); + pi = ch->up; + +#ifdef RLD_TRANS_DEBUG + printk ("wq_chan_restart[%d]: start_RT[%d/%d] status %x\n", + ch->channum, ch->ch_start_rx, ch->ch_start_tx, ch->status); + +#endif + + /**********************************/ + /** check for RX restart request **/ + /**********************************/ + + if ((ch->ch_start_rx) && (ch->status & RX_ENABLED)) + { + + ch->ch_start_rx = 0; +#if defined(RLD_TRANS_DEBUG) || defined(RLD_RXACT_DEBUG) + { + static int hereb4 = 7; + + if (hereb4) /* RLD DEBUG */ + { + hereb4--; +#ifdef RLD_TRANS_DEBUG + md = &ch->mdr[ch->rxix_irq_srv]; + printk ("++ musycc_wq_chan_restart[%d] CHAN RX ACTIVATE: rxix_irq_srv %d, md %p sts %x, rxpkt %lu\n", + ch->channum, ch->rxix_irq_srv, md, le32_to_cpu (md->status), + ch->s.rx_packets); +#elif defined(RLD_RXACT_DEBUG) + md = &ch->mdr[ch->rxix_irq_srv]; + printk ("++ musycc_wq_chan_restart[%d] CHAN RX ACTIVATE: rxix_irq_srv %d, md %p sts %x, rxpkt %lu\n", + ch->channum, ch->rxix_irq_srv, md, le32_to_cpu (md->status), + ch->s.rx_packets); + musycc_dump_rxbuffer_ring (ch, 1); /* RLD DEBUG */ +#endif + } + } +#endif + musycc_serv_req (pi, SR_CHANNEL_ACTIVATE | SR_RX_DIRECTION | ch->gchan); + } + /**********************************/ + /** check for TX restart request **/ + /**********************************/ + + if ((ch->ch_start_tx) && (ch->status & TX_ENABLED)) + { + /* find next unprocessed message, then set TX thp to it */ + musycc_update_tx_thp (ch); + +#if 0 + spin_lock_irqsave (&ch->ch_txlock, flags); +#endif + md = ch->txd_irq_srv; + if (!md) + { +#ifdef RLD_TRANS_DEBUG + printk ("-- musycc_wq_chan_restart[%d]: WARNING, starting NULL md\n", ch->channum); +#endif +#if 0 + spin_unlock_irqrestore (&ch->ch_txlock, flags); +#endif + } else if (md->data && ((le32_to_cpu (md->status)) & MUSYCC_TX_OWNED)) + { + ch->ch_start_tx = 0; +#if 0 + spin_unlock_irqrestore (&ch->ch_txlock, flags); /* allow interrupts for service request */ +#endif +#ifdef RLD_TRANS_DEBUG + printk ("++ musycc_wq_chan_restart() CHAN TX ACTIVATE: chan %d txd_irq_srv %p = sts %x, txpkt %lu\n", + ch->channum, ch->txd_irq_srv, ch->txd_irq_srv->status, ch->s.tx_packets); +#endif + musycc_serv_req (pi, SR_CHANNEL_ACTIVATE | SR_TX_DIRECTION | ch->gchan); + } +#ifdef RLD_RESTART_DEBUG + else + { + /* retain request to start until retried and we have data to xmit */ + printk ("-- musycc_wq_chan_restart[%d]: DELAYED due to md %p sts %x data %x, start_tx %x\n", + ch->channum, md, + le32_to_cpu (md->status), + le32_to_cpu (md->data), ch->ch_start_tx); + musycc_dump_txbuffer_ring (ch, 0); +#if 0 + spin_unlock_irqrestore (&ch->ch_txlock, flags); /* allow interrupts for service request */ +#endif + } +#endif + } +} +#endif + + + /* + * Channel restart either fires of a workqueue request (2.6) or lodges a + * watchdog activation sequence (2.4). + */ + +void +musycc_chan_restart (mch_t * ch) +{ +#ifdef RLD_RESTART_DEBUG + printk ("++ musycc_chan_restart[%d]: txd_irq_srv @ %p = sts %x\n", + ch->channum, ch->txd_irq_srv, ch->txd_irq_srv->status); +#endif + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41) + /* 2.6 - find next unprocessed message, then set TX thp to it */ +#ifdef RLD_RESTART_DEBUG + printk (">> musycc_chan_restart: scheduling Chan %x workQ @ %p\n", ch->channum, &ch->ch_work); +#endif + c4_wk_chan_restart (ch); /* work queue mechanism fires off: Ref: + * musycc_wq_chan_restart () */ + +#else + + + /* 2.4 - find next unprocessed message, then set TX thp to it */ +#ifdef RLD_RESTART_DEBUG + printk (">> musycc_chan_restart: scheduling Chan %x start_tx %x\n", ch->channum, ch->ch_start_tx); +#endif + /* restart transmission from background loop */ + ch->up->up->wd_notify = WD_NOTIFY_1TX; +#endif +} + + +#if 0 +void +musycc_cleanup (ci_t * ci) +{ + mpi_t *pi; + int i, j; + + /* free up driver resources */ + ci->state = C_INIT; /* mark as hardware not available */ + + for (i = 0; i < ci->max_ports; i++) + { + pi = &ci->port[i]; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41) + c4_wq_port_cleanup (pi); +#endif + for (j = 0; j < MUSYCC_NCHANS; j++) + { + if (pi->chan[j]) + OS_kfree (pi->chan[j]); /* free mch_t struct */ + } + OS_kfree (pi->regram_saved); + } +#if 0 + /* obsolete - watchdog is now static w/in ci_t */ + OS_free_watchdog (ci->wd); +#endif + OS_kfree (ci->iqd_p_saved); + OS_kfree (ci); +} +#endif + +void +rld_put_led (mpi_t * pi, u_int32_t ledval) +{ + static u_int32_t led = 0; + + if (ledval == 0) + led = 0; + else + led |= ledval; + + pci_write_32 ((u_int32_t *) &pi->up->cpldbase->leds, led); /* RLD DEBUG TRANHANG */ +} + + +#define MUSYCC_SR_RETRY_CNT 9 + +void +musycc_serv_req (mpi_t * pi, u_int32_t req) +{ + volatile u_int32_t r; + int rcnt; + + /* + * PORT NOTE: Semaphore protect service loop guarantees only a single + * operation at a time. Per MUSYCC Manual - "Issuing service requests to + * the same channel group without first receiving ACK from each request + * may cause the host to lose track of which service request has been + * acknowledged." + */ + + SD_SEM_TAKE (&pi->sr_sem_busy, "serv"); /* only 1 thru here, per + * group */ + + if (pi->sr_last == req) + { +#ifdef RLD_TRANS_DEBUG + printk (">> same SR, Port %d Req %x\n", pi->portnum, req); +#endif + + /* + * The most likely repeated request is the channel activation command + * which follows the occurrence of a Transparent mode TX ONR or a + * BUFF error. If the previous command was a CHANNEL ACTIVATE, + * precede it with a NOOP command in order maintain coherent control + * of this current (re)ACTIVATE. + */ + + r = (pi->sr_last & ~SR_GCHANNEL_MASK); + if ((r == (SR_CHANNEL_ACTIVATE | SR_TX_DIRECTION)) || + (r == (SR_CHANNEL_ACTIVATE | SR_RX_DIRECTION))) + { +#ifdef RLD_TRANS_DEBUG + printk (">> same CHAN ACT SR, Port %d Req %x => issue SR_NOOP CMD\n", pi->portnum, req); +#endif + SD_SEM_GIVE (&pi->sr_sem_busy); /* allow this next request */ + musycc_serv_req (pi, SR_NOOP); + SD_SEM_TAKE (&pi->sr_sem_busy, "serv"); /* relock & continue w/ + * original req */ + } else if (req == SR_NOOP) + { + /* no need to issue back-to-back SR_NOOP commands at this time */ +#ifdef RLD_TRANS_DEBUG + printk (">> same Port SR_NOOP skipped, Port %d\n", pi->portnum); +#endif + SD_SEM_GIVE (&pi->sr_sem_busy); /* allow this next request */ + return; + } + } + rcnt = 0; + pi->sr_last = req; +rewrite: + pci_write_32 ((u_int32_t *) &pi->reg->srd, req); + FLUSH_MEM_WRITE (); + + /* + * Per MUSYCC Manual, Section 6.1,2 - "When writing an SCR service + * request, the host must ensure at least one PCI bus clock cycle has + * elapsed before writing another service request. To meet this minimum + * elapsed service request write timing interval, it is recommended that + * the host follow any SCR write with another operation which reads from + * the same address." + */ + r = pci_read_32 ((u_int32_t *) &pi->reg->srd); /* adhere to write + * timing imposition */ + + + if ((r != req) && (req != SR_CHIP_RESET) && (++rcnt <= MUSYCC_SR_RETRY_CNT)) + { + if (log_level >= LOG_MONITOR) + printk ("%s: %d - reissue srv req/last %x/%x (hdw reads %x), Chan %d.\n", + pi->up->devname, rcnt, req, pi->sr_last, r, + (pi->portnum * MUSYCC_NCHANS) + (req & 0x1f)); + OS_uwait_dummy (); /* this delay helps reduce reissue counts + * (reason not yet researched) */ + goto rewrite; + } + if (rcnt > MUSYCC_SR_RETRY_CNT) + { + printk (KERN_WARNING "%s: failed service request (#%d)= %x, group %d.\n", + pi->up->devname, MUSYCC_SR_RETRY_CNT, req, pi->portnum); + SD_SEM_GIVE (&pi->sr_sem_busy); /* allow any next request */ + return; + } + if (req == SR_CHIP_RESET) + { + /* + * PORT NOTE: the CHIP_RESET command is NOT ack'd by the MUSYCC, thus + * the upcoming delay is used. Though the MUSYCC documentation + * suggests a read-after-write would supply the required delay, it's + * unclear what CPU/BUS clock speeds might have been assumed when + * suggesting this 'lack of ACK' workaround. Thus the use of uwait. + */ + OS_uwait (100000, "icard"); /* 100ms */ + } else + { + FLUSH_MEM_READ (); + SD_SEM_TAKE (&pi->sr_sem_wait, "sakack"); /* sleep until SACK + * interrupt occurs */ + } + SD_SEM_GIVE (&pi->sr_sem_busy); /* allow any next request */ +} + + +#ifdef SBE_PMCC4_ENABLE +void +musycc_update_timeslots (mpi_t * pi) +{ + int i, ch; + char e1mode = IS_FRAME_ANY_E1 (pi->p.port_mode); + + for (i = 0; i < 32; i++) + { + int usedby = 0, last = 0, ts, j, bits[8]; + + u_int8_t lastval = 0; + + if (((i == 0) && e1mode) || /* disable if E1 mode */ + ((i == 16) && ((pi->p.port_mode == CFG_FRAME_E1CRC_CAS) || (pi->p.port_mode == CFG_FRAME_E1CRC_CAS_AMI))) + || ((i > 23) && (!e1mode))) /* disable if T1 mode */ + { + pi->tsm[i] = 0xff; /* make tslot unavailable for this mode */ + } else + { + pi->tsm[i] = 0x00; /* make tslot available for assignment */ + } + for (j = 0; j < 8; j++) + bits[j] = -1; + for (ch = 0; ch < MUSYCC_NCHANS; ch++) + { + if ((pi->chan[ch]->state == UP) && (pi->chan[ch]->p.bitmask[i])) + { + usedby++; + last = ch; + lastval = pi->chan[ch]->p.bitmask[i]; + for (j = 0; j < 8; j++) + if (lastval & (1 << j)) + bits[j] = ch; + pi->tsm[i] |= lastval; + } + } + if (!usedby) + ts = 0; + else if ((usedby == 1) && (lastval == 0xff)) + ts = (4 << 5) | last; + else if ((usedby == 1) && (lastval == 0x7f)) + ts = (5 << 5) | last; + else + { + int idx; + + if (bits[0] < 0) + ts = (6 << 5) | (idx = last); + else + ts = (7 << 5) | (idx = bits[0]); + for (j = 1; j < 8; j++) + { + pi->regram->rscm[idx * 8 + j] = (bits[j] < 0) ? 0 : (0x80 | bits[j]); + pi->regram->tscm[idx * 8 + j] = (bits[j] < 0) ? 0 : (0x80 | bits[j]); + } + } + pi->regram->rtsm[i] = ts; + pi->regram->ttsm[i] = ts; + } + FLUSH_MEM_WRITE (); + + musycc_serv_req (pi, SR_TIMESLOT_MAP | SR_RX_DIRECTION); + musycc_serv_req (pi, SR_TIMESLOT_MAP | SR_TX_DIRECTION); + musycc_serv_req (pi, SR_SUBCHANNEL_MAP | SR_RX_DIRECTION); + musycc_serv_req (pi, SR_SUBCHANNEL_MAP | SR_TX_DIRECTION); +} +#endif + + +#ifdef SBE_WAN256T3_ENABLE +void +musycc_update_timeslots (mpi_t * pi) +{ + mch_t *ch; + + u_int8_t ts, hmask, tsen; + int gchan; + int i; + +#ifdef SBE_PMCC4_ENABLE + hmask = (0x1f << pi->up->p.hypersize) & 0x1f; +#endif +#ifdef SBE_WAN256T3_ENABLE + hmask = (0x1f << hyperdummy) & 0x1f; +#endif + for (i = 0; i < 128; i++) + { + gchan = ((pi->portnum * MUSYCC_NCHANS) + (i & hmask)) % MUSYCC_NCHANS; + ch = pi->chan[gchan]; + if (ch->p.mode_56k) + tsen = MODE_56KBPS; + else + tsen = MODE_64KBPS; /* also the default */ + ts = ((pi->portnum % 4) == (i / 32)) ? (tsen << 5) | (i & hmask) : 0; + pi->regram->rtsm[i] = ts; + pi->regram->ttsm[i] = ts; + } + FLUSH_MEM_WRITE (); + musycc_serv_req (pi, SR_TIMESLOT_MAP | SR_RX_DIRECTION); + musycc_serv_req (pi, SR_TIMESLOT_MAP | SR_TX_DIRECTION); +} +#endif + + + /* + * This routine converts a generic library channel configuration parameter + * into a hardware specific register value (IE. MUSYCC CCD Register). + */ +u_int32_t +musycc_chan_proto (int proto) +{ + int reg; + + switch (proto) + { + case CFG_CH_PROTO_TRANS: /* 0 */ + reg = MUSYCC_CCD_TRANS; + break; + case CFG_CH_PROTO_SS7: /* 1 */ + reg = MUSYCC_CCD_SS7; + break; + default: + case CFG_CH_PROTO_ISLP_MODE: /* 4 */ + case CFG_CH_PROTO_HDLC_FCS16: /* 2 */ + reg = MUSYCC_CCD_HDLC_FCS16; + break; + case CFG_CH_PROTO_HDLC_FCS32: /* 3 */ + reg = MUSYCC_CCD_HDLC_FCS32; + break; + } + + return reg; +} + +#ifdef SBE_WAN256T3_ENABLE +STATIC void __init +musycc_init_port (mpi_t * pi) +{ + pci_write_32 ((u_int32_t *) &pi->reg->gbp, OS_vtophys (pi->regram)); + + pi->regram->grcd = + __constant_cpu_to_le32 (MUSYCC_GRCD_RX_ENABLE | + MUSYCC_GRCD_TX_ENABLE | + MUSYCC_GRCD_SF_ALIGN | + MUSYCC_GRCD_SUBCHAN_DISABLE | + MUSYCC_GRCD_OOFMP_DISABLE | + MUSYCC_GRCD_COFAIRQ_DISABLE | + MUSYCC_GRCD_MC_ENABLE | + (MUSYCC_GRCD_POLLTH_32 << MUSYCC_GRCD_POLLTH_SHIFT)); + + pi->regram->pcd = + __constant_cpu_to_le32 (MUSYCC_PCD_E1X4_MODE | + MUSYCC_PCD_TXDATA_RISING | + MUSYCC_PCD_TX_DRIVEN); + + /* Message length descriptor */ + pi->regram->mld = __constant_cpu_to_le32 (max_mru | (max_mru << 16)); + FLUSH_MEM_WRITE (); + + musycc_serv_req (pi, SR_GROUP_INIT | SR_RX_DIRECTION); + musycc_serv_req (pi, SR_GROUP_INIT | SR_TX_DIRECTION); + + musycc_init_mdt (pi); + + musycc_update_timeslots (pi); +} +#endif + + +status_t __init +musycc_init (ci_t * ci) +{ + char *regaddr; /* temp for address boundary calculations */ + int i, gchan; + + OS_sem_init (&ci->sem_wdbusy, SEM_AVAILABLE); /* watchdog exclusion */ + + /* + * Per MUSYCC manual, Section 6.3.4 - "The host must allocate a dword + * aligned memory segment for interrupt queue pointers." + */ + +#define INT_QUEUE_BOUNDARY 4 + + regaddr = OS_kmalloc ((INT_QUEUE_SIZE + 1) * sizeof (u_int32_t)); + if (regaddr == 0) + return ENOMEM; + ci->iqd_p_saved = regaddr; /* save orig value for free's usage */ + ci->iqd_p = (u_int32_t *) ((unsigned long) (regaddr + INT_QUEUE_BOUNDARY - 1) & + (~(INT_QUEUE_BOUNDARY - 1))); /* this calculates + * closest boundary */ + + for (i = 0; i < INT_QUEUE_SIZE; i++) + { + ci->iqd_p[i] = __constant_cpu_to_le32 (INT_EMPTY_ENTRY); + } + + for (i = 0; i < ci->max_port; i++) + { + mpi_t *pi = &ci->port[i]; + + /* + * Per MUSYCC manual, Section 6.3.2 - "The host must allocate a 2KB + * bound memory segment for Channel Group 0." + */ + +#define GROUP_BOUNDARY 0x800 + + regaddr = OS_kmalloc (sizeof (struct musycc_groupr) + GROUP_BOUNDARY); + if (regaddr == 0) + { + for (gchan = 0; gchan < i; gchan++) + { + pi = &ci->port[gchan]; + OS_kfree (pi->reg); + pi->reg = 0; + } + return ENOMEM; + } + pi->regram_saved = regaddr; /* save orig value for free's usage */ + pi->regram = (struct musycc_groupr *) ((unsigned long) (regaddr + GROUP_BOUNDARY - 1) & + (~(GROUP_BOUNDARY - 1))); /* this calculates + * closest boundary */ + } + + /* any board centric MUSYCC commands will use group ZERO as its "home" */ + ci->regram = ci->port[0].regram; + musycc_serv_req (&ci->port[0], SR_CHIP_RESET); + + pci_write_32 ((u_int32_t *) &ci->reg->gbp, OS_vtophys (ci->regram)); + pci_flush_write (ci); +#ifdef CONFIG_SBE_PMCC4_NCOMM + ci->regram->__glcd = __constant_cpu_to_le32 (GCD_MAGIC); +#else + /* standard driver POLLS for INTB via CPLD register */ + ci->regram->__glcd = __constant_cpu_to_le32 (GCD_MAGIC | MUSYCC_GCD_INTB_DISABLE); +#endif + + ci->regram->__iqp = cpu_to_le32 (OS_vtophys (&ci->iqd_p[0])); + ci->regram->__iql = __constant_cpu_to_le32 (INT_QUEUE_SIZE - 1); + pci_write_32 ((u_int32_t *) &ci->reg->dacbp, 0); + FLUSH_MEM_WRITE (); + + ci->state = C_RUNNING; /* mark as full interrupt processing + * available */ + + musycc_serv_req (&ci->port[0], SR_GLOBAL_INIT); /* FIRST INTERRUPT ! */ + + /* sanity check settable parameters */ + + if (max_mru > 0xffe) + { + printk (KERN_WARNING "%s: Maximum allowed MRU exceeded, resetting %d to %d.\n", + THIS_MODULE->name, max_mru, 0xffe); + max_mru = 0xffe; + } + if (max_mtu > 0xffe) + { + printk (KERN_WARNING "%s: Maximum allowed MTU exceeded, resetting %d to %d.\n", + THIS_MODULE->name, max_mtu, 0xffe); + max_mtu = 0xffe; + } +#ifdef SBE_WAN256T3_ENABLE + for (i = 0; i < MUSYCC_NPORTS; i++) + musycc_init_port (&ci->port[i]); +#endif + + return SBE_DRVR_SUCCESS; /* no error */ +} + + +void +musycc_bh_tx_eom (mpi_t * pi, int gchan) +{ + mch_t *ch; + struct mdesc *md; + +#if 0 +#ifndef SBE_ISR_INLINE + unsigned long flags; + +#endif +#endif + volatile u_int32_t status; + + ch = pi->chan[gchan]; + if (ch == 0 || ch->state != UP) + { + if (log_level >= LOG_ERROR) + printk ("%s: intr: xmit EOM on uninitialized channel %d\n", pi->up->devname, gchan); + } + if (ch == 0 || ch->mdt == 0) + return; /* note: mdt==0 implies a malloc() + * failure w/in chan_up() routine */ + +#if 0 +#ifdef SBE_ISR_INLINE + spin_lock_irq (&ch->ch_txlock); +#else + spin_lock_irqsave (&ch->ch_txlock, flags); +#endif +#endif + do + { + FLUSH_MEM_READ (); + md = ch->txd_irq_srv; + status = le32_to_cpu (md->status); + + /* + * Note: Per MUSYCC Ref 6.4.9, the host does not poll a host-owned + * Transmit Buffer Descriptor during Transparent Mode. + */ + if (status & MUSYCC_TX_OWNED) + { + int readCount, loopCount; + + /***********************************************************/ + /* HW Bug Fix */ + /* ---------- */ + /* Under certain PCI Bus loading conditions, the data */ + /* associated with an update of Shared Memory is delayed */ + /* relative to its PCI Interrupt. This is caught when */ + /* the host determines it does not yet OWN the descriptor. */ + /***********************************************************/ + + readCount = 0; + while (status & MUSYCC_TX_OWNED) + { + for (loopCount = 0; loopCount < 0x30; loopCount++) + OS_uwait_dummy (); /* use call to avoid optimization + * removal of dummy delay */ + FLUSH_MEM_READ (); + status = le32_to_cpu (md->status); + if (readCount++ > 40) + break; /* don't wait any longer */ + } + if (status & MUSYCC_TX_OWNED) + { + if (log_level >= LOG_MONITOR) + { + printk ("%s: Port %d Chan %2d - unexpected TX msg ownership intr (md %p sts %x)\n", + pi->up->devname, pi->portnum, ch->channum, md, status); + printk ("++ User 0x%p IRQ_SRV 0x%p USR_ADD 0x%p QStopped %x, start_tx %x tx_full %d txd_free %d mode %x\n", + ch->user, ch->txd_irq_srv, ch->txd_usr_add, + sd_queue_stopped (ch->user), + ch->ch_start_tx, ch->tx_full, ch->txd_free, ch->p.chan_mode); + musycc_dump_txbuffer_ring (ch, 0); + } + break; /* Not our mdesc, done */ + } else + { + if (log_level >= LOG_MONITOR) + printk ("%s: Port %d Chan %2d - recovered TX msg ownership [%d] (md %p sts %x)\n", + pi->up->devname, pi->portnum, ch->channum, readCount, md, status); + } + } + ch->txd_irq_srv = md->snext; + + md->data = 0; + if (md->mem_token != 0) + { + /* upcount channel */ + atomic_sub (OS_mem_token_tlen (md->mem_token), &ch->tx_pending); + /* upcount card */ + atomic_sub (OS_mem_token_tlen (md->mem_token), &pi->up->tx_pending); +#ifdef SBE_WAN256T3_ENABLE + if (!atomic_read (&pi->up->tx_pending)) + wan256t3_led (pi->up, LED_TX, 0); +#endif + +#ifdef CONFIG_SBE_WAN256T3_NCOMM + /* callback that our packet was sent */ + { + int hdlcnum = (pi->portnum * 32 + gchan); + + if (hdlcnum >= 228) + { + if (nciProcess_TX_complete) + (*nciProcess_TX_complete) (hdlcnum, + getuserbychan (gchan)); + } + } +#endif /*** CONFIG_SBE_WAN256T3_NCOMM ***/ + + OS_mem_token_free_irq (md->mem_token); + md->mem_token = 0; + } + md->status = 0; +#ifdef RLD_TXFULL_DEBUG + if (log_level >= LOG_MONITOR2) + printk ("~~ tx_eom: tx_full %x txd_free %d -> %d\n", ch->tx_full, ch->txd_free, ch->txd_free + 1); +#endif + ++ch->txd_free; + FLUSH_MEM_WRITE (); + + if ((ch->p.chan_mode != CFG_CH_PROTO_TRANS) && (status & EOBIRQ_ENABLE)) + { + if (log_level >= LOG_MONITOR) + printk ("%s: Mode (%x) incorrect EOB status (%x)\n", + pi->up->devname, ch->p.chan_mode, status); + if ((status & EOMIRQ_ENABLE) == 0) + break; + } + } + while ((ch->p.chan_mode != CFG_CH_PROTO_TRANS) && ((status & EOMIRQ_ENABLE) == 0)); + /* + * NOTE: (The above 'while' is coupled w/ previous 'do', way above.) Each + * Transparent data buffer has the EOB bit, and NOT the EOM bit, set and + * will furthermore have a separate IQD associated with each messages + * buffer. + */ + + FLUSH_MEM_READ (); + /* + * Smooth flow control hysterisis by maintaining task stoppage until half + * the available write buffers are available. + */ + if (ch->tx_full && (ch->txd_free >= (ch->txd_num / 2))) + { + /* + * Then, only releave task stoppage if we actually have enough + * buffers to service the last requested packet. It may require MORE + * than half the available! + */ + if (ch->txd_free >= ch->txd_required) + { + +#ifdef RLD_TXFULL_DEBUG + if (log_level >= LOG_MONITOR2) + printk ("tx_eom[%d]: enable xmit tx_full no more, txd_free %d txd_num/2 %d\n", + ch->channum, + ch->txd_free, ch->txd_num / 2); +#endif + ch->tx_full = 0; + ch->txd_required = 0; + sd_enable_xmit (ch->user); /* re-enable to catch flow controlled + * channel */ + } + } +#ifdef RLD_TXFULL_DEBUG + else if (ch->tx_full) + { + if (log_level >= LOG_MONITOR2) + printk ("tx_eom[%d]: bypass TX enable though room available? (txd_free %d txd_num/2 %d)\n", + ch->channum, + ch->txd_free, ch->txd_num / 2); + } +#endif + + FLUSH_MEM_WRITE (); +#if 0 +#ifdef SBE_ISR_INLINE + spin_unlock_irq (&ch->ch_txlock); +#else + spin_unlock_irqrestore (&ch->ch_txlock, flags); +#endif +#endif +} + + +STATIC void +musycc_bh_rx_eom (mpi_t * pi, int gchan) +{ + mch_t *ch; + void *m, *m2; + struct mdesc *md; + volatile u_int32_t status; + u_int32_t error; + + ch = pi->chan[gchan]; + if (ch == 0 || ch->state != UP) + { + if (log_level > LOG_ERROR) + printk ("%s: intr: receive EOM on uninitialized channel %d\n", pi->up->devname, gchan); + return; + } + if (ch->mdr == 0) + return; /* can this happen ? */ + + for (;;) + { + FLUSH_MEM_READ (); + md = &ch->mdr[ch->rxix_irq_srv]; + status = le32_to_cpu (md->status); + if (!(status & HOST_RX_OWNED)) + break; /* Not our mdesc, done */ + m = md->mem_token; + error = (status >> 16) & 0xf; + if (error == 0) + { +#ifdef CONFIG_SBE_WAN256T3_NCOMM + int hdlcnum = (pi->portnum * 32 + gchan); + + /* + * if the packet number belongs to NCOMM, then send it to the TMS + * driver + */ + if (hdlcnum >= 228) + { + if (nciProcess_RX_packet) + (*nciProcess_RX_packet) (hdlcnum, status & 0x3fff, m, ch->user); + } else +#endif /*** CONFIG_SBE_WAN256T3_NCOMM ***/ + + { + if ((m2 = OS_mem_token_alloc (max_mru))) + { + /* substitute the mbuf+cluster */ + md->mem_token = m2; + md->data = cpu_to_le32 (OS_vtophys (OS_mem_token_data (m2))); + + /* pass the received mbuf upward */ + sd_recv_consume (m, status & LENGTH_MASK, ch->user); + ch->s.rx_packets++; + ch->s.rx_bytes += status & LENGTH_MASK; + } else + { + ch->s.rx_dropped++; + } + } + } else if (error == ERR_FCS) + { + ch->s.rx_crc_errors++; + } else if (error == ERR_ALIGN) + { + ch->s.rx_missed_errors++; + } else if (error == ERR_ABT) + { + ch->s.rx_missed_errors++; + } else if (error == ERR_LNG) + { + ch->s.rx_length_errors++; + } else if (error == ERR_SHT) + { + ch->s.rx_length_errors++; + } + FLUSH_MEM_WRITE (); + status = max_mru; + if (ch->p.chan_mode == CFG_CH_PROTO_TRANS) + status |= EOBIRQ_ENABLE; + md->status = cpu_to_le32 (status); + + /* Check next mdesc in the ring */ + if (++ch->rxix_irq_srv >= ch->rxd_num) + ch->rxix_irq_srv = 0; + FLUSH_MEM_WRITE (); + } +} + + +irqreturn_t +musycc_intr_th_handler (void *devp) +{ + ci_t *ci = (ci_t *) devp; + volatile u_int32_t status, currInt = 0; + u_int32_t nextInt, intCnt; + + /* + * Hardware not available, potential interrupt hang. But since interrupt + * might be shared, just return. + */ + if (ci->state == C_INIT) + { + return IRQ_NONE; + } + /* + * Marked as hardware available. Don't service interrupts, just clear the + * event. + */ + + if (ci->state == C_IDLE) + { + status = pci_read_32 ((u_int32_t *) &ci->reg->isd); + + /* clear the interrupt but process nothing else */ + pci_write_32 ((u_int32_t *) &ci->reg->isd, status); + return IRQ_HANDLED; + } + FLUSH_PCI_READ (); + FLUSH_MEM_READ (); + + status = pci_read_32 ((u_int32_t *) &ci->reg->isd); + nextInt = INTRPTS_NEXTINT (status); + intCnt = INTRPTS_INTCNT (status); + ci->intlog.drvr_intr_thcount++; + + /*********************************************************/ + /* HW Bug Fix */ + /* ---------- */ + /* Under certain PCI Bus loading conditions, the */ + /* MUSYCC looses the data associated with an update */ + /* of its ISD and erroneously returns the immediately */ + /* preceding 'nextInt' value. However, the 'intCnt' */ + /* value appears to be correct. By not starting service */ + /* where the 'missing' 'nextInt' SHOULD point causes */ + /* the IQD not to be serviced - the 'not serviced' */ + /* entries then remain and continue to increase as more */ + /* incorrect ISD's are encountered. */ + /*********************************************************/ + + if (nextInt != INTRPTS_NEXTINT (ci->intlog.this_status_new)) + { + if (log_level >= LOG_MONITOR) + { + printk ("%s: note - updated ISD from %08x to %08x\n", + ci->devname, status, + (status & (~INTRPTS_NEXTINT_M)) | ci->intlog.this_status_new); + } + /* + * Replace bogus status with software corrected value. + * + * It's not known whether, during this problem occurrence, if the + * INTFULL bit is correctly reported or not. + */ + status = (status & (~INTRPTS_NEXTINT_M)) | (ci->intlog.this_status_new); + nextInt = INTRPTS_NEXTINT (status); + } + /**********************************************/ + /* Cn847x Bug Fix */ + /* -------------- */ + /* Fix for inability to write back same index */ + /* as read for a full interrupt queue. */ + /**********************************************/ + + if (intCnt == INT_QUEUE_SIZE) + { + currInt = ((intCnt - 1) + nextInt) & (INT_QUEUE_SIZE - 1); + } else + /************************************************/ + /* Interrupt Write Location Issues */ + /* ------------------------------- */ + /* When the interrupt status descriptor is */ + /* written, the interrupt line is de-asserted */ + /* by the Cn847x. In the case of MIPS */ + /* microprocessors, this must occur at the */ + /* beginning of the interrupt handler so that */ + /* the interrupt handle is not re-entered due */ + /* to interrupt dis-assertion latency. */ + /* In the case of all other processors, this */ + /* action should occur at the end of the */ + /* interrupt handler to avoid overwriting the */ + /* interrupt queue. */ + /************************************************/ + + if (intCnt) + { + currInt = (intCnt + nextInt) & (INT_QUEUE_SIZE - 1); + } else + { + /* + * NOTE: Servicing an interrupt whose ISD contains a count of ZERO + * can be indicative of a Shared Interrupt chain. Our driver can be + * called from the system's interrupt handler as a matter of the OS + * walking the chain. As the chain is walked, the interrupt will + * eventually be serviced by the correct driver/handler. + */ +#if 0 + /* chained interrupt = not ours */ + printk (">> %s: intCnt NULL, sts %x, possibly a chained interrupt!\n", + ci->devname, status); +#endif + return IRQ_NONE; + } + + ci->iqp_tailx = currInt; + + currInt <<= INTRPTS_NEXTINT_S; + ci->intlog.last_status_new = ci->intlog.this_status_new; + ci->intlog.this_status_new = currInt; + + if ((log_level >= LOG_WARN) && (status & INTRPTS_INTFULL_M)) + { + printk ("%s: Interrupt queue full condition occurred\n", ci->devname); + } + if (log_level >= LOG_DEBUG) + printk ("%s: interrupts pending, isd @ 0x%p: %x curr %d cnt %d NEXT %d\n", + ci->devname, &ci->reg->isd, + status, nextInt, intCnt, (intCnt + nextInt) & (INT_QUEUE_SIZE - 1)); + + FLUSH_MEM_WRITE (); +#if defined(SBE_ISR_TASKLET) + pci_write_32 ((u_int32_t *) &ci->reg->isd, currInt); + atomic_inc (&ci->bh_pending); + tasklet_schedule (&ci->ci_musycc_isr_tasklet); +#elif defined(SBE_ISR_IMMEDIATE) + pci_write_32 ((u_int32_t *) &ci->reg->isd, currInt); + atomic_inc (&ci->bh_pending); + queue_task (&ci->ci_musycc_isr_tq, &tq_immediate); + mark_bh (IMMEDIATE_BH); +#elif defined(SBE_ISR_INLINE) + (void) musycc_intr_bh_tasklet (ci); + pci_write_32 ((u_int32_t *) &ci->reg->isd, currInt); +#endif + return IRQ_HANDLED; +} + + +#if defined(SBE_ISR_IMMEDIATE) +unsigned long +#else +void +#endif +musycc_intr_bh_tasklet (ci_t * ci) +{ + mpi_t *pi; + mch_t *ch; + unsigned int intCnt; + volatile u_int32_t currInt = 0; + volatile unsigned int headx, tailx; + int readCount, loopCount; + int group, gchan, event, err, tx; + u_int32_t badInt = INT_EMPTY_ENTRY; + u_int32_t badInt2 = INT_EMPTY_ENTRY2; + + /* + * Hardware not available, potential interrupt hang. But since interrupt + * might be shared, just return. + */ + if ((drvr_state != SBE_DRVR_AVAILABLE) || (ci->state == C_INIT)) + { +#if defined(SBE_ISR_IMMEDIATE) + return 0L; +#else + return; +#endif + } +#if defined(SBE_ISR_TASKLET) || defined(SBE_ISR_IMMEDIATE) + if (drvr_state != SBE_DRVR_AVAILABLE) + { +#if defined(SBE_ISR_TASKLET) + return; +#elif defined(SBE_ISR_IMMEDIATE) + return 0L; +#endif + } +#elif defined(SBE_ISR_INLINE) + /* no semaphore taken, no double checks */ +#endif + + ci->intlog.drvr_intr_bhcount++; + FLUSH_MEM_READ (); + { + unsigned int bh = atomic_read (&ci->bh_pending); + + max_bh = max (bh, max_bh); + } + atomic_set (&ci->bh_pending, 0);/* if here, no longer pending */ + while ((headx = ci->iqp_headx) != (tailx = ci->iqp_tailx)) + { + intCnt = (tailx >= headx) ? (tailx - headx) : (tailx - headx + INT_QUEUE_SIZE); + currInt = le32_to_cpu (ci->iqd_p[headx]); + + max_intcnt = max (intCnt, max_intcnt); /* RLD DEBUG */ + + /**************************************************/ + /* HW Bug Fix */ + /* ---------- */ + /* The following code checks for the condition */ + /* of interrupt assertion before interrupt */ + /* queue update. This is a problem on several */ + /* PCI-Local bridge chips found on some products. */ + /**************************************************/ + + readCount = 0; + if ((currInt == badInt) || (currInt == badInt2)) + ci->intlog.drvr_int_failure++; + + while ((currInt == badInt) || (currInt == badInt2)) + { + for (loopCount = 0; loopCount < 0x30; loopCount++) + OS_uwait_dummy (); /* use call to avoid optimization removal + * of dummy delay */ + FLUSH_MEM_READ (); + currInt = le32_to_cpu (ci->iqd_p[headx]); + if (readCount++ > 20) + break; + } + + if ((currInt == badInt) || (currInt == badInt2)) /* catch failure of Bug + * Fix checking */ + { + if (log_level >= LOG_WARN) + printk ("%s: Illegal Interrupt Detected @ 0x%p, mod %d.)\n", + ci->devname, &ci->iqd_p[headx], headx); + + /* + * If the descriptor has not recovered, then leaving the EMPTY + * entry set will not signal to the MUSYCC that this descriptor + * has been serviced. The Interrupt Queue can then start loosing + * available descriptors and MUSYCC eventually encounters and + * reports the INTFULL condition. Per manual, changing any bit + * marks descriptor as available, thus the use of different + * EMPTY_ENTRY values. + */ + + if (currInt == badInt) + { + ci->iqd_p[headx] = __constant_cpu_to_le32 (INT_EMPTY_ENTRY2); + } else + { + ci->iqd_p[headx] = __constant_cpu_to_le32 (INT_EMPTY_ENTRY); + } + ci->iqp_headx = (headx + 1) & (INT_QUEUE_SIZE - 1); /* insure wrapness */ + FLUSH_MEM_WRITE (); + FLUSH_MEM_READ (); + continue; + } + group = INTRPT_GRP (currInt); + gchan = INTRPT_CH (currInt); + event = INTRPT_EVENT (currInt); + err = INTRPT_ERROR (currInt); + tx = currInt & INTRPT_DIR_M; + + ci->iqd_p[headx] = __constant_cpu_to_le32 (INT_EMPTY_ENTRY); + FLUSH_MEM_WRITE (); + + if (log_level >= LOG_DEBUG) + { + if (err != 0) + printk (" %08x -> err: %2d,", currInt, err); + + printk ("+ interrupt event: %d, grp: %d, chan: %2d, side: %cX\n", + event, group, gchan, tx ? 'T' : 'R'); + } + pi = &ci->port[group]; /* notice that here we assume 1-1 group - + * port mapping */ + ch = pi->chan[gchan]; + switch (event) + { + case EVE_SACK: /* Service Request Acknowledge */ + if (log_level >= LOG_DEBUG) + { + volatile u_int32_t r; + + r = pci_read_32 ((u_int32_t *) &pi->reg->srd); + printk ("- SACK cmd: %08x (hdw= %08x)\n", pi->sr_last, r); + } + SD_SEM_GIVE (&pi->sr_sem_wait); /* wake up waiting process */ + break; + case EVE_CHABT: /* Change To Abort Code (0x7e -> 0xff) */ + case EVE_CHIC: /* Change To Idle Code (0xff -> 0x7e) */ + break; + case EVE_EOM: /* End Of Message */ + case EVE_EOB: /* End Of Buffer (Transparent mode) */ + if (tx) + { + musycc_bh_tx_eom (pi, gchan); + } else + { + musycc_bh_rx_eom (pi, gchan); + } +#if 0 + break; +#else + /* + * MUSYCC Interrupt Descriptor section states that EOB and EOM + * can be combined with the NONE error (as well as others). So + * drop thru to catch this... + */ +#endif + case EVE_NONE: + if (err == ERR_SHT) + { + ch->s.rx_length_errors++; + } + break; + default: + if (log_level >= LOG_WARN) + printk ("%s: unexpected interrupt event: %d, iqd[%d]: %08x, port: %d\n", ci->devname, + event, headx, currInt, group); + break; + } /* switch on event */ + + + /* + * Per MUSYCC Manual, Section 6.4.8.3 [Transmit Errors], TX errors + * are service-affecting and require action to resume normal + * bit-level processing. + */ + + switch (err) + { + case ERR_ONR: + /* + * Per MUSYCC manual, Section 6.4.8.3 [Transmit Errors], this + * error requires Transmit channel reactivation. + * + * Per MUSYCC manual, Section 6.4.8.4 [Receive Errors], this error + * requires Receive channel reactivation. + */ + if (tx) + { + + /* + * TX ONR Error only occurs when channel is configured for + * Transparent Mode. However, this code will catch and + * re-activate on ANY TX ONR error. + */ + + /* + * Set flag to re-enable on any next transmit attempt. + */ + ch->ch_start_tx = CH_START_TX_ONR; + + { +#ifdef RLD_TRANS_DEBUG + if (1 || log_level >= LOG_MONITOR) +#else + if (log_level >= LOG_MONITOR) +#endif + { + printk ("%s: TX buffer underflow [ONR] on channel %d, mode %x QStopped %x free %d\n", + ci->devname, ch->channum, ch->p.chan_mode, sd_queue_stopped (ch->user), ch->txd_free); +#ifdef RLD_DEBUG + if (ch->p.chan_mode == 2) /* problem = ONR on HDLC + * mode */ + { + printk ("++ Failed Last %x Next %x QStopped %x, start_tx %x tx_full %d txd_free %d mode %x\n", + (u_int32_t) ch->txd_irq_srv, (u_int32_t) ch->txd_usr_add, + sd_queue_stopped (ch->user), + ch->ch_start_tx, ch->tx_full, ch->txd_free, ch->p.chan_mode); + musycc_dump_txbuffer_ring (ch, 0); + } +#endif + } + } + } else /* RX buffer overrun */ + { + /* + * Per MUSYCC manual, Section 6.4.8.4 [Receive Errors], + * channel recovery for this RX ONR error IS required. It is + * also suggested to increase the number of receive buffers + * for this channel. Receive channel reactivation IS + * required, and data has been lost. + */ + ch->s.rx_over_errors++; + ch->ch_start_rx = CH_START_RX_ONR; + + if (log_level >= LOG_WARN) + { + printk ("%s: RX buffer overflow [ONR] on channel %d, mode %x\n", + ci->devname, ch->channum, ch->p.chan_mode); + //musycc_dump_rxbuffer_ring (ch, 0); /* RLD DEBUG */ + } + } + musycc_chan_restart (ch); + break; + case ERR_BUF: + if (tx) + { + ch->s.tx_fifo_errors++; + ch->ch_start_tx = CH_START_TX_BUF; + /* + * Per MUSYCC manual, Section 6.4.8.3 [Transmit Errors], + * this BUFF error requires Transmit channel reactivation. + */ + if (log_level >= LOG_MONITOR) + printk ("%s: TX buffer underrun [BUFF] on channel %d, mode %x\n", + ci->devname, ch->channum, ch->p.chan_mode); + } else /* RX buffer overrun */ + { + ch->s.rx_over_errors++; + /* + * Per MUSYCC manual, Section 6.4.8.4 [Receive Errors], HDLC + * mode requires NO recovery for this RX BUFF error is + * required. It is suggested to increase the FIFO buffer + * space for this channel. Receive channel reactivation is + * not required, but data has been lost. + */ + if (log_level >= LOG_WARN) + printk ("%s: RX buffer overrun [BUFF] on channel %d, mode %x\n", + ci->devname, ch->channum, ch->p.chan_mode); + /* + * Per MUSYCC manual, Section 6.4.9.4 [Receive Errors], + * Transparent mode DOES require recovery for the RX BUFF + * error. It is suggested to increase the FIFO buffer space + * for this channel. Receive channel reactivation IS + * required and data has been lost. + */ + if (ch->p.chan_mode == CFG_CH_PROTO_TRANS) + ch->ch_start_rx = CH_START_RX_BUF; + } + + if (tx || (ch->p.chan_mode == CFG_CH_PROTO_TRANS)) + musycc_chan_restart (ch); + break; + default: + break; + } /* switch on err */ + + /* Check for interrupt lost condition */ + if ((currInt & INTRPT_ILOST_M) && (log_level >= LOG_ERROR)) + { + printk ("%s: Interrupt queue overflow - ILOST asserted\n", + ci->devname); + } + ci->iqp_headx = (headx + 1) & (INT_QUEUE_SIZE - 1); /* insure wrapness */ + FLUSH_MEM_WRITE (); + FLUSH_MEM_READ (); + } /* while */ + if ((log_level >= LOG_MONITOR2) && (ci->iqp_headx != ci->iqp_tailx)) + { + int bh; + + bh = atomic_read (&CI->bh_pending); + printk ("_bh_: late arrivals, head %d != tail %d, pending %d\n", + ci->iqp_headx, ci->iqp_tailx, bh); + } +#if defined(SBE_ISR_IMMEDIATE) + return 0L; +#endif + /* else, nothing returned */ +} + +#if 0 +int __init +musycc_new_chan (ci_t * ci, int channum, void *user) +{ + mch_t *ch; + + ch = ci->port[channum / MUSYCC_NCHANS].chan[channum % MUSYCC_NCHANS]; + + if (ch->state != UNASSIGNED) + return EEXIST; + /* NOTE: mch_t already cleared during OS_kmalloc() */ + ch->state = DOWN; + ch->user = user; +#if 0 + ch->status = 0; + ch->p.status = 0; + ch->p.intr_mask = 0; +#endif + ch->p.chan_mode = CFG_CH_PROTO_HDLC_FCS16; + ch->p.idlecode = CFG_CH_FLAG_7E; + ch->p.pad_fill_count = 2; + spin_lock_init (&ch->ch_rxlock); + spin_lock_init (&ch->ch_txlock); + + return 0; +} +#endif + + +#ifdef SBE_PMCC4_ENABLE +status_t +musycc_chan_down (ci_t * dummy, int channum) +{ + mpi_t *pi; + mch_t *ch; + int i, gchan; + + if (!(ch = sd_find_chan (dummy, channum))) + return EINVAL; + pi = ch->up; + gchan = ch->gchan; + + /* Deactivate the channel */ + musycc_serv_req (pi, SR_CHANNEL_DEACTIVATE | SR_RX_DIRECTION | gchan); + ch->ch_start_rx = 0; + musycc_serv_req (pi, SR_CHANNEL_DEACTIVATE | SR_TX_DIRECTION | gchan); + ch->ch_start_tx = 0; + + if (ch->state == DOWN) + return 0; + ch->state = DOWN; + + pi->regram->thp[gchan] = 0; + pi->regram->tmp[gchan] = 0; + pi->regram->rhp[gchan] = 0; + pi->regram->rmp[gchan] = 0; + FLUSH_MEM_WRITE (); + for (i = 0; i < ch->txd_num; i++) + { + if (ch->mdt[i].mem_token != 0) + OS_mem_token_free (ch->mdt[i].mem_token); + } + + for (i = 0; i < ch->rxd_num; i++) + { + if (ch->mdr[i].mem_token != 0) + OS_mem_token_free (ch->mdr[i].mem_token); + } + + OS_kfree (ch->mdr); + ch->mdr = 0; + ch->rxd_num = 0; + OS_kfree (ch->mdt); + ch->mdt = 0; + ch->txd_num = 0; + + musycc_update_timeslots (pi); + c4_fifo_free (pi, ch->gchan); + + pi->openchans--; + return 0; +} +#endif + + +int +musycc_del_chan (ci_t * ci, int channum) +{ + mch_t *ch; + + if ((channum < 0) || (channum >= (MUSYCC_NPORTS * MUSYCC_NCHANS))) /* sanity chk param */ + return ECHRNG; + if (!(ch = sd_find_chan (ci, channum))) + return ENOENT; + if (ch->state == UP) + musycc_chan_down (ci, channum); + ch->state = UNASSIGNED; + return 0; +} + + +int +musycc_del_chan_stats (ci_t * ci, int channum) +{ + mch_t *ch; + + if (channum < 0 || channum >= (MUSYCC_NPORTS * MUSYCC_NCHANS)) /* sanity chk param */ + return ECHRNG; + if (!(ch = sd_find_chan (ci, channum))) + return ENOENT; + + memset (&ch->s, 0, sizeof (struct sbecom_chan_stats)); + return 0; +} + + +int +musycc_start_xmit (ci_t * ci, int channum, void *mem_token) +{ + mch_t *ch; + struct mdesc *md; + void *m2; +#if 0 + unsigned long flags; +#endif + int txd_need_cnt; + u_int32_t len; + + if (!(ch = sd_find_chan (ci, channum))) + return ENOENT; + + if (ci->state != C_RUNNING) /* full interrupt processing available */ + return EINVAL; + if (ch->state != UP) + return EINVAL; + + if (!(ch->status & TX_ENABLED)) + return EROFS; /* how else to flag unwritable state ? */ + +#ifdef RLD_TRANS_DEBUGx + if (1 || log_level >= LOG_MONITOR2) +#else + if (log_level >= LOG_MONITOR2) +#endif + { + printk ("++ start_xmt[%d]: state %x start %x full %d free %d required %d stopped %x\n", + channum, ch->state, ch->ch_start_tx, ch->tx_full, + ch->txd_free, ch->txd_required, sd_queue_stopped (ch->user)); + } + /***********************************************/ + /** Determine total amount of data to be sent **/ + /***********************************************/ + m2 = mem_token; + txd_need_cnt = 0; + for (len = OS_mem_token_tlen (m2); len > 0; + m2 = (void *) OS_mem_token_next (m2)) + { + if (!OS_mem_token_len (m2)) + continue; + txd_need_cnt++; + len -= OS_mem_token_len (m2); + } + + if (txd_need_cnt == 0) + { + if (log_level >= LOG_MONITOR2) + printk ("%s channel %d: no TX data in User buffer\n", ci->devname, channum); + OS_mem_token_free (mem_token); + return 0; /* no data to send */ + } + /*************************************************/ + /** Are there sufficient descriptors available? **/ + /*************************************************/ + if (txd_need_cnt > ch->txd_num) /* never enough descriptors for this + * large a buffer */ + { + if (log_level >= LOG_DEBUG) + { + printk ("start_xmit: discarding buffer, insufficient descriptor cnt %d, need %d.\n", + ch->txd_num, txd_need_cnt + 1); + } + ch->s.tx_dropped++; + OS_mem_token_free (mem_token); + return 0; + } +#if 0 + spin_lock_irqsave (&ch->ch_txlock, flags); +#endif + /************************************************************/ + /** flow control the line if not enough descriptors remain **/ + /************************************************************/ + if (txd_need_cnt > ch->txd_free) + { + if (log_level >= LOG_MONITOR2) + { + printk ("start_xmit[%d]: EBUSY - need more descriptors, have %d of %d need %d\n", + channum, ch->txd_free, ch->txd_num, txd_need_cnt); + } + ch->tx_full = 1; + ch->txd_required = txd_need_cnt; + sd_disable_xmit (ch->user); +#if 0 + spin_unlock_irqrestore (&ch->ch_txlock, flags); +#endif + return EBUSY; /* tell user to try again later */ + } + /**************************************************/ + /** Put the user data into MUSYCC data buffer(s) **/ + /**************************************************/ + m2 = mem_token; + md = ch->txd_usr_add; /* get current available descriptor */ + + for (len = OS_mem_token_tlen (m2); len > 0; m2 = OS_mem_token_next (m2)) + { + int u = OS_mem_token_len (m2); + + if (!u) + continue; + len -= u; + + /* + * Enable following chunks, yet wait to enable the FIRST chunk until + * after ALL subsequent chunks are setup. + */ + if (md != ch->txd_usr_add) /* not first chunk */ + u |= MUSYCC_TX_OWNED; /* transfer ownership from HOST to MUSYCC */ + + if (len) /* not last chunk */ + u |= EOBIRQ_ENABLE; + else if (ch->p.chan_mode == CFG_CH_PROTO_TRANS) + { + /* + * Per MUSYCC Ref 6.4.9 for Transparent Mode, the host must + * always clear EOMIRQ_ENABLE in every Transmit Buffer Descriptor + * (IE. don't set herein). + */ + u |= EOBIRQ_ENABLE; + } else + u |= EOMIRQ_ENABLE; /* EOM, last HDLC chunk */ + + + /* last chunk in hdlc mode */ + u |= (ch->p.idlecode << IDLE_CODE); + if (ch->p.pad_fill_count) + { +#if 0 + /* NOOP NOTE: u_int8_t cannot be > 0xFF */ + /* sanitize pad_fill_count for maximums allowed by hardware */ + if (ch->p.pad_fill_count > EXTRA_FLAGS_MASK) + ch->p.pad_fill_count = EXTRA_FLAGS_MASK; +#endif + u |= (PADFILL_ENABLE | (ch->p.pad_fill_count << EXTRA_FLAGS)); + } + md->mem_token = len ? 0 : mem_token; /* Fill in mds on last + * segment, others set ZERO + * so that entire token is + * removed ONLY when ALL + * segments have been + * transmitted. */ + + md->data = cpu_to_le32 (OS_vtophys (OS_mem_token_data (m2))); + FLUSH_MEM_WRITE (); + md->status = cpu_to_le32 (u); + --ch->txd_free; + md = md->snext; + } + FLUSH_MEM_WRITE (); + + + /* + * Now transfer ownership of first chunk from HOST to MUSYCC in order to + * fire-off this XMIT. + */ + ch->txd_usr_add->status |= __constant_cpu_to_le32 (MUSYCC_TX_OWNED); + FLUSH_MEM_WRITE (); + ch->txd_usr_add = md; + + len = OS_mem_token_tlen (mem_token); + atomic_add (len, &ch->tx_pending); + atomic_add (len, &ci->tx_pending); + ch->s.tx_packets++; + ch->s.tx_bytes += len; +#if 0 + spin_unlock_irqrestore (&ch->ch_txlock, flags); /* allow pending + * interrupt to sneak + * thru */ +#endif + + /* + * If an ONR was seen, then channel requires poking to restart + * transmission. + */ + if (ch->ch_start_tx) + { +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,41) + SD_SEM_TAKE (&ci->sem_wdbusy, "_wd_"); /* only 1 thru here, per + * board */ + if ((ch->ch_start_tx == CH_START_TX_ONR) && (ch->p.chan_mode == CFG_CH_PROTO_TRANS)) + { + /* ONR restart transmission from background loop */ + ci->wd_notify = WD_NOTIFY_ONR; /* enabled global watchdog + * scan-thru */ + } else + { + /* start first transmission from background loop */ + ci->wd_notify = WD_NOTIFY_1TX; /* enabled global watchdog + * scan-thru */ + } + musycc_chan_restart (ch); + SD_SEM_GIVE (&ci->sem_wdbusy); +#else + musycc_chan_restart (ch); +#endif + } +#ifdef SBE_WAN256T3_ENABLE + wan256t3_led (ci, LED_TX, LEDV_G); +#endif + return 0; +} + + +#if 0 +int +musycc_set_chan (ci_t * ci, int channum, struct sbecom_chan_param * p) +{ + mch_t *ch; + int rok = 0; + int n = 0; + + if (channum < 0 || channum >= (MUSYCC_NPORTS * MUSYCC_NCHANS)) /* sanity chk param */ + return ECHRNG; + if (!(ch = sd_find_chan (ci, channum))) + return ENOENT; + if (ch->channum != p->channum) + return EINVAL; + if (sd_line_is_ok (ch->user)) + { + rok = 1; + sd_line_is_down (ch->user); + } + if (ch->state == UP && /* bring down in current configuration */ + (ch->p.status != p->status || + ch->p.chan_mode != p->chan_mode || + ch->p.intr_mask != p->intr_mask || + ch->txd_free < ch->txd_num)) + { + if ((n = musycc_chan_down (ci, channum))) + return n; + if (ch->p.mode_56k != p->mode_56k) + { + ch->p = *p; /* copy in new parameters */ + musycc_update_timeslots (&ci->port[ch->channum / MUSYCC_NCHANS]); + } else + ch->p = *p; /* copy in new parameters */ + if ((n = musycc_chan_up (ci, channum))) + return n; + sd_enable_xmit (ch->user); /* re-enable to catch flow controlled + * channel */ + } else + { + if (ch->p.mode_56k != p->mode_56k) + { + ch->p = *p; /* copy in new parameters */ + musycc_update_timeslots (&ci->port[ch->channum / MUSYCC_NCHANS]); + } else + ch->p = *p; /* copy in new parameters */ + } + + if (rok) + sd_line_is_up (ch->user); + return 0; +} +#endif + + +int +musycc_get_chan (ci_t * ci, int channum, struct sbecom_chan_param * p) +{ + mch_t *ch; + +#if 0 + if (channum < 0 || channum >= (MUSYCC_NPORTS * MUSYCC_NCHANS)) /* sanity chk param */ + return ECHRNG; +#endif + if (!(ch = sd_find_chan (ci, channum))) + return ENOENT; + *p = ch->p; + return 0; +} + + +int +musycc_get_chan_stats (ci_t * ci, int channum, struct sbecom_chan_stats * p) +{ + mch_t *ch; + + if (channum < 0 || channum >= (MUSYCC_NPORTS * MUSYCC_NCHANS)) /* sanity chk param */ + return ECHRNG; + if (!(ch = sd_find_chan (ci, channum))) + return ENOENT; + *p = ch->s; + p->tx_pending = atomic_read (&ch->tx_pending); + return 0; +} + + + +#ifdef SBE_WAN256T3_ENABLE +int +musycc_chan_down (ci_t * ci, int channum) +{ + mch_t *ch; + mpi_t *pi; + int i, gchan; + + if (!(ch = sd_find_chan (ci, channum))) + return EINVAL; + pi = ch->up; + gchan = ch->gchan; + + /* Deactivate the channel */ + musycc_serv_req (pi, SR_CHANNEL_DEACTIVATE | SR_RX_DIRECTION | gchan); + ch->ch_start_rx = 0; + musycc_serv_req (pi, SR_CHANNEL_DEACTIVATE | SR_TX_DIRECTION | gchan); + ch->ch_start_tx = 0; + + if (ch->state == DOWN) + return 0; + ch->state = DOWN; + + pi->regram->thp[gchan] = 0; + pi->regram->tmp[gchan] = 0; + pi->regram->rhp[gchan] = 0; + pi->regram->rmp[gchan] = 0; + FLUSH_MEM_WRITE (); + for (i = 0; i < ch->txd_num; i++) + { + if (ch->mdt[i].mem_token != 0) + OS_mem_token_free (ch->mdt[i].mem_token); + } + + for (i = 0; i < ch->rxd_num; i++) + { + if (ch->mdr[i].mem_token != 0) + OS_mem_token_free (ch->mdr[i].mem_token); + } + + OS_kfree (ch->mdt); + ch->mdt = 0; + OS_kfree (ch->mdr); + ch->mdr = 0; + + return 0; +} +#endif + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/musycc.h b/drivers/staging/cxt1e1/musycc.h new file mode 100644 index 0000000..d2c91ef --- /dev/null +++ b/drivers/staging/cxt1e1/musycc.h @@ -0,0 +1,460 @@ +/* + * $Id: musycc.h,v 1.3 2005/09/28 00:10:08 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_MUSYCC_H_ +#define _INC_MUSYCC_H_ + +/*----------------------------------------------------------------------------- + * musycc.h - Multichannel Synchronous Communications Controller + * CN8778/8474A/8472A/8471A + * + * Copyright (C) 2002-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.3 $ + * Last changed on $Date: 2005/09/28 00:10:08 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: musycc.h,v $ + * Revision 1.3 2005/09/28 00:10:08 rickd + * Add GNU license info. Add PMCC4 PCI/DevIDs. Implement new + * musycc reg&bits namings. Use PORTMAP_0 GCD grouping. + * + * Revision 1.2 2005/04/28 23:43:04 rickd + * Add RCS tracking heading. + * + *----------------------------------------------------------------------------- + */ + +#if defined (__FreeBSD__) || defined (__NetBSD__) +#include +#else +#include +#endif + +#define VINT8 volatile u_int8_t +#define VINT32 volatile u_int32_t + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "pmcc4_defs.h" + + +/*------------------------------------------------------------------------ +// Vendor, Board Identification definitions +//------------------------------------------------------------------------ +*/ + +#define PCI_VENDOR_ID_CONEXANT 0x14f1 +#define PCI_DEVICE_ID_CN8471 0x8471 +#define PCI_DEVICE_ID_CN8472 0x8472 +#define PCI_DEVICE_ID_CN8474 0x8474 +#define PCI_DEVICE_ID_CN8478 0x8478 +#define PCI_DEVICE_ID_CN8500 0x8500 +#define PCI_DEVICE_ID_CN8501 0x8501 +#define PCI_DEVICE_ID_CN8502 0x8502 +#define PCI_DEVICE_ID_CN8503 0x8503 + +#define INT_QUEUE_SIZE MUSYCC_NIQD + +/* RAM image of MUSYCC registers layed out as a C structure */ + struct musycc_groupr + { + VINT32 thp[32]; /* Transmit Head Pointer [5-29] */ + VINT32 tmp[32]; /* Transmit Message Pointer [5-30] */ + VINT32 rhp[32]; /* Receive Head Pointer [5-29] */ + VINT32 rmp[32]; /* Receive Message Pointer [5-30] */ + VINT8 ttsm[128]; /* Time Slot Map [5-22] */ + VINT8 tscm[256]; /* Subchannel Map [5-24] */ + VINT32 tcct[32]; /* Channel Configuration [5-26] */ + VINT8 rtsm[128]; /* Time Slot Map [5-22] */ + VINT8 rscm[256]; /* Subchannel Map [5-24] */ + VINT32 rcct[32]; /* Channel Configuration [5-26] */ + VINT32 __glcd; /* Global Configuration Descriptor [5-10] */ + VINT32 __iqp; /* Interrupt Queue Pointer [5-36] */ + VINT32 __iql; /* Interrupt Queue Length [5-36] */ + VINT32 grcd; /* Group Configuration Descriptor [5-16] */ + VINT32 mpd; /* Memory Protection Descriptor [5-18] */ + VINT32 mld; /* Message Length Descriptor [5-20] */ + VINT32 pcd; /* Port Configuration Descriptor [5-19] */ + }; + +/* hardware MUSYCC registers layed out as a C structure */ + struct musycc_globalr + { + VINT32 gbp; /* Group Base Pointer */ + VINT32 dacbp; /* Dual Address Cycle Base Pointer */ + VINT32 srd; /* Service Request Descriptor */ + VINT32 isd; /* Interrupt Service Descriptor */ + /* + * adjust __thp due to above 4 registers, which are not contained + * within musycc_groupr[]. All __XXX[] are just place holders, + * anyhow. + */ + VINT32 __thp[32 - 4]; /* Transmit Head Pointer [5-29] */ + VINT32 __tmp[32]; /* Transmit Message Pointer [5-30] */ + VINT32 __rhp[32]; /* Receive Head Pointer [5-29] */ + VINT32 __rmp[32]; /* Receive Message Pointer [5-30] */ + VINT8 ttsm[128]; /* Time Slot Map [5-22] */ + VINT8 tscm[256]; /* Subchannel Map [5-24] */ + VINT32 tcct[32]; /* Channel Configuration [5-26] */ + VINT8 rtsm[128]; /* Time Slot Map [5-22] */ + VINT8 rscm[256]; /* Subchannel Map [5-24] */ + VINT32 rcct[32]; /* Channel Configuration [5-26] */ + VINT32 glcd; /* Global Configuration Descriptor [5-10] */ + VINT32 iqp; /* Interrupt Queue Pointer [5-36] */ + VINT32 iql; /* Interrupt Queue Length [5-36] */ + VINT32 grcd; /* Group Configuration Descriptor [5-16] */ + VINT32 mpd; /* Memory Protection Descriptor [5-18] */ + VINT32 mld; /* Message Length Descriptor [5-20] */ + VINT32 pcd; /* Port Configuration Descriptor [5-19] */ + VINT32 rbist; /* Receive BIST status [5-4] */ + VINT32 tbist; /* Receive BIST status [5-4] */ + }; + +/* Global Config Descriptor bit macros */ +#define MUSYCC_GCD_ECLK_ENABLE 0x00000800 /* EBUS clock enable */ +#define MUSYCC_GCD_INTEL_SELECT 0x00000400 /* MPU type select */ +#define MUSYCC_GCD_INTA_DISABLE 0x00000008 /* PCI INTA disable */ +#define MUSYCC_GCD_INTB_DISABLE 0x00000004 /* PCI INTB disable */ +#define MUSYCC_GCD_BLAPSE 12 /* Position index for BLAPSE bit + * field */ +#define MUSYCC_GCD_ALAPSE 8 /* Position index for ALAPSE bit + * field */ +#define MUSYCC_GCD_ELAPSE 4 /* Position index for ELAPSE bit + * field */ +#define MUSYCC_GCD_PORTMAP_3 3 /* Reserved */ +#define MUSYCC_GCD_PORTMAP_2 2 /* Port 0=>Grp 0,1,2,3; Port 1=>Grp + * 4,5,6,7 */ +#define MUSYCC_GCD_PORTMAP_1 1 /* Port 0=>Grp 0,1; Port 1=>Grp 2,3, + * etc... */ +#define MUSYCC_GCD_PORTMAP_0 0 /* Port 0=>Grp 0; Port 1=>Grp 2, + * etc... */ + +/* and board specific assignments... */ +#ifdef SBE_WAN256T3_ENABLE +#define BLAPSE_VAL 0 +#define ALAPSE_VAL 0 +#define ELAPSE_VAL 7 +#define PORTMAP_VAL MUSYCC_GCD_PORTMAP_2 +#endif + +#ifdef SBE_PMCC4_ENABLE +#define BLAPSE_VAL 7 +#define ALAPSE_VAL 3 +#define ELAPSE_VAL 7 +#define PORTMAP_VAL MUSYCC_GCD_PORTMAP_0 +#endif + +#define GCD_MAGIC (((BLAPSE_VAL)<<(MUSYCC_GCD_BLAPSE)) | \ + ((ALAPSE_VAL)<<(MUSYCC_GCD_ALAPSE)) | \ + ((ELAPSE_VAL)<<(MUSYCC_GCD_ELAPSE)) | \ + (MUSYCC_GCD_ECLK_ENABLE) | PORTMAP_VAL) + +/* Group Config Descriptor bit macros */ +#define MUSYCC_GRCD_RX_ENABLE 0x00000001 /* Enable receive processing */ +#define MUSYCC_GRCD_TX_ENABLE 0x00000002 /* Enable transmit processing */ +#define MUSYCC_GRCD_SUBCHAN_DISABLE 0x00000004 /* Master disable for + * subchanneling */ +#define MUSYCC_GRCD_OOFMP_DISABLE 0x00000008 /* Out of Frame message + * processing disabled all + * channels */ +#define MUSYCC_GRCD_OOFIRQ_DISABLE 0x00000010 /* Out of Frame/In Frame irqs + * disabled */ +#define MUSYCC_GRCD_COFAIRQ_DISABLE 0x00000020 /* Change of Frame Alignment + * irq disabled */ +#define MUSYCC_GRCD_INHRBSD 0x00000100 /* Receive Buffer Status + * overwrite disabled */ +#define MUSYCC_GRCD_INHTBSD 0x00000200 /* Transmit Buffer Status + * overwrite disabled */ +#define MUSYCC_GRCD_SF_ALIGN 0x00008000 /* External frame sync */ +#define MUSYCC_GRCD_MC_ENABLE 0x00000040 /* Message configuration bits + * copy enable. Conexant sez + * turn this on */ +#define MUSYCC_GRCD_POLLTH_16 0x00000001 /* Poll every 16th frame */ +#define MUSYCC_GRCD_POLLTH_32 0x00000002 /* Poll every 32nd frame */ +#define MUSYCC_GRCD_POLLTH_64 0x00000003 /* Poll every 64th frame */ +#define MUSYCC_GRCD_POLLTH_SHIFT 10 /* Position index for poll throttle + * bit field */ +#define MUSYCC_GRCD_SUERM_THRESH_SHIFT 16 /* Position index for SUERM + * count threshold */ + +/* Port Config Descriptor bit macros */ +#define MUSYCC_PCD_E1X2_MODE 2 /* Port mode in bits 0-2. T1 and E1 */ +#define MUSYCC_PCD_E1X4_MODE 3 /* are defined in cn847x.h */ +#define MUSYCC_PCD_NX64_MODE 4 +#define MUSYCC_PCD_TXDATA_RISING 0x00000010 /* Sample Tx data on TCLK + * rising edge */ +#define MUSYCC_PCD_TXSYNC_RISING 0x00000020 /* Sample Tx frame sync on + * TCLK rising edge */ +#define MUSYCC_PCD_RXDATA_RISING 0x00000040 /* Sample Rx data on RCLK + * rising edge */ +#define MUSYCC_PCD_RXSYNC_RISING 0x00000080 /* Sample Rx frame sync on + * RCLK rising edge */ +#define MUSYCC_PCD_ROOF_RISING 0x00000100 /* Sample Rx Out Of Frame + * signal on RCLK rising edge */ +#define MUSYCC_PCD_TX_DRIVEN 0x00000200 /* No mapped timeslots causes + * logic 1 on output, else + * tristate */ +#define MUSYCC_PCD_PORTMODE_MASK 0xfffffff8 /* For changing the port mode + * between E1 and T1 */ + +/* Time Slot Descriptor bit macros */ +#define MUSYCC_TSD_MODE_64KBPS 4 +#define MUSYCC_TSD_MODE_56KBPS 5 +#define MUSYCC_TSD_SUBCHANNEL_WO_FIRST 6 +#define MUSYCC_TSD_SUBCHANNEL_WITH_FIRST 7 + +/* Message Descriptor bit macros */ +#define MUSYCC_MDT_BASE03_ADDR 0x00006000 + +/* Channel Config Descriptor bit macros */ +#define MUSYCC_CCD_BUFIRQ_DISABLE 0x00000002 /* BUFF and ONR irqs disabled */ +#define MUSYCC_CCD_EOMIRQ_DISABLE 0x00000004 /* EOM irq disabled */ +#define MUSYCC_CCD_MSGIRQ_DISABLE 0x00000008 /* LNG, FCS, ALIGN, and ABT + * irqs disabled */ +#define MUSYCC_CCD_IDLEIRQ_DISABLE 0x00000010 /* CHABT, CHIC, and SHT irqs + * disabled */ +#define MUSYCC_CCD_FILTIRQ_DISABLE 0x00000020 /* SFILT irq disabled */ +#define MUSYCC_CCD_SDECIRQ_DISABLE 0x00000040 /* SDEC irq disabled */ +#define MUSYCC_CCD_SINCIRQ_DISABLE 0x00000080 /* SINC irq disabled */ +#define MUSYCC_CCD_SUERIRQ_DISABLE 0x00000100 /* SUERR irq disabled */ +#define MUSYCC_CCD_FCS_XFER 0x00000200 /* Propagate FCS along with + * received data */ +#define MUSYCC_CCD_PROTO_SHIFT 12 /* Position index for protocol bit + * field */ +#define MUSYCC_CCD_TRANS 0 /* Protocol mode in bits 12-14 */ +#define MUSYCC_CCD_SS7 1 +#define MUSYCC_CCD_HDLC_FCS16 2 +#define MUSYCC_CCD_HDLC_FCS32 3 +#define MUSYCC_CCD_EOPIRQ_DISABLE 0x00008000 /* EOP irq disabled */ +#define MUSYCC_CCD_INVERT_DATA 0x00800000 /* Invert data */ +#define MUSYCC_CCD_MAX_LENGTH 10 /* Position index for max length bit + * field */ +#define MUSYCC_CCD_BUFFER_LENGTH 16 /* Position index for internal data + * buffer length */ +#define MUSYCC_CCD_BUFFER_LOC 24 /* Position index for internal data + * buffer starting location */ + +/**************************************************************************** + * Interrupt Descriptor Information */ + +#define INT_EMPTY_ENTRY 0xfeedface +#define INT_EMPTY_ENTRY2 0xdeadface + +/**************************************************************************** + * Interrupt Status Descriptor + * + * NOTE: One must first fetch the value of the interrupt status descriptor + * into a local variable, then pass that value into the read macros. This + * is required to avoid race conditions. + ***/ + +#define INTRPTS_NEXTINT_M 0x7FFF0000 +#define INTRPTS_NEXTINT_S 16 +#define INTRPTS_NEXTINT(x) ((x & INTRPTS_NEXTINT_M) >> INTRPTS_NEXTINT_S) + +#define INTRPTS_INTFULL_M 0x00008000 +#define INTRPTS_INTFULL_S 15 +#define INTRPTS_INTFULL(x) ((x & INTRPTS_INTFULL_M) >> INTRPTS_INTFULL_S) + +#define INTRPTS_INTCNT_M 0x00007FFF +#define INTRPTS_INTCNT_S 0 +#define INTRPTS_INTCNT(x) ((x & INTRPTS_INTCNT_M) >> INTRPTS_INTCNT_S) + + +/**************************************************************************** + * Interrupt Descriptor + ***/ + +#define INTRPT_DIR_M 0x80000000 +#define INTRPT_DIR_S 31 +#define INTRPT_DIR(x) ((x & INTRPT_DIR_M) >> INTRPT_DIR_S) + +#define INTRPT_GRP_M 0x60000000 +#define INTRPT_GRP_MSB_M 0x00004000 +#define INTRPT_GRP_S 29 +#define INTRPT_GRP_MSB_S 12 +#define INTRPT_GRP(x) (((x & INTRPT_GRP_M) >> INTRPT_GRP_S) | \ + ((x & INTRPT_GRP_MSB_M) >> INTRPT_GRP_MSB_S)) + +#define INTRPT_CH_M 0x1F000000 +#define INTRPT_CH_S 24 +#define INTRPT_CH(x) ((x & INTRPT_CH_M) >> INTRPT_CH_S) + +#define INTRPT_EVENT_M 0x00F00000 +#define INTRPT_EVENT_S 20 +#define INTRPT_EVENT(x) ((x & INTRPT_EVENT_M) >> INTRPT_EVENT_S) + +#define INTRPT_ERROR_M 0x000F0000 +#define INTRPT_ERROR_S 16 +#define INTRPT_ERROR(x) ((x & INTRPT_ERROR_M) >> INTRPT_ERROR_S) + +#define INTRPT_ILOST_M 0x00008000 +#define INTRPT_ILOST_S 15 +#define INTRPT_ILOST(x) ((x & INTRPT_ILOST_M) >> INTRPT_ILOST_S) + +#define INTRPT_PERR_M 0x00004000 +#define INTRPT_PERR_S 14 +#define INTRPT_PERR(x) ((x & INTRPT_PERR_M) >> INTRPT_PERR_S) + +#define INTRPT_BLEN_M 0x00003FFF +#define INTRPT_BLEN_S 0 +#define INTRPT_BLEN(x) ((x & INTRPT_BLEN_M) >> INTRPT_BLEN_S) + + +/* Buffer Descriptor bit macros */ +#define OWNER_BIT 0x80000000 /* Set for MUSYCC owner on xmit, host + * owner on receive */ +#define HOST_TX_OWNED 0x00000000 /* Host owns descriptor */ +#define MUSYCC_TX_OWNED 0x80000000 /* MUSYCC owns descriptor */ +#define HOST_RX_OWNED 0x80000000 /* Host owns descriptor */ +#define MUSYCC_RX_OWNED 0x00000000 /* MUSYCC owns descriptor */ + +#define POLL_DISABLED 0x40000000 /* MUSYCC not allowed to poll buffer + * for ownership */ +#define EOMIRQ_ENABLE 0x20000000 /* This buffer contains the end of + * the message */ +#define EOBIRQ_ENABLE 0x10000000 /* EOB irq enabled */ +#define PADFILL_ENABLE 0x01000000 /* Enable padfill */ +#define REPEAT_BIT 0x00008000 /* Bit on for FISU descriptor */ +#define LENGTH_MASK 0X3fff /* This part of status descriptor is + * length */ +#define IDLE_CODE 25 /* Position index for idle code (2 + * bits) */ +#define EXTRA_FLAGS 16 /* Position index for minimum flags + * between messages (8 bits) */ +#define IDLE_CODE_MASK 0x03 /* Gets rid of garbage before the + * pattern is OR'd in */ +#define EXTRA_FLAGS_MASK 0xff /* Gets rid of garbage before the + * pattern is OR'd in */ +#define PCI_PERMUTED_OWNER_BIT 0x00000080 /* For flipping the bit on + * the polled mode descriptor */ + +/* Service Request Descriptor bit macros */ +#define SREQ 8 /* Position index for service request bit + * field */ +#define SR_NOOP (0<<(SREQ)) /* No Operation. Generates SACK */ +#define SR_CHIP_RESET (1<<(SREQ)) /* Soft chip reset */ +#define SR_GROUP_RESET (2<<(SREQ)) /* Group reset */ +#define SR_GLOBAL_INIT (4<<(SREQ)) /* Global init: read global + * config deswc and interrupt + * queue desc */ +#define SR_GROUP_INIT (5<<(SREQ)) /* Group init: read Timeslot + * and Subchannel maps, + * Channel Config, */ + /* + * Group Config, Memory Protect, Message Length, and Port Config + * Descriptors + */ +#define SR_CHANNEL_ACTIVATE (8<<(SREQ)) /* Init channel, read Head + * Pointer, process first + * Message Descriptor */ +#define SR_GCHANNEL_MASK 0x001F /* channel portion (gchan) */ +#define SR_CHANNEL_DEACTIVATE (9<<(SREQ)) /* Stop channel processing */ +#define SR_JUMP (10<<(SREQ)) /* a: Process new Message + * List */ +#define SR_CHANNEL_CONFIG (11<<(SREQ)) /* b: Read channel + * Configuration Descriptor */ +#define SR_GLOBAL_CONFIG (16<<(SREQ)) /* 10: Read Global + * Configuration Descriptor */ +#define SR_INTERRUPT_Q (17<<(SREQ)) /* 11: Read Interrupt Queue + * Descriptor */ +#define SR_GROUP_CONFIG (18<<(SREQ)) /* 12: Read Group + * Configuration Descriptor */ +#define SR_MEMORY_PROTECT (19<<(SREQ)) /* 13: Read Memory Protection + * Descriptor */ +#define SR_MESSAGE_LENGTH (20<<(SREQ)) /* 14: Read Message Length + * Descriptor */ +#define SR_PORT_CONFIG (21<<(SREQ)) /* 15: Read Port + * Configuration Descriptor */ +#define SR_TIMESLOT_MAP (24<<(SREQ)) /* 18: Read Timeslot Map */ +#define SR_SUBCHANNEL_MAP (25<<(SREQ)) /* 19: Read Subchannel Map */ +#define SR_CHAN_CONFIG_TABLE (26<<(SREQ)) /* 20: Read Channel + * Configuration Table for + * the group */ +#define SR_TX_DIRECTION 0x00000020 /* Transmit direction bit. + * Bit off indicates receive + * direction */ +#define SR_RX_DIRECTION 0x00000000 + +/* Interrupt Descriptor bit macros */ +#define GROUP10 29 /* Position index for the 2 LS group + * bits */ +#define CHANNEL 24 /* Position index for channel bits */ +#define INT_IQD_TX 0x80000000 +#define INT_IQD_GRP 0x60000000 +#define INT_IQD_CHAN 0x1f000000 +#define INT_IQD_EVENT 0x00f00000 +#define INT_IQD_ERROR 0x000f0000 +#define INT_IQD_ILOST 0x00008000 +#define INT_IQD_PERR 0x00004000 +#define INT_IQD_BLEN 0x00003fff + +/* Interrupt Descriptor Events */ +#define EVE_EVENT 20 /* Position index for event bits */ +#define EVE_NONE 0 /* No event to report in this + * interrupt */ +#define EVE_SACK 1 /* Service Request acknowledge */ +#define EVE_EOB 2 /* End of Buffer */ +#define EVE_EOM 3 /* End of Message */ +#define EVE_EOP 4 /* End of Padfill */ +#define EVE_CHABT 5 /* Change to Abort Code */ +#define EVE_CHIC 6 /* Change to Idle Code */ +#define EVE_FREC 7 /* Frame Recovery */ +#define EVE_SINC 8 /* MTP2 SUERM Increment */ +#define EVE_SDEC 9 /* MTP2 SUERM Decrement */ +#define EVE_SFILT 10 /* MTP2 SUERM Filtered Message */ +/* Interrupt Descriptor Errors */ +#define ERR_ERRORS 16 /* Position index for error bits */ +#define ERR_BUF 1 /* Buffer Error */ +#define ERR_COFA 2 /* Change of Frame Alignment Error */ +#define ERR_ONR 3 /* Owner Bit Error */ +#define ERR_PROT 4 /* Memory Protection Error */ +#define ERR_OOF 8 /* Out of Frame Error */ +#define ERR_FCS 9 /* FCS Error */ +#define ERR_ALIGN 10 /* Octet Alignment Error */ +#define ERR_ABT 11 /* Abort Termination */ +#define ERR_LNG 12 /* Long Message Error */ +#define ERR_SHT 13 /* Short Message Error */ +#define ERR_SUERR 14 /* SUERM threshold exceeded */ +#define ERR_PERR 15 /* PCI Parity Error */ +/* Other Stuff */ +#define TRANSMIT_DIRECTION 0x80000000 /* Transmit direction bit. Bit off + * indicates receive direction */ +#define ILOST 0x00008000 /* Interrupt Lost */ +#define GROUPMSB 0x00004000 /* Group number MSB */ +#define SACK_IMAGE 0x00100000 /* Used in IRQ for semaphore test */ +#define INITIAL_STATUS 0x10000 /* IRQ status should be this after + * reset */ + +/* This must be defined on an entire channel group (Port) basis */ +#define SUERM_THRESHOLD 0x1f + +#ifdef __cplusplus +} +#endif + +#undef VINT32 +#undef VINT8 + +#endif /*** _INC_MUSYCC_H_ ***/ + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/ossiRelease.c b/drivers/staging/cxt1e1/ossiRelease.c new file mode 100644 index 0000000..a560298 --- /dev/null +++ b/drivers/staging/cxt1e1/ossiRelease.c @@ -0,0 +1,39 @@ +/* + * $Id: ossiRelease.c,v 1.2 2008/05/08 20:14:03 rdobbs PMCC4_3_1B $ + */ + +/*----------------------------------------------------------------------------- + * ossiRelease.c - + * + * This string will be embedded into the executable and will track the + * release. The embedded string may be displayed using the following: + * + * strings | grep \$Rel + * + * Copyright (C) 2002-2008 One Stop Systems, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@onestopsystems.com + * One Stop Systems, Inc. Escondido, California U.S.A. + * + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.2 $ + * Last changed on $Date: 2008/05/08 20:14:03 $ + * Changed by $Author: rdobbs $ + *----------------------------------------------------------------------------- + */ + + +char pmcc4_OSSI_release[] = "$Release: PMCC4_3_1B, Copyright (c) 2008 One Stop Systems$"; + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/pmc93x6_eeprom.c b/drivers/staging/cxt1e1/pmc93x6_eeprom.c new file mode 100644 index 0000000..02c829b --- /dev/null +++ b/drivers/staging/cxt1e1/pmc93x6_eeprom.c @@ -0,0 +1,559 @@ +/* pmc93x6_eeprom.c - PMC's 93LC46 EEPROM Device + * + * The 93LC46 is a low-power, serial Electrically Erasable and + * Programmable Read Only Memory organized as 128 8-bit bytes. + * + * Accesses to the 93LC46 are done in a bit serial stream, organized + * in a 3 wire format. Writes are internally timed by the device + * (the In data bit is pulled low until the write is complete and + * then is pulled high) and take about 6 milliseconds. + * + * Copyright (C) 2003-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include "pmcc4_sysdep.h" +#include "sbecom_inline_linux.h" +#include "pmcc4.h" +#include "sbe_promformat.h" + +#ifndef TRUE +#define TRUE 1 +#define FALSE 0 +#endif + +#ifdef SBE_INCLUDE_SYMBOLS +#define STATIC +#else +#define STATIC static +#endif + + +/*------------------------------------------------------------------------ + * EEPROM address definitions + *------------------------------------------------------------------------ + * + * The offset in the definitions below allows the test to skip over + * areas of the EEPROM that other programs (such a VxWorks) are + * using. + */ + +#define EE_MFG (long)0 /* Index to manufacturing record */ +#define EE_FIRST 0x28 /* Index to start testing at */ +#define EE_LIMIT 128 /* Index to end testing at */ + + +/* Bit Ordering for Instructions +** +** A0, A1, A2, A3, A4, A5, A6, OP0, OP1, SB (lsb, or 1st bit out) +** +*/ + +#define EPROM_EWEN 0x0019 /* Erase/Write enable (reversed) */ +#define EPROM_EWDS 0x0001 /* Erase/Write disable (reversed) */ +#define EPROM_READ 0x0003 /* Read (reversed) */ +#define EPROM_WRITE 0x0005 /* Write (reversed) */ +#define EPROM_ERASE 0x0007 /* Erase (reversed) */ +#define EPROM_ERAL 0x0009 /* Erase All (reversed) */ +#define EPROM_WRAL 0x0011 /* Write All (reversed) */ + +#define EPROM_ADR_SZ 7 /* Number of bits in offset address */ +#define EPROM_OP_SZ 3 /* Number of bits in command */ +#define SIZE_ADDR_OP (EPROM_ADR_SZ + EPROM_OP_SZ) +#define LC46A_MAX_OPS 10 /* Number of bits in Instruction */ +#define NUM_OF_BITS 8 /* Number of bits in data */ + + +/* EEPROM signal bits */ +#define EPROM_ACTIVE_OUT_BIT 0x0001 /* Out data bit */ +#define EPROM_ACTIVE_IN_BIT 0x0002 /* In data bit */ +#define ACTIVE_IN_BIT_SHIFT 0x0001 /* Shift In data bit to LSB */ +#define EPROM_ENCS 0x0004 /* Set EEPROM CS during operation */ + + +/*------------------------------------------------------------------------ + * The ByteReverse table is used to reverses the 8 bits within a byte + *------------------------------------------------------------------------ + */ + +static unsigned char ByteReverse[256]; +static int ByteReverseBuilt = FALSE; + + +/*------------------------------------------------------------------------ + * mfg_template - initial serial EEPROM data structure + *------------------------------------------------------------------------ + */ + +short mfg_template[sizeof (FLD_TYPE2)] = +{ + PROM_FORMAT_TYPE2, /* type; */ + 0x00, 0x1A, /* length[2]; */ + 0x00, 0x00, 0x00, 0x00, /* Crc32[4]; */ + 0x11, 0x76, /* Id[2]; */ + 0x07, 0x05, /* SubId[2] E1; */ + 0x00, 0xA0, 0xD6, 0x00, 0x00, 0x00, /* Serial[6]; */ + 0x00, 0x00, 0x00, 0x00, /* CreateTime[4]; */ + 0x00, 0x00, 0x00, 0x00, /* HeatRunTime[4]; */ + 0x00, 0x00, 0x00, 0x00, /* HeatRunIterations[4]; */ + 0x00, 0x00, 0x00, 0x00, /* HeatRunErrors[4]; */ +}; + + +/*------------------------------------------------------------------------ + * BuildByteReverse - build the 8-bit reverse table + *------------------------------------------------------------------------ + * + * The 'ByteReverse' table reverses the 8 bits within a byte + * (the MSB becomes the LSB etc.). + */ + +STATIC void +BuildByteReverse (void) +{ + long half; /* Used to build by powers to 2 */ + int i; + + ByteReverse[0] = 0; + + for (half = 1; half < sizeof (ByteReverse); half <<= 1) + for (i = 0; i < half; i++) + ByteReverse[half + i] = (char) (ByteReverse[i] | (0x80 / half)); + + ByteReverseBuilt = TRUE; +} + + +/*------------------------------------------------------------------------ + * eeprom_delay - small delay for EEPROM timing + *------------------------------------------------------------------------ + */ + +STATIC void +eeprom_delay (void) +{ + int timeout; + + for (timeout = 20; timeout; --timeout) + { + OS_uwait_dummy (); + } +} + + +/*------------------------------------------------------------------------ + * eeprom_put_byte - Send a byte to the EEPROM serially + *------------------------------------------------------------------------ + * + * Given the PCI address and the data, this routine serially sends + * the data to the EEPROM. + */ + +void +eeprom_put_byte (long addr, long data, int count) +{ + u_int32_t output; + + while (--count >= 0) + { + output = (data & EPROM_ACTIVE_OUT_BIT) ? 1 : 0; /* Get next data bit */ + output |= EPROM_ENCS; /* Add Chip Select */ + data >>= 1; + + eeprom_delay (); + pci_write_32 ((u_int32_t *) addr, output); /* Output it */ + } +} + + +/*------------------------------------------------------------------------ + * eeprom_get_byte - Receive a byte from the EEPROM serially + *------------------------------------------------------------------------ + * + * Given the PCI address, this routine serially fetches the data + * from the EEPROM. + */ + +u_int32_t +eeprom_get_byte (long addr) +{ + u_int32_t input; + u_int32_t data; + int count; + +/* Start the Reading of DATA +** +** The first read is a dummy as the data is latched in the +** EPLD and read on the next read access to the EEPROM. +*/ + + input = pci_read_32 ((u_int32_t *) addr); + + data = 0; + count = NUM_OF_BITS; + while (--count >= 0) + { + eeprom_delay (); + input = pci_read_32 ((u_int32_t *) addr); + + data <<= 1; /* Shift data over */ + data |= (input & EPROM_ACTIVE_IN_BIT) ? 1 : 0; + + } + + return data; +} + + +/*------------------------------------------------------------------------ + * disable_pmc_eeprom - Disable writes to the EEPROM + *------------------------------------------------------------------------ + * + * Issue the EEPROM command to disable writes. + */ + +STATIC void +disable_pmc_eeprom (long addr) +{ + eeprom_put_byte (addr, EPROM_EWDS, SIZE_ADDR_OP); + + pci_write_32 ((u_int32_t *) addr, 0); /* this removes Chip Select + * from EEPROM */ +} + + +/*------------------------------------------------------------------------ + * enable_pmc_eeprom - Enable writes to the EEPROM + *------------------------------------------------------------------------ + * + * Issue the EEPROM command to enable writes. + */ + +STATIC void +enable_pmc_eeprom (long addr) +{ + eeprom_put_byte (addr, EPROM_EWEN, SIZE_ADDR_OP); + + pci_write_32 ((u_int32_t *) addr, 0); /* this removes Chip Select + * from EEPROM */ +} + + +/*------------------------------------------------------------------------ + * pmc_eeprom_read - EEPROM location read + *------------------------------------------------------------------------ + * + * Given a EEPROM PCI address and location offset, this routine returns + * the contents of the specified location to the calling routine. + */ + +u_int32_t +pmc_eeprom_read (long addr, long mem_offset) +{ + u_int32_t data; /* Data from chip */ + + if (!ByteReverseBuilt) + BuildByteReverse (); + + mem_offset = ByteReverse[0x7F & mem_offset]; /* Reverse address */ + /* + * NOTE: The max offset address is 128 or half the reversal table. So the + * LSB is always zero and counts as a built in shift of one bit. So even + * though we need to shift 3 bits to make room for the command, we only + * need to shift twice more because of the built in shift. + */ + mem_offset <<= 2; /* Shift for command */ + mem_offset |= EPROM_READ; /* Add command */ + + eeprom_put_byte (addr, mem_offset, SIZE_ADDR_OP); /* Output chip address */ + + data = eeprom_get_byte (addr); /* Read chip data */ + + pci_write_32 ((u_int32_t *) addr, 0); /* Remove Chip Select from + * EEPROM */ + + return (data & 0x000000FF); +} + + +/*------------------------------------------------------------------------ + * pmc_eeprom_write - EEPROM location write + *------------------------------------------------------------------------ + * + * Given a EEPROM PCI address, location offset and value, this + * routine writes the value to the specified location. + * + * Note: it is up to the caller to determine if the write + * operation succeeded. + */ + +int +pmc_eeprom_write (long addr, long mem_offset, u_int32_t data) +{ + volatile u_int32_t temp; + int count; + + if (!ByteReverseBuilt) + BuildByteReverse (); + + mem_offset = ByteReverse[0x7F & mem_offset]; /* Reverse address */ + /* + * NOTE: The max offset address is 128 or half the reversal table. So the + * LSB is always zero and counts as a built in shift of one bit. So even + * though we need to shift 3 bits to make room for the command, we only + * need to shift twice more because of the built in shift. + */ + mem_offset <<= 2; /* Shift for command */ + mem_offset |= EPROM_WRITE; /* Add command */ + + eeprom_put_byte (addr, mem_offset, SIZE_ADDR_OP); /* Output chip address */ + + data = ByteReverse[0xFF & data];/* Reverse data */ + eeprom_put_byte (addr, data, NUM_OF_BITS); /* Output chip data */ + + pci_write_32 ((u_int32_t *) addr, 0); /* Remove Chip Select from + * EEPROM */ + +/* +** Must see Data In at a low state before completing this transaction. +** +** Afterwards, the data bit will return to a high state, ~6 ms, terminating +** the operation. +*/ + pci_write_32 ((u_int32_t *) addr, EPROM_ENCS); /* Re-enable Chip Select */ + temp = pci_read_32 ((u_int32_t *) addr); /* discard first read */ + temp = pci_read_32 ((u_int32_t *) addr); + if (temp & EPROM_ACTIVE_IN_BIT) + { + temp = pci_read_32 ((u_int32_t *) addr); + if (temp & EPROM_ACTIVE_IN_BIT) + { + pci_write_32 ((u_int32_t *) addr, 0); /* Remove Chip Select + * from EEPROM */ + return (1); + } + } + count = 1000; + while (count--) + { + for (temp = 0; temp < 0x10; temp++) + OS_uwait_dummy (); + + if (pci_read_32 ((u_int32_t *) addr) & EPROM_ACTIVE_IN_BIT) + break; + } + + if (count == -1) + return (2); + + return (0); +} + + +/*------------------------------------------------------------------------ + * pmcGetBuffValue - read the specified value from buffer + *------------------------------------------------------------------------ + */ + +long +pmcGetBuffValue (char *ptr, int size) +{ + long value = 0; + int index; + + for (index = 0; index < size; ++index) + { + value <<= 8; + value |= ptr[index] & 0xFF; + } + + return value; +} + + +/*------------------------------------------------------------------------ + * pmcSetBuffValue - save the specified value to buffer + *------------------------------------------------------------------------ + */ + +void +pmcSetBuffValue (char *ptr, long value, int size) +{ + int index = size; + + while (--index >= 0) + { + ptr[index] = (char) (value & 0xFF); + value >>= 8; + } +} + + +/*------------------------------------------------------------------------ + * pmc_eeprom_read_buffer - read EEPROM data into specified buffer + *------------------------------------------------------------------------ + */ + +void +pmc_eeprom_read_buffer (long addr, long mem_offset, char *dest_ptr, int size) +{ + while (--size >= 0) + *dest_ptr++ = (char) pmc_eeprom_read (addr, mem_offset++); +} + + +/*------------------------------------------------------------------------ + * pmc_eeprom_write_buffer - write EEPROM data from specified buffer + *------------------------------------------------------------------------ + */ + +void +pmc_eeprom_write_buffer (long addr, long mem_offset, char *dest_ptr, int size) +{ + enable_pmc_eeprom (addr); + + while (--size >= 0) + pmc_eeprom_write (addr, mem_offset++, *dest_ptr++); + + disable_pmc_eeprom (addr); +} + + +/*------------------------------------------------------------------------ + * pmcCalcCrc - calculate the CRC for the serial EEPROM structure + *------------------------------------------------------------------------ + */ + +u_int32_t +pmcCalcCrc_T01 (void *bufp) +{ + FLD_TYPE2 *buf = bufp; + u_int32_t crc; /* CRC of the structure */ + + /* Calc CRC for type and length fields */ + sbeCrc ( + (u_int8_t *) &buf->type, + (u_int32_t) STRUCT_OFFSET (FLD_TYPE1, Crc32), + (u_int32_t) 0, + (u_int32_t *) &crc); + +#ifdef EEPROM_TYPE_DEBUG + printk ("sbeCrc: crc 1 calculated as %08x\n", crc); /* RLD DEBUG */ +#endif + return ~crc; +} + +u_int32_t +pmcCalcCrc_T02 (void *bufp) +{ + FLD_TYPE2 *buf = bufp; + u_int32_t crc; /* CRC of the structure */ + + /* Calc CRC for type and length fields */ + sbeCrc ( + (u_int8_t *) &buf->type, + (u_int32_t) STRUCT_OFFSET (FLD_TYPE2, Crc32), + (u_int32_t) 0, + (u_int32_t *) &crc); + + /* Calc CRC for remaining fields */ + sbeCrc ( + (u_int8_t *) &buf->Id[0], + (u_int32_t) (sizeof (FLD_TYPE2) - STRUCT_OFFSET (FLD_TYPE2, Id)), + (u_int32_t) crc, + (u_int32_t *) &crc); + +#ifdef EEPROM_TYPE_DEBUG + printk ("sbeCrc: crc 2 calculated as %08x\n", crc); /* RLD DEBUG */ +#endif + return crc; +} + + +/*------------------------------------------------------------------------ + * pmc_init_seeprom - initialize the serial EEPROM structure + *------------------------------------------------------------------------ + * + * At the front of the serial EEPROM there is a record that contains + * manufacturing information. If the info does not already exist, it + * is created. The only field modifiable by the operator is the + * serial number field. + */ + +void +pmc_init_seeprom (u_int32_t addr, u_int32_t serialNum) +{ + PROMFORMAT buffer; /* Memory image of structure */ + u_int32_t crc; /* CRC of structure */ + time_t createTime; + int i; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + createTime = CURRENT_TIME; +#else + createTime = get_seconds (); +#endif + + /* use template data */ + for (i = 0; i < sizeof (FLD_TYPE2); ++i) + buffer.bytes[i] = mfg_template[i]; + + /* Update serial number field in buffer */ + pmcSetBuffValue (&buffer.fldType2.Serial[3], serialNum, 3); + + /* Update create time field in buffer */ + pmcSetBuffValue (&buffer.fldType2.CreateTime[0], createTime, 4); + + /* Update CRC field in buffer */ + crc = pmcCalcCrc_T02 (&buffer); + pmcSetBuffValue (&buffer.fldType2.Crc32[0], crc, 4); + +#ifdef DEBUG + for (i = 0; i < sizeof (FLD_TYPE2); ++i) + printk ("[%02X] = %02X\n", i, buffer.bytes[i] & 0xFF); +#endif + + /* Write structure to serial EEPROM */ + pmc_eeprom_write_buffer (addr, EE_MFG, (char *) &buffer, sizeof (FLD_TYPE2)); +} + + +char +pmc_verify_cksum (void *bufp) +{ + FLD_TYPE1 *buf1 = bufp; + FLD_TYPE2 *buf2 = bufp; + u_int32_t crc1, crc2; /* CRC read from EEPROM */ + + /* Retrieve contents of CRC field */ + crc1 = pmcGetBuffValue (&buf1->Crc32[0], sizeof (buf1->Crc32)); +#ifdef EEPROM_TYPE_DEBUG + printk ("EEPROM: chksum 1 reads as %08x\n", crc1); /* RLD DEBUG */ +#endif + if ((buf1->type == PROM_FORMAT_TYPE1) && + (pmcCalcCrc_T01 ((void *) buf1) == crc1)) + return PROM_FORMAT_TYPE1; /* checksum type 1 verified */ + + crc2 = pmcGetBuffValue (&buf2->Crc32[0], sizeof (buf2->Crc32)); +#ifdef EEPROM_TYPE_DEBUG + printk ("EEPROM: chksum 2 reads as %08x\n", crc2); /* RLD DEBUG */ +#endif + if ((buf2->type == PROM_FORMAT_TYPE2) && + (pmcCalcCrc_T02 ((void *) buf2) == crc2)) + return PROM_FORMAT_TYPE2; /* checksum type 2 verified */ + + return PROM_FORMAT_Unk; /* failed to validate */ +} + + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/pmc93x6_eeprom.h b/drivers/staging/cxt1e1/pmc93x6_eeprom.h new file mode 100644 index 0000000..c3ada87 --- /dev/null +++ b/drivers/staging/cxt1e1/pmc93x6_eeprom.h @@ -0,0 +1,60 @@ +/* + * $Id: pmc93x6_eeprom.h,v 1.1 2005/09/28 00:10:08 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_PMC93X6_EEPROM_H_ +#define _INC_PMC93X6_EEPROM_H_ + +/*----------------------------------------------------------------------------- + * pmc93x6_eeprom.h - + * + * Copyright (C) 2002-2004 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + *----------------------------------------------------------------------------- + * $Log: pmc93x6_eeprom.h,v $ + * Revision 1.1 2005/09/28 00:10:08 rickd + * pmc_verify_cksum return value is char. + * + * Revision 1.0 2005/05/04 17:20:51 rickd + * Initial revision + * + * Revision 1.0 2005/04/22 23:48:48 rickd + * Initial revision + * + *----------------------------------------------------------------------------- + */ + +#if defined (__FreeBSD__) || defined (__NetBSD__) +#include +#else +#include +#endif + +#ifdef __KERNEL__ + +#include "pmcc4_private.h" + +void pmc_eeprom_read_buffer (long, long, char *, int); +void pmc_eeprom_write_buffer (long, long, char *, int); +void pmc_init_seeprom (u_int32_t, u_int32_t); +char pmc_verify_cksum (void *); + +#endif /*** __KERNEL__ ***/ + +#endif + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/pmcc4.h b/drivers/staging/cxt1e1/pmcc4.h new file mode 100644 index 0000000..26c1f0e --- /dev/null +++ b/drivers/staging/cxt1e1/pmcc4.h @@ -0,0 +1,155 @@ +/* + * $Id: pmcc4.h,v 1.4 2005/11/01 19:24:48 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_PMCC4_H_ +#define _INC_PMCC4_H_ + +/*----------------------------------------------------------------------------- + * pmcc4.h - + * + * Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.4 $ + * Last changed on $Date: 2005/11/01 19:24:48 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: pmcc4.h,v $ + * Revision 1.4 2005/11/01 19:24:48 rickd + * Remove de-implement function prototypes. Several to + * changes for consistant usage of same. + * + * Revision 1.3 2005/09/28 00:10:08 rickd + * Add GNU license info. Use config params from libsbew.h + * + * Revision 1.2 2005/04/28 23:43:03 rickd + * Add RCS tracking heading. + * + *----------------------------------------------------------------------------- + */ + + +#if defined(__FreeBSD__) || defined(__NetBSD__) +#include +#else +#ifndef __KERNEL__ +#include +#else +#include +#endif +#endif + + + +typedef int status_t; + +#define SBE_DRVR_FAIL 0 +#define SBE_DRVR_SUCCESS 1 + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/********************/ +/* PMCC4 memory Map */ +/********************/ + +#define COMET_OFFSET(x) (0x80000+(x)*0x10000) +#define EEPROM_OFFSET 0xC0000 +#define CPLD_OFFSET 0xD0000 + + struct pmcc4_timeslot_param + { + u_int8_t card; /* the card number */ + u_int8_t port; /* the port number */ + u_int8_t _reserved1; + u_int8_t _reserved2; + + /* + * each byte in bitmask below represents one timeslot (bitmask[0] is + * for timeslot 0 and so on), each bit in the byte selects timeslot + * bits for this channel (0xff - whole timeslot, 0x7f - 56kbps mode) + */ + u_int8_t bitmask[32]; + }; + + struct c4_musycc_param + { + u_int8_t RWportnum; + u_int16_t offset; + u_int32_t value; + }; + +/*Alarm values */ +#define sbeE1RMAI 0x100 +#define sbeYelAlm 0x04 +#define sbeRedAlm 0x02 +#define sbeAISAlm 0x01 + +#define sbeE1errSMF 0x02 +#define sbeE1CRC 0x01 + +#ifdef __cplusplus +} +#endif + +#ifdef __KERNEL__ + +/* + * Device Driver interface, routines are for internal use only. + */ + +#include "pmcc4_private.h" + +#if !(LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)) +char *get_hdlc_name (hdlc_device *); + +#endif + + +/* + * external interface + */ + +void c4_cleanup (void); +status_t c4_chan_up (ci_t *, int channum); +status_t c4_del_chan_stats (int channum); +status_t c4_del_chan (int channum); +status_t c4_get_iidinfo (ci_t * ci, struct sbe_iid_info * iip); +int c4_is_chan_up (int channum); + +void *getuserbychan (int channum); +void pci_flush_write (ci_t * ci); +void sbecom_set_loglevel (int debuglevel); +char *sbeid_get_bdname (ci_t * ci); +void sbeid_set_bdtype (ci_t * ci); +void sbeid_set_hdwbid (ci_t * ci); +u_int32_t sbeCrc (u_int8_t *, u_int32_t, u_int32_t, u_int32_t *); + +void VMETRO_TRACE (void *); /* put data into 8 LEDs */ +void VMETRO_TRIGGER (ci_t *, int); /* Note: int = 0(default) + * thru 15 */ + +#if defined (SBE_ISR_TASKLET) +void musycc_intr_bh_tasklet (ci_t *); + +#endif + +#endif /*** __KERNEL __ ***/ +#endif /* _INC_PMCC4_H_ */ diff --git a/drivers/staging/cxt1e1/pmcc4_cpld.h b/drivers/staging/cxt1e1/pmcc4_cpld.h new file mode 100644 index 0000000..6d8f033 --- /dev/null +++ b/drivers/staging/cxt1e1/pmcc4_cpld.h @@ -0,0 +1,124 @@ +/* + * $Id: pmcc4_cpld.h,v 1.0 2005/09/28 00:10:08 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_PMCC4_CPLD_H_ +#define _INC_PMCC4_CPLD_H_ + +/*----------------------------------------------------------------------------- + * pmcc4_cpld.h - + * + * Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.0 $ + * Last changed on $Date: 2005/09/28 00:10:08 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: pmcc4_cpld.h,v $ + * Revision 1.0 2005/09/28 00:10:08 rickd + * Initial revision + * + *----------------------------------------------------------------------------- + */ + + +#if defined(__FreeBSD__) || defined(__NetBSD__) +#include +#else +#ifndef __KERNEL__ +#include +#else +#include +#endif +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/********************************/ +/* iSPLD control chip registers */ +/********************************/ + +#if 0 +#define CPLD_MCSR 0x0 +#define CPLD_MCLK 0x1 +#define CPLD_LEDS 0x2 +#define CPLD_INTR 0x3 +#endif + + struct c4_cpld + { + volatile u_int32_t mcsr;/* r/w: Master Clock Source Register */ + volatile u_int32_t mclk;/* r/w: Master Clock Register */ + volatile u_int32_t leds;/* r/w: LED Register */ + volatile u_int32_t intr;/* r: Interrupt Register */ + }; + + typedef struct c4_cpld c4cpld_t; + +/* mcsr note: sourcing COMET must be initialized to Master Mode */ +#define PMCC4_CPLD_MCSR_IND 0 /* ports used individual BP Clk as + * source, no slaves */ +#define PMCC4_CPLD_MCSR_CMT_1 1 /* COMET 1 BP Clk is source, 2,3,4 + * are Clk slaves */ +#define PMCC4_CPLD_MCSR_CMT_2 2 /* COMET 2 BP Clk is source, 1,3,4 + * are Clk slaves */ +#define PMCC4_CPLD_MCSR_CMT_3 3 /* COMET 3 BP Clk is source, 1,2,4 + * are Clk slaves */ +#define PMCC4_CPLD_MCSR_CMT_4 4 /* COMET 4 BP Clk is source, 1,2,3 + * are Clk slaves */ + +#define PMCC4_CPLD_MCLK_MASK 0x0f +#define PMCC4_CPLD_MCLK_P1 0x1 +#define PMCC4_CPLD_MCLK_P2 0x2 +#define PMCC4_CPLD_MCLK_P3 0x4 +#define PMCC4_CPLD_MCLK_P4 0x8 +#define PMCC4_CPLD_MCLK_T1 0x00 +#define PMCC4_CPLD_MCLK_P1_E1 0x01 +#define PMCC4_CPLD_MCLK_P2_E1 0x02 +#define PMCC4_CPLD_MCLK_P3_E1 0x04 +#define PMCC4_CPLD_MCLK_P4_E1 0x08 + +#define PMCC4_CPLD_LED_OFF 0 +#define PMCC4_CPLD_LED_ON 1 +#define PMCC4_CPLD_LED_GP0 0x01 /* port 0, green */ +#define PMCC4_CPLD_LED_YP0 0x02 /* port 0, yellow */ +#define PMCC4_CPLD_LED_GP1 0x04 /* port 1, green */ +#define PMCC4_CPLD_LED_YP1 0x08 /* port 1, yellow */ +#define PMCC4_CPLD_LED_GP2 0x10 /* port 2, green */ +#define PMCC4_CPLD_LED_YP2 0x20 /* port 2, yellow */ +#define PMCC4_CPLD_LED_GP3 0x40 /* port 3, green */ +#define PMCC4_CPLD_LED_YP3 0x80 /* port 3, yellow */ +#define PMCC4_CPLD_LED_GREEN (PMCC4_CPLD_LED_GP0 | PMCC4_CPLD_LED_GP1 | \ + PMCC4_CPLD_LED_GP2 | PMCC4_CPLD_LED_GP3 ) +#define PMCC4_CPLD_LED_YELLOW (PMCC4_CPLD_LED_YP0 | PMCC4_CPLD_LED_YP1 | \ + PMCC4_CPLD_LED_YP2 | PMCC4_CPLD_LED_YP3) + +#define PMCC4_CPLD_INTR_MASK 0x0f +#define PMCC4_CPLD_INTR_CMT_1 0x01 +#define PMCC4_CPLD_INTR_CMT_2 0x02 +#define PMCC4_CPLD_INTR_CMT_3 0x04 +#define PMCC4_CPLD_INTR_CMT_4 0x08 + +#ifdef __cplusplus +} +#endif + +#endif /* _INC_PMCC4_CPLD_H_ */ diff --git a/drivers/staging/cxt1e1/pmcc4_defs.h b/drivers/staging/cxt1e1/pmcc4_defs.h new file mode 100644 index 0000000..186347b --- /dev/null +++ b/drivers/staging/cxt1e1/pmcc4_defs.h @@ -0,0 +1,82 @@ +/* + * $Id: pmcc4_defs.h,v 1.0 2005/09/28 00:10:09 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_PMCC4_DEFS_H_ +#define _INC_PMCC4_DEFS_H_ + +/*----------------------------------------------------------------------------- + * c4_defs.h - + * + * Implementation elements of the wanPMC-C4T1E1 device driver + * + * Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.0 $ + * Last changed on $Date: 2005/09/28 00:10:09 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: pmcc4_defs.h,v $ + * Revision 1.0 2005/09/28 00:10:09 rickd + * Initial revision + * + *----------------------------------------------------------------------------- + */ + + +#define MAX_BOARDS 8 +#define MAX_CHANS_USED 128 + +#ifdef SBE_PMCC4_ENABLE +#define MUSYCC_NPORTS 4 /* CN8474 */ +#endif +#ifdef SBE_WAN256T3_ENABLE +#define MUSYCC_NPORTS 8 /* CN8478 */ +#endif +#define MUSYCC_NCHANS 32 /* actually, chans per port */ + +#define MUSYCC_NIQD 0x1000 /* power of 2 */ +#define MUSYCC_MRU 2048 /* default */ +#define MUSYCC_MTU 2048 /* default */ +#define MUSYCC_TXDESC_MIN 10 /* HDLC mode default */ +#define MUSYCC_RXDESC_MIN 18 /* HDLC mode default */ +#define MUSYCC_TXDESC_TRANS 4 /* Transparent mode minumum # of TX descriptors */ +#define MUSYCC_RXDESC_TRANS 12 /* Transparent mode minumum # of RX descriptors */ + +#define MAX_DEFAULT_IFQLEN 32 /* network qlen */ + + +#define SBE_IFACETMPL "pmcc4-%d" +#ifdef IFNAMSIZ +#define SBE_IFACETMPL_SIZE IFNAMSIZ +#else +#define SBE_IFACETMPL_SIZE 16 +#endif + +/* we want the PMCC4 watchdog to fire off every 250ms */ +#define WATCHDOG_TIMEOUT 250000 + +/* if we restart the watchdog every 250ms, then we'll time out + * an additional 300ms later */ +#define WATCHDOG_UTIMEOUT (WATCHDOG_TIMEOUT+300000) + +#if !defined(SBE_ISR_TASKLET) && !defined(SBE_ISR_IMMEDIATE) && !defined(SBE_ISR_INLINE) +#define SBE_ISR_TASKLET +#endif + +#endif /*** _INC_PMCC4_DEFS_H_ ***/ + diff --git a/drivers/staging/cxt1e1/pmcc4_drv.c b/drivers/staging/cxt1e1/pmcc4_drv.c new file mode 100644 index 0000000..ada80d0 --- /dev/null +++ b/drivers/staging/cxt1e1/pmcc4_drv.c @@ -0,0 +1,1855 @@ +/* + * $Id: pmcc4_drv.c,v 3.1 2007/08/15 23:32:17 rickd PMCC4_3_1B $ + */ + + +/*----------------------------------------------------------------------------- + * pmcc4_drv.c - + * + * Copyright (C) 2007 One Stop Systems, Inc. + * Copyright (C) 2002-2006 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@onestopsystems.com + * One Stop Systems, Inc. Escondido, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 3.1 $ + * Last changed on $Date: 2007/08/15 23:32:17 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: pmcc4_drv.c,v $ + * Revision 3.1 2007/08/15 23:32:17 rickd + * Use 'if 0' instead of GNU comment delimeter to avoid line wrap induced compiler errors. + * + * Revision 3.0 2007/08/15 22:19:55 rickd + * Correct sizeof() castings and pi->regram to support 64bit compatibility. + * + * Revision 2.10 2006/04/21 00:56:40 rickd + * workqueue files now prefixed with prefix. + * + * Revision 2.9 2005/11/01 19:22:49 rickd + * Add sanity checks against max_port for ioctl functions. + * + * Revision 2.8 2005/10/27 18:59:25 rickd + * Code cleanup. Default channel config to HDLC_FCS16. + * + * Revision 2.7 2005/10/18 18:16:30 rickd + * Further NCOMM code repairs - (1) interrupt matrix usage inconsistant + * for indexing into nciInterrupt[][], code missing double parameters. + * (2) check input of ncomm interrupt registration cardID for correct + * boundary values. + * + * Revision 2.6 2005/10/17 23:55:28 rickd + * Initial port of NCOMM support patches from original work found + * in pmc_c4t1e1 as updated by NCOMM. Ref: CONFIG_SBE_PMCC4_NCOMM. + * Corrected NCOMMs wanpmcC4T1E1_getBaseAddress() to correctly handle + * multiple boards. + * + * Revision 2.5 2005/10/13 23:01:28 rickd + * Correct panic for illegal address reference w/in get_brdinfo on + * first_if/last_if name acquistion under Linux 2.6 + * + * Revision 2.4 2005/10/13 21:20:19 rickd + * Correction of c4_cleanup() wherein next should be acquired before + * ci_t structure is free'd. + * + * Revision 2.3 2005/10/13 19:20:10 rickd + * Correct driver removal cleanup code for multiple boards. + * + * Revision 2.2 2005/10/11 18:34:04 rickd + * New routine added to determine number of ports (comets) on board. + * + * Revision 2.1 2005/10/05 00:48:13 rickd + * Add some RX activation trace code. + * + * Revision 2.0 2005/09/28 00:10:06 rickd + * Implement 2.6 workqueue for TX/RX restart. Correction to + * hardware register boundary checks allows expanded access of MUSYCC. + * Implement new musycc reg&bits namings. + * + *----------------------------------------------------------------------------- + */ + +char OSSIid_pmcc4_drvc[] = +"@(#)pmcc4_drv.c - $Revision: 3.1 $ (c) Copyright 2002-2007 One Stop Systems, Inc."; + + +#if defined (__FreeBSD__) || defined (__NetBSD__) +#include +#include +#include +#else +#include +#include "pmcc4_sysdep.h" +#include +#include +#include /* include for timer */ +#include /* include for timer */ +#include +#include +#endif + +#include "sbecom_inline_linux.h" +#include "libsbew.h" +#include "pmcc4_private.h" +#include "pmcc4.h" +#include "pmcc4_ioctls.h" +#include "musycc.h" +#include "comet.h" +#include "sbe_bid.h" + +#ifdef SBE_INCLUDE_SYMBOLS +#define STATIC +#else +#define STATIC static +#endif + + +#define KERN_WARN KERN_WARNING + +/* forward references */ +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41) +status_t c4_wk_chan_init (mpi_t *, mch_t *); +void c4_wq_port_cleanup (mpi_t *); +status_t c4_wq_port_init (mpi_t *); + +#endif +int c4_loop_port (ci_t *, int, u_int8_t); +status_t c4_set_port (ci_t *, int); +status_t musycc_chan_down (ci_t *, int); + +u_int32_t musycc_chan_proto (int); +status_t musycc_dump_ring (ci_t *, unsigned int); +status_t __init musycc_init (ci_t *); +void musycc_init_mdt (mpi_t *); +void musycc_serv_req (mpi_t *, u_int32_t); +void musycc_update_timeslots (mpi_t *); + +extern void musycc_update_tx_thp (mch_t *); +extern int log_level; +extern int max_mru; +extern int max_mtu; +extern int max_rxdesc_used, max_rxdesc_default; +extern int max_txdesc_used, max_txdesc_default; + +#if defined (__powerpc__) +extern void *memset (void *s, int c, size_t n); + +#endif + +int drvr_state = SBE_DRVR_INIT; +ci_t *c4_list = 0; +ci_t *CI; /* dummy pointer to board ZEROE's data - + * DEBUG USAGE */ + + +void +sbecom_set_loglevel (int d) +{ + /* + * The code within the following -if- clause is a backdoor debug facility + * which can be used to display the state of a board's channel. + */ + if (d > LOG_DEBUG) + { + unsigned int channum = d - (LOG_DEBUG + 1); /* convert to ZERO + * relativity */ + + (void) musycc_dump_ring ((ci_t *) CI, channum); /* CI implies support + * for card 0 only */ + } else + { + if (log_level != d) + { + printk ("%s: log level changed from %d to %d\n", THIS_MODULE->name, log_level, d); + log_level = d; /* set new */ + } else + printk ("%s: log level is %d\n", THIS_MODULE->name, log_level); + } +} + + +mch_t * +c4_find_chan (int channum) +{ + ci_t *ci; + mch_t *ch; + int portnum, gchan; + + for (ci = c4_list; ci; ci = ci->next) + for (portnum = 0; portnum < ci->max_port; portnum++) + for (gchan = 0; gchan < MUSYCC_NCHANS; gchan++) + { + if ((ch = ci->port[portnum].chan[gchan])) + { + if ((ch->state != UNASSIGNED) && + (ch->channum == channum)) + return (ch); + } + } + return 0; +} + + +ci_t *__init +c4_new (void *hi) +{ + ci_t *ci; + +#ifdef SBE_MAP_DEBUG + printk (KERN_WARNING "%s: c4_new() entered, ci needs %u.\n", + THIS_MODULE->name, (unsigned int) sizeof (ci_t)); +#endif + + ci = (ci_t *) OS_kmalloc (sizeof (ci_t)); + if (ci) + { + ci->hdw_info = hi; + ci->state = C_INIT; /* mark as hardware not available */ + ci->next = c4_list; + c4_list = ci; + ci->brdno = ci->next ? ci->next->brdno + 1 : 0; + } else + printk (KERN_WARNING "%s: failed CI malloc, size %u.\n", + THIS_MODULE->name, (unsigned int) sizeof (ci_t)); + + if (CI == 0) + CI = ci; /* DEBUG, only board 0 usage */ + return ci; +} + + +/*** + * Check port state and set LED states using watchdog or ioctl... + * also check for in-band SF loopback commands (& cause results if they are there) + * + * Alarm function depends on comet bits indicating change in + * link status (linkMask) to keep the link status indication straight. + * + * Indications are only LED and system log -- except when ioctl is invoked. + * + * "alarmed" record (a.k.a. copyVal, in some cases below) decodes as: + * + * RMAI (E1 only) 0x100 + * alarm LED on 0x80 + * link LED on 0x40 + * link returned 0x20 (link was down, now it's back and 'port get' hasn't run) + * change in LED 0x10 (update LED register because value has changed) + * link is down 0x08 + * YelAlm(RAI) 0x04 + * RedAlm 0x02 + * AIS(blue)Alm 0x01 + * + * note "link has returned" indication is reset on read + * (e.g. by use of the c4_control port get command) + */ + +#define sbeLinkMask 0x41 /* change in signal status (lost/recovered) + + * state */ +#define sbeLinkChange 0x40 +#define sbeLinkDown 0x01 +#define sbeAlarmsMask 0x07 /* red / yellow / blue alarm conditions */ +#define sbeE1AlarmsMask 0x107 /* alarm conditions */ + +#define COMET_LBCMD_READ 0x80 /* read only (do not set, return read value) */ + +void +checkPorts (ci_t * ci) +{ +#ifndef CONFIG_SBE_PMCC4_NCOMM + /* + * PORT POINT - NCOMM needs to avoid this code since the polling of + * alarms conflicts with NCOMM's interrupt servicing implementation. + */ + + comet_t *comet; + volatile u_int32_t value; + u_int32_t copyVal, LEDval; + + u_int8_t portnum; + + LEDval = 0; + for (portnum = 0; portnum < ci->max_port; portnum++) + { + copyVal = 0x12f & (ci->alarmed[portnum]); /* port's alarm record */ + comet = ci->port[portnum].cometbase; + value = pci_read_32 ((u_int32_t *) &comet->cdrc_ists) & sbeLinkMask; /* link loss reg */ + + if (value & sbeLinkChange) /* is there a change in the link stuff */ + { + /* if there's been a change (above) and yet it's the same (below) */ + if (!(((copyVal >> 3) & sbeLinkDown) ^ (value & sbeLinkDown))) + { + if (value & sbeLinkDown) + printk (KERN_WARN "%s: Port %d momentarily recovered.\n", + ci->devname, portnum); + else + printk (KERN_WARN + "%s: Warning: Port %d link was briefly down.\n", + ci->devname, portnum); + } else if (value & sbeLinkDown) + printk (KERN_WARN "%s: Warning: Port %d link is down.\n", + ci->devname, portnum); + else + { + printk (KERN_WARN "%s: Port %d link has recovered.\n", + ci->devname, portnum); + copyVal |= 0x20; /* record link transition to up */ + } + copyVal |= 0x10; /* change (link) --> update LEDs */ + } + copyVal &= 0x137; /* clear LED & link old history bits & + * save others */ + if (value & sbeLinkDown) + copyVal |= 0x08; /* record link status (now) */ + else + { /* if link is up, do this */ + copyVal |= 0x40; /* LED indicate link is up */ + /* Alarm things & the like ... first if E1, then if T1 */ + if (IS_FRAME_ANY_E1 (ci->port[portnum].p.port_mode)) + { + /* + * first check Codeword (SaX) changes & CRC and + * sub-multi-frame errors + */ + /* + * note these errors are printed every time they are detected + * vs. alarms + */ + value = pci_read_32 ((u_int32_t *) &comet->e1_frmr_nat_ists); /* codeword */ + if (value & 0x1f) + { /* if errors (crc or smf only) */ + if (value & 0x10) + printk (KERN_WARN + "%s: E1 Port %d Codeword Sa4 change detected.\n", + ci->devname, portnum); + if (value & 0x08) + printk (KERN_WARN + "%s: E1 Port %d Codeword Sa5 change detected.\n", + ci->devname, portnum); + if (value & 0x04) + printk (KERN_WARN + "%s: E1 Port %d Codeword Sa6 change detected.\n", + ci->devname, portnum); + if (value & 0x02) + printk (KERN_WARN + "%s: E1 Port %d Codeword Sa7 change detected.\n", + ci->devname, portnum); + if (value & 0x01) + printk (KERN_WARN + "%s: E1 Port %d Codeword Sa8 change detected.\n", + ci->devname, portnum); + } + value = pci_read_32 ((u_int32_t *) &comet->e1_frmr_mists); /* crc & smf */ + if (value & 0x3) + { /* if errors (crc or smf only) */ + if (value & sbeE1CRC) + printk (KERN_WARN "%s: E1 Port %d CRC-4 error(s) detected.\n", + ci->devname, portnum); + if (value & sbeE1errSMF) /* error in sub-multiframe */ + printk (KERN_WARN "%s: E1 Port %d received errored SMF.\n", + ci->devname, portnum); + } + value = pci_read_32 ((u_int32_t *) &comet->e1_frmr_masts) & 0xcc; /* alarms */ + /* + * pack alarms together (bitmiser), and construct similar to + * T1 + */ + /* RAI,RMAI,.,.,LOF,AIS,.,. ==> RMAI,.,.,.,.,.,RAI,LOF,AIS */ + /* see 0x97 */ + value = (value >> 2); + if (value & 0x30) + { + if (value & 0x20) + value |= 0x40; /* RAI */ + if (value & 0x10) + value |= 0x100; /* RMAI */ + value &= ~0x30; + } /* finished packing alarm in handy order */ + if (value != (copyVal & sbeE1AlarmsMask)) + { /* if alarms changed */ + copyVal |= 0x10;/* change LED status */ + if ((copyVal & sbeRedAlm) && !(value & sbeRedAlm)) + { + copyVal &= ~sbeRedAlm; + printk (KERN_WARN "%s: E1 Port %d LOF alarm ended.\n", + ci->devname, portnum); + } else if (!(copyVal & sbeRedAlm) && (value & sbeRedAlm)) + { + copyVal |= sbeRedAlm; + printk (KERN_WARN "%s: E1 Warning: Port %d LOF alarm.\n", + ci->devname, portnum); + } else if ((copyVal & sbeYelAlm) && !(value & sbeYelAlm)) + { + copyVal &= ~sbeYelAlm; + printk (KERN_WARN "%s: E1 Port %d RAI alarm ended.\n", + ci->devname, portnum); + } else if (!(copyVal & sbeYelAlm) && (value & sbeYelAlm)) + { + copyVal |= sbeYelAlm; + printk (KERN_WARN "%s: E1 Warning: Port %d RAI alarm.\n", + ci->devname, portnum); + } else if ((copyVal & sbeE1RMAI) && !(value & sbeE1RMAI)) + { + copyVal &= ~sbeE1RMAI; + printk (KERN_WARN "%s: E1 Port %d RMAI alarm ended.\n", + ci->devname, portnum); + } else if (!(copyVal & sbeE1RMAI) && (value & sbeE1RMAI)) + { + copyVal |= sbeE1RMAI; + printk (KERN_WARN "%s: E1 Warning: Port %d RMAI alarm.\n", + ci->devname, portnum); + } else if ((copyVal & sbeAISAlm) && !(value & sbeAISAlm)) + { + copyVal &= ~sbeAISAlm; + printk (KERN_WARN "%s: E1 Port %d AIS alarm ended.\n", + ci->devname, portnum); + } else if (!(copyVal & sbeAISAlm) && (value & sbeAISAlm)) + { + copyVal |= sbeAISAlm; + printk (KERN_WARN "%s: E1 Warning: Port %d AIS alarm.\n", + ci->devname, portnum); + } + } + /* end of E1 alarm code */ + } else + { /* if a T1 mode */ + value = pci_read_32 ((u_int32_t *) &comet->t1_almi_ists); /* alarms */ + value &= sbeAlarmsMask; + if (value != (copyVal & sbeAlarmsMask)) + { /* if alarms changed */ + copyVal |= 0x10;/* change LED status */ + if ((copyVal & sbeRedAlm) && !(value & sbeRedAlm)) + { + copyVal &= ~sbeRedAlm; + printk (KERN_WARN "%s: Port %d red alarm ended.\n", + ci->devname, portnum); + } else if (!(copyVal & sbeRedAlm) && (value & sbeRedAlm)) + { + copyVal |= sbeRedAlm; + printk (KERN_WARN "%s: Warning: Port %d red alarm.\n", + ci->devname, portnum); + } else if ((copyVal & sbeYelAlm) && !(value & sbeYelAlm)) + { + copyVal &= ~sbeYelAlm; + printk (KERN_WARN "%s: Port %d yellow (RAI) alarm ended.\n", + ci->devname, portnum); + } else if (!(copyVal & sbeYelAlm) && (value & sbeYelAlm)) + { + copyVal |= sbeYelAlm; + printk (KERN_WARN "%s: Warning: Port %d yellow (RAI) alarm.\n", + ci->devname, portnum); + } else if ((copyVal & sbeAISAlm) && !(value & sbeAISAlm)) + { + copyVal &= ~sbeAISAlm; + printk (KERN_WARN "%s: Port %d blue (AIS) alarm ended.\n", + ci->devname, portnum); + } else if (!(copyVal & sbeAISAlm) && (value & sbeAISAlm)) + { + copyVal |= sbeAISAlm; + printk (KERN_WARN "%s: Warning: Port %d blue (AIS) alarm.\n", + ci->devname, portnum); + } + } + } /* end T1 mode alarm checks */ + } + if (copyVal & sbeAlarmsMask) + copyVal |= 0x80; /* if alarm turn yel LED on */ + if (copyVal & 0x10) + LEDval |= 0x100; /* tag if LED values have changed */ + LEDval |= ((copyVal & 0xc0) >> (6 - (portnum * 2))); + + ci->alarmed[portnum] &= 0xfffff000; /* out with the old (it's fff + * ... foo) */ + ci->alarmed[portnum] |= (copyVal); /* in with the new */ + + /* + * enough with the alarms and LED's, now let's check for loopback + * requests + */ + + if (IS_FRAME_ANY_T1 (ci->port[portnum].p.port_mode)) + { /* if a T1 mode */ + /* + * begin in-band (SF) loopback code detection -- start by reading + * command + */ + value = pci_read_32 ((u_int32_t *) &comet->ibcd_ies); /* detect reg. */ + value &= 0x3; /* trim to handy bits */ + if (value & 0x2) + { /* activate loopback (sets for deactivate + * code length) */ + copyVal = c4_loop_port (ci, portnum, COMET_LBCMD_READ); /* read line loopback + * mode */ + if (copyVal != COMET_MDIAG_LINELB) /* don't do it again if + * already in that mode */ + c4_loop_port (ci, portnum, COMET_MDIAG_LINELB); /* put port in line + * loopback mode */ + } + if (value & 0x1) + { /* deactivate loopback (sets for activate + * code length) */ + copyVal = c4_loop_port (ci, portnum, COMET_LBCMD_READ); /* read line loopback + * mode */ + if (copyVal != COMET_MDIAG_LBOFF) /* don't do it again if + * already in that mode */ + c4_loop_port (ci, portnum, COMET_MDIAG_LBOFF); /* take port out of any + * loopback mode */ + } + } + if (IS_FRAME_ANY_T1ESF (ci->port[portnum].p.port_mode)) + { /* if a T1 ESF mode */ + /* begin ESF loopback code */ + value = pci_read_32 ((u_int32_t *) &comet->t1_rboc_sts) & 0x3f; /* read command */ + if (value == 0x07) + c4_loop_port (ci, portnum, COMET_MDIAG_LINELB); /* put port in line + * loopback mode */ + if (value == 0x0a) + c4_loop_port (ci, portnum, COMET_MDIAG_PAYLB); /* put port in payload + * loopbk mode */ + if ((value == 0x1c) || (value == 0x19) || (value == 0x12)) + c4_loop_port (ci, portnum, COMET_MDIAG_LBOFF); /* take port out of any + * loopbk mode */ + if (log_level >= LOG_DEBUG) + if (value != 0x3f) + printk (KERN_WARN "%s: BOC value = %x on Port %d\n", + ci->devname, value, portnum); + /* end ESF loopback code */ + } + } + + /* if something is new, update LED's */ + if (LEDval & 0x100) + pci_write_32 ((u_int32_t *) &ci->cpldbase->leds, LEDval & 0xff); +#endif /*** CONFIG_SBE_PMCC4_NCOMM ***/ +} + + +STATIC void +c4_watchdog (ci_t * ci) +{ +#if 0 + //unsigned long flags; +#endif + + if (drvr_state != SBE_DRVR_AVAILABLE) + { + if (log_level >= LOG_MONITOR) + printk ("%s: drvr not available (%x)\n", THIS_MODULE->name, drvr_state); + return; + } +#if 0 + SD_SEM_TAKE (&ci->sem_wdbusy, "_wd_"); /* only 1 thru here, per + * board */ +#endif + + ci->wdcount++; + checkPorts (ci); +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,5,41) + if (ci->wd_notify) + { /* is there a state change to search for */ + int port, gchan; + + ci->wd_notify = 0; /* reset notification */ + for (gchan = 0; gchan < MUSYCC_NCHANS; gchan++) + { + for (port = 0; port < ci->max_port; port++) + { + mch_t *ch = ci->port[port].chan[gchan]; + + if (!ch || ci->state != C_RUNNING) /* state changed while + * acquiring semaphore */ + break; + if (ch->state == UP)/* channel must be set up */ + { +#if 0 +#ifdef RLD_TRANS_DEBUG + if (1 || log_level >= LOG_MONITOR) +#else + if (log_level >= LOG_MONITOR) +#endif + printk ("%s: watchdog reviving Port %d Channel %d [%d] sts %x/%x, start_TX %x free %x start_RX %x\n", + ci->devname, ch->channum, port, gchan, ch->channum, + ch->p.status, ch->status, + ch->ch_start_tx, ch->txd_free, ch->ch_start_rx); +#endif + + /**********************************/ + /** check for RX restart request **/ + /**********************************/ + + if (ch->ch_start_rx && + (ch->status & RX_ENABLED)) /* requires start on + * enabled RX */ + { + ch->ch_start_rx = 0; /* we are restarting RX... */ +#ifdef RLD_TRANS_DEBUG + printk ("++ c4_watchdog() CHAN RX ACTIVATE: chan %d\n", ch->channum); +#endif +#ifdef RLD_RXACT_DEBUG + { + struct mdesc *md; + static int hereb4 = 7; + + if (hereb4) + { + hereb4--; + md = &ch->mdr[ch->rxix_irq_srv]; + printk ("++ c4_watchdog[%d] CHAN RX ACTIVATE: rxix_irq_srv %d, md %p sts %x, rxpkt %lu\n", + ch->channum, ch->rxix_irq_srv, md, le32_to_cpu (md->status), ch->s.rx_packets); + musycc_dump_rxbuffer_ring (ch, 1); /* RLD DEBUG */ + } + } +#endif + musycc_serv_req (ch->up, SR_CHANNEL_ACTIVATE | SR_RX_DIRECTION | gchan); + } + /**********************************/ + /** check for TX restart request **/ + /**********************************/ + + if (ch->ch_start_tx && + (ch->status & TX_ENABLED)) /* requires start on + * enabled TX */ + { + struct mdesc *md; + + /* + * find next unprocessed message, then set TX thp to + * it + */ + musycc_update_tx_thp (ch); + +#if 0 + spin_lock_irqsave (&ch->ch_txlock, flags); +#endif + md = ch->txd_irq_srv; + if (!md) + { + printk ("-- c4_watchdog[%d]: WARNING, starting NULL md\n", ch->channum); + printk ("-- chan %d txd_irq_srv %p sts %x usr_add %p sts %x, txpkt %lu\n", + ch->channum, ch->txd_irq_srv, le32_to_cpu ((struct mdesc *) (ch->txd_irq_srv)->status), + ch->txd_usr_add, le32_to_cpu ((struct mdesc *) (ch->txd_usr_add)->status), + ch->s.tx_packets); +#if 0 + spin_unlock_irqrestore (&ch->ch_txlock, flags); +#endif + } else if (md->data && ((le32_to_cpu (md->status)) & MUSYCC_TX_OWNED)) + { +#ifdef RLD_TRANS_DEBUG + printk ("++ c4_watchdog[%d] CHAN TX ACTIVATE: start_tx %x\n", ch->channum, ch->ch_start_tx); +#endif + ch->ch_start_tx = 0; /* we are restarting + * TX... */ +#if 0 + spin_unlock_irqrestore (&ch->ch_txlock, flags); /* allow interrupts for + * service request */ +#endif + musycc_serv_req (ch->up, SR_CHANNEL_ACTIVATE | SR_TX_DIRECTION | gchan); +#ifdef RLD_TRANS_DEBUG + if (1 || log_level >= LOG_MONITOR) +#else + if (log_level >= LOG_MONITOR) +#endif + printk ("++ SACK[P%d/C%d] ack'd, continuing...\n", ch->up->portnum, ch->channum); + } + } + } + } + } + } +#else + ci->wd_notify = 0; +#endif +#if 0 + SD_SEM_GIVE (&ci->sem_wdbusy);/* release per-board hold */ +#endif +} + + +void +c4_cleanup (void) +{ + ci_t *ci, *next; + mpi_t *pi; + int portnum, j; + + ci = c4_list; + while (ci) + { + next = ci->next; /* protect from upcoming */ + pci_write_32 ((u_int32_t *) &ci->cpldbase->leds, PMCC4_CPLD_LED_OFF); + for (portnum = 0; portnum < ci->max_port; portnum++) + { + pi = &ci->port[portnum]; +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41) + c4_wq_port_cleanup (pi); +#endif + for (j = 0; j < MUSYCC_NCHANS; j++) + { + if (pi->chan[j]) + OS_kfree (pi->chan[j]); /* free mch_t struct */ + } + OS_kfree (pi->regram_saved); + } +#if 0 + /* obsolete - watchdog is now static w/in ci_t */ + OS_free_watchdog (ci->wd); +#endif + OS_kfree (ci->iqd_p_saved); + OS_kfree (ci); + ci = next; /* cleanup next board, if any */ + } +} + + +/* + * This function issues a write to all comet chips and expects the same data + * to be returned from the subsequent read. This determines the board build + * to be a 1-port, 2-port, or 4-port build. The value returned represents a + * bit-mask of the found ports. Only certain configurations are considered + * VALID or LEGAL builds. + */ + +int +c4_get_portcfg (ci_t * ci) +{ + comet_t *comet; + int portnum, mask; + u_int32_t wdata, rdata; + + wdata = COMET_MDIAG_LBOFF; /* take port out of any loopback mode */ + + mask = 0; + for (portnum = 0; portnum < MUSYCC_NPORTS; portnum++) + { + comet = ci->port[portnum].cometbase; + pci_write_32 ((u_int32_t *) &comet->mdiag, wdata); + rdata = pci_read_32 ((u_int32_t *) &comet->mdiag) & COMET_MDIAG_LBMASK; + if (wdata == rdata) + mask |= 1 << portnum; + } + return mask; +} + + +/* nothing herein should generate interrupts */ + +status_t __init +c4_init (ci_t * ci, u_char *func0, u_char *func1) +{ + mpi_t *pi; + mch_t *ch; + static u_int32_t count = 0; + int portnum, j; + + ci->state = C_INIT; + ci->brdno = count++; + ci->intlog.this_status_new = 0; + atomic_set (&ci->bh_pending, 0); + + ci->reg = (struct musycc_globalr *) func0; + ci->eeprombase = (u_int32_t *) (func1 + EEPROM_OFFSET); + ci->cpldbase = (c4cpld_t *) ((u_int32_t *) (func1 + ISPLD_OFFSET)); + + /*** PORT POINT - the following is the first access of any type to the hardware ***/ +#ifdef CONFIG_SBE_PMCC4_NCOMM + /* NCOMM driver uses INTB interrupt to monitor CPLD register */ + pci_write_32 ((u_int32_t *) &ci->reg->glcd, GCD_MAGIC); +#else + /* standard driver POLLS for INTB via CPLD register */ + pci_write_32 ((u_int32_t *) &ci->reg->glcd, GCD_MAGIC | MUSYCC_GCD_INTB_DISABLE); +#endif + + { + int pmsk; + + /* need comet addresses available for determination of hardware build */ + for (portnum = 0; portnum < MUSYCC_NPORTS; portnum++) + { + pi = &ci->port[portnum]; + pi->cometbase = (comet_t *) ((u_int32_t *) (func1 + COMET_OFFSET (portnum))); + pi->reg = (struct musycc_globalr *) ((u_char *) ci->reg + (portnum * 0x800)); + pi->portnum = portnum; + pi->p.portnum = portnum; + pi->openchans = 0; +#ifdef SBE_MAP_DEBUG + printk ("Comet-%d: addr = %p\n", portnum, pi->cometbase); +#endif + } + pmsk = c4_get_portcfg (ci); + switch (pmsk) + { + case 0x1: + ci->max_port = 1; + break; + case 0x3: + ci->max_port = 2; + break; +#if 0 + case 0x7: /* not built, but could be... */ + ci->max_port = 3; + break; +#endif + case 0xf: + ci->max_port = 4; + break; + default: + ci->max_port = 0; + printk (KERN_WARNING "%s: illegal port configuration (%x)\n", ci->devname, pmsk); + return SBE_DRVR_FAIL; + } +#ifdef SBE_MAP_DEBUG + printk (">> %s: c4_get_build - pmsk %x max_port %x\n", ci->devname, pmsk, ci->max_port); +#endif + } + + for (portnum = 0; portnum < ci->max_port; portnum++) + { + pi = &ci->port[portnum]; + pi->up = ci; + pi->sr_last = 0xffffffff; + pi->p.port_mode = CFG_FRAME_SF; /* T1 B8ZS, the default */ + pi->p.portP = (CFG_CLK_PORT_EXTERNAL | CFG_LBO_LH0); /* T1 defaults */ + + OS_sem_init (&pi->sr_sem_busy, SEM_AVAILABLE); + OS_sem_init (&pi->sr_sem_wait, SEM_TAKEN); + + for (j = 0; j < 32; j++) + { + pi->fifomap[j] = -1; + pi->tsm[j] = 0; /* no assignments, all available */ + } + + /* allocate channel structures for this port */ + for (j = 0; j < MUSYCC_NCHANS; j++) + { + ch = OS_kmalloc (sizeof (mch_t)); + if (ch) + { + pi->chan[j] = ch; + ch->state = UNASSIGNED; + ch->up = pi; + ch->gchan = (-1); /* channel assignment not yet known */ + ch->channum = (-1); /* channel assignment not yet known */ + ch->p.card = ci->brdno; + ch->p.port = portnum; + ch->p.channum = (-1); /* channel assignment not yet known */ + ch->p.mode_56k = 0; /* default is 64kbps mode */ + } else + { + printk (KERN_WARNING "%s: failed mch_t malloc, port %d channel %d size %u.\n", + THIS_MODULE->name, portnum, j, (unsigned int) sizeof (mch_t)); + break; + } + } + } + + + { + /* + * Set LEDs through their paces to supply visual proof that LEDs are + * functional and not burnt out nor broken. + * + * YELLOW + GREEN -> OFF. + */ + + pci_write_32 ((u_int32_t *) &ci->cpldbase->leds, + PMCC4_CPLD_LED_GREEN | PMCC4_CPLD_LED_YELLOW); + OS_uwait (750000, "leds"); + pci_write_32 ((u_int32_t *) &ci->cpldbase->leds, PMCC4_CPLD_LED_OFF); + } + + OS_init_watchdog (&ci->wd, (void (*) (void *)) c4_watchdog, ci, WATCHDOG_TIMEOUT); + return SBE_DRVR_SUCCESS; +} + + +/* better be fully setup to handle interrupts when you call this */ + +status_t __init +c4_init2 (ci_t * ci) +{ + status_t ret; + + /* PORT POINT: this routine generates first interrupt */ + if ((ret = musycc_init (ci)) != SBE_DRVR_SUCCESS) + return ret; + +#if 0 + ci->p.framing_type = FRAMING_CBP; + ci->p.h110enable = 1; +#if 0 + ci->p.hypersize = 0; +#else + hyperdummy = 0; +#endif + ci->p.clock = 0; /* Use internal clocking until set to + * external */ + c4_card_set_params (ci, &ci->p); +#endif + OS_start_watchdog (&ci->wd); + return SBE_DRVR_SUCCESS; +} + + +/* This function sets the loopback mode (or clears it, as the case may be). */ + +int +c4_loop_port (ci_t * ci, int portnum, u_int8_t cmd) +{ + comet_t *comet; + volatile u_int32_t loopValue; + + comet = ci->port[portnum].cometbase; + loopValue = pci_read_32 ((u_int32_t *) &comet->mdiag) & COMET_MDIAG_LBMASK; + + if (cmd & COMET_LBCMD_READ) + return loopValue; /* return the read value */ + + if (loopValue != cmd) + { + switch (cmd) + { + case COMET_MDIAG_LINELB: + /* set(SF)loopback down (turn off) code length to 6 bits */ + pci_write_32 ((u_int32_t *) &comet->ibcd_cfg, 0x05); + break; + case COMET_MDIAG_LBOFF: + /* set (SF) loopback up (turn on) code length to 5 bits */ + pci_write_32 ((u_int32_t *) &comet->ibcd_cfg, 0x00); + break; + } + + pci_write_32 ((u_int32_t *) &comet->mdiag, cmd); + if (log_level >= LOG_WARN) + printk ("%s: loopback mode changed to %2x from %2x on Port %d\n", + ci->devname, cmd, loopValue, portnum); + loopValue = pci_read_32 ((u_int32_t *) &comet->mdiag) & COMET_MDIAG_LBMASK; + if (loopValue != cmd) + { + if (log_level >= LOG_ERROR) + printk ("%s: write to loop register failed, unknown state for Port %d\n", + ci->devname, portnum); + } + } else + { + if (log_level >= LOG_WARN) + printk ("%s: loopback already in that mode (%2x)\n", ci->devname, loopValue); + } + return 0; +} + + +/* c4_frame_rw: read or write the comet register specified + * (modifies use of port_param to non-standard use of struct) + * Specifically: + * pp.portnum (one guess) + * pp.port_mode offset of register + * pp.portP write (or not, i.e. read) + * pp.portStatus write value + * BTW: + * pp.portStatus also used to return read value + * pp.portP also used during write, to return old reg value + */ + +status_t +c4_frame_rw (ci_t * ci, struct sbecom_port_param * pp) +{ + comet_t *comet; + volatile u_int32_t data; + + if (pp->portnum >= ci->max_port)/* sanity check */ + return ENXIO; + + comet = ci->port[pp->portnum].cometbase; + data = pci_read_32 ((u_int32_t *) comet + pp->port_mode) & 0xff; + + if (pp->portP) + { /* control says this is a register + * _write_ */ + if (pp->portStatus == data) + printk ("%s: Port %d already that value! Writing again anyhow.\n", + ci->devname, pp->portnum); + pp->portP = (u_int8_t) data; + pci_write_32 ((u_int32_t *) comet + pp->port_mode, + pp->portStatus); + data = pci_read_32 ((u_int32_t *) comet + pp->port_mode) & 0xff; + } + pp->portStatus = (u_int8_t) data; + return 0; +} + + +/* c4_pld_rw: read or write the pld register specified + * (modifies use of port_param to non-standard use of struct) + * Specifically: + * pp.port_mode offset of register + * pp.portP write (or not, i.e. read) + * pp.portStatus write value + * BTW: + * pp.portStatus also used to return read value + * pp.portP also used during write, to return old reg value + */ + +status_t +c4_pld_rw (ci_t * ci, struct sbecom_port_param * pp) +{ + volatile u_int32_t *regaddr; + volatile u_int32_t data; + int regnum = pp->port_mode; + + regaddr = (u_int32_t *) ci->cpldbase + regnum; + data = pci_read_32 ((u_int32_t *) regaddr) & 0xff; + + if (pp->portP) + { /* control says this is a register + * _write_ */ + pp->portP = (u_int8_t) data; + pci_write_32 ((u_int32_t *) regaddr, pp->portStatus); + data = pci_read_32 ((u_int32_t *) regaddr) & 0xff; + } + pp->portStatus = (u_int8_t) data; + return 0; +} + +/* c4_musycc_rw: read or write the musycc register specified + * (modifies use of port_param to non-standard use of struct) + * Specifically: + * mcp.RWportnum port number and write indication bit (0x80) + * mcp.offset offset of register + * mcp.value write value going in and read value returning + */ + +/* PORT POINT: TX Subchannel Map registers are write-only + * areas within the MUSYCC and always return FF */ +/* PORT POINT: regram and reg structures are minorly different and ioctl + * settings are aligned with the struct musycc_globalr{} usage. + * Also, regram is separately allocated shared memory, allocated for each port. + * PORT POINT: access offsets of 0x6000 for Msg Cfg Desc Tbl are for 4-port MUSYCC + * only. (An 8-port MUSYCC has 0x16000 offsets for accessing its upper 4 tables.) + */ + +status_t +c4_musycc_rw (ci_t * ci, struct c4_musycc_param * mcp) +{ + mpi_t *pi; + volatile u_int32_t *dph; /* hardware implemented register */ + u_int32_t *dpr = 0; /* RAM image of registers for group command + * usage */ + int offset = mcp->offset % 0x800; /* group relative address + * offset, mcp->portnum is + * not used */ + int portnum, ramread = 0; + volatile u_int32_t data; + + /* + * Sanity check hardware accessibility. The 0x6000 portion handles port + * numbers associated with Msg Descr Tbl decoding. + */ + portnum = (mcp->offset % 0x6000) / 0x800; + if (portnum >= ci->max_port) + return ENXIO; + pi = &ci->port[portnum]; + if (mcp->offset >= 0x6000) + offset += 0x6000; /* put back in MsgCfgDesc address offset */ + dph = (u_int32_t *) ((u_long) pi->reg + offset); + + /* read of TX are from RAM image, since hardware returns FF */ + dpr = (u_int32_t *) ((u_long) pi->regram + offset); + if (mcp->offset < 0x6000) /* non MsgDesc Tbl accesses might require + * RAM access */ + { + if (offset >= 0x200 && offset < 0x380) + ramread = 1; + if (offset >= 0x10 && offset < 0x200) + ramread = 1; + } + /* read register from RAM or hardware, depending... */ + if (ramread) + { + data = *dpr; + //printk ("c4_musycc_rw: RAM addr %p read data %x (portno %x offset %x RAM ramread %x)\n", dpr, data, portnum, offset, ramread); /* RLD DEBUG */ + } else + { + data = pci_read_32 ((u_int32_t *) dph); + //printk ("c4_musycc_rw: REG addr %p read data %x (portno %x offset %x RAM ramread %x)\n", dph, data, portnum, offset, ramread); /* RLD DEBUG */ + } + + + if (mcp->RWportnum & 0x80) + { /* control says this is a register + * _write_ */ + if (mcp->value == data) + printk ("%s: musycc grp%d already that value! writing again anyhow.\n", + ci->devname, (mcp->RWportnum & 0x7)); + /* write register RAM */ + if (ramread) + *dpr = mcp->value; + /* write hardware register */ + pci_write_32 ((u_int32_t *) dph, mcp->value); + } + mcp->value = data; /* return the read value (or the 'old + * value', if is write) */ + return 0; +} + +status_t +c4_get_port (ci_t * ci, int portnum) +{ + if (portnum >= ci->max_port) /* sanity check */ + return ENXIO; + + SD_SEM_TAKE (&ci->sem_wdbusy, "_wd_"); /* only 1 thru here, per + * board */ + checkPorts (ci); + ci->port[portnum].p.portStatus = (u_int8_t) ci->alarmed[portnum]; + ci->alarmed[portnum] &= 0xdf; + SD_SEM_GIVE (&ci->sem_wdbusy); /* release per-board hold */ + return 0; +} + +status_t +c4_set_port (ci_t * ci, int portnum) +{ + mpi_t *pi; + struct sbecom_port_param *pp; + int e1mode; + u_int8_t clck; + int i; + + if (portnum >= ci->max_port) /* sanity check */ + return ENXIO; + + pi = &ci->port[portnum]; + pp = &ci->port[portnum].p; + e1mode = IS_FRAME_ANY_E1 (pp->port_mode); + if (log_level >= LOG_MONITOR2) + { + printk ("%s: c4_set_port[%d]: entered, e1mode = %x, openchans %d.\n", + ci->devname, + portnum, e1mode, pi->openchans); + } + if (pi->openchans) + return EBUSY; /* group needs initialization only for + * first channel of a group */ + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41) + { + status_t ret; + + if ((ret = c4_wq_port_init (pi))) /* create/init + * workqueue_struct */ + return (ret); + } +#endif + + init_comet (ci, pi->cometbase, pp->port_mode, 1 /* clockmaster == true */ , pp->portP); + clck = pci_read_32 ((u_int32_t *) &ci->cpldbase->mclk) & PMCC4_CPLD_MCLK_MASK; + if (e1mode) + clck |= 1 << portnum; + else + clck &= 0xf ^ (1 << portnum); + + pci_write_32 ((u_int32_t *) &ci->cpldbase->mclk, clck); + pci_write_32 ((u_int32_t *) &ci->cpldbase->mcsr, PMCC4_CPLD_MCSR_IND); + pci_write_32 ((u_int32_t *) &pi->reg->gbp, OS_vtophys (pi->regram)); + + /*********************************************************************/ + /* ERRATA: If transparent mode is used, do not set OOFMP_DISABLE bit */ + /*********************************************************************/ + + pi->regram->grcd = + __constant_cpu_to_le32 (MUSYCC_GRCD_RX_ENABLE | + MUSYCC_GRCD_TX_ENABLE | + MUSYCC_GRCD_OOFMP_DISABLE | + MUSYCC_GRCD_SF_ALIGN | /* per MUSYCC ERRATA, + * for T1 * fix */ + MUSYCC_GRCD_COFAIRQ_DISABLE | + MUSYCC_GRCD_MC_ENABLE | + (MUSYCC_GRCD_POLLTH_32 << MUSYCC_GRCD_POLLTH_SHIFT)); + + pi->regram->pcd = + __constant_cpu_to_le32 ((e1mode ? 1 : 0) | + MUSYCC_PCD_TXSYNC_RISING | + MUSYCC_PCD_RXSYNC_RISING | + MUSYCC_PCD_RXDATA_RISING); + + /* Message length descriptor */ + pi->regram->mld = __constant_cpu_to_le32 (max_mru | (max_mru << 16)); + + /* tsm algorithm */ + for (i = 0; i < 32; i++) + { + + /*** ASSIGNMENT NOTES: ***/ + /*** Group's channel ZERO unavailable if E1. ***/ + /*** Group's channel 16 unavailable if E1 CAS. ***/ + /*** Group's channels 24-31 unavailable if T1. ***/ + + if (((i == 0) && e1mode) || + ((i == 16) && ((pp->port_mode == CFG_FRAME_E1CRC_CAS) || (pp->port_mode == CFG_FRAME_E1CRC_CAS_AMI))) + || ((i > 23) && (!e1mode))) + { + pi->tsm[i] = 0xff; /* make tslot unavailable for this mode */ + } else + { + pi->tsm[i] = 0x00; /* make tslot available for assignment */ + } + } + for (i = 0; i < MUSYCC_NCHANS; i++) + { + pi->regram->ttsm[i] = 0; + pi->regram->rtsm[i] = 0; + } + FLUSH_MEM_WRITE (); + musycc_serv_req (pi, SR_GROUP_INIT | SR_RX_DIRECTION); + musycc_serv_req (pi, SR_GROUP_INIT | SR_TX_DIRECTION); + + musycc_init_mdt (pi); + + pi->group_is_set = 1; + pi->p = *pp; + return 0; +} + + +unsigned int max_int = 0; + +status_t +c4_new_chan (ci_t * ci, int portnum, int channum, void *user) +{ + mpi_t *pi; + mch_t *ch; + int gchan; + + if (c4_find_chan (channum)) /* a new channel shouldn't already exist */ + return EEXIST; + + if (portnum >= ci->max_port) /* sanity check */ + return ENXIO; + + pi = &(ci->port[portnum]); + /* find any available channel within this port */ + for (gchan = 0; gchan < MUSYCC_NCHANS; gchan++) + { + ch = pi->chan[gchan]; + if (ch && ch->state == UNASSIGNED) /* no assignment is good! */ + break; + } + if (gchan == MUSYCC_NCHANS) /* exhausted table, all were assigned */ + return ENFILE; + + ch->up = pi; + + /* NOTE: mch_t already cleared during OS_kmalloc() */ + ch->state = DOWN; + ch->user = user; + ch->gchan = gchan; + ch->channum = channum; /* mark our channel assignment */ + ch->p.channum = channum; +#if 1 + ch->p.card = ci->brdno; + ch->p.port = portnum; +#endif + ch->p.chan_mode = CFG_CH_PROTO_HDLC_FCS16; + ch->p.idlecode = CFG_CH_FLAG_7E; + ch->p.pad_fill_count = 2; + spin_lock_init (&ch->ch_rxlock); + spin_lock_init (&ch->ch_txlock); + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41) + { + status_t ret; + + if ((ret = c4_wk_chan_init (pi, ch))) + return ret; + } +#endif + + /* save off interface assignments which bound a board */ + if (ci->first_if == 0) /* first channel registered is assumed to + * be the lowest channel */ + { + ci->first_if = ci->last_if = user; + ci->first_channum = ci->last_channum = channum; + } else + { + ci->last_if = user; + if (ci->last_channum < channum) /* higher number channel found */ + ci->last_channum = channum; + } + return 0; +} + +status_t +c4_del_chan (int channum) +{ + mch_t *ch; + + if (!(ch = c4_find_chan (channum))) + return ENOENT; + if (ch->state == UP) + musycc_chan_down ((ci_t *) 0, channum); + ch->state = UNASSIGNED; + ch->gchan = (-1); + ch->channum = (-1); + ch->p.channum = (-1); + return 0; +} + +status_t +c4_del_chan_stats (int channum) +{ + mch_t *ch; + + if (!(ch = c4_find_chan (channum))) + return ENOENT; + + memset (&ch->s, 0, sizeof (struct sbecom_chan_stats)); + return 0; +} + + +status_t +c4_set_chan (int channum, struct sbecom_chan_param * p) +{ + mch_t *ch; + int i, x = 0; + + if (!(ch = c4_find_chan (channum))) + return ENOENT; + +#if 1 + if (ch->p.card != p->card || + ch->p.port != p->port || + ch->p.channum != p->channum) + return EINVAL; +#endif + + if (!(ch->up->group_is_set)) + { + return EIO; /* out of order, SET_PORT command + * required prior to first group's + * SET_CHAN command */ + } + /* + * Check for change of parameter settings in order to invoke closing of + * channel prior to hardware poking. + */ + + if (ch->p.status != p->status || ch->p.chan_mode != p->chan_mode || + ch->p.data_inv != p->data_inv || ch->p.intr_mask != p->intr_mask || + ch->txd_free < ch->txd_num) /* to clear out queued messages */ + x = 1; /* we have a change requested */ + for (i = 0; i < 32; i++) /* check for timeslot mapping changes */ + if (ch->p.bitmask[i] != p->bitmask[i]) + x = 1; /* we have a change requested */ + ch->p = *p; + if (x && (ch->state == UP)) /* if change request and channel is + * open... */ + { + status_t ret; + + if ((ret = musycc_chan_down ((ci_t *) 0, channum))) + return ret; + if ((ret = c4_chan_up (ch->up->up, channum))) + return ret; + sd_enable_xmit (ch->user); /* re-enable to catch flow controlled + * channel */ + } + return 0; +} + + +status_t +c4_get_chan (int channum, struct sbecom_chan_param * p) +{ + mch_t *ch; + + if (!(ch = c4_find_chan (channum))) + return ENOENT; + *p = ch->p; + return 0; +} + +status_t +c4_get_chan_stats (int channum, struct sbecom_chan_stats * p) +{ + mch_t *ch; + + if (!(ch = c4_find_chan (channum))) + return ENOENT; + *p = ch->s; + p->tx_pending = atomic_read (&ch->tx_pending); + return 0; +} + +STATIC int +c4_fifo_alloc (mpi_t * pi, int chan, int *len) +{ + int i, l = 0, start = 0, max = 0, maxstart = 0; + + for (i = 0; i < 32; i++) + { + if (pi->fifomap[i] != -1) + { + l = 0; + start = i + 1; + continue; + } + ++l; + if (l > max) + { + max = l; + maxstart = start; + } + if (max == *len) + break; + } + if (max != *len) + { + if (log_level >= LOG_WARN) + printk ( + "%s: wanted to allocate %d fifo space, but got only %d\n", + pi->up->devname, *len, max); + *len = max; + } + if (log_level >= LOG_DEBUG) + printk ("%s: allocated %d fifo at %d for channel %d/%d\n", + pi->up->devname, max, start, chan, pi->p.portnum); + for (i = maxstart; i < (maxstart + max); i++) + pi->fifomap[i] = chan; + return start; +} + +void +c4_fifo_free (mpi_t * pi, int chan) +{ + int i; + + if (log_level >= LOG_DEBUG) + printk ("%s: deallocated fifo for channel %d/%d\n", + pi->up->devname, chan, pi->p.portnum); + for (i = 0; i < 32; i++) + if (pi->fifomap[i] == chan) + pi->fifomap[i] = -1; +} + + +status_t +c4_chan_up (ci_t * ci, int channum) +{ + mpi_t *pi; + mch_t *ch; + struct mbuf *m; + struct mdesc *md; + int nts, nbuf, txnum, rxnum; + int addr, i, j, gchan; + u_int32_t tmp; /* for optimizing conversion across BE + * platform */ + + if (!(ch = c4_find_chan (channum))) + return ENOENT; + if (ch->state == UP) + { + if (log_level >= LOG_MONITOR) + printk ("%s: channel already UP, graceful early exit\n", ci->devname); + return 0; + } + pi = ch->up; + gchan = ch->gchan; + /* find nts ('number of timeslots') */ + nts = 0; + for (i = 0; i < 32; i++) + { + if (ch->p.bitmask[i] & pi->tsm[i]) + { + if (1 || log_level >= LOG_WARN) + { + printk ("%s: c4_chan_up[%d] EINVAL (attempt to cfg in-use or unavailable TimeSlot[%d])\n", + ci->devname, channum, i); + printk ("+ ask4 %x, currently %x\n", ch->p.bitmask[i], pi->tsm[i]); + } + return EINVAL; + } + for (j = 0; j < 8; j++) + if (ch->p.bitmask[i] & (1 << j)) + nts++; + } + + nbuf = nts / 8 ? nts / 8 : 1; + if (!nbuf) + { + /* if( log_level >= LOG_WARN) */ + printk ("%s: c4_chan_up[%d] ENOBUFS (no TimeSlots assigned)\n", ci->devname, channum); + return ENOBUFS; /* this should not happen */ + } + addr = c4_fifo_alloc (pi, gchan, &nbuf); + ch->state = UP; + + /* Setup the Time Slot Map */ + musycc_update_timeslots (pi); + + /* ch->tx_limit = nts; */ + ch->s.tx_pending = 0; + + /* Set Channel Configuration Descriptors */ + { + u_int32_t ccd; + + ccd = musycc_chan_proto (ch->p.chan_mode) << MUSYCC_CCD_PROTO_SHIFT; + if ((ch->p.chan_mode == CFG_CH_PROTO_ISLP_MODE) || + (ch->p.chan_mode == CFG_CH_PROTO_TRANS)) + { + ccd |= MUSYCC_CCD_FCS_XFER; /* Non FSC Mode */ + } + ccd |= 2 << MUSYCC_CCD_MAX_LENGTH; /* Select second MTU */ + ccd |= ch->p.intr_mask; + ccd |= addr << MUSYCC_CCD_BUFFER_LOC; + if (ch->p.chan_mode == CFG_CH_PROTO_TRANS) + ccd |= (nbuf) << MUSYCC_CCD_BUFFER_LENGTH; + else + ccd |= (nbuf - 1) << MUSYCC_CCD_BUFFER_LENGTH; + + if (ch->p.data_inv & CFG_CH_DINV_TX) + ccd |= MUSYCC_CCD_INVERT_DATA; /* Invert data */ + pi->regram->tcct[gchan] = cpu_to_le32 (ccd); + + if (ch->p.data_inv & CFG_CH_DINV_RX) + ccd |= MUSYCC_CCD_INVERT_DATA; /* Invert data */ + else + ccd &= ~MUSYCC_CCD_INVERT_DATA; /* take away data inversion */ + pi->regram->rcct[gchan] = cpu_to_le32 (ccd); + FLUSH_MEM_WRITE (); + } + + /* Reread the Channel Configuration Descriptor for this channel */ + musycc_serv_req (pi, SR_CHANNEL_CONFIG | SR_RX_DIRECTION | gchan); + musycc_serv_req (pi, SR_CHANNEL_CONFIG | SR_TX_DIRECTION | gchan); + + /* + * Figure out how many buffers we want. If the customer has changed from + * the defaults, then use the changed values. Otherwise, use Transparent + * mode's specific minimum default settings. + */ + if (ch->p.chan_mode == CFG_CH_PROTO_TRANS) + { + if (max_rxdesc_used == max_rxdesc_default) /* use default setting */ + max_rxdesc_used = MUSYCC_RXDESC_TRANS; + if (max_txdesc_used == max_txdesc_default) /* use default setting */ + max_txdesc_used = MUSYCC_TXDESC_TRANS; + } + /* + * Increase counts when hyperchanneling, since this implies an increase + * in throughput per channel + */ + rxnum = max_rxdesc_used + (nts / 4); + txnum = max_txdesc_used + (nts / 4); + +#if 0 + /* DEBUG INFO */ + if (log_level >= LOG_MONITOR) + printk ("%s: mode %x rxnum %d (rxused %d def %d) txnum %d (txused %d def %d)\n", + ci->devname, ch->p.chan_mode, + rxnum, max_rxdesc_used, max_rxdesc_default, + txnum, max_txdesc_used, max_txdesc_default); +#endif + + ch->rxd_num = rxnum; + ch->txd_num = txnum; + ch->rxix_irq_srv = 0; + + ch->mdr = OS_kmalloc (sizeof (struct mdesc) * rxnum); + ch->mdt = OS_kmalloc (sizeof (struct mdesc) * txnum); + if (ch->p.chan_mode == CFG_CH_PROTO_TRANS) + tmp = __constant_cpu_to_le32 (max_mru | EOBIRQ_ENABLE); + else + tmp = __constant_cpu_to_le32 (max_mru); + + for (i = 0, md = ch->mdr; i < rxnum; i++, md++) + { + if (i == (rxnum - 1)) + { + md->snext = &ch->mdr[0];/* wrapness */ + } else + { + md->snext = &ch->mdr[i + 1]; + } + md->next = cpu_to_le32 (OS_vtophys (md->snext)); + + if (!(m = OS_mem_token_alloc (max_mru))) + { + if (log_level >= LOG_MONITOR) + printk ("%s: c4_chan_up[%d] - token alloc failure, size = %d.\n", ci->devname, channum, max_mru); + goto errfree; + } + md->mem_token = m; + md->data = cpu_to_le32 (OS_vtophys (OS_mem_token_data (m))); + md->status = tmp | MUSYCC_RX_OWNED; /* MUSYCC owns RX descriptor ** + * CODING NOTE: + * MUSYCC_RX_OWNED = 0 so no + * need to byteSwap */ + } + + for (i = 0, md = ch->mdt; i < txnum; i++, md++) + { + md->status = HOST_TX_OWNED; /* Host owns TX descriptor ** CODING + * NOTE: HOST_TX_OWNED = 0 so no need to + * byteSwap */ + md->mem_token = 0; + md->data = 0; + if (i == (txnum - 1)) + { + md->snext = &ch->mdt[0];/* wrapness */ + } else + { + md->snext = &ch->mdt[i + 1]; + } + md->next = cpu_to_le32 (OS_vtophys (md->snext)); + } + ch->txd_irq_srv = ch->txd_usr_add = &ch->mdt[0]; + ch->txd_free = txnum; + ch->tx_full = 0; + ch->txd_required = 0; + + /* Configure it into the chip */ + tmp = cpu_to_le32 (OS_vtophys (&ch->mdt[0])); + pi->regram->thp[gchan] = tmp; + pi->regram->tmp[gchan] = tmp; + + tmp = cpu_to_le32 (OS_vtophys (&ch->mdr[0])); + pi->regram->rhp[gchan] = tmp; + pi->regram->rmp[gchan] = tmp; + + /* Activate the Channel */ + FLUSH_MEM_WRITE (); + if (ch->p.status & RX_ENABLED) + { +#ifdef RLD_TRANS_DEBUG + printk ("++ c4_chan_up() CHAN RX ACTIVATE: chan %d\n", ch->channum); +#endif + ch->ch_start_rx = 0; /* we are restarting RX... */ + musycc_serv_req (pi, SR_CHANNEL_ACTIVATE | SR_RX_DIRECTION | gchan); + } + if (ch->p.status & TX_ENABLED) + { +#ifdef RLD_TRANS_DEBUG + printk ("++ c4_chan_up() CHAN TX ACTIVATE: chan %d \n", ch->channum); +#endif + ch->ch_start_tx = CH_START_TX_1ST; /* we are delaying start + * until receipt from user of + * first packet to transmit. */ + } + ch->status = ch->p.status; + pi->openchans++; + return 0; + +errfree: + while (i > 0) + { + /* Don't leak all the previously allocated mbufs in this loop */ + i--; + OS_mem_token_free (ch->mdr[i].mem_token); + } + OS_kfree (ch->mdt); + ch->mdt = 0; + ch->txd_num = 0; + OS_kfree (ch->mdr); + ch->mdr = 0; + ch->rxd_num = 0; + ch->state = DOWN; + return ENOBUFS; +} + +/* stop the hardware from servicing & interrupting */ + +void +c4_stopwd (ci_t * ci) +{ + OS_stop_watchdog (&ci->wd); + SD_SEM_TAKE (&ci->sem_wdbusy, "_stop_"); /* ensure WD not running */ + SD_SEM_GIVE (&ci->sem_wdbusy); +} + + +void +sbecom_get_brdinfo (ci_t * ci, struct sbe_brd_info * bip, u_int8_t *bsn) +{ + char *np; + u_int32_t sn = 0; + int i; + + bip->brdno = ci->brdno; /* our board number */ + bip->brd_id = ci->brd_id; + bip->brd_hdw_id = ci->hdw_bid; + bip->brd_chan_cnt = MUSYCC_NCHANS * ci->max_port; /* number of channels + * being used */ + bip->brd_port_cnt = ci->max_port; /* number of ports being used */ + bip->brd_pci_speed = BINFO_PCI_SPEED_unk; /* PCI speed not yet + * determinable */ + + if (ci->first_if) + { +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + np = (char *) hdlc_to_name (ci->first_if); +#else + { + struct net_device *dev; + + dev = (struct net_device *) ci->first_if; + np = (char *) dev->name; + } +#endif + strncpy (bip->first_iname, np, CHNM_STRLEN - 1); + } else + strcpy (bip->first_iname, ""); + if (ci->last_if) + { +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + np = (char *) hdlc_to_name (ci->last_if); +#else + { + struct net_device *dev; + + dev = (struct net_device *) ci->last_if; + np = (char *) dev->name; + } +#endif + strncpy (bip->last_iname, np, CHNM_STRLEN - 1); + } else + strcpy (bip->last_iname, ""); + + if (bsn) + { + for (i = 0; i < 3; i++) + { + bip->brd_mac_addr[i] = *bsn++; + } + for (; i < 6; i++) + { + bip->brd_mac_addr[i] = *bsn; + sn = (sn << 8) | *bsn++; + } + } else + { + for (i = 0; i < 6; i++) + bip->brd_mac_addr[i] = 0; + } + bip->brd_sn = sn; +} + + +status_t +c4_get_iidinfo (ci_t * ci, struct sbe_iid_info * iip) +{ + struct net_device *dev; + char *np; + + if (!(dev = getuserbychan (iip->channum))) + return ENOENT; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + np = (char *) hdlc_to_name (dev_to_hdlc (dev)); +#else + np = dev->name; +#endif + strncpy (iip->iname, np, CHNM_STRLEN - 1); + return 0; +} + + +#ifdef CONFIG_SBE_PMCC4_NCOMM +void (*nciInterrupt[MAX_BOARDS][4]) (void); +extern void wanpmcC4T1E1_hookInterrupt (int cardID, int deviceID, void *handler); + +void +wanpmcC4T1E1_hookInterrupt (int cardID, int deviceID, void *handler) +{ + if (cardID < MAX_BOARDS) /* sanity check */ + nciInterrupt[cardID][deviceID] = handler; +} + +irqreturn_t +c4_ebus_intr_th_handler (void *devp) +{ + ci_t *ci = (ci_t *) devp; + volatile u_int32_t ists; + int handled = 0; + int brdno; + + /* which COMET caused the interrupt */ + brdno = ci->brdno; + ists = pci_read_32 ((u_int32_t *) &ci->cpldbase->intr); + if (ists & PMCC4_CPLD_INTR_CMT_1) + { + handled = 0x1; + if (nciInterrupt[brdno][0] != NULL) + (*nciInterrupt[brdno][0]) (); + } + if (ists & PMCC4_CPLD_INTR_CMT_2) + { + handled |= 0x2; + if (nciInterrupt[brdno][1] != NULL) + (*nciInterrupt[brdno][1]) (); + } + if (ists & PMCC4_CPLD_INTR_CMT_3) + { + handled |= 0x4; + if (nciInterrupt[brdno][2] != NULL) + (*nciInterrupt[brdno][2]) (); + } + if (ists & PMCC4_CPLD_INTR_CMT_4) + { + handled |= 0x8; + if (nciInterrupt[brdno][3] != NULL) + (*nciInterrupt[brdno][3]) (); + } +#if 0 + /*** Test code just de-implements the asserted interrupt. Alternate + vendor will supply COMET interrupt handling code herein or such. + ***/ + pci_write_32 ((u_int32_t *) &ci->reg->glcd, GCD_MAGIC | MUSYCC_GCD_INTB_DISABLE); +#endif + +#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,20) + return; +#else + return IRQ_RETVAL (handled); +#endif +} + + +unsigned long +wanpmcC4T1E1_getBaseAddress (int cardID, int deviceID) +{ + ci_t *ci; + unsigned long base = 0; + + ci = c4_list; + while (ci) + { + if (ci->brdno == cardID) /* found valid device */ + { + if (deviceID < ci->max_port) /* comet is supported */ + base = ((unsigned long) ci->port[deviceID].cometbase); + break; + } + ci = ci->next; /* next board, if any */ + } + return (base); +} + +#endif /*** CONFIG_SBE_PMCC4_NCOMM ***/ + + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/pmcc4_ioctls.h b/drivers/staging/cxt1e1/pmcc4_ioctls.h new file mode 100644 index 0000000..6b8d656 --- /dev/null +++ b/drivers/staging/cxt1e1/pmcc4_ioctls.h @@ -0,0 +1,81 @@ +/* RCSid: $Header: /home/rickd/projects/pmcc4/include/pmcc4_ioctls.h,v 2.0 2005/09/28 00:10:09 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_PMCC4_IOCTLS_H_ +#define _INC_PMCC4_IOCTLS_H_ + +/*----------------------------------------------------------------------------- + * pmcc4_ioctls.h - + * + * Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 2.0 $ + * Last changed on $Date: 2005/09/28 00:10:09 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: pmcc4_ioctls.h,v $ + * Revision 2.0 2005/09/28 00:10:09 rickd + * Add GNU license info. Switch Ioctls to sbe_ioc.h usage. + * + * Revision 1.2 2005/04/28 23:43:03 rickd + * Add RCS tracking heading. + * + *----------------------------------------------------------------------------- + */ + +#include "sbew_ioc.h" + +enum +{ + // C4_GET_PORT = 0, + // C4_SET_PORT, + // C4_GET_CHAN, + // C4_SET_CHAN, + C4_DEL_CHAN = 0, + // C4_CREATE_CHAN, + // C4_GET_CHAN_STATS, + // C4_RESET, + // C4_DEBUG, + C4_RESET_STATS, + C4_LOOP_PORT, + C4_RW_FRMR, + C4_RW_MSYC, + C4_RW_PLD +}; + +#define C4_GET_PORT SBE_IOC_PORT_GET +#define C4_SET_PORT SBE_IOC_PORT_SET +#define C4_GET_CHAN SBE_IOC_CHAN_GET +#define C4_SET_CHAN SBE_IOC_CHAN_SET +// #define C4_DEL_CHAN XXX +#define C4_CREATE_CHAN SBE_IOC_CHAN_NEW +#define C4_GET_CHAN_STATS SBE_IOC_CHAN_GET_STAT +#define C4_RESET SBE_IOC_RESET_DEV +#define C4_DEBUG SBE_IOC_LOGLEVEL +// #define C4_RESET_STATS XXX +// #define C4_LOOP_PORT XXX +// #define C4_RW_FRMR XXX +// #define C4_RW_MSYC XXX +// #define C4_RW_PLD XXX + +struct c4_chan_stats_wrap +{ + int channum; + struct sbecom_chan_stats stats; +}; + +#endif /* _INC_PMCC4_IOCTLS_H_ */ diff --git a/drivers/staging/cxt1e1/pmcc4_private.h b/drivers/staging/cxt1e1/pmcc4_private.h new file mode 100644 index 0000000..0ae18c4 --- /dev/null +++ b/drivers/staging/cxt1e1/pmcc4_private.h @@ -0,0 +1,295 @@ +#ifndef _INC_PMCC4_PRIVATE_H_ +#define _INC_PMCC4_PRIVATE_H_ + +/*----------------------------------------------------------------------------- + * pmcc4_private.h - + * + * Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + + +#include +#include +#include +#include /* support for tasklets */ +#include /* support for timer */ +#include +#include + +#include "libsbew.h" +#include "pmcc4_defs.h" +#include "pmcc4_cpld.h" +#include "musycc.h" +#include "sbe_promformat.h" +#include "comet.h" + + +/* driver state */ +#define SBE_DRVR_INIT 0x0 +#define SBE_DRVR_AVAILABLE 0x69734F4E +#define SBE_DRVR_DOWN 0x1 + +/****************************************************************************** + * MUSYCC Message Descriptor - coupled to hardware implementation, the first + * three u_int32 must not be reordered. + */ + +struct mdesc +{ + volatile u_int32_t status; /* Buffer Descriptor */ + u_int32_t data; /* Data Pointer */ + u_int32_t next; /* MUSYCC view of Next Pointer */ + void *mem_token; /* Data */ + struct mdesc *snext; +}; + + +/************************************************************************* + * Private driver data structures, internal use only. + */ + +struct c4_chan_info +{ + int gchan; /* channel number within group/port 0-31 */ + int channum; /* absolute channel number 0-128 */ + u_int8_t status; +#define TX_RECOVERY_MASK 0x0f +#define TX_ONR_RECOVERY 0x01 +#define TX_BUFF_RECOVERY 0x02 +#define RX_RECOVERY_MASK 0xf0 +#define RX_ONR_RECOVERY 0x10 + + unsigned char ch_start_rx; +#define CH_START_RX_NOW 1 +#define CH_START_RX_ONR 2 +#define CH_START_RX_BUF 3 + + unsigned char ch_start_tx; +#define CH_START_TX_1ST 1 +#define CH_START_TX_ONR 2 +#define CH_START_TX_BUF 3 + + char tx_full; /* boolean */ + short txd_free; /* count of TX Desc available */ + short txd_required; /* count of TX Desc needed by mesg */ + unsigned short rxd_num; /* must support range up to 2000 */ + unsigned short txd_num; /* must support range up to 1000 */ + int rxix_irq_srv; + + enum + { + UNASSIGNED, /* AVAILABLE, NOTINUSE */ + DOWN, /* ASSIGNED, NOTINUSE */ + UP /* ASSIGNED and INUSE */ + } state; + + struct c4_port_info *up; + void *user; + + struct work_struct ch_work; + struct mdesc *mdt; + struct mdesc *mdr; + struct mdesc *txd_irq_srv; + struct mdesc *txd_usr_add; + +#if 0 + /* + * FUTURE CODE MIGHT SEPARATE TIMESLOT MAP SETUPS INTO SINGLE IOCTL and + * REMOVE MAPS FROM CHANNEL PARAMETER STRUCTURE + */ + /* + * each byte in bitmask below represents one timeslot (bitmask[0] is for + * timeslot 0 and so on), each bit in the byte selects timeslot bits for + * this channel (0xff - whole timeslot, 0x7f - 56kbps mode) + */ + + u_int8_t ts_bitmask[32]; +#endif + spinlock_t ch_rxlock; + spinlock_t ch_txlock; + atomic_t tx_pending; + + struct sbecom_chan_stats s; + struct sbecom_chan_param p; +}; +typedef struct c4_chan_info mch_t; + +struct c4_port_info +{ + + struct musycc_globalr *reg; + struct musycc_groupr *regram; + void *regram_saved; /* Original malloc value may have non-2KB + * boundary. Need to save for use when + * freeing. */ + comet_t *cometbase; + struct sbe_card_info *up; + + /* + * The workqueue is used for TX restart of ONR'd channels when in + * Transparent mode. + */ + + struct workqueue_struct *wq_port; /* chan restart work queue */ + struct semaphore sr_sem_busy; /* service request exclusion + * semaphore */ + struct semaphore sr_sem_wait; /* service request handshake + * semaphore */ + u_int32_t sr_last; + short openchans; + char portnum; + char group_is_set; /* GROUP_INIT command issued to MUSYCC, + * otherwise SET_CHAN Ioctl fails */ + + mch_t *chan[MUSYCC_NCHANS]; + struct sbecom_port_param p; + + /* + * The MUSYCC timeslot mappings are maintained within the driver and are + * modified and reloaded as each of a group's channels are configured. + */ + u_int8_t tsm[32]; /* tsm (time slot map) */ + int fifomap[32]; +}; +typedef struct c4_port_info mpi_t; + + +#define COMET_OFFSET(x) (0x80000+(x)*0x10000) +#define EEPROM_OFFSET 0xC0000 +#define ISPLD_OFFSET 0xD0000 + +/* iSPLD control chip registers */ +#define ISPLD_MCSR 0x0 +#define ISPLD_MCLK 0x1 +#define ISPLD_LEDS 0x2 +#define ISPLD_INTR 0x3 +#define ISPLD_MAX 0x3 + +struct sbe_card_info +{ + struct musycc_globalr *reg; + struct musycc_groupr *regram; + u_int32_t *iqd_p; /* pointer to dword aligned interrupt queue + * descriptors */ + void *iqd_p_saved; /* Original malloc value may have non-dword + * aligned boundary. Need to save for use + * when freeing. */ + unsigned int iqp_headx, iqp_tailx; + + struct semaphore sem_wdbusy;/* watchdog exclusion semaphore */ + struct watchdog wd; /* statically allocated watchdog structure */ + atomic_t bh_pending; /* bh queued, but not yet running */ + u_int32_t brd_id; /* unique PCI ID */ + u_int16_t hdw_bid; /* on/board hardware ID */ + unsigned short wdcount; + unsigned char max_port; + unsigned char brdno; /* our board number */ + unsigned char wd_notify; +#define WD_NOTIFY_1TX 1 +#define WD_NOTIFY_BUF 2 +#define WD_NOTIFY_ONR 4 + enum /* state as regards interrupt processing */ + { + C_INIT, /* of-board-address not configured or are in + * process of being removed, don't access + * hardware */ + C_IDLE, /* off-board-addresses are configured, but + * don't service interrupts, just clear them + * from hardware */ + C_RUNNING /* life is good, service away */ + } state; + + struct sbe_card_info *next; + u_int32_t *eeprombase; /* mapped address of board's EEPROM */ + c4cpld_t *cpldbase; /* mapped address of board's CPLD hardware */ + char *release; /* SBE ID string w/in sbeRelease.c */ + void *hdw_info; +#ifdef CONFIG_PROC_FS + struct proc_dir_entry *dir_dev; +#endif + + /* saved off interface assignments which bound a board */ + hdlc_device *first_if; + hdlc_device *last_if; + short first_channum, last_channum; + + struct intlog + { + u_int32_t this_status_new; + u_int32_t last_status_new; + u_int32_t drvr_intr_thcount; + u_int32_t drvr_intr_bhcount; + u_int32_t drvr_int_failure; + } intlog; + + mpi_t port[MUSYCC_NPORTS]; + char devname[SBE_IFACETMPL_SIZE + 1]; + atomic_t tx_pending; + u_int32_t alarmed[4]; /* dpm211 */ + +#if defined(SBE_ISR_TASKLET) + struct tasklet_struct ci_musycc_isr_tasklet; +#elif defined(SBE_ISR_IMMEDIATE) + struct tq_struct ci_musycc_isr_tq; +#endif +}; +typedef struct sbe_card_info ci_t; + +struct s_hdw_info +{ + u_int8_t pci_busno; + u_int8_t pci_slot; + u_int8_t pci_pin[2]; + u_int8_t revid[2]; + u_int8_t mfg_info_sts; +#define EEPROM_OK 0x00 +#define EEPROM_CRCERR 0x01 + char promfmt; /* prom type, from sbe_promformat.h */ + + char devname[SBE_IFACETMPL_SIZE]; + struct pci_bus *bus; + struct net_device *ndev; + struct pci_dev *pdev[2]; + + unsigned long addr[2]; + unsigned long addr_mapped[2]; + unsigned long len[2]; + + union + { + char data[128]; + FLD_TYPE1 pft1; /* prom field, type #1 */ + FLD_TYPE2 pft2; /* prom field, type #2 */ + } mfg_info; +}; +typedef struct s_hdw_info hdw_info_t; + +/*****************************************************************/ + +struct c4_priv +{ + int channum; + struct sbe_card_info *ci; +}; + + +/*****************************************************************/ + +extern ci_t *c4_list; + +mch_t *c4_find_chan (int); +int c4_set_chan (int channum, struct sbecom_chan_param *); +int c4_get_chan (int channum, struct sbecom_chan_param *); +int c4_get_chan_stats (int channum, struct sbecom_chan_stats *); + +#endif /* _INC_PMCC4_PRIVATE_H_ */ diff --git a/drivers/staging/cxt1e1/pmcc4_sysdep.h b/drivers/staging/cxt1e1/pmcc4_sysdep.h new file mode 100644 index 0000000..697f194 --- /dev/null +++ b/drivers/staging/cxt1e1/pmcc4_sysdep.h @@ -0,0 +1,62 @@ +#ifndef _INC_PMCC4_SYSDEP_H_ +#define _INC_PMCC4_SYSDEP_H_ + +/*----------------------------------------------------------------------------- + * pmcc4_sysdep.h - + * + * Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +/* reduce multiple autoconf entries to a single definition */ + +#ifdef CONFIG_SBE_PMCC4_HDLC_V7_MODULE +#undef CONFIG_SBE_PMCC4_HDLC_V7 +#define CONFIG_SBE_PMCC4_HDLC_V7 1 +#endif + +#ifdef CONFIG_SBE_PMCC4_NCOMM_MODULE +#undef CONFIG_SBE_PMCC4_NCOMM +#define CONFIG_SBE_PMCC4_NCOMM 1 +#endif + + +/* FLUSH MACROS - if using ioremap_nocache(), then these can be NOOPS, + * otherwise a memory barrier needs to be inserted. + */ + +#define FLUSH_PCI_READ() rmb() +#define FLUSH_PCI_WRITE() wmb() +#define FLUSH_MEM_READ() rmb() +#define FLUSH_MEM_WRITE() wmb() + + +/* + * System dependent callbacks routines, not inlined... + * For inlined system dependent routines, see include/sbecom_inlinux_linux.h + */ + +/* + * passes received memory token back to the system, is parameter from + * sd_new_chan() used to create the channel which the data arrived on + */ + +void sd_recv_consume(void *token, size_t len, void *user); + +void sd_disable_xmit (void *user); +void sd_enable_xmit (void *user); +int sd_line_is_ok (void *user); +void sd_line_is_up (void *user); +void sd_line_is_down (void *user); +int sd_queue_stopped (void *user); + +#endif /*** _INC_PMCC4_SYSDEP_H_ ***/ diff --git a/drivers/staging/cxt1e1/sbe_bid.h b/drivers/staging/cxt1e1/sbe_bid.h new file mode 100644 index 0000000..1f49b40 --- /dev/null +++ b/drivers/staging/cxt1e1/sbe_bid.h @@ -0,0 +1,61 @@ +/* + * $Id: sbe_bid.h,v 1.0 2005/09/28 00:10:09 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_SBEBID_H_ +#define _INC_SBEBID_H_ + +/*----------------------------------------------------------------------------- + * sbe_bid.h - + * + * Copyright (C) 2004-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + * + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.0 $ + * Last changed on $Date: 2005/09/28 00:10:09 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: sbe_bid.h,v $ + * Revision 1.0 2005/09/28 00:10:09 rickd + * Initial revision + * + *----------------------------------------------------------------------------- + */ + +#define SBE_BID_REG 0x00000000 /* Board ID Register */ + +#define SBE_BID_256T3_E1 0x46 /* SBE wanPTMC-256T3 (E1 Version) */ +#define SBE_BID_256T3_T1 0x42 /* SBE wanPTMC-256T3 (T1 Version) */ +#define SBE_BID_2T3E3 0x43 /* SBE wanPMC-2T3E3 */ +#define SBE_BID_C1T3 0x45 /* SBE wanPMC-C1T3 */ +#define SBE_BID_C24TE1 0x47 /* SBE wanPTMC-C24TE1 */ +#define SBE_BID_C24TE1_RTM_24 0x48 /* C24TE1 RTM (24 Port) */ +#define SBE_BID_C24TE1_RTM_12 0x49 /* C24TE1 RTM (12 Port) */ +#define SBE_BID_C24TE1_RTM_12DSU 0x4A /* C24TE1 RTM (12 Port/DSU) */ +#define SBE_BID_C24TE1_RTM_T3 0x4B /* C24TE1 RTM (T3) */ +#define SBE_BID_C4T1E1 0x41 /* SBE wanPTMC-C4T1E1 */ +#define SBE_BID_HC4T1E1 0x44 /* SBE wanADAPT-HC4T1E1 */ + +/* bogus temporary usage values */ +#define SBE_BID_PMC_C4T1E1 0xC4 /* SBE wanPMC-C4T1E1 (4 Port) */ +#define SBE_BID_PMC_C2T1E1 0xC2 /* SBE wanPMC-C2T1E1 (2 Port) */ +#define SBE_BID_PMC_C1T1E1 0xC1 /* SBE wanPMC-C1T1E1 (1 Port) */ +#define SBE_BID_PCI_C4T1E1 0x04 /* SBE wanPCI-C4T1E1 (4 Port) */ +#define SBE_BID_PCI_C2T1E1 0x02 /* SBE wanPCI-C2T1E1 (2 Port) */ +#define SBE_BID_PCI_C1T1E1 0x01 /* SBE wanPCI-C1T1E1 (1 Port) */ + +#endif /*** _INC_SBEBID_H_ ***/ diff --git a/drivers/staging/cxt1e1/sbe_promformat.h b/drivers/staging/cxt1e1/sbe_promformat.h new file mode 100644 index 0000000..746f81b --- /dev/null +++ b/drivers/staging/cxt1e1/sbe_promformat.h @@ -0,0 +1,157 @@ +/* + * $Id: sbe_promformat.h,v 2.2 2005/09/28 00:10:09 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_SBE_PROMFORMAT_H_ +#define _INC_SBE_PROMFORMAT_H_ + +/*----------------------------------------------------------------------------- + * sbe_promformat.h - Contents of seeprom used by dvt and manufacturing tests + * + * Copyright (C) 2002-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + * + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 2.2 $ + * Last changed on $Date: 2005/09/28 00:10:09 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: sbe_promformat.h,v $ + * Revision 2.2 2005/09/28 00:10:09 rickd + * Add EEPROM sample from C4T1E1 board. + * + * Revision 2.1 2005/05/04 17:18:24 rickd + * Initial CI. + * + *----------------------------------------------------------------------------- + */ + + +/*** + * PMCC4 SAMPLE EEPROM IMAGE + * + * eeprom[00]: 01 11 76 07 01 00 a0 d6 + * eeprom[08]: 22 34 56 3e 5b c1 1c 3e + * eeprom[16]: 5b e1 b6 00 00 00 01 00 + * eeprom[24]: 00 08 46 d3 7b 5e a8 fb + * eeprom[32]: f7 ef df bf 7f 55 00 01 + * eeprom[40]: 02 04 08 10 20 40 80 ff + * eeprom[48]: fe fd fb f7 ef df bf 7f + * + ***/ + + +/*------------------------------------------------------------------------ + * Type 1 Format + * byte: + * 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 + * ------------------------------------------------------------------------- + * 01 11 76 SS SS 00 0A D6 + * SBE SUB SERIAL # (BCD) (time_t) (time_t) + * ID VENDOR (format) (format) + * + * 19 20 21 22 23 24 25 26 + * Heat Run Heat Run + * Iterations Errors + *------------------------------------------------------------------------ + * + * + * + * Type 2 Format - Added length, CRC in fixed position + * byte: + * 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 + * ------------------------------------------------------------------------- + * 02 00 1A CC CC CC CC 11 76 07 03 00 0A D6 + * Payload SBE Crc32 SUB System System SERIAL/MAC + * Length VENDOR ID ID + * + * 17 18 19 20 21 22 23 24 25 26 27 28 29 39 31 32 + * -------------------------------------------------------------------------- + * Heat Run Heat Run + * (time_t) (time_t) Iterations Errors + * + */ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +#define STRUCT_OFFSET(type, symbol) ((long)&(((type *)0)->symbol)) + +/*------------------------------------------------------------------------ + * Historically different Prom format types. + * + * For diagnostic and failure purposes, do not create a type 0x00 or a + * type 0xff + *------------------------------------------------------------------------ + */ +#define PROM_FORMAT_Unk (-1) +#define PROM_FORMAT_TYPE1 1 +#define PROM_FORMAT_TYPE2 2 + + +/****** bit fields for a type 1 formatted seeprom **************************/ + typedef struct + { + char type; /* 0x00 */ + char Id[2]; /* 0x01-0x02 */ + char SubId[2]; /* 0x03-0x04 */ + char Serial[6]; /* 0x05-0x0a */ + char CreateTime[4]; /* 0x0b-0x0e */ + char HeatRunTime[4]; /* 0x0f-0x12 */ + char HeatRunIterations[4]; /* 0x13-0x16 */ + char HeatRunErrors[4]; /* 0x17-0x1a */ + char Crc32[4]; /* 0x1b-0x1e */ + } FLD_TYPE1; + + +/****** bit fields for a type 2 formatted seeprom **************************/ + typedef struct + { + char type; /* 0x00 */ + char length[2]; /* 0x01-0x02 */ + char Crc32[4]; /* 0x03-0x06 */ + char Id[2]; /* 0x07-0x08 */ + char SubId[2]; /* 0x09-0x0a */ + char Serial[6]; /* 0x0b-0x10 */ + char CreateTime[4]; /* 0x11-0x14 */ + char HeatRunTime[4]; /* 0x15-0x18 */ + char HeatRunIterations[4]; /* 0x19-0x1c */ + char HeatRunErrors[4]; /* 0x1d-0x20 */ + } FLD_TYPE2; + + + +/***** this union allows us to access the seeprom as an array of bytes ***/ +/***** or as individual fields ***/ + +#define SBE_EEPROM_SIZE 128 +#define SBE_MFG_INFO_SIZE sizeof(FLD_TYPE2) + + typedef union + { + char bytes[128]; + FLD_TYPE1 fldType1; + FLD_TYPE2 fldType2; + } PROMFORMAT; + +#ifdef __cplusplus +} +#endif + +#endif /*** _INC_SBE_PROMFORMAT_H_ ***/ diff --git a/drivers/staging/cxt1e1/sbecom_inline_linux.h b/drivers/staging/cxt1e1/sbecom_inline_linux.h new file mode 100644 index 0000000..2ab1eb1 --- /dev/null +++ b/drivers/staging/cxt1e1/sbecom_inline_linux.h @@ -0,0 +1,310 @@ +/* + * $Id: sbecom_inline_linux.h,v 1.2 2007/08/15 22:51:35 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_SBECOM_INLNX_H_ +#define _INC_SBECOM_INLNX_H_ + +/*----------------------------------------------------------------------------- + * sbecom_inline_linux.h - SBE common Linux inlined routines + * + * Copyright (C) 2007 One Stop Systems, Inc. + * Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@onestopsystems.com + * One Stop Systems, Inc. Escondido, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.2 $ + * Last changed on $Date: 2007/08/15 22:51:35 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: sbecom_inline_linux.h,v $ + * Revision 1.2 2007/08/15 22:51:35 rickd + * Remove duplicate version.h entry. + * + * Revision 1.1 2007/08/15 22:50:29 rickd + * Update linux/config for 2.6.18 and later. + * + * Revision 1.0 2005/09/28 00:10:09 rickd + * Initial revision + * + *----------------------------------------------------------------------------- + */ + + +#if defined (__FreeBSD__) || defined (__NetBSD__) +#include +#else +#include +#include +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18) +#include +#endif +#if defined(CONFIG_SMP) && ! defined(__SMP__) +#define __SMP__ +#endif +#if defined(CONFIG_MODVERSIONS) && defined(MODULE) && ! defined(MODVERSIONS) +#define MODVERSIONS +#endif + +#ifdef MODULE +#ifdef MODVERSIONS +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) +#include +#else +#include +#endif +#endif +#include +#endif +#endif + +#include /* resolves kmalloc references */ +#include /* resolves skb references */ +#include /* resolves dev_kree_skb_any */ +#include /* resolves cpu_to_le32 */ + +#if 0 + +/*** PORT POINT WARNING + *** + *** Under Linux 2.6 it has been found that compiler is re-ordering + *** in-lined pci_write_32() functions to the detrement of correct + *** hardware setup. Therefore, inlining of PCI accesses has been + *** de-implemented, and subroutine calls have been implemented. + ***/ + +static inline u_int32_t +pci_read_32 (u_int32_t *p) +{ +#ifdef FLOW_DEBUG + u_int32_t v; + + FLUSH_PCI_READ (); + v = le32_to_cpu (*p); + if (log_level >= LOG_DEBUG) + printk ("pci_read : %x = %x\n", (u_int32_t) p, v); + return v; +#else + FLUSH_PCI_READ (); /* */ + return le32_to_cpu (*p); +#endif +} + +static inline void +pci_write_32 (u_int32_t *p, u_int32_t v) +{ +#ifdef FLOW_DEBUG + if (log_level >= LOG_DEBUG) + printk ("pci_write: %x = %x\n", (u_int32_t) p, v); +#endif + *p = cpu_to_le32 (v); + FLUSH_PCI_WRITE (); /* This routine is called from routines + * which do multiple register writes + * which themselves need flushing between + * writes in order to guarantee write + * ordering. It is less code-cumbersome + * to flush here-in then to investigate + * and code the many other register + * writing routines. */ +} +#else +/* forward reference */ +u_int32_t pci_read_32 (u_int32_t *p); +void pci_write_32 (u_int32_t *p, u_int32_t v); + +#endif + + +/* + * system dependent callbacks + */ + +/**********/ +/* malloc */ +/**********/ + +static inline void * +OS_kmalloc (size_t size) +{ + char *ptr = kmalloc (size, GFP_KERNEL | GFP_DMA); + + if (ptr) + memset (ptr, 0, size); + return ptr; +} + +static inline void +OS_kfree (void *x) +{ + kfree (x); +} + + +/****************/ +/* memory token */ +/****************/ + +static inline void * +OS_mem_token_alloc (size_t size) +{ + struct sk_buff *skb; + + skb = dev_alloc_skb (size); + if (!skb) + { + //printk (KERN_WARNING "no mem in OS_mem_token_alloc !"); + return 0; + } + return skb; +} + + +static inline void +OS_mem_token_free (void *token) +{ + dev_kfree_skb_any (token); +} + + +static inline void +OS_mem_token_free_irq (void *token) +{ + dev_kfree_skb_irq (token); +} + + +static inline void * +OS_mem_token_data (void *token) +{ + return ((struct sk_buff *) token)->data; +} + + +static inline void * +OS_mem_token_next (void *token) +{ + return 0; +} + + +static inline int +OS_mem_token_len (void *token) +{ + return ((struct sk_buff *) token)->len; +} + + +static inline int +OS_mem_token_tlen (void *token) +{ + return ((struct sk_buff *) token)->len; +} + + +/***************************************/ +/* virtual to physical addr conversion */ +/***************************************/ + +static inline u_long +OS_phystov (void *addr) +{ + return (u_long) __va (addr); +} + + +static inline u_long +OS_vtophys (void *addr) +{ + return __pa (addr); +} + + +/**********/ +/* semops */ +/**********/ + +void OS_sem_init (void *, int); + + +static inline void +OS_sem_free (void *sem) +{ + /* + * NOOP - since semaphores structures predeclared w/in structures, no + * longer malloc'd + */ +} + +#define SD_SEM_TAKE(sem,desc) down(sem) +#define SD_SEM_GIVE(sem) up(sem) +#define SEM_AVAILABLE 1 +#define SEM_TAKEN 0 + + +/**********************/ +/* watchdog functions */ +/**********************/ + +struct watchdog +{ + struct timer_list h; +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) + struct tq_struct tq; +#else + struct work_struct work; +#endif + void *softc; + void (*func) (void *softc); + int ticks; + int init_tq; +}; + + +static inline int +OS_start_watchdog (struct watchdog * wd) +{ + wd->h.expires = jiffies + wd->ticks; + add_timer (&wd->h); + return 0; +} + + +static inline int +OS_stop_watchdog (struct watchdog * wd) +{ + del_timer_sync (&wd->h); + return 0; +} + + +static inline int +OS_free_watchdog (struct watchdog * wd) +{ + OS_stop_watchdog (wd); + OS_kfree (wd); + return 0; +} + + +/* sleep in microseconds */ +void OS_uwait (int usec, char *description); +void OS_uwait_dummy (void); + + +/* watchdog functions */ +int OS_init_watchdog(struct watchdog *wdp, void (*f) (void *), void *ci, int usec); + + +#endif /*** _INC_SBECOM_INLNX_H_ ***/ diff --git a/drivers/staging/cxt1e1/sbecrc.c b/drivers/staging/cxt1e1/sbecrc.c new file mode 100644 index 0000000..5123294 --- /dev/null +++ b/drivers/staging/cxt1e1/sbecrc.c @@ -0,0 +1,137 @@ +/* Based on "File Verification Using CRC" by Mark R. Nelson in Dr. Dobbs' + * Journal, May 1992, pp. 64-67. This algorithm generates the same CRC + * values as ZMODEM and PKZIP + * + * Copyright (C) 2002-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include "pmcc4_sysdep.h" +#include "sbecom_inline_linux.h" +#include "sbe_promformat.h" + +/* defines */ +#define CRC32_POLYNOMIAL 0xEDB88320L +#define CRC_TABLE_ENTRIES 256 + + + +static u_int32_t crcTableInit; + +#ifdef STATIC_CRC_TABLE +static u_int32_t CRCTable[CRC_TABLE_ENTRIES]; + +#endif + + +/*************************************************************************** +* +* genCrcTable - fills in CRCTable, as used by sbeCrc() +* +* RETURNS: N/A +* +* ERRNO: N/A +***************************************************************************/ + +static void +genCrcTable (u_int32_t *CRCTable) +{ + int ii, jj; + u_int32_t crc; + + for (ii = 0; ii < CRC_TABLE_ENTRIES; ii++) + { + crc = ii; + for (jj = 8; jj > 0; jj--) + { + if (crc & 1) + crc = (crc >> 1) ^ CRC32_POLYNOMIAL; + else + crc >>= 1; + } + CRCTable[ii] = crc; + } + + crcTableInit++; +} + + +/*************************************************************************** +* +* sbeCrc - generates a CRC on a given buffer, and initial CRC +* +* This routine calculates the CRC for a buffer of data using the +* table lookup method. It accepts an original value for the crc, +* and returns the updated value. This permits "catenation" of +* discontiguous buffers. An original value of 0 for the "first" +* buffer is the norm. +* +* Based on "File Verification Using CRC" by Mark R. Nelson in Dr. Dobb's +* Journal, May 1992, pp. 64-67. This algorithm generates the same CRC +* values as ZMODEM and PKZIP. +* +* RETURNS: calculated crc of block +* +*/ + +void +sbeCrc (u_int8_t *buffer, /* data buffer to crc */ + u_int32_t count, /* length of block in bytes */ + u_int32_t initialCrc, /* starting CRC */ + u_int32_t *result) +{ + u_int32_t *tbl = 0; + u_int32_t temp1, temp2, crc; + + /* + * if table not yet created, do so. Don't care about "extra" time + * checking this everytime sbeCrc() is called, since CRC calculations are + * already time consuming + */ + if (!crcTableInit) + { +#ifdef STATIC_CRC_TABLE + tbl = &CRCTable; + genCrcTable (tbl); +#else + tbl = (u_int32_t *) OS_kmalloc (CRC_TABLE_ENTRIES * sizeof (u_int32_t)); + if (tbl == 0) + { + *result = 0; /* dummy up return value due to malloc + * failure */ + return; + } + genCrcTable (tbl); +#endif + } + /* inverting bits makes ZMODEM & PKZIP compatible */ + crc = initialCrc ^ 0xFFFFFFFFL; + + while (count-- != 0) + { + temp1 = (crc >> 8) & 0x00FFFFFFL; + temp2 = tbl[((int) crc ^ *buffer++) & 0xff]; + crc = temp1 ^ temp2; + } + + crc ^= 0xFFFFFFFFL; + + *result = crc; + +#ifndef STATIC_CRC_TABLE + crcTableInit = 0; + OS_kfree (tbl); +#endif +} + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/sbeid.c b/drivers/staging/cxt1e1/sbeid.c new file mode 100644 index 0000000..a2243b1 --- /dev/null +++ b/drivers/staging/cxt1e1/sbeid.c @@ -0,0 +1,217 @@ +/* Copyright (C) 2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include "pmcc4_sysdep.h" +#include "sbecom_inline_linux.h" +#include "libsbew.h" +#include "pmcc4_private.h" +#include "pmcc4.h" +#include "sbe_bid.h" + +#ifdef SBE_INCLUDE_SYMBOLS +#define STATIC +#else +#define STATIC static +#endif + + +char * +sbeid_get_bdname (ci_t * ci) +{ + char *np = 0; + + switch (ci->brd_id) + { + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_E1): + np = "wanPTMC-256T3 "; + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_T1): + np = "wanPTMC-256T3 "; + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C4T1E1): + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C4T1E1_L): + np = "wanPMC-C4T1E1"; + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1): + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1_L): + np = "wanPMC-C2T1E1"; + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1): + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1_L): + np = "wanPMC-C1T1E1"; + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C4T1E1): + np = "wanPCI-C4T1E1"; + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C2T1E1): + np = "wanPCI-C2T1E1"; + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C1T1E1): + np = "wanPCI-C1T1E1"; + break; + default: + /*** np = ""; ***/ + np = "wanPCI-CxT1E1"; + break; + } + + return np; +} + + +/* given the presetting of brd_id, set the corresponding hdw_id */ + +void +sbeid_set_hdwbid (ci_t * ci) +{ + /* + * set SBE's unique hardware identification (for legacy boards might not + * have this register implemented) + */ + + switch (ci->brd_id) + { + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_E1): + ci->hdw_bid = SBE_BID_256T3_E1; /* 0x46 - SBE wanPTMC-256T3 (E1 + * Version) */ + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_T1): + ci->hdw_bid = SBE_BID_256T3_T1; /* 0x42 - SBE wanPTMC-256T3 (T1 + * Version) */ + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C4T1E1): + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C4T1E1_L): + /* + * This Board ID is a generic identification. Use the found number + * of ports to further define this hardware. + */ + switch (ci->max_port) + { + default: /* shouldn't need a default, but have one + * anyway */ + case 4: + ci->hdw_bid = SBE_BID_PMC_C4T1E1; /* 0xC4 - SBE wanPMC-C4T1E1 */ + break; + case 2: + ci->hdw_bid = SBE_BID_PMC_C2T1E1; /* 0xC2 - SBE wanPMC-C2T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1); + break; + case 1: + ci->hdw_bid = SBE_BID_PMC_C1T1E1; /* 0xC1 - SBE wanPMC-C1T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1); + break; + } + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1): + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1_L): + ci->hdw_bid = SBE_BID_PMC_C2T1E1; /* 0xC2 - SBE wanPMC-C2T1E1 */ + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1): + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1_L): + ci->hdw_bid = SBE_BID_PMC_C1T1E1; /* 0xC1 - SBE wanPMC-C1T1E1 */ + break; +#ifdef SBE_PMCC4_ENABLE + /* + * This case is entered as a result of the inability to obtain the + * from the board's EEPROM. Assume a PCI board and set + * according to the number ofr found ports. + */ + case 0: + /* start by assuming 4-port for ZERO casing */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C4T1E1); + /* drop thru to set hdw_bid and alternate PCI CxT1E1 settings */ +#endif + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C4T1E1): + /* + * This Board ID is a generic identification. Use the number of + * found ports to further define this hardware. + */ + switch (ci->max_port) + { + default: /* shouldn't need a default, but have one + * anyway */ + case 4: + ci->hdw_bid = SBE_BID_PCI_C4T1E1; /* 0x04 - SBE wanPCI-C4T1E1 */ + break; + case 2: + ci->hdw_bid = SBE_BID_PCI_C2T1E1; /* 0x02 - SBE wanPCI-C2T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C2T1E1); + break; + case 1: + ci->hdw_bid = SBE_BID_PCI_C1T1E1; /* 0x01 - SBE wanPCI-C1T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C1T1E1); + break; + } + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C2T1E1): + ci->hdw_bid = SBE_BID_PCI_C2T1E1; /* 0x02 - SBE wanPCI-C2T1E1 */ + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C1T1E1): + ci->hdw_bid = SBE_BID_PCI_C1T1E1; /* 0x01 - SBE wanPCI-C1T1E1 */ + break; + default: + /*** bid = ""; ***/ + ci->hdw_bid = SBE_BID_PMC_C4T1E1; /* 0x41 - SBE wanPTMC-C4T1E1 */ + break; + } +} + +/* given the presetting of hdw_bid, set the corresponding brd_id */ + +void +sbeid_set_bdtype (ci_t * ci) +{ + /* set SBE's unique PCI VENDOR/DEVID */ + switch (ci->hdw_bid) + { + case SBE_BID_C1T3: /* SBE wanPMC-C1T3 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T3); + break; + case SBE_BID_C24TE1: /* SBE wanPTMC-C24TE1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_C24TE1); + break; + case SBE_BID_256T3_E1: /* SBE wanPTMC-256T3 E1 Version */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_E1); + break; + case SBE_BID_256T3_T1: /* SBE wanPTMC-256T3 T1 Version */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_T1); + break; + case SBE_BID_PMC_C4T1E1: /* 0xC4 - SBE wanPMC-C4T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C4T1E1); + break; + case SBE_BID_PMC_C2T1E1: /* 0xC2 - SBE wanPMC-C2T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1); + break; + case SBE_BID_PMC_C1T1E1: /* 0xC1 - SBE wanPMC-C1T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1); + break; + case SBE_BID_PCI_C4T1E1: /* 0x04 - SBE wanPCI-C4T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C4T1E1); + break; + case SBE_BID_PCI_C2T1E1: /* 0x02 - SBE wanPCI-C2T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C2T1E1); + break; + case SBE_BID_PCI_C1T1E1: /* 0x01 - SBE wanPCI-C1T1E1 */ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C1T1E1); + break; + + default: + /*** hdw_bid = ""; ***/ + ci->brd_id = SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C4T1E1); + break; + } +} + + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/sbeproc.c b/drivers/staging/cxt1e1/sbeproc.c new file mode 100644 index 0000000..61ca639 --- /dev/null +++ b/drivers/staging/cxt1e1/sbeproc.c @@ -0,0 +1,358 @@ +/* Copyright (C) 2004-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "pmcc4_sysdep.h" +#include "sbecom_inline_linux.h" +#include "pmcc4_private.h" +#include "sbeproc.h" + +/* forwards */ +void sbecom_get_brdinfo (ci_t *, struct sbe_brd_info *, u_int8_t *); +extern struct s_hdw_info hdw_info[MAX_BOARDS]; + +#ifdef CONFIG_PROC_FS + +/********************************************************************/ +/* procfs stuff */ +/********************************************************************/ + + +void +sbecom_proc_brd_cleanup (ci_t * ci) +{ + if (ci->dir_dev) + { + char dir[7 + SBE_IFACETMPL_SIZE + 1]; + snprintf(dir, sizeof(dir), "driver/%s", ci->devname); + remove_proc_entry("info", ci->dir_dev); + remove_proc_entry(dir, NULL); + ci->dir_dev = NULL; + } +} + + +static int +sbecom_proc_get_sbe_info (char *buffer, char **start, off_t offset, + int length, int *eof, void *priv) +{ + ci_t *ci = (ci_t *) priv; + int len = 0; + char *spd; + struct sbe_brd_info *bip; + + if (!(bip = OS_kmalloc (sizeof (struct sbe_brd_info)))) + { + return -ENOMEM; + } +#if 0 + /** RLD DEBUG **/ + printk (">> sbecom_proc_get_sbe_info: entered, offset %d. length %d.\n", + (int) offset, (int) length); +#endif + + { + hdw_info_t *hi = &hdw_info[ci->brdno]; + + u_int8_t *bsn = 0; + + switch (hi->promfmt) + { + case PROM_FORMAT_TYPE1: + bsn = (u_int8_t *) hi->mfg_info.pft1.Serial; + break; + case PROM_FORMAT_TYPE2: + bsn = (u_int8_t *) hi->mfg_info.pft2.Serial; + break; + } + + sbecom_get_brdinfo (ci, bip, bsn); + } + +#if 0 + /** RLD DEBUG **/ + printk (">> sbecom_get_brdinfo: returned, first_if %p <%s> last_if %p <%s>\n", + (char *) &bip->first_iname, (char *) &bip->first_iname, + (char *) &bip->last_iname, (char *) &bip->last_iname); +#endif + len += sprintf (buffer + len, "Board Type: "); + switch (bip->brd_id) + { + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T3): + len += sprintf (buffer + len, "wanPMC-C1T3"); + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_E1): + len += sprintf (buffer + len, "wanPTMC-256T3 "); + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_256T3_T1): + len += sprintf (buffer + len, "wanPTMC-256T3 "); + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPTMC_C24TE1): + len += sprintf (buffer + len, "wanPTMC-C24TE1"); + break; + + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C4T1E1): + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C4T1E1_L): + len += sprintf (buffer + len, "wanPMC-C4T1E1"); + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1): + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C2T1E1_L): + len += sprintf (buffer + len, "wanPMC-C2T1E1"); + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1): + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPMC_C1T1E1_L): + len += sprintf (buffer + len, "wanPMC-C1T1E1"); + break; + + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C4T1E1): + len += sprintf (buffer + len, "wanPCI-C4T1E1"); + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C2T1E1): + len += sprintf (buffer + len, "wanPCI-C2T1E1"); + break; + case SBE_BOARD_ID (PCI_VENDOR_ID_SBE, PCI_DEVICE_ID_WANPCI_C1T1E1): + len += sprintf (buffer + len, "wanPCI-C1T1E1"); + break; + + default: + len += sprintf (buffer + len, "unknown"); + break; + } + len += sprintf (buffer + len, " [%08X]\n", bip->brd_id); + + len += sprintf (buffer + len, "Board Number: %d\n", bip->brdno); + len += sprintf (buffer + len, "Hardware ID: 0x%02X\n", ci->hdw_bid); + len += sprintf (buffer + len, "Board SN: %06X\n", bip->brd_sn); + len += sprintf (buffer + len, "Board MAC: %02X-%02X-%02X-%02X-%02X-%02X\n", + bip->brd_mac_addr[0], bip->brd_mac_addr[1], bip->brd_mac_addr[2], + bip->brd_mac_addr[3], bip->brd_mac_addr[4], bip->brd_mac_addr[5]); + len += sprintf (buffer + len, "Ports: %d\n", ci->max_port); + len += sprintf (buffer + len, "Channels: %d\n", bip->brd_chan_cnt); +#if 1 + len += sprintf (buffer + len, "Interface: %s -> %s\n", + (char *) &bip->first_iname, (char *) &bip->last_iname); +#else + len += sprintf (buffer + len, "Interface: 1st %p lst %p\n", + (char *) &bip->first_iname, (char *) &bip->last_iname); +#endif + + switch (bip->brd_pci_speed) + { + case BINFO_PCI_SPEED_33: + spd = "33Mhz"; + break; + case BINFO_PCI_SPEED_66: + spd = "66Mhz"; + break; + default: + spd = ""; + break; + } + len += sprintf (buffer + len, "PCI Bus Speed: %s\n", spd); + len += sprintf (buffer + len, "Release: %s\n", ci->release); + +#ifdef SBE_PMCC4_ENABLE + { + extern int max_mru; +#if 0 + extern int max_chans_used; + extern int max_mtu; +#endif + extern int max_rxdesc_used, max_txdesc_used; + + len += sprintf (buffer + len, "\nmax_mru: %d\n", max_mru); +#if 0 + len += sprintf (buffer + len, "\nmax_chans_used: %d\n", max_chans_used); + len += sprintf (buffer + len, "max_mtu: %d\n", max_mtu); +#endif + len += sprintf (buffer + len, "max_rxdesc_used: %d\n", max_rxdesc_used); + len += sprintf (buffer + len, "max_txdesc_used: %d\n", max_txdesc_used); + } +#endif + + OS_kfree (bip); /* cleanup */ + + /*** + * How to be a proc read function + * ------------------------------ + * Prototype: + * int f(char *buffer, char **start, off_t offset, + * int count, int *peof, void *dat) + * + * Assume that the buffer is "count" bytes in size. + * + * If you know you have supplied all the data you + * have, set *peof. + * + * You have three ways to return data: + * 0) Leave *start = NULL. (This is the default.) + * Put the data of the requested offset at that + * offset within the buffer. Return the number (n) + * of bytes there are from the beginning of the + * buffer up to the last byte of data. If the + * number of supplied bytes (= n - offset) is + * greater than zero and you didn't signal eof + * and the reader is prepared to take more data + * you will be called again with the requested + * offset advanced by the number of bytes + * absorbed. This interface is useful for files + * no larger than the buffer. + * 1) Set *start = an unsigned long value less than + * the buffer address but greater than zero. + * Put the data of the requested offset at the + * beginning of the buffer. Return the number of + * bytes of data placed there. If this number is + * greater than zero and you didn't signal eof + * and the reader is prepared to take more data + * you will be called again with the requested + * offset advanced by *start. This interface is + * useful when you have a large file consisting + * of a series of blocks which you want to count + * and return as wholes. + * (Hack by Paul.Russell@rustcorp.com.au) + * 2) Set *start = an address within the buffer. + * Put the data of the requested offset at *start. + * Return the number of bytes of data placed there. + * If this number is greater than zero and you + * didn't signal eof and the reader is prepared to + * take more data you will be called again with the + * requested offset advanced by the number of bytes + * absorbed. + */ + +#if 1 + /* #4 - intepretation of above = set EOF, return len */ + *eof = 1; +#endif + +#if 0 + /* + * #1 - from net/wireless/atmel.c RLD NOTE -there's something wrong with + * this plagarized code which results in this routine being called TWICE. + * The second call returns ZERO, resulting in hidden failure, but at + * least only a single message set is being displayed. + */ + if (len <= offset + length) + *eof = 1; + *start = buffer + offset; + len -= offset; + if (len > length) + len = length; + if (len < 0) + len = 0; +#endif + +#if 0 /* #2 from net/tokenring/olympic.c + + * lanstreamer.c */ + { + off_t begin = 0; + int size = 0; + off_t pos = 0; + + size = len; + pos = begin + size; + if (pos < offset) + { + len = 0; + begin = pos; + } + *start = buffer + (offset - begin); /* Start of wanted data */ + len -= (offset - begin); /* Start slop */ + if (len > length) + len = length; /* Ending slop */ + } +#endif + +#if 0 /* #3 from + * char/ftape/lowlevel/ftape-proc.c */ + len = strlen (buffer); + *start = NULL; + if (offset + length >= len) + *eof = 1; + else + *eof = 0; +#endif + +#if 0 + printk (">> proc_fs: returned len = %d., start %p\n", len, start); /* RLD DEBUG */ +#endif + +/*** + using NONE: returns = 314.314.314. + using #1 : returns = 314, 0. + using #2 : returns = 314, 0, 0. + using #3 : returns = 314, 314. + using #4 : returns = 314, 314. +***/ + + return len; +} + +/* initialize the /proc subsystem for the specific SBE driver */ + +int __init +sbecom_proc_brd_init (ci_t * ci) +{ + struct proc_dir_entry *e; + char dir[7 + SBE_IFACETMPL_SIZE + 1]; + + /* create a directory in the root procfs */ + snprintf(dir, sizeof(dir), "driver/%s", ci->devname); + ci->dir_dev = proc_mkdir(dir, NULL); + if (!ci->dir_dev) + { + printk (KERN_ERR "%s: Unable to create directory /proc/driver/%s\n", + THIS_MODULE->name, ci->devname); + goto fail; + } + e = create_proc_read_entry ("info", S_IFREG | S_IRUGO, + ci->dir_dev, sbecom_proc_get_sbe_info, ci); + if (!e) + { + printk (KERN_ERR "%s: Unable to create entry /proc/driver/%s/info\n", + THIS_MODULE->name, ci->devname); + goto fail; + } + return 0; + +fail: + sbecom_proc_brd_cleanup (ci); + return 1; +} + +#else /*** ! CONFIG_PROC_FS ***/ + +/* stubbed off dummy routines */ + +void +sbecom_proc_brd_cleanup (ci_t * ci) +{ +} + +int __init +sbecom_proc_brd_init (ci_t * ci) +{ + return 0; +} + +#endif /*** CONFIG_PROC_FS ***/ + + +/*** End-of-File ***/ diff --git a/drivers/staging/cxt1e1/sbeproc.h b/drivers/staging/cxt1e1/sbeproc.h new file mode 100644 index 0000000..4aa53f4 --- /dev/null +++ b/drivers/staging/cxt1e1/sbeproc.h @@ -0,0 +1,52 @@ +/* + * $Id: sbeproc.h,v 1.2 2005/10/17 23:55:28 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_SBEPROC_H_ +#define _INC_SBEPROC_H_ + +/*----------------------------------------------------------------------------- + * sbeproc.h - + * + * Copyright (C) 2004-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.2 $ + * Last changed on $Date: 2005/10/17 23:55:28 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: sbeproc.h,v $ + * Revision 1.2 2005/10/17 23:55:28 rickd + * sbecom_proc_brd_init() is an declared an __init function. + * + * Revision 1.1 2005/09/28 00:10:09 rickd + * Remove unneeded inclusion of c4_private.h. + * + * Revision 1.0 2005/05/10 22:21:46 rickd + * Initial check-in. + * + *----------------------------------------------------------------------------- + */ + + +#ifdef CONFIG_PROC_FS +#ifdef __KERNEL__ +void sbecom_proc_brd_cleanup (ci_t *); +int __init sbecom_proc_brd_init (ci_t *); + +#endif /*** __KERNEL__ ***/ +#endif /*** CONFIG_PROC_FS ***/ +#endif /*** _INC_SBEPROC_H_ ***/ diff --git a/drivers/staging/cxt1e1/sbew_ioc.h b/drivers/staging/cxt1e1/sbew_ioc.h new file mode 100644 index 0000000..14d3719 --- /dev/null +++ b/drivers/staging/cxt1e1/sbew_ioc.h @@ -0,0 +1,136 @@ +/* + * $Id: sbew_ioc.h,v 1.0 2005/09/28 00:10:10 rickd PMCC4_3_1B $ + */ + +#ifndef _INC_SBEWIOC_H_ +#define _INC_SBEWIOC_H_ + +/*----------------------------------------------------------------------------- + * sbew_ioc.h - + * + * Copyright (C) 2002-2005 SBE, Inc. + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * For further information, contact via email: support@sbei.com + * SBE, Inc. San Ramon, California U.S.A. + * + *----------------------------------------------------------------------------- + * RCS info: + * RCS revision: $Revision: 1.0 $ + * Last changed on $Date: 2005/09/28 00:10:10 $ + * Changed by $Author: rickd $ + *----------------------------------------------------------------------------- + * $Log: sbew_ioc.h,v $ + * Revision 1.0 2005/09/28 00:10:10 rickd + * Initial revision + * + * Revision 1.6 2005/01/11 18:41:01 rickd + * Add BRDADDR_GET Ioctl. + * + * Revision 1.5 2004/09/16 18:55:59 rickd + * Start setting up for generic framer configuration Ioctl by switch + * from tect3_framer_param[] to sbecom_framer_param[]. + * + * Revision 1.4 2004/06/28 17:58:15 rickd + * Rename IOC_TSMAP_[GS] to IOC_TSIOC_[GS] to support need for + * multiple formats of data when setting up TimeSlots. + * + * Revision 1.3 2004/06/22 21:18:13 rickd + * read_vec now() ONLY handles a single common wrt_vec array. + * + * Revision 1.1 2004/06/10 18:11:34 rickd + * Add IID_GET Ioctl reference. + * + * Revision 1.0 2004/06/08 22:59:38 rickd + * Initial revision + * + * Revision 2.0 2004/06/07 17:49:47 rickd + * Initial library release following merge of wanc1t3/wan256 into + * common elements for lib. + * + *----------------------------------------------------------------------------- + */ + +#ifndef __KERNEL__ +#include +#endif +#ifdef SunOS +#include +#else +#include +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +#define SBE_LOCKFILE "/tmp/.sbewan.LCK" + +#define SBE_IOC_COOKIE 0x19780926 +#define SBE_IOC_MAGIC ('s') + +/* IOW write - data has to go into driver from application */ +/* IOR read - data has to be returned to application from driver */ + +/* + * Note: for an IOWR Ioctl, the read and write data do not have to + * be the same size, but the entity declared within the IOC must be + * the larger of the two. + */ + +#define SBE_IOC_LOGLEVEL _IOW(SBE_IOC_MAGIC, 0x00, int) +#define SBE_IOC_CHAN_NEW _IOW(SBE_IOC_MAGIC, 0x01,int) /* unused */ +#define SBE_IOC_CHAN_UP _IOW(SBE_IOC_MAGIC, 0x02,int) /* unused */ +#define SBE_IOC_CHAN_DOWN _IOW(SBE_IOC_MAGIC, 0x03,int) /* unused */ +#define SBE_IOC_CHAN_GET _IOWR(SBE_IOC_MAGIC,0x04, struct sbecom_chan_param) +#define SBE_IOC_CHAN_SET _IOW(SBE_IOC_MAGIC, 0x05, struct sbecom_chan_param) +#define SBE_IOC_CHAN_GET_STAT _IOWR(SBE_IOC_MAGIC,0x06, struct sbecom_chan_stats) +#define SBE_IOC_CHAN_DEL_STAT _IOW(SBE_IOC_MAGIC, 0x07, int) +#define SBE_IOC_PORTS_ENABLE _IOW(SBE_IOC_MAGIC, 0x0A, int) +#define SBE_IOC_PORT_GET _IOWR(SBE_IOC_MAGIC,0x0C, struct sbecom_port_param) +#define SBE_IOC_PORT_SET _IOW(SBE_IOC_MAGIC, 0x0D, struct sbecom_port_param) +#define SBE_IOC_READ_VEC _IOWR(SBE_IOC_MAGIC,0x10, struct sbecom_wrt_vec) +#define SBE_IOC_WRITE_VEC _IOWR(SBE_IOC_MAGIC,0x11, struct sbecom_wrt_vec) +#define SBE_IOC_GET_SN _IOR(SBE_IOC_MAGIC, 0x12, u_int32_t) +#define SBE_IOC_RESET_DEV _IOW(SBE_IOC_MAGIC, 0x13, int) +#define SBE_IOC_FRAMER_GET _IOWR(SBE_IOC_MAGIC,0x14, struct sbecom_framer_param) +#define SBE_IOC_FRAMER_SET _IOW(SBE_IOC_MAGIC, 0x15, struct sbecom_framer_param) +#define SBE_IOC_CARD_GET _IOR(SBE_IOC_MAGIC, 0x20, struct sbecom_card_param) +#define SBE_IOC_CARD_SET _IOW(SBE_IOC_MAGIC, 0x21, struct sbecom_card_param) +#define SBE_IOC_CARD_GET_STAT _IOR(SBE_IOC_MAGIC, 0x22, struct temux_card_stats) +#define SBE_IOC_CARD_DEL_STAT _IO(SBE_IOC_MAGIC, 0x23) +#define SBE_IOC_CARD_CHAN_STAT _IOR(SBE_IOC_MAGIC, 0x24, struct sbecom_chan_stats) +#define SBE_IOC_CARD_BLINK _IOW(SBE_IOC_MAGIC, 0x30, int) +#define SBE_IOC_DRVINFO_GET _IOWR(SBE_IOC_MAGIC,0x31, struct sbe_drv_info) +#define SBE_IOC_BRDINFO_GET _IOR(SBE_IOC_MAGIC, 0x32, struct sbe_brd_info) +#define SBE_IOC_IID_GET _IOWR(SBE_IOC_MAGIC,0x33, struct sbe_iid_info) +#define SBE_IOC_BRDADDR_GET _IOWR(SBE_IOC_MAGIC, 0x34, struct sbe_brd_addr) + +#ifdef NOT_YET_COMMON +#define SBE_IOC_TSIOC_GET _IOWR(SBE_IOC_MAGIC,0x16, struct wanc1t3_ts_param) +#define SBE_IOC_TSIOC_SET _IOW(SBE_IOC_MAGIC, 0x17, struct wanc1t3_ts_param) +#endif + +/* + * Restrict SBE_IOC_WRITE_VEC & READ_VEC to a single parameter pair, application + * then must issue multiple Ioctls for large blocks of contiguous data. + */ + +#define SBE_IOC_MAXVEC 1 + + +#ifdef __cplusplus +} +#endif + +#endif /*** _INC_SBEWIOC_H_ ***/ -- cgit v0.10.2 From d607c7811279b51fb1a7dbbe01533f7acf26ab23 Mon Sep 17 00:00:00 2001 From: Maurice Dawson Date: Wed, 17 Mar 2010 13:40:11 +0000 Subject: Staging: comedi: fix indent coding style issue in adl_pci9118.c Patch to the adl_pci9118.c that fixes, ERROR: code indent should use tabs where possible, found by the checkpatch.pl tool Signed-off-by: Maurice Dawson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index 944f20a..bed7e41 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -44,20 +44,20 @@ c) If isn't used DMA then you can use only mode where Configuration options: [0] - PCI bus of device (optional) [1] - PCI slot of device (optional) - If bus/slot is not specified, then first available PCI - card will be used. + If bus/slot is not specified, then first available PCI + card will be used. [2] - 0= standard 8 DIFF/16 SE channels configuration - n= external multiplexer connected, 1<=n<=256 + n = external multiplexer connected, 1 <= n <= 256 [3] - 0=autoselect DMA or EOC interrupts operation - 1=disable DMA mode - 3=disable DMA and INT, only insn interface will work + 1 = disable DMA mode + 3 = disable DMA and INT, only insn interface will work [4] - sample&hold signal - card can generate signal for external S&H board - 0=use SSHO (pin 45) signal is generated in onboard hardware S&H logic - 0!=use ADCHN7 (pin 23) signal is generated from driver, number - say how long delay is requested in ns and sign polarity of the hold - (in this case external multiplexor can serve only 128 channels) + 0 = use SSHO(pin 45) signal is generated in onboard hardware S&H logic + 0 != use ADCHN7(pin 23) signal is generated from driver, number say how + long delay is requested in ns and sign polarity of the hold + (in this case external multiplexor can serve only 128 channels) [5] - 0=stop measure on all hardware errors - 2|=ignore ADOR - A/D Overrun status + 2 | = ignore ADOR - A/D Overrun status 8|=ignore Bover - A/D Burst Mode Overrun status 256|=ignore nFull - A/D FIFO Full status -- cgit v0.10.2 From 242467bd058f09ec05985bb09201a9cd0b1d89e5 Mon Sep 17 00:00:00 2001 From: Maurice Dawson Date: Thu, 18 Mar 2010 14:46:37 +0000 Subject: Staging: comedi: fix 80 character coding style issue in adl_pci9118.c Fixes all over 80 character warnings in the adl_pci9118.c file found by the checkpatch.pl tool Signed-off-by: Maurice Dawson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index bed7e41..4f9fd7d 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -75,9 +75,15 @@ Configuration options: #include "comedi_fc.h" /* paranoid checks are broken */ -#undef PCI9118_PARANOIDCHECK /* if defined, then is used code which control correct channel number on every 12 bit sample */ +#undef PCI9118_PARANOIDCHECK /* + * if defined, then is used code which control + * correct channel number on every 12 bit sample + */ -#undef PCI9118_EXTDEBUG /* if defined then driver prints a lot of messages */ +#undef PCI9118_EXTDEBUG /* + * if defined then driver prints + * a lot of messages + */ #undef DPRINTK #ifdef PCI9118_EXTDEBUG @@ -87,7 +93,10 @@ Configuration options: #endif #define IORANGE_9118 64 /* I hope */ -#define PCI9118_CHANLEN 255 /* len of chanlist, some source say 256, but reality looks like 255 :-( */ +#define PCI9118_CHANLEN 255 /* + * len of chanlist, some source say 256, + * but reality looks like 255 :-( + */ #define PCI9118_CNT0 0x00 /* R/W: 8254 counter 0 */ #define PCI9118_CNT1 0x04 /* R/W: 8254 counter 0 */ @@ -113,20 +122,47 @@ Configuration options: #define AdControl_UniP 0x80 /* 1=bipolar, 0=unipolar */ #define AdControl_Diff 0x40 /* 1=differential, 0= single end inputs */ #define AdControl_SoftG 0x20 /* 1=8254 counter works, 0=counter stops */ -#define AdControl_ExtG 0x10 /* 1=8254 countrol controlled by TGIN(pin 46), 0=controled by SoftG */ -#define AdControl_ExtM 0x08 /* 1=external hardware trigger (pin 44), 0=internal trigger */ -#define AdControl_TmrTr 0x04 /* 1=8254 is iternal trigger source, 0=software trigger is source (register PCI9118_SOFTTRG) */ +#define AdControl_ExtG 0x10 /* + * 1=8254 countrol controlled by TGIN(pin 46), + * 0=controlled by SoftG + */ +#define AdControl_ExtM 0x08 /* + * 1=external hardware trigger (pin 44), + * 0=internal trigger + */ +#define AdControl_TmrTr 0x04 /* + * 1=8254 is iternal trigger source, + * 0=software trigger is source + * (register PCI9118_SOFTTRG) + */ #define AdControl_Int 0x02 /* 1=enable INT, 0=disable */ #define AdControl_Dma 0x01 /* 1=enable DMA, 0=disable */ /* bits from A/D function register (PCI9118_ADFUNC) */ -#define AdFunction_PDTrg 0x80 /* 1=positive, 0=negative digital trigger (only positive is correct) */ -#define AdFunction_PETrg 0x40 /* 1=positive, 0=negative external trigger (only positive is correct) */ +#define AdFunction_PDTrg 0x80 /* + * 1=positive, + * 0=negative digital trigger + * (only positive is correct) + */ +#define AdFunction_PETrg 0x40 /* + * 1=positive, + * 0=negative external trigger + * (only positive is correct) + */ #define AdFunction_BSSH 0x20 /* 1=with sample&hold, 0=without */ #define AdFunction_BM 0x10 /* 1=burst mode, 0=normal mode */ -#define AdFunction_BS 0x08 /* 1=burst mode start, 0=burst mode stop */ -#define AdFunction_PM 0x04 /* 1=post trigger mode, 0=not post trigger */ -#define AdFunction_AM 0x02 /* 1=about trigger mode, 0=not about trigger */ +#define AdFunction_BS 0x08 /* + * 1=burst mode start, + * 0=burst mode stop + */ +#define AdFunction_PM 0x04 /* + * 1=post trigger mode, + * 0=not post trigger + */ +#define AdFunction_AM 0x02 /* + * 1=about trigger mode, + * 0=not about trigger + */ #define AdFunction_Start 0x01 /* 1=trigger start, 0=trigger stop */ /* bits from A/D status register (PCI9118_ADSTAT) */ @@ -178,30 +214,39 @@ static const struct comedi_lrange range_pci9118hg = { 8, { } }; -#define PCI9118_BIPOLAR_RANGES 4 /* used for test on mixture of BIP/UNI ranges */ +#define PCI9118_BIPOLAR_RANGES 4 /* + * used for test on mixture + * of BIP/UNI ranges + */ static int pci9118_attach(struct comedi_device *dev, struct comedi_devconfig *it); static int pci9118_detach(struct comedi_device *dev); struct boardtype { - const char *name; /* board name */ - int vendor_id; /* PCI vendor a device ID of card */ + const char *name; /* board name */ + int vendor_id; /* PCI vendor a device ID of card */ int device_id; - int iorange_amcc; /* iorange for own S5933 region */ - int iorange_9118; /* pass thru card region size */ - int n_aichan; /* num of A/D chans */ - int n_aichand; /* num of A/D chans in diff mode */ - int mux_aichan; /* num of A/D chans with external multiplexor */ - int n_aichanlist; /* len of chanlist */ - int n_aochan; /* num of D/A chans */ - int ai_maxdata; /* resolution of A/D */ - int ao_maxdata; /* resolution of D/A */ - const struct comedi_lrange *rangelist_ai; /* rangelist for A/D */ - const struct comedi_lrange *rangelist_ao; /* rangelist for D/A */ - unsigned int ai_ns_min; /* max sample speed of card v ns */ - unsigned int ai_pacer_min; /* minimal pacer value (c1*c2 or c1 in burst) */ - int half_fifo_size; /* size of FIFO/2 */ + int iorange_amcc; /* iorange for own S5933 region */ + int iorange_9118; /* pass thru card region size */ + int n_aichan; /* num of A/D chans */ + int n_aichand; /* num of A/D chans in diff mode */ + int mux_aichan; /* + * num of A/D chans with + * external multiplexor + */ + int n_aichanlist; /* len of chanlist */ + int n_aochan; /* num of D/A chans */ + int ai_maxdata; /* resolution of A/D */ + int ao_maxdata; /* resolution of D/A */ + const struct comedi_lrange *rangelist_ai; /* rangelist for A/D */ + const struct comedi_lrange *rangelist_ao; /* rangelist for D/A */ + unsigned int ai_ns_min; /* max sample speed of card v ns */ + unsigned int ai_pacer_min; /* + * minimal pacer value + * (c1*c2 or c1 in burst) + */ + int half_fifo_size; /* size of FIFO/2 */ }; @@ -246,63 +291,113 @@ static struct comedi_driver driver_pci9118 = { COMEDI_PCI_INITCLEANUP(driver_pci9118, pci9118_pci_table); struct pci9118_private { - unsigned long iobase_a; /* base+size for AMCC chip */ - unsigned int master; /* master capable */ - struct pci_dev *pcidev; /* ptr to actual pcidev */ - unsigned int usemux; /* we want to use external multiplexor! */ + unsigned long iobase_a; /* base+size for AMCC chip */ + unsigned int master; /* master capable */ + struct pci_dev *pcidev; /* ptr to actual pcidev */ + unsigned int usemux; /* we want to use external multiplexor! */ #ifdef PCI9118_PARANOIDCHECK - unsigned short chanlist[PCI9118_CHANLEN + 1]; /* list of scaned channel */ - unsigned char chanlistlen; /* number of scanlist */ + unsigned short chanlist[PCI9118_CHANLEN + 1]; /* + * list of + * scanned channel + */ + unsigned char chanlistlen; /* number of scanlist */ #endif - unsigned char AdControlReg; /* A/D control register */ - unsigned char IntControlReg; /* Interrupt control register */ - unsigned char AdFunctionReg; /* A/D function register */ - char valid; /* driver is ok */ - char ai_neverending; /* we do unlimited AI */ - unsigned int i8254_osc_base; /* frequence of onboard oscilator */ - unsigned int ai_do; /* what do AI? 0=nothing, 1 to 4 mode */ - unsigned int ai_act_scan; /* how many scans we finished */ - unsigned int ai_buf_ptr; /* data buffer ptr in samples */ - unsigned int ai_n_chan; /* how many channels is measured */ - unsigned int ai_n_scanlen; /* len of actual scanlist */ - unsigned int ai_n_realscanlen; /* what we must transfer for one outgoing scan include front/back adds */ - unsigned int ai_act_dmapos; /* position in actual real stream */ - unsigned int ai_add_front; /* how many channels we must add before scan to satisfy S&H? */ - unsigned int ai_add_back; /* how many channels we must add before scan to satisfy DMA? */ - unsigned int *ai_chanlist; /* actaul chanlist */ + unsigned char AdControlReg; /* A/D control register */ + unsigned char IntControlReg; /* Interrupt control register */ + unsigned char AdFunctionReg; /* A/D function register */ + char valid; /* driver is ok */ + char ai_neverending; /* we do unlimited AI */ + unsigned int i8254_osc_base; /* frequence of onboard oscilator */ + unsigned int ai_do; /* what do AI? 0=nothing, 1 to 4 mode */ + unsigned int ai_act_scan; /* how many scans we finished */ + unsigned int ai_buf_ptr; /* data buffer ptr in samples */ + unsigned int ai_n_chan; /* how many channels is measured */ + unsigned int ai_n_scanlen; /* len of actual scanlist */ + unsigned int ai_n_realscanlen; /* + * what we must transfer for one + * outgoing scan include front/back adds + */ + unsigned int ai_act_dmapos; /* position in actual real stream */ + unsigned int ai_add_front; /* + * how many channels we must add + * before scan to satisfy S&H? + */ + unsigned int ai_add_back; /* + * how many channels we must add + * before scan to satisfy DMA? + */ + unsigned int *ai_chanlist; /* actual chanlist */ unsigned int ai_timer1; unsigned int ai_timer2; unsigned int ai_flags; - char ai12_startstop; /* measure can start/stop on external trigger */ - unsigned int ai_divisor1, ai_divisor2; /* divisors for start of measure on external start */ + char ai12_startstop; /* + * measure can start/stop + * on external trigger + */ + unsigned int ai_divisor1, ai_divisor2; /* + * divisors for start of measure + * on external start + */ unsigned int ai_data_len; short *ai_data; - short ao_data[2]; /* data output buffer */ - unsigned int ai_scans; /* number of scans to do */ - char dma_doublebuf; /* we can use double buffring */ - unsigned int dma_actbuf; /* which buffer is used now */ - short *dmabuf_virt[2]; /* pointers to begin of DMA buffer */ - unsigned long dmabuf_hw[2]; /* hw address of DMA buff */ - unsigned int dmabuf_size[2]; /* size of dma buffer in bytes */ - unsigned int dmabuf_use_size[2]; /* which size we may now used for transfer */ - unsigned int dmabuf_used_size[2]; /* which size was trully used */ + short ao_data[2]; /* data output buffer */ + unsigned int ai_scans; /* number of scans to do */ + char dma_doublebuf; /* we can use double buffring */ + unsigned int dma_actbuf; /* which buffer is used now */ + short *dmabuf_virt[2]; /* + * pointers to begin of + * DMA buffer + */ + unsigned long dmabuf_hw[2]; /* hw address of DMA buff */ + unsigned int dmabuf_size[2]; /* + * size of dma buffer in bytes + */ + unsigned int dmabuf_use_size[2]; /* + * which size we may now use + * for transfer + */ + unsigned int dmabuf_used_size[2]; /* which size was truly used */ unsigned int dmabuf_panic_size[2]; - unsigned int dmabuf_samples[2]; /* size in samples */ - int dmabuf_pages[2]; /* number of pages in buffer */ - unsigned char cnt0_users; /* bit field of 8254 CNT0 users (0-unused, 1-AO, 2-DI, 3-DO) */ - unsigned char exttrg_users; /* bit field of external trigger users (0-AI, 1-AO, 2-DI, 3-DO) */ - unsigned int cnt0_divisor; /* actual CNT0 divisor */ - void (*int_ai_func) (struct comedi_device *, struct comedi_subdevice *, unsigned short, unsigned int, unsigned short); /* ptr to actual interrupt AI function */ - unsigned char ai16bits; /* =1 16 bit card */ - unsigned char usedma; /* =1 use DMA transfer and not INT */ - unsigned char useeoshandle; /* =1 change WAKE_EOS DMA transfer to fit on every second */ - unsigned char usessh; /* =1 turn on S&H support */ - int softsshdelay; /* >0 use software S&H, numer is requested delay in ns */ - unsigned char softsshsample; /* polarity of S&H signal in sample state */ - unsigned char softsshhold; /* polarity of S&H signal in hold state */ - unsigned int ai_maskerr; /* which warning was printed */ - unsigned int ai_maskharderr; /* on which error bits stops */ - unsigned int ai_inttrig_start; /* TRIG_INT for start */ + unsigned int dmabuf_samples[2]; /* size in samples */ + int dmabuf_pages[2]; /* number of pages in buffer */ + unsigned char cnt0_users; /* + * bit field of 8254 CNT0 users + * (0-unused, 1-AO, 2-DI, 3-DO) + */ + unsigned char exttrg_users; /* + * bit field of external trigger + * users(0-AI, 1-AO, 2-DI, 3-DO) + */ + unsigned int cnt0_divisor; /* actual CNT0 divisor */ + void (*int_ai_func) (struct comedi_device *, struct comedi_subdevice *, + unsigned short, + unsigned int, + unsigned short); /* + * ptr to actual interrupt + * AI function + */ + unsigned char ai16bits; /* =1 16 bit card */ + unsigned char usedma; /* =1 use DMA transfer and not INT */ + unsigned char useeoshandle; /* + * =1 change WAKE_EOS DMA transfer + * to fit on every second + */ + unsigned char usessh; /* =1 turn on S&H support */ + int softsshdelay; /* + * >0 use software S&H, + * numer is requested delay in ns + */ + unsigned char softsshsample; /* + * polarity of S&H signal + * in sample state + */ + unsigned char softsshhold; /* + * polarity of S&H signal + * in hold state + */ + unsigned int ai_maskerr; /* which warning was printed */ + unsigned int ai_maskharderr; /* on which error bits stops */ + unsigned int ai_inttrig_start; /* TRIG_INT for start */ }; #define devpriv ((struct pci9118_private *)dev->private) @@ -346,12 +441,19 @@ static int pci9118_insn_read_ai(struct comedi_device *dev, devpriv->AdControlReg = AdControl_Int & 0xff; devpriv->AdFunctionReg = AdFunction_PDTrg | AdFunction_PETrg; - outl(devpriv->AdFunctionReg, dev->iobase + PCI9118_ADFUNC); /* positive triggers, no S&H, no burst, burst stop, no post trigger, no about trigger, trigger stop */ + outl(devpriv->AdFunctionReg, dev->iobase + PCI9118_ADFUNC); + /* + * positive triggers, no S&H, + * no burst, burst stop, + * no post trigger, + * no about trigger, + * trigger stop + */ if (!setup_channel_list(dev, s, 1, &insn->chanspec, 0, 0, 0, 0, 0)) return -EINVAL; - outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ + outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ for (n = 0; n < insn->n; n++) { outw(0, dev->iobase + PCI9118_SOFTTRG); /* start conversion */ @@ -365,7 +467,7 @@ static int pci9118_insn_read_ai(struct comedi_device *dev, comedi_error(dev, "A/D insn timeout"); data[n] = 0; - outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ + outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ return -ETIME; conv_finish: @@ -379,7 +481,7 @@ conv_finish: } } - outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ + outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ return n; } @@ -590,11 +692,13 @@ static void interrupt_pci9118_ai_onesample(struct comedi_device *dev, #ifdef PCI9118_PARANOIDCHECK if (devpriv->ai16bits == 0) { - if ((sampl & 0x000f) != devpriv->chanlist[s->async->cur_chan]) { /* data dropout! */ + if ((sampl & 0x000f) != devpriv->chanlist[s->async->cur_chan]) { + /* data dropout! */ printk - ("comedi: A/D SAMPL - data dropout: received channel %d, expected %d!\n", - sampl & 0x000f, - devpriv->chanlist[s->async->cur_chan]); + ("comedi: A/D SAMPL - data dropout: " + "received channel %d, expected %d!\n", + sampl & 0x000f, + devpriv->chanlist[s->async->cur_chan]); s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; pci9118_ai_cancel(dev, s); comedi_event(dev, s); @@ -604,11 +708,13 @@ static void interrupt_pci9118_ai_onesample(struct comedi_device *dev, #endif cfc_write_to_buffer(s, sampl); s->async->cur_chan++; - if (s->async->cur_chan >= devpriv->ai_n_scanlen) { /* one scan done */ + if (s->async->cur_chan >= devpriv->ai_n_scanlen) { + /* one scan done */ s->async->cur_chan %= devpriv->ai_n_scanlen; devpriv->ai_act_scan++; if (!(devpriv->ai_neverending)) - if (devpriv->ai_act_scan >= devpriv->ai_scans) { /* all data sampled */ + if (devpriv->ai_act_scan >= devpriv->ai_scans) { + /* all data sampled */ pci9118_ai_cancel(dev, s); s->async->events |= COMEDI_CB_EOA; } @@ -650,10 +756,14 @@ static void interrupt_pci9118_ai_dma(struct comedi_device *dev, if (pci9118_decode_error_status(dev, s, int_adstat)) return; - samplesinbuf = devpriv->dmabuf_use_size[devpriv->dma_actbuf] >> 1; /* number of received real samples */ + samplesinbuf = devpriv->dmabuf_use_size[devpriv->dma_actbuf] >> 1; + /* number of received real samples */ /* DPRINTK("dma_actbuf=%d\n",devpriv->dma_actbuf); */ - if (devpriv->dma_doublebuf) { /* switch DMA buffers if is used double buffering */ + if (devpriv->dma_doublebuf) { /* + * switch DMA buffers if is used + * double buffering + */ next_dma_buf = 1 - devpriv->dma_actbuf; outl(devpriv->dmabuf_hw[next_dma_buf], devpriv->iobase_a + AMCC_OP_REG_MWAR); @@ -666,25 +776,32 @@ static void interrupt_pci9118_ai_dma(struct comedi_device *dev, } if (samplesinbuf) { - m = devpriv->ai_data_len >> 1; /* how many samples is to end of buffer */ -/* DPRINTK("samps=%d m=%d %d %d\n",samplesinbuf,m,s->async->buf_int_count,s->async->buf_int_ptr); */ + m = devpriv->ai_data_len >> 1; /* + * how many samples is to + * end of buffer + */ +/* + * DPRINTK("samps=%d m=%d %d %d\n", + * samplesinbuf,m,s->async->buf_int_count,s->async->buf_int_ptr); + */ sampls = m; move_block_from_dma(dev, s, devpriv->dmabuf_virt[devpriv->dma_actbuf], samplesinbuf); - m = m - sampls; /* m= how many samples was transfered */ + m = m - sampls; /* m= how many samples was transfered */ } /* DPRINTK("YYY\n"); */ if (!devpriv->ai_neverending) - if (devpriv->ai_act_scan >= devpriv->ai_scans) { /* all data sampled */ + if (devpriv->ai_act_scan >= devpriv->ai_scans) { + /* all data sampled */ pci9118_ai_cancel(dev, s); s->async->events |= COMEDI_CB_EOA; } - if (devpriv->dma_doublebuf) { /* switch dma buffers */ + if (devpriv->dma_doublebuf) { /* switch dma buffers */ devpriv->dma_actbuf = 1 - devpriv->dma_actbuf; - } else { /* restart DMA if is not used double buffering */ + } else { /* restart DMA if is not used double buffering */ outl(devpriv->dmabuf_hw[0], devpriv->iobase_a + AMCC_OP_REG_MWAR); outl(devpriv->dmabuf_use_size[0], @@ -705,39 +822,62 @@ static irqreturn_t interrupt_pci9118(int irq, void *d) unsigned int int_daq = 0, int_amcc, int_adstat; if (!dev->attached) - return IRQ_NONE; /* not fully initialized */ + return IRQ_NONE; /* not fully initialized */ - int_daq = inl(dev->iobase + PCI9118_INTSRC) & 0xf; /* get IRQ reasons from card */ - int_amcc = inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR); /* get INT register from AMCC chip */ + int_daq = inl(dev->iobase + PCI9118_INTSRC) & 0xf; + /* get IRQ reasons from card */ + int_amcc = inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR); + /* get INT register from AMCC chip */ -/* DPRINTK("INT daq=0x%01x amcc=0x%08x MWAR=0x%08x MWTC=0x%08x ADSTAT=0x%02x ai_do=%d\n", int_daq, int_amcc, inl(devpriv->iobase_a+AMCC_OP_REG_MWAR), inl(devpriv->iobase_a+AMCC_OP_REG_MWTC), inw(dev->iobase+PCI9118_ADSTAT)&0x1ff,devpriv->ai_do); */ +/* + * DPRINTK("INT daq=0x%01x amcc=0x%08x MWAR=0x%08x + * MWTC=0x%08x ADSTAT=0x%02x ai_do=%d\n", + * int_daq, int_amcc, inl(devpriv->iobase_a+AMCC_OP_REG_MWAR), + * inl(devpriv->iobase_a+AMCC_OP_REG_MWTC), + * inw(dev->iobase+PCI9118_ADSTAT)&0x1ff,devpriv->ai_do); + */ if ((!int_daq) && (!(int_amcc & ANY_S593X_INT))) - return IRQ_NONE; /* interrupt from other source */ + return IRQ_NONE; /* interrupt from other source */ - outl(int_amcc | 0x00ff0000, devpriv->iobase_a + AMCC_OP_REG_INTCSR); /* shutdown IRQ reasons in AMCC */ + outl(int_amcc | 0x00ff0000, devpriv->iobase_a + AMCC_OP_REG_INTCSR); + /* shutdown IRQ reasons in AMCC */ - int_adstat = inw(dev->iobase + PCI9118_ADSTAT) & 0x1ff; /* get STATUS register */ + int_adstat = inw(dev->iobase + PCI9118_ADSTAT) & 0x1ff; + /* get STATUS register */ if (devpriv->ai_do) { if (devpriv->ai12_startstop) - if ((int_adstat & AdStatus_DTH) && (int_daq & Int_DTrg)) { /* start stop of measure */ + if ((int_adstat & AdStatus_DTH) && + (int_daq & Int_DTrg)) { + /* start stop of measure */ if (devpriv->ai12_startstop & START_AI_EXT) { devpriv->ai12_startstop &= ~START_AI_EXT; if (!(devpriv->ai12_startstop & - STOP_AI_EXT)) - pci9118_exttrg_del(dev, EXTTRG_AI); /* deactivate EXT trigger */ - start_pacer(dev, devpriv->ai_do, devpriv->ai_divisor1, devpriv->ai_divisor2); /* start pacer */ + STOP_AI_EXT)) + pci9118_exttrg_del + (dev, EXTTRG_AI); + /* deactivate EXT trigger */ + start_pacer(dev, devpriv->ai_do, + devpriv->ai_divisor1, + devpriv->ai_divisor2); + /* start pacer */ outl(devpriv->AdControlReg, - dev->iobase + PCI9118_ADCNTRL); + dev->iobase + PCI9118_ADCNTRL); } else { if (devpriv->ai12_startstop & - STOP_AI_EXT) { + STOP_AI_EXT) { devpriv->ai12_startstop &= - ~STOP_AI_EXT; - pci9118_exttrg_del(dev, EXTTRG_AI); /* deactivate EXT trigger */ - devpriv->ai_neverending = 0; /* well, on next interrupt from DMA/EOC measure will stop */ + ~STOP_AI_EXT; + pci9118_exttrg_del + (dev, EXTTRG_AI); + /* deactivate EXT trigger */ + devpriv->ai_neverending = 0; + /* + * well, on next interrupt from + * DMA/EOC measure will stop + */ } } } @@ -821,7 +961,11 @@ static int pci9118_ai_cmdtest(struct comedi_device *dev, if (err) return 1; - /* step 2: make sure trigger sources are unique and mutually compatible */ + /* + * step 2: + * make sure trigger sources are + * unique and mutually compatible + */ if (cmd->start_src != TRIG_NOW && cmd->start_src != TRIG_INT && cmd->start_src != TRIG_EXT) { @@ -1026,7 +1170,7 @@ static int pci9118_ai_cmdtest(struct comedi_device *dev, if (cmd->chanlist) if (!check_channel_list(dev, s, cmd->chanlist_len, cmd->chanlist, 0, 0)) - return 5; /* incorrect channels list */ + return 5; /* incorrect channels list */ return 0; } @@ -1043,88 +1187,101 @@ static int Compute_and_setup_dma(struct comedi_device *dev) dmalen1 = devpriv->dmabuf_size[1]; DPRINTK("1 dmalen0=%d dmalen1=%d ai_data_len=%d\n", dmalen0, dmalen1, devpriv->ai_data_len); - /* isn't output buff smaller that our DMA buff? */ + /* isn't output buff smaller that our DMA buff? */ if (dmalen0 > (devpriv->ai_data_len)) { - dmalen0 = devpriv->ai_data_len & ~3L; /* allign to 32bit down */ + dmalen0 = devpriv->ai_data_len & ~3L; /* + * align to 32bit down + */ } if (dmalen1 > (devpriv->ai_data_len)) { - dmalen1 = devpriv->ai_data_len & ~3L; /* allign to 32bit down */ + dmalen1 = devpriv->ai_data_len & ~3L; /* + * align to 32bit down + */ } DPRINTK("2 dmalen0=%d dmalen1=%d \n", dmalen0, dmalen1); - /* we want wake up every scan? */ + /* we want wake up every scan? */ if (devpriv->ai_flags & TRIG_WAKE_EOS) { if (dmalen0 < (devpriv->ai_n_realscanlen << 1)) { - /* uff, too short DMA buffer, disable EOS support! */ + /* uff, too short DMA buffer, disable EOS support! */ devpriv->ai_flags &= (~TRIG_WAKE_EOS); printk - ("comedi%d: WAR: DMA0 buf too short, cann't support TRIG_WAKE_EOS (%d<%d)\n", + ("comedi%d: WAR: DMA0 buf too short, can't " + "support TRIG_WAKE_EOS (%d<%d)\n", dev->minor, dmalen0, devpriv->ai_n_realscanlen << 1); } else { - /* short first DMA buffer to one scan */ + /* short first DMA buffer to one scan */ dmalen0 = devpriv->ai_n_realscanlen << 1; DPRINTK - ("21 dmalen0=%d ai_n_realscanlen=%d useeoshandle=%d\n", - dmalen0, devpriv->ai_n_realscanlen, - devpriv->useeoshandle); + ("21 dmalen0=%d ai_n_realscanlen=%d " + "useeoshandle=%d\n", + dmalen0, devpriv->ai_n_realscanlen, + devpriv->useeoshandle); if (devpriv->useeoshandle) dmalen0 += 2; if (dmalen0 < 4) { printk - ("comedi%d: ERR: DMA0 buf len bug? (%d<4)\n", - dev->minor, dmalen0); + ("comedi%d: ERR: DMA0 buf len bug? " + "(%d<4)\n", + dev->minor, dmalen0); dmalen0 = 4; } } } if (devpriv->ai_flags & TRIG_WAKE_EOS) { if (dmalen1 < (devpriv->ai_n_realscanlen << 1)) { - /* uff, too short DMA buffer, disable EOS support! */ + /* uff, too short DMA buffer, disable EOS support! */ devpriv->ai_flags &= (~TRIG_WAKE_EOS); printk - ("comedi%d: WAR: DMA1 buf too short, cann't support TRIG_WAKE_EOS (%d<%d)\n", + ("comedi%d: WAR: DMA1 buf too short, " + "can't support TRIG_WAKE_EOS (%d<%d)\n", dev->minor, dmalen1, devpriv->ai_n_realscanlen << 1); } else { - /* short second DMA buffer to one scan */ + /* short second DMA buffer to one scan */ dmalen1 = devpriv->ai_n_realscanlen << 1; DPRINTK - ("22 dmalen1=%d ai_n_realscanlen=%d useeoshandle=%d\n", + ("22 dmalen1=%d ai_n_realscanlen=%d " + "useeoshandle=%d\n", dmalen1, devpriv->ai_n_realscanlen, devpriv->useeoshandle); if (devpriv->useeoshandle) dmalen1 -= 2; if (dmalen1 < 4) { printk - ("comedi%d: ERR: DMA1 buf len bug? (%d<4)\n", - dev->minor, dmalen1); + ("comedi%d: ERR: DMA1 buf len bug? " + "(%d<4)\n", + dev->minor, dmalen1); dmalen1 = 4; } } } DPRINTK("3 dmalen0=%d dmalen1=%d \n", dmalen0, dmalen1); - /* transfer without TRIG_WAKE_EOS */ + /* transfer without TRIG_WAKE_EOS */ if (!(devpriv->ai_flags & TRIG_WAKE_EOS)) { - /* if it's possible then allign DMA buffers to length of scan */ + /* if it's possible then allign DMA buffers to length of scan */ i = dmalen0; dmalen0 = (dmalen0 / (devpriv->ai_n_realscanlen << 1)) * (devpriv->ai_n_realscanlen << 1); dmalen0 &= ~3L; if (!dmalen0) - dmalen0 = i; /* uff. very long scan? */ + dmalen0 = i; /* uff. very long scan? */ i = dmalen1; dmalen1 = (dmalen1 / (devpriv->ai_n_realscanlen << 1)) * (devpriv->ai_n_realscanlen << 1); dmalen1 &= ~3L; if (!dmalen1) - dmalen1 = i; /* uff. very long scan? */ - /* if measure isn't neverending then test, if it whole fits into one or two DMA buffers */ + dmalen1 = i; /* uff. very long scan? */ + /* + * if measure isn't neverending then test, if it fits whole + * into one or two DMA buffers + */ if (!devpriv->ai_neverending) { - /* fits whole measure into one DMA buffer? */ + /* fits whole measure into one DMA buffer? */ if (dmalen0 > ((devpriv->ai_n_realscanlen << 1) * devpriv->ai_scans)) { @@ -1138,7 +1295,10 @@ static int Compute_and_setup_dma(struct comedi_device *dev) DPRINTK("3.1 dmalen0=%d dmalen1=%d \n", dmalen0, dmalen1); dmalen0 &= ~3L; - } else { /* fits whole measure into two DMA buffer? */ + } else { /* + * fits whole measure into + * two DMA buffer? + */ if (dmalen1 > ((devpriv->ai_n_realscanlen << 1) * devpriv->ai_scans - dmalen0)) @@ -1154,7 +1314,7 @@ static int Compute_and_setup_dma(struct comedi_device *dev) DPRINTK("4 dmalen0=%d dmalen1=%d \n", dmalen0, dmalen1); - /* these DMA buffer size we'll be used */ + /* these DMA buffer size will be used */ devpriv->dma_actbuf = 0; devpriv->dmabuf_use_size[0] = dmalen0; devpriv->dmabuf_use_size[1] = dmalen1; @@ -1176,10 +1336,11 @@ static int Compute_and_setup_dma(struct comedi_device *dev) } #endif - outl(inl(devpriv->iobase_a + AMCC_OP_REG_MCSR) & (~EN_A2P_TRANSFERS), devpriv->iobase_a + AMCC_OP_REG_MCSR); /* stop DMA */ + outl(inl(devpriv->iobase_a + AMCC_OP_REG_MCSR) & (~EN_A2P_TRANSFERS), + devpriv->iobase_a + AMCC_OP_REG_MCSR); /* stop DMA */ outl(devpriv->dmabuf_hw[0], devpriv->iobase_a + AMCC_OP_REG_MWAR); outl(devpriv->dmabuf_use_size[0], devpriv->iobase_a + AMCC_OP_REG_MWTC); - /* init DMA transfer */ + /* init DMA transfer */ outl(0x00000000 | AINT_WRITE_COMPL, devpriv->iobase_a + AMCC_OP_REG_INTCSR); /* outl(0x02000000|AINT_WRITE_COMPL, devpriv->iobase_a+AMCC_OP_REG_INTCSR); */ @@ -1187,7 +1348,9 @@ static int Compute_and_setup_dma(struct comedi_device *dev) outl(inl(devpriv->iobase_a + AMCC_OP_REG_MCSR) | RESET_A2P_FLAGS | A2P_HI_PRIORITY | EN_A2P_TRANSFERS, devpriv->iobase_a + AMCC_OP_REG_MCSR); - outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) | EN_A2P_TRANSFERS, devpriv->iobase_a + AMCC_OP_REG_INTCSR); /* allow bus mastering */ + outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) | EN_A2P_TRANSFERS, + devpriv->iobase_a + AMCC_OP_REG_INTCSR); + /* allow bus mastering */ DPRINTK("adl_pci9118 EDBG: END: Compute_and_setup_dma()\n"); return 0; @@ -1220,17 +1383,21 @@ static int pci9118_ai_docmd_sampl(struct comedi_device *dev, return -EIO; }; - devpriv->int_ai_func = interrupt_pci9118_ai_onesample; /* transfer function */ + devpriv->int_ai_func = interrupt_pci9118_ai_onesample; + /* transfer function */ if (devpriv->ai12_startstop) - pci9118_exttrg_add(dev, EXTTRG_AI); /* activate EXT trigger */ + pci9118_exttrg_add(dev, EXTTRG_AI); + /* activate EXT trigger */ if ((devpriv->ai_do == 1) || (devpriv->ai_do == 2)) devpriv->IntControlReg |= Int_Timer; devpriv->AdControlReg |= AdControl_Int; - outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) | 0x1f00, devpriv->iobase_a + AMCC_OP_REG_INTCSR); /* allow INT in AMCC */ + outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) | 0x1f00, + devpriv->iobase_a + AMCC_OP_REG_INTCSR); + /* allow INT in AMCC */ if (!(devpriv->ai12_startstop & (START_AI_EXT | START_AI_INT))) { outl(devpriv->IntControlReg, dev->iobase + PCI9118_INTCTRL); @@ -1296,10 +1463,12 @@ static int pci9118_ai_docmd_dma(struct comedi_device *dev, }; if (devpriv->ai12_startstop) { - pci9118_exttrg_add(dev, EXTTRG_AI); /* activate EXT trigger */ + pci9118_exttrg_add(dev, EXTTRG_AI); + /* activate EXT trigger */ } - devpriv->int_ai_func = interrupt_pci9118_ai_dma; /* transfer function */ + devpriv->int_ai_func = interrupt_pci9118_ai_dma; + /* transfer function */ outl(0x02000000 | AINT_WRITE_COMPL, devpriv->iobase_a + AMCC_OP_REG_INTCSR); @@ -1342,7 +1511,7 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_add_back = 0; devpriv->ai_maskerr = 0x10e; - /* prepare for start/stop conditions */ + /* prepare for start/stop conditions */ if (cmd->start_src == TRIG_EXT) devpriv->ai12_startstop |= START_AI_EXT; if (cmd->stop_src == TRIG_EXT) { @@ -1369,10 +1538,10 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_scans = 0; } - /* use sample&hold signal? */ + /* use sample&hold signal? */ if (cmd->convert_src == TRIG_NOW) { devpriv->usessh = 1; - } /* yes */ + } /* yes */ else { devpriv->usessh = 0; } /* no */ @@ -1381,7 +1550,10 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_neverending, devpriv->ai_scans, devpriv->usessh, devpriv->ai12_startstop); - /* use additional sample at end of every scan to satisty DMA 32 bit transfer? */ + /* + * use additional sample at end of every scan + * to satisty DMA 32 bit transfer? + */ devpriv->ai_add_front = 0; devpriv->ai_add_back = 0; devpriv->useeoshandle = 0; @@ -1393,27 +1565,44 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_add_back = 1; } if (cmd->convert_src == TRIG_TIMER) { - devpriv->usedma = 0; /* use INT transfer if scanlist have only one channel */ + devpriv->usedma = 0; + /* + * use INT transfer if scanlist + * have only one channel + */ } } if ((cmd->flags & TRIG_WAKE_EOS) && (devpriv->ai_n_scanlen & 1) && (devpriv->ai_n_scanlen > 1)) { if (cmd->scan_begin_src == TRIG_FOLLOW) { - /* vpriv->useeoshandle=1; // change DMA transfer block to fit EOS on every second call */ - devpriv->usedma = 0; /* XXX maybe can be corrected to use 16 bit DMA */ - } else { /* well, we must insert one sample to end of EOS to meet 32 bit transfer */ + /* + * vpriv->useeoshandle=1; // change DMA transfer + * block to fit EOS on every second call + */ + devpriv->usedma = 0; + /* + * XXX maybe can be corrected to use 16 bit DMA + */ + } else { /* + * well, we must insert one sample + * to end of EOS to meet 32 bit transfer + */ devpriv->ai_add_back = 1; } } - } else { /* interrupt transfer don't need any correction */ + } else { /* interrupt transfer don't need any correction */ devpriv->usedma = 0; } - /* we need software S&H signal? It add two samples before every scan as minimum */ + /* + * we need software S&H signal? + * It adds two samples before every scan as minimum + */ if (devpriv->usessh && devpriv->softsshdelay) { devpriv->ai_add_front = 2; - if ((devpriv->usedma == 1) && (devpriv->ai_add_back == 1)) { /* move it to front */ + if ((devpriv->usedma == 1) && (devpriv->ai_add_back == 1)) { + /* move it to front */ devpriv->ai_add_front++; devpriv->ai_add_back = 0; } @@ -1422,17 +1611,22 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) addchans = devpriv->softsshdelay / cmd->convert_arg; if (devpriv->softsshdelay % cmd->convert_arg) addchans++; - if (addchans > (devpriv->ai_add_front - 1)) { /* uff, still short :-( */ + if (addchans > (devpriv->ai_add_front - 1)) { + /* uff, still short */ devpriv->ai_add_front = addchans + 1; if (devpriv->usedma == 1) if ((devpriv->ai_add_front + devpriv->ai_n_chan + devpriv->ai_add_back) & 1) - devpriv->ai_add_front++; /* round up to 32 bit */ + devpriv->ai_add_front++; + /* round up to 32 bit */ } } - /* well, we now know what must be all added */ - devpriv->ai_n_realscanlen = /* what we must take from card in real to have ai_n_scanlen on output? */ + /* well, we now know what must be all added */ + devpriv->ai_n_realscanlen = /* + * what we must take from card in real + * to have ai_n_scanlen on output? + */ (devpriv->ai_add_front + devpriv->ai_n_chan + devpriv->ai_add_back) * (devpriv->ai_n_scanlen / devpriv->ai_n_chan); @@ -1443,7 +1637,7 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_n_chan, devpriv->ai_add_back, devpriv->ai_n_scanlen); - /* check and setup channel list */ + /* check and setup channel list */ if (!check_channel_list(dev, s, devpriv->ai_n_chan, devpriv->ai_chanlist, devpriv->ai_add_front, devpriv->ai_add_back)) @@ -1454,9 +1648,16 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->useeoshandle)) return -EINVAL; - /* compute timers settings */ - /* simplest way, fr=4Mhz/(tim1*tim2), channel manipulation without timers effect */ - if (((cmd->scan_begin_src == TRIG_FOLLOW) || (cmd->scan_begin_src == TRIG_EXT) || (cmd->scan_begin_src == TRIG_INT)) && (cmd->convert_src == TRIG_TIMER)) { /* both timer is used for one time */ + /* compute timers settings */ + /* + * simplest way, fr=4Mhz/(tim1*tim2), + * channel manipulation without timers effect + */ + if (((cmd->scan_begin_src == TRIG_FOLLOW) || + (cmd->scan_begin_src == TRIG_EXT) || + (cmd->scan_begin_src == TRIG_INT)) && + (cmd->convert_src == TRIG_TIMER)) { + /* both timer is used for one time */ if (cmd->scan_begin_src == TRIG_EXT) { devpriv->ai_do = 4; } else { @@ -1472,10 +1673,14 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_timer2 = cmd->convert_arg; } - if ((cmd->scan_begin_src == TRIG_TIMER) && ((cmd->convert_src == TRIG_TIMER) || (cmd->convert_src == TRIG_NOW))) { /* double timed action */ + if ((cmd->scan_begin_src == TRIG_TIMER) && + ((cmd->convert_src == TRIG_TIMER) || + (cmd->convert_src == TRIG_NOW))) { + /* double timed action */ if (!devpriv->usedma) { comedi_error(dev, - "cmd->scan_begin_src=TRIG_TIMER works only with bus mastering!"); + "cmd->scan_begin_src=TRIG_TIMER works " + "only with bus mastering!"); return -EIO; } @@ -1496,15 +1701,27 @@ static int pci9118_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_do = 3; } - start_pacer(dev, -1, 0, 0); /* stop pacer */ + start_pacer(dev, -1, 0, 0); /* stop pacer */ - devpriv->AdControlReg = 0; /* bipolar, S.E., use 8254, stop 8354, internal trigger, soft trigger, disable DMA */ + devpriv->AdControlReg = 0; /* + * bipolar, S.E., use 8254, stop 8354, + * internal trigger, soft trigger, + * disable DMA + */ outl(devpriv->AdControlReg, dev->iobase + PCI9118_ADCNTRL); - devpriv->AdFunctionReg = AdFunction_PDTrg | AdFunction_PETrg; /* positive triggers, no S&H, no burst, burst stop, no post trigger, no about trigger, trigger stop */ + devpriv->AdFunctionReg = AdFunction_PDTrg | AdFunction_PETrg; + /* + * positive triggers, no S&H, no burst, + * burst stop, no post trigger, + * no about trigger, trigger stop + */ outl(devpriv->AdFunctionReg, dev->iobase + PCI9118_ADFUNC); udelay(1); - outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ - inl(dev->iobase + PCI9118_ADSTAT); /* flush A/D and INT status register */ + outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ + inl(dev->iobase + PCI9118_ADSTAT); /* + * flush A/D and INT + * status register + */ inl(dev->iobase + PCI9118_INTSRC); devpriv->ai_act_scan = 0; @@ -1537,33 +1754,37 @@ static int check_channel_list(struct comedi_device *dev, } if ((frontadd + n_chan + backadd) > s->len_chanlist) { printk - ("comedi%d: range/channel list is too long for actual configuration (%d>%d)!", + ("comedi%d: range/channel list is too long for " + "actual configuration (%d>%d)!", dev->minor, n_chan, s->len_chanlist - frontadd - backadd); return 0; } if (CR_AREF(chanlist[0]) == AREF_DIFF) - differencial = 1; /* all input must be diff */ + differencial = 1; /* all input must be diff */ if (CR_RANGE(chanlist[0]) < PCI9118_BIPOLAR_RANGES) - bipolar = 1; /* all input must be bipolar */ + bipolar = 1; /* all input must be bipolar */ if (n_chan > 1) - for (i = 1; i < n_chan; i++) { /* check S.E/diff */ + for (i = 1; i < n_chan; i++) { /* check S.E/diff */ if ((CR_AREF(chanlist[i]) == AREF_DIFF) != (differencial)) { comedi_error(dev, - "Differencial and single ended inputs cann't be mixtured!"); + "Differencial and single ended " + "inputs can't be mixtured!"); return 0; } if ((CR_RANGE(chanlist[i]) < PCI9118_BIPOLAR_RANGES) != (bipolar)) { comedi_error(dev, - "Bipolar and unipolar ranges cann't be mixtured!"); + "Bipolar and unipolar ranges " + "can't be mixtured!"); return 0; } if ((!devpriv->usemux) & (differencial) & (CR_CHAN(chanlist[i]) >= this_board->n_aichand)) { comedi_error(dev, - "If AREF_DIFF is used then is available only first 8 channels!"); + "If AREF_DIFF is used then is " + "available only first 8 channels!"); return 0; } } @@ -1583,7 +1804,8 @@ static int setup_channel_list(struct comedi_device *dev, unsigned int scanquad, gain, ssh = 0x00; DPRINTK - ("adl_pci9118 EDBG: BGN: setup_channel_list(%d,.,%d,.,%d,%d,%d,%d)\n", + ("adl_pci9118 EDBG: BGN: setup_channel_list" + "(%d,.,%d,.,%d,%d,%d,%d)\n", dev->minor, n_chan, rot, frontadd, backadd, usedma); if (usedma == 1) { @@ -1592,27 +1814,33 @@ static int setup_channel_list(struct comedi_device *dev, } if (CR_AREF(chanlist[0]) == AREF_DIFF) - differencial = 1; /* all input must be diff */ + differencial = 1; /* all input must be diff */ if (CR_RANGE(chanlist[0]) < PCI9118_BIPOLAR_RANGES) - bipolar = 1; /* all input must be bipolar */ + bipolar = 1; /* all input must be bipolar */ - /* All is ok, so we can setup channel/range list */ + /* All is ok, so we can setup channel/range list */ if (!bipolar) { - devpriv->AdControlReg |= AdControl_UniP; /* set unibipolar */ + devpriv->AdControlReg |= AdControl_UniP; + /* set unibipolar */ } else { - devpriv->AdControlReg &= ((~AdControl_UniP) & 0xff); /* enable bipolar */ + devpriv->AdControlReg &= ((~AdControl_UniP) & 0xff); + /* enable bipolar */ } if (differencial) { - devpriv->AdControlReg |= AdControl_Diff; /* enable diff inputs */ + devpriv->AdControlReg |= AdControl_Diff; + /* enable diff inputs */ } else { - devpriv->AdControlReg &= ((~AdControl_Diff) & 0xff); /* set single ended inputs */ + devpriv->AdControlReg &= ((~AdControl_Diff) & 0xff); + /* set single ended inputs */ } - outl(devpriv->AdControlReg, dev->iobase + PCI9118_ADCNTRL); /* setup mode */ + outl(devpriv->AdControlReg, dev->iobase + PCI9118_ADCNTRL); + /* setup mode */ - outl(2, dev->iobase + PCI9118_SCANMOD); /* gods know why this sequence! */ + outl(2, dev->iobase + PCI9118_SCANMOD); + /* gods know why this sequence! */ outl(0, dev->iobase + PCI9118_SCANMOD); outl(1, dev->iobase + PCI9118_SCANMOD); @@ -1622,12 +1850,15 @@ static int setup_channel_list(struct comedi_device *dev, devpriv->chanlist[i] = 0x55aa; #endif - if (frontadd) { /* insert channels for S&H */ + if (frontadd) { /* insert channels for S&H */ ssh = devpriv->softsshsample; DPRINTK("FA: %04x: ", ssh); - for (i = 0; i < frontadd; i++) { /* store range list to card */ - scanquad = CR_CHAN(chanlist[0]); /* get channel number; */ - gain = CR_RANGE(chanlist[0]); /* get gain number */ + for (i = 0; i < frontadd; i++) { + /* store range list to card */ + scanquad = CR_CHAN(chanlist[0]); + /* get channel number; */ + gain = CR_RANGE(chanlist[0]); + /* get gain number */ scanquad |= ((gain & 0x03) << 8); outl(scanquad | ssh, dev->iobase + PCI9118_GAIN); DPRINTK("%02x ", scanquad | ssh); @@ -1637,23 +1868,24 @@ static int setup_channel_list(struct comedi_device *dev, } DPRINTK("SL: ", ssh); - for (i = 0; i < n_chan; i++) { /* store range list to card */ - scanquad = CR_CHAN(chanlist[i]); /* get channel number; */ + for (i = 0; i < n_chan; i++) { /* store range list to card */ + scanquad = CR_CHAN(chanlist[i]); /* get channel number */ #ifdef PCI9118_PARANOIDCHECK devpriv->chanlist[i ^ usedma] = (scanquad & 0xf) << rot; #endif - gain = CR_RANGE(chanlist[i]); /* get gain number */ + gain = CR_RANGE(chanlist[i]); /* get gain number */ scanquad |= ((gain & 0x03) << 8); outl(scanquad | ssh, dev->iobase + PCI9118_GAIN); DPRINTK("%02x ", scanquad | ssh); } DPRINTK("\n "); - if (backadd) { /* insert channels for fit onto 32bit DMA */ + if (backadd) { /* insert channels for fit onto 32bit DMA */ DPRINTK("BA: %04x: ", ssh); - for (i = 0; i < backadd; i++) { /* store range list to card */ - scanquad = CR_CHAN(chanlist[0]); /* get channel number; */ - gain = CR_RANGE(chanlist[0]); /* get gain number */ + for (i = 0; i < backadd; i++) { /* store range list to card */ + scanquad = CR_CHAN(chanlist[0]); + /* get channel number */ + gain = CR_RANGE(chanlist[0]); /* get gain number */ scanquad |= ((gain & 0x03) << 8); outl(scanquad | ssh, dev->iobase + PCI9118_GAIN); DPRINTK("%02x ", scanquad | ssh); @@ -1661,13 +1893,16 @@ static int setup_channel_list(struct comedi_device *dev, DPRINTK("\n "); } #ifdef PCI9118_PARANOIDCHECK - devpriv->chanlist[n_chan ^ usedma] = devpriv->chanlist[0 ^ usedma]; /* for 32bit oerations */ + devpriv->chanlist[n_chan ^ usedma] = devpriv->chanlist[0 ^ usedma]; + /* for 32bit operations */ if (useeos) { - for (i = 1; i < n_chan; i++) { /* store range list to card */ + for (i = 1; i < n_chan; i++) { /* store range list to card */ devpriv->chanlist[(n_chan + i) ^ usedma] = (CR_CHAN(chanlist[i]) & 0xf) << rot; } - devpriv->chanlist[(2 * n_chan) ^ usedma] = devpriv->chanlist[0 ^ usedma]; /* for 32bit oerations */ + devpriv->chanlist[(2 * n_chan) ^ usedma] = + devpriv->chanlist[0 ^ usedma]; + /* for 32bit operations */ useeos = 2; } else { useeos = 1; @@ -1680,11 +1915,11 @@ static int setup_channel_list(struct comedi_device *dev, DPRINTK("\n "); #endif #endif - outl(0, dev->iobase + PCI9118_SCANMOD); /* close scan queue */ -/* udelay(100); important delay, or first sample will be cripled */ + outl(0, dev->iobase + PCI9118_SCANMOD); /* close scan queue */ + /* udelay(100); important delay, or first sample will be crippled */ DPRINTK("adl_pci9118 EDBG: END: setup_channel_list()\n"); - return 1; /* we can serve this with scan logic */ + return 1; /* we can serve this with scan logic */ } /* @@ -1699,7 +1934,8 @@ static void pci9118_calc_divisors(char mode, struct comedi_device *dev, char usessh, unsigned int chnsshfront) { DPRINTK - ("adl_pci9118 EDBG: BGN: pci9118_calc_divisors(%d,%d,.,%u,%u,%u,%d,.,.,,%u,%u)\n", + ("adl_pci9118 EDBG: BGN: pci9118_calc_divisors" + "(%d,%d,.,%u,%u,%u,%d,.,.,,%u,%u)\n", mode, dev->minor, *tim1, *tim2, flags, chans, usessh, chnsshfront); switch (mode) { case 1: @@ -1716,17 +1952,18 @@ static void pci9118_calc_divisors(char mode, struct comedi_device *dev, *tim2 = this_board->ai_ns_min; DPRINTK("1 div1=%u div2=%u timer1=%u timer2=%u\n", *div1, *div2, *tim1, *tim2); - *div1 = *tim2 / devpriv->i8254_osc_base; /* convert timer (burst) */ + *div1 = *tim2 / devpriv->i8254_osc_base; + /* convert timer (burst) */ DPRINTK("2 div1=%u div2=%u timer1=%u timer2=%u\n", *div1, *div2, *tim1, *tim2); if (*div1 < this_board->ai_pacer_min) *div1 = this_board->ai_pacer_min; DPRINTK("3 div1=%u div2=%u timer1=%u timer2=%u\n", *div1, *div2, *tim1, *tim2); - *div2 = *tim1 / devpriv->i8254_osc_base; /* scan timer */ + *div2 = *tim1 / devpriv->i8254_osc_base; /* scan timer */ DPRINTK("4 div1=%u div2=%u timer1=%u timer2=%u\n", *div1, *div2, *tim1, *tim2); - *div2 = *div2 / *div1; /* major timer is c1*c2 */ + *div2 = *div2 / *div1; /* major timer is c1*c2 */ DPRINTK("5 div1=%u div2=%u timer1=%u timer2=%u\n", *div1, *div2, *tim1, *tim2); if (*div2 < chans) @@ -1734,9 +1971,10 @@ static void pci9118_calc_divisors(char mode, struct comedi_device *dev, DPRINTK("6 div1=%u div2=%u timer1=%u timer2=%u\n", *div1, *div2, *tim1, *tim2); - *tim2 = *div1 * devpriv->i8254_osc_base; /* real convert timer */ + *tim2 = *div1 * devpriv->i8254_osc_base; + /* real convert timer */ - if (usessh & (chnsshfront == 0)) /* use BSSH signal */ + if (usessh & (chnsshfront == 0)) /* use BSSH signal */ if (*div2 < (chans + 2)) *div2 = chans + 2; @@ -1776,11 +2014,13 @@ static void start_pacer(struct comedi_device *dev, int mode, static int pci9118_exttrg_add(struct comedi_device *dev, unsigned char source) { if (source > 3) - return -1; /* incorrect source */ + return -1; /* incorrect source */ devpriv->exttrg_users |= (1 << source); devpriv->IntControlReg |= Int_DTrg; outl(devpriv->IntControlReg, dev->iobase + PCI9118_INTCTRL); - outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) | 0x1f00, devpriv->iobase_a + AMCC_OP_REG_INTCSR); /* allow INT in AMCC */ + outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) | 0x1f00, + devpriv->iobase_a + AMCC_OP_REG_INTCSR); + /* allow INT in AMCC */ return 0; } @@ -1790,12 +2030,15 @@ static int pci9118_exttrg_add(struct comedi_device *dev, unsigned char source) static int pci9118_exttrg_del(struct comedi_device *dev, unsigned char source) { if (source > 3) - return -1; /* incorrect source */ + return -1; /* incorrect source */ devpriv->exttrg_users &= ~(1 << source); - if (!devpriv->exttrg_users) { /* shutdown ext trg intterrupts */ + if (!devpriv->exttrg_users) { /* shutdown ext trg intterrupts */ devpriv->IntControlReg &= ~Int_DTrg; - if (!devpriv->IntControlReg) /* all IRQ disabled */ - outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) & (~0x00001f00), devpriv->iobase_a + AMCC_OP_REG_INTCSR); /* disable int in AMCC */ + if (!devpriv->IntControlReg) /* all IRQ disabled */ + outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) & + (~0x00001f00), + devpriv->iobase_a + AMCC_OP_REG_INTCSR); + /* disable int in AMCC */ outl(devpriv->IntControlReg, dev->iobase + PCI9118_INTCTRL); } return 0; @@ -1808,17 +2051,29 @@ static int pci9118_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) { if (devpriv->usedma) - outl(inl(devpriv->iobase_a + AMCC_OP_REG_MCSR) & (~EN_A2P_TRANSFERS), devpriv->iobase_a + AMCC_OP_REG_MCSR); /* stop DMA */ + outl(inl(devpriv->iobase_a + AMCC_OP_REG_MCSR) & + (~EN_A2P_TRANSFERS), + devpriv->iobase_a + AMCC_OP_REG_MCSR); /* stop DMA */ pci9118_exttrg_del(dev, EXTTRG_AI); - start_pacer(dev, 0, 0, 0); /* stop 8254 counters */ + start_pacer(dev, 0, 0, 0); /* stop 8254 counters */ devpriv->AdFunctionReg = AdFunction_PDTrg | AdFunction_PETrg; - outl(devpriv->AdFunctionReg, dev->iobase + PCI9118_ADFUNC); /* positive triggers, no S&H, no burst, burst stop, no post trigger, no about trigger, trigger stop */ + outl(devpriv->AdFunctionReg, dev->iobase + PCI9118_ADFUNC); + /* + * positive triggers, no S&H, no burst, + * burst stop, no post trigger, + * no about trigger, trigger stop + */ devpriv->AdControlReg = 0x00; - outl(devpriv->AdControlReg, dev->iobase + PCI9118_ADCNTRL); /* bipolar, S.E., use 8254, stop 8354, internal trigger, soft trigger, disable INT and DMA */ + outl(devpriv->AdControlReg, dev->iobase + PCI9118_ADCNTRL); + /* + * bipolar, S.E., use 8254, stop 8354, + * internal trigger, soft trigger, + * disable INT and DMA + */ outl(0, dev->iobase + PCI9118_BURST); outl(1, dev->iobase + PCI9118_SCANMOD); - outl(2, dev->iobase + PCI9118_SCANMOD); /* reset scan queue */ - outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ + outl(2, dev->iobase + PCI9118_SCANMOD); /* reset scan queue */ + outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ devpriv->ai_do = 0; devpriv->usedma = 0; @@ -1832,7 +2087,9 @@ static int pci9118_ai_cancel(struct comedi_device *dev, devpriv->dma_actbuf = 0; if (!devpriv->IntControlReg) - outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) | 0x1f00, devpriv->iobase_a + AMCC_OP_REG_INTCSR); /* allow INT in AMCC */ + outl(inl(devpriv->iobase_a + AMCC_OP_REG_INTCSR) | 0x1f00, + devpriv->iobase_a + AMCC_OP_REG_INTCSR); + /* allow INT in AMCC */ return 0; } @@ -1845,31 +2102,52 @@ static int pci9118_reset(struct comedi_device *dev) devpriv->IntControlReg = 0; devpriv->exttrg_users = 0; inl(dev->iobase + PCI9118_INTCTRL); - outl(devpriv->IntControlReg, dev->iobase + PCI9118_INTCTRL); /* disable interrupts source */ + outl(devpriv->IntControlReg, dev->iobase + PCI9118_INTCTRL); + /* disable interrupts source */ outl(0x30, dev->iobase + PCI9118_CNTCTRL); /* outl(0xb4, dev->iobase + PCI9118_CNTCTRL); */ - start_pacer(dev, 0, 0, 0); /* stop 8254 counters */ + start_pacer(dev, 0, 0, 0); /* stop 8254 counters */ devpriv->AdControlReg = 0; - outl(devpriv->AdControlReg, dev->iobase + PCI9118_ADCNTRL); /* bipolar, S.E., use 8254, stop 8354, internal trigger, soft trigger, disable INT and DMA */ + outl(devpriv->AdControlReg, dev->iobase + PCI9118_ADCNTRL); + /* + * bipolar, S.E., use 8254, + * stop 8354, internal trigger, + * soft trigger, + * disable INT and DMA + */ outl(0, dev->iobase + PCI9118_BURST); outl(1, dev->iobase + PCI9118_SCANMOD); - outl(2, dev->iobase + PCI9118_SCANMOD); /* reset scan queue */ + outl(2, dev->iobase + PCI9118_SCANMOD); /* reset scan queue */ devpriv->AdFunctionReg = AdFunction_PDTrg | AdFunction_PETrg; - outl(devpriv->AdFunctionReg, dev->iobase + PCI9118_ADFUNC); /* positive triggers, no S&H, no burst, burst stop, no post trigger, no about trigger, trigger stop */ + outl(devpriv->AdFunctionReg, dev->iobase + PCI9118_ADFUNC); + /* + * positive triggers, no S&H, + * no burst, burst stop, + * no post trigger, + * no about trigger, + * trigger stop + */ devpriv->ao_data[0] = 2047; devpriv->ao_data[1] = 2047; - outl(devpriv->ao_data[0], dev->iobase + PCI9118_DA1); /* reset A/D outs to 0V */ + outl(devpriv->ao_data[0], dev->iobase + PCI9118_DA1); + /* reset A/D outs to 0V */ outl(devpriv->ao_data[1], dev->iobase + PCI9118_DA2); - outl(0, dev->iobase + PCI9118_DO); /* reset digi outs to L */ + outl(0, dev->iobase + PCI9118_DO); /* reset digi outs to L */ udelay(10); inl(dev->iobase + PCI9118_AD_DATA); - outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ - outl(0, dev->iobase + PCI9118_INTSRC); /* remove INT requests */ - inl(dev->iobase + PCI9118_ADSTAT); /* flush A/D status register */ - inl(dev->iobase + PCI9118_INTSRC); /* flush INT requests */ + outl(0, dev->iobase + PCI9118_DELFIFO); /* flush FIFO */ + outl(0, dev->iobase + PCI9118_INTSRC); /* remove INT requests */ + inl(dev->iobase + PCI9118_ADSTAT); /* flush A/D status register */ + inl(dev->iobase + PCI9118_INTSRC); /* flush INT requests */ devpriv->AdControlReg = 0; - outl(devpriv->AdControlReg, dev->iobase + PCI9118_ADCNTRL); /* bipolar, S.E., use 8254, stop 8354, internal trigger, soft trigger, disable INT and DMA */ + outl(devpriv->AdControlReg, dev->iobase + PCI9118_ADCNTRL); + /* + * bipolar, S.E., use 8254, + * stop 8354, internal trigger, + * soft trigger, + * disable INT and DMA + */ devpriv->cnt0_users = 0; devpriv->exttrg_users = 0; @@ -1899,7 +2177,7 @@ static int pci9118_attach(struct comedi_device *dev, opt_bus = it->options[0]; opt_slot = it->options[1]; if (it->options[3] & 1) { - master = 0; /* user don't want use bus master */ + master = 0; /* user don't want use bus master */ } else { master = 1; } @@ -1968,7 +2246,7 @@ static int pci9118_attach(struct comedi_device *dev, pci9118_reset(dev); if (it->options[3] & 2) - irq = 0; /* user don't want use IRQ */ + irq = 0; /* user don't want use IRQ */ if (irq > 0) { if (request_irq(irq, interrupt_pci9118, IRQF_SHARED, "ADLink PCI-9118", dev)) { @@ -1984,7 +2262,7 @@ static int pci9118_attach(struct comedi_device *dev, dev->irq = irq; - if (master) { /* alloc DMA buffers */ + if (master) { /* alloc DMA buffers */ devpriv->dma_doublebuf = 0; for (i = 0; i < 2; i++) { for (pages = 4; pages >= 0; pages--) { @@ -2024,16 +2302,18 @@ static int pci9118_attach(struct comedi_device *dev, if (it->options[2] > 0) { devpriv->usemux = it->options[2]; if (devpriv->usemux > 256) - devpriv->usemux = 256; /* max 256 channels! */ + devpriv->usemux = 256; /* max 256 channels! */ if (it->options[4] > 0) if (devpriv->usemux > 128) { - devpriv->usemux = 128; /* max 128 channels with softare S&H! */ + devpriv->usemux = 128; + /* max 128 channels with softare S&H! */ } printk(", ext. mux %d channels", devpriv->usemux); } devpriv->softsshdelay = it->options[4]; - if (devpriv->softsshdelay < 0) { /* select sample&hold signal polarity */ + if (devpriv->softsshdelay < 0) { + /* select sample&hold signal polarity */ devpriv->softsshdelay = -devpriv->softsshdelay; devpriv->softsshsample = 0x80; devpriv->softsshhold = 0x00; @@ -2045,7 +2325,8 @@ static int pci9118_attach(struct comedi_device *dev, printk(".\n"); pci_read_config_word(devpriv->pcidev, PCI_COMMAND, &u16w); - pci_write_config_word(devpriv->pcidev, PCI_COMMAND, u16w | 64); /* Enable parity check for parity error */ + pci_write_config_word(devpriv->pcidev, PCI_COMMAND, u16w | 64); + /* Enable parity check for parity error */ ret = alloc_subdevices(dev, 4); if (ret < 0) @@ -2103,9 +2384,10 @@ static int pci9118_attach(struct comedi_device *dev, s->insn_bits = pci9118_insn_bits_do; devpriv->valid = 1; - devpriv->i8254_osc_base = 250; /* 250ns=4MHz */ - devpriv->ai_maskharderr = 0x10a; /* default measure crash condition */ - if (it->options[5]) /* disable some requested */ + devpriv->i8254_osc_base = 250; /* 250ns=4MHz */ + devpriv->ai_maskharderr = 0x10a; + /* default measure crash condition */ + if (it->options[5]) /* disable some requested */ devpriv->ai_maskharderr &= ~it->options[5]; switch (this_board->ai_maxdata) { -- cgit v0.10.2 From cf8d3af5aed0d7bc40e8966b45aeced7c7bf1bef Mon Sep 17 00:00:00 2001 From: Maurice Dawson Date: Fri, 19 Mar 2010 14:20:10 +0000 Subject: Staging: comedi: fix KERN_facility level coding style issue in adl_pci9118.c This is a patch to the adl_pci9118.c file that fixes WARNING: printk() should include KERN_facility level found by the checkpatch.pl tool Signed-off-by: Maurice Dawson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index 4f9fd7d..2205113 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -750,9 +750,8 @@ static void interrupt_pci9118_ai_dma(struct comedi_device *dev, comedi_event(dev, s); return; } - if (int_adstat & devpriv->ai_maskerr) -/* if (int_adstat & 0x106) */ + /* if (int_adstat & 0x106) */ if (pci9118_decode_error_status(dev, s, int_adstat)) return; @@ -2215,10 +2214,10 @@ static int pci9118_attach(struct comedi_device *dev, if (!pcidev) { if (opt_bus || opt_slot) { - printk(" - Card at b:s %d:%d %s\n", + printk(KERN_ERR " - Card at b:s %d:%d %s\n", opt_bus, opt_slot, errstr); } else { - printk(" - Card %s\n", errstr); + printk(KERN_ERR " - Card %s\n", errstr); } return -EIO; } @@ -2234,8 +2233,8 @@ static int pci9118_attach(struct comedi_device *dev, iobase_a = pci_resource_start(pcidev, 0); iobase_9 = pci_resource_start(pcidev, 2); - printk(", b:s:f=%d:%d:%d, io=0x%4lx, 0x%4lx", pci_bus, pci_slot, - pci_func, iobase_9, iobase_a); + printk(KERN_ERR ", b:s:f=%d:%d:%d, io=0x%4lx, 0x%4lx", pci_bus, + pci_slot, pci_func, iobase_9, iobase_a); dev->iobase = iobase_9; dev->board_name = this_board->name; -- cgit v0.10.2 From af6ddd57f2e811561ca57a98b4c7a2bb1db6a270 Mon Sep 17 00:00:00 2001 From: Maurice Dawson Date: Tue, 30 Mar 2010 12:24:14 +0100 Subject: Staging: comedi: fix brace, print(k) and over 80 character coding style issues in adv_pci1723.c This is a Patch to the adv_pci1723.c file that fixes up brace, print(k) and over 80 character warnings found by the checkpatch.pl tool Signed-off-by: Maurice Dawson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adv_pci1723.c b/drivers/staging/comedi/drivers/adv_pci1723.c index 6b0b7ed..1644490 100644 --- a/drivers/staging/comedi/drivers/adv_pci1723.c +++ b/drivers/staging/comedi/drivers/adv_pci1723.c @@ -60,35 +60,57 @@ TODO: #define IORANGE_1723 0x2A /* all the registers for the pci1723 board */ -#define PCI1723_DA(N) ((N)<<1) /* W: D/A register N (0 to 7) */ - -#define PCI1723_SYN_SET 0x12 /*synchronized set register */ -#define PCI1723_ALL_CHNNELE_SYN_STROBE 0x12 /*synchronized status register */ - -#define PCI1723_RANGE_CALIBRATION_MODE 0x14 /* range and calibration mode */ -#define PCI1723_RANGE_CALIBRATION_STATUS 0x14 /* range and calibration status */ - -#define PCI1723_CONTROL_CMD_CALIBRATION_FUN 0x16 /* SADC control command for calibration function */ -#define PCI1723_STATUS_CMD_CALIBRATION_FUN 0x16 /* SADC control status for calibration function */ - -#define PCI1723_CALIBRATION_PARA_STROBE 0x18 /* Calibration parameter strobe */ +#define PCI1723_DA(N) ((N)<<1) /* W: D/A register N (0 to 7) */ + +#define PCI1723_SYN_SET 0x12 /* synchronized set register */ +#define PCI1723_ALL_CHNNELE_SYN_STROBE 0x12 + /* synchronized status register */ + +#define PCI1723_RANGE_CALIBRATION_MODE 0x14 + /* range and calibration mode */ +#define PCI1723_RANGE_CALIBRATION_STATUS 0x14 + /* range and calibration status */ + +#define PCI1723_CONTROL_CMD_CALIBRATION_FUN 0x16 + /* + * SADC control command for + * calibration function + */ +#define PCI1723_STATUS_CMD_CALIBRATION_FUN 0x16 + /* + * SADC control status for + * calibration function + */ + +#define PCI1723_CALIBRATION_PARA_STROBE 0x18 + /* Calibration parameter strobe */ #define PCI1723_DIGITAL_IO_PORT_SET 0x1A /* Digital I/O port setting */ #define PCI1723_DIGITAL_IO_PORT_MODE 0x1A /* Digital I/O port mode */ -#define PCI1723_WRITE_DIGITAL_OUTPUT_CMD 0x1C /* Write digital output command */ +#define PCI1723_WRITE_DIGITAL_OUTPUT_CMD 0x1C + /* Write digital output command */ #define PCI1723_READ_DIGITAL_INPUT_DATA 0x1C /* Read digital input data */ -#define PCI1723_WRITE_CAL_CMD 0x1E /* Write calibration command */ -#define PCI1723_READ_CAL_STATUS 0x1E /* Read calibration status */ +#define PCI1723_WRITE_CAL_CMD 0x1E /* Write calibration command */ +#define PCI1723_READ_CAL_STATUS 0x1E /* Read calibration status */ -#define PCI1723_SYN_STROBE 0x20 /* Synchronized strobe */ +#define PCI1723_SYN_STROBE 0x20 /* Synchronized strobe */ -#define PCI1723_RESET_ALL_CHN_STROBE 0x22 /* Reset all D/A channels strobe */ +#define PCI1723_RESET_ALL_CHN_STROBE 0x22 + /* Reset all D/A channels strobe */ -#define PCI1723_RESET_CAL_CONTROL_STROBE 0x24 /* Reset the calibration controller strobe */ +#define PCI1723_RESET_CAL_CONTROL_STROBE 0x24 + /* + * Reset the calibration + * controller strobe + */ -#define PCI1723_CHANGE_CHA_OUTPUT_TYPE_STROBE 0x26 /* Change D/A channels output type strobe */ +#define PCI1723_CHANGE_CHA_OUTPUT_TYPE_STROBE 0x26 + /* + * Change D/A channels output + * type strobe + */ #define PCI1723_SELECT_CALIBRATION 0x28 /* Select the calibration Ref_V */ @@ -104,14 +126,14 @@ static const struct comedi_lrange range_pci1723 = { 1, { */ struct pci1723_board { const char *name; - int vendor_id; /* PCI vendor a device ID of card */ + int vendor_id; /* PCI vendor a device ID of card */ int device_id; int iorange; char cardtype; - int n_aochan; /* num of D/A chans */ - int n_diochan; /* num of DIO chans */ - int ao_maxdata; /* resolution of D/A */ - const struct comedi_lrange *rangelist_ao; /* rangelist for D/A */ + int n_aochan; /* num of D/A chans */ + int n_diochan; /* num of DIO chans */ + int ao_maxdata; /* resolution of D/A */ + const struct comedi_lrange *rangelist_ao; /* rangelist for D/A */ }; static const struct pci1723_board boardtypes[] = { @@ -128,8 +150,10 @@ static const struct pci1723_board boardtypes[] = { }, }; -/* This is used by modprobe to translate PCI IDs to drivers. Should - * only be used for PCI and ISA-PnP devices */ +/* + * This is used by modprobe to translate PCI IDs to drivers. + * Should only be used for PCI and ISA-PnP devices + */ static DEFINE_PCI_DEVICE_TABLE(pci1723_pci_table) = { { PCI_VENDOR_ID_ADVANTECH, 0x1723, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { @@ -157,47 +181,47 @@ static struct comedi_driver driver_pci1723 = { .detach = pci1723_detach, }; -/* this structure is for data unique to this hardware driver. */ +/* This structure is for data unique to this hardware driver. */ struct pci1723_private { int valid; /* card is usable; */ struct pci_dev *pcidev; - unsigned char da_range[8]; /* D/A output range for each channel */ + unsigned char da_range[8]; /* D/A output range for each channel */ - short ao_data[8]; /* data output buffer */ + short ao_data[8]; /* data output buffer */ }; -/*the following macro to make it easy to -* access the private structure. -*/ +/* The following macro to make it easy to access the private structure. */ #define devpriv ((struct pci1723_private *)dev->private) #define this_board boardtypes /* - * the pci1723 card reset; + * The pci1723 card reset; */ static int pci1723_reset(struct comedi_device *dev) { int i; DPRINTK("adv_pci1723 EDBG: BGN: pci1723_reset(...)\n"); - outw(0x01, dev->iobase + PCI1723_SYN_SET); /* set synchronous output mode */ + outw(0x01, dev->iobase + PCI1723_SYN_SET); + /* set synchronous output mode */ for (i = 0; i < 8; i++) { - /* set all outputs to 0V */ + /* set all outputs to 0V */ devpriv->ao_data[i] = 0x8000; outw(devpriv->ao_data[i], dev->iobase + PCI1723_DA(i)); - /* set all ranges to +/- 10V */ + /* set all ranges to +/- 10V */ devpriv->da_range[i] = 0; outw(((devpriv->da_range[i] << 4) | i), PCI1723_RANGE_CALIBRATION_MODE); } - outw(0, dev->iobase + PCI1723_CHANGE_CHA_OUTPUT_TYPE_STROBE); /* update ranges */ - outw(0, dev->iobase + PCI1723_SYN_STROBE); /* update outputs */ + outw(0, dev->iobase + PCI1723_CHANGE_CHA_OUTPUT_TYPE_STROBE); + /* update ranges */ + outw(0, dev->iobase + PCI1723_SYN_STROBE); /* update outputs */ - /* set asynchronous output mode */ + /* set asynchronous output mode */ outw(0, dev->iobase + PCI1723_SYN_SET); DPRINTK("adv_pci1723 EDBG: END: pci1723_reset(...)\n"); @@ -251,11 +275,11 @@ static int pci1723_dio_insn_config(struct comedi_device *dev, unsigned short dio_mode; mask = 1 << CR_CHAN(insn->chanspec); - if (mask & 0x00FF) { + if (mask & 0x00FF) bits = 0x00FF; - } else { + else bits = 0xFF00; - } + switch (data[0]) { case INSN_CONFIG_DIO_INPUT: s->io_bits &= ~bits; @@ -270,12 +294,12 @@ static int pci1723_dio_insn_config(struct comedi_device *dev, return -EINVAL; } - /* update hardware DIO mode */ - dio_mode = 0x0000; /* low byte output, high byte output */ + /* update hardware DIO mode */ + dio_mode = 0x0000; /* low byte output, high byte output */ if ((s->io_bits & 0x00FF) == 0) - dio_mode |= 0x0001; /* low byte input */ + dio_mode |= 0x0001; /* low byte input */ if ((s->io_bits & 0xFF00) == 0) - dio_mode |= 0x0002; /* high byte input */ + dio_mode |= 0x0002; /* high byte input */ outw(dio_mode, dev->iobase + PCI1723_DIGITAL_IO_PORT_SET); return 1; } @@ -311,7 +335,8 @@ static int pci1723_attach(struct comedi_device *dev, int opt_bus, opt_slot; const char *errstr; - printk("comedi%d: adv_pci1723: board=%s", dev->minor, this_board->name); + printk(KERN_ERR "comedi%d: adv_pci1723: board=%s", + dev->minor, this_board->name); opt_bus = it->options[0]; opt_slot = it->options[1]; @@ -349,10 +374,10 @@ static int pci1723_attach(struct comedi_device *dev, if (!pcidev) { if (opt_bus || opt_slot) { - printk(" - Card at b:s %d:%d %s\n", - opt_bus, opt_slot, errstr); + printk(KERN_ERR " - Card at b:s %d:%d %s\n", + opt_bus, opt_slot, errstr); } else { - printk(" - Card %s\n", errstr); + printk(KERN_ERR " - Card %s\n", errstr); } return -EIO; } @@ -362,8 +387,8 @@ static int pci1723_attach(struct comedi_device *dev, pci_func = PCI_FUNC(pcidev->devfn); iobase = pci_resource_start(pcidev, 2); - printk(", b:s:f=%d:%d:%d, io=0x%4x", pci_bus, pci_slot, pci_func, - iobase); + printk(KERN_ERR ", b:s:f=%d:%d:%d, io=0x%4x", + pci_bus, pci_slot, pci_func, iobase); dev->iobase = iobase; @@ -398,22 +423,23 @@ static int pci1723_attach(struct comedi_device *dev, s->insn_write = pci1723_ao_write_winsn; s->insn_read = pci1723_insn_read_ao; - /* read DIO config */ - switch (inw(dev->iobase + PCI1723_DIGITAL_IO_PORT_MODE) & 0x03) { - case 0x00: /* low byte output, high byte output */ + /* read DIO config */ + switch (inw(dev->iobase + PCI1723_DIGITAL_IO_PORT_MODE) + & 0x03) { + case 0x00: /* low byte output, high byte output */ s->io_bits = 0xFFFF; break; - case 0x01: /* low byte input, high byte output */ + case 0x01: /* low byte input, high byte output */ s->io_bits = 0xFF00; break; - case 0x02: /* low byte output, high byte input */ + case 0x02: /* low byte output, high byte input */ s->io_bits = 0x00FF; break; - case 0x03: /* low byte input, high byte input */ + case 0x03: /* low byte input, high byte input */ s->io_bits = 0x0000; break; } - /* read DIO port state */ + /* read DIO port state */ s->state = inw(dev->iobase + PCI1723_READ_DIGITAL_INPUT_DATA); subdev++; @@ -450,16 +476,15 @@ static int pci1723_attach(struct comedi_device *dev, */ static int pci1723_detach(struct comedi_device *dev) { - printk("comedi%d: pci1723: remove\n", dev->minor); + printk(KERN_ERR "comedi%d: pci1723: remove\n", dev->minor); if (dev->private) { if (devpriv->valid) pci1723_reset(dev); if (devpriv->pcidev) { - if (dev->iobase) { + if (dev->iobase) comedi_pci_disable(devpriv->pcidev); - } pci_dev_put(devpriv->pcidev); } } -- cgit v0.10.2 From 24d2d8be91e83d6eb40240180da46b3dbd440dd5 Mon Sep 17 00:00:00 2001 From: Maurice Dawson Date: Thu, 8 Apr 2010 13:13:20 +0100 Subject: Staging: comedi: fix print(k) coding style issue in aio_aio12_8.c This is a patch to the aio_aio12_8.c that fixes up print(k) warnings found by the checkpatch.pl tool Signed-off-by: Maurice Dawson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/aio_aio12_8.c b/drivers/staging/comedi/drivers/aio_aio12_8.c index c4cac66..7a1c636 100644 --- a/drivers/staging/comedi/drivers/aio_aio12_8.c +++ b/drivers/staging/comedi/drivers/aio_aio12_8.c @@ -110,7 +110,7 @@ static int aio_aio12_8_ai_read(struct comedi_device *dev, while (timeout && !(inb(dev->iobase + AIO12_8_STATUS) & STATUS_ADC_EOC)) { timeout--; - printk("timeout %d\n", timeout); + printk(KERN_ERR "timeout %d\n", timeout); udelay(1); } if (timeout == 0) { @@ -172,7 +172,7 @@ static int aio_aio12_8_attach(struct comedi_device *dev, iobase = it->options[0]; if (!request_region(iobase, 24, "aio_aio12_8")) { - printk("I/O port conflict"); + printk(KERN_ERR "I/O port conflict"); return -EIO; } -- cgit v0.10.2 From 6764cbd72ac5295f8dfc96a38696553cecb452a8 Mon Sep 17 00:00:00 2001 From: Vijay Kumar Date: Sun, 7 Mar 2010 07:54:45 +0530 Subject: Staging: Remove staging/poch Remove staging/poch. Reasons for removal are -- The driver has serious cache issues, that I couldn't fix. The card vendor is working on a better replacement for the driver. The driver has been delayed a lot and development has come to a stand still. Signed-off-by: Vijay Kumar B. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 8db8632..5999259 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -57,8 +57,6 @@ source "drivers/staging/wlan-ng/Kconfig" source "drivers/staging/echo/Kconfig" -source "drivers/staging/poch/Kconfig" - source "drivers/staging/otus/Kconfig" source "drivers/staging/rt2860/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index ab61e26..55ff30f 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -11,7 +11,6 @@ obj-$(CONFIG_USB_IP_COMMON) += usbip/ obj-$(CONFIG_W35UND) += winbond/ obj-$(CONFIG_PRISM2_USB) += wlan-ng/ obj-$(CONFIG_ECHO) += echo/ -obj-$(CONFIG_POCH) += poch/ obj-$(CONFIG_OTUS) += otus/ obj-$(CONFIG_RT2860) += rt2860/ obj-$(CONFIG_RT2870) += rt2870/ diff --git a/drivers/staging/poch/Kconfig b/drivers/staging/poch/Kconfig deleted file mode 100644 index b3b33b9..0000000 --- a/drivers/staging/poch/Kconfig +++ /dev/null @@ -1,6 +0,0 @@ -config POCH - tristate "Redrapids Pocket Change CardBus support" - depends on PCI && UIO - default N - ---help--- - Enable support for Redrapids Pocket Change CardBus devices. diff --git a/drivers/staging/poch/Makefile b/drivers/staging/poch/Makefile deleted file mode 100644 index d2b9680..0000000 --- a/drivers/staging/poch/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_POCH) += poch.o diff --git a/drivers/staging/poch/README b/drivers/staging/poch/README deleted file mode 100644 index ac76ff9..0000000 --- a/drivers/staging/poch/README +++ /dev/null @@ -1,136 +0,0 @@ -TODO: - - Rx block size is limited to < 2048, hardware bug? - - Group size is limited to < page size, kernel alloc/mmap API issues - - test whether Tx is transmitting data from provided buffers - - handle device unplug case - - handle temperature above threshold - - use bus address instead of physical address for DMA - - support for snapshot mode - - audit userspace interfaces - - get reserved major/minor if needed - -Sample Code: - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -struct pconsume { - uint32_t * offsets; - uint32_t nfetch; - uint32_t nflush; -}; - -uint32_t offsets[10]; - -void process_group(unsigned char *buf, uint32_t size) -{ - uint16_t *buf16 = (uint16_t *)buf; - - printf("RX: %p %u %04x %04x %04x %04x %04x %04x\n", buf, size, - buf16[0], buf16[1], buf16[2], buf16[3], buf16[4], buf16[5]); -} - -int main() -{ - struct sysfs_attribute *attr; - char *path; - int ret; - unsigned long mmap_size; - int fd; - unsigned char *cbuf; - - uint32_t nflush; - struct pollfd poll_fds; - int count = 0; - int i; - - path = "/sys/class/pocketchange/poch0/ch0/block_size"; - attr = sysfs_open_attribute(path); - ret = sysfs_write_attribute(attr, "256", strlen("256")); - if (ret == -1) - error(1, errno, "error writing attribute %s", path); - sysfs_close_attribute(attr); - - path = "/sys/class/pocketchange/poch0/ch0/group_size"; - attr = sysfs_open_attribute(path); - ret = sysfs_write_attribute(attr, "4096", strlen("4096")); - if (ret == -1) - error(1, errno, "error writing attribute %s", path); - sysfs_close_attribute(attr); - - path = "/sys/class/pocketchange/poch0/ch0/group_count"; - attr = sysfs_open_attribute(path); - ret = sysfs_write_attribute(attr, "64", strlen("64")); - if (ret == -1) - error(1, errno, "error writing attribute %s", path); - sysfs_close_attribute(attr); - - fd = open("/dev/ch0", O_RDWR); - if (fd == -1) - error(1, errno, "error opening device node"); - - path = "/sys/class/pocketchange/poch0/ch0/mmap_size"; - attr = sysfs_open_attribute(path); - ret = sysfs_read_attribute(attr); - if (ret == -1) - error(1, errno, "error reading attribute %s", path); - printf("%s", attr->value); - sscanf(attr->value, "%lu", &mmap_size); - sysfs_close_attribute(attr); - - cbuf = mmap(NULL, mmap_size, PROT_READ | PROT_WRITE, - MAP_PRIVATE, fd, 0); - if (cbuf == MAP_FAILED) - error(1, errno, "error mapping DMA buffers"); - - ret = ioctl(fd, POCH_IOC_TRANSFER_START, 0); - if (ret == -1) - error(1, errno, "error starting transfer"); - - nflush = 0; - while (1) { - struct pconsume consume; - - consume.offsets = offsets; - consume.nfetch = 10; - consume.nflush = nflush; - - ret = ioctl(fd, POCH_IOC_CONSUME, &consume); - if (ret == -1) - error(1, errno, "error consuming groups"); - - nflush = consume.nfetch; - - for (i = 0; i < nflush; i++) { - process_group(cbuf + consume.offsets[i], 4096); - - count++; - if (count == 1000) - break; - } - - if (count == 1000) - break; - } - - ret = ioctl(fd, POCH_IOC_TRANSFER_STOP, 0); - if (ret == -1) - error(1, errno, "error starting transfer"); - - return 0; -} - -Please send patches to Greg Kroah-Hartman and -Vijay Kumar and Jaya Kumar diff --git a/drivers/staging/poch/poch.c b/drivers/staging/poch/poch.c deleted file mode 100644 index f940a34..0000000 --- a/drivers/staging/poch/poch.c +++ /dev/null @@ -1,1443 +0,0 @@ -/* - * User-space DMA and UIO based Redrapids Pocket Change CardBus driver - * - * Copyright 2008 Vijay Kumar - * - * Licensed under GPL version 2 only. - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "poch.h" - -#include - -#ifndef PCI_VENDOR_ID_RRAPIDS -#define PCI_VENDOR_ID_RRAPIDS 0x17D2 -#endif - -#ifndef PCI_DEVICE_ID_RRAPIDS_POCKET_CHANGE -#define PCI_DEVICE_ID_RRAPIDS_POCKET_CHANGE 0x0351 -#endif - -#define POCH_NCHANNELS 2 - -#define MAX_POCH_CARDS 8 -#define MAX_POCH_DEVICES (MAX_POCH_CARDS * POCH_NCHANNELS) - -#define DRV_NAME "poch" -#define PFX DRV_NAME ": " - -/* - * BAR0 Bridge Register Definitions - */ - -#define BRIDGE_REV_REG 0x0 -#define BRIDGE_INT_MASK_REG 0x4 -#define BRIDGE_INT_STAT_REG 0x8 - -#define BRIDGE_INT_ACTIVE (0x1 << 31) -#define BRIDGE_INT_FPGA (0x1 << 2) -#define BRIDGE_INT_TEMP_FAIL (0x1 << 1) -#define BRIDGE_INT_TEMP_WARN (0x1 << 0) - -#define BRIDGE_FPGA_RESET_REG 0xC - -#define BRIDGE_CARD_POWER_REG 0x10 -#define BRIDGE_CARD_POWER_EN (0x1 << 0) -#define BRIDGE_CARD_POWER_PROG_DONE (0x1 << 31) - -#define BRIDGE_JTAG_REG 0x14 -#define BRIDGE_DMA_GO_REG 0x18 -#define BRIDGE_STAT_0_REG 0x1C -#define BRIDGE_STAT_1_REG 0x20 -#define BRIDGE_STAT_2_REG 0x24 -#define BRIDGE_STAT_3_REG 0x28 -#define BRIDGE_TEMP_STAT_REG 0x2C -#define BRIDGE_TEMP_THRESH_REG 0x30 -#define BRIDGE_EEPROM_REVSEL_REG 0x34 -#define BRIDGE_CIS_STRUCT_REG 0x100 -#define BRIDGE_BOARDREV_REG 0x124 - -/* - * BAR1 FPGA Register Definitions - */ - -#define FPGA_IFACE_REV_REG 0x0 -#define FPGA_RX_BLOCK_SIZE_REG 0x8 -#define FPGA_TX_BLOCK_SIZE_REG 0xC -#define FPGA_RX_BLOCK_COUNT_REG 0x10 -#define FPGA_TX_BLOCK_COUNT_REG 0x14 -#define FPGA_RX_CURR_DMA_BLOCK_REG 0x18 -#define FPGA_TX_CURR_DMA_BLOCK_REG 0x1C -#define FPGA_RX_GROUP_COUNT_REG 0x20 -#define FPGA_TX_GROUP_COUNT_REG 0x24 -#define FPGA_RX_CURR_GROUP_REG 0x28 -#define FPGA_TX_CURR_GROUP_REG 0x2C -#define FPGA_RX_CURR_PCI_REG 0x38 -#define FPGA_TX_CURR_PCI_REG 0x3C -#define FPGA_RX_GROUP0_START_REG 0x40 -#define FPGA_TX_GROUP0_START_REG 0xC0 -#define FPGA_DMA_DESC_1_REG 0x140 -#define FPGA_DMA_DESC_2_REG 0x144 -#define FPGA_DMA_DESC_3_REG 0x148 -#define FPGA_DMA_DESC_4_REG 0x14C - -#define FPGA_DMA_INT_STAT_REG 0x150 -#define FPGA_DMA_INT_MASK_REG 0x154 -#define FPGA_DMA_INT_RX (1 << 0) -#define FPGA_DMA_INT_TX (1 << 1) - -#define FPGA_RX_GROUPS_PER_INT_REG 0x158 -#define FPGA_TX_GROUPS_PER_INT_REG 0x15C -#define FPGA_DMA_ADR_PAGE_REG 0x160 -#define FPGA_FPGA_REV_REG 0x200 - -#define FPGA_ADC_CLOCK_CTL_REG 0x204 -#define FPGA_ADC_CLOCK_CTL_OSC_EN (0x1 << 3) -#define FPGA_ADC_CLOCK_LOCAL_CLK (0x1 | FPGA_ADC_CLOCK_CTL_OSC_EN) -#define FPGA_ADC_CLOCK_EXT_SAMP_CLK 0X0 - -#define FPGA_ADC_DAC_EN_REG 0x208 -#define FPGA_ADC_DAC_EN_DAC_OFF (0x1 << 1) -#define FPGA_ADC_DAC_EN_ADC_OFF (0x1 << 0) - -#define FPGA_INT_STAT_REG 0x20C -#define FPGA_INT_MASK_REG 0x210 -#define FPGA_INT_PLL_UNLOCKED (0x1 << 9) -#define FPGA_INT_DMA_CORE (0x1 << 8) -#define FPGA_INT_TX_FF_EMPTY (0x1 << 7) -#define FPGA_INT_RX_FF_EMPTY (0x1 << 6) -#define FPGA_INT_TX_FF_OVRFLW (0x1 << 3) -#define FPGA_INT_RX_FF_OVRFLW (0x1 << 2) -#define FPGA_INT_TX_ACQ_DONE (0x1 << 1) -#define FPGA_INT_RX_ACQ_DONE (0x1) - -#define FPGA_RX_CTL_REG 0x214 -#define FPGA_RX_CTL_FIFO_FLUSH (0x1 << 9) -#define FPGA_RX_CTL_SYNTH_DATA (0x1 << 8) -#define FPGA_RX_CTL_CONT_CAP (0x0 << 1) -#define FPGA_RX_CTL_SNAP_CAP (0x1 << 1) - -#define FPGA_RX_ARM_REG 0x21C - -#define FPGA_DOM_REG 0x224 -#define FPGA_DOM_DCM_RESET (0x1 << 5) -#define FPGA_DOM_SOFT_RESET (0x1 << 4) -#define FPGA_DOM_DUAL_M_SG_DMA (0x0) -#define FPGA_DOM_TARGET_ACCESS (0x1) - -#define FPGA_TX_CTL_REG 0x228 -#define FPGA_TX_CTL_FIFO_FLUSH (0x1 << 9) -#define FPGA_TX_CTL_OUTPUT_ZERO (0x0 << 2) -#define FPGA_TX_CTL_OUTPUT_CARDBUS (0x1 << 2) -#define FPGA_TX_CTL_OUTPUT_ADC (0x2 << 2) -#define FPGA_TX_CTL_OUTPUT_SNAPSHOT (0x3 << 2) -#define FPGA_TX_CTL_LOOPBACK (0x1 << 0) - -#define FPGA_ENDIAN_MODE_REG 0x22C -#define FPGA_RX_FIFO_COUNT_REG 0x28C -#define FPGA_TX_ENABLE_REG 0x298 -#define FPGA_TX_TRIGGER_REG 0x29C -#define FPGA_TX_DATAMEM_COUNT_REG 0x2A8 -#define FPGA_CAP_FIFO_REG 0x300 -#define FPGA_TX_SNAPSHOT_REG 0x8000 - -/* - * Channel Index Definitions - */ - -enum { - CHNO_RX_CHANNEL, - CHNO_TX_CHANNEL, -}; - -struct poch_dev; - -enum channel_dir { - CHANNEL_DIR_RX, - CHANNEL_DIR_TX, -}; - -struct poch_group_info { - struct page *pg; - dma_addr_t dma_addr; - unsigned long user_offset; -}; - -struct channel_info { - unsigned int chno; - - atomic_t sys_block_size; - atomic_t sys_group_size; - atomic_t sys_group_count; - - enum channel_dir dir; - - unsigned long block_size; - unsigned long group_size; - unsigned long group_count; - - /* Contains the DMA address and VM offset of each group. */ - struct poch_group_info *groups; - - /* Contains the header and circular buffer exported to userspace. */ - spinlock_t group_offsets_lock; - - /* Last group consumed by user space. */ - unsigned int consumed; - /* Last group indicated as 'complete' to user space. */ - unsigned int transfer; - - wait_queue_head_t wq; - - union { - unsigned int data_available; - unsigned int space_available; - }; - - void __iomem *bridge_iomem; - void __iomem *fpga_iomem; - spinlock_t *iomem_lock; - - atomic_t free; - atomic_t inited; - - /* Error counters */ - struct poch_counters counters; - spinlock_t counters_lock; - - struct device *dev; -}; - -struct poch_dev { - struct uio_info uio; - struct pci_dev *pci_dev; - unsigned int nchannels; - struct channel_info channels[POCH_NCHANNELS]; - struct cdev cdev; - - /* Counts the no. of channels that have been opened. On first - * open, the card is powered on. On last channel close, the - * card is powered off. - */ - atomic_t usage; - - void __iomem *bridge_iomem; - void __iomem *fpga_iomem; - spinlock_t iomem_lock; - - struct device *dev; -}; - -static int synth_rx; -module_param(synth_rx, bool, 0600); -MODULE_PARM_DESC(synth_rx, - "Synthesize received values using a counter. Default: No"); - -static int loopback; -module_param(loopback, bool, 0600); -MODULE_PARM_DESC(loopback, - "Enable hardware loopback of trasnmitted data. Default: No"); - -static dev_t poch_first_dev; -static struct class *poch_cls; -static DEFINE_IDR(poch_ids); - -static ssize_t store_block_size(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct channel_info *channel = dev_get_drvdata(dev); - unsigned long block_size; - - sscanf(buf, "%lu", &block_size); - atomic_set(&channel->sys_block_size, block_size); - - return count; -} -static DEVICE_ATTR(block_size, S_IWUSR|S_IWGRP, NULL, store_block_size); - -static ssize_t store_group_size(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct channel_info *channel = dev_get_drvdata(dev); - unsigned long group_size; - - sscanf(buf, "%lu", &group_size); - atomic_set(&channel->sys_group_size, group_size); - - return count; -} -static DEVICE_ATTR(group_size, S_IWUSR|S_IWGRP, NULL, store_group_size); - -static ssize_t store_group_count(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct channel_info *channel = dev_get_drvdata(dev); - unsigned long group_count; - - sscanf(buf, "%lu", &group_count); - atomic_set(&channel->sys_group_count, group_count); - - return count; -} -static DEVICE_ATTR(group_count, S_IWUSR|S_IWGRP, NULL, store_group_count); - -static ssize_t show_direction(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct channel_info *channel = dev_get_drvdata(dev); - int len; - - len = sprintf(buf, "%s\n", (channel->dir ? "tx" : "rx")); - return len; -} -static DEVICE_ATTR(dir, S_IRUSR|S_IRGRP, show_direction, NULL); - -static unsigned long npages(unsigned long bytes) -{ - if (bytes % PAGE_SIZE == 0) - return bytes / PAGE_SIZE; - else - return (bytes / PAGE_SIZE) + 1; -} - -static ssize_t show_mmap_size(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct channel_info *channel = dev_get_drvdata(dev); - int len; - unsigned long mmap_size; - unsigned long group_pages; - unsigned long total_group_pages; - - group_pages = npages(channel->group_size); - total_group_pages = group_pages * channel->group_count; - - mmap_size = total_group_pages * PAGE_SIZE; - len = sprintf(buf, "%lu\n", mmap_size); - return len; -} -static DEVICE_ATTR(mmap_size, S_IRUSR|S_IRGRP, show_mmap_size, NULL); - -static struct device_attribute *poch_class_attrs[] = { - &dev_attr_block_size, - &dev_attr_group_size, - &dev_attr_group_count, - &dev_attr_dir, - &dev_attr_mmap_size, -}; - -static void poch_channel_free_groups(struct channel_info *channel) -{ - unsigned long i; - - for (i = 0; i < channel->group_count; i++) { - struct poch_group_info *group; - unsigned int order; - - group = &channel->groups[i]; - order = get_order(channel->group_size); - if (group->pg) - __free_pages(group->pg, order); - } -} - -static int poch_channel_alloc_groups(struct channel_info *channel) -{ - unsigned long i; - unsigned long group_pages; - - group_pages = npages(channel->group_size); - - for (i = 0; i < channel->group_count; i++) { - struct poch_group_info *group; - unsigned int order; - gfp_t gfp_mask; - - group = &channel->groups[i]; - order = get_order(channel->group_size); - - /* - * __GFP_COMP is required here since we are going to - * perform non-linear mapping to userspace. For more - * information read the vm_insert_page() function - * comments. - */ - - gfp_mask = GFP_KERNEL | GFP_DMA32 | __GFP_ZERO; - group->pg = alloc_pages(gfp_mask, order); - if (!group->pg) { - poch_channel_free_groups(channel); - return -ENOMEM; - } - - /* FIXME: This is the physical address not the bus - * address! This won't work in architectures that - * have an IOMMU. Can we use pci_map_single() for - * this? - */ - group->dma_addr = page_to_pfn(group->pg) * PAGE_SIZE; - group->user_offset = (i * group_pages) * PAGE_SIZE; - - printk(KERN_INFO PFX "%ld: user_offset: 0x%lx\n", i, - group->user_offset); - } - - return 0; -} - -static int channel_latch_attr(struct channel_info *channel) -{ - channel->group_count = atomic_read(&channel->sys_group_count); - channel->group_size = atomic_read(&channel->sys_group_size); - channel->block_size = atomic_read(&channel->sys_block_size); - - if (channel->group_count == 0) { - printk(KERN_ERR PFX "invalid group count %lu", - channel->group_count); - return -EINVAL; - } - - if (channel->group_size == 0 || - channel->group_size < channel->block_size) { - printk(KERN_ERR PFX "invalid group size %lu", - channel->group_size); - return -EINVAL; - } - - if (channel->block_size == 0 || (channel->block_size % 8) != 0) { - printk(KERN_ERR PFX "invalid block size %lu", - channel->block_size); - return -EINVAL; - } - - if (channel->group_size % channel->block_size != 0) { - printk(KERN_ERR PFX - "group size should be multiple of block size"); - return -EINVAL; - } - - return 0; -} - -/* - * Configure DMA group registers - */ -static void channel_dma_init(struct channel_info *channel) -{ - void __iomem *fpga = channel->fpga_iomem; - u32 group_regs_base; - u32 group_reg; - unsigned int page; - unsigned int group_in_page; - unsigned long i; - u32 block_size_reg; - u32 block_count_reg; - u32 group_count_reg; - u32 groups_per_int_reg; - u32 curr_pci_reg; - - if (channel->chno == CHNO_RX_CHANNEL) { - group_regs_base = FPGA_RX_GROUP0_START_REG; - block_size_reg = FPGA_RX_BLOCK_SIZE_REG; - block_count_reg = FPGA_RX_BLOCK_COUNT_REG; - group_count_reg = FPGA_RX_GROUP_COUNT_REG; - groups_per_int_reg = FPGA_RX_GROUPS_PER_INT_REG; - curr_pci_reg = FPGA_RX_CURR_PCI_REG; - } else { - group_regs_base = FPGA_TX_GROUP0_START_REG; - block_size_reg = FPGA_TX_BLOCK_SIZE_REG; - block_count_reg = FPGA_TX_BLOCK_COUNT_REG; - group_count_reg = FPGA_TX_GROUP_COUNT_REG; - groups_per_int_reg = FPGA_TX_GROUPS_PER_INT_REG; - curr_pci_reg = FPGA_TX_CURR_PCI_REG; - } - - printk(KERN_WARNING "block_size, group_size, group_count\n"); - /* - * Block size is represented in no. of 64 bit transfers. - */ - iowrite32(channel->block_size / 8, fpga + block_size_reg); - iowrite32(channel->group_size / channel->block_size, - fpga + block_count_reg); - iowrite32(channel->group_count, fpga + group_count_reg); - /* FIXME: Hardcoded groups per int. Get it from sysfs? */ - iowrite32(16, fpga + groups_per_int_reg); - - /* Unlock PCI address? Not defined in the data sheet, but used - * in the reference code by Redrapids. - */ - iowrite32(0x1, fpga + curr_pci_reg); - - /* The DMA address page register is shared between the RX and - * TX channels, so acquire lock. - */ - for (i = 0; i < channel->group_count; i++) { - page = i / 32; - group_in_page = i % 32; - - group_reg = group_regs_base + (group_in_page * 4); - - spin_lock(channel->iomem_lock); - iowrite32(page, fpga + FPGA_DMA_ADR_PAGE_REG); - iowrite32(channel->groups[i].dma_addr, fpga + group_reg); - spin_unlock(channel->iomem_lock); - } - - for (i = 0; i < channel->group_count; i++) { - page = i / 32; - group_in_page = i % 32; - - group_reg = group_regs_base + (group_in_page * 4); - - spin_lock(channel->iomem_lock); - iowrite32(page, fpga + FPGA_DMA_ADR_PAGE_REG); - printk(KERN_INFO PFX "%ld: read dma_addr: 0x%x\n", i, - ioread32(fpga + group_reg)); - spin_unlock(channel->iomem_lock); - } - -} - -static void __poch_channel_clear_counters(struct channel_info *channel) -{ - channel->counters.pll_unlock = 0; - channel->counters.fifo_empty = 0; - channel->counters.fifo_overflow = 0; -} - -static int poch_channel_init(struct channel_info *channel, - struct poch_dev *poch_dev) -{ - struct pci_dev *pdev = poch_dev->pci_dev; - struct device *dev = &pdev->dev; - unsigned long alloc_size; - int ret; - - printk(KERN_WARNING "channel_latch_attr\n"); - - ret = channel_latch_attr(channel); - if (ret != 0) - goto out; - - channel->consumed = 0; - channel->transfer = 0; - - /* Allocate memory to hold group information. */ - alloc_size = channel->group_count * sizeof(struct poch_group_info); - channel->groups = kzalloc(alloc_size, GFP_KERNEL); - if (!channel->groups) { - dev_err(dev, "error allocating memory for group info\n"); - ret = -ENOMEM; - goto out; - } - - printk(KERN_WARNING "poch_channel_alloc_groups\n"); - - ret = poch_channel_alloc_groups(channel); - if (ret) { - dev_err(dev, "error allocating groups of order %d\n", - get_order(channel->group_size)); - goto out_free_group_info; - } - - channel->fpga_iomem = poch_dev->fpga_iomem; - channel->bridge_iomem = poch_dev->bridge_iomem; - channel->iomem_lock = &poch_dev->iomem_lock; - spin_lock_init(&channel->counters_lock); - - __poch_channel_clear_counters(channel); - - return 0; - - out_free_group_info: - kfree(channel->groups); - out: - return ret; -} - -static int poch_wait_fpga_prog(void __iomem *bridge) -{ - unsigned long total_wait; - const unsigned long wait_period = 100; - /* FIXME: Get the actual timeout */ - const unsigned long prog_timeo = 10000; /* 10 Seconds */ - u32 card_power; - - printk(KERN_WARNING "poch_wait_fpg_prog\n"); - - printk(KERN_INFO PFX "programming fpga ...\n"); - total_wait = 0; - while (1) { - msleep(wait_period); - total_wait += wait_period; - - card_power = ioread32(bridge + BRIDGE_CARD_POWER_REG); - if (card_power & BRIDGE_CARD_POWER_PROG_DONE) { - printk(KERN_INFO PFX "programming done\n"); - return 0; - } - if (total_wait > prog_timeo) { - printk(KERN_ERR PFX - "timed out while programming FPGA\n"); - return -EIO; - } - } -} - -static void poch_card_power_off(struct poch_dev *poch_dev) -{ - void __iomem *bridge = poch_dev->bridge_iomem; - u32 card_power; - - iowrite32(0, bridge + BRIDGE_INT_MASK_REG); - iowrite32(0, bridge + BRIDGE_DMA_GO_REG); - - card_power = ioread32(bridge + BRIDGE_CARD_POWER_REG); - iowrite32(card_power & ~BRIDGE_CARD_POWER_EN, - bridge + BRIDGE_CARD_POWER_REG); -} - -enum clk_src { - CLK_SRC_ON_BOARD, - CLK_SRC_EXTERNAL -}; - -static void poch_card_clock_on(void __iomem *fpga) -{ - /* FIXME: Get this data through sysfs? */ - enum clk_src clk_src = CLK_SRC_ON_BOARD; - - if (clk_src == CLK_SRC_ON_BOARD) { - iowrite32(FPGA_ADC_CLOCK_LOCAL_CLK | FPGA_ADC_CLOCK_CTL_OSC_EN, - fpga + FPGA_ADC_CLOCK_CTL_REG); - } else if (clk_src == CLK_SRC_EXTERNAL) { - iowrite32(FPGA_ADC_CLOCK_EXT_SAMP_CLK, - fpga + FPGA_ADC_CLOCK_CTL_REG); - } -} - -static int poch_card_power_on(struct poch_dev *poch_dev) -{ - void __iomem *bridge = poch_dev->bridge_iomem; - void __iomem *fpga = poch_dev->fpga_iomem; - - iowrite32(BRIDGE_CARD_POWER_EN, bridge + BRIDGE_CARD_POWER_REG); - - if (poch_wait_fpga_prog(bridge) != 0) { - poch_card_power_off(poch_dev); - return -EIO; - } - - poch_card_clock_on(fpga); - - /* Sync to new clock, reset state machines, set DMA mode. */ - iowrite32(FPGA_DOM_DCM_RESET | FPGA_DOM_SOFT_RESET - | FPGA_DOM_DUAL_M_SG_DMA, fpga + FPGA_DOM_REG); - - /* FIXME: The time required for sync. needs to be tuned. */ - msleep(1000); - - return 0; -} - -static void poch_channel_analog_on(struct channel_info *channel) -{ - void __iomem *fpga = channel->fpga_iomem; - u32 adc_dac_en; - - spin_lock(channel->iomem_lock); - adc_dac_en = ioread32(fpga + FPGA_ADC_DAC_EN_REG); - switch (channel->chno) { - case CHNO_RX_CHANNEL: - iowrite32(adc_dac_en & ~FPGA_ADC_DAC_EN_ADC_OFF, - fpga + FPGA_ADC_DAC_EN_REG); - break; - case CHNO_TX_CHANNEL: - iowrite32(adc_dac_en & ~FPGA_ADC_DAC_EN_DAC_OFF, - fpga + FPGA_ADC_DAC_EN_REG); - break; - } - spin_unlock(channel->iomem_lock); -} - -static int poch_open(struct inode *inode, struct file *filp) -{ - struct poch_dev *poch_dev; - struct channel_info *channel; - void __iomem *bridge; - void __iomem *fpga; - int chno; - int usage; - int ret; - - poch_dev = container_of(inode->i_cdev, struct poch_dev, cdev); - bridge = poch_dev->bridge_iomem; - fpga = poch_dev->fpga_iomem; - - chno = iminor(inode) % poch_dev->nchannels; - channel = &poch_dev->channels[chno]; - - if (!atomic_dec_and_test(&channel->free)) { - atomic_inc(&channel->free); - ret = -EBUSY; - goto out; - } - - usage = atomic_inc_return(&poch_dev->usage); - - printk(KERN_WARNING "poch_card_power_on\n"); - - if (usage == 1) { - ret = poch_card_power_on(poch_dev); - if (ret) - goto out_dec_usage; - } - - printk(KERN_INFO "CardBus Bridge Revision: %x\n", - ioread32(bridge + BRIDGE_REV_REG)); - printk(KERN_INFO "CardBus Interface Revision: %x\n", - ioread32(fpga + FPGA_IFACE_REV_REG)); - - channel->chno = chno; - filp->private_data = channel; - - printk(KERN_WARNING "poch_channel_init\n"); - - ret = poch_channel_init(channel, poch_dev); - if (ret) - goto out_power_off; - - poch_channel_analog_on(channel); - - printk(KERN_WARNING "channel_dma_init\n"); - - channel_dma_init(channel); - - printk(KERN_WARNING "poch_channel_analog_on\n"); - - if (usage == 1) { - printk(KERN_WARNING "setting up DMA\n"); - - /* Initialize DMA Controller. */ - iowrite32(FPGA_CAP_FIFO_REG, bridge + BRIDGE_STAT_2_REG); - iowrite32(FPGA_DMA_DESC_1_REG, bridge + BRIDGE_STAT_3_REG); - - ioread32(fpga + FPGA_DMA_INT_STAT_REG); - ioread32(fpga + FPGA_INT_STAT_REG); - ioread32(bridge + BRIDGE_INT_STAT_REG); - - /* Initialize Interrupts. FIXME: Enable temperature - * handling We are enabling both Tx and Rx channel - * interrupts here. Do we need to enable interrupts - * only for the current channel? Anyways we won't get - * the interrupt unless the DMA is activated. - */ - iowrite32(BRIDGE_INT_FPGA, bridge + BRIDGE_INT_MASK_REG); - iowrite32(FPGA_INT_DMA_CORE - | FPGA_INT_PLL_UNLOCKED - | FPGA_INT_TX_FF_EMPTY - | FPGA_INT_RX_FF_EMPTY - | FPGA_INT_TX_FF_OVRFLW - | FPGA_INT_RX_FF_OVRFLW, - fpga + FPGA_INT_MASK_REG); - iowrite32(FPGA_DMA_INT_RX | FPGA_DMA_INT_TX, - fpga + FPGA_DMA_INT_MASK_REG); - } - - if (channel->dir == CHANNEL_DIR_TX) { - /* Flush TX FIFO and output data from cardbus. */ - u32 ctl_val = 0; - - ctl_val |= FPGA_TX_CTL_FIFO_FLUSH; - ctl_val |= FPGA_TX_CTL_OUTPUT_CARDBUS; - if (loopback) - ctl_val |= FPGA_TX_CTL_LOOPBACK; - - iowrite32(ctl_val, fpga + FPGA_TX_CTL_REG); - } else { - /* Flush RX FIFO and output data to cardbus. */ - u32 ctl_val = FPGA_RX_CTL_CONT_CAP | FPGA_RX_CTL_FIFO_FLUSH; - if (synth_rx) - ctl_val |= FPGA_RX_CTL_SYNTH_DATA; - - iowrite32(ctl_val, fpga + FPGA_RX_CTL_REG); - } - - atomic_inc(&channel->inited); - - return 0; - - out_power_off: - if (usage == 1) - poch_card_power_off(poch_dev); - out_dec_usage: - atomic_dec(&poch_dev->usage); - atomic_inc(&channel->free); - out: - return ret; -} - -static int poch_release(struct inode *inode, struct file *filp) -{ - struct channel_info *channel = filp->private_data; - struct poch_dev *poch_dev; - int usage; - - poch_dev = container_of(inode->i_cdev, struct poch_dev, cdev); - - usage = atomic_dec_return(&poch_dev->usage); - if (usage == 0) { - printk(KERN_WARNING "poch_card_power_off\n"); - poch_card_power_off(poch_dev); - } - - atomic_dec(&channel->inited); - poch_channel_free_groups(channel); - kfree(channel->groups); - atomic_inc(&channel->free); - - return 0; -} - -/* - * Map the the group buffers, to user space. - */ -static int poch_mmap(struct file *filp, struct vm_area_struct *vma) -{ - struct channel_info *channel = filp->private_data; - - unsigned long start; - unsigned long size; - - unsigned long group_pages; - unsigned long total_group_pages; - - int pg_num; - struct page *pg; - - int i; - int ret; - - printk(KERN_WARNING "poch_mmap\n"); - - if (vma->vm_pgoff) { - printk(KERN_WARNING PFX "page offset: %lu\n", vma->vm_pgoff); - return -EINVAL; - } - - group_pages = npages(channel->group_size); - total_group_pages = group_pages * channel->group_count; - - size = vma->vm_end - vma->vm_start; - if (size != total_group_pages * PAGE_SIZE) { - printk(KERN_WARNING PFX "required %lu bytes\n", size); - return -EINVAL; - } - - start = vma->vm_start; - - for (i = 0; i < channel->group_count; i++) { - pg = channel->groups[i].pg; - for (pg_num = 0; pg_num < group_pages; pg_num++, pg++) { - printk(KERN_DEBUG PFX "%d: group %d: 0x%lx\n", - pg_num, i, start); - ret = vm_insert_page(vma, start, pg); - if (ret) { - printk(KERN_DEBUG PFX - "vm_insert 2 failed at %d\n", pg_num); - return ret; - } - start += PAGE_SIZE; - } - } - - return 0; -} - -/* - * Check whether there is some group that the user space has not - * consumed yet. When the user space consumes a group, it sets it to - * -1. Cosuming could be reading data in case of RX and filling a - * buffer in case of TX. - */ -static int poch_channel_available(struct channel_info *channel) -{ - int available = 0; - - spin_lock_irq(&channel->group_offsets_lock); - - if (channel->consumed != channel->transfer) - available = 1; - - spin_unlock_irq(&channel->group_offsets_lock); - - return available; -} - -static unsigned int poch_poll(struct file *filp, poll_table *pt) -{ - struct channel_info *channel = filp->private_data; - unsigned int ret = 0; - - poll_wait(filp, &channel->wq, pt); - - if (poch_channel_available(channel)) { - if (channel->dir == CHANNEL_DIR_RX) - ret = POLLIN | POLLRDNORM; - else - ret = POLLOUT | POLLWRNORM; - } - - return ret; -} - -static int poch_ioctl(struct inode *inode, struct file *filp, - unsigned int cmd, unsigned long arg) -{ - struct channel_info *channel = filp->private_data; - void __iomem *fpga = channel->fpga_iomem; - void __iomem *bridge = channel->bridge_iomem; - void __user *argp = (void __user *)arg; - struct vm_area_struct *vms; - struct poch_counters counters; - int ret; - - switch (cmd) { - case POCH_IOC_TRANSFER_START: - switch (channel->chno) { - case CHNO_TX_CHANNEL: - printk(KERN_INFO PFX "ioctl: Tx start\n"); - iowrite32(0x1, fpga + FPGA_TX_TRIGGER_REG); - iowrite32(0x1, fpga + FPGA_TX_ENABLE_REG); - - /* FIXME: Does it make sense to do a DMA GO - * twice, once in Tx and once in Rx. - */ - iowrite32(0x1, bridge + BRIDGE_DMA_GO_REG); - break; - case CHNO_RX_CHANNEL: - printk(KERN_INFO PFX "ioctl: Rx start\n"); - iowrite32(0x1, fpga + FPGA_RX_ARM_REG); - iowrite32(0x1, bridge + BRIDGE_DMA_GO_REG); - break; - } - break; - case POCH_IOC_TRANSFER_STOP: - switch (channel->chno) { - case CHNO_TX_CHANNEL: - printk(KERN_INFO PFX "ioctl: Tx stop\n"); - iowrite32(0x0, fpga + FPGA_TX_ENABLE_REG); - iowrite32(0x0, fpga + FPGA_TX_TRIGGER_REG); - iowrite32(0x0, bridge + BRIDGE_DMA_GO_REG); - break; - case CHNO_RX_CHANNEL: - printk(KERN_INFO PFX "ioctl: Rx stop\n"); - iowrite32(0x0, fpga + FPGA_RX_ARM_REG); - iowrite32(0x0, bridge + BRIDGE_DMA_GO_REG); - break; - } - break; - case POCH_IOC_CONSUME: - { - int available; - int nfetch; - unsigned int from; - unsigned int count; - unsigned int i, j; - struct poch_consume consume; - struct poch_consume *uconsume; - - uconsume = argp; - ret = copy_from_user(&consume, uconsume, sizeof(consume)); - if (ret) - return ret; - - spin_lock_irq(&channel->group_offsets_lock); - - channel->consumed += consume.nflush; - channel->consumed %= channel->group_count; - - available = channel->transfer - channel->consumed; - if (available < 0) - available += channel->group_count; - - from = channel->consumed; - - spin_unlock_irq(&channel->group_offsets_lock); - - nfetch = consume.nfetch; - count = min(available, nfetch); - - for (i = 0; i < count; i++) { - j = (from + i) % channel->group_count; - ret = put_user(channel->groups[j].user_offset, - &consume.offsets[i]); - if (ret) - return -EFAULT; - } - - ret = put_user(count, &uconsume->nfetch); - if (ret) - return -EFAULT; - - break; - } - case POCH_IOC_GET_COUNTERS: - if (!access_ok(VERIFY_WRITE, argp, sizeof(struct poch_counters))) - return -EFAULT; - - spin_lock_irq(&channel->counters_lock); - counters = channel->counters; - __poch_channel_clear_counters(channel); - spin_unlock_irq(&channel->counters_lock); - - ret = copy_to_user(argp, &counters, - sizeof(struct poch_counters)); - if (ret) - return ret; - - break; - case POCH_IOC_SYNC_GROUP_FOR_USER: - case POCH_IOC_SYNC_GROUP_FOR_DEVICE: - vms = find_vma(current->mm, arg); - if (!vms) - /* Address not mapped. */ - return -EINVAL; - if (vms->vm_file != filp) - /* Address mapped from different device/file. */ - return -EINVAL; - - flush_cache_range(vms, arg, arg + channel->group_size); - break; - } - return 0; -} - -static struct file_operations poch_fops = { - .owner = THIS_MODULE, - .open = poch_open, - .release = poch_release, - .ioctl = poch_ioctl, - .poll = poch_poll, - .mmap = poch_mmap -}; - -static void poch_irq_dma(struct channel_info *channel) -{ - u32 prev_transfer; - u32 curr_transfer; - long groups_done; - unsigned long i, j; - struct poch_group_info *groups; - u32 curr_group_reg; - - if (!atomic_read(&channel->inited)) - return; - - prev_transfer = channel->transfer; - - if (channel->chno == CHNO_RX_CHANNEL) - curr_group_reg = FPGA_RX_CURR_GROUP_REG; - else - curr_group_reg = FPGA_TX_CURR_GROUP_REG; - - curr_transfer = ioread32(channel->fpga_iomem + curr_group_reg); - - groups_done = curr_transfer - prev_transfer; - /* Check wrap over, and handle it. */ - if (groups_done <= 0) - groups_done += channel->group_count; - - groups = channel->groups; - - spin_lock(&channel->group_offsets_lock); - - for (i = 0; i < groups_done; i++) { - j = (prev_transfer + i) % channel->group_count; - - channel->transfer += 1; - channel->transfer %= channel->group_count; - - if (channel->transfer == channel->consumed) { - channel->consumed += 1; - channel->consumed %= channel->group_count; - } - } - - spin_unlock(&channel->group_offsets_lock); - - wake_up_interruptible(&channel->wq); -} - -static irqreturn_t poch_irq_handler(int irq, void *p) -{ - struct poch_dev *poch_dev = p; - void __iomem *bridge = poch_dev->bridge_iomem; - void __iomem *fpga = poch_dev->fpga_iomem; - struct channel_info *channel_rx = &poch_dev->channels[CHNO_RX_CHANNEL]; - struct channel_info *channel_tx = &poch_dev->channels[CHNO_TX_CHANNEL]; - u32 bridge_stat; - u32 fpga_stat; - u32 dma_stat; - - bridge_stat = ioread32(bridge + BRIDGE_INT_STAT_REG); - fpga_stat = ioread32(fpga + FPGA_INT_STAT_REG); - dma_stat = ioread32(fpga + FPGA_DMA_INT_STAT_REG); - - ioread32(fpga + FPGA_DMA_INT_STAT_REG); - ioread32(fpga + FPGA_INT_STAT_REG); - ioread32(bridge + BRIDGE_INT_STAT_REG); - - if (bridge_stat & BRIDGE_INT_FPGA) { - if (fpga_stat & FPGA_INT_DMA_CORE) { - if (dma_stat & FPGA_DMA_INT_RX) - poch_irq_dma(channel_rx); - if (dma_stat & FPGA_DMA_INT_TX) - poch_irq_dma(channel_tx); - } - if (fpga_stat & FPGA_INT_PLL_UNLOCKED) { - channel_tx->counters.pll_unlock++; - channel_rx->counters.pll_unlock++; - if (printk_ratelimit()) - printk(KERN_WARNING PFX "PLL unlocked\n"); - } - if (fpga_stat & FPGA_INT_TX_FF_EMPTY) - channel_tx->counters.fifo_empty++; - if (fpga_stat & FPGA_INT_TX_FF_OVRFLW) - channel_tx->counters.fifo_overflow++; - if (fpga_stat & FPGA_INT_RX_FF_EMPTY) - channel_rx->counters.fifo_empty++; - if (fpga_stat & FPGA_INT_RX_FF_OVRFLW) - channel_rx->counters.fifo_overflow++; - - /* - * FIXME: These errors should be notified through the - * poll interface as POLLERR. - */ - - /* Re-enable interrupts. */ - iowrite32(BRIDGE_INT_FPGA, bridge + BRIDGE_INT_MASK_REG); - - return IRQ_HANDLED; - } - - return IRQ_NONE; -} - -static void poch_class_dev_unregister(struct poch_dev *poch_dev, int id) -{ - int i, j; - int nattrs; - struct channel_info *channel; - dev_t devno; - - if (poch_dev->dev == NULL) - return; - - for (i = 0; i < poch_dev->nchannels; i++) { - channel = &poch_dev->channels[i]; - devno = poch_first_dev + (id * poch_dev->nchannels) + i; - - if (!channel->dev) - continue; - - nattrs = sizeof(poch_class_attrs)/sizeof(poch_class_attrs[0]); - for (j = 0; j < nattrs; j++) - device_remove_file(channel->dev, poch_class_attrs[j]); - - device_unregister(channel->dev); - } - - device_unregister(poch_dev->dev); -} - -static int __devinit poch_class_dev_register(struct poch_dev *poch_dev, - int id) -{ - struct device *dev = &poch_dev->pci_dev->dev; - int i, j; - int nattrs; - int ret; - struct channel_info *channel; - dev_t devno; - - poch_dev->dev = device_create(poch_cls, &poch_dev->pci_dev->dev, - MKDEV(0, 0), NULL, "poch%d", id); - if (IS_ERR(poch_dev->dev)) { - dev_err(dev, "error creating parent class device"); - ret = PTR_ERR(poch_dev->dev); - poch_dev->dev = NULL; - return ret; - } - - for (i = 0; i < poch_dev->nchannels; i++) { - channel = &poch_dev->channels[i]; - - devno = poch_first_dev + (id * poch_dev->nchannels) + i; - channel->dev = device_create(poch_cls, poch_dev->dev, devno, - NULL, "ch%d", i); - if (IS_ERR(channel->dev)) { - dev_err(dev, "error creating channel class device"); - ret = PTR_ERR(channel->dev); - channel->dev = NULL; - poch_class_dev_unregister(poch_dev, id); - return ret; - } - - dev_set_drvdata(channel->dev, channel); - nattrs = sizeof(poch_class_attrs)/sizeof(poch_class_attrs[0]); - for (j = 0; j < nattrs; j++) { - ret = device_create_file(channel->dev, - poch_class_attrs[j]); - if (ret) { - dev_err(dev, "error creating attribute file"); - poch_class_dev_unregister(poch_dev, id); - return ret; - } - } - } - - return 0; -} - -static int __devinit poch_pci_probe(struct pci_dev *pdev, - const struct pci_device_id *pci_id) -{ - struct device *dev = &pdev->dev; - struct poch_dev *poch_dev; - struct uio_info *uio; - int ret; - int id; - int i; - - poch_dev = kzalloc(sizeof(struct poch_dev), GFP_KERNEL); - if (!poch_dev) { - dev_err(dev, "error allocating priv. data memory\n"); - return -ENOMEM; - } - - poch_dev->pci_dev = pdev; - uio = &poch_dev->uio; - - pci_set_drvdata(pdev, poch_dev); - - spin_lock_init(&poch_dev->iomem_lock); - - poch_dev->nchannels = POCH_NCHANNELS; - poch_dev->channels[CHNO_RX_CHANNEL].dir = CHANNEL_DIR_RX; - poch_dev->channels[CHNO_TX_CHANNEL].dir = CHANNEL_DIR_TX; - - for (i = 0; i < poch_dev->nchannels; i++) { - init_waitqueue_head(&poch_dev->channels[i].wq); - atomic_set(&poch_dev->channels[i].free, 1); - atomic_set(&poch_dev->channels[i].inited, 0); - } - - ret = pci_enable_device(pdev); - if (ret) { - dev_err(dev, "error enabling device\n"); - goto out_free; - } - - ret = pci_request_regions(pdev, "poch"); - if (ret) { - dev_err(dev, "error requesting resources\n"); - goto out_disable; - } - - uio->mem[0].addr = pci_resource_start(pdev, 1); - if (!uio->mem[0].addr) { - dev_err(dev, "invalid BAR1\n"); - ret = -ENODEV; - goto out_release; - } - - uio->mem[0].size = pci_resource_len(pdev, 1); - uio->mem[0].memtype = UIO_MEM_PHYS; - - uio->name = "poch"; - uio->version = "0.0.1"; - uio->irq = -1; - ret = uio_register_device(dev, uio); - if (ret) { - dev_err(dev, "error register UIO device: %d\n", ret); - goto out_release; - } - - poch_dev->bridge_iomem = ioremap(pci_resource_start(pdev, 0), - pci_resource_len(pdev, 0)); - if (poch_dev->bridge_iomem == NULL) { - dev_err(dev, "error mapping bridge (bar0) registers\n"); - ret = -ENOMEM; - goto out_uio_unreg; - } - - poch_dev->fpga_iomem = ioremap(pci_resource_start(pdev, 1), - pci_resource_len(pdev, 1)); - if (poch_dev->fpga_iomem == NULL) { - dev_err(dev, "error mapping fpga (bar1) registers\n"); - ret = -ENOMEM; - goto out_bar0_unmap; - } - - ret = request_irq(pdev->irq, poch_irq_handler, IRQF_SHARED, - dev_name(dev), poch_dev); - if (ret) { - dev_err(dev, "error requesting IRQ %u\n", pdev->irq); - ret = -ENOMEM; - goto out_bar1_unmap; - } - - if (!idr_pre_get(&poch_ids, GFP_KERNEL)) { - dev_err(dev, "error allocating memory ids\n"); - ret = -ENOMEM; - goto out_free_irq; - } - - idr_get_new(&poch_ids, poch_dev, &id); - if (id >= MAX_POCH_CARDS) { - dev_err(dev, "minors exhausted\n"); - ret = -EBUSY; - goto out_free_irq; - } - - cdev_init(&poch_dev->cdev, &poch_fops); - poch_dev->cdev.owner = THIS_MODULE; - ret = cdev_add(&poch_dev->cdev, - poch_first_dev + (id * poch_dev->nchannels), - poch_dev->nchannels); - if (ret) { - dev_err(dev, "error register character device\n"); - goto out_idr_remove; - } - - ret = poch_class_dev_register(poch_dev, id); - if (ret) - goto out_cdev_del; - - return 0; - - out_cdev_del: - cdev_del(&poch_dev->cdev); - out_idr_remove: - idr_remove(&poch_ids, id); - out_free_irq: - free_irq(pdev->irq, poch_dev); - out_bar1_unmap: - iounmap(poch_dev->fpga_iomem); - out_bar0_unmap: - iounmap(poch_dev->bridge_iomem); - out_uio_unreg: - uio_unregister_device(uio); - out_release: - pci_release_regions(pdev); - out_disable: - pci_disable_device(pdev); - out_free: - kfree(poch_dev); - return ret; -} - -/* - * FIXME: We are yet to handle the hot unplug case. - */ -static void poch_pci_remove(struct pci_dev *pdev) -{ - struct poch_dev *poch_dev = pci_get_drvdata(pdev); - struct uio_info *uio = &poch_dev->uio; - unsigned int minor = MINOR(poch_dev->cdev.dev); - unsigned int id = minor / poch_dev->nchannels; - - poch_class_dev_unregister(poch_dev, id); - cdev_del(&poch_dev->cdev); - idr_remove(&poch_ids, id); - free_irq(pdev->irq, poch_dev); - iounmap(poch_dev->fpga_iomem); - iounmap(poch_dev->bridge_iomem); - uio_unregister_device(uio); - pci_release_regions(pdev); - pci_disable_device(pdev); - pci_set_drvdata(pdev, NULL); - iounmap(uio->mem[0].internal_addr); - - kfree(poch_dev); -} - -static const struct pci_device_id poch_pci_ids[] /* __devinitconst */ = { - { PCI_DEVICE(PCI_VENDOR_ID_RRAPIDS, - PCI_DEVICE_ID_RRAPIDS_POCKET_CHANGE) }, - { 0, } -}; - -static struct pci_driver poch_pci_driver = { - .name = DRV_NAME, - .id_table = poch_pci_ids, - .probe = poch_pci_probe, - .remove = poch_pci_remove, -}; - -static int __init poch_init_module(void) -{ - int ret = 0; - - ret = alloc_chrdev_region(&poch_first_dev, 0, - MAX_POCH_DEVICES, DRV_NAME); - if (ret) { - printk(KERN_ERR PFX "error allocating device no."); - return ret; - } - - poch_cls = class_create(THIS_MODULE, "pocketchange"); - if (IS_ERR(poch_cls)) { - ret = PTR_ERR(poch_cls); - goto out_unreg_chrdev; - } - - ret = pci_register_driver(&poch_pci_driver); - if (ret) { - printk(KERN_ERR PFX "error register PCI device"); - goto out_class_destroy; - } - - return 0; - - out_class_destroy: - class_destroy(poch_cls); - - out_unreg_chrdev: - unregister_chrdev_region(poch_first_dev, MAX_POCH_DEVICES); - - return ret; -} - -static void __exit poch_exit_module(void) -{ - pci_unregister_driver(&poch_pci_driver); - class_destroy(poch_cls); - unregister_chrdev_region(poch_first_dev, MAX_POCH_DEVICES); -} - -module_init(poch_init_module); -module_exit(poch_exit_module); - -MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/poch/poch.h b/drivers/staging/poch/poch.h deleted file mode 100644 index 8b08385..0000000 --- a/drivers/staging/poch/poch.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * User-space DMA and UIO based Redrapids Pocket Change CardBus driver - * - * Copyright 2008 Vijay Kumar - * - * Part of userspace API. Should be moved to a header file in - * include/linux for final version. - * - */ - -#include - -struct poch_counters { - __u32 fifo_empty; - __u32 fifo_overflow; - __u32 pll_unlock; -}; - -struct poch_consume { - __u32 __user *offsets; - __u32 nfetch; - __u32 nflush; -}; - -#define POCH_IOC_NUM '9' - -#define POCH_IOC_TRANSFER_START _IO(POCH_IOC_NUM, 0) -#define POCH_IOC_TRANSFER_STOP _IO(POCH_IOC_NUM, 1) -#define POCH_IOC_GET_COUNTERS _IOR(POCH_IOC_NUM, 2, \ - struct poch_counters) -#define POCH_IOC_SYNC_GROUP_FOR_USER _IO(POCH_IOC_NUM, 3) -#define POCH_IOC_SYNC_GROUP_FOR_DEVICE _IO(POCH_IOC_NUM, 4) - -#define POCH_IOC_CONSUME _IOWR(POCH_IOC_NUM, 5, \ - struct poch_consume) -- cgit v0.10.2 From 173f3463804dbd583887de9871e85408942f90ee Mon Sep 17 00:00:00 2001 From: Hank Janssen Date: Thu, 4 Mar 2010 17:46:28 +0000 Subject: staging: hv: Remove Ringbuffer from TODO line Remove Ringbuffer work line item from TODO file. The ring buffer in the Hyper-V Linux drivers is used to communicate with the parent partition running Windows Server 2008 Hyper-V. The ring buffer functionality on the Hyper-V Linux drivers is written to be functionally compatible with the ring buffer functionality on the Hyper-V Server. Consequently, it is not possible to make any changes that might break the compatibility with server side ring buffer implementation. Signed-off-by: Hank Janssen Signed-off-by: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/TODO b/drivers/staging/hv/TODO index dbfbde9..efe8ce9 100644 --- a/drivers/staging/hv/TODO +++ b/drivers/staging/hv/TODO @@ -1,7 +1,6 @@ TODO: - fix remaining checkpatch warnings and errors - use of /** when it is not a kerneldoc header - - remove RingBuffer.c to us in-kernel ringbuffer functions instead. - audit the vmbus to verify it is working properly with the driver model - convert vmbus driver interface function pointer tables -- cgit v0.10.2 From 3e18951955797872558dad615851a4ca63b2770e Mon Sep 17 00:00:00 2001 From: Hank Janssen Date: Thu, 4 Mar 2010 22:11:00 +0000 Subject: staging: hv: Corrected all header comment formats kernel-doc format Removed kerneldoc /** from functions that should not have them. Added proper kerneldoc headers to functions that should have them. This includes fixes as pointed out by Randy Dunlap and Joe Perches. Cc: Joe Perches Acked-by: Randy Dunlap Signed-off-by: Hank Janssen Signed-off-by: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index e69e9ee..328d3a0 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -65,8 +65,9 @@ static void DumpMonitorPage(struct hv_monitor_page *MonitorPage) } #endif -/** - * VmbusChannelSetEvent - Trigger an event notification on the specified channel. +/* + * VmbusChannelSetEvent - Trigger an event notification on the specified + * channel. */ static void VmbusChannelSetEvent(struct vmbus_channel *Channel) { @@ -120,7 +121,7 @@ static void VmbusChannelClearEvent(struct vmbus_channel *channel) } #endif -/** +/* * VmbusChannelGetDebugInfo -Retrieve various channel debug info */ void VmbusChannelGetDebugInfo(struct vmbus_channel *Channel, @@ -165,7 +166,7 @@ void VmbusChannelGetDebugInfo(struct vmbus_channel *Channel, RingBufferGetDebugInfo(&Channel->Outbound, &DebugInfo->Outbound); } -/** +/* * VmbusChannelOpen - Open the specified channel. */ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, @@ -283,8 +284,9 @@ Cleanup: return 0; } -/** - * DumpGpadlBody - Dump the gpadl body message to the console for debugging purposes. +/* + * DumpGpadlBody - Dump the gpadl body message to the console for + * debugging purposes. */ static void DumpGpadlBody(struct vmbus_channel_gpadl_body *Gpadl, u32 Len) { @@ -300,8 +302,9 @@ static void DumpGpadlBody(struct vmbus_channel_gpadl_body *Gpadl, u32 Len) i, Gpadl->Pfn[i]); } -/** - * DumpGpadlHeader - Dump the gpadl header message to the console for debugging purposes. +/* + * DumpGpadlHeader - Dump the gpadl header message to the console for + * debugging purposes. */ static void DumpGpadlHeader(struct vmbus_channel_gpadl_header *Gpadl) { @@ -325,7 +328,7 @@ static void DumpGpadlHeader(struct vmbus_channel_gpadl_header *Gpadl) } } -/** +/* * VmbusChannelCreateGpadlHeader - Creates a gpadl for the specified buffer */ static int VmbusChannelCreateGpadlHeader(void *Kbuffer, u32 Size, @@ -441,7 +444,7 @@ static int VmbusChannelCreateGpadlHeader(void *Kbuffer, u32 Size, return 0; } -/** +/* * VmbusChannelEstablishGpadl - Estabish a GPADL for the specified buffer * * @Channel: a channel @@ -545,7 +548,7 @@ Cleanup: return ret; } -/** +/* * VmbusChannelTeardownGpadl -Teardown the specified GPADL handle */ int VmbusChannelTeardownGpadl(struct vmbus_channel *Channel, u32 GpadlHandle) @@ -598,7 +601,7 @@ int VmbusChannelTeardownGpadl(struct vmbus_channel *Channel, u32 GpadlHandle) return ret; } -/** +/* * VmbusChannelClose - Close the specified channel */ void VmbusChannelClose(struct vmbus_channel *Channel) @@ -663,7 +666,7 @@ void VmbusChannelClose(struct vmbus_channel *Channel) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelSendPacket - Send the specified buffer on the given channel */ int VmbusChannelSendPacket(struct vmbus_channel *Channel, const void *Buffer, @@ -709,8 +712,9 @@ int VmbusChannelSendPacket(struct vmbus_channel *Channel, const void *Buffer, return ret; } -/** - * VmbusChannelSendPacketPageBuffer - Send a range of single-page buffer packets using a GPADL Direct packet type. +/* + * VmbusChannelSendPacketPageBuffer - Send a range of single-page buffer + * packets using a GPADL Direct packet type. */ int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *Channel, struct hv_page_buffer PageBuffers[], @@ -774,8 +778,9 @@ int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *Channel, return ret; } -/** - * VmbusChannelSendPacketMultiPageBuffer - Send a multi-page buffer packet using a GPADL Direct packet type. +/* + * VmbusChannelSendPacketMultiPageBuffer - Send a multi-page buffer packet + * using a GPADL Direct packet type. */ int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *Channel, struct hv_multipage_buffer *MultiPageBuffer, @@ -843,7 +848,7 @@ int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *Channel, return ret; } -/** +/* * VmbusChannelRecvPacket - Retrieve the user packet on the specified channel */ /* TODO: Do we ever receive a gpa direct packet other than the ones we send ? */ @@ -909,7 +914,7 @@ int VmbusChannelRecvPacket(struct vmbus_channel *Channel, void *Buffer, return 0; } -/** +/* * VmbusChannelRecvPacketRaw - Retrieve the raw packet on the specified channel */ int VmbusChannelRecvPacketRaw(struct vmbus_channel *Channel, void *Buffer, @@ -972,7 +977,7 @@ int VmbusChannelRecvPacketRaw(struct vmbus_channel *Channel, void *Buffer, return 0; } -/** +/* * VmbusChannelOnChannelEvent - Channel event callback */ void VmbusChannelOnChannelEvent(struct vmbus_channel *Channel) @@ -985,7 +990,7 @@ void VmbusChannelOnChannelEvent(struct vmbus_channel *Channel) mod_timer(&Channel->poll_timer, jiffies + usecs_to_jiffies(100)); } -/** +/* * VmbusChannelOnTimer - Timer event callback */ void VmbusChannelOnTimer(unsigned long data) @@ -996,7 +1001,7 @@ void VmbusChannelOnTimer(unsigned long data) channel->OnChannelCallback(channel->ChannelCallbackContext); } -/** +/* * DumpVmbusChannel - Dump vmbus channel info to the console */ static void DumpVmbusChannel(struct vmbus_channel *Channel) diff --git a/drivers/staging/hv/ChannelMgmt.c b/drivers/staging/hv/ChannelMgmt.c index 5f92c21..43f28f2 100644 --- a/drivers/staging/hv/ChannelMgmt.c +++ b/drivers/staging/hv/ChannelMgmt.c @@ -71,7 +71,7 @@ static const struct hv_guid }, }; -/** +/* * AllocVmbusChannel - Allocate and initialize a vmbus channel object */ struct vmbus_channel *AllocVmbusChannel(void) @@ -97,7 +97,7 @@ struct vmbus_channel *AllocVmbusChannel(void) return channel; } -/** +/* * ReleaseVmbusChannel - Release the vmbus channel object itself */ static inline void ReleaseVmbusChannel(void *context) @@ -115,7 +115,7 @@ static inline void ReleaseVmbusChannel(void *context) DPRINT_EXIT(VMBUS); } -/** +/* * FreeVmbusChannel - Release the resources used by the vmbus channel object */ void FreeVmbusChannel(struct vmbus_channel *Channel) @@ -131,7 +131,7 @@ void FreeVmbusChannel(struct vmbus_channel *Channel) Channel); } -/** +/* * VmbusChannelProcessOffer - Process the offer by creating a channel/device associated with this offer */ static void VmbusChannelProcessOffer(void *context) @@ -213,7 +213,7 @@ static void VmbusChannelProcessOffer(void *context) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelProcessRescindOffer - Rescind the offer by initiating a device removal */ static void VmbusChannelProcessRescindOffer(void *context) @@ -225,7 +225,7 @@ static void VmbusChannelProcessRescindOffer(void *context) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelOnOffer - Handler for channel offers from vmbus in parent partition. * * We ignore all offers except network and storage offers. For each network and @@ -308,7 +308,7 @@ static void VmbusChannelOnOffer(struct vmbus_channel_message_header *hdr) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelOnOfferRescind - Rescind offer handler. * * We queue a work item to process this offer synchronously @@ -335,7 +335,7 @@ static void VmbusChannelOnOfferRescind(struct vmbus_channel_message_header *hdr) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelOnOffersDelivered - This is invoked when all offers have been delivered. * * Nothing to do here. @@ -347,7 +347,7 @@ static void VmbusChannelOnOffersDelivered( DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelOnOpenResult - Open result handler. * * This is invoked when we received a response to our channel open request. @@ -395,7 +395,7 @@ static void VmbusChannelOnOpenResult(struct vmbus_channel_message_header *hdr) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelOnGpadlCreated - GPADL created handler. * * This is invoked when we received a response to our gpadl create request. @@ -447,7 +447,7 @@ static void VmbusChannelOnGpadlCreated(struct vmbus_channel_message_header *hdr) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelOnGpadlTorndown - GPADL torndown handler. * * This is invoked when we received a response to our gpadl teardown request. @@ -495,7 +495,7 @@ static void VmbusChannelOnGpadlTorndown( DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelOnVersionResponse - Version response handler * * This is invoked when we received a response to our initiate contact request. @@ -558,7 +558,7 @@ static struct vmbus_channel_message_table_entry {ChannelMessageUnload, NULL}, }; -/** +/* * VmbusOnChannelMessage - Handler for channel protocol messages. * * This is invoked in the vmbus worker thread context. @@ -597,7 +597,7 @@ void VmbusOnChannelMessage(void *Context) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusChannelRequestOffers - Send a request to get all our pending offers. */ int VmbusChannelRequestOffers(void) @@ -651,8 +651,9 @@ Cleanup: return ret; } -/** - * VmbusChannelReleaseUnattachedChannels - Release channels that are unattached/unconnected ie (no drivers associated) +/* + * VmbusChannelReleaseUnattachedChannels - Release channels that are + * unattached/unconnected ie (no drivers associated) */ void VmbusChannelReleaseUnattachedChannels(void) { diff --git a/drivers/staging/hv/Connection.c b/drivers/staging/hv/Connection.c index e0ea9cf..cf9c416 100644 --- a/drivers/staging/hv/Connection.c +++ b/drivers/staging/hv/Connection.c @@ -34,7 +34,7 @@ struct VMBUS_CONNECTION gVmbusConnection = { .NextGpadlHandle = ATOMIC_INIT(0xE1E10), }; -/** +/* * VmbusConnect - Sends a connect request on the partition service connection */ int VmbusConnect(void) @@ -180,7 +180,7 @@ Cleanup: return ret; } -/** +/* * VmbusDisconnect - Sends a disconnect request on the partition service connection */ int VmbusDisconnect(void) @@ -218,7 +218,7 @@ Cleanup: return ret; } -/** +/* * GetChannelFromRelId - Get the channel object given its child relative id (ie channel id) */ struct vmbus_channel *GetChannelFromRelId(u32 relId) @@ -239,7 +239,7 @@ struct vmbus_channel *GetChannelFromRelId(u32 relId) return foundChannel; } -/** +/* * VmbusProcessChannelEvent - Process a channel event notification */ static void VmbusProcessChannelEvent(void *context) @@ -267,7 +267,7 @@ static void VmbusProcessChannelEvent(void *context) } } -/** +/* * VmbusOnEvents - Handler for events */ void VmbusOnEvents(void) @@ -308,7 +308,7 @@ void VmbusOnEvents(void) return; } -/** +/* * VmbusPostMessage - Send a msg on the vmbus's message connection */ int VmbusPostMessage(void *buffer, size_t bufferLen) @@ -320,7 +320,7 @@ int VmbusPostMessage(void *buffer, size_t bufferLen) return HvPostMessage(connId, 1, buffer, bufferLen); } -/** +/* * VmbusSetEvent - Send an event notification to the parent */ int VmbusSetEvent(u32 childRelId) diff --git a/drivers/staging/hv/Hv.c b/drivers/staging/hv/Hv.c index 5d53889..bfcb750 100644 --- a/drivers/staging/hv/Hv.c +++ b/drivers/staging/hv/Hv.c @@ -35,7 +35,7 @@ struct hv_context gHvContext = { .SignalEventBuffer = NULL, }; -/** +/* * HvQueryHypervisorPresence - Query the cpuid for presense of windows hypervisor */ static int HvQueryHypervisorPresence(void) @@ -56,7 +56,7 @@ static int HvQueryHypervisorPresence(void) return ecx & HV_PRESENT_BIT; } -/** +/* * HvQueryHypervisorInfo - Get version info of the windows hypervisor */ static int HvQueryHypervisorInfo(void) @@ -125,7 +125,7 @@ static int HvQueryHypervisorInfo(void) return maxLeaf; } -/** +/* * HvDoHypercall - Invoke the specified hypercall */ static u64 HvDoHypercall(u64 Control, void *Input, void *Output) @@ -180,7 +180,7 @@ static u64 HvDoHypercall(u64 Control, void *Input, void *Output) #endif /* !x86_64 */ } -/** +/* * HvInit - Main initialization routine. * * This routine must be called before any other routines in here are called @@ -294,7 +294,7 @@ Cleanup: return ret; } -/** +/* * HvCleanup - Cleanup routine. * * This routine is called normally during driver unloading or exiting. @@ -321,7 +321,7 @@ void HvCleanup(void) DPRINT_EXIT(VMBUS); } -/** +/* * HvPostMessage - Post a message using the hypervisor message IPC. * * This involves a hypercall. @@ -362,7 +362,7 @@ u16 HvPostMessage(union hv_connection_id connectionId, } -/** +/* * HvSignalEvent - Signal an event on the specified connection using the hypervisor event IPC. * * This involves a hypercall. @@ -376,7 +376,7 @@ u16 HvSignalEvent(void) return status; } -/** +/* * HvSynicInit - Initialize the Synthethic Interrupt Controller. * * If it is already initialized by another entity (ie x2v shim), we need to @@ -482,7 +482,7 @@ Cleanup: return; } -/** +/* * HvSynicCleanup - Cleanup routine for HvSynicInit(). */ void HvSynicCleanup(void *arg) diff --git a/drivers/staging/hv/NetVsc.c b/drivers/staging/hv/NetVsc.c index e4bf822..e1ca343 100644 --- a/drivers/staging/hv/NetVsc.c +++ b/drivers/staging/hv/NetVsc.c @@ -167,7 +167,7 @@ static struct netvsc_device *ReleaseInboundNetDevice(struct hv_device *Device) return netDevice; } -/** +/* * NetVscInitialize - Main entry point */ int NetVscInitialize(struct hv_driver *drv) @@ -705,7 +705,7 @@ static void NetVscDisconnectFromVsp(struct netvsc_device *NetDevice) DPRINT_EXIT(NETVSC); } -/** +/* * NetVscOnDeviceAdd - Callback when the device belonging to this driver is added */ static int NetVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) @@ -807,7 +807,7 @@ Cleanup: return ret; } -/** +/* * NetVscOnDeviceRemove - Callback when the root bus device is removed */ static int NetVscOnDeviceRemove(struct hv_device *Device) @@ -864,7 +864,7 @@ static int NetVscOnDeviceRemove(struct hv_device *Device) return 0; } -/** +/* * NetVscOnCleanup - Perform any cleanup when the driver is removed */ static void NetVscOnCleanup(struct hv_driver *drv) diff --git a/drivers/staging/hv/StorVsc.c b/drivers/staging/hv/StorVsc.c index e426a23..3592ba2 100644 --- a/drivers/staging/hv/StorVsc.c +++ b/drivers/staging/hv/StorVsc.c @@ -533,7 +533,7 @@ static int StorVscConnectToVsp(struct hv_device *Device) return ret; } -/** +/* * StorVscOnDeviceAdd - Callback when the device belonging to this driver is added */ static int StorVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) @@ -585,7 +585,7 @@ Cleanup: return ret; } -/** +/* * StorVscOnDeviceRemove - Callback when the our device is being removed */ static int StorVscOnDeviceRemove(struct hv_device *Device) @@ -683,7 +683,7 @@ Cleanup: return ret; } -/** +/* * StorVscOnIORequest - Callback to initiate an I/O request */ static int StorVscOnIORequest(struct hv_device *Device, @@ -783,7 +783,7 @@ static int StorVscOnIORequest(struct hv_device *Device, return ret; } -/** +/* * StorVscOnCleanup - Perform any cleanup when the driver is removed */ static void StorVscOnCleanup(struct hv_driver *Driver) @@ -792,7 +792,7 @@ static void StorVscOnCleanup(struct hv_driver *Driver) DPRINT_EXIT(STORVSC); } -/** +/* * StorVscInitialize - Main entry point */ int StorVscInitialize(struct hv_driver *Driver) diff --git a/drivers/staging/hv/TODO b/drivers/staging/hv/TODO index efe8ce9..01d4bd0 100644 --- a/drivers/staging/hv/TODO +++ b/drivers/staging/hv/TODO @@ -1,6 +1,5 @@ TODO: - fix remaining checkpatch warnings and errors - - use of /** when it is not a kerneldoc header - audit the vmbus to verify it is working properly with the driver model - convert vmbus driver interface function pointer tables diff --git a/drivers/staging/hv/Vmbus.c b/drivers/staging/hv/Vmbus.c index 2f84bf7..90b14be 100644 --- a/drivers/staging/hv/Vmbus.c +++ b/drivers/staging/hv/Vmbus.c @@ -52,7 +52,7 @@ static const struct hv_guid gVmbusDeviceId = { static struct hv_driver *gDriver; /* vmbus driver object */ static struct hv_device *gDevice; /* vmbus root device */ -/** +/* * VmbusGetChannelOffers - Retrieve the channel offers from the parent partition */ static void VmbusGetChannelOffers(void) @@ -62,7 +62,7 @@ static void VmbusGetChannelOffers(void) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusGetChannelInterface - Get the channel interface */ static void VmbusGetChannelInterface(struct vmbus_channel_interface *Interface) @@ -70,7 +70,7 @@ static void VmbusGetChannelInterface(struct vmbus_channel_interface *Interface) GetChannelInterface(Interface); } -/** +/* * VmbusGetChannelInfo - Get the device info for the specified device object */ static void VmbusGetChannelInfo(struct hv_device *DeviceObject, @@ -79,7 +79,7 @@ static void VmbusGetChannelInfo(struct hv_device *DeviceObject, GetChannelInfo(DeviceObject, DeviceInfo); } -/** +/* * VmbusCreateChildDevice - Creates the child device on the bus that represents the channel offer */ struct hv_device *VmbusChildDeviceCreate(struct hv_guid *DeviceType, @@ -92,7 +92,7 @@ struct hv_device *VmbusChildDeviceCreate(struct hv_guid *DeviceType, Context); } -/** +/* * VmbusChildDeviceAdd - Registers the child device with the vmbus */ int VmbusChildDeviceAdd(struct hv_device *ChildDevice) @@ -102,7 +102,7 @@ int VmbusChildDeviceAdd(struct hv_device *ChildDevice) return vmbusDriver->OnChildDeviceAdd(gDevice, ChildDevice); } -/** +/* * VmbusChildDeviceRemove Unregisters the child device from the vmbus */ void VmbusChildDeviceRemove(struct hv_device *ChildDevice) @@ -112,7 +112,7 @@ void VmbusChildDeviceRemove(struct hv_device *ChildDevice) vmbusDriver->OnChildDeviceRemove(ChildDevice); } -/** +/* * VmbusOnDeviceAdd - Callback when the root bus device is added */ static int VmbusOnDeviceAdd(struct hv_device *dev, void *AdditionalInfo) @@ -141,7 +141,7 @@ static int VmbusOnDeviceAdd(struct hv_device *dev, void *AdditionalInfo) return ret; } -/** +/* * VmbusOnDeviceRemove - Callback when the root bus device is removed */ static int VmbusOnDeviceRemove(struct hv_device *dev) @@ -157,7 +157,7 @@ static int VmbusOnDeviceRemove(struct hv_device *dev) return ret; } -/** +/* * VmbusOnCleanup - Perform any cleanup when the driver is removed */ static void VmbusOnCleanup(struct hv_driver *drv) @@ -169,7 +169,7 @@ static void VmbusOnCleanup(struct hv_driver *drv) DPRINT_EXIT(VMBUS); } -/** +/* * VmbusOnMsgDPC - DPC routine to handle messages from the hypervisior */ static void VmbusOnMsgDPC(struct hv_driver *drv) @@ -217,7 +217,7 @@ static void VmbusOnMsgDPC(struct hv_driver *drv) } } -/** +/* * VmbusOnEventDPC - DPC routine to handle events from the hypervisior */ static void VmbusOnEventDPC(struct hv_driver *drv) @@ -226,7 +226,7 @@ static void VmbusOnEventDPC(struct hv_driver *drv) VmbusOnEvents(); } -/** +/* * VmbusOnISR - ISR routine */ static int VmbusOnISR(struct hv_driver *drv) @@ -264,7 +264,7 @@ static int VmbusOnISR(struct hv_driver *drv) return ret; } -/** +/* * VmbusInitialize - Main entry point */ int VmbusInitialize(struct hv_driver *drv) diff --git a/drivers/staging/hv/VmbusApi.h b/drivers/staging/hv/VmbusApi.h index d089bb1..4275be3 100644 --- a/drivers/staging/hv/VmbusApi.h +++ b/drivers/staging/hv/VmbusApi.h @@ -84,6 +84,24 @@ struct hv_device_info { struct hv_dev_port_info Outbound; }; +/** + * struct vmbus_channel_interface - Contains member functions for vmbus channel + * @Open: Open the channel + * @Close: Close the channel + * @SendPacket: Send a packet over the channel + * @SendPacketPageBuffer: Send a single page buffer over the channel + * @SendPacketMultiPageBuffer: Send a multiple page buffers + * @RecvPacket: Receive packet + * @RecvPacketRaw: Receive Raw packet + * @EstablishGpadl: Set up GPADL for ringbuffer + * @TeardownGpadl: Teardown GPADL for ringbuffer + * @GetInfo: Get info about the channel + * + * This structure contains function pointer to control vmbus channel + * behavior. None of these functions is externally callable, but they + * are used for normal vmbus channel internal behavior. + * Only used by Hyper-V drivers. + */ struct vmbus_channel_interface { int (*Open)(struct hv_device *Device, u32 SendBufferSize, u32 RecvRingBufferSize, void *UserData, u32 UserDataLen, diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index 8f1fda3..e80cae7 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -165,7 +165,7 @@ static struct block_device_operations block_ops = { .ioctl = blkvsc_ioctl, }; -/** +/* * blkvsc_drv_init - BlkVsc driver initialization. */ static int blkvsc_drv_init(int (*drv_init)(struct hv_driver *drv)) @@ -245,7 +245,7 @@ static void blkvsc_drv_exit(void) return; } -/** +/* * blkvsc_probe - Add a new device for this driver */ static int blkvsc_probe(struct device *device) @@ -733,7 +733,7 @@ static int blkvsc_do_read_capacity16(struct block_device_context *blkdev) return 0; } -/** +/* * blkvsc_remove() - Callback when our device is removed */ static int blkvsc_remove(struct device *device) diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 2ccb6b9..5ed6e6e 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -266,7 +266,7 @@ retry_send: return ret; } -/** +/* * netvsc_linkstatus_callback - Link up/down notification */ static void netvsc_linkstatus_callback(struct hv_device *device_obj, @@ -293,8 +293,9 @@ static void netvsc_linkstatus_callback(struct hv_device *device_obj, DPRINT_EXIT(NETVSC_DRV); } -/** - * netvsc_recv_callback - Callback when we receive a packet from the "wire" on the specified device. +/* + * netvsc_recv_callback - Callback when we receive a packet from the + * "wire" on the specified device. */ static int netvsc_recv_callback(struct hv_device *device_obj, struct hv_netvsc_packet *packet) diff --git a/drivers/staging/hv/osd.c b/drivers/staging/hv/osd.c index 9aea310..8c3eb27 100644 --- a/drivers/staging/hv/osd.c +++ b/drivers/staging/hv/osd.c @@ -59,6 +59,15 @@ void *osd_VirtualAllocExec(unsigned int size) #endif } +/** + * osd_PageAlloc() - Allocate pages + * @count: Total number of Kernel pages you want to allocate + * + * Tries to allocate @count number of consecutive free kernel pages. + * And if successful, it will set the pages to 0 before returning. + * If successfull it will return pointer to the @count pages. + * Mainly used by Hyper-V drivers. + */ void *osd_PageAlloc(unsigned int count) { void *p; @@ -78,6 +87,14 @@ void *osd_PageAlloc(unsigned int count) } EXPORT_SYMBOL_GPL(osd_PageAlloc); +/** + * osd_PageFree() - Free pages + * @page: Pointer to the first page to be freed + * @count: Total number of Kernel pages you free + * + * Frees the pages allocated by osd_PageAlloc() + * Mainly used by Hyper-V drivers. + */ void osd_PageFree(void *page, unsigned int count) { free_pages((unsigned long)page, get_order(count * PAGE_SIZE)); @@ -86,6 +103,17 @@ void osd_PageFree(void *page, unsigned int count) } EXPORT_SYMBOL_GPL(osd_PageFree); +/** + * osd_WaitEventCreate() - Create the event queue + * + * Allocates memory for a &struct osd_waitevent. And then calls + * init_waitqueue_head to set up the wait queue for the event. + * This structure is usually part of a another structure that contains + * the actual Hyper-V device driver structure. + * + * Returns pointer to &struct osd_waitevent + * Mainly used by Hyper-V drivers. + */ struct osd_waitevent *osd_WaitEventCreate(void) { struct osd_waitevent *wait = kmalloc(sizeof(struct osd_waitevent), @@ -99,6 +127,19 @@ struct osd_waitevent *osd_WaitEventCreate(void) } EXPORT_SYMBOL_GPL(osd_WaitEventCreate); + +/** + * osd_WaitEventSet() - Wake up the process + * @waitEvent: Structure to event to be woken up + * + * @waitevent is of type &struct osd_waitevent + * + * Wake up the sleeping process so it can do some work. + * And set condition indicator in &struct osd_waitevent to indicate + * the process is in a woken state. + * + * Only used by Network and Storage Hyper-V drivers. + */ void osd_WaitEventSet(struct osd_waitevent *waitEvent) { waitEvent->condition = 1; @@ -106,6 +147,20 @@ void osd_WaitEventSet(struct osd_waitevent *waitEvent) } EXPORT_SYMBOL_GPL(osd_WaitEventSet); +/** + * osd_WaitEventWait() - Wait for event till condition is true + * @waitEvent: Structure to event to be put to sleep + * + * @waitevent is of type &struct osd_waitevent + * + * Set up the process to sleep until waitEvent->condition get true. + * And set condition indicator in &struct osd_waitevent to indicate + * the process is in a sleeping state. + * + * Returns the status of 'wait_event_interruptible()' system call + * + * Mainly used by Hyper-V drivers. + */ int osd_WaitEventWait(struct osd_waitevent *waitEvent) { int ret = 0; @@ -117,6 +172,21 @@ int osd_WaitEventWait(struct osd_waitevent *waitEvent) } EXPORT_SYMBOL_GPL(osd_WaitEventWait); +/** + * osd_WaitEventWaitEx() - Wait for event or timeout for process wakeup + * @waitEvent: Structure to event to be put to sleep + * @TimeoutInMs: Total number of Milliseconds to wait before waking up + * + * @waitevent is of type &struct osd_waitevent + * Set up the process to sleep until @waitEvent->condition get true or + * @TimeoutInMs (Time out in Milliseconds) has been reached. + * And set condition indicator in &struct osd_waitevent to indicate + * the process is in a sleeping state. + * + * Returns the status of 'wait_event_interruptible_timeout()' system call + * + * Mainly used by Hyper-V drivers. + */ int osd_WaitEventWaitEx(struct osd_waitevent *waitEvent, u32 TimeoutInMs) { int ret = 0; diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index 8a58272..63360b2 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -130,7 +130,7 @@ static struct scsi_host_template scsi_driver = { }; -/** +/* * storvsc_drv_init - StorVsc driver initialization. */ static int storvsc_drv_init(int (*drv_init)(struct hv_driver *drv)) @@ -223,7 +223,7 @@ static void storvsc_drv_exit(void) return; } -/** +/* * storvsc_probe - Add a new device for this driver */ static int storvsc_probe(struct device *device) @@ -319,7 +319,7 @@ static int storvsc_probe(struct device *device) return ret; } -/** +/* * storvsc_remove - Callback when our device is removed */ static int storvsc_remove(struct device *device) @@ -372,7 +372,7 @@ static int storvsc_remove(struct device *device) return ret; } -/** +/* * storvsc_commmand_completion - Command completion processing */ static void storvsc_commmand_completion(struct hv_storvsc_request *request) @@ -623,7 +623,7 @@ static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl, return total_copied; } -/** +/* * storvsc_queuecommand - Initiate command processing */ static int storvsc_queuecommand(struct scsi_cmnd *scmnd, @@ -824,7 +824,7 @@ static int storvsc_merge_bvec(struct request_queue *q, return bvec->bv_len; } -/** +/* * storvsc_device_configure - Configure the specified scsi device */ static int storvsc_device_alloc(struct scsi_device *sdevice) @@ -863,7 +863,7 @@ static int storvsc_device_configure(struct scsi_device *sdevice) return 0; } -/** +/* * storvsc_host_reset_handler - Reset the scsi HBA */ static int storvsc_host_reset_handler(struct scsi_cmnd *scmnd) diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c index 3397ef0..2ff61b8 100644 --- a/drivers/staging/hv/vmbus_drv.c +++ b/drivers/staging/hv/vmbus_drv.c @@ -129,7 +129,7 @@ static struct vmbus_driver_context g_vmbus_drv = { .bus.dev_attrs = vmbus_device_attrs, }; -/** +/* * vmbus_show_device_attr - Show the device attribute in sysfs. * * This is invoked when user does a @@ -233,7 +233,7 @@ static ssize_t vmbus_show_device_attr(struct device *dev, } } -/** +/* * vmbus_bus_init -Main vmbus driver initialization routine. * * Here, we @@ -362,7 +362,7 @@ cleanup: return ret; } -/** +/* * vmbus_bus_exit - Terminate the vmbus driver. * * This routine is opposite of vmbus_bus_init() @@ -398,8 +398,18 @@ static void vmbus_bus_exit(void) return; } + /** - * vmbus_child_driver_register - Register a vmbus's child driver + * vmbus_child_driver_register() - Register a vmbus's child driver + * @driver_ctx: Pointer to driver structure you want to register + * + * @driver_ctx is of type &struct driver_context + * + * Registers the given driver with Linux through the 'driver_register()' call + * And sets up the hyper-v vmbus handling for this driver. + * It will return the state of the 'driver_register()' call. + * + * Mainly used by Hyper-V drivers. */ int vmbus_child_driver_register(struct driver_context *driver_ctx) { @@ -425,7 +435,15 @@ int vmbus_child_driver_register(struct driver_context *driver_ctx) EXPORT_SYMBOL(vmbus_child_driver_register); /** - * vmbus_child_driver_unregister Unregister a vmbus's child driver + * vmbus_child_driver_unregister() - Unregister a vmbus's child driver + * @driver_ctx: Pointer to driver structure you want to un-register + * + * @driver_ctx is of type &struct driver_context + * + * Un-register the given driver with Linux through the 'driver_unregister()' + * call. And ungegisters the driver from the Hyper-V vmbus handler. + * + * Mainly used by Hyper-V drivers. */ void vmbus_child_driver_unregister(struct driver_context *driver_ctx) { @@ -443,9 +461,15 @@ void vmbus_child_driver_unregister(struct driver_context *driver_ctx) EXPORT_SYMBOL(vmbus_child_driver_unregister); /** - * vmbus_get_interface - Get the vmbus channel interface. + * vmbus_get_interface() - Get the vmbus channel interface. + * @interface: Pointer to channel interface structure + * + * Get the Hyper-V channel used for the driver. + * + * @interface is of type &struct vmbus_channel_interface + * This is invoked by child/client driver that sits above vmbus. * - * This is invoked by child/client driver that sits above vmbus + * Mainly used by Hyper-V drivers. */ void vmbus_get_interface(struct vmbus_channel_interface *interface) { @@ -455,7 +479,7 @@ void vmbus_get_interface(struct vmbus_channel_interface *interface) } EXPORT_SYMBOL(vmbus_get_interface); -/** +/* * vmbus_child_device_get_info - Get the vmbus child device info. * * This is invoked to display various device attributes in sysfs. @@ -468,8 +492,9 @@ static void vmbus_child_device_get_info(struct hv_device *device_obj, vmbus_drv_obj->GetChannelInfo(device_obj, device_info); } -/** - * vmbus_child_device_create - Creates and registers a new child device on the vmbus. +/* + * vmbus_child_device_create - Creates and registers a new child device + * on the vmbus. */ static struct hv_device *vmbus_child_device_create(struct hv_guid *type, struct hv_guid *instance, @@ -523,7 +548,7 @@ static struct hv_device *vmbus_child_device_create(struct hv_guid *type, return child_device_obj; } -/** +/* * vmbus_child_device_register - Register the child device on the specified bus */ static int vmbus_child_device_register(struct hv_device *root_device_obj, @@ -571,8 +596,9 @@ static int vmbus_child_device_register(struct hv_device *root_device_obj, return ret; } -/** - * vmbus_child_device_unregister - Remove the specified child device from the vmbus. +/* + * vmbus_child_device_unregister - Remove the specified child device + * from the vmbus. */ static void vmbus_child_device_unregister(struct hv_device *device_obj) { @@ -595,7 +621,7 @@ static void vmbus_child_device_unregister(struct hv_device *device_obj) DPRINT_EXIT(VMBUS_DRV); } -/** +/* * vmbus_child_device_destroy - Destroy the specified child device on the vmbus. */ static void vmbus_child_device_destroy(struct hv_device *device_obj) @@ -605,7 +631,7 @@ static void vmbus_child_device_destroy(struct hv_device *device_obj) DPRINT_EXIT(VMBUS_DRV); } -/** +/* * vmbus_uevent - add uevent for our device * * This routine is invoked when a device is added or removed on the vmbus to @@ -684,7 +710,7 @@ static int vmbus_uevent(struct device *device, struct kobj_uevent_env *env) return 0; } -/** +/* * vmbus_match - Attempt to match the specified device to the specified driver */ static int vmbus_match(struct device *device, struct device_driver *driver) @@ -719,7 +745,7 @@ static int vmbus_match(struct device *device, struct device_driver *driver) return match; } -/** +/* * vmbus_probe_failed_cb - Callback when a driver probe failed in vmbus_probe() * * We need a callback because we cannot invoked device_unregister() inside @@ -742,7 +768,7 @@ static void vmbus_probe_failed_cb(struct work_struct *context) DPRINT_EXIT(VMBUS_DRV); } -/** +/* * vmbus_probe - Add the new vmbus's child device */ static int vmbus_probe(struct device *child_device) @@ -778,7 +804,7 @@ static int vmbus_probe(struct device *child_device) return ret; } -/** +/* * vmbus_remove - Remove a vmbus device */ static int vmbus_remove(struct device *child_device) @@ -820,7 +846,7 @@ static int vmbus_remove(struct device *child_device) return 0; } -/** +/* * vmbus_shutdown - Shutdown a vmbus device */ static void vmbus_shutdown(struct device *child_device) @@ -856,7 +882,7 @@ static void vmbus_shutdown(struct device *child_device) return; } -/** +/* * vmbus_bus_release - Final callback release of the vmbus root device */ static void vmbus_bus_release(struct device *device) @@ -870,7 +896,7 @@ static void vmbus_bus_release(struct device *device) DPRINT_EXIT(VMBUS_DRV); } -/** +/* * vmbus_device_release - Final callback release of the vmbus child device */ static void vmbus_device_release(struct device *device) @@ -888,7 +914,7 @@ static void vmbus_device_release(struct device *device) return; } -/** +/* * vmbus_msg_dpc - Tasklet routine to handle hypervisor messages */ static void vmbus_msg_dpc(unsigned long data) @@ -905,7 +931,7 @@ static void vmbus_msg_dpc(unsigned long data) DPRINT_EXIT(VMBUS_DRV); } -/** +/* * vmbus_msg_dpc - Tasklet routine to handle hypervisor events */ static void vmbus_event_dpc(unsigned long data) -- cgit v0.10.2 From 6f2dfb3101bb431ae9adc827fa8526d699e9dbd0 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 2 Mar 2010 13:35:35 +0000 Subject: staging: IIO: Fix uses of spinlocks prior to init in ring implementations Some confusion was caused by the ___iio_init_ring_buffer and equivalent in ring_sw handling both init of spin locks etc and allocation and of the actual buffer. This resulted in ring->use_lock being held before it was initialized and actually during the initialization. Some of the recent cleanups in the spin lock code seem to have triggered the bug actually causing traceable crashes. The following patch should fix this but hasn't been extensively tested as of yet and there may well be some side effects I haven't thought of. Just wanted to get this out there before anyone else runs into it! Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/industrialio-ring.c b/drivers/staging/iio/industrialio-ring.c index e53e214..5f48632 100644 --- a/drivers/staging/iio/industrialio-ring.c +++ b/drivers/staging/iio/industrialio-ring.c @@ -266,6 +266,8 @@ void iio_ring_buffer_init(struct iio_ring_buffer *ring, ring->indio_dev = dev_info; ring->ev_int.private = ring; ring->access_handler.private = ring; + ring->shared_ev_pointer.ev_p = 0; + spin_lock_init(&ring->shared_ev_pointer.lock); } EXPORT_SYMBOL(iio_ring_buffer_init); diff --git a/drivers/staging/iio/ring_generic.h b/drivers/staging/iio/ring_generic.h index 09044ad..75e0fc0 100644 --- a/drivers/staging/iio/ring_generic.h +++ b/drivers/staging/iio/ring_generic.h @@ -134,19 +134,17 @@ void iio_ring_buffer_init(struct iio_ring_buffer *ring, struct iio_dev *dev_info); /** - * __iio_init_ring_buffer() - initialize common elements of ring buffers + * __iio_update_ring_buffer() - update common elements of ring buffers * @ring: ring buffer that is the event source * @bytes_per_datum: size of individual datum including timestamp * @length: number of datums in ring **/ -static inline void __iio_init_ring_buffer(struct iio_ring_buffer *ring, - int bytes_per_datum, int length) +static inline void __iio_update_ring_buffer(struct iio_ring_buffer *ring, + int bytes_per_datum, int length) { ring->bpd = bytes_per_datum; ring->length = length; ring->loopcount = 0; - ring->shared_ev_pointer.ev_p = 0; - spin_lock_init(&ring->shared_ev_pointer.lock); } /** diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c index b104c3d..851a97e 100644 --- a/drivers/staging/iio/ring_sw.c +++ b/drivers/staging/iio/ring_sw.c @@ -14,14 +14,12 @@ #include #include "ring_sw.h" -static inline int __iio_init_sw_ring_buffer(struct iio_sw_ring_buffer *ring, - int bytes_per_datum, int length) +static inline int __iio_allocate_sw_ring_buffer(struct iio_sw_ring_buffer *ring, + int bytes_per_datum, int length) { if ((length == 0) || (bytes_per_datum == 0)) return -EINVAL; - - __iio_init_ring_buffer(&ring->buf, bytes_per_datum, length); - spin_lock_init(&ring->use_lock); + __iio_update_ring_buffer(&ring->buf, bytes_per_datum, length); ring->data = kmalloc(length*ring->buf.bpd, GFP_KERNEL); ring->read_p = 0; ring->write_p = 0; @@ -30,6 +28,11 @@ static inline int __iio_init_sw_ring_buffer(struct iio_sw_ring_buffer *ring, return ring->data ? 0 : -ENOMEM; } +static inline void __iio_init_sw_ring_buffer(struct iio_sw_ring_buffer *ring) +{ + spin_lock_init(&ring->use_lock); +} + static inline void __iio_free_sw_ring_buffer(struct iio_sw_ring_buffer *ring) { kfree(ring->data); @@ -320,7 +323,8 @@ int iio_request_update_sw_rb(struct iio_ring_buffer *r) goto error_ret; } __iio_free_sw_ring_buffer(ring); - ret = __iio_init_sw_ring_buffer(ring, ring->buf.bpd, ring->buf.length); + ret = __iio_allocate_sw_ring_buffer(ring, ring->buf.bpd, + ring->buf.length); error_ret: spin_unlock(&ring->use_lock); return ret; @@ -411,8 +415,8 @@ struct iio_ring_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev) if (!ring) return 0; buf = &ring->buf; - iio_ring_buffer_init(buf, indio_dev); + __iio_init_sw_ring_buffer(ring); buf->dev.type = &iio_sw_ring_type; device_initialize(&buf->dev); buf->dev.parent = &indio_dev->dev; -- cgit v0.10.2 From 7264fcd129b939fc1faa8ccfee043f843285161b Mon Sep 17 00:00:00 2001 From: John Sheehan Date: Thu, 4 Mar 2010 14:24:40 +0000 Subject: staging: arlan: fix errors reported by checkpatch.pl tool fix all but one of the errors reported by checkpatch.pl tool. Errors included wayward braces, white space issues(trailing and prohibited), C99 issues, and foo* issues Signed-off-by: John Sheehan Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/arlan/arlan-main.c b/drivers/staging/arlan/arlan-main.c index 88fdd53..58deb96 100644 --- a/drivers/staging/arlan/arlan-main.c +++ b/drivers/staging/arlan/arlan-main.c @@ -80,15 +80,14 @@ static int arlan_open(struct net_device *dev); static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev); static irqreturn_t arlan_interrupt(int irq, void *dev_id); static int arlan_close(struct net_device *dev); -static struct net_device_stats * - arlan_statistics (struct net_device *dev); -static void arlan_set_multicast (struct net_device *dev); -static int arlan_hw_tx (struct net_device* dev, char *buf, int length ); -static int arlan_hw_config (struct net_device * dev); -static void arlan_tx_done_interrupt (struct net_device * dev, int status); -static void arlan_rx_interrupt (struct net_device * dev, u_char rxStatus, u_short, u_short); -static void arlan_process_interrupt (struct net_device * dev); -static void arlan_tx_timeout (struct net_device *dev); +static struct net_device_stats *arlan_statistics(struct net_device *dev); +static void arlan_set_multicast(struct net_device *dev); +static int arlan_hw_tx(struct net_device *dev, char *buf, int length); +static int arlan_hw_config(struct net_device *dev); +static void arlan_tx_done_interrupt(struct net_device *dev, int status); +static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short, u_short); +static void arlan_process_interrupt(struct net_device *dev); +static void arlan_tx_timeout(struct net_device *dev); static inline long us2ticks(int us) { @@ -102,14 +101,14 @@ static inline long us2ticks(int us) struct timeval timev;\ do_gettimeofday(&timev);\ if (arlan_entry_debug || arlan_entry_and_exit_debug)\ - printk("--->>>" name " %ld " "\n",((long int) timev.tv_sec * 1000000 + timev.tv_usec));\ + printk("--->>>" name " %ld " "\n", ((long int) timev.tv_sec * 1000000 + timev.tv_usec));\ } #define ARLAN_DEBUG_EXIT(name) \ {\ struct timeval timev;\ do_gettimeofday(&timev);\ if (arlan_exit_debug || arlan_entry_and_exit_debug)\ - printk("<<<---" name " %ld " "\n",((long int) timev.tv_sec * 1000000 + timev.tv_usec) );\ + printk("<<<---" name " %ld " "\n", ((long int) timev.tv_sec * 1000000 + timev.tv_usec));\ } #else #define ARLAN_DEBUG_ENTRY(name) @@ -118,8 +117,8 @@ static inline long us2ticks(int us) #define arlan_interrupt_ack(dev)\ - clearClearInterrupt(dev);\ - setClearInterrupt(dev); + clearClearInterrupt(dev);\ + setClearInterrupt(dev); static inline int arlan_drop_tx(struct net_device *dev) { @@ -127,18 +126,15 @@ static inline int arlan_drop_tx(struct net_device *dev) dev->stats.tx_errors++; if (priv->Conf->tx_delay_ms) - { priv->tx_done_delayed = jiffies + priv->Conf->tx_delay_ms * HZ / 1000 + 1; - } - else - { + else { priv->waiting_command_mask &= ~ARLAN_COMMAND_TX; TXHEAD(dev).offset = 0; TXTAIL(dev).offset = 0; priv->txLast = 0; priv->bad = 0; if (!priv->under_reset && !priv->under_config) - netif_wake_queue (dev); + netif_wake_queue(dev); } return 1; } @@ -169,13 +165,11 @@ int arlan_command(struct net_device *dev, int command_p) if (time_after(jiffies, priv->lastReset + 5 * HZ)) priv->waiting_command_mask &= ~ARLAN_COMMAND_RESET; - if (priv->waiting_command_mask & ARLAN_COMMAND_INT_ACK) - { + if (priv->waiting_command_mask & ARLAN_COMMAND_INT_ACK) { arlan_interrupt_ack(dev); priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_ACK; } - if (priv->waiting_command_mask & ARLAN_COMMAND_INT_ENABLE) - { + if (priv->waiting_command_mask & ARLAN_COMMAND_INT_ENABLE) { setInterruptEnable(dev); priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_ENABLE; } @@ -185,12 +179,10 @@ int arlan_command(struct net_device *dev, int command_p) /* Check cards status and waiting */ - if (priv->waiting_command_mask & (ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW)) - { - while (priv->waiting_command_mask & (ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW)) - { + if (priv->waiting_command_mask & (ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW)) { + while (priv->waiting_command_mask & (ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW)) { if (READSHMB(arlan->resetFlag) || - READSHMB(arlan->commandByte)) /* || + READSHMB(arlan->commandByte)) /* || (readControlRegister(dev) & ARLAN_ACCESS)) */ udelay(40); @@ -199,27 +191,20 @@ int arlan_command(struct net_device *dev, int command_p) udelayed++; - if (priv->waiting_command_mask & ARLAN_COMMAND_LONG_WAIT_NOW) - { - if (udelayed * 40 > 1000000) - { + if (priv->waiting_command_mask & ARLAN_COMMAND_LONG_WAIT_NOW) { + if (udelayed * 40 > 1000000) { printk(KERN_ERR "%s long wait too long \n", dev->name); priv->waiting_command_mask |= ARLAN_COMMAND_RESET; break; } - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_WAIT_NOW) - { - if (udelayed * 40 > 1000) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_WAIT_NOW) { + if (udelayed * 40 > 1000) { printk(KERN_ERR "%s short wait too long \n", dev->name); goto bad_end; } } } - } - else - { + } else { i = 0; while ((READSHMB(arlan->resetFlag) || READSHMB(arlan->commandByte)) && @@ -230,9 +215,7 @@ int arlan_command(struct net_device *dev, int command_p) if ((READSHMB(arlan->resetFlag) || READSHMB(arlan->commandByte)) && !(priv->waiting_command_mask & ARLAN_COMMAND_RESET)) - { goto card_busy_end; - } } if (priv->waiting_command_mask & ARLAN_COMMAND_RESET) priv->under_reset = 1; @@ -241,55 +224,43 @@ int arlan_command(struct net_device *dev, int command_p) /* Issuing command */ arlan_lock_card_access(dev); - if (priv->waiting_command_mask & ARLAN_COMMAND_POWERUP) - { - // if (readControlRegister(dev) & (ARLAN_ACCESS && ARLAN_POWER)) + if (priv->waiting_command_mask & ARLAN_COMMAND_POWERUP) { + /* if (readControlRegister(dev) & (ARLAN_ACCESS && ARLAN_POWER)) */ setPowerOn(dev); arlan_interrupt_lancpu(dev); priv->waiting_command_mask &= ~ARLAN_COMMAND_POWERUP; priv->waiting_command_mask |= ARLAN_COMMAND_RESET; priv->card_polling_interval = HZ / 10; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_ACTIVATE) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_ACTIVATE) { WRITESHMB(arlan->commandByte, ARLAN_COM_ACTIVATE); arlan_interrupt_lancpu(dev); priv->waiting_command_mask &= ~ARLAN_COMMAND_ACTIVATE; priv->card_polling_interval = HZ / 10; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_RX_ABORT) - { - if (priv->rx_command_given) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_RX_ABORT) { + if (priv->rx_command_given) { WRITESHMB(arlan->commandByte, ARLAN_COM_RX_ABORT); arlan_interrupt_lancpu(dev); priv->rx_command_given = 0; } priv->waiting_command_mask &= ~ARLAN_COMMAND_RX_ABORT; priv->card_polling_interval = 1; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_TX_ABORT) - { - if (priv->tx_command_given) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_TX_ABORT) { + if (priv->tx_command_given) { WRITESHMB(arlan->commandByte, ARLAN_COM_TX_ABORT); arlan_interrupt_lancpu(dev); priv->tx_command_given = 0; } priv->waiting_command_mask &= ~ARLAN_COMMAND_TX_ABORT; priv->card_polling_interval = 1; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_RESET) - { - priv->under_reset=1; - netif_stop_queue (dev); + } else if (priv->waiting_command_mask & ARLAN_COMMAND_RESET) { + priv->under_reset = 1; + netif_stop_queue(dev); arlan_drop_tx(dev); if (priv->tx_command_given || priv->rx_command_given) - { printk(KERN_ERR "%s: Reset under tx or rx command \n", dev->name); - } - netif_stop_queue (dev); + + netif_stop_queue(dev); if (arlan_debug & ARLAN_DEBUG_RESET) printk(KERN_ERR "%s: Doing chip reset\n", dev->name); priv->lastReset = jiffies; @@ -303,11 +274,9 @@ int arlan_command(struct net_device *dev, int command_p) priv->card_polling_interval = HZ / 4; priv->waiting_command_mask &= ~ARLAN_COMMAND_RESET; priv->waiting_command_mask |= ARLAN_COMMAND_INT_RACK; -// priv->waiting_command_mask |= ARLAN_COMMAND_INT_RENABLE; -// priv->waiting_command_mask |= ARLAN_COMMAND_RX; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_INT_RACK) - { + /* priv->waiting_command_mask |= ARLAN_COMMAND_INT_RENABLE; */ + /* priv->waiting_command_mask |= ARLAN_COMMAND_RX; */ + } else if (priv->waiting_command_mask & ARLAN_COMMAND_INT_RACK) { clearHardwareReset(dev); clearClearInterrupt(dev); setClearInterrupt(dev); @@ -316,126 +285,94 @@ int arlan_command(struct net_device *dev, int command_p) priv->waiting_command_mask |= ARLAN_COMMAND_CONF; priv->under_config = 1; priv->under_reset = 0; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_INT_RENABLE) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_INT_RENABLE) { setInterruptEnable(dev); priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_RENABLE; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_CONF) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_CONF) { if (priv->tx_command_given || priv->rx_command_given) - { printk(KERN_ERR "%s: Reset under tx or rx command \n", dev->name); - } + arlan_drop_tx(dev); setInterruptEnable(dev); arlan_hw_config(dev); arlan_interrupt_lancpu(dev); priv->waiting_command_mask &= ~ARLAN_COMMAND_CONF; priv->card_polling_interval = HZ / 10; -// priv->waiting_command_mask |= ARLAN_COMMAND_INT_RACK; -// priv->waiting_command_mask |= ARLAN_COMMAND_INT_ENABLE; + /* priv->waiting_command_mask |= ARLAN_COMMAND_INT_RACK; */ + /* priv->waiting_command_mask |= ARLAN_COMMAND_INT_ENABLE; */ priv->waiting_command_mask |= ARLAN_COMMAND_CONF_WAIT; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_CONF_WAIT) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_CONF_WAIT) { if (READSHMB(arlan->configuredStatusFlag) != 0 && - READSHMB(arlan->diagnosticInfo) == 0xff) - { + READSHMB(arlan->diagnosticInfo) == 0xff) { priv->waiting_command_mask &= ~ARLAN_COMMAND_CONF_WAIT; priv->waiting_command_mask |= ARLAN_COMMAND_RX; priv->waiting_command_mask |= ARLAN_COMMAND_TBUSY_CLEAR; priv->card_polling_interval = HZ / 10; priv->tx_command_given = 0; priv->under_config = 0; - } - else - { + } else { priv->card_polling_interval = 1; if (arlan_debug & ARLAN_DEBUG_TIMING) printk(KERN_ERR "configure delayed \n"); } - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_RX) - { - if (!registrationBad(dev)) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_RX) { + if (!registrationBad(dev)) { setInterruptEnable(dev); memset_io(arlan->commandParameter, 0, 0xf); WRITESHMB(arlan->commandByte, ARLAN_COM_INT | ARLAN_COM_RX_ENABLE); WRITESHMB(arlan->commandParameter[0], conf->rxParameter); arlan_interrupt_lancpu(dev); - priv->rx_command_given = 0; // mnjah, bad + priv->rx_command_given = 0; /* mnjah, bad */ priv->waiting_command_mask &= ~ARLAN_COMMAND_RX; priv->card_polling_interval = 1; - } - else + } else priv->card_polling_interval = 2; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_TBUSY_CLEAR) - { - if ( !registrationBad(dev) && - (netif_queue_stopped(dev) || !netif_running(dev)) ) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_TBUSY_CLEAR) { + if (!registrationBad(dev) && + (netif_queue_stopped(dev) || !netif_running(dev))) { priv->waiting_command_mask &= ~ARLAN_COMMAND_TBUSY_CLEAR; - netif_wake_queue (dev); + netif_wake_queue(dev); } - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_TX) - { - if (!test_and_set_bit(0, (void *) &priv->tx_command_given)) - { - if (time_after(jiffies, + } else if (priv->waiting_command_mask & ARLAN_COMMAND_TX) { + if (!test_and_set_bit(0, (void *) &priv->tx_command_given)) { + if (time_after(jiffies, priv->tx_last_sent + us2ticks(conf->rx_tweak1)) || time_before(jiffies, - priv->last_rx_int_ack_time + us2ticks(conf->rx_tweak2))) - { + priv->last_rx_int_ack_time + us2ticks(conf->rx_tweak2))) { setInterruptEnable(dev); memset_io(arlan->commandParameter, 0, 0xf); WRITESHMB(arlan->commandByte, ARLAN_COM_TX_ENABLE | ARLAN_COM_INT); memcpy_toio(arlan->commandParameter, &TXLAST(dev), 14); -// for ( i=1 ; i < 15 ; i++) printk("%02x:",READSHMB(arlan->commandParameter[i])); + /* for ( i=1 ; i < 15 ; i++) printk("%02x:",READSHMB(arlan->commandParameter[i])); */ priv->tx_last_sent = jiffies; arlan_interrupt_lancpu(dev); priv->tx_command_given = 1; priv->waiting_command_mask &= ~ARLAN_COMMAND_TX; priv->card_polling_interval = 1; - } - else - { + } else { priv->tx_command_given = 0; priv->card_polling_interval = 1; } - } - else if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) + } else if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) printk(KERN_ERR "tx command when tx chain locked \n"); - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_NOOPINT) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_NOOPINT) { { WRITESHMB(arlan->commandByte, ARLAN_COM_NOP | ARLAN_COM_INT); } arlan_interrupt_lancpu(dev); priv->waiting_command_mask &= ~ARLAN_COMMAND_NOOPINT; priv->card_polling_interval = HZ / 3; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_NOOP) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_NOOP) { WRITESHMB(arlan->commandByte, ARLAN_COM_NOP); arlan_interrupt_lancpu(dev); priv->waiting_command_mask &= ~ARLAN_COMMAND_NOOP; priv->card_polling_interval = HZ / 3; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_SLOW_POLL) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_SLOW_POLL) { WRITESHMB(arlan->commandByte, ARLAN_COM_GOTO_SLOW_POLL); arlan_interrupt_lancpu(dev); priv->waiting_command_mask &= ~ARLAN_COMMAND_SLOW_POLL; priv->card_polling_interval = HZ / 3; - } - else if (priv->waiting_command_mask & ARLAN_COMMAND_POWERDOWN) - { + } else if (priv->waiting_command_mask & ARLAN_COMMAND_POWERDOWN) { setPowerOff(dev); if (arlan_debug & ARLAN_DEBUG_CARD_STATE) printk(KERN_WARNING "%s: Arlan Going Standby\n", dev->name); @@ -478,10 +415,8 @@ static inline void arlan_command_process(struct net_device *dev) struct arlan_private *priv = netdev_priv(dev); int times = 0; - while (priv->waiting_command_mask && times < 8) - { - if (priv->waiting_command_mask) - { + while (priv->waiting_command_mask && times < 8) { + if (priv->waiting_command_mask) { if (arlan_command(dev, 0)) break; times++; @@ -500,24 +435,17 @@ static inline void arlan_retransmit_now(struct net_device *dev) ARLAN_DEBUG_ENTRY("arlan_retransmit_now"); - if (TXLAST(dev).offset == 0) - { - if (TXHEAD(dev).offset) - { + if (TXLAST(dev).offset == 0) { + if (TXHEAD(dev).offset) { priv->txLast = 0; IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to head \n"); - - } - else if (TXTAIL(dev).offset) - { + } else if (TXTAIL(dev).offset) { IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to tail \n"); priv->txLast = 1; - } - else + } else IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "ReTransmit buff empty"); - netif_wake_queue (dev); + netif_wake_queue(dev); return; - } arlan_command(dev, ARLAN_COMMAND_TX); @@ -540,78 +468,71 @@ static void arlan_registration_timer(unsigned long data) long lostTime = ((long)jiffies - (long)priv->registrationLastSeen) * (1000/HZ); - if (registrationBad(dev)) - { + if (registrationBad(dev)) { priv->registrationLostCount++; if (lostTime > 7000 && lostTime < 7200) - { printk(KERN_NOTICE "%s registration Lost \n", dev->name); - } + if (lostTime / priv->reRegisterExp > 2000) arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_CONF); if (lostTime / (priv->reRegisterExp) > 3500) arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); if (priv->reRegisterExp < 400) priv->reRegisterExp += 2; - if (lostTime > 7200) - { + if (lostTime > 7200) { next_tick = HZ; arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); } - } - else - { + } else { if (priv->Conf->registrationMode && lostTime > 10000 && - priv->registrationLostCount) - { + priv->registrationLostCount) { printk(KERN_NOTICE "%s registration is back after %ld milliseconds\n", dev->name, lostTime); } priv->registrationLastSeen = jiffies; priv->registrationLostCount = 0; priv->reRegisterExp = 1; - if (!netif_running(dev) ) + if (!netif_running(dev)) netif_wake_queue(dev); - if (time_after(priv->tx_last_sent,priv->tx_last_cleared) && - time_after(jiffies, priv->tx_last_sent * 5*HZ) ){ - arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); + if (time_after(priv->tx_last_sent, priv->tx_last_cleared) && + time_after(jiffies, priv->tx_last_sent * 5*HZ)) { + arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); priv->tx_last_cleared = jiffies; } } - if (!registrationBad(dev) && priv->ReTransmitRequested) - { + if (!registrationBad(dev) && priv->ReTransmitRequested) { IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "Retransmit from timer \n"); priv->ReTransmitRequested = 0; arlan_retransmit_now(dev); } + if (!registrationBad(dev) && time_after(jiffies, priv->tx_done_delayed) && - priv->tx_done_delayed != 0) - { + priv->tx_done_delayed != 0) { TXLAST(dev).offset = 0; + if (priv->txLast) priv->txLast = 0; else if (TXTAIL(dev).offset) priv->txLast = 1; - if (TXLAST(dev).offset) - { + if (TXLAST(dev).offset) { arlan_retransmit_now(dev); dev->trans_start = jiffies; } + if (!(TXHEAD(dev).offset && TXTAIL(dev).offset)) - { - netif_wake_queue (dev); - } + netif_wake_queue(dev); + priv->tx_done_delayed = 0; bh_mark_needed = 1; } + if (bh_mark_needed) - { - netif_wake_queue (dev); - } + netif_wake_queue(dev); + arlan_process_interrupt(dev); if (next_tick < priv->card_polling_interval) @@ -672,8 +593,7 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length) tailStarts = 0x800 - (((TXTAIL(dev).offset - offsetof(struct arlan_shmem, txBuffer)) / 64) + 2) * 64; - if (!TXHEAD(dev).offset && length < tailStarts) - { + if (!TXHEAD(dev).offset && length < tailStarts) { IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "TXHEAD insert, tailStart %d\n", tailStarts); @@ -687,9 +607,7 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length) TXHEAD(dev).routing = conf->txRouting; TXHEAD(dev).scrambled = conf->txScrambled; memcpy_toio((char __iomem *)arlan + TXHEAD(dev).offset, buf + ARLAN_FAKE_HDR_LEN, TXHEAD(dev).length); - } - else if (!TXTAIL(dev).offset && length < (0x800 - headEnds)) - { + } else if (!TXTAIL(dev).offset && length < (0x800 - headEnds)) { IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "TXTAIL insert, headEnd %d\n", headEnds); @@ -703,10 +621,8 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length) TXTAIL(dev).routing = conf->txRouting; TXTAIL(dev).scrambled = conf->txScrambled; memcpy_toio(((char __iomem *)arlan + TXTAIL(dev).offset), buf + ARLAN_FAKE_HDR_LEN, TXTAIL(dev).length); - } - else - { - netif_stop_queue (dev); + } else { + netif_stop_queue(dev); IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "TX TAIL & HEAD full, return, tailStart %d headEnd %d\n", tailStarts, headEnds); return -1; @@ -715,26 +631,23 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length) priv->out_bytes10 += length; if (conf->measure_rate < 1) conf->measure_rate = 1; - if (time_after(jiffies, priv->out_time + conf->measure_rate * HZ)) - { + if (time_after(jiffies, priv->out_time + conf->measure_rate * HZ)) { conf->out_speed = priv->out_bytes / conf->measure_rate; priv->out_bytes = 0; priv->out_time = jiffies; } - if (time_after(jiffies, priv->out_time10 + conf->measure_rate * 10*HZ)) - { + + if (time_after(jiffies, priv->out_time10 + conf->measure_rate * 10*HZ)) { conf->out_speed10 = priv->out_bytes10 / (10 * conf->measure_rate); priv->out_bytes10 = 0; priv->out_time10 = jiffies; } - if (TXHEAD(dev).offset && TXTAIL(dev).offset) - { - netif_stop_queue (dev); - return 0; - } - else - netif_start_queue (dev); + if (TXHEAD(dev).offset && TXTAIL(dev).offset) { + netif_stop_queue(dev); + return 0; + } else + netif_start_queue(dev); IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) printk(KERN_WARNING "%s Transmit t %2x:%2x:%2x:%2x:%2x:%2x f %2x:%2x:%2x:%2x:%2x:%2x \n", dev->name, @@ -817,11 +730,11 @@ static int arlan_hw_config(struct net_device *dev) WRITESHMB(arlan->commandByte, ARLAN_COM_INT | ARLAN_COM_CONF); /* do configure */ memset_io(arlan->commandParameter, 0, 0xf); /* 0xf */ memset_io(arlan->commandParameter + 1, 0, 2); - if (conf->writeEEPROM) - { - memset_io(arlan->commandParameter, conf->writeEEPROM, 1); -// conf->writeEEPROM=0; + if (conf->writeEEPROM) { + memset_io(arlan->commandParameter, conf->writeEEPROM, 1); + /* conf->writeEEPROM=0; */ } + if (conf->registrationMode && conf->registrationInterrupts) memset_io(arlan->commandParameter + 3, 1, 1); else @@ -847,47 +760,46 @@ static int arlan_read_card_configuration(struct net_device *dev) ARLAN_DEBUG_ENTRY("arlan_read_card_configuration"); - if (radioNodeId == radioNodeIdUNKNOWN) - { + + if (radioNodeId == radioNodeIdUNKNOWN) { + /* multiline macro, cannot remove braces */ READSHM(conf->radioNodeId, arlan->radioNodeId, u_short); - } - else + } else conf->radioNodeId = radioNodeId; - - if (SID == SIDUNKNOWN) - { + + if (SID == SIDUNKNOWN) { + /* multiline macro, cannot remove braces */ READSHM(conf->SID, arlan->SID, u_int); - } - else conf->SID = SID; - - if (spreadingCode == spreadingCodeUNKNOWN) - { - READSHM(conf->spreadingCode, arlan->spreadingCode, u_char); - } - else + } else + conf->SID = SID; + + if (spreadingCode == spreadingCodeUNKNOWN) { + /* multiline macro, cannot remove braces */ + READSHM(conf->spreadingCode, arlan->spreadingCode, u_char); + } else conf->spreadingCode = spreadingCode; - - if (channelSet == channelSetUNKNOWN) - { + + if (channelSet == channelSetUNKNOWN) { + /* multiline macro, cannot remove braces */ READSHM(conf->channelSet, arlan->channelSet, u_char); - } - else conf->channelSet = channelSet; + } else + conf->channelSet = channelSet; - if (channelNumber == channelNumberUNKNOWN) - { + if (channelNumber == channelNumberUNKNOWN) { + /* multiline macro, cannot remove braces */ READSHM(conf->channelNumber, arlan->channelNumber, u_char); - } - else conf->channelNumber = channelNumber; - + } else + conf->channelNumber = channelNumber; + READSHM(conf->scramblingDisable, arlan->scramblingDisable, u_char); READSHM(conf->txAttenuation, arlan->txAttenuation, u_char); - - if (systemId == systemIdUNKNOWN) - { + + if (systemId == systemIdUNKNOWN) { + /* multiline macro, cannot remove braces */ READSHM(conf->systemId, arlan->systemId, u_int); - } - else conf->systemId = systemId; - + } else + conf->systemId = systemId; + READSHM(conf->maxDatagramSize, arlan->maxDatagramSize, u_short); READSHM(conf->maxFrameSize, arlan->maxFrameSize, u_short); READSHM(conf->maxRetries, arlan->maxRetries, u_char); @@ -895,18 +807,18 @@ static int arlan_read_card_configuration(struct net_device *dev) READSHM(conf->priority, arlan->priority, u_char); READSHM(conf->rootOrRepeater, arlan->rootOrRepeater, u_char); - if (SID == SIDUNKNOWN) - { + if (SID == SIDUNKNOWN) { + /* multiline macro, cannot remove braces */ READSHM(conf->SID, arlan->SID, u_int); - } - else conf->SID = SID; - - if (registrationMode == registrationModeUNKNOWN) - { + } else + conf->SID = SID; + + if (registrationMode == registrationModeUNKNOWN) { + /* multiline macro, cannot remove braces */ READSHM(conf->registrationMode, arlan->registrationMode, u_char); - } - else conf->registrationMode = registrationMode; - + } else + conf->registrationMode = registrationMode; + READSHM(conf->registrationFill, arlan->registrationFill, u_char); READSHM(conf->localTalkAddress, arlan->localTalkAddress, u_char); READSHM(conf->codeFormat, arlan->codeFormat, u_char); @@ -921,16 +833,16 @@ static int arlan_read_card_configuration(struct net_device *dev) READSHM(conf->headerSize, arlan->headerSize, u_short); READSHM(conf->hardwareType, arlan->hardwareType, u_char); READSHM(conf->radioType, arlan->radioModule, u_char); - + if (conf->radioType == 0) conf->radioType = 0xc; WRITESHM(arlan->configStatus, 0xA5, u_char); READSHM(tlx415, arlan->configStatus, u_char); - + if (tlx415 != 0xA5) printk(KERN_INFO "%s tlx415 chip \n", dev->name); - + conf->txClear = 0; conf->txRetries = 1; conf->txRouting = 1; @@ -973,7 +885,7 @@ static int __init arlan_check_fingerprint(unsigned long memaddr) ARLAN_DEBUG_ENTRY("arlan_check_fingerprint"); if (!request_mem_region(paddr, ARLAN_SHMEM_SIZE, "arlan")) { - // printk(KERN_WARNING "arlan: memory region %lx excluded from probing \n",paddr); + /* printk(KERN_WARNING "arlan: memory region %lx excluded from probing \n",paddr); */ return -ENODEV; } @@ -981,12 +893,12 @@ static int __init arlan_check_fingerprint(unsigned long memaddr) tempBuf[30] = 0; /* check for card at this address */ - if (0 != strncmp(tempBuf, probeText, 29)){ - release_mem_region(paddr, ARLAN_SHMEM_SIZE); + if (0 != strncmp(tempBuf, probeText, 29)) { + release_mem_region(paddr, ARLAN_SHMEM_SIZE); return -ENODEV; } -// printk(KERN_INFO "arlan found at 0x%x \n",memaddr); + /* printk(KERN_INFO "arlan found at 0x%x \n",memaddr); */ ARLAN_DEBUG_EXIT("arlan_check_fingerprint"); return 0; @@ -1054,7 +966,7 @@ static int __init arlan_setup_device(struct net_device *dev, int num) dev->tx_queue_len = tx_queue_len; dev->netdev_ops = &arlan_netdev_ops; dev->watchdog_timeo = 3*HZ; - + ap->irq_test_done = 0; ap->Conf = &arlan_conf[num]; @@ -1065,7 +977,7 @@ static int __init arlan_setup_device(struct net_device *dev, int num) err = register_netdev(dev); if (err) { - release_mem_region(virt_to_phys((void *) dev->mem_start), + release_mem_region(virt_to_phys((void *) dev->mem_start), ARLAN_SHMEM_SIZE); free_netdev(dev); return err; @@ -1075,7 +987,7 @@ static int __init arlan_setup_device(struct net_device *dev, int num) return 0; } -static int __init arlan_probe_here(struct net_device *dev, +static int __init arlan_probe_here(struct net_device *dev, unsigned long memaddr) { struct arlan_private *ap = netdev_priv(dev); @@ -1085,15 +997,15 @@ static int __init arlan_probe_here(struct net_device *dev, if (arlan_check_fingerprint(memaddr)) return -ENODEV; - printk(KERN_NOTICE "%s: Arlan found at %llx, \n ", dev->name, - (u64) virt_to_phys((void*)memaddr)); + printk(KERN_NOTICE "%s: Arlan found at %llx, \n ", dev->name, + (u64) virt_to_phys((void *)memaddr)); ap->card = (void *) memaddr; dev->mem_start = memaddr; dev->mem_end = memaddr + ARLAN_SHMEM_SIZE-1; - if (dev->irq < 2) - { + if (dev->irq < 2) { + /* multiline macro, cannot remove braces */ READSHM(dev->irq, ap->card->irqLevel, u_char); } else if (dev->irq == 2) dev->irq = 9; @@ -1114,14 +1026,12 @@ static int arlan_open(struct net_device *dev) ARLAN_DEBUG_ENTRY("arlan_open"); ret = request_irq(dev->irq, &arlan_interrupt, 0, dev->name, dev); - if (ret) - { + if (ret) { printk(KERN_ERR "%s: unable to get IRQ %d .\n", dev->name, dev->irq); return ret; } - priv->bad = 0; priv->lastReset = 0; priv->reset = 0; @@ -1131,14 +1041,14 @@ static int arlan_open(struct net_device *dev) priv->interrupt_processing_active = 0; spin_lock_init(&priv->lock); - netif_start_queue (dev); + netif_start_queue(dev); priv->registrationLostCount = 0; priv->registrationLastSeen = jiffies; priv->txLast = 0; priv->tx_command_given = 0; priv->rx_command_given = 0; - + priv->reRegisterExp = 1; priv->tx_last_sent = jiffies - 1; priv->tx_last_cleared = jiffies; @@ -1159,13 +1069,13 @@ static int arlan_open(struct net_device *dev) } -static void arlan_tx_timeout (struct net_device *dev) +static void arlan_tx_timeout(struct net_device *dev) { printk(KERN_ERR "%s: arlan transmit timed out, kernel decided\n", dev->name); /* Try to restart the adaptor. */ arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); - // dev->trans_start = jiffies; - // netif_start_queue (dev); + /* dev->trans_start = jiffies; */ + /* netif_start_queue (dev); */ } @@ -1175,13 +1085,13 @@ static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev) unsigned char *buf; ARLAN_DEBUG_ENTRY("arlan_tx"); - + length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; buf = skb->data; if (length + 0x12 > 0x800) { printk(KERN_ERR "TX RING overflow \n"); - netif_stop_queue (dev); + netif_stop_queue(dev); } if (arlan_hw_tx(dev, buf, length) == -1) @@ -1197,7 +1107,7 @@ static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev) bad_end: arlan_process_interrupt(dev); - netif_stop_queue (dev); + netif_stop_queue(dev); ARLAN_DEBUG_EXIT("arlan_tx"); return NETDEV_TX_BUSY; } @@ -1229,9 +1139,8 @@ static inline void arlan_queue_retransmit(struct net_device *dev) ARLAN_DEBUG_ENTRY("arlan_queue_retransmit"); if (DoNotWaitReTransmitCrap(dev)) - { - arlan_drop_tx(dev); - } else + arlan_drop_tx(dev); + else priv->ReTransmitRequested++; ARLAN_DEBUG_EXIT("arlan_queue_retransmit"); @@ -1245,14 +1154,11 @@ static inline void RetryOrFail(struct net_device *dev) if (priv->retransmissions > priv->Conf->retries || DoNotReTransmitCrap(dev)) - { arlan_drop_tx(dev); - } else if (priv->bad <= priv->Conf->fastReTransCount) - { arlan_retransmit_now(dev); - } - else arlan_queue_retransmit(dev); + else + arlan_queue_retransmit(dev); ARLAN_DEBUG_EXIT("RetryOrFail"); } @@ -1266,131 +1172,126 @@ static void arlan_tx_done_interrupt(struct net_device *dev, int status) priv->tx_last_cleared = jiffies; priv->tx_command_given = 0; - switch (status) + switch (status) { + case 1: { - case 1: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit OK\n"); - dev->stats.tx_packets++; - priv->bad = 0; - priv->reset = 0; - priv->retransmissions = 0; - if (priv->Conf->tx_delay_ms) - { - priv->tx_done_delayed = jiffies + (priv->Conf->tx_delay_ms * HZ) / 1000 + 1; - } - else - { - TXLAST(dev).offset = 0; - if (priv->txLast) - priv->txLast = 0; - else if (TXTAIL(dev).offset) - priv->txLast = 1; - if (TXLAST(dev).offset) - { - arlan_retransmit_now(dev); - dev->trans_start = jiffies; - } - if (!TXHEAD(dev).offset || !TXTAIL(dev).offset) - { - netif_wake_queue (dev); - } + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) + printk("arlan intr: transmit OK\n"); + dev->stats.tx_packets++; + priv->bad = 0; + priv->reset = 0; + priv->retransmissions = 0; + if (priv->Conf->tx_delay_ms) + priv->tx_done_delayed = jiffies + (priv->Conf->tx_delay_ms * HZ) / 1000 + 1; + else { + TXLAST(dev).offset = 0; + if (priv->txLast) + priv->txLast = 0; + else if (TXTAIL(dev).offset) + priv->txLast = 1; + + if (TXLAST(dev).offset) { + arlan_retransmit_now(dev); + dev->trans_start = jiffies; } - } - break; - - case 2: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit timed out\n"); - priv->bad += 1; - //arlan_queue_retransmit(dev); - RetryOrFail(dev); - } - break; - case 3: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit max retries\n"); - priv->bad += 1; - priv->reset = 0; - //arlan_queue_retransmit(dev); - RetryOrFail(dev); + if (!TXHEAD(dev).offset || !TXTAIL(dev).offset) + netif_wake_queue(dev); } - break; - - case 4: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit aborted\n"); - priv->bad += 1; - arlan_queue_retransmit(dev); - //RetryOrFail(dev); - } - break; + } + break; - case 5: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit not registered\n"); - priv->bad += 1; - //debug=101; - arlan_queue_retransmit(dev); - } - break; + case 2: + { + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) + printk("arlan intr: transmit timed out\n"); + priv->bad += 1; + /* arlan_queue_retransmit(dev); */ + RetryOrFail(dev); + } + break; - case 6: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit destination full\n"); - priv->bad += 1; - priv->reset = 0; - //arlan_drop_tx(dev); - arlan_queue_retransmit(dev); - } - break; + case 3: + { + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) + printk("arlan intr: transmit max retries\n"); + priv->bad += 1; + priv->reset = 0; + /* arlan_queue_retransmit(dev); */ + RetryOrFail(dev); + } + break; - case 7: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit unknown ack\n"); - priv->bad += 1; - priv->reset = 0; - arlan_queue_retransmit(dev); - } - break; - - case 8: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit dest mail box full\n"); - priv->bad += 1; - priv->reset = 0; - //arlan_drop_tx(dev); - arlan_queue_retransmit(dev); - } - break; + case 4: + { + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) + printk("arlan intr: transmit aborted\n"); + priv->bad += 1; + arlan_queue_retransmit(dev); + /* RetryOrFail(dev); */ + } + break; - case 9: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit root dest not reg.\n"); - priv->bad += 1; - priv->reset = 1; - //arlan_drop_tx(dev); - arlan_queue_retransmit(dev); - } - break; + case 5: + { + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) + printk("arlan intr: transmit not registered\n"); + priv->bad += 1; + /* debug=101; */ + arlan_queue_retransmit(dev); + } + break; - default: - { - printk(KERN_ERR "arlan intr: transmit status unknown\n"); - priv->bad += 1; - priv->reset = 1; - arlan_drop_tx(dev); - } + case 6: + { + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) + printk("arlan intr: transmit destination full\n"); + priv->bad += 1; + priv->reset = 0; + /* arlan_drop_tx(dev); */ + arlan_queue_retransmit(dev); + } + break; + + case 7: + { + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) + printk("arlan intr: transmit unknown ack\n"); + priv->bad += 1; + priv->reset = 0; + arlan_queue_retransmit(dev); + } + break; + + case 8: + { + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) + printk("arlan intr: transmit dest mail box full\n"); + priv->bad += 1; + priv->reset = 0; + /* arlan_drop_tx(dev); */ + arlan_queue_retransmit(dev); + } + break; + + case 9: + { + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) + printk("arlan intr: transmit root dest not reg.\n"); + priv->bad += 1; + priv->reset = 1; + /* arlan_drop_tx(dev); */ + arlan_queue_retransmit(dev); + } + break; + + default: + { + printk(KERN_ERR "arlan intr: transmit status unknown\n"); + priv->bad += 1; + priv->reset = 1; + arlan_drop_tx(dev); + } } ARLAN_DEBUG_EXIT("arlan_tx_done_interrupt"); @@ -1408,134 +1309,126 @@ static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short ARLAN_DEBUG_ENTRY("arlan_rx_interrupt"); - // by spec, not WRITESHMB(arlan->rxStatus,0x00); - // prohibited here arlan_command(dev, ARLAN_COMMAND_RX); + /* by spec, not WRITESHMB(arlan->rxStatus,0x00); */ + /* prohibited here arlan_command(dev, ARLAN_COMMAND_RX); */ - if (pkt_len < 10 || pkt_len > 2048) - { + if (pkt_len < 10 || pkt_len > 2048) { printk(KERN_WARNING "%s: got too short or long packet, len %d \n", dev->name, pkt_len); return; } - if (rxOffset + pkt_len > 0x2000) - { + if (rxOffset + pkt_len > 0x2000) { printk("%s: got too long packet, len %d offset %x\n", dev->name, pkt_len, rxOffset); return; } + priv->in_bytes += pkt_len; priv->in_bytes10 += pkt_len; if (conf->measure_rate < 1) conf->measure_rate = 1; - if (time_after(jiffies, priv->in_time + conf->measure_rate * HZ)) - { + if (time_after(jiffies, priv->in_time + conf->measure_rate * HZ)) { conf->in_speed = priv->in_bytes / conf->measure_rate; priv->in_bytes = 0; priv->in_time = jiffies; } - if (time_after(jiffies, priv->in_time10 + conf->measure_rate * 10*HZ)) - { + if (time_after(jiffies, priv->in_time10 + conf->measure_rate * 10*HZ)) { conf->in_speed10 = priv->in_bytes10 / (10 * conf->measure_rate); priv->in_bytes10 = 0; priv->in_time10 = jiffies; } DEBUGSHM(1, "arlan rcv pkt rxStatus= %d ", arlan->rxStatus, u_char); - switch (rxStatus) + switch (rxStatus) { + case 1: + case 2: + case 3: { - case 1: - case 2: - case 3: - { - /* Malloc up new buffer. */ - struct sk_buff *skb; + /* Malloc up new buffer. */ + struct sk_buff *skb; - DEBUGSHM(50, "arlan recv pkt offs=%d\n", arlan->rxOffset, u_short); - DEBUGSHM(1, "arlan rxFrmType = %d \n", arlan->rxFrmType, u_char); - DEBUGSHM(1, KERN_INFO "arlan rx scrambled = %d \n", arlan->scrambled, u_char); + DEBUGSHM(50, "arlan recv pkt offs=%d\n", arlan->rxOffset, u_short); + DEBUGSHM(1, "arlan rxFrmType = %d \n", arlan->rxFrmType, u_char); + DEBUGSHM(1, KERN_INFO "arlan rx scrambled = %d \n", arlan->scrambled, u_char); - /* here we do multicast filtering to avoid slow 8-bit memcopy */ + /* here we do multicast filtering to avoid slow 8-bit memcopy */ #ifdef ARLAN_MULTICAST - if (!(dev->flags & IFF_ALLMULTI) && - !(dev->flags & IFF_PROMISC) && - !netdev_mc_empty(dev)) - { - char hw_dst_addr[6]; - struct dev_mc_list *dmi; - int i; - - memcpy_fromio(hw_dst_addr, arlan->ultimateDestAddress, 6); - if (hw_dst_addr[0] == 0x01) - { - if (mdebug) - if (hw_dst_addr[1] == 0x00) - printk(KERN_ERR "%s mcast 0x0100 \n", dev->name); - else if (hw_dst_addr[1] == 0x40) - printk(KERN_ERR "%s m/bcast 0x0140 \n", dev->name); - netdev_for_each_mc_entry(dmi, dev) { - if (arlan_debug & ARLAN_DEBUG_HEADER_DUMP) - printk(KERN_ERR "%s mcl %pM\n", - dev->name, dmi->dmi_addr); - for (i = 0; i < 6; i++) - if (dmi->dmi_addr[i] != hw_dst_addr[i]) - break; - if (i == 6) + if (!(dev->flags & IFF_ALLMULTI) && + !(dev->flags & IFF_PROMISC) && + !netdev_mc_empty(dev)) { + char hw_dst_addr[6]; + struct dev_mc_list *dmi; + int i; + + memcpy_fromio(hw_dst_addr, arlan->ultimateDestAddress, 6); + if (hw_dst_addr[0] == 0x01) { + if (mdebug) + if (hw_dst_addr[1] == 0x00) + printk(KERN_ERR "%s mcast 0x0100 \n", dev->name); + else if (hw_dst_addr[1] == 0x40) + printk(KERN_ERR "%s m/bcast 0x0140 \n", dev->name); + netdev_for_each_mc_entry(dmi, dev) { + if (arlan_debug & ARLAN_DEBUG_HEADER_DUMP) + printk(KERN_ERR "%s mcl %pM\n", + dev->name, dmi->dmi_addr); + for (i = 0; i < 6; i++) + if (dmi->dmi_addr[i] != hw_dst_addr[i]) break; - } - /* we reach here if multicast filtering is on and packet - * is multicast and not for receive */ - goto end_of_interrupt; + if (i == 6) + break; } + /* we reach here if multicast filtering is on and packet */ + /* is multicast and not for receive */ + goto end_of_interrupt; } -#endif // ARLAN_MULTICAST - /* multicast filtering ends here */ - pkt_len += ARLAN_FAKE_HDR_LEN; - - skb = dev_alloc_skb(pkt_len + 4); - if (skb == NULL) - { - printk(KERN_ERR "%s: Memory squeeze, dropping packet.\n", dev->name); - dev->stats.rx_dropped++; - break; - } - skb_reserve(skb, 2); - skbtmp = skb_put(skb, pkt_len); + } +#endif /* ARLAN_MULTICAST */ + /* multicast filtering ends here */ + pkt_len += ARLAN_FAKE_HDR_LEN; + + skb = dev_alloc_skb(pkt_len + 4); + if (skb == NULL) { + printk(KERN_ERR "%s: Memory squeeze, dropping packet.\n", dev->name); + dev->stats.rx_dropped++; + break; + } + skb_reserve(skb, 2); + skbtmp = skb_put(skb, pkt_len); - memcpy_fromio(skbtmp + ARLAN_FAKE_HDR_LEN, ((char __iomem *) arlan) + rxOffset, pkt_len - ARLAN_FAKE_HDR_LEN); - memcpy_fromio(skbtmp, arlan->ultimateDestAddress, 6); - memcpy_fromio(skbtmp + 6, arlan->rxSrc, 6); - WRITESHMB(arlan->rxStatus, 0x00); - arlan_command(dev, ARLAN_COMMAND_RX); + memcpy_fromio(skbtmp + ARLAN_FAKE_HDR_LEN, ((char __iomem *) arlan) + rxOffset, pkt_len - ARLAN_FAKE_HDR_LEN); + memcpy_fromio(skbtmp, arlan->ultimateDestAddress, 6); + memcpy_fromio(skbtmp + 6, arlan->rxSrc, 6); + WRITESHMB(arlan->rxStatus, 0x00); + arlan_command(dev, ARLAN_COMMAND_RX); - IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) - { - char immedDestAddress[6]; - char immedSrcAddress[6]; - memcpy_fromio(immedDestAddress, arlan->immedDestAddress, 6); - memcpy_fromio(immedSrcAddress, arlan->immedSrcAddress, 6); - - printk(KERN_WARNING "%s t %pM f %pM imd %pM ims %pM\n", - dev->name, skbtmp, - &skbtmp[6], - immedDestAddress, - immedSrcAddress); - } - skb->protocol = eth_type_trans(skb, dev); - IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) - if (skb->protocol != 0x608 && skb->protocol != 0x8) - { - for (i = 0; i <= 22; i++) - printk("%02x:", (u_char) skbtmp[i + 12]); - printk(KERN_ERR "\n"); - printk(KERN_WARNING "arlan kernel pkt type trans %x \n", skb->protocol); - } - netif_rx(skb); - dev->stats.rx_packets++; - dev->stats.rx_bytes += pkt_len; + IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) + { + char immedDestAddress[6]; + char immedSrcAddress[6]; + memcpy_fromio(immedDestAddress, arlan->immedDestAddress, 6); + memcpy_fromio(immedSrcAddress, arlan->immedSrcAddress, 6); + + printk(KERN_WARNING "%s t %pM f %pM imd %pM ims %pM\n", + dev->name, skbtmp, + &skbtmp[6], + immedDestAddress, + immedSrcAddress); } + skb->protocol = eth_type_trans(skb, dev); + IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) + if (skb->protocol != 0x608 && skb->protocol != 0x8) { + for (i = 0; i <= 22; i++) + printk("%02x:", (u_char) skbtmp[i + 12]); + printk(KERN_ERR "\n"); + printk(KERN_WARNING "arlan kernel pkt type trans %x \n", skb->protocol); + } + netif_rx(skb); + dev->stats.rx_packets++; + dev->stats.rx_bytes += pkt_len; + } + break; + + default: + printk(KERN_ERR "arlan intr: received unknown status\n"); + dev->stats.rx_crc_errors++; break; - - default: - printk(KERN_ERR "arlan intr: received unknown status\n"); - dev->stats.rx_crc_errors++; - break; } ARLAN_DEBUG_EXIT("arlan_rx_interrupt"); } @@ -1552,30 +1445,26 @@ static void arlan_process_interrupt(struct net_device *dev) ARLAN_DEBUG_ENTRY("arlan_process_interrupt"); - if (test_and_set_bit(0, (void *) &priv->interrupt_processing_active)) - { + if (test_and_set_bit(0, (void *) &priv->interrupt_processing_active)) { if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) printk(KERN_ERR "interrupt chain reentering \n"); goto end_int_process; } while ((rxStatus || txStatus || priv->interrupt_ack_requested) - && (interrupt_count < 5)) - { + && (interrupt_count < 5)) { if (rxStatus) priv->last_rx_int_ack_time = jiffies; arlan_command(dev, ARLAN_COMMAND_INT_ACK); arlan_command(dev, ARLAN_COMMAND_INT_ENABLE); - + IFDEBUG(ARLAN_DEBUG_INTERRUPT) printk(KERN_ERR "%s: got IRQ rx %x tx %x comm %x rxOff %x rxLen %x \n", dev->name, rxStatus, txStatus, READSHMB(arlan->commandByte), rxOffset, pkt_len); - if (rxStatus == 0 && txStatus == 0) - { - if (priv->irq_test_done) - { + if (rxStatus == 0 && txStatus == 0) { + if (priv->irq_test_done) { if (!registrationBad(dev)) IFDEBUG(ARLAN_DEBUG_INTERRUPT) printk(KERN_ERR "%s unknown interrupt(nop? regLost ?) reason tx %d rx %d ", dev->name, txStatus, rxStatus); @@ -1587,35 +1476,35 @@ static void arlan_process_interrupt(struct net_device *dev) priv->interrupt_ack_requested = 0; goto ends; } - if (txStatus != 0) - { + + if (txStatus != 0) { WRITESHMB(arlan->txStatus, 0x00); arlan_tx_done_interrupt(dev, txStatus); goto ends; } - if (rxStatus == 1 || rxStatus == 2) - { /* a packet waiting */ + + if (rxStatus == 1 || rxStatus == 2) { + /* a packet waiting */ arlan_rx_interrupt(dev, rxStatus, rxOffset, pkt_len); goto ends; } - if (rxStatus > 2 && rxStatus < 0xff) - { + + if (rxStatus > 2 && rxStatus < 0xff) { WRITESHMB(arlan->rxStatus, 0x00); printk(KERN_ERR "%s unknown rxStatus reason tx %d rx %d ", dev->name, txStatus, rxStatus); goto ends; } - if (rxStatus == 0xff) - { + + if (rxStatus == 0xff) { WRITESHMB(arlan->rxStatus, 0x00); arlan_command(dev, ARLAN_COMMAND_RX); if (registrationBad(dev)) netif_device_detach(dev); - if (!registrationBad(dev)) - { + if (!registrationBad(dev)) { priv->registrationLastSeen = jiffies; if (!netif_queue_stopped(dev) && !priv->under_reset && !priv->under_config) - netif_wake_queue (dev); + netif_wake_queue(dev); } goto ends; } @@ -1657,7 +1546,7 @@ static irqreturn_t arlan_interrupt(int irq, void *dev_id) priv->interrupt_ack_requested++; arlan_process_interrupt(dev); - + priv->irq_test_done = 1; ARLAN_DEBUG_EXIT("arlan_interrupt"); @@ -1687,7 +1576,7 @@ static int arlan_close(struct net_device *dev) } #ifdef ARLAN_DEBUGGING -static long alignLong(volatile u_char * ptr) +static long alignLong(volatile u_char *ptr) { long ret; memcpy_fromio(&ret, (void *) ptr, 4); @@ -1740,16 +1629,13 @@ static void arlan_set_multicast(struct net_device *dev) ARLAN_DEBUG_ENTRY("arlan_set_multicast"); - if (dev->flags & IFF_PROMISC) - { + if (dev->flags & IFF_PROMISC) { unsigned char recMode; READSHM(recMode, arlan->receiveMode, u_char); conf->receiveMode = (ARLAN_RCV_PROMISC | ARLAN_RCV_CONTROL); if (conf->receiveMode != recMode) board_conf_needed = 1; - } - else - { + } else { /* turn off promiscuous mode */ unsigned char recMode; READSHM(recMode, arlan->receiveMode, u_char); @@ -1757,6 +1643,7 @@ static void arlan_set_multicast(struct net_device *dev) if (conf->receiveMode != recMode) board_conf_needed = 1; } + if (board_conf_needed) arlan_command(dev, ARLAN_COMMAND_CONF); @@ -1775,7 +1662,7 @@ struct net_device * __init arlan_probe(int unit) if (arlans_found == MAX_ARLANS) return ERR_PTR(-ENODEV); - /* + /* * Reserve space for local data and a copy of the shared memory * that is used by the /proc interface. */ @@ -1787,23 +1674,20 @@ struct net_device * __init arlan_probe(int unit) if (unit >= 0) { sprintf(dev->name, "eth%d", unit); netdev_boot_setup_check(dev); - + if (dev->mem_start) { if (arlan_probe_here(dev, dev->mem_start) == 0) goto found; goto not_found; } - } - for (m = (int)phys_to_virt(lastFoundAt) + ARLAN_SHMEM_SIZE; - m <= (int)phys_to_virt(0xDE000); - m += ARLAN_SHMEM_SIZE) - { - if (arlan_probe_here(dev, m) == 0) - { - lastFoundAt = (int)virt_to_phys((void*)m); + for (m = (int)phys_to_virt(lastFoundAt) + ARLAN_SHMEM_SIZE; + m <= (int)phys_to_virt(0xDE000); + m += ARLAN_SHMEM_SIZE) { + if (arlan_probe_here(dev, m) == 0) { + lastFoundAt = (int)virt_to_phys((void *)m); goto found; } } @@ -1825,7 +1709,7 @@ struct net_device * __init arlan_probe(int unit) return dev; } -#ifdef MODULE +#ifdef MODULE int __init init_module(void) { int i = 0; @@ -1838,7 +1722,7 @@ int __init init_module(void) for (i = 0; i < MAX_ARLANS; i++) { struct net_device *dev = arlan_probe(i); - if (IS_ERR(dev)) + if (IS_ERR(dev)) return PTR_ERR(dev); } init_arlan_proc(); @@ -1860,14 +1744,13 @@ void __exit cleanup_module(void) cleanup_arlan_proc(); - for (i = 0; i < MAX_ARLANS; i++) - { + for (i = 0; i < MAX_ARLANS; i++) { dev = arlan_device[i]; if (dev) { - arlan_command(dev, ARLAN_COMMAND_POWERDOWN ); + arlan_command(dev, ARLAN_COMMAND_POWERDOWN); unregister_netdev(dev); - release_mem_region(virt_to_phys((void *) dev->mem_start), + release_mem_region(virt_to_phys((void *) dev->mem_start), ARLAN_SHMEM_SIZE); free_netdev(dev); arlan_device[i] = NULL; -- cgit v0.10.2 From b4c84c298bd3a2383dadceb64d2b5f23dc2adc61 Mon Sep 17 00:00:00 2001 From: Michael Tate Date: Sat, 6 Mar 2010 15:03:57 +0400 Subject: staging: et131x: Fix brace coding style issues. This revised patch fixes 2 brace coding style issues reported by checkpatch.pl One warning line > 80 chars not resolved on maintainers advice. Signed-off-by: Michael Tate Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/et131x/et131x_isr.c b/drivers/staging/et131x/et131x_isr.c index cb7f677..36f68fe 100644 --- a/drivers/staging/et131x/et131x_isr.c +++ b/drivers/staging/et131x/et131x_isr.c @@ -253,14 +253,12 @@ void et131x_isr_handler(struct work_struct *work) * exit. */ /* Handle all the completed Transmit interrupts */ - if (status & ET_INTR_TXDMA_ISR) { + if (status & ET_INTR_TXDMA_ISR) et131x_handle_send_interrupt(etdev); - } /* Handle all the completed Receives interrupts */ - if (status & ET_INTR_RXDMA_XFR_DONE) { + if (status & ET_INTR_RXDMA_XFR_DONE) et131x_handle_recv_interrupt(etdev); - } status &= 0xffffffd7; -- cgit v0.10.2 From e3133b282af36665593b2802eaa591538ebe5f11 Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Sat, 6 Mar 2010 20:44:33 +0100 Subject: staging: rtl8192su: move to EEPROM_93CX this is basically a port of Larry Fingers Patch for rtl8187se to rtl8192su. also removed some dead code. plus cosmetics. Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/Kconfig b/drivers/staging/rtl8192su/Kconfig index b72a962..b422ea1 100644 --- a/drivers/staging/rtl8192su/Kconfig +++ b/drivers/staging/rtl8192su/Kconfig @@ -3,5 +3,6 @@ config RTL8192SU depends on PCI && WLAN && USB select WIRELESS_EXT select WEXT_PRIV + select EEPROM_93CX6 default N ---help--- diff --git a/drivers/staging/rtl8192su/Makefile b/drivers/staging/rtl8192su/Makefile index c8b4332..9374a01 100644 --- a/drivers/staging/rtl8192su/Makefile +++ b/drivers/staging/rtl8192su/Makefile @@ -9,7 +9,6 @@ EXTRA_CFLAGS += -DTHOMAS_BEACON #EXTRA_CFLAGS += -DMUTIPLE_BULK_OUT r8192s_usb-objs := \ - r8180_93cx6.o \ r8192U_wx.o \ r8192S_phy.o \ r8192S_rtl6052.o \ diff --git a/drivers/staging/rtl8192su/r8180_93cx6.c b/drivers/staging/rtl8192su/r8180_93cx6.c deleted file mode 100644 index 8878cfe..0000000 --- a/drivers/staging/rtl8192su/r8180_93cx6.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - This files contains card eeprom (93c46 or 93c56) programming routines, - memory is addressed by 16 bits words. - - This is part of rtl8180 OpenSource driver. - Copyright (C) Andrea Merello 2004 - Released under the terms of GPL (General Public Licence) - - Parts of this driver are based on the GPL part of the - official realtek driver. - - Parts of this driver are based on the rtl8180 driver skeleton - from Patric Schenke & Andres Salomon. - - Parts of this driver are based on the Intel Pro Wireless 2100 GPL driver. - - We want to tanks the Authors of those projects and the Ndiswrapper - project Authors. -*/ - -#include "r8180_93cx6.h" - -void eprom_cs(struct net_device *dev, short bit) -{ - if(bit) - write_nic_byte_E(dev, EPROM_CMD, - (1<epromtype==EPROM_93c56){ - addr_str[7]=addr & 1; - addr_str[6]=addr & (1<<1); - addr_str[5]=addr & (1<<2); - addr_str[4]=addr & (1<<3); - addr_str[3]=addr & (1<<4); - addr_str[2]=addr & (1<<5); - addr_str[1]=addr & (1<<6); - addr_str[0]=addr & (1<<7); - addr_len=8; - }else{ - addr_str[5]=addr & 1; - addr_str[4]=addr & (1<<1); - addr_str[3]=addr & (1<<2); - addr_str[2]=addr & (1<<3); - addr_str[1]=addr & (1<<4); - addr_str[0]=addr & (1<<5); - addr_len=6; - } - eprom_cs(dev, 1); - eprom_ck_cycle(dev); - eprom_send_bits_string(dev, read_cmd, 3); - eprom_send_bits_string(dev, addr_str, addr_len); - - //keep chip pin D to low state while reading. - //I'm unsure if it is necessary, but anyway shouldn't hurt - eprom_w(dev, 0); - - for(i=0;i<16;i++){ - //eeprom needs a clk cycle between writing opcode&adr - //and reading data. (eeprom outs a dummy 0) - eprom_ck_cycle(dev); - ret |= (eprom_r(dev)<<(15-i)); - } - - eprom_cs(dev, 0); - eprom_ck_cycle(dev); - - //disable EPROM programming - write_nic_byte_E(dev, EPROM_CMD, - (EPROM_CMD_NORMAL< - Released under the terms of GPL (General Public Licence) - - Parts of this driver are based on the GPL part of the official realtek driver - Parts of this driver are based on the rtl8180 driver skeleton from Patric Schenke & Andres Salomon - Parts of this driver are based on the Intel Pro Wireless 2100 GPL driver - - We want to tanks the Authors of such projects and the Ndiswrapper project Authors. -*/ - -/*This files contains card eeprom (93c46 or 93c56) programming routines*/ -/*memory is addressed by WORDS*/ - -#include "r8192U.h" -#include "r8192S_hw.h" - -#define EPROM_DELAY 10 - -#define EPROM_ANAPARAM_ADDRLWORD 0xd -#define EPROM_ANAPARAM_ADDRHWORD 0xe - -#define EPROM_RFCHIPID 0x6 -#define EPROM_TXPW_BASE 0x05 -#define EPROM_RFCHIPID_RTL8225U 5 -#define EPROM_RF_PARAM 0x4 -#define EPROM_CONFIG2 0xc - -#define EPROM_VERSION 0x1E -#define MAC_ADR 0x7 - -#define CIS 0x18 - -#define EPROM_TXPW0 0x16 -#define EPROM_TXPW2 0x1b -#define EPROM_TXPW1 0x3d - - -u32 eprom_read(struct net_device *dev,u32 addr); //reads a 16 bits word diff --git a/drivers/staging/rtl8192su/r8192U.h b/drivers/staging/rtl8192su/r8192U.h index ba87623..8306252 100644 --- a/drivers/staging/rtl8192su/r8192U.h +++ b/drivers/staging/rtl8192su/r8192U.h @@ -44,6 +44,12 @@ #include "r8192S_firmware.h" +/* EEPROM defs for use with linux/eeprom_93cx6.h */ +#define RTL819X_EEPROM_CMD_READ (1 << 0) +#define RTL819X_EEPROM_CMD_WRITE (1 << 1) +#define RTL819X_EEPROM_CMD_CK (1 << 2) +#define RTL819X_EEPROM_CMD_CS (1 << 3) + //#define RTL8192U #define RTL819xU_MODULE_NAME "rtl819xU" //added for HW security, john.0629 diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index e16256f..791cd51 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -26,6 +26,7 @@ #include #include +#include #undef LOOP_TEST #undef DUMP_RX @@ -54,7 +55,6 @@ #include #include "r8192U.h" -#include "r8180_93cx6.h" /* Card EEPROM */ #include "r8192U_wx.h" #include "r8192S_rtl8225.h" @@ -214,6 +214,36 @@ static CHANNEL_LIST ChannelPlan[] = { {{1,2,3,4,5,6,7,8,9,10,11,12,13,14},14} //For Global Domain. 1-11:active scan, 12-14 passive scan. //+YJ, 080626 }; +static void rtl819x_eeprom_register_read(struct eeprom_93cx6 *eeprom) +{ + struct net_device *dev = eeprom->data; + u8 reg = read_nic_byte(dev, EPROM_CMD); + + eeprom->reg_data_in = reg & RTL819X_EEPROM_CMD_WRITE; + eeprom->reg_data_out = reg & RTL819X_EEPROM_CMD_READ; + eeprom->reg_data_clock = reg & RTL819X_EEPROM_CMD_CK; + eeprom->reg_chip_select = reg & RTL819X_EEPROM_CMD_CS; +} + +static void rtl819x_eeprom_register_write(struct eeprom_93cx6 *eeprom) +{ + struct net_device *dev = eeprom->data; + u8 reg = 2 << 6; + + if (eeprom->reg_data_in) + reg |= RTL819X_EEPROM_CMD_WRITE; + if (eeprom->reg_data_out) + reg |= RTL819X_EEPROM_CMD_READ; + if (eeprom->reg_data_clock) + reg |= RTL819X_EEPROM_CMD_CK; + if (eeprom->reg_chip_select) + reg |= RTL819X_EEPROM_CMD_CS; + + write_nic_byte(dev, EPROM_CMD, reg); + read_nic_byte(dev, EPROM_CMD); + udelay(10); +} + static void rtl819x_set_channel_map(u8 channel_plan, struct r8192_priv* priv) { int i, max_chan=-1, min_chan=-1; @@ -1152,15 +1182,6 @@ void tx_timeout(struct net_device *dev) //DMESG("TXTIMEOUT"); } - -/* this is only for debug */ -void dump_eprom(struct net_device *dev) -{ - int i; - for(i=0; i<63; i++) - RT_TRACE(COMP_EPROM, "EEPROM addr %x : %x", i, eprom_read(dev,i)); -} - /* this is only for debug */ void rtl8192_dump_reg(struct net_device *dev) { @@ -3531,26 +3552,32 @@ rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(struct net_device* dev) // // Created by Roger, 2008.10.21. // -void -rtl8192SU_ReadAdapterInfo8192SUsb(struct net_device* dev) +void rtl8192SU_ReadAdapterInfo8192SUsb(struct net_device* dev) { - struct r8192_priv *priv = ieee80211_priv(dev); - u16 i,usValue; - u8 tmpU1b, tempval; - u16 EEPROMId; - u8 hwinfo[HWSET_MAX_SIZE_92S]; - u8 rf_path, index; // For EEPROM/EFUSE After V0.6_1117 - + struct r8192_priv *priv = ieee80211_priv(dev); + u16 i; + u8 tmpU1b, tempval; + u16 EEPROMId; + u8 hwinfo[HWSET_MAX_SIZE_92S]; + u8 rf_path, index; // For EEPROM/EFUSE After V0.6_1117 + struct eeprom_93cx6 eeprom; + u16 eeprom_val; + + eeprom.data = dev; + eeprom.register_read = rtl819x_eeprom_register_read; + eeprom.register_write = rtl819x_eeprom_register_write; + if (priv->epromtype == EPROM_93c46) + eeprom.width = PCI_EEPROM_WIDTH_93C46; + else + eeprom.width = PCI_EEPROM_WIDTH_93C56; RT_TRACE(COMP_INIT, "====> ReadAdapterInfo8192SUsb\n"); - // - // The following operation are prevent Efuse leakage by turn on 2.5V. - // 2008.11.25. - // + /* + * The following operation are prevent Efuse leakage by turn on 2.5V.. + */ tmpU1b = read_nic_byte(dev, EFUSE_TEST+3); write_nic_byte(dev, EFUSE_TEST+3, tmpU1b|0x80); - //PlatformStallExecution(1000); mdelay(10); write_nic_byte(dev, EFUSE_TEST+3, (tmpU1b&(~BIT7))); @@ -3558,21 +3585,20 @@ rtl8192SU_ReadAdapterInfo8192SUsb(struct net_device* dev) priv->card_8192_version = (VERSION_8192S)((read_nic_dword(dev, PMC_FSM)>>16)&0xF); RT_TRACE(COMP_INIT, "Chip Version ID: 0x%2x\n", priv->card_8192_version); - switch(priv->card_8192_version) - { - case 0: - RT_TRACE(COMP_INIT, "Chip Version ID: VERSION_8192S_ACUT.\n"); - break; - case 1: - RT_TRACE(COMP_INIT, "Chip Version ID: VERSION_8192S_BCUT.\n"); - break; - case 2: - RT_TRACE(COMP_INIT, "Chip Version ID: VERSION_8192S_CCUT.\n"); - break; - default: - RT_TRACE(COMP_INIT, "Unknown Chip Version!!\n"); - priv->card_8192_version = VERSION_8192S_BCUT; - break; + switch (priv->card_8192_version) { + case 0: + RT_TRACE(COMP_INIT, "Chip Version ID: VERSION_8192S_ACUT.\n"); + break; + case 1: + RT_TRACE(COMP_INIT, "Chip Version ID: VERSION_8192S_BCUT.\n"); + break; + case 2: + RT_TRACE(COMP_INIT, "Chip Version ID: VERSION_8192S_CCUT.\n"); + break; + default: + RT_TRACE(COMP_INIT, "Unknown Chip Version!!\n"); + priv->card_8192_version = VERSION_8192S_BCUT; + break; } //if (IS_BOOT_FROM_EEPROM(Adapter)) @@ -3585,8 +3611,8 @@ rtl8192SU_ReadAdapterInfo8192SUsb(struct net_device* dev) // Read all Content from EEPROM or EFUSE. for(i = 0; i < HWSET_MAX_SIZE_92S; i += 2) { - usValue = eprom_read(dev, (u16) (i>>1)); - *((u16*)(&hwinfo[i])) = usValue; + eeprom_93cx6_read(&eeprom, (u16) (i>>1), &eeprom_val); + *((u16 *)(&hwinfo[i])) = eeprom_val; } } else if (!(priv->EepromOrEfuse)) @@ -4138,11 +4164,6 @@ short rtl8192_init(struct net_device *dev) init_timer(&priv->watch_dog_timer); priv->watch_dog_timer.data = (unsigned long)dev; priv->watch_dog_timer.function = watch_dog_timer_callback; - - //rtl8192_adapter_start(dev); -#ifdef DEBUG_EPROM - dump_eprom(dev); -#endif return 0; } -- cgit v0.10.2 From 4ab372408208b7c92e986b1a283072c43b17bde5 Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Sat, 6 Mar 2010 20:44:54 +0100 Subject: staging: rtl8192su: remove re-declaration of counter i variable i is declared integer in rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail. a few lines down it is re-declared u8. removed the re-declaration. plus cosmetics Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index 791cd51..6a87a43 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -3427,34 +3427,28 @@ void update_hal_variables(struct r8192_priv *priv) } } -// -// Description: -// Config HW adapter information into initial value. -// -// Assumption: -// 1. After Auto load fail(i.e, check CR9346 fail) -// -// Created by Roger, 2008.10.21. -// -void -rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(struct net_device* dev) +/* + * Description: + * Config HW adapter information into initial value. + * + * Assumption: + * 1. After Auto load fail(i.e, check CR9346 fail) + * + */ +void rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(struct net_device *dev) { - struct r8192_priv *priv = ieee80211_priv(dev); - //u16 i,usValue; - //u8 sMacAddr[6] = {0x00, 0xE0, 0x4C, 0x81, 0x92, 0x00}; - u8 rf_path; // For EEPROM/EFUSE After V0.6_1117 - int i; + struct r8192_priv *priv = ieee80211_priv(dev); + u8 rf_path; /* For EEPROM/EFUSE After V0.6_1117 */ + int i; RT_TRACE(COMP_INIT, "====> ConfigAdapterInfo8192SForAutoLoadFail\n"); - write_nic_byte(dev, SYS_ISO_CTRL+1, 0xE8); // Isolation signals from Loader - //PlatformStallExecution(10000); + /* Isolation signals from Loader */ + write_nic_byte(dev, SYS_ISO_CTRL+1, 0xE8); mdelay(10); - write_nic_byte(dev, PMC_FSM, 0x02); // Enable Loader Data Keep - - //RT_ASSERT(priv->AutoloadFailFlag==TRUE, ("ReadAdapterInfo8192SEEPROM(): AutoloadFailFlag !=TRUE\n")); + write_nic_byte(dev, PMC_FSM, 0x02); /* Enable Loader Data Keep */ - // Initialize IC Version && Channel Plan + /* Initialize IC Version && Channel Plan */ priv->eeprom_vid = 0; priv->eeprom_pid = 0; priv->card_8192_version = 0; @@ -3465,12 +3459,14 @@ rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(struct net_device* dev) RT_TRACE(COMP_INIT, "EEPROM VID = 0x%4x\n", priv->eeprom_vid); RT_TRACE(COMP_INIT, "EEPROM PID = 0x%4x\n", priv->eeprom_pid); - RT_TRACE(COMP_INIT, "EEPROM Customer ID: 0x%2x\n", priv->eeprom_CustomerID); - RT_TRACE(COMP_INIT, "EEPROM SubCustomer ID: 0x%2x\n", priv->eeprom_SubCustomerID); - RT_TRACE(COMP_INIT, "EEPROM ChannelPlan = 0x%4x\n", priv->eeprom_ChannelPlan); - RT_TRACE(COMP_INIT, "IgnoreDiffRateTxPowerOffset = %d\n", priv->bIgnoreDiffRateTxPowerOffset); - - + RT_TRACE(COMP_INIT, "EEPROM Customer ID: 0x%2x\n", + priv->eeprom_CustomerID); + RT_TRACE(COMP_INIT, "EEPROM SubCustomer ID: 0x%2x\n", + priv->eeprom_SubCustomerID); + RT_TRACE(COMP_INIT, "EEPROM ChannelPlan = 0x%4x\n", + priv->eeprom_ChannelPlan); + RT_TRACE(COMP_INIT, "IgnoreDiffRateTxPowerOffset = %d\n", + priv->bIgnoreDiffRateTxPowerOffset); priv->EEPROMUsbOption = EEPROM_USB_Default_OPTIONAL_FUNC; RT_TRACE(COMP_INIT, "USB Option = %#x\n", priv->EEPROMUsbOption); @@ -3478,19 +3474,15 @@ rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(struct net_device* dev) for(i=0; i<5; i++) priv->EEPROMUsbPhyParam[i] = EEPROM_USB_Default_PHY_PARAM; - //RT_PRINT_DATA(COMP_INIT|COMP_EFUSE, DBG_LOUD, ("EFUSE USB PHY Param: \n"), priv->EEPROMUsbPhyParam, 5); - { - // In this case, we random assigh MAC address here. 2008.10.15. + /* + * In this case, we randomly assign a MAC address here. + */ static u8 sMacAddr[6] = {0x00, 0xE0, 0x4C, 0x81, 0x92, 0x00}; - u8 i; - - //sMacAddr[5] = (u8)GetRandomNumber(1, 254); - for(i = 0; i < 6; i++) dev->dev_addr[i] = sMacAddr[i]; } - //NicIFSetMacAddress(Adapter, Adapter->PermanentAddress); + /* NicIFSetMacAddress(Adapter, Adapter->PermanentAddress); */ write_nic_dword(dev, IDR0, ((u32*)dev->dev_addr)[0]); write_nic_word(dev, IDR4, ((u16*)(dev->dev_addr + 4))[0]); @@ -3499,7 +3491,7 @@ rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(struct net_device* dev) dev->dev_addr); priv->EEPROMBoardType = EEPROM_Default_BoardType; - priv->rf_type = RF_1T2R; //RF_2T2R + priv->rf_type = RF_1T2R; /* RF_2T2R */ priv->EEPROMTxPowerDiff = EEPROM_Default_PwDiff; priv->EEPROMThermalMeter = EEPROM_Default_ThermalMeter; priv->EEPROMCrystalCap = EEPROM_Default_CrystalCap; @@ -3508,13 +3500,11 @@ rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(struct net_device* dev) priv->EEPROMTSSI_B = EEPROM_Default_TSSI; priv->EEPROMTxPwrTkMode = EEPROM_Default_TxPwrTkMode; - - for (rf_path = 0; rf_path < 2; rf_path++) { for (i = 0; i < 3; i++) { - // Read CCK RF A & B Tx power + /* Read CCK RF A & B Tx power */ priv->RfCckChnlAreaTxPwr[rf_path][i] = priv->RfOfdmChnlAreaTxPwr1T[rf_path][i] = priv->RfOfdmChnlAreaTxPwr2T[rf_path][i] = @@ -3524,22 +3514,25 @@ rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(struct net_device* dev) update_hal_variables(priv); - // - // Update remained HAL variables. - // + /* + * Update remaining HAL variables. + */ priv->TSSI_13dBm = priv->EEPROMThermalMeter *100; - priv->LegacyHTTxPowerDiff = priv->EEPROMTxPowerDiff;//new + priv->LegacyHTTxPowerDiff = priv->EEPROMTxPowerDiff; /* new */ priv->TxPowerDiff = priv->EEPROMTxPowerDiff; - //priv->AntennaTxPwDiff[0] = (priv->EEPROMTxPowerDiff & 0xf);// Antenna B gain offset to antenna A, bit0~3 - //priv->AntennaTxPwDiff[1] = ((priv->EEPROMTxPowerDiff & 0xf0)>>4);// Antenna C gain offset to antenna A, bit4~7 - priv->CrystalCap = priv->EEPROMCrystalCap; // CrystalCap, bit12~15 - priv->ThermalMeter[0] = priv->EEPROMThermalMeter;// ThermalMeter, bit0~3 for RFIC1, bit4~7 for RFIC2 + /* Antenna B gain offset to antenna A, bit0~3 */ + /* priv->AntennaTxPwDiff[0] = (priv->EEPROMTxPowerDiff & 0xf); */ + /* Antenna C gain offset to antenna A, bit4~7 */ + /* priv->AntennaTxPwDiff[1] = ((priv->EEPROMTxPowerDiff & 0xf0)>>4); */ + /* CrystalCap, bit12~15 */ + priv->CrystalCap = priv->EEPROMCrystalCap; + /* ThermalMeter, bit0~3 for RFIC1, bit4~7 for RFIC2 */ + priv->ThermalMeter[0] = priv->EEPROMThermalMeter; priv->LedStrategy = SW_LED_MODE0; init_rate_adaptive(dev); RT_TRACE(COMP_INIT, "<==== ConfigAdapterInfo8192SForAutoLoadFail\n"); - } // -- cgit v0.10.2 From 458659e2ada5c21aedae2b647588150ee90177b0 Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Sat, 6 Mar 2010 20:45:11 +0100 Subject: staging: rtl8192su: remove extern keyword, remove static declaration removed extern keyword from rtl819x_watchdog_wqcallback. removed static declaration from variable check_reset_cnt. changed NumRxOkInPeriod and NumTxOkInPeriod comparison in function rtl819x_watchdog_wqcallback to 666; we're not on windows. plus cosmetics. Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index 6a87a43..7fe1ced 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -5524,85 +5524,93 @@ void rtl819x_update_rxcounts( } } -extern void rtl819x_watchdog_wqcallback(struct work_struct *work) -{ - struct delayed_work *dwork = container_of(work,struct delayed_work,work); - struct r8192_priv *priv = container_of(dwork,struct r8192_priv,watch_dog_wq); - struct net_device *dev = priv->ieee80211->dev; +void rtl819x_watchdog_wqcallback(struct work_struct *work) +{ + struct delayed_work *dwork = container_of(work, + struct delayed_work, + work); + struct r8192_priv *priv = container_of(dwork, + struct r8192_priv, + watch_dog_wq); + struct net_device *dev = priv->ieee80211->dev; struct ieee80211_device* ieee = priv->ieee80211; - RESET_TYPE ResetType = RESET_TYPE_NORESET; - static u8 check_reset_cnt=0; + RESET_TYPE ResetType = RESET_TYPE_NORESET; + u8 check_reset_cnt = 0; bool bBusyTraffic = false; if(!priv->up) return; hal_dm_watchdog(dev); - {//to get busy traffic condition - if(ieee->state == IEEE80211_LINKED) - { - //windows mod 666 to 100. - //if( ieee->LinkDetectInfo.NumRxOkInPeriod> 666 || - // ieee->LinkDetectInfo.NumTxOkInPeriod> 666 ) { - if( ieee->LinkDetectInfo.NumRxOkInPeriod> 100 || - ieee->LinkDetectInfo.NumTxOkInPeriod> 100 ) { + /* to get busy traffic condition */ + if (ieee->state == IEEE80211_LINKED) { + if (ieee->LinkDetectInfo.NumRxOkInPeriod > 666 || + ieee->LinkDetectInfo.NumTxOkInPeriod > 666) bBusyTraffic = true; - } - ieee->LinkDetectInfo.NumRxOkInPeriod = 0; - ieee->LinkDetectInfo.NumTxOkInPeriod = 0; - ieee->LinkDetectInfo.bBusyTraffic = bBusyTraffic; - } - } - //added by amy for AP roaming - { - if(priv->ieee80211->state == IEEE80211_LINKED && priv->ieee80211->iw_mode == IW_MODE_INFRA) - { - u32 TotalRxBcnNum = 0; - u32 TotalRxDataNum = 0; - rtl819x_update_rxcounts(priv, &TotalRxBcnNum, &TotalRxDataNum); - if((TotalRxBcnNum+TotalRxDataNum) == 0) - { - #ifdef TODO - if(rfState == eRfOff) - RT_TRACE(COMP_ERR,"========>%s()\n",__FUNCTION__); - #endif - printk("===>%s(): AP is power off,connect another one\n",__FUNCTION__); - // Dot11d_Reset(dev); - priv->ieee80211->state = IEEE80211_ASSOCIATING; - notify_wx_assoc_event(priv->ieee80211); - RemovePeerTS(priv->ieee80211,priv->ieee80211->current_network.bssid); - ieee->is_roaming = true; - priv->ieee80211->link_change(dev); - queue_work(priv->ieee80211->wq, &priv->ieee80211->associate_procedure_wq); - } + ieee->LinkDetectInfo.NumRxOkInPeriod = 0; + ieee->LinkDetectInfo.NumTxOkInPeriod = 0; + ieee->LinkDetectInfo.bBusyTraffic = bBusyTraffic; + } + + if (priv->ieee80211->state == IEEE80211_LINKED && + priv->ieee80211->iw_mode == IW_MODE_INFRA) { + u32 TotalRxBcnNum = 0; + u32 TotalRxDataNum = 0; + rtl819x_update_rxcounts(priv, &TotalRxBcnNum, &TotalRxDataNum); + if ((TotalRxBcnNum + TotalRxDataNum) == 0) { + #ifdef TODO + if (rfState == eRfOff) + RT_TRACE(COMP_ERR, "========>%s()\n", + __func__); + #endif + RT_TRACE(COMP_ERR, "=>%s(): AP is power off," + "connect another one\n", __func__); + /* Dot11d_Reset(dev); */ + priv->ieee80211->state = IEEE80211_ASSOCIATING; + notify_wx_assoc_event(priv->ieee80211); + RemovePeerTS(priv->ieee80211, + priv->ieee80211->current_network.bssid); + + ieee->is_roaming = true; + priv->ieee80211->link_change(dev); + queue_work(priv->ieee80211->wq, + &priv->ieee80211->associate_procedure_wq); } - priv->ieee80211->LinkDetectInfo.NumRecvBcnInPeriod=0; - priv->ieee80211->LinkDetectInfo.NumRecvDataInPeriod=0; } -// CAM_read_entry(dev,4); - //check if reset the driver - if(check_reset_cnt++ >= 3 && !ieee->is_roaming) - { - ResetType = rtl819x_ifcheck_resetornot(dev); + priv->ieee80211->LinkDetectInfo.NumRecvBcnInPeriod = 0; + priv->ieee80211->LinkDetectInfo.NumRecvDataInPeriod = 0; + + /* + * CAM_read_entry(dev,4); + * check if reset the driver + */ + if (check_reset_cnt++ >= 3 && !ieee->is_roaming) { + ResetType = rtl819x_ifcheck_resetornot(dev); check_reset_cnt = 3; - //DbgPrint("Start to check silent reset\n"); } - // RT_TRACE(COMP_RESET,"%s():priv->force_reset is %d,priv->ResetProgress is %d, priv->bForcedSilentReset is %d,priv->bDisableNormalResetCheck is %d,ResetType is %d\n",__FUNCTION__,priv->force_reset,priv->ResetProgress,priv->bForcedSilentReset,priv->bDisableNormalResetCheck,ResetType); -#if 1 - if( (priv->force_reset) || (priv->ResetProgress==RESET_TYPE_NORESET && + if ((priv->force_reset) || (priv->ResetProgress == RESET_TYPE_NORESET && (priv->bForcedSilentReset || - (!priv->bDisableNormalResetCheck && ResetType==RESET_TYPE_SILENT)))) // This is control by OID set in Pomelo - { - RT_TRACE(COMP_RESET,"%s():priv->force_reset is %d,priv->ResetProgress is %d, priv->bForcedSilentReset is %d,priv->bDisableNormalResetCheck is %d,ResetType is %d\n",__FUNCTION__,priv->force_reset,priv->ResetProgress,priv->bForcedSilentReset,priv->bDisableNormalResetCheck,ResetType); + (!priv->bDisableNormalResetCheck && + /* This is control by OID set in Pomelo */ + ResetType == RESET_TYPE_SILENT)))) { + RT_TRACE(COMP_RESET, "%s():priv->force_reset is %d," + "priv->ResetProgress is %d, " + "priv->bForcedSilentReset is %d, " + "priv->bDisableNormalResetCheck is %d, " + "ResetType is %d\n", + __func__, + priv->force_reset, + priv->ResetProgress, + priv->bForcedSilentReset, + priv->bDisableNormalResetCheck, + ResetType); rtl819x_ifsilentreset(dev); } -#endif priv->force_reset = false; priv->bForcedSilentReset = false; priv->bResetInProgress = false; RT_TRACE(COMP_TRACE, " <==RtUsbCheckForHangWorkItemCallback()\n"); - } void watch_dog_timer_callback(unsigned long data) -- cgit v0.10.2 From 8dba599d89711b4f731fcc1d135de5ffd69eb360 Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Sat, 6 Mar 2010 20:45:25 +0100 Subject: staging: rtl8192su: cleanup of r819xU_cmdpkt.c, r819xU_cmdpkt.c Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r819xU_cmdpkt.c b/drivers/staging/rtl8192su/r819xU_cmdpkt.c index 3ebfe79..9b377ba 100644 --- a/drivers/staging/rtl8192su/r819xU_cmdpkt.c +++ b/drivers/staging/rtl8192su/r819xU_cmdpkt.c @@ -1,384 +1,250 @@ -/****************************************************************************** - - (c) Copyright 2008, RealTEK Technologies Inc. All Rights Reserved. - - Module: r819xusb_cmdpkt.c (RTL8190 TX/RX command packet handler Source C File) - - Note: The module is responsible for handling TX and RX command packet. - 1. TX : Send set and query configuration command packet. - 2. RX : Receive tx feedback, beacon state, query configuration - command packet. - - Function: - - Export: - - Abbrev: - - History: - Data Who Remark - - 05/06/2008 amy Create initial version porting from windows driver. - -******************************************************************************/ +/* + * (c) Copyright 2008, RealTEK Technologies Inc. All Rights Reserved. + * + * Module: r819xusb_cmdpkt.c + * (RTL8190 TX/RX command packet handler Source C File) + * + * Note: The module is responsible for handling TX and RX command packet. + * 1.TX: Send set and query configuration command packet. + * 2.RX: Receive tx feedback, beacon state, query configuration, command packet. + */ #include "r8192U.h" #include "r819xU_cmdpkt.h" -/*---------------------------Define Local Constant---------------------------*/ -/* Debug constant*/ -#define CMPK_DEBOUNCE_CNT 1 -/* 2007/10/24 MH Add for printing a range of data. */ -#define CMPK_PRINT(Address)\ -{\ - unsigned char i;\ - u32 temp[10];\ - \ - memcpy(temp, Address, 40);\ - for (i = 0; i <40; i+=4)\ - printk("\r\n %08x", temp[i]);\ -}\ -/*---------------------------Define functions---------------------------------*/ - -bool -SendTxCommandPacket( - struct net_device *dev, - void* pData, - u32 DataLen - ) + +bool SendTxCommandPacket(struct net_device *dev, void *pData, u32 DataLen) { bool rtStatus = true; struct r8192_priv *priv = ieee80211_priv(dev); struct sk_buff *skb; cb_desc *tcb_desc; unsigned char *ptr_buf; - //bool bLastInitPacket = false; - //PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); + /* PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); */ - //Get TCB and local buffer from common pool. (It is shared by CmdQ, MgntQ, and USB coalesce DataQ) + /* + * Get TCB and local buffer from common pool. + * (It is shared by CmdQ, MgntQ, and USB coalesce DataQ) + */ skb = dev_alloc_skb(USB_HWDESC_HEADER_LEN + DataLen + 4); - memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev)); - tcb_desc = (cb_desc*)(skb->cb + MAX_DEV_ADDR_SIZE); + memcpy((unsigned char *)(skb->cb), &dev, sizeof(dev)); + tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); tcb_desc->queue_index = TXCMD_QUEUE; tcb_desc->bCmdOrInit = DESC_PACKET_TYPE_NORMAL; tcb_desc->bLastIniPkt = 0; skb_reserve(skb, USB_HWDESC_HEADER_LEN); ptr_buf = skb_put(skb, DataLen); - memset(ptr_buf,0,DataLen); - memcpy(ptr_buf,pData,DataLen); - tcb_desc->txbuf_size= (u16)DataLen; - - if(!priv->ieee80211->check_nic_enough_desc(dev,tcb_desc->queue_index)|| - (!skb_queue_empty(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index]))||\ - (priv->ieee80211->queue_stop) ) { - RT_TRACE(COMP_FIRMWARE,"===================NULL packet==================================> tx full!\n"); + memset(ptr_buf, 0, DataLen); + memcpy(ptr_buf, pData, DataLen); + tcb_desc->txbuf_size = (u16)DataLen; + + if (!priv->ieee80211->check_nic_enough_desc(dev, tcb_desc->queue_index) || + (!skb_queue_empty(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index])) || + (priv->ieee80211->queue_stop)) { + RT_TRACE(COMP_FIRMWARE, "NULL packet => tx full\n"); skb_queue_tail(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index], skb); } else { - priv->ieee80211->softmac_hard_start_xmit(skb,dev); + priv->ieee80211->softmac_hard_start_xmit(skb, dev); } //PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); return rtStatus; } -/*----------------------------------------------------------------------------- +/* * Function: cmpk_message_handle_tx() * * Overview: Driver internal module can call the API to send message to - * firmware side. For example, you can send a debug command packet. - * Or you can send a request for FW to modify RLX4181 LBUS HW bank. - * Otherwise, you can change MAC/PHT/RF register by firmware at - * run time. We do not support message more than one segment now. + * firmware side. For example, you can send a debug command packet. + * Or you can send a request for FW to modify RLX4181 LBUS HW bank. + * Otherwise, you can change MAC/PHT/RF register by firmware at + * run time. We do not support message more than one segment now. * * Input: NONE * * Output: NONE * * Return: NONE - * - * Revised History: - * When Who Remark - * 05/06/2008 amy porting from windows code. - * - *---------------------------------------------------------------------------*/ + */ extern bool cmpk_message_handle_tx( struct net_device *dev, - u8* codevirtualaddress, + u8 *codevirtualaddress, u32 packettype, u32 buffer_len) { - - bool rt_status = true; + bool rt_status = true; return rt_status; -} /* CMPK_Message_Handle_Tx */ +} -/*----------------------------------------------------------------------------- - * Function: cmpk_counttxstatistic() - * - * Overview: - * - * Input: PADAPTER pAdapter - . - * CMPK_TXFB_T *psTx_FB - . - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 05/12/2008 amy Create Version 0 porting from windows code. - * - *---------------------------------------------------------------------------*/ +/* + * Function: cmpk_counttxstatistic() + */ static void -cmpk_count_txstatistic( - struct net_device *dev, - cmpk_txfb_t *pstx_fb) +cmpk_count_txstatistic(struct net_device *dev, cmpk_txfb_t *pstx_fb) { struct r8192_priv *priv = ieee80211_priv(dev); #ifdef ENABLE_PS - RT_RF_POWER_STATE rtState; + RT_RF_POWER_STATE rtState; - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); + pAdapter->HalFunc.GetHwRegHandler(pAdapter, + HW_VAR_RF_STATE, + (pu1Byte)(&rtState)); - // When RF is off, we should not count the packet for hw/sw synchronize - // reason, ie. there may be a duration while sw switch is changed and hw - // switch is being changed. 2006.12.04, by shien chang. + /* + * When RF is off, we should not count the packet for hw/sw synchronize + * reason, ie. there may be a duration while sw switch is changed and hw + * switch is being changed. + */ if (rtState == eRfOff) - { return; - } #endif #ifdef TODO - if(pAdapter->bInHctTest) + if (pAdapter->bInHctTest) return; #endif - /* We can not know the packet length and transmit type: broadcast or uni - or multicast. So the relative statistics must be collected in tx - feedback info. */ - if (pstx_fb->tok) - { + /* + * We can not know the packet length and transmit type: + * broadcast or uni or multicast. + * So the relative statistics must be collected in tx feedback info + */ + if (pstx_fb->tok) { priv->stats.txfeedbackok++; priv->stats.txoktotal++; priv->stats.txokbytestotal += pstx_fb->pkt_length; priv->stats.txokinperiod++; - /* We can not make sure broadcast/multicast or unicast mode. */ - if (pstx_fb->pkt_type == PACKET_MULTICAST) - { + if (pstx_fb->pkt_type == PACKET_MULTICAST) { priv->stats.txmulticast++; priv->stats.txbytesmulticast += pstx_fb->pkt_length; - } - else if (pstx_fb->pkt_type == PACKET_BROADCAST) - { + } else if (pstx_fb->pkt_type == PACKET_BROADCAST) { priv->stats.txbroadcast++; priv->stats.txbytesbroadcast += pstx_fb->pkt_length; - } - else - { + } else { priv->stats.txunicast++; priv->stats.txbytesunicast += pstx_fb->pkt_length; } - } - else - { + } else { priv->stats.txfeedbackfail++; priv->stats.txerrtotal++; priv->stats.txerrbytestotal += pstx_fb->pkt_length; - /* We can not make sure broadcast/multicast or unicast mode. */ if (pstx_fb->pkt_type == PACKET_MULTICAST) - { priv->stats.txerrmulticast++; - } else if (pstx_fb->pkt_type == PACKET_BROADCAST) - { priv->stats.txerrbroadcast++; - } else - { priv->stats.txerrunicast++; - } } - priv->stats.txretrycount += pstx_fb->retry_cnt; priv->stats.txfeedbackretry += pstx_fb->retry_cnt; +} -} /* cmpk_CountTxStatistic */ - - - -/*----------------------------------------------------------------------------- +/* * Function: cmpk_handle_tx_feedback() * * Overview: The function is responsible for extract the message inside TX - * feedbck message from firmware. It will contain dedicated info in - * ws-06-0063-rtl8190-command-packet-specification. Please - * refer to chapter "TX Feedback Element". We have to read 20 bytes - * in the command packet. + * feedbck message from firmware. It will contain dedicated info in + * ws-06-0063-rtl8190-command-packet-specification. Please + * refer to chapter "TX Feedback Element". We have to read 20 bytes + * in the command packet. * * Input: struct net_device * dev - * u8 * pmsg - Msg Ptr of the command packet. + * u8 *pmsg - Msg Ptr of the command packet. * * Output: NONE * * Return: NONE - * - * Revised History: - * When Who Remark - * 05/08/2008 amy Create Version 0 porting from windows code. - * - *---------------------------------------------------------------------------*/ -static void -cmpk_handle_tx_feedback( - struct net_device *dev, - u8 * pmsg) + */ +static void cmpk_handle_tx_feedback(struct net_device *dev, u8 *pmsg) { struct r8192_priv *priv = ieee80211_priv(dev); - cmpk_txfb_t rx_tx_fb; /* */ + cmpk_txfb_t rx_tx_fb; priv->stats.txfeedback++; - /* 0. Display received message. */ - //cmpk_Display_Message(CMPK_RX_TX_FB_SIZE, pMsg); - /* 1. Extract TX feedback info from RFD to temp structure buffer. */ + memcpy((u8 *)&rx_tx_fb, pmsg, sizeof(cmpk_txfb_t)); - /* 2007/07/05 MH Use pointer to transfer structure memory. */ - //memcpy((UINT8 *)&rx_tx_fb, pMsg, sizeof(CMPK_TXFB_T)); - memcpy((u8*)&rx_tx_fb, pmsg, sizeof(cmpk_txfb_t)); /* 2. Use tx feedback info to count TX statistics. */ cmpk_count_txstatistic(dev, &rx_tx_fb); +} - /* 2007/01/17 MH Comment previous method for TX statistic function. */ - /* Collect info TX feedback packet to fill TCB. */ - /* We can not know the packet length and transmit type: broadcast or uni - or multicast. */ - //CountTxStatistics( pAdapter, &tcb ); - -} /* cmpk_Handle_Tx_Feedback */ - -void -cmdpkt_beacontimerinterrupt_819xusb( - struct net_device *dev -) +void cmdpkt_beacontimerinterrupt_819xusb(struct net_device *dev) { struct r8192_priv *priv = ieee80211_priv(dev); u16 tx_rate; - { - // - // 070117, rcnjko: 87B have to S/W beacon for DTM encryption_cmn. - // - if(priv->ieee80211->current_network.mode == IEEE_A || - priv->ieee80211->current_network.mode == IEEE_N_5G || - (priv->ieee80211->current_network.mode == IEEE_N_24G && (!priv->ieee80211->pHTInfo->bCurSuppCCK))) - { - tx_rate = 60; - DMESG("send beacon frame tx rate is 6Mbpm\n"); - } - else - { - tx_rate =10; - DMESG("send beacon frame tx rate is 1Mbpm\n"); - } - - rtl819xusb_beacon_tx(dev,tx_rate); // HW Beacon + if (priv->ieee80211->current_network.mode == IEEE_A || + priv->ieee80211->current_network.mode == IEEE_N_5G || + (priv->ieee80211->current_network.mode == IEEE_N_24G && + (!priv->ieee80211->pHTInfo->bCurSuppCCK))) { + tx_rate = 60; + DMESG("send beacon frame tx rate is 6Mbpm\n"); + } else { + tx_rate = 10; + DMESG("send beacon frame tx rate is 1Mbpm\n"); } - + rtl819xusb_beacon_tx(dev, tx_rate); /* HW Beacon */ } - - - -/*----------------------------------------------------------------------------- +/* * Function: cmpk_handle_interrupt_status() * * Overview: The function is responsible for extract the message from - * firmware. It will contain dedicated info in - * ws-07-0063-v06-rtl819x-command-packet-specification-070315.doc. - * Please refer to chapter "Interrupt Status Element". + * firmware. It will contain dedicated info in + * ws-07-0063-v06-rtl819x-command-packet-specification-070315.doc. + * Please refer to chapter "Interrupt Status Element". * * Input: struct net_device *dev, - * u8* pmsg - Message Pointer of the command packet. + * u8* pmsg - Message Pointer of the command packet. * * Output: NONE * * Return: NONE - * - * Revised History: - * When Who Remark - * 05/12/2008 amy Add this for rtl8192 porting from windows code. - * - *---------------------------------------------------------------------------*/ -static void -cmpk_handle_interrupt_status( - struct net_device *dev, - u8* pmsg) + */ +static void cmpk_handle_interrupt_status(struct net_device *dev, u8 *pmsg) { cmpk_intr_sta_t rx_intr_status; /* */ struct r8192_priv *priv = ieee80211_priv(dev); DMESG("---> cmpk_Handle_Interrupt_Status()\n"); - /* 0. Display received message. */ - //cmpk_Display_Message(CMPK_RX_BEACON_STATE_SIZE, pMsg); - /* 1. Extract TX feedback info from RFD to temp structure buffer. */ - /* It seems that FW use big endian(MIPS) and DRV use little endian in - windows OS. So we have to read the content byte by byte or transfer - endian type before copy the message copy. */ - //rx_bcn_state.Element_ID = pMsg[0]; - //rx_bcn_state.Length = pMsg[1]; rx_intr_status.length = pmsg[1]; - if (rx_intr_status.length != (sizeof(cmpk_intr_sta_t) - 2)) - { + if (rx_intr_status.length != (sizeof(cmpk_intr_sta_t) - 2)) { DMESG("cmpk_Handle_Interrupt_Status: wrong length!\n"); return; } - - - // Statistics of beacon for ad-hoc mode. - if( priv->ieee80211->iw_mode == IW_MODE_ADHOC) - { + /* Statistics of beacon for ad-hoc mode. */ + if (priv->ieee80211->iw_mode == IW_MODE_ADHOC) { //2 maybe need endian transform? rx_intr_status.interrupt_status = *((u32 *)(pmsg + 4)); //rx_intr_status.InterruptStatus = N2H4BYTE(*((UINT32 *)(pMsg + 4))); DMESG("interrupt status = 0x%x\n", rx_intr_status.interrupt_status); - if (rx_intr_status.interrupt_status & ISR_TxBcnOk) - { + if (rx_intr_status.interrupt_status & ISR_TxBcnOk) { priv->ieee80211->bibsscoordinator = true; priv->stats.txbeaconokint++; - } - else if (rx_intr_status.interrupt_status & ISR_TxBcnErr) - { + } else if (rx_intr_status.interrupt_status & ISR_TxBcnErr) { priv->ieee80211->bibsscoordinator = false; priv->stats.txbeaconerr++; } if (rx_intr_status.interrupt_status & ISR_BcnTimerIntr) - { cmdpkt_beacontimerinterrupt_819xusb(dev); - } - } - - // Other informations in interrupt status we need? - - + /* Other informations in interrupt status we need? */ DMESG("<---- cmpk_handle_interrupt_status()\n"); +} -} /* cmpk_handle_interrupt_status */ - - -/*----------------------------------------------------------------------------- +/* * Function: cmpk_handle_query_config_rx() * * Overview: The function is responsible for extract the message from * firmware. It will contain dedicated info in - * ws-06-0063-rtl8190-command-packet-specification. Please - * refer to chapter "Beacon State Element". + * ws-06-0063-rtl8190-command-packet-specification + * Please refer to chapter "Beacon State Element". * * Input: u8 * pmsg - Message Pointer of the command packet. * @@ -386,44 +252,28 @@ cmpk_handle_interrupt_status( * * Return: NONE * - * Revised History: - * When Who Remark - * 05/12/2008 amy Create Version 0 porting from windows code. - * - *---------------------------------------------------------------------------*/ -static void -cmpk_handle_query_config_rx( - struct net_device *dev, - u8* pmsg) + */ +static void cmpk_handle_query_config_rx(struct net_device *dev, u8 *pmsg) { - cmpk_query_cfg_t rx_query_cfg; /* */ - - /* 0. Display received message. */ - //cmpk_Display_Message(CMPK_RX_BEACON_STATE_SIZE, pMsg); + cmpk_query_cfg_t rx_query_cfg; + /* + * Extract TX feedback info from RFD to temp structure buffer. + */ + rx_query_cfg.cfg_action = (pmsg[4] & 0x80000000) >> 31; + rx_query_cfg.cfg_type = (pmsg[4] & 0x60) >> 5; + rx_query_cfg.cfg_size = (pmsg[4] & 0x18) >> 3; + rx_query_cfg.cfg_page = (pmsg[6] & 0x0F) >> 0; + rx_query_cfg.cfg_offset = pmsg[7]; + rx_query_cfg.value = (pmsg[8] << 24) | (pmsg[9] << 16) | + (pmsg[10] << 8) | (pmsg[11] << 0); + rx_query_cfg.mask = (pmsg[12] << 24) | (pmsg[13] << 16) | + (pmsg[14] << 8) | (pmsg[15] << 0); +} - /* 1. Extract TX feedback info from RFD to temp structure buffer. */ - /* It seems that FW use big endian(MIPS) and DRV use little endian in - windows OS. So we have to read the content byte by byte or transfer - endian type before copy the message copy. */ - //rx_query_cfg.Element_ID = pMsg[0]; - //rx_query_cfg.Length = pMsg[1]; - rx_query_cfg.cfg_action = (pmsg[4] & 0x80000000)>>31; - rx_query_cfg.cfg_type = (pmsg[4] & 0x60) >> 5; - rx_query_cfg.cfg_size = (pmsg[4] & 0x18) >> 3; - rx_query_cfg.cfg_page = (pmsg[6] & 0x0F) >> 0; - rx_query_cfg.cfg_offset = pmsg[7]; - rx_query_cfg.value = (pmsg[8] << 24) | (pmsg[9] << 16) | - (pmsg[10] << 8) | (pmsg[11] << 0); - rx_query_cfg.mask = (pmsg[12] << 24) | (pmsg[13] << 16) | - (pmsg[14] << 8) | (pmsg[15] << 0); - -} /* cmpk_Handle_Query_Config_Rx */ - - -/*----------------------------------------------------------------------------- +/* * Function: cmpk_count_tx_status() * - * Overview: Count aggregated tx status from firmwar of one type rx command + * Overview: Count aggregated tx status from firmware of one type rx command * packet element id = RX_TX_STATUS. * * Input: NONE @@ -431,14 +281,9 @@ cmpk_handle_query_config_rx( * Output: NONE * * Return: NONE - * - * Revised History: - * When Who Remark - * 05/12/2008 amy Create Version 0 porting from windows code. - * - *---------------------------------------------------------------------------*/ -static void cmpk_count_tx_status( struct net_device *dev, - cmpk_tx_status_t *pstx_status) + */ +static void cmpk_count_tx_status(struct net_device *dev, + cmpk_tx_status_t *pstx_status) { struct r8192_priv *priv = ieee80211_priv(dev); @@ -448,13 +293,13 @@ static void cmpk_count_tx_status( struct net_device *dev, pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - // When RF is off, we should not count the packet for hw/sw synchronize - // reason, ie. there may be a duration while sw switch is changed and hw - // switch is being changed. 2006.12.04, by shien chang. + /* + * When RF is off, we should not count the packet for hw/sw synchronize + * reason, ie. there may be a duration while sw switch is changed and hw + * switch is being changed. + */ if (rtState == eRfOff) - { return; - } #endif priv->stats.txfeedbackok += pstx_status->txok; @@ -463,15 +308,11 @@ static void cmpk_count_tx_status( struct net_device *dev, priv->stats.txfeedbackfail += pstx_status->txfail; priv->stats.txerrtotal += pstx_status->txfail; - priv->stats.txretrycount += pstx_status->txretry; + priv->stats.txretrycount += pstx_status->txretry; priv->stats.txfeedbackretry += pstx_status->txretry; - //pAdapter->TxStats.NumTxOkBytesTotal += psTx_FB->pkt_length; - //pAdapter->TxStats.NumTxErrBytesTotal += psTx_FB->pkt_length; - //pAdapter->MgntInfo.LinkDetectInfo.NumTxOkInPeriod++; - - priv->stats.txmulticast += pstx_status->txmcok; - priv->stats.txbroadcast += pstx_status->txbcok; + priv->stats.txmulticast += pstx_status->txmcok; + priv->stats.txbroadcast += pstx_status->txbcok; priv->stats.txunicast += pstx_status->txucok; priv->stats.txerrmulticast += pstx_status->txmcfail; @@ -480,14 +321,12 @@ static void cmpk_count_tx_status( struct net_device *dev, priv->stats.txbytesmulticast += pstx_status->txmclength; priv->stats.txbytesbroadcast += pstx_status->txbclength; - priv->stats.txbytesunicast += pstx_status->txuclength; - - priv->stats.last_packet_rate = pstx_status->rate; -} /* cmpk_CountTxStatus */ - + priv->stats.txbytesunicast += pstx_status->txuclength; + priv->stats.last_packet_rate = pstx_status->rate; +} -/*----------------------------------------------------------------------------- +/* * Function: cmpk_handle_tx_status() * * Overview: Firmware add a new tx feedback status to reduce rx command @@ -498,27 +337,18 @@ static void cmpk_count_tx_status( struct net_device *dev, * Output: NONE * * Return: NONE - * - * Revised History: - * When Who Remark - * 05/12/2008 amy Create Version 0 porting from windows code. - * - *---------------------------------------------------------------------------*/ + */ static void -cmpk_handle_tx_status( - struct net_device *dev, - u8* pmsg) +cmpk_handle_tx_status(struct net_device *dev, u8 *pmsg) { - cmpk_tx_status_t rx_tx_sts; /* */ + cmpk_tx_status_t rx_tx_sts; - memcpy((void*)&rx_tx_sts, (void*)pmsg, sizeof(cmpk_tx_status_t)); + memcpy((void *)&rx_tx_sts, (void *)pmsg, sizeof(cmpk_tx_status_t)); /* 2. Use tx feedback info to count TX statistics. */ cmpk_count_tx_status(dev, &rx_tx_sts); +} -} /* cmpk_Handle_Tx_Status */ - - -/*----------------------------------------------------------------------------- +/* * Function: cmpk_handle_tx_rate_history() * * Overview: Firmware add a new tx rate history @@ -528,117 +358,90 @@ cmpk_handle_tx_status( * Output: NONE * * Return: NONE - * - * Revised History: - * When Who Remark - * 05/12/2008 amy Create Version 0 porting from windows code. - * - *---------------------------------------------------------------------------*/ -static void -cmpk_handle_tx_rate_history( - struct net_device *dev, - u8* pmsg) + */ +static void cmpk_handle_tx_rate_history(struct net_device *dev, u8 *pmsg) { cmpk_tx_rahis_t *ptxrate; -// RT_RF_POWER_STATE rtState; - u8 i, j; - u16 length = sizeof(cmpk_tx_rahis_t); - u32 *ptemp; + u8 i, j; + u16 length = sizeof(cmpk_tx_rahis_t); + u32 *ptemp; struct r8192_priv *priv = ieee80211_priv(dev); - #ifdef ENABLE_PS - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - - // When RF is off, we should not count the packet for hw/sw synchronize - // reason, ie. there may be a duration while sw switch is changed and hw - // switch is being changed. 2006.12.04, by shien chang. + pAdapter->HalFunc.GetHwRegHandler(pAdapter, + HW_VAR_RF_STATE, + (pu1Byte)(&rtState)); + /* + * When RF is off, we should not count the packet for hw/sw synchronize + * reason, ie. there may be a duration while sw switch is changed and hw + * switch is being changed. + */ if (rtState == eRfOff) - { return; - } #endif - ptemp = (u32 *)pmsg; - // - // Do endian transfer to word alignment(16 bits) for windows system. - // You must do different endian transfer for linux and MAC OS - // - for (i = 0; i < (length/4); i++) - { - u16 temp1, temp2; - - temp1 = ptemp[i]&0x0000FFFF; - temp2 = ptemp[i]>>16; - ptemp[i] = (temp1<<16)|temp2; + /* + * Do endian transfer to word alignment(16 bits) for windows system. + * You must do different endian transfer for linux and MAC OS + */ + for (i = 0; i < (length/4); i++) { + u16 temp1, temp2; + temp1 = ptemp[i] & 0x0000FFFF; + temp2 = ptemp[i] >> 16; + ptemp[i] = (temp1 << 16) | temp2; } ptxrate = (cmpk_tx_rahis_t *)pmsg; - if (ptxrate == NULL ) - { + if (ptxrate == NULL) return; - } - for (i = 0; i < 16; i++) - { - // Collect CCK rate packet num + for (i = 0; i < 16; i++) { + /* Collect CCK rate packet num */ if (i < 4) priv->stats.txrate.cck[i] += ptxrate->cck[i]; - - // Collect OFDM rate packet num - if (i< 8) + /* Collect OFDM rate packet num */ + if (i < 8) priv->stats.txrate.ofdm[i] += ptxrate->ofdm[i]; - for (j = 0; j < 4; j++) priv->stats.txrate.ht_mcs[j][i] += ptxrate->ht_mcs[j][i]; } -} /* cmpk_Handle_Tx_Rate_History */ - +} -/*----------------------------------------------------------------------------- +/* * Function: cmpk_message_handle_rx() * * Overview: In the function, we will capture different RX command packet - * info. Every RX command packet element has different message - * length and meaning in content. We only support three type of RX - * command packet now. Please refer to document - * ws-06-0063-rtl8190-command-packet-specification. + * info. Every RX command packet element has different message + * length and meaning in content. We only support three type of RX + * command packet now. Please refer to document + * ws-06-0063-rtl8190-command-packet-specification. * * Input: NONE * * Output: NONE * * Return: NONE - * - * Revised History: - * When Who Remark - * 05/06/2008 amy Create Version 0 porting from windows code. - * - *---------------------------------------------------------------------------*/ + */ extern u32 cmpk_message_handle_rx( struct net_device *dev, struct ieee80211_rx_stats *pstats) { -// u32 debug_level = DBG_LOUD; struct r8192_priv *priv = ieee80211_priv(dev); int total_length; u8 cmd_length, exe_cnt = 0; u8 element_id; u8 *pcmd_buff; - /* 0. Check inpt arguments. If is is a command queue message or pointer is - null. */ - if (/*(prfd->queue_id != CMPK_RX_QUEUE_ID) || */(pstats== NULL)) - { - /* Print error message. */ - /*RT_TRACE(COMP_SEND, DebugLevel, - ("\n\r[CMPK]-->Err queue id or pointer"));*/ + /* + * 0. Check input arguments. + * If is is a command queue message or pointer is null + */ + if ((pstats == NULL)) return 0; /* This is not a command packet. */ - } /* 1. Read received command packet message length from RFD. */ total_length = pstats->Length; @@ -648,70 +451,49 @@ cmpk_message_handle_rx( /* 3. Read command pakcet element id and length. */ element_id = pcmd_buff[0]; - /*RT_TRACE(COMP_SEND, DebugLevel, - ("\n\r[CMPK]-->element ID=%d Len=%d", element_id, total_length));*/ - - /* 4. Check every received command packet conent according to different - element type. Because FW may aggregate RX command packet to minimize - transmit time between DRV and FW.*/ - // Add a counter to prevent to locked in the loop too long - while (total_length > 0 || exe_cnt++ >100) - { - /* 2007/01/17 MH We support aggregation of different cmd in the same packet. */ - element_id = pcmd_buff[0]; - switch(element_id) - { - case RX_TX_FEEDBACK: - cmpk_handle_tx_feedback (dev, pcmd_buff); - cmd_length = CMPK_RX_TX_FB_SIZE; - break; - - case RX_INTERRUPT_STATUS: - cmpk_handle_interrupt_status(dev, pcmd_buff); - cmd_length = sizeof(cmpk_intr_sta_t); - break; - - case BOTH_QUERY_CONFIG: - cmpk_handle_query_config_rx(dev, pcmd_buff); - cmd_length = CMPK_BOTH_QUERY_CONFIG_SIZE; - break; - - case RX_TX_STATUS: - cmpk_handle_tx_status(dev, pcmd_buff); - cmd_length = CMPK_RX_TX_STS_SIZE; - break; - - case RX_TX_PER_PKT_FEEDBACK: - // You must at lease add a switch case element here, - // Otherwise, we will jump to default case. - //DbgPrint("CCX Test\r\n"); - cmd_length = CMPK_RX_TX_FB_SIZE; - break; - - case RX_TX_RATE_HISTORY: - //DbgPrint(" rx tx rate history\r\n"); - cmpk_handle_tx_rate_history(dev, pcmd_buff); - cmd_length = CMPK_TX_RAHIS_SIZE; - break; - - default: - - RT_TRACE(COMP_ERR, "---->cmpk_message_handle_rx():unknown CMD Element\n"); - return 1; /* This is a command packet. */ - } - // 2007/01/22 MH Display received rx command packet info. - //cmpk_Display_Message(cmd_length, pcmd_buff); + /* + * 4. Check every received command packet conent according to different + * element type. Because FW may aggregate RX command packet to minimize + * transmit time between DRV and FW. + */ - // 2007/01/22 MH Add to display tx statistic. - //cmpk_DisplayTxStatistic(pAdapter); - - /* 2007/03/09 MH Collect sidderent cmd element pkt num. */ + /* Add a counter to prevent to locked in the loop too long */ + while (total_length > 0 || exe_cnt++ > 100) { + /* We support aggregation of different cmd in the same packet */ + element_id = pcmd_buff[0]; + switch (element_id) { + case RX_TX_FEEDBACK: + cmpk_handle_tx_feedback(dev, pcmd_buff); + cmd_length = CMPK_RX_TX_FB_SIZE; + break; + case RX_INTERRUPT_STATUS: + cmpk_handle_interrupt_status(dev, pcmd_buff); + cmd_length = sizeof(cmpk_intr_sta_t); + break; + case BOTH_QUERY_CONFIG: + cmpk_handle_query_config_rx(dev, pcmd_buff); + cmd_length = CMPK_BOTH_QUERY_CONFIG_SIZE; + break; + case RX_TX_STATUS: + cmpk_handle_tx_status(dev, pcmd_buff); + cmd_length = CMPK_RX_TX_STS_SIZE; + break; + case RX_TX_PER_PKT_FEEDBACK: + cmd_length = CMPK_RX_TX_FB_SIZE; + break; + case RX_TX_RATE_HISTORY: + cmpk_handle_tx_rate_history(dev, pcmd_buff); + cmd_length = CMPK_TX_RAHIS_SIZE; + break; + default: + RT_TRACE(COMP_ERR, "(%s): unknown CMD Element\n", + __func__); + return 1; /* This is a command packet. */ + } priv->stats.rxcmdpkt[element_id]++; - total_length -= cmd_length; pcmd_buff += cmd_length; - } /* while (total_length > 0) */ - return 1; /* This is a command packet. */ - -} /* CMPK_Message_Handle_Rx */ + } + return 1; /* This is a command packet. */ +} diff --git a/drivers/staging/rtl8192su/r819xU_cmdpkt.h b/drivers/staging/rtl8192su/r819xU_cmdpkt.h index cced8e0..d3c5615 100644 --- a/drivers/staging/rtl8192su/r819xU_cmdpkt.h +++ b/drivers/staging/rtl8192su/r819xU_cmdpkt.h @@ -1,199 +1,191 @@ #ifndef R819XUSB_CMDPKT_H #define R819XUSB_CMDPKT_H -/* Different command packet have dedicated message length and definition. */ -#define CMPK_RX_TX_FB_SIZE sizeof(cmpk_txfb_t) //20 -#define CMPK_TX_SET_CONFIG_SIZE sizeof(cmpk_set_cfg_t) //16 -#define CMPK_BOTH_QUERY_CONFIG_SIZE sizeof(cmpk_set_cfg_t) //16 -#define CMPK_RX_TX_STS_SIZE sizeof(cmpk_tx_status_t)// -#define CMPK_RX_DBG_MSG_SIZE sizeof(cmpk_rx_dbginfo_t)// -#define CMPK_TX_RAHIS_SIZE sizeof(cmpk_tx_rahis_t) - -/* 2008/05/08 amy For USB constant. */ -#define ISR_TxBcnOk BIT27 // Transmit Beacon OK -#define ISR_TxBcnErr BIT26 // Transmit Beacon Error -#define ISR_BcnTimerIntr BIT13 // Beacon Timer Interrupt - -/* Define element ID of command packet. */ - -/*------------------------------Define structure----------------------------*/ -/* Define different command packet structure. */ -/* 1. RX side: TX feedback packet. */ -typedef struct tag_cmd_pkt_tx_feedback -{ - // DWORD 0 - u8 element_id; /* Command packet type. */ - u8 length; /* Command packet length. */ - /* 2007/07/05 MH Change tx feedback info field. */ - /*------TX Feedback Info Field */ - u8 TID:4; /* */ - u8 fail_reason:3; /* */ - u8 tok:1; /* Transmit ok. */ - u8 reserve1:4; /* */ - u8 pkt_type:2; /* */ - u8 bandwidth:1; /* */ - u8 qos_pkt:1; /* */ - - // DWORD 1 - u8 reserve2; /* */ - /*------TX Feedback Info Field */ - u8 retry_cnt; /* */ - u16 pkt_id; /* */ - - // DWORD 3 - u16 seq_num; /* */ - u8 s_rate; /* Start rate. */ - u8 f_rate; /* Final rate. */ - - // DWORD 4 - u8 s_rts_rate; /* */ - u8 f_rts_rate; /* */ - u16 pkt_length; /* */ - - // DWORD 5 - u16 reserve3; /* */ - u16 duration; /* */ -}cmpk_txfb_t; - -/* 2. RX side: Interrupt status packet. It includes Beacon State, - Beacon Timer Interrupt and other useful informations in MAC ISR Reg. */ -typedef struct tag_cmd_pkt_interrupt_status -{ - u8 element_id; /* Command packet type. */ - u8 length; /* Command packet length. */ - u16 reserve; - u32 interrupt_status; /* Interrupt Status. */ -}cmpk_intr_sta_t; - - -/* 3. TX side: Set configuration packet. */ -typedef struct tag_cmd_pkt_set_configuration -{ - u8 element_id; /* Command packet type. */ - u8 length; /* Command packet length. */ - u16 reserve1; /* */ - u8 cfg_reserve1:3; - u8 cfg_size:2; /* Configuration info. */ - u8 cfg_type:2; /* Configuration info. */ - u8 cfg_action:1; /* Configuration info. */ - u8 cfg_reserve2; /* Configuration info. */ - u8 cfg_page:4; /* Configuration info. */ - u8 cfg_reserve3:4; /* Configuration info. */ - u8 cfg_offset; /* Configuration info. */ - u32 value; /* */ - u32 mask; /* */ -}cmpk_set_cfg_t; - -/* 4. Both side : TX/RX query configuraton packet. The query structure is the - same as set configuration. */ -#define cmpk_query_cfg_t cmpk_set_cfg_t -/* 5. Multi packet feedback status. */ -typedef struct tag_tx_stats_feedback // PJ quick rxcmd 09042007 -{ - // For endian transfer --> Driver will not the same as firmware structure. - // DW 0 +/* + * Different command packets have dedicated message length and definition. + */ +#define CMPK_RX_TX_FB_SIZE sizeof(cmpk_txfb_t) /* 20 */ +#define CMPK_TX_SET_CONFIG_SIZE sizeof(cmpk_set_cfg_t) /* 16 */ +#define CMPK_BOTH_QUERY_CONFIG_SIZE sizeof(cmpk_set_cfg_t) /* 16 */ +#define CMPK_RX_TX_STS_SIZE sizeof(cmpk_tx_status_t) +#define CMPK_RX_DBG_MSG_SIZE sizeof(cmpk_rx_dbginfo_t) +#define CMPK_TX_RAHIS_SIZE sizeof(cmpk_tx_rahis_t) + +/* For USB constant. */ +#define ISR_TxBcnOk BIT27 /* Transmit Beacon OK */ +#define ISR_TxBcnErr BIT26 /* Transmit Beacon Error */ +#define ISR_BcnTimerIntr BIT13 /* Beacon Timer Interrupt */ + +/* + * Define different command packet structures + * + * 1. RX side: TX feedback packet. + */ +typedef struct tag_cmd_pkt_tx_feedback { + /* DWORD 0 */ + u8 element_id; /* Command packet type. */ + u8 length; /* Command packet length. */ + /* TX Feedback Info Field */ + u8 TID:4; + u8 fail_reason:3; + u8 tok:1; /* Transmit ok. */ + u8 reserve1:4; + u8 pkt_type:2; + u8 bandwidth:1; + u8 qos_pkt:1; + + /* DWORD 1 */ + u8 reserve2; + /* TX Feedback Info Field */ + u8 retry_cnt; + u16 pkt_id; + + /* DWORD 3 */ + u16 seq_num; + u8 s_rate; /* Start rate. */ + u8 f_rate; /* Final rate. */ + + /* DWORD 4 */ + u8 s_rts_rate; + u8 f_rts_rate; + u16 pkt_length; + + /* DWORD 5 */ + u16 reserve3; + u16 duration; +} cmpk_txfb_t; + +/* + * 2. RX side: Interrupt status packet. + * It includes Beacon State, Beacon Timer Interrupt + * and other useful informations in MAC ISR Reg. + */ +typedef struct tag_cmd_pkt_interrupt_status { + u8 element_id; /* Command packet type. */ + u8 length; /* Command packet length. */ + u16 reserve; + u32 interrupt_status; /* Interrupt Status. */ +} cmpk_intr_sta_t; + + +/* + * 3. TX side: Set configuration packet. + */ +typedef struct tag_cmd_pkt_set_configuration { + u8 element_id; /* Command packet type. */ + u8 length; /* Command packet length. */ u16 reserve1; - u8 length; // Command packet length - u8 element_id; // Command packet type - - // DW 1 - u16 txfail; // Tx Fail count - u16 txok; // Tx ok count - - // DW 2 - u16 txmcok; // tx multicast - u16 txretry; // Tx Retry count - - // DW 3 - u16 txucok; // tx unicast - u16 txbcok; // tx broadcast - - // DW 4 - u16 txbcfail; // - u16 txmcfail; // - - // DW 5 - u16 reserve2; // - u16 txucfail; // - - // DW 6-8 - u32 txmclength; - u32 txbclength; - u32 txuclength; - - // DW 9 - u16 reserve3_23; - u8 reserve3_1; - u8 rate; -}__attribute__((packed)) cmpk_tx_status_t; - -/* 6. Debug feedback message. */ -/* 2007/10/23 MH Define RX debug message */ -typedef struct tag_rx_debug_message_feedback -{ - // For endian transfer --> for driver - // DW 0 - u16 reserve1; - u8 length; // Command packet length - u8 element_id; // Command packet type - - // DW 1-?? - // Variable debug message. - -}cmpk_rx_dbginfo_t; - -/* 2008/03/20 MH Define transmit rate history. For big endian format. */ -typedef struct tag_tx_rate_history -{ - // For endian transfer --> for driver - // DW 0 - u8 element_id; // Command packet type - u8 length; // Command packet length - u16 reserved1; - - // DW 1-2 CCK rate counter - u16 cck[4]; - - // DW 3-6 - u16 ofdm[8]; - - // DW 7-14 - //UINT16 MCS_BW0_SG0[16]; - - // DW 15-22 - //UINT16 MCS_BW1_SG0[16]; - - // DW 23-30 - //UINT16 MCS_BW0_SG1[16]; - - // DW 31-38 - //UINT16 MCS_BW1_SG1[16]; - - // DW 7-14 BW=0 SG=0 - // DW 15-22 BW=1 SG=0 - // DW 23-30 BW=0 SG=1 - // DW 31-38 BW=1 SG=1 - u16 ht_mcs[4][16]; - -}__attribute__((packed)) cmpk_tx_rahis_t; + u8 cfg_reserve1:3; + u8 cfg_size:2; /* Configuration info. */ + u8 cfg_type:2; /* Configuration info. */ + u8 cfg_action:1; /* Configuration info. */ + u8 cfg_reserve2; /* Configuration info. */ + u8 cfg_page:4; /* Configuration info. */ + u8 cfg_reserve3:4; /* Configuration info. */ + u8 cfg_offset; /* Configuration info. */ + u32 value; + u32 mask; +} cmpk_set_cfg_t; + +/* + * 4. Both side : TX/RX query configuraton packet. + * The query structure is the same as set configuration. + */ +#define cmpk_query_cfg_t cmpk_set_cfg_t -typedef enum tag_command_packet_directories -{ +/* + * 5. Multi packet feedback status. + */ +typedef struct tag_tx_stats_feedback { + /* + * For endian transfer + * Driver will not the same as firmware structure. + */ + /* DW 0 */ + u16 reserve1; + u8 length; /* Command packet length */ + u8 element_id; /* Command packet type */ + + /* DW 1 */ + u16 txfail; /* Tx Fail count */ + u16 txok; /* Tx ok count */ + + /* DW 2 */ + u16 txmcok; /* tx multicast */ + u16 txretry; /* Tx Retry count */ + + /* DW 3 */ + u16 txucok; /* tx unicast */ + u16 txbcok; /* tx broadcast */ + + /* DW 4 */ + u16 txbcfail; + u16 txmcfail; + + /* DW 5 */ + u16 reserve2; + u16 txucfail; + + /* DW 6-8 */ + u32 txmclength; + u32 txbclength; + u32 txuclength; + + /* DW 9 */ + u16 reserve3_23; + u8 reserve3_1; + u8 rate; +} __attribute__((packed)) cmpk_tx_status_t; + +/* + * 6. Debug feedback message. + */ +typedef struct tag_rx_debug_message_feedback { + /* For endian transfer --> for driver */ + /* DW 0 */ + u16 reserve1; + u8 length; /* Command packet length */ + u8 element_id; /* Command packet type */ +} cmpk_rx_dbginfo_t; + +/* + * Define transmit rate history. For big endian format. + */ +typedef struct tag_tx_rate_history { + /* For endian transfer --> for driver */ + /* DW 0 */ + u8 element_id; /* Command packet type */ + u8 length; /* Command packet length */ + u16 reserved1; + /* DW 1-2 CCK rate counter */ + u16 cck[4]; + /* DW 3-6 */ + u16 ofdm[8]; + u16 ht_mcs[4][16]; +} __attribute__((packed)) cmpk_tx_rahis_t; + +typedef enum tag_command_packet_directories { RX_TX_FEEDBACK = 0, - RX_INTERRUPT_STATUS = 1, - TX_SET_CONFIG = 2, - BOTH_QUERY_CONFIG = 3, - RX_TX_STATUS = 4, - RX_DBGINFO_FEEDBACK = 5, - RX_TX_PER_PKT_FEEDBACK = 6, - RX_TX_RATE_HISTORY = 7, + RX_INTERRUPT_STATUS = 1, + TX_SET_CONFIG = 2, + BOTH_QUERY_CONFIG = 3, + RX_TX_STATUS = 4, + RX_DBGINFO_FEEDBACK = 5, + RX_TX_PER_PKT_FEEDBACK = 6, + RX_TX_RATE_HISTORY = 7, RX_CMD_ELE_MAX -}cmpk_element_e; +} cmpk_element_e; -extern bool cmpk_message_handle_tx(struct net_device *dev, u8* codevirtualaddress, u32 packettype, u32 buffer_len); +extern bool cmpk_message_handle_tx(struct net_device *dev, + u8 *codevirtualaddress, + u32 packettype, + u32 buffer_len); -extern u32 cmpk_message_handle_rx(struct net_device *dev, struct ieee80211_rx_stats * pstats); -extern bool SendTxCommandPacket( struct net_device *dev, void* pData, u32 DataLen); +extern u32 cmpk_message_handle_rx(struct net_device *dev, + struct ieee80211_rx_stats *pstats); +extern bool SendTxCommandPacket(struct net_device *dev, + void *pData, + u32 DataLen); #endif -- cgit v0.10.2 From 1e1d25cb0d248d58ac8e586ebb23bf2f6dc55c0b Mon Sep 17 00:00:00 2001 From: Michael Tate Date: Sun, 7 Mar 2010 18:19:39 +0400 Subject: staging: frontier: Fix coding style issues in 2 files. This patch removes unecessary whitespace before quoted newlines in two files. One warning in each file remains unresolved. Signed-off-by: Michael Tate Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/frontier/alphatrack.c b/drivers/staging/frontier/alphatrack.c index a50a215..ce4d663 100644 --- a/drivers/staging/frontier/alphatrack.c +++ b/drivers/staging/frontier/alphatrack.c @@ -238,7 +238,7 @@ static void usb_alphatrack_interrupt_in_callback(struct urb *urb) if (urb->actual_length != INPUT_CMD_SIZE) { dev_warn(&dev->intf->dev, "Urb length was %d bytes!!" - "Do something intelligent \n", urb->actual_length); + "Do something intelligent\n", urb->actual_length); } else { alphatrack_ocmd_info(&dev->intf->dev, &(*dev->ring_buffer)[dev->ring_tail].cmd, @@ -599,7 +599,7 @@ static ssize_t usb_alphatrack_write(struct file *file, } if (dev->interrupt_out_endpoint == NULL) { - err("Endpoint should not be be null! \n"); + err("Endpoint should not be be null!\n"); goto unlock_exit; } @@ -771,7 +771,7 @@ static int usb_alphatrack_probe(struct usb_interface *intf, kmalloc(sizeof(struct alphatrack_ocmd) * true_size, GFP_KERNEL); if (!dev->write_buffer) { - dev_err(&intf->dev, "Couldn't allocate write_buffer \n"); + dev_err(&intf->dev, "Couldn't allocate write_buffer\n"); goto error; } diff --git a/drivers/staging/frontier/tranzport.c b/drivers/staging/frontier/tranzport.c index 2f03f43..1f91001 100644 --- a/drivers/staging/frontier/tranzport.c +++ b/drivers/staging/frontier/tranzport.c @@ -255,7 +255,7 @@ static void usb_tranzport_interrupt_in_callback(struct urb *urb) if (urb->actual_length != 8) { dev_warn(&dev->intf->dev, "Urb length was %d bytes!!" - "Do something intelligent \n", + "Do something intelligent\n", urb->actual_length); } else { dbg_info(&dev->intf->dev, @@ -724,7 +724,7 @@ static ssize_t usb_tranzport_write(struct file *file, } if (dev->interrupt_out_endpoint == NULL) { - err("Endpoint should not be be null! \n"); + err("Endpoint should not be be null!\n"); goto unlock_exit; } -- cgit v0.10.2 From 4dbb8e57c1ef23e5822b85a646b4ba31a98b9864 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Mon, 8 Mar 2010 16:39:24 +0300 Subject: staging: rt2860: off by one errors The code is trying to say that if the offset is higher than the max it should be set to the max, but there is an off by one bug and it sets it one passed the end of the array. Signed-off-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c index de4b627..33a6939 100644 --- a/drivers/staging/rt2860/sta_ioctl.c +++ b/drivers/staging/rt2860/sta_ioctl.c @@ -1047,8 +1047,7 @@ int rt_ioctl_giwscan(struct net_device *dev, if (tmpRate == 0x6c && pAdapter->ScanTab.BssEntry[i].HtCapabilityLen > 0) { - int rate_count = - sizeof(ralinkrate) / sizeof(__s32); + int rate_count = ARRAY_SIZE(ralinkrate); struct rt_ht_cap_info capInfo = pAdapter->ScanTab.BssEntry[i].HtCapability. HtCapInfo; @@ -1061,10 +1060,11 @@ int rt_ioctl_giwscan(struct net_device *dev, int rate_index = 12 + ((u8)capInfo.ChannelWidth * 24) + ((u8)shortGI * 48) + ((u8)maxMCS); + if (rate_index < 0) rate_index = 0; - if (rate_index > rate_count) - rate_index = rate_count; + if (rate_index >= rate_count) + rate_index = rate_count - 1; iwe.u.bitrate.value = ralinkrate[rate_index] * 500000; } @@ -2338,7 +2338,7 @@ int rt_ioctl_giwrate(struct net_device *dev, */ GET_PAD_FROM_NET_DEV(pAd, dev); - rate_count = sizeof(ralinkrate) / sizeof(__s32); + rate_count = ARRAY_SIZE(ralinkrate); /*check if the interface is down */ if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE)) { DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n")); @@ -2369,8 +2369,8 @@ int rt_ioctl_giwrate(struct net_device *dev, if (rate_index < 0) rate_index = 0; - if (rate_index > rate_count) - rate_index = rate_count; + if (rate_index >= rate_count) + rate_index = rate_count - 1; wrqu->bitrate.value = ralinkrate[rate_index] * 500000; wrqu->bitrate.disabled = 0; -- cgit v0.10.2 From 76ce24f3e58b3d158f3eca88c339170c05bbefa2 Mon Sep 17 00:00:00 2001 From: Jason Date: Mon, 8 Mar 2010 02:36:21 -0800 Subject: staging: wavelan: fix coding style of first 1000 lines in wavelan.c Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wavelan/wavelan.c b/drivers/staging/wavelan/wavelan.c index 54ca631..37ede43 100644 --- a/drivers/staging/wavelan/wavelan.c +++ b/drivers/staging/wavelan/wavelan.c @@ -36,7 +36,7 @@ static u8 wv_irq_to_psa(int irq) /*------------------------------------------------------------------*/ /* - * Translate PSA irq parameter to irq number + * Translate PSA irq parameter to irq number */ static int __init wv_psa_to_irq(u8 irqval) { @@ -55,7 +55,7 @@ static int __init wv_psa_to_irq(u8 irqval) * * One major difference with the PCMCIA hardware (except the port mapping) * is that we have to keep the state of the Host Control Register - * because of the interrupt enable & bus size flags. + *because of the interrupt enable & bus size flags. */ /*------------------------------------------------------------------*/ @@ -64,7 +64,7 @@ static int __init wv_psa_to_irq(u8 irqval) */ static inline u16 hasr_read(unsigned long ioaddr) { - return (inw(HASR(ioaddr))); + return inw(HASR(ioaddr)); } /* hasr_read */ /*------------------------------------------------------------------*/ @@ -132,11 +132,11 @@ static inline void wv_16_on(unsigned long ioaddr, u16 hacr) * Disable interrupts on the WaveLAN hardware. * (called by wv_82586_stop()) */ -static inline void wv_ints_off(struct net_device * dev) +static inline void wv_ints_off(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; - + lp->hacr &= ~HACR_INTRON; hacr_write(ioaddr, lp->hacr); } /* wv_ints_off */ @@ -146,7 +146,7 @@ static inline void wv_ints_off(struct net_device * dev) * Enable interrupts on the WaveLAN hardware. * (called by wv_hw_reset()) */ -static inline void wv_ints_on(struct net_device * dev) +static inline void wv_ints_on(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -167,9 +167,11 @@ static inline void wv_ints_on(struct net_device * dev) /* * Read bytes from the PSA. */ -static void psa_read(unsigned long ioaddr, u16 hacr, int o, /* offset in PSA */ - u8 * b, /* buffer to fill */ - int n) +static void psa_read(unsigned long ioaddr, + u16 hacr, + int o, /* offset in PSA */ + u8 *b, /*buffer to fill */ + int n) { /* size to read */ wv_16_off(ioaddr, hacr); @@ -186,9 +188,11 @@ static void psa_read(unsigned long ioaddr, u16 hacr, int o, /* offset in PSA */ /* * Write the Parameter Storage Area to the WaveLAN card's memory. */ -static void psa_write(unsigned long ioaddr, u16 hacr, int o, /* Offset in PSA */ - u8 * b, /* Buffer in memory */ - int n) +static void psa_write(unsigned long ioaddr, + u16 hacr, + int o, /* Offset in PSA */ + u8 *b, /*buffer in memory */ + int n) { /* Length of buffer */ int count = 0; @@ -203,8 +207,8 @@ static void psa_write(unsigned long ioaddr, u16 hacr, int o, /* Offset in PSA */ /* Wait for the memory to finish its write cycle */ count = 0; - while ((count++ < 100) && - (hasr_read(ioaddr) & HASR_PSA_BUSY)) mdelay(1); + while ((count++ < 100) && (hasr_read(ioaddr) & HASR_PSA_BUSY)) + mdelay(1); } wv_16_on(ioaddr, hacr); @@ -221,8 +225,8 @@ static void psa_write(unsigned long ioaddr, u16 hacr, int o, /* Offset in PSA */ * The Windows drivers don't use the CRC, but the AP and the PtP tool * depend on it. */ -static u16 psa_crc(u8 * psa, /* The PSA */ - int size) +static u16 psa_crc(u8 *psa, /* The PSA */ + int size) { /* Number of short for CRC */ int byte_cnt; /* Loop on the PSA */ u16 crc_bytes = 0; /* Data in the PSA */ @@ -247,7 +251,9 @@ static u16 psa_crc(u8 * psa, /* The PSA */ /* * update the checksum field in the Wavelan's PSA */ -static void update_psa_checksum(struct net_device * dev, unsigned long ioaddr, u16 hacr) +static void update_psa_checksum(struct net_device *dev, + unsigned long ioaddr, + u16 hacr) { #ifdef SET_PSA_CRC psa_t psa; @@ -279,7 +285,8 @@ static void update_psa_checksum(struct net_device * dev, unsigned long ioaddr, u if (crc != 0) printk(KERN_WARNING - "%s: update_psa_checksum(): CRC does not agree with PSA data (even after recalculating)\n", + "%s: update_psa_checksum(): CRC does not \ + agree with PSA data (even after recalculating)\n", dev->name); #endif /* DEBUG_IOCTL_INFO */ #endif /* SET_PSA_CRC */ @@ -305,7 +312,7 @@ static void mmc_out(unsigned long ioaddr, u16 o, u8 d) * Routine to write bytes to the Modem Management Controller. * We start at the end because it is the way it should be! */ -static void mmc_write(unsigned long ioaddr, u8 o, u8 * b, int n) +static void mmc_write(unsigned long ioaddr, u8 o, u8 *b, int n) { o += n; b += n; @@ -340,7 +347,7 @@ static u8 mmc_in(unsigned long ioaddr, u16 o) * (code has just been moved in the above function) * We start at the end because it is the way it should be! */ -static inline void mmc_read(unsigned long ioaddr, u8 o, u8 * b, int n) +static inline void mmc_read(unsigned long ioaddr, u8 o, u8 *b, int n) { o += n; b += n; @@ -369,15 +376,16 @@ static inline int mmc_encr(unsigned long ioaddr) * Wait for the frequency EEPROM to complete a command. * I hope this one will be optimally inlined. */ -static inline void fee_wait(unsigned long ioaddr, /* I/O port of the card */ - int delay, /* Base delay to wait for */ +static inline void fee_wait(unsigned long ioaddr, /* I/O port of the card */ + int delay, /*base delay to wait for */ int number) { /* Number of time to wait */ int count = 0; /* Wait only a limited time */ while ((count++ < number) && (mmc_in(ioaddr, mmroff(0, mmr_fee_status)) & - MMR_FEE_STATUS_BUSY)) udelay(delay); + MMR_FEE_STATUS_BUSY)) + udelay(delay); } /*------------------------------------------------------------------*/ @@ -386,7 +394,7 @@ static inline void fee_wait(unsigned long ioaddr, /* I/O port of the card */ */ static void fee_read(unsigned long ioaddr, /* I/O port of the card */ u16 o, /* destination offset */ - u16 * b, /* data buffer */ + u16 *b, /* data buffer */ int n) { /* number of registers */ b += n; /* Position at the end of the area */ @@ -414,12 +422,12 @@ static void fee_read(unsigned long ioaddr, /* I/O port of the card */ /* * Write bytes from the Frequency EEPROM (frequency select cards). * This is a bit complicated, because the frequency EEPROM has to - * be unprotected and the write enabled. + *be unprotected and the write enabled. * Jean II */ static void fee_write(unsigned long ioaddr, /* I/O port of the card */ u16 o, /* destination offset */ - u16 * b, /* data buffer */ + u16 *b, /* data buffer */ int n) { /* number of registers */ b += n; /* Position at the end of the area. */ @@ -473,7 +481,9 @@ static void fee_write(unsigned long ioaddr, /* I/O port of the card */ mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_WRITE); - /* WaveLAN documentation says to wait at least 10 ms for EEBUSY = 0 */ + /* WaveLAN documentation says to + * wait at least 10 ms for EEBUSY = 0 + */ mdelay(10); fee_wait(ioaddr, 10, 100); } @@ -504,7 +514,7 @@ static void fee_write(unsigned long ioaddr, /* I/O port of the card */ * Why does inlining this function make it fail? */ static /*inline */ void obram_read(unsigned long ioaddr, - u16 o, u8 * b, int n) + u16 o, u8 *b, int n) { outw(o, PIOR1(ioaddr)); insw(PIOP1(ioaddr), (unsigned short *) b, (n + 1) >> 1); @@ -514,7 +524,7 @@ static /*inline */ void obram_read(unsigned long ioaddr, /* * Write bytes to the on-board RAM. */ -static inline void obram_write(unsigned long ioaddr, u16 o, u8 * b, int n) +static inline void obram_write(unsigned long ioaddr, u16 o, u8 *b, int n) { outw(o, PIOR1(ioaddr)); outsw(PIOP1(ioaddr), (unsigned short *) b, (n + 1) >> 1); @@ -524,7 +534,7 @@ static inline void obram_write(unsigned long ioaddr, u16 o, u8 * b, int n) /* * Acknowledge the reading of the status issued by the i82586. */ -static void wv_ack(struct net_device * dev) +static void wv_ack(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -566,7 +576,7 @@ static void wv_ack(struct net_device * dev) * Set channel attention bit and busy wait until command has * completed, then acknowledge completion of the command. */ -static int wv_synchronous_cmd(struct net_device * dev, const char *str) +static int wv_synchronous_cmd(struct net_device *dev, const char *str) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -613,7 +623,7 @@ static int wv_synchronous_cmd(struct net_device * dev, const char *str) * Check if done, and if OK. */ static int -wv_config_complete(struct net_device * dev, unsigned long ioaddr, net_local * lp) +wv_config_complete(struct net_device *dev, unsigned long ioaddr, net_local * lp) { unsigned short mcs_addr; unsigned short status; @@ -641,7 +651,8 @@ wv_config_complete(struct net_device * dev, unsigned long ioaddr, net_local * lp /* Check mc_config command */ if ((status & AC_SFLD_OK) != AC_SFLD_OK) printk(KERN_INFO - "%s: wv_config_complete(): set_multicast_address failed; status = 0x%x\n", + "%s: wv_config_complete(): \ + set_multicast_address failed; status = 0x%x\n", dev->name, status); /* check ia-config command */ @@ -650,7 +661,8 @@ wv_config_complete(struct net_device * dev, unsigned long ioaddr, net_local * lp (unsigned char *) &status, sizeof(status)); if ((status & AC_SFLD_OK) != AC_SFLD_OK) printk(KERN_INFO - "%s: wv_config_complete(): set_MAC_address failed; status = 0x%x\n", + "%s: wv_config_complete(): set_MAC_address \ + failed; status = 0x%x\n", dev->name, status); /* Check config command. */ @@ -659,7 +671,8 @@ wv_config_complete(struct net_device * dev, unsigned long ioaddr, net_local * lp (unsigned char *) &status, sizeof(status)); if ((status & AC_SFLD_OK) != AC_SFLD_OK) printk(KERN_INFO - "%s: wv_config_complete(): configure failed; status = 0x%x\n", + "%s: wv_config_complete(): configure failed; \ + status = 0x%x\n", dev->name, status); #endif /* DEBUG_CONFIG_ERROR */ @@ -680,7 +693,9 @@ wv_config_complete(struct net_device * dev, unsigned long ioaddr, net_local * lp * (called in wavelan_interrupt()). * Note : the spinlock is already grabbed for us. */ -static int wv_complete(struct net_device * dev, unsigned long ioaddr, net_local * lp) +static int wv_complete(struct net_device *dev, + unsigned long ioaddr, + net_local *lp) { int nreaped = 0; @@ -722,9 +737,8 @@ if (lp->tx_n_in_use > 0) /* Next one in the chain */ lp->tx_first_in_use += TXBLOCKZ; if (lp->tx_first_in_use >= - OFFSET_CU + - NTXBLOCKS * TXBLOCKZ) lp->tx_first_in_use -= - NTXBLOCKS * TXBLOCKZ; + OFFSET_CU + NTXBLOCKS * TXBLOCKZ) + lp->tx_first_in_use -= NTXBLOCKS * TXBLOCKZ; } /* Hack for reconfiguration */ @@ -741,7 +755,8 @@ if (lp->tx_n_in_use > 0) #ifdef DEBUG_TX_INFO if (ncollisions > 0) printk(KERN_DEBUG - "%s: wv_complete(): tx completed after %d collisions.\n", + "%s: wv_complete(): tx completed after \ + %d collisions.\n", dev->name, ncollisions); #endif } else { @@ -758,7 +773,8 @@ if (lp->tx_n_in_use > 0) dev->stats.tx_carrier_errors++; #ifdef DEBUG_TX_FAIL printk(KERN_DEBUG - "%s: wv_complete(): tx error: lost CTS.\n", + "%s: wv_complete(): tx error: \ + lost CTS.\n", dev->name); #endif } @@ -766,7 +782,8 @@ if (lp->tx_n_in_use > 0) dev->stats.tx_fifo_errors++; #ifdef DEBUG_TX_FAIL printk(KERN_DEBUG - "%s: wv_complete(): tx error: slow DMA.\n", + "%s: wv_complete(): tx error: \ + slow DMA.\n", dev->name); #endif } @@ -774,7 +791,8 @@ if (lp->tx_n_in_use > 0) dev->stats.tx_heartbeat_errors++; #ifdef DEBUG_TX_FAIL printk(KERN_DEBUG - "%s: wv_complete(): tx error: heart beat.\n", + "%s: wv_complete(): tx error: \ + heart beat.\n", dev->name); #endif } @@ -782,7 +800,8 @@ if (lp->tx_n_in_use > 0) dev->stats.tx_aborted_errors++; #ifdef DEBUG_TX_FAIL printk(KERN_DEBUG - "%s: wv_complete(): tx error: too many collisions.\n", + "%s: wv_complete(): tx error: \ + too many collisions.\n", dev->name); #endif } @@ -804,9 +823,9 @@ if (lp->tx_n_in_use > 0) /* * Inform upper layers. */ - if (lp->tx_n_in_use < NTXBLOCKS - 1) { + if (lp->tx_n_in_use < NTXBLOCKS - 1) netif_wake_queue(dev); - } + #ifdef DEBUG_INTERRUPT_TRACE printk(KERN_DEBUG "%s: <-wv_complete()\n", dev->name); #endif @@ -816,13 +835,13 @@ if (lp->tx_n_in_use > 0) /*------------------------------------------------------------------*/ /* * Reconfigure the i82586, or at least ask for it. - * Because wv_82586_config uses a transmission buffer, we must do it + *because wv_82586_config uses a transmission buffer, we must do it * when we are sure that there is one left, so we do it now * or in wavelan_packet_xmit() (I can't find any better place, * wavelan_interrupt is not an option), so you may experience * delays sometimes. */ -static void wv_82586_reconfig(struct net_device * dev) +static void wv_82586_reconfig(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long flags; @@ -831,13 +850,12 @@ static void wv_82586_reconfig(struct net_device * dev) lp->reconfig_82586 = 1; /* Check if we can do it now ! */ - if((netif_running(dev)) && !(netif_queue_stopped(dev))) { + if ((netif_running(dev)) && !(netif_queue_stopped(dev))) { spin_lock_irqsave(&lp->spinlock, flags); /* May fail */ wv_82586_config(dev); spin_unlock_irqrestore(&lp->spinlock, flags); - } - else { + } else { #ifdef DEBUG_CONFIG_INFO printk(KERN_DEBUG "%s: wv_82586_reconfig(): delayed (state = %lX)\n", @@ -857,7 +875,7 @@ static void wv_82586_reconfig(struct net_device * dev) /* * Print the formatted contents of the Parameter Storage Area. */ -static void wv_psa_show(psa_t * p) +static void wv_psa_show(psa_t *p) { printk(KERN_DEBUG "##### WaveLAN PSA contents: #####\n"); printk(KERN_DEBUG "psa_io_base_addr_1: 0x%02X %02X %02X %02X\n", @@ -919,13 +937,13 @@ static void wv_psa_show(psa_t * p) * Print the formatted status of the Modem Management Controller. * This function needs to be completed. */ -static void wv_mmc_show(struct net_device * dev) +static void wv_mmc_show(struct net_device *dev) { unsigned long ioaddr = dev->base_addr; net_local *lp = netdev_priv(dev); mmr_t m; - /* Basic check */ + /*basic check */ if (hasr_read(ioaddr) & HASR_NO_CLK) { printk(KERN_WARNING "%s: wv_mmc_show: modem not connected\n", @@ -935,7 +953,7 @@ static void wv_mmc_show(struct net_device * dev) /* Read the mmc */ mmc_out(ioaddr, mmwoff(0, mmw_freeze), 1); - mmc_read(ioaddr, 0, (u8 *) & m, sizeof(m)); + mmc_read(ioaddr, 0, (u8 *) &m, sizeof(m)); mmc_out(ioaddr, mmwoff(0, mmw_freeze), 0); /* Don't forget to update statistics */ @@ -1100,7 +1118,7 @@ static void wv_scb_show(unsigned long ioaddr) /* * Print the formatted status of the i82586's receive unit. */ -static void wv_ru_show(struct net_device * dev) +static void wv_ru_show(struct net_device *dev) { printk(KERN_DEBUG "##### WaveLAN i82586 receiver unit status: #####\n"); @@ -1115,7 +1133,7 @@ static void wv_ru_show(struct net_device * dev) /* * Display info about one control block of the i82586 memory. */ -static void wv_cu_show_one(struct net_device * dev, net_local * lp, int i, u16 p) +static void wv_cu_show_one(struct net_device *dev, net_local * lp, int i, u16 p) { unsigned long ioaddr; ac_tx_t actx; @@ -1144,7 +1162,7 @@ static void wv_cu_show_one(struct net_device * dev, net_local * lp, int i, u16 p /* * Print status of the command unit of the i82586. */ -static void wv_cu_show(struct net_device * dev) +static void wv_cu_show(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned int i; @@ -1170,7 +1188,7 @@ static void wv_cu_show(struct net_device * dev) /* * Print the formatted status of the WaveLAN PCMCIA device driver. */ -static void wv_dev_show(struct net_device * dev) +static void wv_dev_show(struct net_device *dev) { printk(KERN_DEBUG "dev:"); printk(" state=%lX,", dev->state); @@ -1184,7 +1202,7 @@ static void wv_dev_show(struct net_device * dev) * Print the formatted status of the WaveLAN PCMCIA device driver's * private information. */ -static void wv_local_show(struct net_device * dev) +static void wv_local_show(struct net_device *dev) { net_local *lp; @@ -1245,7 +1263,7 @@ static inline void wv_packet_info(u8 * p, /* Packet to dump */ * This is the information which is displayed by the driver at startup. * There are lots of flags for configuring it to your liking. */ -static void wv_init_info(struct net_device * dev) +static void wv_init_info(struct net_device *dev) { short ioaddr = dev->base_addr; net_local *lp = netdev_priv(dev); @@ -1355,7 +1373,7 @@ static void wv_init_info(struct net_device * dev) * num_addrs > 0 Multicast mode, receive normal and MC packets, * and do best-effort filtering. */ -static void wavelan_set_multicast_list(struct net_device * dev) +static void wavelan_set_multicast_list(struct net_device *dev) { net_local *lp = netdev_priv(dev); @@ -1425,7 +1443,7 @@ static void wavelan_set_multicast_list(struct net_device * dev) * (Note : it was a nice way to test the reconfigure stuff...) */ #ifdef SET_MAC_ADDRESS -static int wavelan_set_mac_address(struct net_device * dev, void *addr) +static int wavelan_set_mac_address(struct net_device *dev, void *addr) { struct sockaddr *mac = addr; @@ -1614,7 +1632,7 @@ static int wv_set_frequency(unsigned long ioaddr, /* I/O port of the card */ return 0; } else - return -EINVAL; /* Bah, never get there... */ + return -EINVAL; /*bah, never get there... */ } /*------------------------------------------------------------------*/ @@ -1663,7 +1681,7 @@ static int wv_frequency_list(unsigned long ioaddr, /* I/O port of the card */ * address with our list, and if they match, get the statistics. * Sorry, but this function really needs the wireless extensions. */ -static inline void wl_spy_gather(struct net_device * dev, +static inline void wl_spy_gather(struct net_device *dev, u8 * mac, /* MAC address */ u8 * stats) /* Statistics to gather */ { @@ -1689,7 +1707,7 @@ static inline void wl_spy_gather(struct net_device * dev, * With this histogram you may detect if one WaveLAN is really weak, * or you may also calculate the mean and standard deviation of the level. */ -static inline void wl_his_gather(struct net_device * dev, u8 * stats) +static inline void wl_his_gather(struct net_device *dev, u8 * stats) { /* Statistics to gather */ net_local *lp = netdev_priv(dev); u8 level = stats[0] & MMR_SIGNAL_LVL; @@ -1981,7 +1999,7 @@ static int wavelan_set_encode(struct net_device *dev, } if(!ret) { - /* Basic checking... */ + /*basic checking... */ if (wrqu->encoding.length == 8) { /* Copy the key in the driver */ memcpy(psa.psa_encryption_key, extra, @@ -2319,7 +2337,7 @@ static const iw_handler wavelan_handler[] = NULL, /* SIOCGIWTXPOW */ NULL, /* SIOCSIWRETRY */ NULL, /* SIOCGIWRETRY */ - /* Bummer ! Why those are only at the end ??? */ + /*bummer ! Why those are only at the end ??? */ wavelan_set_encode, /* SIOCSIWENCODE */ wavelan_get_encode, /* SIOCGIWENCODE */ }; @@ -2358,7 +2376,7 @@ static const struct iw_handler_def wavelan_handler_def = * Get wireless statistics. * Called by /proc/net/wireless */ -static iw_stats *wavelan_get_wireless_stats(struct net_device * dev) +static iw_stats *wavelan_get_wireless_stats(struct net_device *dev) { unsigned long ioaddr = dev->base_addr; net_local *lp = netdev_priv(dev); @@ -2434,7 +2452,7 @@ static iw_stats *wavelan_get_wireless_stats(struct net_device * dev) * (called by wv_packet_rcv()) */ static void -wv_packet_read(struct net_device * dev, u16 buf_off, int sksize) +wv_packet_read(struct net_device *dev, u16 buf_off, int sksize) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -2527,7 +2545,7 @@ wv_packet_read(struct net_device * dev, u16 buf_off, int sksize) * (called in wavelan_interrupt()). * Note : the spinlock is already grabbed for us. */ -static void wv_receive(struct net_device * dev) +static void wv_receive(struct net_device *dev) { unsigned long ioaddr = dev->base_addr; net_local *lp = netdev_priv(dev); @@ -2710,7 +2728,7 @@ static void wv_receive(struct net_device * dev) * * (called in wavelan_packet_xmit()) */ -static int wv_packet_write(struct net_device * dev, void *buf, short length) +static int wv_packet_write(struct net_device *dev, void *buf, short length) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -2842,7 +2860,7 @@ static int wv_packet_write(struct net_device * dev, void *buf, short length) * to send the packet. */ static netdev_tx_t wavelan_packet_xmit(struct sk_buff *skb, - struct net_device * dev) + struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long flags; @@ -2854,7 +2872,7 @@ static netdev_tx_t wavelan_packet_xmit(struct sk_buff *skb, #endif /* - * Block a timer-based transmit from overlapping. + *block a timer-based transmit from overlapping. * In other words, prevent reentering this routine. */ netif_stop_queue(dev); @@ -2905,7 +2923,7 @@ static netdev_tx_t wavelan_packet_xmit(struct sk_buff *skb, * Routine to initialize the Modem Management Controller. * (called by wv_hw_reset()) */ -static int wv_mmc_init(struct net_device * dev) +static int wv_mmc_init(struct net_device *dev) { unsigned long ioaddr = dev->base_addr; net_local *lp = netdev_priv(dev); @@ -3077,7 +3095,7 @@ static int wv_mmc_init(struct net_device * dev) * Start the receive unit. * (called by wv_hw_reset()) */ -static int wv_ru_start(struct net_device * dev) +static int wv_ru_start(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -3159,8 +3177,8 @@ static int wv_ru_start(struct net_device * dev) * self-loop of the first transmit block. * * Here we create the list of send buffers used to transmit packets - * between the PC and the command unit. For each buffer, we create a - * buffer descriptor (pointing on the buffer), a transmit command + *between the PC and the command unit. For each buffer, we create a + *buffer descriptor (pointing on the buffer), a transmit command * (pointing to the buffer descriptor) and a NOP command. * The transmit command is linked to the NOP, and the NOP to itself. * When we will have finished executing the transmit command, we will @@ -3169,7 +3187,7 @@ static int wv_ru_start(struct net_device * dev) * * (called by wv_hw_reset()) */ -static int wv_cu_start(struct net_device * dev) +static int wv_cu_start(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -3270,7 +3288,7 @@ static int wv_cu_start(struct net_device * dev) * * (called by wv_hw_reset()) */ -static int wv_82586_start(struct net_device * dev) +static int wv_82586_start(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -3402,7 +3420,7 @@ static int wv_82586_start(struct net_device * dev) * * (called by wv_hw_reset(), wv_82586_reconfig(), wavelan_packet_xmit()) */ -static void wv_82586_config(struct net_device * dev) +static void wv_82586_config(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -3449,7 +3467,7 @@ static void wv_82586_config(struct net_device * dev) tx_addr = txblock; nop_addr = tx_addr + sizeof(tx); tbd_addr = nop_addr + sizeof(nop); - cfg_addr = tbd_addr + sizeof(tbd_t); /* beginning of the buffer */ + cfg_addr = tbd_addr + sizeof(tbd_t); /*beginning of the buffer */ ias_addr = cfg_addr + sizeof(cfg); mcs_addr = ias_addr + sizeof(ias); @@ -3578,7 +3596,7 @@ static void wv_82586_config(struct net_device * dev) * WaveLAN controller (i82586). * (called by wavelan_close()) */ -static void wv_82586_stop(struct net_device * dev) +static void wv_82586_stop(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -3615,7 +3633,7 @@ static void wv_82586_stop(struct net_device * dev) * 5. Start the LAN controller's receive unit * (called by wavelan_interrupt(), wavelan_watchdog() & wavelan_open()) */ -static int wv_hw_reset(struct net_device * dev) +static int wv_hw_reset(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long ioaddr = dev->base_addr; @@ -3939,7 +3957,7 @@ static void wavelan_watchdog(struct net_device * dev) * Configure and start up the WaveLAN PCMCIA adaptor. * Called by NET3 when it "opens" the device. */ -static int wavelan_open(struct net_device * dev) +static int wavelan_open(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long flags; @@ -3994,7 +4012,7 @@ static int wavelan_open(struct net_device * dev) * Shut down the WaveLAN ISA card. * Called by NET3 when it "closes" the device. */ -static int wavelan_close(struct net_device * dev) +static int wavelan_close(struct net_device *dev) { net_local *lp = netdev_priv(dev); unsigned long flags; @@ -4040,7 +4058,7 @@ static const struct net_device_ops wavelan_netdev_ops = { /*------------------------------------------------------------------*/ /* * Probe an I/O address, and if the WaveLAN is there configure the - * device structure + *device structure * (called by wavelan_probe() and via init_module()). */ static int __init wavelan_config(struct net_device *dev, unsigned short ioaddr) @@ -4114,7 +4132,7 @@ static int __init wavelan_config(struct net_device *dev, unsigned short ioaddr) memset(netdev_priv(dev), 0, sizeof(net_local)); lp = netdev_priv(dev); - /* Back link to the device structure. */ + /*back link to the device structure. */ lp->dev = dev; /* Add the device at the beginning of the linked list. */ lp->next = wavelan_list; @@ -4377,7 +4395,7 @@ MODULE_LICENSE("GPL"); * * Please send bug reports, updates, comments to: * - * Bruce Janson Email: bruce@cs.usyd.edu.au - * Basser Department of Computer Science Phone: +61-2-9351-3423 + *bruce Janson Email: bruce@cs.usyd.edu.au + *basser Department of Computer Science Phone: +61-2-9351-3423 * University of Sydney, N.S.W., 2006, AUSTRALIA Fax: +61-2-9351-3838 */ -- cgit v0.10.2 From 631c8dec075c16b60c3e0a334c027196b07252b8 Mon Sep 17 00:00:00 2001 From: Edgardo Hames Date: Mon, 8 Mar 2010 17:02:37 -0800 Subject: Staging: wlan-ng: fix coding style in hfa834x_usb.c This is a patch in hfa834x_usb.c to fix typedef declarations and long lines. Signed-off-by: Edgardo Hames Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/hfa384x_usb.c b/drivers/staging/wlan-ng/hfa384x_usb.c index 5df56f0..2400242 100644 --- a/drivers/staging/wlan-ng/hfa384x_usb.c +++ b/drivers/staging/wlan-ng/hfa384x_usb.c @@ -62,9 +62,9 @@ * * hfa384x_drvr_xxxconfig An example of the drvr level abstraction. These * functions are wrappers for the RID get/set -* sequence. They call copy_[to|from]_bap() and -* cmd_access(). These functions operate on the -* RIDs and buffers without validation. The caller +* sequence. They call copy_[to|from]_bap() and +* cmd_access(). These functions operate on the +* RIDs and buffers without validation. The caller * is responsible for that. * * API wrapper functions: @@ -144,7 +144,6 @@ enum cmd_mode { DOWAIT = 0, DOASYNC }; -typedef enum cmd_mode CMD_MODE; #define THROTTLE_JIFFIES (HZ/8) #define URB_ASYNC_UNLINK 0 @@ -206,12 +205,11 @@ static void unlocked_usbctlx_complete(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx); struct usbctlx_completor { int (*complete) (struct usbctlx_completor *); }; -typedef struct usbctlx_completor usbctlx_completor_t; static int hfa384x_usbctlx_complete_sync(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx, - usbctlx_completor_t *completor); + struct usbctlx_completor *completor); static int unlocked_usbctlx_cancel_async(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx); @@ -232,13 +230,13 @@ usbctlx_get_rridresult(const hfa384x_usb_rridresp_t *rridresp, /* Low level req/resp CTLX formatters and submitters */ static int hfa384x_docmd(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, hfa384x_metacmd_t *cmd, ctlx_cmdcb_t cmdcb, ctlx_usercb_t usercb, void *usercb_data); static int hfa384x_dorrid(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, u16 rid, void *riddata, unsigned int riddatalen, @@ -246,7 +244,7 @@ hfa384x_dorrid(hfa384x_t *hw, static int hfa384x_dowrid(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, u16 rid, void *riddata, unsigned int riddatalen, @@ -254,7 +252,7 @@ hfa384x_dowrid(hfa384x_t *hw, static int hfa384x_dormem(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, u16 page, u16 offset, void *data, @@ -263,7 +261,7 @@ hfa384x_dormem(hfa384x_t *hw, static int hfa384x_dowmem(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, u16 page, u16 offset, void *data, @@ -351,7 +349,8 @@ static int submit_rx_urb(hfa384x_t *hw, gfp_t memflags) hw->rx_urb_skb = skb; result = -ENOLINK; - if (!hw->wlandev->hwremoved && !test_bit(WORK_RX_HALT, &hw->usb_flags)) { + if (!hw->wlandev->hwremoved && + !test_bit(WORK_RX_HALT, &hw->usb_flags)) { result = SUBMIT_URB(&hw->rx_urb, memflags); /* Check whether we need to reset the RX pipe */ @@ -451,7 +450,7 @@ static void hfa384x_usb_defer(struct work_struct *data) if (test_bit(WORK_RX_HALT, &hw->usb_flags)) { int ret; - usb_kill_urb(&hw->rx_urb); /* Cannot be holding spinlock! */ + usb_kill_urb(&hw->rx_urb); /* Cannot be holding spinlock! */ ret = usb_clear_halt(hw->usb, hw->endp_in); if (ret != 0) { @@ -668,26 +667,26 @@ usbctlx_get_rridresult(const hfa384x_usb_rridresp_t *rridresp, * when processing a CTLX that returns a hfa384x_cmdresult_t structure. ----------------------------------------------------------------*/ struct usbctlx_cmd_completor { - usbctlx_completor_t head; + struct usbctlx_completor head; const hfa384x_usb_cmdresp_t *cmdresp; hfa384x_cmdresult_t *result; }; -typedef struct usbctlx_cmd_completor usbctlx_cmd_completor_t; -static int usbctlx_cmd_completor_fn(usbctlx_completor_t *head) +static inline int usbctlx_cmd_completor_fn(struct usbctlx_completor *head) { - usbctlx_cmd_completor_t *complete = (usbctlx_cmd_completor_t *) head; + struct usbctlx_cmd_completor *complete; + + complete = (struct usbctlx_cmd_completor *) head; return usbctlx_get_status(complete->cmdresp, complete->result); } -static inline usbctlx_completor_t *init_cmd_completor(usbctlx_cmd_completor_t * - completor, - const - hfa384x_usb_cmdresp_t * - cmdresp, - hfa384x_cmdresult_t * - result) +static inline struct usbctlx_completor *init_cmd_completor( + struct usbctlx_cmd_completor + *completor, + const hfa384x_usb_cmdresp_t + *cmdresp, + hfa384x_cmdresult_t *result) { completor->head.complete = usbctlx_cmd_completor_fn; completor->cmdresp = cmdresp; @@ -701,19 +700,19 @@ static inline usbctlx_completor_t *init_cmd_completor(usbctlx_cmd_completor_t * * when processing a CTLX that reads a RID. ----------------------------------------------------------------*/ struct usbctlx_rrid_completor { - usbctlx_completor_t head; + struct usbctlx_completor head; const hfa384x_usb_rridresp_t *rridresp; void *riddata; unsigned int riddatalen; }; -typedef struct usbctlx_rrid_completor usbctlx_rrid_completor_t; -static int usbctlx_rrid_completor_fn(usbctlx_completor_t *head) +static int usbctlx_rrid_completor_fn(struct usbctlx_completor *head) { - usbctlx_rrid_completor_t *complete = (usbctlx_rrid_completor_t *) head; + struct usbctlx_rrid_completor *complete; hfa384x_rridresult_t rridresult; + complete = (struct usbctlx_rrid_completor *) head; usbctlx_get_rridresult(complete->rridresp, &rridresult); /* Validate the length, note body len calculation in bytes */ @@ -729,12 +728,13 @@ static int usbctlx_rrid_completor_fn(usbctlx_completor_t *head) return 0; } -static inline usbctlx_completor_t *init_rrid_completor(usbctlx_rrid_completor_t - *completor, - const - hfa384x_usb_rridresp_t * - rridresp, void *riddata, - unsigned int riddatalen) +static inline struct usbctlx_completor *init_rrid_completor( + struct usbctlx_rrid_completor + *completor, + const hfa384x_usb_rridresp_t + *rridresp, + void *riddata, + unsigned int riddatalen) { completor->head.complete = usbctlx_rrid_completor_fn; completor->rridresp = rridresp; @@ -747,14 +747,14 @@ static inline usbctlx_completor_t *init_rrid_completor(usbctlx_rrid_completor_t * Completor object: * Interprets the results of a synchronous RID-write ----------------------------------------------------------------*/ -typedef usbctlx_cmd_completor_t usbctlx_wrid_completor_t; +typedef struct usbctlx_cmd_completor usbctlx_wrid_completor_t; #define init_wrid_completor init_cmd_completor /*---------------------------------------------------------------- * Completor object: * Interprets the results of a synchronous memory-write ----------------------------------------------------------------*/ -typedef usbctlx_cmd_completor_t usbctlx_wmem_completor_t; +typedef struct usbctlx_cmd_completor usbctlx_wmem_completor_t; #define init_wmem_completor init_cmd_completor /*---------------------------------------------------------------- @@ -762,7 +762,7 @@ typedef usbctlx_cmd_completor_t usbctlx_wmem_completor_t; * Interprets the results of a synchronous memory-read ----------------------------------------------------------------*/ struct usbctlx_rmem_completor { - usbctlx_completor_t head; + struct usbctlx_completor head; const hfa384x_usb_rmemresp_t *rmemresp; void *data; @@ -770,7 +770,7 @@ struct usbctlx_rmem_completor { }; typedef struct usbctlx_rmem_completor usbctlx_rmem_completor_t; -static int usbctlx_rmem_completor_fn(usbctlx_completor_t *head) +static int usbctlx_rmem_completor_fn(struct usbctlx_completor *head) { usbctlx_rmem_completor_t *complete = (usbctlx_rmem_completor_t *) head; @@ -779,11 +779,13 @@ static int usbctlx_rmem_completor_fn(usbctlx_completor_t *head) return 0; } -static inline usbctlx_completor_t *init_rmem_completor(usbctlx_rmem_completor_t - *completor, - hfa384x_usb_rmemresp_t - *rmemresp, void *data, - unsigned int len) +static inline struct usbctlx_completor *init_rmem_completor( + usbctlx_rmem_completor_t + *completor, + hfa384x_usb_rmemresp_t + *rmemresp, + void *data, + unsigned int len) { completor->head.complete = usbctlx_rmem_completor_fn; completor->rmemresp = rmemresp; @@ -1226,7 +1228,7 @@ int hfa384x_corereset(hfa384x_t *hw, int holdtime, int settletime, int genesis) * * Arguments: * hw device structure -* ctlx CTLX ptr +* ctlx CTLX ptr * completor functor object to decide what to * do with the CTLX's result. * @@ -1244,7 +1246,7 @@ int hfa384x_corereset(hfa384x_t *hw, int holdtime, int settletime, int genesis) ----------------------------------------------------------------*/ static int hfa384x_usbctlx_complete_sync(hfa384x_t *hw, hfa384x_usbctlx_t *ctlx, - usbctlx_completor_t *completor) + struct usbctlx_completor *completor) { unsigned long flags; int result; @@ -1359,7 +1361,7 @@ cleanup: ----------------------------------------------------------------*/ static int hfa384x_docmd(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, hfa384x_metacmd_t *cmd, ctlx_cmdcb_t cmdcb, ctlx_usercb_t usercb, void *usercb_data) { @@ -1394,7 +1396,7 @@ hfa384x_docmd(hfa384x_t *hw, if (result != 0) { kfree(ctlx); } else if (mode == DOWAIT) { - usbctlx_cmd_completor_t completor; + struct usbctlx_cmd_completor completor; result = hfa384x_usbctlx_complete_sync(hw, ctlx, @@ -1448,7 +1450,7 @@ done: ----------------------------------------------------------------*/ static int hfa384x_dorrid(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, u16 rid, void *riddata, unsigned int riddatalen, @@ -1481,7 +1483,7 @@ hfa384x_dorrid(hfa384x_t *hw, if (result != 0) { kfree(ctlx); } else if (mode == DOWAIT) { - usbctlx_rrid_completor_t completor; + struct usbctlx_rrid_completor completor; result = hfa384x_usbctlx_complete_sync(hw, ctlx, @@ -1506,7 +1508,7 @@ done: * * Arguments: * hw device structure -* CMD_MODE DOWAIT or DOASYNC +* enum cmd_mode DOWAIT or DOASYNC * rid RID code * riddata Data portion of RID formatted for MAC * riddatalen Length of the data portion in bytes @@ -1529,7 +1531,7 @@ done: ----------------------------------------------------------------*/ static int hfa384x_dowrid(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, u16 rid, void *riddata, unsigned int riddatalen, @@ -1616,7 +1618,7 @@ done: ----------------------------------------------------------------*/ static int hfa384x_dormem(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, u16 page, u16 offset, void *data, @@ -1707,7 +1709,7 @@ done: ----------------------------------------------------------------*/ static int hfa384x_dowmem(hfa384x_t *hw, - CMD_MODE mode, + enum cmd_mode mode, u16 page, u16 offset, void *data, @@ -2075,12 +2077,9 @@ int hfa384x_drvr_flashdl_write(hfa384x_t *hw, u32 daddr, void *buf, u32 len) (j * HFA384x_USB_RWMEM_MAXLEN); writepage = HFA384x_ADDR_CMD_MKPAGE(dlbufaddr + - (j * - HFA384x_USB_RWMEM_MAXLEN)); - writeoffset = - HFA384x_ADDR_CMD_MKOFF(dlbufaddr + - (j * - HFA384x_USB_RWMEM_MAXLEN)); + (j * HFA384x_USB_RWMEM_MAXLEN)); + writeoffset = HFA384x_ADDR_CMD_MKOFF(dlbufaddr + + (j * HFA384x_USB_RWMEM_MAXLEN)); writelen = burnlen - (j * HFA384x_USB_RWMEM_MAXLEN); writelen = writelen > HFA384x_USB_RWMEM_MAXLEN ? @@ -2133,7 +2132,7 @@ exit_proc: * 0 success * >0 f/w reported error - f/w status code * <0 driver reported error -* -ENODATA length mismatch between argument and retrieved +* -ENODATA length mismatch between argument and retrieved * record. * * Side effects: @@ -2451,7 +2450,9 @@ int hfa384x_drvr_readpda(hfa384x_t *hw, void *buf, unsigned int len) currpage = HFA384x_ADDR_CMD_MKPAGE(pdaloc[i].cardaddr); curroffset = HFA384x_ADDR_CMD_MKOFF(pdaloc[i].cardaddr); - result = hfa384x_dormem_wait(hw, currpage, curroffset, buf, len); /* units of bytes */ + /* units of bytes */ + result = hfa384x_dormem_wait(hw, currpage, curroffset, buf, + len); if (result) { printk(KERN_WARNING @@ -2611,20 +2612,19 @@ int hfa384x_drvr_start(hfa384x_t *hw) if (result1 != 0) { if (result2 != 0) { printk(KERN_ERR - "cmd_initialize() failed on two attempts, results %d and %d\n", - result1, result2); + "cmd_initialize() failed on two attempts," + " results %d and %d\n", result1, result2); usb_kill_urb(&hw->rx_urb); goto done; } else { pr_debug("First cmd_initialize() failed (result %d),\n", result1); - pr_debug - ("but second attempt succeeded. All should be ok\n"); + pr_debug("but second attempt succeeded." + " All should be ok\n"); } } else if (result2 != 0) { - printk(KERN_WARNING - "First cmd_initialize() succeeded, but second attempt failed (result=%d)\n", - result2); + printk(KERN_WARNING "First cmd_initialize() succeeded," + " but second attempt failed (result=%d)\n", result2); printk(KERN_WARNING "Most likely the card will be functional\n"); goto done; @@ -3382,8 +3382,9 @@ retry: * our request has been acknowledged. Odd, * but our OUT URB is still alive... */ - pr_debug - ("Causality violation: please reboot Universe, or email linux-wlan-devel@lists.linux-wlan.com\n"); + pr_debug("Causality violation: " + "please reboot Universe, or email " + "linux-wlan-devel@lists.linux-wlan.com\n"); ctlx->state = CTLX_RESP_COMPLETE; break; @@ -3442,7 +3443,7 @@ static void hfa384x_usbin_txcompl(wlandevice_t *wlandev, { u16 status; - status = le16_to_cpu(usbin->type); /* yeah I know it says type... */ + status = le16_to_cpu(usbin->type); /* yeah I know it says type... */ /* Was there an error? */ if (HFA384x_TXSTATUS_ISERROR(status)) @@ -3583,7 +3584,7 @@ static void hfa384x_int_rxmonitor(wlandevice_t *wlandev, struct sk_buff *skb; hfa384x_t *hw = wlandev->priv; - /* Don't forget the status, time, and data_len fields are in host order */ + /* Remember the status, time, and data_len fields are in host order */ /* Figure out how big the frame is */ fc = le16_to_cpu(rxdesc->frame_control); hdrlen = p80211_headerlen(fc); @@ -3632,7 +3633,8 @@ static void hfa384x_int_rxmonitor(wlandevice_t *wlandev, caphdr->encoding = htonl(1); /* cck */ } - /* Copy the 802.11 header to the skb (ctl frames may be less than a full header) */ + /* Copy the 802.11 header to the skb + (ctl frames may be less than a full header) */ datap = skb_put(skb, hdrlen); memcpy(datap, &(rxdesc->frame_control), hdrlen); @@ -3644,7 +3646,8 @@ static void hfa384x_int_rxmonitor(wlandevice_t *wlandev, /* check for unencrypted stuff if WEP bit set. */ if (*(datap - hdrlen + 1) & 0x40) /* wep set */ if ((*(datap) == 0xaa) && (*(datap + 1) == 0xaa)) - *(datap - hdrlen + 1) &= 0xbf; /* clear wep; it's the 802.2 header! */ + /* clear wep; it's the 802.2 header! */ + *(datap - hdrlen + 1) &= 0xbf; } if (hw->sniff_fcs) { @@ -3845,10 +3848,10 @@ retry: default: /* This is NOT a valid CTLX "success" state! */ - printk(KERN_ERR - "Illegal CTLX[%d] success state(%s, %d) in OUT URB\n", - le16_to_cpu(ctlx->outbuf.type), - ctlxstr(ctlx->state), urb->status); + printk(KERN_ERR "Illegal CTLX[%d]" + " success state(%s, %d) in OUT URB\n", + le16_to_cpu(ctlx->outbuf.type), + ctlxstr(ctlx->state), urb->status); break; } /* switch */ } else { -- cgit v0.10.2 From 69121fa8dc596a574a6c652c1717861eacc8dd8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jaakko=20Niemel=C3=A4?= Date: Mon, 8 Mar 2010 23:24:44 +0200 Subject: Staging: comedi: fix space before tabs coding style issue in adl_pci6208.c MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is a patch to the adl_pci6208.c file that fixes up a space before tabs warning found by checkpatch.pl tool. Signed-off-by: Jaakko Niemelä Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adl_pci6208.c b/drivers/staging/comedi/drivers/adl_pci6208.c index 6925faa..712b9e0 100644 --- a/drivers/staging/comedi/drivers/adl_pci6208.c +++ b/drivers/staging/comedi/drivers/adl_pci6208.c @@ -54,7 +54,7 @@ References: #include "../comedidev.h" #include "comedi_pci.h" -#define PCI6208_DRIVER_NAME "adl_pci6208" +#define PCI6208_DRIVER_NAME "adl_pci6208" /* Board descriptions */ struct pci6208_board { @@ -134,10 +134,10 @@ static int pci6208_ao_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); /* static int pci6208_dio_insn_bits (struct comedi_device *dev, - * struct comedi_subdevice *s, */ + * struct comedi_subdevice *s, */ /* struct comedi_insn *insn,unsigned int *data); */ /* static int pci6208_dio_insn_config(struct comedi_device *dev, - * struct comedi_subdevice *s, */ + * struct comedi_subdevice *s, */ /* struct comedi_insn *insn,unsigned int *data); */ /* @@ -268,7 +268,7 @@ static int pci6208_ao_rinsn(struct comedi_device *dev, * This allows packed reading/writing of the DIO channels. The * comedi core can convert between insn_bits and insn_read/write */ /* static int pci6208_dio_insn_bits(struct comedi_device *dev, - * struct comedi_subdevice *s, */ + * struct comedi_subdevice *s, */ /* struct comedi_insn *insn,unsigned int *data) */ /* { */ /* if(insn->n!=2)return -EINVAL; */ @@ -293,7 +293,7 @@ static int pci6208_ao_rinsn(struct comedi_device *dev, /* } */ /* static int pci6208_dio_insn_config(struct comedi_device *dev, - * struct comedi_subdevice *s, */ + * struct comedi_subdevice *s, */ /* struct comedi_insn *insn,unsigned int *data) */ /* { */ /* int chan=CR_CHAN(insn->chanspec); */ -- cgit v0.10.2 From b9eafe438051f4dfde53227e609c932642d6dc8f Mon Sep 17 00:00:00 2001 From: Eli Lindsey Date: Tue, 9 Mar 2010 00:15:32 -0600 Subject: staging: frontier: switch to strict_strtoul in tranzport.c This is a patch to tranzport.c that changes a use of simple_strtoul to strict_strtoul at the suggestion of checkpatch.pl Signed-off-by: Eli Lindsey Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/frontier/tranzport.c b/drivers/staging/frontier/tranzport.c index 1f91001..f9ab4f3 100644 --- a/drivers/staging/frontier/tranzport.c +++ b/drivers/staging/frontier/tranzport.c @@ -198,7 +198,9 @@ static void usb_tranzport_abort_transfers(struct usb_tranzport *dev) { \ struct usb_interface *intf = to_usb_interface(dev); \ struct usb_tranzport *t = usb_get_intfdata(intf); \ - int temp = simple_strtoul(buf, NULL, 10); \ + unsigned long temp; \ + if (strict_strtoul(buf, 10, &temp)) \ + return -EINVAL; \ t->value = temp; \ return count; \ } \ -- cgit v0.10.2 From 3504e0c87892c272d9784e12918910d74077da0d Mon Sep 17 00:00:00 2001 From: Eli Lindsey Date: Tue, 9 Mar 2010 00:15:33 -0600 Subject: staging: frontier: switch semaphores to mutexes This patch changes the use of semaphores in alphatrack.c and tranzport.c to mutexes at the suggestion of checkpatch.pl Signed-off-by: Eli Lindsey Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/frontier/alphatrack.c b/drivers/staging/frontier/alphatrack.c index ce4d663..4e52105 100644 --- a/drivers/staging/frontier/alphatrack.c +++ b/drivers/staging/frontier/alphatrack.c @@ -134,7 +134,7 @@ MODULE_PARM_DESC(min_interrupt_out_interval, /* Structure to hold all of our device specific stuff */ struct usb_alphatrack { - struct semaphore sem; /* locks this structure */ + struct mutex mtx; /* locks this structure */ struct usb_interface *intf; /* save off the usb interface pointer */ int open_count; /* number of times this port has been opened */ @@ -347,7 +347,7 @@ static int usb_alphatrack_open(struct inode *inode, struct file *file) } /* lock this device */ - if (down_interruptible(&dev->sem)) { + if (mutex_lock_interruptible(&dev->mtx)) { retval = -ERESTARTSYS; goto unlock_disconnect_exit; } @@ -390,7 +390,7 @@ static int usb_alphatrack_open(struct inode *inode, struct file *file) file->private_data = dev; unlock_exit: - up(&dev->sem); + mutex_unlock(&dev->mtx); unlock_disconnect_exit: mutex_unlock(&disconnect_mutex); @@ -413,7 +413,7 @@ static int usb_alphatrack_release(struct inode *inode, struct file *file) goto exit; } - if (down_interruptible(&dev->sem)) { + if (mutex_lock_interruptible(&dev->mtx)) { retval = -ERESTARTSYS; goto exit; } @@ -425,7 +425,7 @@ static int usb_alphatrack_release(struct inode *inode, struct file *file) if (dev->intf == NULL) { /* the device was unplugged before the file was released */ - up(&dev->sem); + mutex_unlock(&dev->mtx); /* unlock here as usb_alphatrack_delete frees dev */ usb_alphatrack_delete(dev); retval = -ENODEV; @@ -441,7 +441,7 @@ static int usb_alphatrack_release(struct inode *inode, struct file *file) dev->open_count = 0; unlock_exit: - up(&dev->sem); + mutex_unlock(&dev->mtx); exit: return retval; @@ -486,7 +486,7 @@ static ssize_t usb_alphatrack_read(struct file *file, char __user *buffer, goto exit; /* lock this object */ - if (down_interruptible(&dev->sem)) { + if (mutex_lock_interruptible(&dev->mtx)) { retval = -ERESTARTSYS; goto exit; } @@ -532,7 +532,7 @@ static ssize_t usb_alphatrack_read(struct file *file, char __user *buffer, unlock_exit: /* unlock the device */ - up(&dev->sem); + mutex_unlock(&dev->mtx); exit: return retval; @@ -556,7 +556,7 @@ static ssize_t usb_alphatrack_write(struct file *file, goto exit; /* lock this object */ - if (down_interruptible(&dev->sem)) { + if (mutex_lock_interruptible(&dev->mtx)) { retval = -ERESTARTSYS; goto exit; } @@ -627,7 +627,7 @@ static ssize_t usb_alphatrack_write(struct file *file, unlock_exit: /* unlock the device */ - up(&dev->sem); + mutex_unlock(&dev->mtx); exit: return retval; @@ -678,7 +678,7 @@ static int usb_alphatrack_probe(struct usb_interface *intf, dev_err(&intf->dev, "Out of memory\n"); goto exit; } - init_MUTEX(&dev->sem); + mutex_init(&dev->mtx); dev->intf = intf; init_waitqueue_head(&dev->read_wait); init_waitqueue_head(&dev->write_wait); @@ -835,7 +835,7 @@ static void usb_alphatrack_disconnect(struct usb_interface *intf) dev = usb_get_intfdata(intf); usb_set_intfdata(intf, NULL); - down(&dev->sem); + mutex_lock(&dev->mtx); minor = intf->minor; @@ -844,11 +844,11 @@ static void usb_alphatrack_disconnect(struct usb_interface *intf) /* if the device is not opened, then we clean up right now */ if (!dev->open_count) { - up(&dev->sem); + mutex_unlock(&dev->mtx); usb_alphatrack_delete(dev); } else { dev->intf = NULL; - up(&dev->sem); + mutex_unlock(&dev->mtx); } atomic_set(&dev->writes_pending, 0); diff --git a/drivers/staging/frontier/tranzport.c b/drivers/staging/frontier/tranzport.c index f9ab4f3..eed74f0 100644 --- a/drivers/staging/frontier/tranzport.c +++ b/drivers/staging/frontier/tranzport.c @@ -123,7 +123,7 @@ struct tranzport_cmd { /* Structure to hold all of our device specific stuff */ struct usb_tranzport { - struct semaphore sem; /* locks this structure */ + struct mutex mtx; /* locks this structure */ struct usb_interface *intf; /* save off the usb interface pointer */ int open_count; /* number of times this port opened */ struct tranzport_cmd (*ring_buffer)[RING_BUFFER_SIZE]; @@ -367,7 +367,7 @@ static int usb_tranzport_open(struct inode *inode, struct file *file) } /* lock this device */ - if (down_interruptible(&dev->sem)) { + if (mutex_lock_interruptible(&dev->mtx)) { retval = -ERESTARTSYS; goto unlock_disconnect_exit; } @@ -411,7 +411,7 @@ static int usb_tranzport_open(struct inode *inode, struct file *file) file->private_data = dev; unlock_exit: - up(&dev->sem); + mutex_unlock(&dev->mtx); unlock_disconnect_exit: mutex_unlock(&disconnect_mutex); @@ -434,7 +434,7 @@ static int usb_tranzport_release(struct inode *inode, struct file *file) goto exit; } - if (down_interruptible(&dev->sem)) { + if (mutex_lock_interruptible(&dev->mtx)) { retval = -ERESTARTSYS; goto exit; } @@ -446,7 +446,7 @@ static int usb_tranzport_release(struct inode *inode, struct file *file) if (dev->intf == NULL) { /* the device was unplugged before the file was released */ - up(&dev->sem); + mutex_unlock(&dev->mtx); /* unlock here as usb_tranzport_delete frees dev */ usb_tranzport_delete(dev); retval = -ENODEV; @@ -462,7 +462,7 @@ static int usb_tranzport_release(struct inode *inode, struct file *file) dev->open_count = 0; unlock_exit: - up(&dev->sem); + mutex_unlock(&dev->mtx); exit: return retval; @@ -512,7 +512,7 @@ static ssize_t usb_tranzport_read(struct file *file, char __user *buffer, goto exit; /* lock this object */ - if (down_interruptible(&dev->sem)) { + if (mutex_lock_interruptible(&dev->mtx)) { retval = -ERESTARTSYS; goto exit; } @@ -660,7 +660,7 @@ retval = 8; unlock_exit: /* unlock the device */ -up(&dev->sem); +mutex_unlock(&dev->mtx); exit: return retval; @@ -684,7 +684,7 @@ static ssize_t usb_tranzport_write(struct file *file, goto exit; /* lock this object */ - if (down_interruptible(&dev->sem)) { + if (mutex_lock_interruptible(&dev->mtx)) { retval = -ERESTARTSYS; goto exit; } @@ -753,7 +753,7 @@ static ssize_t usb_tranzport_write(struct file *file, unlock_exit: /* unlock the device */ - up(&dev->sem); + mutex_unlock(&dev->mtx); exit: return retval; @@ -802,7 +802,7 @@ static int usb_tranzport_probe(struct usb_interface *intf, dev_err(&intf->dev, "Out of memory\n"); goto exit; } - init_MUTEX(&dev->sem); + mutex_init(&dev->mtx); dev->intf = intf; init_waitqueue_head(&dev->read_wait); init_waitqueue_head(&dev->write_wait); @@ -942,18 +942,18 @@ static void usb_tranzport_disconnect(struct usb_interface *intf) mutex_lock(&disconnect_mutex); dev = usb_get_intfdata(intf); usb_set_intfdata(intf, NULL); - down(&dev->sem); + mutex_lock(&dev->mtx); minor = intf->minor; /* give back our minor */ usb_deregister_dev(intf, &usb_tranzport_class); /* if the device is not opened, then we clean up right now */ if (!dev->open_count) { - up(&dev->sem); + mutex_unlock(&dev->mtx); usb_tranzport_delete(dev); } else { dev->intf = NULL; - up(&dev->sem); + mutex_unlock(&dev->mtx); } mutex_unlock(&disconnect_mutex); -- cgit v0.10.2 From ff13209b00dd4f67f676dd8567a9e95f13f4388c Mon Sep 17 00:00:00 2001 From: Ossama Othman Date: Mon, 15 Mar 2010 16:23:56 -0700 Subject: staging: Intel Restricted Access Region Handler The Intel Restricted Access Region Handler provides a buffer allocation mechanism to RAR users. Since the intended usage model is to lock out CPU access to RAR (the CPU will not be able to access RAR memory), this driver does not access RAR memory, and merely keeps track of what areas of RAR memory are in use. It has it's own simple allocator that does not rely on existing kernel allocators (SLAB, etc) since those allocators are too tightly coupled with the paging mechanism, which isn't needed for the intended RAR use cases. An mmap() implementation is provided for debugging purposes to simplify RAR memory access from the user space. However, it will effectively be a no-op when RAR access control is enabled since the CPU will not be able to access RAR. This driver should not be confused with the rar_register driver. That driver exposes an interface to access RAR registers on the Moorestown platform. The RAR handler driver relies on the rar_register driver for low level RAR register reads and writes. This patch was generated and built against the latest linux-2.6 master branch. Signed-off-by: Ossama Othman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 5999259..597e109 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -109,6 +109,8 @@ source "drivers/staging/vme/Kconfig" source "drivers/staging/rar_register/Kconfig" +source "drivers/staging/memrar/Kconfig" + source "drivers/staging/sep/Kconfig" source "drivers/staging/iio/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 55ff30f..6edd9b0 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -35,6 +35,7 @@ obj-$(CONFIG_FB_UDL) += udlfb/ obj-$(CONFIG_HYPERV) += hv/ obj-$(CONFIG_VME_BUS) += vme/ obj-$(CONFIG_RAR_REGISTER) += rar_register/ +obj-$(CONFIG_MRST_RAR_HANDLER) += memrar/ obj-$(CONFIG_DX_SEP) += sep/ obj-$(CONFIG_IIO) += iio/ obj-$(CONFIG_RAMZSWAP) += ramzswap/ diff --git a/drivers/staging/memrar/Kconfig b/drivers/staging/memrar/Kconfig new file mode 100644 index 0000000..a5598a8 --- /dev/null +++ b/drivers/staging/memrar/Kconfig @@ -0,0 +1,15 @@ +config MRST_RAR_HANDLER + tristate "RAR handler driver for Intel Moorestown platform" + select RAR_REGISTER + ---help--- + This driver provides a memory management interface to + restricted access regions (RAR) available on the Intel + Moorestown platform. + + Once locked down, restricted access regions are only + accessible by specific hardware on the platform. The x86 + CPU is typically not one of those platforms. As such this + driver does not access RAR, and only provides a buffer + allocation/bookkeeping mechanism. + + If unsure, say N. diff --git a/drivers/staging/memrar/Makefile b/drivers/staging/memrar/Makefile new file mode 100644 index 0000000..a3336c0 --- /dev/null +++ b/drivers/staging/memrar/Makefile @@ -0,0 +1,2 @@ +obj-$(CONFIG_MRST_RAR_HANDLER) += memrar.o +memrar-y := memrar_allocator.o memrar_handler.o diff --git a/drivers/staging/memrar/TODO b/drivers/staging/memrar/TODO new file mode 100644 index 0000000..0087447 --- /dev/null +++ b/drivers/staging/memrar/TODO @@ -0,0 +1,43 @@ +RAR Handler (memrar) Driver TODO Items +====================================== + +Maintainer: Ossama Othman + +memrar.h +-------- +1. This header exposes the driver's user space and kernel space + interfaces. It should be moved to , or + something along those lines, when this memrar driver is moved out + of `staging'. + a. It would be ideal if staging/rar_register/rar_register.h was + moved to the same directory. + +memrar_allocator.[ch] +--------------------- +1. Address potential fragmentation issues with the memrar_allocator. + +2. Hide struct memrar_allocator details/fields. They need not be + exposed to the user. + a. Forward declare struct memrar_allocator. + b. Move all three struct definitions to `memrar_allocator.c' + source file. + c. Add a memrar_allocator_largest_free_area() function, or + something like that to get access to the value of the struct + memrar_allocator "largest_free_area" field. This allows the + struct memrar_allocator fields to be completely hidden from + the user. The memrar_handler code really only needs this for + statistic gathering on-demand. + d. Do the same for the "capacity" field as the + "largest_free_area" field. + +3. Move memrar_allocator.* to kernel `lib' directory since it is HW + neutral. + a. Alternatively, use lib/genalloc.c instead. + b. A kernel port of Doug Lea's malloc() implementation may also + be an option. + +memrar_handler.c +---------------- +1. Split user space interface (ioctl code) from core/kernel code, + e.g.: + memrar_handler.c -> memrar_core.c, memrar_user.c diff --git a/drivers/staging/memrar/memrar.h b/drivers/staging/memrar/memrar.h new file mode 100644 index 0000000..0b735b8 --- /dev/null +++ b/drivers/staging/memrar/memrar.h @@ -0,0 +1,155 @@ +/* + * RAR Handler (/dev/memrar) internal driver API. + * Copyright (C) 2010 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General + * Public License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * The full GNU General Public License is included in this + * distribution in the file called COPYING. + */ + + +#ifndef _MEMRAR_H +#define _MEMRAR_H + +#include +#include + + +/** + * struct RAR_stat - RAR statistics structure + * @type: Type of RAR memory (e.g., audio vs. video) + * @capacity: Total size of RAR memory region. + * @largest_block_size: Size of the largest reservable block. + * + * This structure is used for RAR_HANDLER_STAT ioctl and for the + * RAR_get_stat() user space wrapper function. + */ +struct RAR_stat { + __u32 type; + __u32 capacity; + __u32 largest_block_size; +}; + + +/** + * struct RAR_block_info - user space struct that describes RAR buffer + * @type: Type of RAR memory (e.g., audio vs. video) + * @size: Requested size of a block to be reserved in RAR. + * @handle: Handle that can be used to refer to reserved block. + * + * This is the basic structure exposed to the user space that + * describes a given RAR buffer. The buffer's underlying bus address + * is not exposed to the user. User space code refers to the buffer + * entirely by "handle". + */ +struct RAR_block_info { + __u32 type; + __u32 size; + __u32 handle; +}; + + +#define RAR_IOCTL_BASE 0xE0 + +/* Reserve RAR block. */ +#define RAR_HANDLER_RESERVE _IOWR(RAR_IOCTL_BASE, 0x00, struct RAR_block_info) + +/* Release previously reserved RAR block. */ +#define RAR_HANDLER_RELEASE _IOW(RAR_IOCTL_BASE, 0x01, __u32) + +/* Get RAR stats. */ +#define RAR_HANDLER_STAT _IOWR(RAR_IOCTL_BASE, 0x02, struct RAR_stat) + + +#ifdef __KERNEL__ + +/* -------------------------------------------------------------- */ +/* Kernel Side RAR Handler Interface */ +/* -------------------------------------------------------------- */ + +/** + * struct RAR_buffer - kernel space struct that describes RAR buffer + * @info: structure containing base RAR buffer information + * @bus_address: buffer bus address + * + * Structure that contains all information related to a given block of + * memory in RAR. It is generally only used when retrieving RAR + * related bus addresses. + * + * Note: This structure is used only by RAR-enabled drivers, and is + * not intended to be exposed to the user space. + */ +struct RAR_buffer { + struct RAR_block_info info; + dma_addr_t bus_address; +}; + +/** + * rar_reserve() - reserve RAR buffers + * @buffers: array of RAR_buffers where type and size of buffers to + * reserve are passed in, handle and bus address are + * passed out + * @count: number of RAR_buffers in the "buffers" array + * + * This function will reserve buffers in the restricted access regions + * of given types. + * + * It returns the number of successfully reserved buffers. Successful + * buffer reservations will have the corresponding bus_address field + * set to a non-zero value in the given buffers vector. + */ +extern size_t rar_reserve(struct RAR_buffer *buffers, + size_t count); + +/** + * rar_release() - release RAR buffers + * @buffers: array of RAR_buffers where handles to buffers to be + * released are passed in + * @count: number of RAR_buffers in the "buffers" array + * + * This function will release RAR buffers that were retrieved through + * a call to rar_reserve() or rar_handle_to_bus() by decrementing the + * reference count. The RAR buffer will be reclaimed when the + * reference count drops to zero. + * + * It returns the number of successfully released buffers. Successful + * releases will have their handle field set to zero in the given + * buffers vector. + */ +extern size_t rar_release(struct RAR_buffer *buffers, + size_t count); + +/** + * rar_handle_to_bus() - convert a vector of RAR handles to bus addresses + * @buffers: array of RAR_buffers containing handles to be + * converted to bus_addresses + * @count: number of RAR_buffers in the "buffers" array + + * This function will retrieve the RAR buffer bus addresses, type and + * size corresponding to the RAR handles provided in the buffers + * vector. + * + * It returns the number of successfully converted buffers. The bus + * address will be set to 0 for unrecognized handles. + * + * The reference count for each corresponding buffer in RAR will be + * incremented. Call rar_release() when done with the buffers. + */ +extern size_t rar_handle_to_bus(struct RAR_buffer *buffers, + size_t count); + + +#endif /* __KERNEL__ */ + +#endif /* _MEMRAR_H */ diff --git a/drivers/staging/memrar/memrar_allocator.c b/drivers/staging/memrar/memrar_allocator.c new file mode 100644 index 0000000..a4f8c58 --- /dev/null +++ b/drivers/staging/memrar/memrar_allocator.c @@ -0,0 +1,432 @@ +/* + * memrar_allocator 1.0: An allocator for Intel RAR. + * + * Copyright (C) 2010 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General + * Public License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * The full GNU General Public License is included in this + * distribution in the file called COPYING. + * + * + * ------------------------------------------------------------------ + * + * This simple allocator implementation provides a + * malloc()/free()-like interface for reserving space within a + * previously reserved block of memory. It is not specific to + * any hardware, nor is it coupled with the lower level paging + * mechanism. + * + * The primary goal of this implementation is to provide a means + * to partition an arbitrary block of memory without actually + * accessing the memory or incurring any hardware side-effects + * (e.g. paging). It is, in effect, a bookkeeping mechanism for + * buffers. + */ + + +#include "memrar_allocator.h" +#include +#include +#include + + +struct memrar_allocator *memrar_create_allocator(unsigned long base, + size_t capacity, + size_t block_size) +{ + struct memrar_allocator *allocator = NULL; + struct memrar_address_ranges *first_node = NULL; + + /* + * Make sure the base address is aligned on a block_size + * boundary. + * + * @todo Is this necessary? + */ + /* base = ALIGN(base, block_size); */ + + /* Validate parameters. + * + * Make sure we can allocate the entire memory space. Zero + * capacity or block size are obviously invalid. + */ + if (base == 0 + || capacity == 0 + || block_size == 0 + || ULONG_MAX - capacity < base + || capacity < block_size) + return allocator; + + /* + * There isn't much point in creating a memory allocator that + * is only capable of holding one block but we'll allow it, + * and issue a diagnostic. + */ + WARN(capacity < block_size * 2, + "memrar: Only one block available to allocator.\n"); + + allocator = kmalloc(sizeof(*allocator), GFP_KERNEL); + + if (allocator == NULL) + return allocator; + + mutex_init(&allocator->lock); + allocator->base = base; + + /* Round the capacity down to a multiple of block_size. */ + allocator->capacity = (capacity / block_size) * block_size; + + allocator->block_size = block_size; + + allocator->largest_free_area = allocator->capacity; + + /* Initialize the handle and free lists. */ + INIT_LIST_HEAD(&allocator->allocated_list.list); + INIT_LIST_HEAD(&allocator->free_list.list); + + first_node = kmalloc(sizeof(*first_node), GFP_KERNEL); + if (first_node == NULL) { + kfree(allocator); + allocator = NULL; + } else { + /* Full range of blocks is available. */ + first_node->range.begin = base; + first_node->range.end = base + allocator->capacity; + list_add(&first_node->list, + &allocator->free_list.list); + } + + return allocator; +} + +void memrar_destroy_allocator(struct memrar_allocator *allocator) +{ + /* + * Assume that the memory allocator lock isn't held at this + * point in time. Caller must ensure that. + */ + + struct memrar_address_ranges *pos = NULL; + struct memrar_address_ranges *n = NULL; + + if (allocator == NULL) + return; + + mutex_lock(&allocator->lock); + + /* Reclaim free list resources. */ + list_for_each_entry_safe(pos, + n, + &allocator->free_list.list, + list) { + list_del(&pos->list); + kfree(pos); + } + + mutex_unlock(&allocator->lock); + + kfree(allocator); +} + +unsigned long memrar_allocator_alloc(struct memrar_allocator *allocator, + size_t size) +{ + struct memrar_address_ranges *pos = NULL; + + size_t num_blocks; + unsigned long reserved_bytes; + + /* + * Address of allocated buffer. We assume that zero is not a + * valid address. + */ + unsigned long addr = 0; + + if (allocator == NULL || size == 0) + return addr; + + /* Reserve enough blocks to hold the amount of bytes requested. */ + num_blocks = DIV_ROUND_UP(size, allocator->block_size); + + reserved_bytes = num_blocks * allocator->block_size; + + mutex_lock(&allocator->lock); + + if (reserved_bytes > allocator->largest_free_area) { + mutex_unlock(&allocator->lock); + return addr; + } + + /* + * Iterate through the free list to find a suitably sized + * range of free contiguous memory blocks. + * + * We also take the opportunity to reset the size of the + * largest free area size statistic. + */ + list_for_each_entry(pos, &allocator->free_list.list, list) { + struct memrar_address_range * const fr = &pos->range; + size_t const curr_size = fr->end - fr->begin; + + if (curr_size >= reserved_bytes && addr == 0) { + struct memrar_address_range *range = NULL; + struct memrar_address_ranges * const new_node = + kmalloc(sizeof(*new_node), GFP_KERNEL); + + if (new_node == NULL) + break; + + list_add(&new_node->list, + &allocator->allocated_list.list); + + /* + * Carve out area of memory from end of free + * range. + */ + range = &new_node->range; + range->end = fr->end; + fr->end -= reserved_bytes; + range->begin = fr->end; + addr = range->begin; + + /* + * Check if largest area has decreased in + * size. We'll need to continue scanning for + * the next largest area if it has. + */ + if (curr_size == allocator->largest_free_area) + allocator->largest_free_area -= + reserved_bytes; + else + break; + } + + /* + * Reset largest free area size statistic as needed, + * but only if we've actually allocated memory. + */ + if (addr != 0 + && curr_size > allocator->largest_free_area) { + allocator->largest_free_area = curr_size; + break; + } + } + + mutex_unlock(&allocator->lock); + + return addr; +} + +long memrar_allocator_free(struct memrar_allocator *allocator, + unsigned long addr) +{ + struct list_head *pos = NULL; + struct list_head *tmp = NULL; + struct list_head *dst = NULL; + + struct memrar_address_ranges *allocated = NULL; + struct memrar_address_range const *handle = NULL; + + unsigned long old_end = 0; + unsigned long new_chunk_size = 0; + + if (allocator == NULL) + return -EINVAL; + + if (addr == 0) + return 0; /* Ignore "free(0)". */ + + mutex_lock(&allocator->lock); + + /* Find the corresponding handle. */ + list_for_each_entry(allocated, + &allocator->allocated_list.list, + list) { + if (allocated->range.begin == addr) { + handle = &allocated->range; + break; + } + } + + /* No such buffer created by this allocator. */ + if (handle == NULL) { + mutex_unlock(&allocator->lock); + return -EFAULT; + } + + /* + * Coalesce adjacent chunks of memory if possible. + * + * @note This isn't full blown coalescing since we're only + * coalescing at most three chunks of memory. + */ + list_for_each_safe(pos, tmp, &allocator->free_list.list) { + /* @todo O(n) performance. Optimize. */ + + struct memrar_address_range * const chunk = + &list_entry(pos, + struct memrar_address_ranges, + list)->range; + + /* Extend size of existing free adjacent chunk. */ + if (chunk->end == handle->begin) { + /* + * Chunk "less than" than the one we're + * freeing is adjacent. + * + * Before: + * + * +-----+------+ + * |chunk|handle| + * +-----+------+ + * + * After: + * + * +------------+ + * | chunk | + * +------------+ + */ + + struct memrar_address_ranges const * const next = + list_entry(pos->next, + struct memrar_address_ranges, + list); + + chunk->end = handle->end; + + /* + * Now check if next free chunk is adjacent to + * the current extended free chunk. + * + * Before: + * + * +------------+----+ + * | chunk |next| + * +------------+----+ + * + * After: + * + * +-----------------+ + * | chunk | + * +-----------------+ + */ + if (!list_is_singular(pos) + && chunk->end == next->range.begin) { + chunk->end = next->range.end; + list_del(pos->next); + kfree(next); + } + + list_del(&allocated->list); + + new_chunk_size = chunk->end - chunk->begin; + + goto exit_memrar_free; + + } else if (handle->end == chunk->begin) { + /* + * Chunk "greater than" than the one we're + * freeing is adjacent. + * + * +------+-----+ + * |handle|chunk| + * +------+-----+ + * + * After: + * + * +------------+ + * | chunk | + * +------------+ + */ + + struct memrar_address_ranges const * const prev = + list_entry(pos->prev, + struct memrar_address_ranges, + list); + + chunk->begin = handle->begin; + + /* + * Now check if previous free chunk is + * adjacent to the current extended free + * chunk. + * + * + * Before: + * + * +----+------------+ + * |prev| chunk | + * +----+------------+ + * + * After: + * + * +-----------------+ + * | chunk | + * +-----------------+ + */ + if (!list_is_singular(pos) + && prev->range.end == chunk->begin) { + chunk->begin = prev->range.begin; + list_del(pos->prev); + kfree(prev); + } + + list_del(&allocated->list); + + new_chunk_size = chunk->end - chunk->begin; + + goto exit_memrar_free; + + } else if (chunk->end < handle->begin + && chunk->end > old_end) { + /* Keep track of where the entry could be + * potentially moved from the "allocated" list + * to the "free" list if coalescing doesn't + * occur, making sure the "free" list remains + * sorted. + */ + old_end = chunk->end; + dst = pos; + } + } + + /* + * Nothing to coalesce. + * + * Move the entry from the "allocated" list to the "free" + * list. + */ + list_move(&allocated->list, dst); + new_chunk_size = handle->end - handle->begin; + allocated = NULL; + +exit_memrar_free: + + if (new_chunk_size > allocator->largest_free_area) + allocator->largest_free_area = new_chunk_size; + + mutex_unlock(&allocator->lock); + + kfree(allocated); + + return 0; +} + + + +/* + Local Variables: + c-file-style: "linux" + End: +*/ diff --git a/drivers/staging/memrar/memrar_allocator.h b/drivers/staging/memrar/memrar_allocator.h new file mode 100644 index 0000000..0b80dea --- /dev/null +++ b/drivers/staging/memrar/memrar_allocator.h @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2010 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General + * Public License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * The full GNU General Public License is included in this + * distribution in the file called COPYING. + */ + +#ifndef MEMRAR_ALLOCATOR_H +#define MEMRAR_ALLOCATOR_H + + +#include +#include +#include +#include + + +/** + * struct memrar_address_range - struct that describes a memory range + * @begin: Beginning of available address range. + * @end: End of available address range, one past the end, + * i.e. [begin, end). + */ +struct memrar_address_range { +/* private: internal use only */ + unsigned long begin; + unsigned long end; +}; + +/** + * struct memrar_address_ranges - list of areas of memory. + * @list: Linked list of address ranges. + * @range: Memory address range corresponding to given list node. + */ +struct memrar_address_ranges { +/* private: internal use only */ + struct list_head list; + struct memrar_address_range range; +}; + +/** + * struct memrar_allocator - encapsulation of the memory allocator state + * @lock: Lock used to synchronize access to the memory + * allocator state. + * @base: Base (start) address of the allocator memory + * space. + * @capacity: Size of the allocator memory space in bytes. + * @block_size: The size in bytes of individual blocks within + * the allocator memory space. + * @largest_free_area: Largest free area of memory in the allocator + * in bytes. + * @allocated_list: List of allocated memory block address + * ranges. + * @free_list: List of free address ranges. + * + * This structure contains all memory allocator state, including the + * base address, capacity, free list, lock, etc. + */ +struct memrar_allocator { +/* private: internal use only */ + struct mutex lock; + unsigned long base; + size_t capacity; + size_t block_size; + size_t largest_free_area; + struct memrar_address_ranges allocated_list; + struct memrar_address_ranges free_list; +}; + +/** + * memrar_create_allocator() - create a memory allocator + * @base: Address at which the memory allocator begins. + * @capacity: Desired size of the memory allocator. This value must + * be larger than the block_size, ideally more than twice + * as large since there wouldn't be much point in using a + * memory allocator otherwise. + * @block_size: The size of individual blocks within the memory + * allocator. This value must smaller than the + * capacity. + * + * Create a memory allocator with the given capacity and block size. + * The capacity will be reduced to be a multiple of the block size, if + * necessary. + * + * Returns an instance of the memory allocator, if creation succeeds, + * otherwise zero if creation fails. Failure may occur if not enough + * kernel memory exists to create the memrar_allocator instance + * itself, or if the capacity and block_size arguments are not + * compatible or make sense. + */ +struct memrar_allocator *memrar_create_allocator(unsigned long base, + size_t capacity, + size_t block_size); + +/** + * memrar_destroy_allocator() - destroy allocator + * @allocator: The allocator being destroyed. + * + * Reclaim resources held by the memory allocator. The caller must + * explicitly free all memory reserved by memrar_allocator_alloc() + * prior to calling this function. Otherwise leaks will occur. + */ +void memrar_destroy_allocator(struct memrar_allocator *allocator); + +/** + * memrar_allocator_alloc() - reserve an area of memory of given size + * @allocator: The allocator instance being used to reserve buffer. + * @size: The size in bytes of the buffer to allocate. + * + * This functions reserves an area of memory managed by the given + * allocator. It returns zero if allocation was not possible. + * Failure may occur if the allocator no longer has space available. + */ +unsigned long memrar_allocator_alloc(struct memrar_allocator *allocator, + size_t size); + +/** + * memrar_allocator_free() - release buffer starting at given address + * @allocator: The allocator instance being used to release the buffer. + * @address: The address of the buffer being released. + * + * Release an area of memory starting at the given address. Failure + * could occur if the given address is not in the address space + * managed by the allocator. Returns zero on success or an errno + * (negative value) on failure. + */ +long memrar_allocator_free(struct memrar_allocator *allocator, + unsigned long address); + +#endif /* MEMRAR_ALLOCATOR_H */ + + +/* + Local Variables: + c-file-style: "linux" + End: +*/ diff --git a/drivers/staging/memrar/memrar_handler.c b/drivers/staging/memrar/memrar_handler.c new file mode 100644 index 0000000..4bbf66f --- /dev/null +++ b/drivers/staging/memrar/memrar_handler.c @@ -0,0 +1,937 @@ +/* + * memrar_handler 1.0: An Intel restricted access region handler device + * + * Copyright (C) 2010 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General + * Public License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be + * useful, but WITHOUT ANY WARRANTY; without even the implied + * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * The full GNU General Public License is included in this + * distribution in the file called COPYING. + * + * ------------------------------------------------------------------- + * + * Moorestown restricted access regions (RAR) provide isolated + * areas of main memory that are only acceessible by authorized + * devices. + * + * The Intel Moorestown RAR handler module exposes a kernel space + * RAR memory management mechanism. It is essentially a + * RAR-specific allocator. + * + * Besides providing RAR buffer management, the RAR handler also + * behaves in many ways like an OS virtual memory manager. For + * example, the RAR "handles" created by the RAR handler are + * analogous to user space virtual addresses. + * + * RAR memory itself is never accessed directly by the RAR + * handler. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../rar_register/rar_register.h" + +#include "memrar.h" +#include "memrar_allocator.h" + + +#define MEMRAR_VER "1.0" + +/* + * Moorestown supports three restricted access regions. + * + * We only care about the first two, video and audio. The third, + * reserved for Chaabi and the P-unit, will be handled by their + * respective drivers. + */ +#define MRST_NUM_RAR 2 + +/* ---------------- -------------------- ------------------- */ + +/** + * struct memrar_buffer_info - struct that keeps track of all RAR buffers + * @list: Linked list of memrar_buffer_info objects. + * @buffer: Core RAR buffer information. + * @refcount: Reference count. + * @owner: File handle corresponding to process that reserved the + * block of memory in RAR. This will be zero for buffers + * allocated by other drivers instead of by a user space + * process. + * + * This structure encapsulates a link list of RAR buffers, as well as + * other characteristics specific to a given list node, such as the + * reference count on the corresponding RAR buffer. + */ +struct memrar_buffer_info { + struct list_head list; + struct RAR_buffer buffer; + struct kref refcount; + struct file *owner; +}; + +/** + * struct memrar_rar_info - characteristics of a given RAR + * @base: Base bus address of the RAR. + * @length: Length of the RAR. + * @iobase: Virtual address of RAR mapped into kernel. + * @allocator: Allocator associated with the RAR. Note the allocator + * "capacity" may be smaller than the RAR length if the + * length is not a multiple of the configured allocator + * block size. + * @buffers: Table that keeps track of all reserved RAR buffers. + * @lock: Lock used to synchronize access to RAR-specific data + * structures. + * + * Each RAR has an associated memrar_rar_info structure that describes + * where in memory the RAR is located, how large it is, and a list of + * reserved RAR buffers inside that RAR. Each RAR also has a mutex + * associated with it to reduce lock contention when operations on + * multiple RARs are performed in parallel. + */ +struct memrar_rar_info { + dma_addr_t base; + unsigned long length; + void __iomem *iobase; + struct memrar_allocator *allocator; + struct memrar_buffer_info buffers; + struct mutex lock; +}; + +/* + * Array of RAR characteristics. + */ +static struct memrar_rar_info memrars[MRST_NUM_RAR]; + +/* ---------------- -------------------- ------------------- */ + +/* Validate RAR type. */ +static inline int memrar_is_valid_rar_type(u32 type) +{ + return type == RAR_TYPE_VIDEO || type == RAR_TYPE_AUDIO; +} + +/* Check if an address/handle falls with the given RAR memory range. */ +static inline int memrar_handle_in_range(struct memrar_rar_info *rar, + u32 vaddr) +{ + unsigned long const iobase = (unsigned long) (rar->iobase); + return (vaddr >= iobase && vaddr < iobase + rar->length); +} + +/* Retrieve RAR information associated with the given handle. */ +static struct memrar_rar_info *memrar_get_rar_info(u32 vaddr) +{ + int i; + for (i = 0; i < MRST_NUM_RAR; ++i) { + struct memrar_rar_info * const rar = &memrars[i]; + if (memrar_handle_in_range(rar, vaddr)) + return rar; + } + + return NULL; +} + +/* + * Retrieve bus address from given handle. + * + * Returns address corresponding to given handle. Zero if handle is + * invalid. + */ +static dma_addr_t memrar_get_bus_address( + struct memrar_rar_info *rar, + u32 vaddr) +{ + unsigned long const iobase = (unsigned long) (rar->iobase); + + if (!memrar_handle_in_range(rar, vaddr)) + return 0; + + /* + * An assumption is made that the virtual address offset is + * the same as the bus address offset, at least based on the + * way this driver is implemented. For example, vaddr + 2 == + * baddr + 2. + * + * @todo Is that a valid assumption? + */ + return rar->base + (vaddr - iobase); +} + +/* + * Retrieve physical address from given handle. + * + * Returns address corresponding to given handle. Zero if handle is + * invalid. + */ +static dma_addr_t memrar_get_physical_address( + struct memrar_rar_info *rar, + u32 vaddr) +{ + /* + * @todo This assumes that the bus address and physical + * address are the same. That is true for Moorestown + * but not necessarily on other platforms. This + * deficiency should be addressed at some point. + */ + return memrar_get_bus_address(rar, vaddr); +} + +/* + * Core block release code. + * + * Note: This code removes the node from a list. Make sure any list + * iteration is performed using list_for_each_safe(). + */ +static void memrar_release_block_i(struct kref *ref) +{ + /* + * Last reference is being released. Remove from the table, + * and reclaim resources. + */ + + struct memrar_buffer_info * const node = + container_of(ref, struct memrar_buffer_info, refcount); + + struct RAR_block_info * const user_info = + &node->buffer.info; + + struct memrar_allocator * const allocator = + memrars[user_info->type].allocator; + + list_del(&node->list); + + memrar_allocator_free(allocator, user_info->handle); + + kfree(node); +} + +/* + * Initialize RAR parameters, such as bus addresses, etc. + */ +static int memrar_init_rar_resources(char const *devname) +{ + /* ---- Sanity Checks ---- + * 1. RAR bus addresses in both Lincroft and Langwell RAR + * registers should be the same. + * a. There's no way we can do this through IA. + * + * 2. Secure device ID in Langwell RAR registers should be set + * appropriately, e.g. only LPE DMA for the audio RAR, and + * security for the other Langwell based RAR registers. + * a. There's no way we can do this through IA. + * + * 3. Audio and video RAR registers and RAR access should be + * locked down. If not, enable RAR access control. Except + * for debugging purposes, there is no reason for them to + * be unlocked. + * a. We can only do this for the Lincroft (IA) side. + * + * @todo Should the RAR handler driver even be aware of audio + * and video RAR settings? + */ + + /* + * RAR buffer block size. + * + * We choose it to be the size of a page to simplify the + * /dev/memrar mmap() implementation and usage. Otherwise + * paging is not involved once an RAR is locked down. + */ + static size_t const RAR_BLOCK_SIZE = PAGE_SIZE; + + int z; + int found_rar = 0; + + BUG_ON(MRST_NUM_RAR != ARRAY_SIZE(memrars)); + + for (z = 0; z != MRST_NUM_RAR; ++z) { + dma_addr_t low, high; + struct memrar_rar_info * const rar = &memrars[z]; + + BUG_ON(!memrar_is_valid_rar_type(z)); + + mutex_init(&rar->lock); + + /* + * Initialize the process table before we reach any + * code that exit on failure since the finalization + * code requires an initialized list. + */ + INIT_LIST_HEAD(&rar->buffers.list); + + if (rar_get_address(z, &low, &high) != 0) { + /* No RAR is available. */ + break; + } else if (low == 0 || high == 0) { + /* + * We don't immediately break out of the loop + * since the next type of RAR may be enabled. + */ + rar->base = 0; + rar->length = 0; + rar->iobase = NULL; + rar->allocator = NULL; + continue; + } + + /* + * @todo Verify that LNC and LNW RAR register contents + * addresses, security, etc are compatible and + * consistent). + */ + + rar->length = high - low + 1; + + /* Claim RAR memory as our own. */ + if (request_mem_region(low, rar->length, devname) == NULL) { + rar->length = 0; + + pr_err("%s: Unable to claim RAR[%d] memory.\n", + devname, + z); + pr_err("%s: RAR[%d] disabled.\n", devname, z); + + /* + * Rather than break out of the loop by + * returning -EBUSY, for example, we may be + * able to claim memory of the next RAR region + * as our own. + */ + continue; + } + + rar->base = low; + + /* + * Now map it into the kernel address space. + * + * Note that the RAR memory may only be accessed by IA + * when debugging. Otherwise attempts to access the + * RAR memory when it is locked down will result in + * behavior similar to writing to /dev/null and + * reading from /dev/zero. This behavior is enforced + * by the hardware. Even if we don't access the + * memory, mapping it into the kernel provides us with + * a convenient RAR handle to bus address mapping. + */ + rar->iobase = ioremap_nocache(rar->base, rar->length); + if (rar->iobase == NULL) { + pr_err("%s: Unable to map RAR memory.\n", + devname); + return -ENOMEM; + } + + /* Initialize corresponding memory allocator. */ + rar->allocator = memrar_create_allocator( + (unsigned long) rar->iobase, + rar->length, + RAR_BLOCK_SIZE); + if (rar->allocator == NULL) + return -1; + + /* + * ------------------------------------------------- + * Make sure all RARs handled by us are locked down. + * ------------------------------------------------- + */ + + /* Enable RAR protection on the Lincroft side. */ + if (0) { + /* + * This is mostly a sanity check since the + * vendor should have locked down RAR in the + * SMIP header RAR configuration. + */ + rar_lock(z); + } else { + pr_warning("%s: LNC RAR[%d] no lock sanity check.\n", + devname, + z); + } + + /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ + /* |||||||||||||||||||||||||||||||||||||||||||||||||| */ + + /* + * It would be nice if we could verify that RAR + * protection on the Langwell side is enabled, but + * there is no way to do that from here. The + * necessary Langwell RAR registers are not accessible + * from the Lincroft (IA) side. + * + * Hopefully the ODM did the right thing and enabled + * Langwell side RAR protection in the integrated + * firmware SMIP header. + */ + + pr_info("%s: BRAR[%d] bus address range = " + "[0x%lx, 0x%lx]\n", + devname, + z, + (unsigned long) low, + (unsigned long) high); + + pr_info("%s: BRAR[%d] size = %u KiB\n", + devname, + z, + rar->allocator->capacity / 1024); + + found_rar = 1; + } + + if (!found_rar) { + /* + * No RAR support. Don't bother continuing. + * + * Note that this is not a failure. + */ + pr_info("%s: No Moorestown RAR support available.\n", + devname); + return -ENODEV; + } + + return 0; +} + +/* + * Finalize RAR resources. + */ +static void memrar_fini_rar_resources(void) +{ + int z; + struct memrar_buffer_info *pos; + struct memrar_buffer_info *tmp; + + /* + * @todo Do we need to hold a lock at this point in time? + * (module initialization failure or exit?) + */ + + for (z = MRST_NUM_RAR; z-- != 0; ) { + struct memrar_rar_info * const rar = &memrars[z]; + + /* Clean up remaining resources. */ + + list_for_each_entry_safe(pos, + tmp, + &rar->buffers.list, + list) { + kref_put(&pos->refcount, memrar_release_block_i); + } + + memrar_destroy_allocator(rar->allocator); + rar->allocator = NULL; + + iounmap(rar->iobase); + rar->iobase = NULL; + + release_mem_region(rar->base, rar->length); + rar->base = 0; + + rar->length = 0; + } +} + +static long memrar_reserve_block(struct RAR_buffer *request, + struct file *filp) +{ + struct RAR_block_info * const rinfo = &request->info; + struct RAR_buffer *buffer; + struct memrar_buffer_info *buffer_info; + u32 handle; + struct memrar_rar_info *rar = NULL; + + /* Prevent array overflow. */ + if (!memrar_is_valid_rar_type(rinfo->type)) + return -EINVAL; + + rar = &memrars[rinfo->type]; + + /* Reserve memory in RAR. */ + handle = memrar_allocator_alloc(rar->allocator, rinfo->size); + if (handle == 0) + return -ENOMEM; + + buffer_info = kmalloc(sizeof(*buffer_info), GFP_KERNEL); + + if (buffer_info == NULL) { + memrar_allocator_free(rar->allocator, handle); + return -ENOMEM; + } + + buffer = &buffer_info->buffer; + buffer->info.type = rinfo->type; + buffer->info.size = rinfo->size; + + /* Memory handle corresponding to the bus address. */ + buffer->info.handle = handle; + buffer->bus_address = memrar_get_bus_address(rar, handle); + + /* + * Keep track of owner so that we can later cleanup if + * necessary. + */ + buffer_info->owner = filp; + + kref_init(&buffer_info->refcount); + + mutex_lock(&rar->lock); + list_add(&buffer_info->list, &rar->buffers.list); + mutex_unlock(&rar->lock); + + rinfo->handle = buffer->info.handle; + request->bus_address = buffer->bus_address; + + return 0; +} + +static long memrar_release_block(u32 addr) +{ + struct memrar_buffer_info *pos; + struct memrar_buffer_info *tmp; + struct memrar_rar_info * const rar = memrar_get_rar_info(addr); + long result = -EINVAL; + + if (rar == NULL) + return -EFAULT; + + mutex_lock(&rar->lock); + + /* + * Iterate through the buffer list to find the corresponding + * buffer to be released. + */ + list_for_each_entry_safe(pos, + tmp, + &rar->buffers.list, + list) { + struct RAR_block_info * const info = + &pos->buffer.info; + + /* + * Take into account handle offsets that may have been + * added to the base handle, such as in the following + * scenario: + * + * u32 handle = base + offset; + * rar_handle_to_bus(handle); + * rar_release(handle); + */ + if (addr >= info->handle + && addr < (info->handle + info->size) + && memrar_is_valid_rar_type(info->type)) { + kref_put(&pos->refcount, memrar_release_block_i); + result = 0; + break; + } + } + + mutex_unlock(&rar->lock); + + return result; +} + +static long memrar_get_stat(struct RAR_stat *r) +{ + long result = -EINVAL; + + if (likely(r != NULL) && memrar_is_valid_rar_type(r->type)) { + struct memrar_allocator * const allocator = + memrars[r->type].allocator; + + BUG_ON(allocator == NULL); + + /* + * Allocator capacity doesn't change over time. No + * need to synchronize. + */ + r->capacity = allocator->capacity; + + mutex_lock(&allocator->lock); + + r->largest_block_size = allocator->largest_free_area; + + mutex_unlock(&allocator->lock); + + result = 0; + } + + return result; +} + +static long memrar_ioctl(struct file *filp, + unsigned int cmd, + unsigned long arg) +{ + void __user *argp = (void __user *)arg; + long result = 0; + + struct RAR_buffer buffer; + struct RAR_block_info * const request = &buffer.info; + struct RAR_stat rar_info; + u32 rar_handle; + + switch (cmd) { + case RAR_HANDLER_RESERVE: + if (copy_from_user(request, + argp, + sizeof(*request))) + return -EFAULT; + + result = memrar_reserve_block(&buffer, filp); + if (result != 0) + return result; + + return copy_to_user(argp, request, sizeof(*request)); + + case RAR_HANDLER_RELEASE: + if (copy_from_user(&rar_handle, + argp, + sizeof(rar_handle))) + return -EFAULT; + + return memrar_release_block(rar_handle); + + case RAR_HANDLER_STAT: + if (copy_from_user(&rar_info, + argp, + sizeof(rar_info))) + return -EFAULT; + + /* + * Populate the RAR_stat structure based on the RAR + * type given by the user + */ + if (memrar_get_stat(&rar_info) != 0) + return -EINVAL; + + /* + * @todo Do we need to verify destination pointer + * "argp" is non-zero? Is that already done by + * copy_to_user()? + */ + return copy_to_user(argp, + &rar_info, + sizeof(rar_info)) ? -EFAULT : 0; + + default: + return -ENOTTY; + } + + return 0; +} + +static int memrar_mmap(struct file *filp, struct vm_area_struct *vma) +{ + /* + * This mmap() implementation is predominantly useful for + * debugging since the CPU will be prevented from accessing + * RAR memory by the hardware when RAR is properly locked + * down. + * + * In order for this implementation to be useful RAR memory + * must be not be locked down. However, we only want to do + * that when debugging. DO NOT leave RAR memory unlocked in a + * deployed device that utilizes RAR. + */ + + size_t const size = vma->vm_end - vma->vm_start; + + /* Users pass the RAR handle as the mmap() offset parameter. */ + unsigned long const handle = vma->vm_pgoff << PAGE_SHIFT; + + struct memrar_rar_info * const rar = memrar_get_rar_info(handle); + + unsigned long pfn; + + /* Invalid RAR handle or size passed to mmap(). */ + if (rar == NULL + || handle == 0 + || size > (handle - (unsigned long) rar->iobase)) + return -EINVAL; + + /* + * Retrieve physical address corresponding to the RAR handle, + * and convert it to a page frame. + */ + pfn = memrar_get_physical_address(rar, handle) >> PAGE_SHIFT; + + + pr_debug("memrar: mapping RAR range [0x%lx, 0x%lx) into user space.\n", + handle, + handle + size); + + /* + * Map RAR memory into user space. This is really only useful + * for debugging purposes since the memory won't be + * accessible, i.e. reads return zero and writes are ignored, + * when RAR access control is enabled. + */ + if (remap_pfn_range(vma, + vma->vm_start, + pfn, + size, + vma->vm_page_prot)) + return -EAGAIN; + + /* vma->vm_ops = &memrar_mem_ops; */ + + return 0; +} + +static int memrar_open(struct inode *inode, struct file *filp) +{ + /* Nothing to do yet. */ + + return 0; +} + +static int memrar_release(struct inode *inode, struct file *filp) +{ + /* Free all regions associated with the given file handle. */ + + struct memrar_buffer_info *pos; + struct memrar_buffer_info *tmp; + int z; + + for (z = 0; z != MRST_NUM_RAR; ++z) { + struct memrar_rar_info * const rar = &memrars[z]; + + mutex_lock(&rar->lock); + + list_for_each_entry_safe(pos, + tmp, + &rar->buffers.list, + list) { + if (filp == pos->owner) + kref_put(&pos->refcount, + memrar_release_block_i); + } + + mutex_unlock(&rar->lock); + } + + return 0; +} + +/* + * This function is part of the kernel space memrar driver API. + */ +size_t rar_reserve(struct RAR_buffer *buffers, size_t count) +{ + struct RAR_buffer * const end = + (buffers == NULL ? buffers : buffers + count); + struct RAR_buffer *i; + + size_t reserve_count = 0; + + for (i = buffers; i != end; ++i) { + if (memrar_reserve_block(i, NULL) == 0) + ++reserve_count; + else + i->bus_address = 0; + } + + return reserve_count; +} +EXPORT_SYMBOL(rar_reserve); + +/* + * This function is part of the kernel space memrar driver API. + */ +size_t rar_release(struct RAR_buffer *buffers, size_t count) +{ + struct RAR_buffer * const end = + (buffers == NULL ? buffers : buffers + count); + struct RAR_buffer *i; + + size_t release_count = 0; + + for (i = buffers; i != end; ++i) { + u32 * const handle = &i->info.handle; + if (memrar_release_block(*handle) == 0) { + /* + * @todo We assume we should do this each time + * the ref count is decremented. Should + * we instead only do this when the ref + * count has dropped to zero, and the + * buffer has been completely + * released/unmapped? + */ + *handle = 0; + ++release_count; + } + } + + return release_count; +} +EXPORT_SYMBOL(rar_release); + +/* + * This function is part of the kernel space driver API. + */ +size_t rar_handle_to_bus(struct RAR_buffer *buffers, size_t count) +{ + struct RAR_buffer * const end = + (buffers == NULL ? buffers : buffers + count); + struct RAR_buffer *i; + struct memrar_buffer_info *pos; + + size_t conversion_count = 0; + + /* + * Find all bus addresses corresponding to the given handles. + * + * @todo Not liking this nested loop. Optimize. + */ + for (i = buffers; i != end; ++i) { + struct memrar_rar_info * const rar = + memrar_get_rar_info(i->info.handle); + + /* + * Check if we have a bogus handle, and then continue + * with remaining buffers. + */ + if (rar == NULL) { + i->bus_address = 0; + continue; + } + + mutex_lock(&rar->lock); + + list_for_each_entry(pos, &rar->buffers.list, list) { + struct RAR_block_info * const user_info = + &pos->buffer.info; + + /* + * Take into account handle offsets that may + * have been added to the base handle, such as + * in the following scenario: + * + * u32 handle = base + offset; + * rar_handle_to_bus(handle); + */ + + if (i->info.handle >= user_info->handle + && i->info.handle < (user_info->handle + + user_info->size)) { + u32 const offset = + i->info.handle - user_info->handle; + + i->info.type = user_info->type; + i->info.size = user_info->size - offset; + i->bus_address = + pos->buffer.bus_address + + offset; + + /* Increment the reference count. */ + kref_get(&pos->refcount); + + ++conversion_count; + break; + } else { + i->bus_address = 0; + } + } + + mutex_unlock(&rar->lock); + } + + return conversion_count; +} +EXPORT_SYMBOL(rar_handle_to_bus); + +static const struct file_operations memrar_fops = { + .owner = THIS_MODULE, + .unlocked_ioctl = memrar_ioctl, + .mmap = memrar_mmap, + .open = memrar_open, + .release = memrar_release, +}; + +static struct miscdevice memrar_miscdev = { + .minor = MISC_DYNAMIC_MINOR, /* dynamic allocation */ + .name = "memrar", /* /dev/memrar */ + .fops = &memrar_fops +}; + +static char const banner[] __initdata = + KERN_INFO + "Intel RAR Handler: " MEMRAR_VER " initialized.\n"; + +static int memrar_registration_callback(void *ctx) +{ + /* + * We initialize the RAR parameters early on so that we can + * discontinue memrar device initialization and registration + * if suitably configured RARs are not available. + */ + int result = memrar_init_rar_resources(memrar_miscdev.name); + + if (result != 0) + return result; + + result = misc_register(&memrar_miscdev); + + if (result != 0) { + pr_err("%s: misc_register() failed.\n", + memrar_miscdev.name); + + /* Clean up resources previously reserved. */ + memrar_fini_rar_resources(); + } + + return result; +} + +static int __init memrar_init(void) +{ + printk(banner); + + return register_rar(&memrar_registration_callback, 0); +} + +static void __exit memrar_exit(void) +{ + memrar_fini_rar_resources(); + + misc_deregister(&memrar_miscdev); +} + + +module_init(memrar_init); +module_exit(memrar_exit); + + +MODULE_AUTHOR("Ossama Othman "); +MODULE_DESCRIPTION("Intel Restricted Access Region Handler"); +MODULE_LICENSE("GPL"); +MODULE_ALIAS_MISCDEV(MISC_DYNAMIC_MINOR); +MODULE_VERSION(MEMRAR_VER); + + + +/* + Local Variables: + c-file-style: "linux" + End: +*/ -- cgit v0.10.2 From b852fdcefc782b6751f96a8ea09471efd844b6bf Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 9 Mar 2010 17:42:33 -0800 Subject: Staging: hv: use network device stats The network device structure has space already reserved for statistics. Compile tested only. Signed-off-by: Stephen Hemminger Cc: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/TODO b/drivers/staging/hv/TODO index 01d4bd0..66a89c8 100644 --- a/drivers/staging/hv/TODO +++ b/drivers/staging/hv/TODO @@ -7,7 +7,6 @@ TODO: - see if the vmbus can be merged with the other virtual busses in the kernel - audit the network driver - - use existing net_device_stats struct in network device - checking for carrier inside open is wrong, network device API confusion?? - audit the block driver diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 5ed6e6e..e87a7c2 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -43,7 +43,6 @@ struct net_device_context { /* point back to our device context */ struct vm_device *device_ctx; - struct net_device_stats stats; }; struct netvsc_driver_context { @@ -58,13 +57,6 @@ static int netvsc_ringbuffer_size = NETVSC_DEVICE_RING_BUFFER_SIZE; /* The one and only one */ static struct netvsc_driver_context g_netvsc_drv; -static struct net_device_stats *netvsc_get_stats(struct net_device *net) -{ - struct net_device_context *net_device_ctx = netdev_priv(net); - - return &net_device_ctx->stats; -} - static void netvsc_set_multicast_list(struct net_device *net) { } @@ -78,9 +70,6 @@ static int netvsc_open(struct net_device *net) DPRINT_ENTER(NETVSC_DRV); if (netif_carrier_ok(net)) { - memset(&net_device_ctx->stats, 0, - sizeof(struct net_device_stats)); - /* Open up the device */ ret = RndisFilterOnOpen(device_obj); if (ret != 0) { @@ -224,8 +213,8 @@ retry_send: if (ret == 0) { ret = NETDEV_TX_OK; - net_device_ctx->stats.tx_bytes += skb->len; - net_device_ctx->stats.tx_packets++; + net->stats.tx_bytes += skb->len; + net->stats.tx_packets++; } else { retries++; if (retries < 4) { @@ -241,7 +230,7 @@ retry_send: DPRINT_INFO(NETVSC_DRV, "net device (%p) stopping", net); ret = NETDEV_TX_BUSY; - net_device_ctx->stats.tx_dropped++; + net->stats.tx_dropped++; netif_stop_queue(net); @@ -259,8 +248,8 @@ retry_send: } DPRINT_DBG(NETVSC_DRV, "# of xmits %lu total size %lu", - net_device_ctx->stats.tx_packets, - net_device_ctx->stats.tx_bytes); + net->stats.tx_packets, + net->stats.tx_bytes); DPRINT_EXIT(NETVSC_DRV); return ret; @@ -360,17 +349,16 @@ static int netvsc_recv_callback(struct hv_device *device_obj, switch (ret) { case NET_RX_DROP: - net_device_ctx->stats.rx_dropped++; + net->stats.rx_dropped++; break; default: - net_device_ctx->stats.rx_packets++; - net_device_ctx->stats.rx_bytes += skb->len; + net->stats.rx_packets++; + net->stats.rx_bytes += skb->len; break; } DPRINT_DBG(NETVSC_DRV, "# of recvs %lu total size %lu", - net_device_ctx->stats.rx_packets, - net_device_ctx->stats.rx_bytes); + net->stats.rx_packets, net->stats.rx_bytes); DPRINT_EXIT(NETVSC_DRV); @@ -381,7 +369,6 @@ static const struct net_device_ops device_ops = { .ndo_open = netvsc_open, .ndo_stop = netvsc_close, .ndo_start_xmit = netvsc_start_xmit, - .ndo_get_stats = netvsc_get_stats, .ndo_set_multicast_list = netvsc_set_multicast_list, }; -- cgit v0.10.2 From 9495c282baf53ec7bfffcb9dd9f40cb10d4240e0 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 9 Mar 2010 17:42:17 -0800 Subject: Staging: hv: handle skb allocation failure Some fixes to receive handling: * Dieing with assertion failure when running out of memory is not ok * Use newer alloc function to get aligned skb * Dropped statistic is supposed to be incremented only by driver it was responsible for the drop. Compile tested only. Signed-off-by: Stephen Hemminger Cc: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index e87a7c2..51a56e2 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -294,7 +294,6 @@ static int netvsc_recv_callback(struct hv_device *device_obj, struct net_device_context *net_device_ctx; struct sk_buff *skb; void *data; - int ret; int i; unsigned long flags; @@ -308,12 +307,12 @@ static int netvsc_recv_callback(struct hv_device *device_obj, net_device_ctx = netdev_priv(net); - /* Allocate a skb - TODO preallocate this */ - /* Pad 2-bytes to align IP header to 16 bytes */ - skb = dev_alloc_skb(packet->TotalDataBufferLength + 2); - ASSERT(skb); - skb_reserve(skb, 2); - skb->dev = net; + /* Allocate a skb - TODO direct I/O to pages? */ + skb = netdev_alloc_skb_ip_align(net, packet->TotalDataBufferLength); + if (unlikely(!skb)) { + ++net->stats.rx_dropped; + return 0; + } /* for kmap_atomic */ local_irq_save(flags); @@ -338,25 +337,18 @@ static int netvsc_recv_callback(struct hv_device *device_obj, local_irq_restore(flags); skb->protocol = eth_type_trans(skb, net); - skb->ip_summed = CHECKSUM_NONE; + net->stats.rx_packets++; + net->stats.rx_bytes += skb->len; + /* * Pass the skb back up. Network stack will deallocate the skb when it - * is done + * is done. + * TODO - use NAPI? */ - ret = netif_rx(skb); - - switch (ret) { - case NET_RX_DROP: - net->stats.rx_dropped++; - break; - default: - net->stats.rx_packets++; - net->stats.rx_bytes += skb->len; - break; + netif_rx(skb); - } DPRINT_DBG(NETVSC_DRV, "# of recvs %lu total size %lu", net->stats.rx_packets, net->stats.rx_bytes); -- cgit v0.10.2 From 177d42821e2d662fda5bb57d31d33d215fb74fd0 Mon Sep 17 00:00:00 2001 From: Aseem Sethi Date: Wed, 10 Mar 2010 00:04:36 +0530 Subject: Staging: comedi: fix missing KERN_facility level in ni_labpc.c This is a patch to fix the "missing KERN_facility level" error found when running the checkpatch.pl script Signed-off-by: Aseem Sethi Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 558e525..9b840a9 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -536,7 +536,7 @@ int labpc_common_attach(struct comedi_device *dev, unsigned long iobase, printk("\n"); if (iobase == 0) { - printk("io base address is zero!\n"); + printk(KERN_ERR "io base address is zero!\n"); return -EINVAL; } /* request io regions for isa boards */ -- cgit v0.10.2 From b7e7031aea1215da499b51fea0ade6b92f1232af Mon Sep 17 00:00:00 2001 From: "Prashant P. Shah" Date: Tue, 9 Mar 2010 20:16:44 +0530 Subject: Staging: netwave: fixed trailing whitespace style issue in netwave_cs.c This is a patch to the netwave_cs.c file that fixes up all the trailing whitespace errors found by the checkpatch.pl tool. Signed-off-by: Prashant P. Shah Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/netwave/netwave_cs.c b/drivers/staging/netwave/netwave_cs.c index 3875a72..7b31621 100644 --- a/drivers/staging/netwave/netwave_cs.c +++ b/drivers/staging/netwave/netwave_cs.c @@ -1,5 +1,5 @@ /********************************************************************* - * + * * Filename: netwave_cs.c * Version: 0.4.1 * Description: Netwave AirSurfer Wireless LAN PC Card driver @@ -10,27 +10,27 @@ * Created at: A long time ago! * Modified at: Mon Nov 10 11:54:37 1997 * Modified by: Dag Brattli - * + * * Copyright (c) 1997 University of Tromsø, Norway * * Revision History: * * 08-Nov-97 15:14:47 John Markus Bjørndalen - * - Fixed some bugs in netwave_rx and cleaned it up a bit. + * - Fixed some bugs in netwave_rx and cleaned it up a bit. * (One of the bugs would have destroyed packets when receiving - * multiple packets per interrupt). - * - Cleaned up parts of newave_hw_xmit. - * - A few general cleanups. + * multiple packets per interrupt). + * - Cleaned up parts of newave_hw_xmit. + * - A few general cleanups. * 24-Oct-97 13:17:36 Dag Brattli * - Fixed netwave_rx receive function (got updated docs) * Others: - * - Changed name from xircnw to netwave, take a look at + * - Changed name from xircnw to netwave, take a look at * http://www.netwave-wireless.com * - Some reorganizing of the code * - Removed possible race condition between interrupt handler and transmit * function * - Started to add wireless extensions, but still needs some coding - * - Added watchdog for better handling of transmission timeouts + * - Added watchdog for better handling of transmission timeouts * (hopefully this works better) ********************************************************************/ @@ -101,7 +101,7 @@ /* * Commands used in the extended command buffer - * NETWAVE_EREG_CB (0x100-0x10F) + * NETWAVE_EREG_CB (0x100-0x10F) */ #define NETWAVE_CMD_NOP 0x00 #define NETWAVE_CMD_SRC 0x01 @@ -133,7 +133,7 @@ static const unsigned int corConfIENA = 0x01; /* Interrupt enable */ static const unsigned int corConfLVLREQ = 0x40; /* Keep high */ static const unsigned int rxConfRxEna = 0x80; /* Receive Enable */ -static const unsigned int rxConfMAC = 0x20; /* MAC host receive mode*/ +static const unsigned int rxConfMAC = 0x20; /* MAC host receive mode*/ static const unsigned int rxConfPro = 0x10; /* Promiscuous */ static const unsigned int rxConfAMP = 0x08; /* Accept Multicast Packets */ static const unsigned int rxConfBcast = 0x04; /* Accept Broadcast Packets */ @@ -152,15 +152,15 @@ static const unsigned int txConfLoop = 0x01; /* Loopback mode */ /* Choose the domain, default is 0x100 */ static u_int domain = 0x100; -/* Scramble key, range from 0x0 to 0xffff. - * 0x0 is no scrambling. +/* Scramble key, range from 0x0 to 0xffff. + * 0x0 is no scrambling. */ static u_int scramble_key = 0x0; -/* Shared memory speed, in ns. The documentation states that - * the card should not be read faster than every 400ns. - * This timing should be provided by the HBA. If it becomes a - * problem, try setting mem_speed to 400. +/* Shared memory speed, in ns. The documentation states that + * the card should not be read faster than every 400ns. + * This timing should be provided by the HBA. If it becomes a + * problem, try setting mem_speed to 400. */ static int mem_speed; @@ -229,7 +229,7 @@ struct site_survey { u_short length; u_char struct_revision; u_char roaming_state; - + u_char sp_existsFlag; u_char sp_link_quality; u_char sp_max_link_quality; @@ -239,12 +239,12 @@ struct site_survey { u_char sp_goodness; u_char sp_hotheadcount; u_char roaming_condition; - + net_addr sp; u_char numAPs; net_addr nearByAccessPoints[MAX_ESA]; -}; - +}; + typedef struct netwave_private { struct pcmcia_device *p_dev; spinlock_t spinlock; /* Serialize access to the hardware (SMP) */ @@ -261,7 +261,7 @@ typedef struct netwave_private { * The Netwave card is little-endian, so won't work for big endian * systems. */ -static inline unsigned short get_uint16(u_char __iomem *staddr) +static inline unsigned short get_uint16(u_char __iomem *staddr) { return readw(staddr); /* Return only 16 bits */ } @@ -271,38 +271,38 @@ static inline short get_int16(u_char __iomem * staddr) return readw(staddr); } -/* - * Wait until the WOC (Write Operation Complete) bit in the - * ASR (Adapter Status Register) is asserted. - * This should have aborted if it takes too long time. +/* + * Wait until the WOC (Write Operation Complete) bit in the + * ASR (Adapter Status Register) is asserted. + * This should have aborted if it takes too long time. */ static inline void wait_WOC(unsigned int iobase) { /* Spin lock */ - while ((inb(iobase + NETWAVE_REG_ASR) & 0x8) != 0x8) ; + while ((inb(iobase + NETWAVE_REG_ASR) & 0x8) != 0x8) ; } -static void netwave_snapshot(netwave_private *priv, u_char __iomem *ramBase, +static void netwave_snapshot(netwave_private *priv, u_char __iomem *ramBase, unsigned int iobase) { u_short resultBuffer; - /* if time since last snapshot is > 1 sec. (100 jiffies?) then take - * new snapshot, else return cached data. This is the recommended rate. + /* if time since last snapshot is > 1 sec. (100 jiffies?) then take + * new snapshot, else return cached data. This is the recommended rate. */ - if ( jiffies - priv->lastExec > 100) { - /* Take site survey snapshot */ + if ( jiffies - priv->lastExec > 100) { + /* Take site survey snapshot */ /*printk( KERN_DEBUG "Taking new snapshot. %ld\n", jiffies - priv->lastExec); */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_SSS, ramBase + NETWAVE_EREG_CB + 0); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); - wait_WOC(iobase); - - /* Get result and copy to cach */ - resultBuffer = readw(ramBase + NETWAVE_EREG_CRBP); - copy_from_pc( &priv->nss, ramBase+resultBuffer, - sizeof(struct site_survey)); - } + wait_WOC(iobase); + writeb(NETWAVE_CMD_SSS, ramBase + NETWAVE_EREG_CB + 0); + writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); + wait_WOC(iobase); + + /* Get result and copy to cach */ + resultBuffer = readw(ramBase + NETWAVE_EREG_CRBP); + copy_from_pc( &priv->nss, ramBase+resultBuffer, + sizeof(struct site_survey)); + } } /* @@ -312,21 +312,21 @@ static void netwave_snapshot(netwave_private *priv, u_char __iomem *ramBase, * */ static struct iw_statistics *netwave_get_wireless_stats(struct net_device *dev) -{ +{ unsigned long flags; unsigned int iobase = dev->base_addr; netwave_private *priv = netdev_priv(dev); u_char __iomem *ramBase = priv->ramBase; struct iw_statistics* wstats; - + wstats = &priv->iw_stats; spin_lock_irqsave(&priv->spinlock, flags); - + netwave_snapshot( priv, ramBase, iobase); wstats->status = priv->nss.roaming_state; - wstats->qual.qual = readb( ramBase + NETWAVE_EREG_SPCQ); + wstats->qual.qual = readb( ramBase + NETWAVE_EREG_SPCQ); wstats->qual.level = readb( ramBase + NETWAVE_EREG_ISPLQ); wstats->qual.noise = readb( ramBase + NETWAVE_EREG_SPU) & 0x3f; wstats->discard.nwid = 0L; @@ -334,7 +334,7 @@ static struct iw_statistics *netwave_get_wireless_stats(struct net_device *dev) wstats->discard.misc = 0L; spin_unlock_irqrestore(&priv->spinlock, flags); - + return &priv->iw_stats; } @@ -352,8 +352,8 @@ static const struct net_device_ops netwave_netdev_ops = { /* * Function netwave_attach (void) * - * Creates an "instance" of the driver, allocating local data - * structures for one device. The device is registered with Card + * Creates an "instance" of the driver, allocating local data + * structures for one device. The device is registered with Card * Services. * * The dev_link structure is initialized, but we don't actually @@ -378,14 +378,14 @@ static int netwave_probe(struct pcmcia_device *link) /* The io structure describes IO port mapping */ link->io.NumPorts1 = 16; link->io.Attributes1 = IO_DATA_PATH_WIDTH_16; - /* link->io.NumPorts2 = 16; + /* link->io.NumPorts2 = 16; link->io.Attributes2 = IO_DATA_PATH_WIDTH_16; */ link->io.IOAddrLines = 5; - + /* Interrupt setup */ link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; link->irq.Handler = &netwave_interrupt; - + /* General socket configuration */ link->conf.Attributes = CONF_ENABLE_IRQ; link->conf.IntType = INT_MEMORY_AND_IO; @@ -457,7 +457,7 @@ static int netwave_set_nwid(struct net_device *dev, if(!wrqu->nwid.disabled) { domain = wrqu->nwid.value; - printk( KERN_DEBUG "Setting domain to 0x%x%02x\n", + printk( KERN_DEBUG "Setting domain to 0x%x%02x\n", (domain >> 8) & 0x01, domain & 0xff); wait_WOC(iobase); writeb(NETWAVE_CMD_SMD, ramBase + NETWAVE_EREG_CB + 0); @@ -468,7 +468,7 @@ static int netwave_set_nwid(struct net_device *dev, /* ReEnable interrupts & restore flags */ spin_unlock_irqrestore(&priv->spinlock, flags); - + return 0; } @@ -511,7 +511,7 @@ static int netwave_set_scramble(struct net_device *dev, /* ReEnable interrupts & restore flags */ spin_unlock_irqrestore(&priv->spinlock, flags); - + return 0; } @@ -566,19 +566,19 @@ static int netwave_get_range(struct net_device *dev, /* Set the Wireless Extension versions */ range->we_version_compiled = WIRELESS_EXT; range->we_version_source = 9; /* Nothing for us in v10 and v11 */ - + /* Set information in the range struct */ range->throughput = 450 * 1000; /* don't argue on this ! */ range->min_nwid = 0x0000; range->max_nwid = 0x01FF; range->num_channels = range->num_frequency = 0; - + range->sensitivity = 0x3F; range->max_qual.qual = 255; range->max_qual.level = 255; range->max_qual.noise = 0; - + range->num_bitrates = 1; range->bitrate[0] = 1000000; /* 1 Mb/s */ @@ -614,7 +614,7 @@ static int netwave_get_snap(struct net_device *dev, /* ReEnable interrupts & restore flags */ spin_unlock_irqrestore(&priv->spinlock, flags); - + return(0); } @@ -625,8 +625,8 @@ static int netwave_get_snap(struct net_device *dev, static const struct iw_priv_args netwave_private_args[] = { /*{ cmd, set_args, get_args, name } */ - { SIOCGIPSNAP, 0, - IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | sizeof(struct site_survey), + { SIOCGIPSNAP, 0, + IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | sizeof(struct site_survey), "getsitesurvey" }, }; @@ -698,9 +698,9 @@ static const struct iw_handler_def netwave_handler_def = /* * Function netwave_pcmcia_config (link) * - * netwave_pcmcia_config() is scheduled to run after a CARD_INSERTION + * netwave_pcmcia_config() is scheduled to run after a CARD_INSERTION * event is received, to configure the PCMCIA socket, and to make the - * device available to the system. + * device available to the system. * */ @@ -758,7 +758,7 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) { ret = pcmcia_request_window(link, &req, &link->win); if (ret) goto failed; - mem.CardOffset = 0x20000; mem.Page = 0; + mem.CardOffset = 0x20000; mem.Page = 0; ret = pcmcia_map_mem_page(link, link->win, &mem); if (ret) goto failed; @@ -783,7 +783,7 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) { netwave_doreset(dev->base_addr, ramBase); /* Read the ethernet address and fill in the Netwave registers. */ - for (i = 0; i < 6; i++) + for (i = 0; i < 6; i++) dev->dev_addr[i] = readb(ramBase + NETWAVE_EREG_PA + i); printk(KERN_INFO "%s: Netwave: port %#3lx, irq %d, mem %lx, " @@ -795,7 +795,7 @@ static int netwave_pcmcia_config(struct pcmcia_device *link) { dev->dev_addr); /* get revision words */ - printk(KERN_DEBUG "Netwave_reset: revision %04x %04x\n", + printk(KERN_DEBUG "Netwave_reset: revision %04x %04x\n", get_uint16(ramBase + NETWAVE_EREG_ARW), get_uint16(ramBase + NETWAVE_EREG_ARW+2)); return 0; @@ -864,7 +864,7 @@ static void netwave_doreset(unsigned int ioBase, u_char __iomem *ramBase) /* * Function netwave_reset (dev) * - * Reset and restore all of the netwave registers + * Reset and restore all of the netwave registers */ static void netwave_reset(struct net_device *dev) { /* u_char state; */ @@ -879,24 +879,24 @@ static void netwave_reset(struct net_device *dev) { /* Reset card */ netwave_doreset(iobase, ramBase); printk(KERN_DEBUG "netwave_reset: Done with hardware reset\n"); - + /* Write a NOP to check the card */ wait_WOC(iobase); writeb(NETWAVE_CMD_NOP, ramBase + NETWAVE_EREG_CB + 0); writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); - + /* Set receive conf */ wait_WOC(iobase); writeb(NETWAVE_CMD_SRC, ramBase + NETWAVE_EREG_CB + 0); writeb(rxConfRxEna + rxConfBcast, ramBase + NETWAVE_EREG_CB + 1); writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2); - + /* Set transmit conf */ wait_WOC(iobase); writeb(NETWAVE_CMD_STC, ramBase + NETWAVE_EREG_CB + 0); writeb(txConfTxEna, ramBase + NETWAVE_EREG_CB + 1); writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2); - + /* Now set the MU Domain */ printk(KERN_DEBUG "Setting domain to 0x%x%02x\n", (domain >> 8) & 0x01, domain & 0xff); wait_WOC(iobase); @@ -904,7 +904,7 @@ static void netwave_reset(struct net_device *dev) { writeb(domain & 0xff, ramBase + NETWAVE_EREG_CB + 1); writeb((domain>>8) & 0x01, ramBase + NETWAVE_EREG_CB + 2); writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3); - + /* Set scramble key */ printk(KERN_DEBUG "Setting scramble key to 0x%x\n", scramble_key); wait_WOC(iobase); @@ -914,8 +914,8 @@ static void netwave_reset(struct net_device *dev) { writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3); /* Enable interrupts, bit 4 high to keep unused - * source from interrupting us, bit 2 high to - * set interrupt enable, 567 to enable TxDN, + * source from interrupting us, bit 2 high to + * set interrupt enable, 567 to enable TxDN, * RxErr and RxRdy */ wait_WOC(iobase); @@ -926,29 +926,29 @@ static void netwave_reset(struct net_device *dev) { * skriv 80 til d000:3688 * sjekk om det ble 80 */ - + /* Enable Receiver */ wait_WOC(iobase); writeb(NETWAVE_CMD_ER, ramBase + NETWAVE_EREG_CB + 0); writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); - + /* Set the IENA bit in COR */ wait_WOC(iobase); outb(corConfIENA + corConfLVLREQ, iobase + NETWAVE_REG_COR); } /* - * Function netwave_hw_xmit (data, len, dev) + * Function netwave_hw_xmit (data, len, dev) */ static int netwave_hw_xmit(unsigned char* data, int len, struct net_device* dev) { unsigned long flags; unsigned int TxFreeList, curBuff, - MaxData, + MaxData, DataOffset; - int tmpcount; - + int tmpcount; + netwave_private *priv = netdev_priv(dev); u_char __iomem * ramBase = priv->ramBase; unsigned int iobase = dev->base_addr; @@ -979,23 +979,23 @@ static int netwave_hw_xmit(unsigned char* data, int len, TxFreeList = get_uint16(ramBase + NETWAVE_EREG_TDP); MaxData = get_uint16(ramBase + NETWAVE_EREG_TDP+2); DataOffset = get_uint16(ramBase + NETWAVE_EREG_TDP+4); - + pr_debug("TxFreeList %x, MaxData %x, DataOffset %x\n", TxFreeList, MaxData, DataOffset); /* Copy packet to the adapter fragment buffers */ - curBuff = TxFreeList; - tmpcount = 0; + curBuff = TxFreeList; + tmpcount = 0; while (tmpcount < len) { - int tmplen = len - tmpcount; - copy_to_pc(ramBase + curBuff + DataOffset, data + tmpcount, + int tmplen = len - tmpcount; + copy_to_pc(ramBase + curBuff + DataOffset, data + tmpcount, (tmplen < MaxData) ? tmplen : MaxData); tmpcount += MaxData; - + /* Advance to next buffer */ curBuff = get_uint16(ramBase + curBuff); } - + /* Now issue transmit list */ wait_WOC(iobase); writeb(NETWAVE_CMD_TL, ramBase + NETWAVE_EREG_CB + 0); @@ -1020,7 +1020,7 @@ static netdev_tx_t netwave_start_xmit(struct sk_buff *skb, { short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; unsigned char* buf = skb->data; - + if (netwave_hw_xmit( buf, length, dev) == 1) { /* Some error, let's make them call us another time? */ netif_start_queue(dev); @@ -1028,7 +1028,7 @@ static netdev_tx_t netwave_start_xmit(struct sk_buff *skb, dev->trans_start = jiffies; } dev_kfree_skb(skb); - + return NETDEV_TX_OK; } /* netwave_start_xmit */ @@ -1036,7 +1036,7 @@ static netdev_tx_t netwave_start_xmit(struct sk_buff *skb, * Function netwave_interrupt (irq, dev_id) * * This function is the interrupt handler for the Netwave card. This - * routine will be called whenever: + * routine will be called whenever: * 1. A packet is received. * 2. A packet has successfully been transferred and the unit is * ready to transmit another packet. @@ -1050,29 +1050,29 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id) struct netwave_private *priv = netdev_priv(dev); struct pcmcia_device *link = priv->p_dev; int i; - + if (!netif_device_present(dev)) return IRQ_NONE; - + iobase = dev->base_addr; ramBase = priv->ramBase; - + /* Now find what caused the interrupt, check while interrupts ready */ for (i = 0; i < 10; i++) { u_char status; - - wait_WOC(iobase); + + wait_WOC(iobase); if (!(inb(iobase+NETWAVE_REG_CCSR) & 0x02)) break; /* None of the interrupt sources asserted (normal exit) */ - + status = inb(iobase + NETWAVE_REG_ASR); - + if (!pcmcia_dev_present(link)) { pr_debug("netwave_interrupt: Interrupt with status 0x%x " "from removed or suspended card!\n", status); break; } - + /* RxRdy */ if (status & 0x80) { netwave_rx(dev); @@ -1082,24 +1082,24 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id) /* RxErr */ if (status & 0x40) { u_char rser; - - rser = readb(ramBase + NETWAVE_EREG_RSER); - + + rser = readb(ramBase + NETWAVE_EREG_RSER); + if (rser & 0x04) { ++dev->stats.rx_dropped; ++dev->stats.rx_crc_errors; } if (rser & 0x02) ++dev->stats.rx_frame_errors; - + /* Clear the RxErr bit in RSER. RSER+4 is the - * write part. Also clear the RxCRC (0x04) and + * write part. Also clear the RxCRC (0x04) and * RxBig (0x02) bits if present */ wait_WOC(iobase); writeb(0x40 | (rser & 0x06), ramBase + NETWAVE_EREG_RSER + 4); /* Write bit 6 high to ASCC to clear RxErr in ASR, - * WOC must be set first! + * WOC must be set first! */ wait_WOC(iobase); writeb(0x40, ramBase + NETWAVE_EREG_ASCC); @@ -1114,31 +1114,31 @@ static irqreturn_t netwave_interrupt(int irq, void* dev_id) txStatus = readb(ramBase + NETWAVE_EREG_TSER); pr_debug("Transmit done. TSER = %x id %x\n", txStatus, readb(ramBase + NETWAVE_EREG_TSER + 1)); - + if (txStatus & 0x20) { /* Transmitting was okay, clear bits */ wait_WOC(iobase); writeb(0x2f, ramBase + NETWAVE_EREG_TSER + 4); ++dev->stats.tx_packets; } - + if (txStatus & 0xd0) { if (txStatus & 0x80) { ++dev->stats.collisions; /* Because of /proc/net/dev*/ /* ++dev->stats.tx_aborted_errors; */ /* printk("Collision. %ld\n", jiffies - dev->trans_start); */ } - if (txStatus & 0x40) + if (txStatus & 0x40) ++dev->stats.tx_carrier_errors; /* 0x80 TxGU Transmit giveup - nine times and no luck * 0x40 TxNOAP No access point. Discarded packet. - * 0x10 TxErr Transmit error. Always set when + * 0x10 TxErr Transmit error. Always set when * TxGU and TxNOAP is set. (Those are the only ones * to set TxErr). */ pr_debug("netwave_interrupt: TxDN with error status %x\n", txStatus); - + /* Clear out TxGU, TxNOAP, TxErr and TxTrys */ wait_WOC(iobase); writeb(0xdf & txStatus, ramBase+NETWAVE_EREG_TSER+4); @@ -1190,31 +1190,31 @@ static int netwave_rx(struct net_device *dev) int dataCount, dataOffset; int i; u_char *ptr; - + pr_debug("xinw_rx: Receiving ... \n"); /* Receive max 10 packets for now. */ for (i = 0; i < 10; i++) { /* Any packets? */ wait_WOC(iobase); - rxStatus = readb(ramBase + NETWAVE_EREG_RSER); + rxStatus = readb(ramBase + NETWAVE_EREG_RSER); if ( !( rxStatus & 0x80)) /* No more packets */ break; - + /* Check if multicast/broadcast or other */ /* multicast = (rxStatus & 0x20); */ - + /* The receive list pointer and length of the packet */ wait_WOC(iobase); rcvLen = get_int16( ramBase + NETWAVE_EREG_RDP); rcvList = get_uint16( ramBase + NETWAVE_EREG_RDP + 2); - + if (rcvLen < 0) { - printk(KERN_DEBUG "netwave_rx: Receive packet with len %d\n", + printk(KERN_DEBUG "netwave_rx: Receive packet with len %d\n", rcvLen); return 0; } - + skb = dev_alloc_skb(rcvLen+5); if (skb == NULL) { pr_debug("netwave_rx: Could not allocate an sk_buff of " @@ -1233,21 +1233,21 @@ static int netwave_rx(struct net_device *dev) /* Copy packet fragments to the skb data area */ ptr = (u_char*) skb->data; curBuffer = rcvList; - tmpcount = 0; + tmpcount = 0; while ( tmpcount < rcvLen) { /* Get length and offset of current buffer */ dataCount = get_uint16( ramBase+curBuffer+2); dataOffset = get_uint16( ramBase+curBuffer+4); - + copy_from_pc( ptr + tmpcount, ramBase+curBuffer+dataOffset, dataCount); tmpcount += dataCount; - + /* Point to next buffer */ curBuffer = get_uint16(ramBase + curBuffer); } - + skb->protocol = eth_type_trans(skb,dev); /* Queue packet for network layer */ netif_rx(skb); @@ -1269,7 +1269,7 @@ static int netwave_open(struct net_device *dev) { struct pcmcia_device *link = priv->p_dev; dev_dbg(&link->dev, "netwave_open: starting.\n"); - + if (!pcmcia_dev_present(link)) return -ENODEV; @@ -1277,7 +1277,7 @@ static int netwave_open(struct net_device *dev) { netif_start_queue(dev); netwave_reset(dev); - + return 0; } @@ -1336,7 +1336,7 @@ static void set_multicast_list(struct net_device *dev) netwave_private *priv = netdev_priv(dev); u_char __iomem * ramBase = priv->ramBase; u_char rcvMode = 0; - + #ifdef PCMCIA_DEBUG { xstatic int old; @@ -1347,7 +1347,7 @@ static void set_multicast_list(struct net_device *dev) } } #endif - + if (!netdev_mc_empty(dev) || (dev->flags & IFF_ALLMULTI)) { /* Multicast Mode */ rcvMode = rxConfRxEna + rxConfAMP + rxConfBcast; @@ -1358,7 +1358,7 @@ static void set_multicast_list(struct net_device *dev) /* Normal mode */ rcvMode = rxConfRxEna + rxConfBcast; } - + /* printk("netwave set_multicast_list: rcvMode to %x\n", rcvMode);*/ /* Now set receive mode */ wait_WOC(iobase); -- cgit v0.10.2 From 8d1fe5eaa3b796609a8e2b7dad2480e623c19819 Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Tue, 9 Mar 2010 22:14:58 +0100 Subject: Staging: otus: drop redundant memset The region set by the call to memset is immediately overwritten by the subsequent call to memcpy. The semantic patch that makes this change is as follows: (http://coccinelle.lip6.fr/) // @@ expression e1,e2,e3,e4; @@ - memset(e1,e2,e3); memcpy(e1,e4,e3); // Signed-off-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/wwrap.c b/drivers/staging/otus/wwrap.c index a74f7ee..b02eb42 100644 --- a/drivers/staging/otus/wwrap.c +++ b/drivers/staging/otus/wwrap.c @@ -956,7 +956,6 @@ int zfLnxCencSendMsg(struct sock *netlink_sk, u_int8_t *msg, int len) /*ÌîдÊý¾Ý±¨Ïà¹ØÐÅÏ¢*/ nlh = NLMSG_PUT(skb, 0, 0, WAI_K_MSG, size-sizeof(*nlh)); pos = NLMSG_DATA(nlh); - memset(pos, 0, len); /*´«Êäµ½Óû§¿Õ¼äµÄÊý¾Ý*/ memcpy(pos, msg, len); -- cgit v0.10.2 From 347fd7dbdb6ca771f59996ae3c75a2dfde66c3d7 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Tue, 9 Mar 2010 21:51:24 +0100 Subject: Staging: rt2860: fixed coding-style issues in pci_main_dev.c fixed a bunch of coding-style issues generated from checkpatch.pl Signed-off-by: Henrik Hautakoski Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/pci_main_dev.c b/drivers/staging/rt2860/pci_main_dev.c index e665d86..321facd 100644 --- a/drivers/staging/rt2860/pci_main_dev.c +++ b/drivers/staging/rt2860/pci_main_dev.c @@ -107,13 +107,13 @@ MODULE_VERSION(STA_DRIVER_VERSION); /* Our PCI driver structure */ /* */ static struct pci_driver rt2860_driver = { -name: "rt2860", -id_table:rt2860_pci_tbl, -probe: rt2860_probe, -remove:__devexit_p(rt2860_remove_one), +name: "rt2860", +id_table : rt2860_pci_tbl, +probe : rt2860_probe, +remove : __devexit_p(rt2860_remove_one), #ifdef CONFIG_PM -suspend:rt2860_suspend, -resume:rt2860_resume, +suspend : rt2860_suspend, +resume : rt2860_resume, #endif }; @@ -211,9 +211,9 @@ static int rt2860_resume(struct pci_dev *pci_dev) DBGPRINT(RT_DEBUG_TRACE, ("===> rt2860_resume()\n")); - if (net_dev == NULL) { + if (net_dev == NULL) DBGPRINT(RT_DEBUG_ERROR, ("net_dev == NULL!\n")); - } else + else GET_PAD_FROM_NET_DEV(pAd, net_dev); if (pAd != NULL) { @@ -281,7 +281,9 @@ static int __devinit rt2860_probe(IN struct pci_dev *pci_dev, /*PCIDevInit============================================== */ /* wake up and enable device */ - if ((rv = pci_enable_device(pci_dev)) != 0) { + rv = pci_enable_device(pci_dev); + + if (rv != 0) { DBGPRINT(RT_DEBUG_ERROR, ("Enable PCI device failed, errno=%d!\n", rv)); return rv; @@ -289,7 +291,9 @@ static int __devinit rt2860_probe(IN struct pci_dev *pci_dev, print_name = (char *)pci_name(pci_dev); - if ((rv = pci_request_regions(pci_dev, print_name)) != 0) { + rv = pci_request_regions(pci_dev, print_name); + + if (rv != 0) { DBGPRINT(RT_DEBUG_ERROR, ("Request PCI resource failed, errno=%d!\n", rv)); goto err_out; @@ -490,9 +494,8 @@ static void RTMPInitPCIeDevice(struct pci_dev *pci_dev, struct rt_rtmp_adapter * /* Support advanced power save after 2892/2790. */ /* MAC version at offset 0x1000 is 0x2872XXXX/0x2870XXXX(PCIe, USB, SDIO). */ - if ((MacCsr0 & 0xffff0000) != 0x28600000) { + if ((MacCsr0 & 0xffff0000) != 0x28600000) OPSTATUS_SET_FLAG(pAd, fOP_STATUS_PCIE_DEVICE); - } } } @@ -900,9 +903,9 @@ void RTMPPCIeLinkCtrlValueRestore(struct rt_rtmp_adapter *pAd, u8 Level) if ((Configuration != 0) && (Configuration != 0xFFFF)) { Configuration &= 0xfefc; /* If call from interface down, restore to orginial setting. */ - if (Level == RESTORE_CLOSE) { + if (Level == RESTORE_CLOSE) Configuration |= pAd->HostLnkCtrlConfiguration; - } else + else Configuration |= 0x0; PCI_REG_WIRTE_WORD(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, @@ -1100,13 +1103,13 @@ void RTMPrt3xSetPCIePowerLinkCtrl(struct rt_rtmp_adapter *pAd) /* Find PCI-to-PCI Bridge Express Capability Offset */ pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP); - if (pos != 0) { + if (pos != 0) pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL; - } + /* If configurared to turn on L1. */ HostConfiguration = 0; if (pAd->StaCfg.PSControl.field.rt30xxForceASPMTest == 1) { - DBGPRINT(RT_DEBUG_TRACE, ("Enter,PSM : Force ASPM \n")); + DBGPRINT(RT_DEBUG_TRACE, ("Enter,PSM : Force ASPM\n")); /* Skip non-exist deice right away */ if ((pAd->HostLnkCtrlOffset != 0)) { -- cgit v0.10.2 From 8f18604e6f0975fa852f43f90d5556efd67efadc Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Tue, 9 Mar 2010 22:15:21 +0100 Subject: Staging: drop redundant memset The region set by the call to memset is immediately overwritten by the subsequent call to memcpy. The semantic patch that makes this change is as follows: (http://coccinelle.lip6.fr/) // @@ expression e1,e2,e3,e4; @@ - memset(e1,e2,e3); memcpy(e1,e4,e3); // Signed-off-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/sta/assoc.c b/drivers/staging/rt2860/sta/assoc.c index 7055f22..6e85d5e 100644 --- a/drivers/staging/rt2860/sta/assoc.c +++ b/drivers/staging/rt2860/sta/assoc.c @@ -1596,7 +1596,6 @@ BOOLEAN StaAddMacTableEntry(struct rt_rtmp_adapter *pAd, union iwreq_data wrqu; wext_notify_event_assoc(pAd); - memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c index 33a6939..112da7a 100644 --- a/drivers/staging/rt2860/sta_ioctl.c +++ b/drivers/staging/rt2860/sta_ioctl.c @@ -608,7 +608,6 @@ int rt_ioctl_siwap(struct net_device *dev, /* Prevent to connect AP again in STAMlmePeriodicExec */ pAdapter->MlmeAux.AutoReconnectSsidLen = 32; - memset(Bssid, 0, MAC_ADDR_LEN); memcpy(Bssid, ap_addr->sa_data, MAC_ADDR_LEN); MlmeEnqueue(pAdapter, MLME_CNTL_STATE_MACHINE, diff --git a/drivers/staging/rtl8192su/r819xU_cmdpkt.c b/drivers/staging/rtl8192su/r819xU_cmdpkt.c index 9b377ba..43b68a0 100644 --- a/drivers/staging/rtl8192su/r819xU_cmdpkt.c +++ b/drivers/staging/rtl8192su/r819xU_cmdpkt.c @@ -33,7 +33,6 @@ bool SendTxCommandPacket(struct net_device *dev, void *pData, u32 DataLen) tcb_desc->bLastIniPkt = 0; skb_reserve(skb, USB_HWDESC_HEADER_LEN); ptr_buf = skb_put(skb, DataLen); - memset(ptr_buf, 0, DataLen); memcpy(ptr_buf, pData, DataLen); tcb_desc->txbuf_size = (u16)DataLen; diff --git a/drivers/staging/rtl8192u/r819xU_cmdpkt.c b/drivers/staging/rtl8192u/r819xU_cmdpkt.c index fd19a85..0cb28c7 100644 --- a/drivers/staging/rtl8192u/r819xU_cmdpkt.c +++ b/drivers/staging/rtl8192u/r819xU_cmdpkt.c @@ -63,7 +63,6 @@ SendTxCommandPacket( tcb_desc->bLastIniPkt = 0; skb_reserve(skb, USB_HWDESC_HEADER_LEN); ptr_buf = skb_put(skb, DataLen); - memset(ptr_buf,0,DataLen); memcpy(ptr_buf,pData,DataLen); tcb_desc->txbuf_size= (u16)DataLen; diff --git a/drivers/staging/vt6655/iwctl.c b/drivers/staging/vt6655/iwctl.c index 78b4983..824466d 100644 --- a/drivers/staging/vt6655/iwctl.c +++ b/drivers/staging/vt6655/iwctl.c @@ -699,7 +699,6 @@ if (pMgmt->eScanState == WMAC_IS_SCANNING) { if (wrq->sa_family != ARPHRD_ETHER) rc = -EINVAL; else { - memset(pMgmt->abyDesireBSSID, 0xFF, 6); memcpy(pMgmt->abyDesireBSSID, wrq->sa_data, 6); //2008-0409-05, by Einsn Liu if((pDevice->bLinkPass == TRUE) && @@ -889,7 +888,6 @@ if (pMgmt->eScanState == WMAC_IS_SCANNING) { BYTE abyTmpDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; UINT ii , uSameBssidNum=0; - memset(abyTmpDesireSSID,0,sizeof(abyTmpDesireSSID)); memcpy(abyTmpDesireSSID,pMgmt->abyDesireSSID,sizeof(abyTmpDesireSSID)); pCurr = BSSpSearchBSSList(pDevice, NULL, diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c index b7c6a22..d7ed3b4 100644 --- a/drivers/staging/vt6656/iwctl.c +++ b/drivers/staging/vt6656/iwctl.c @@ -758,7 +758,6 @@ int iwctl_siwap(struct net_device *dev, if (wrq->sa_family != ARPHRD_ETHER) rc = -EINVAL; else { - memset(pMgmt->abyDesireBSSID, 0xFF, 6); memcpy(pMgmt->abyDesireBSSID, wrq->sa_data, 6); //mike :add @@ -936,7 +935,6 @@ int iwctl_siwessid(struct net_device *dev, BYTE abyTmpDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; UINT ii , uSameBssidNum=0; - memset(abyTmpDesireSSID,0,sizeof(abyTmpDesireSSID)); memcpy(abyTmpDesireSSID,pMgmt->abyDesireSSID,sizeof(abyTmpDesireSSID)); pCurr = BSSpSearchBSSList(pDevice, NULL, -- cgit v0.10.2 From 3f3ba29c78c4039a9fd746065ff89afec8bbc19a Mon Sep 17 00:00:00 2001 From: Felipe de Oliveira Tanus Date: Wed, 10 Mar 2010 02:03:49 -0300 Subject: Staging: comedi: cleanup dt2814.c This patch cleans up the dt2814.c driver file from issues found by checkpatch.pl tool. Signed-off-by: Felipe de Oliveira Tanus Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/dt2814.c b/drivers/staging/comedi/drivers/dt2814.c index e1b7375..16fde06 100644 --- a/drivers/staging/comedi/drivers/dt2814.c +++ b/drivers/staging/comedi/drivers/dt2814.c @@ -99,13 +99,13 @@ static int dt2814_ai_insn_read(struct comedi_device *dev, outb(chan, dev->iobase + DT2814_CSR); for (i = 0; i < DT2814_TIMEOUT; i++) { status = inb(dev->iobase + DT2814_CSR); - printk("dt2814: status: %02x\n", status); + printk(KERN_INFO "dt2814: status: %02x\n", status); udelay(10); if (status & DT2814_FINISH) break; } if (i >= DT2814_TIMEOUT) { - printk("dt2814: status: %02x\n", status); + printk(KERN_INFO "dt2814: status: %02x\n", status); return -ETIMEDOUT; } @@ -173,7 +173,8 @@ static int dt2814_ai_cmdtest(struct comedi_device *dev, if (err) return 1; - /* step 2: make sure trigger sources are unique and mutually compatible */ + /* step 2: make sure trigger sources are + * unique and mutually compatible */ /* note that mutual compatibility is not an issue here */ if (cmd->stop_src != TRIG_TIMER && cmd->stop_src != TRIG_EXT) @@ -256,9 +257,9 @@ static int dt2814_attach(struct comedi_device *dev, struct comedi_devconfig *it) unsigned long iobase; iobase = it->options[0]; - printk("comedi%d: dt2814: 0x%04lx ", dev->minor, iobase); + printk(KERN_INFO "comedi%d: dt2814: 0x%04lx ", dev->minor, iobase); if (!request_region(iobase, DT2814_SIZE, "dt2814")) { - printk("I/O port conflict\n"); + printk(KERN_ERR "I/O port conflict\n"); return -EIO; } dev->iobase = iobase; @@ -267,7 +268,7 @@ static int dt2814_attach(struct comedi_device *dev, struct comedi_devconfig *it) outb(0, dev->iobase + DT2814_CSR); udelay(100); if (inb(dev->iobase + DT2814_CSR) & DT2814_ERR) { - printk("reset error (fatal)\n"); + printk(KERN_ERR "reset error (fatal)\n"); return -EIO; } i = inb(dev->iobase + DT2814_DATA); @@ -286,9 +287,9 @@ static int dt2814_attach(struct comedi_device *dev, struct comedi_devconfig *it) irq = probe_irq_off(irqs); restore_flags(flags); - if (inb(dev->iobase + DT2814_CSR) & DT2814_ERR) { - printk("error probing irq (bad) \n"); - } + if (inb(dev->iobase + DT2814_CSR) & DT2814_ERR) + printk(KERN_DEBUG "error probing irq (bad)\n"); + i = inb(dev->iobase + DT2814_DATA); i = inb(dev->iobase + DT2814_DATA); @@ -297,18 +298,18 @@ static int dt2814_attach(struct comedi_device *dev, struct comedi_devconfig *it) dev->irq = 0; if (irq > 0) { if (request_irq(irq, dt2814_interrupt, 0, "dt2814", dev)) { - printk("(irq %d unavailable)\n", irq); + printk(KERN_WARNING "(irq %d unavailable)\n", irq); } else { - printk("( irq = %d )\n", irq); + printk(KERN_INFO "( irq = %d )\n", irq); dev->irq = irq; } } else if (irq == 0) { - printk("(no irq)\n"); + printk(KERN_WARNING "(no irq)\n"); } else { #if 0 - printk("(probe returned multiple irqs--bad)\n"); + printk(KERN_DEBUG "(probe returned multiple irqs--bad)\n"); #else - printk("(irq probe not implemented)\n"); + printk(KERN_WARNING "(irq probe not implemented)\n"); #endif } @@ -337,14 +338,13 @@ static int dt2814_attach(struct comedi_device *dev, struct comedi_devconfig *it) static int dt2814_detach(struct comedi_device *dev) { - printk("comedi%d: dt2814: remove\n", dev->minor); + printk(KERN_INFO "comedi%d: dt2814: remove\n", dev->minor); - if (dev->irq) { + if (dev->irq) free_irq(dev->irq, dev); - } - if (dev->iobase) { + + if (dev->iobase) release_region(dev->iobase, DT2814_SIZE); - } return 0; } -- cgit v0.10.2 From 2306d9b1ee065d0dfb56af4cd05195ec61d69256 Mon Sep 17 00:00:00 2001 From: Rich Folsom Date: Tue, 9 Mar 2010 23:36:45 -0600 Subject: Staging: comedi: fix brace coding style issue in adl_pci9111.c This is a patch to the adl_pci9111.c to fix up a brace warnging found by the checkpatch.pl tool Signed-off-by: Rich Folsom Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adl_pci9111.c b/drivers/staging/comedi/drivers/adl_pci9111.c index da172a5..bbe0e33 100644 --- a/drivers/staging/comedi/drivers/adl_pci9111.c +++ b/drivers/staging/comedi/drivers/adl_pci9111.c @@ -585,19 +585,17 @@ pci9111_ai_do_cmd_test(struct comedi_device *dev, (cmd->scan_begin_src != TRIG_EXT)) error++; - if ((cmd->convert_src != TRIG_TIMER) && (cmd->convert_src != TRIG_EXT)) { + if ((cmd->convert_src != TRIG_TIMER) && (cmd->convert_src != TRIG_EXT)) error++; - } if ((cmd->convert_src == TRIG_TIMER) && !((cmd->scan_begin_src == TRIG_TIMER) || - (cmd->scan_begin_src == TRIG_FOLLOW))) { + (cmd->scan_begin_src == TRIG_FOLLOW))) error++; - } if ((cmd->convert_src == TRIG_EXT) && !((cmd->scan_begin_src == TRIG_EXT) || - (cmd->scan_begin_src == TRIG_FOLLOW))) { + (cmd->scan_begin_src == TRIG_FOLLOW))) error++; - } + if (cmd->scan_end_src != TRIG_COUNT) error++; @@ -1067,9 +1065,8 @@ static int pci9111_ai_insn_read(struct comedi_device *dev, pci9111_ai_channel_set(CR_CHAN((&insn->chanspec)[0])); - if ((pci9111_ai_range_get()) != CR_RANGE((&insn->chanspec)[0])) { + if ((pci9111_ai_range_get()) != CR_RANGE((&insn->chanspec)[0])) pci9111_ai_range_set(CR_RANGE((&insn->chanspec)[0])); - } pci9111_fifo_reset(); @@ -1090,11 +1087,10 @@ static int pci9111_ai_insn_read(struct comedi_device *dev, conversion_done: - if (resolution == PCI9111_HR_AI_RESOLUTION) { + if (resolution == PCI9111_HR_AI_RESOLUTION) data[i] = pci9111_hr_ai_get_data(); - } else { + else data[i] = pci9111_ai_get_data(); - } } #ifdef AI_INSN_DEBUG @@ -1131,9 +1127,8 @@ static int pci9111_ao_insn_read(struct comedi_device *dev, { int i; - for (i = 0; i < insn->n; i++) { + for (i = 0; i < insn->n; i++) data[i] = dev_private->ao_readback & PCI9111_AO_RESOLUTION_MASK; - } return i; } @@ -1222,9 +1217,8 @@ static int pci9111_attach(struct comedi_device *dev, int error, i; const struct pci9111_board *board; - if (alloc_private(dev, sizeof(struct pci9111_private_data)) < 0) { + if (alloc_private(dev, sizeof(struct pci9111_private_data)) < 0) return -ENOMEM; - } /* Probe the device to determine what device in the series it is. */ printk("comedi%d: " PCI9111_DRIVER_NAME " driver\n", dev->minor); @@ -1394,14 +1388,12 @@ static int pci9111_detach(struct comedi_device *dev) } /* Release previously allocated irq */ - if (dev->irq != 0) { + if (dev->irq != 0) free_irq(dev->irq, dev); - } if (dev_private != 0 && dev_private->pci_device != 0) { - if (dev->iobase) { + if (dev->iobase) comedi_pci_disable(dev_private->pci_device); - } pci_dev_put(dev_private->pci_device); } -- cgit v0.10.2 From 20617f22b006e12b81602d80d85f8f3f7efdef45 Mon Sep 17 00:00:00 2001 From: Pieter De Praetere Date: Wed, 10 Mar 2010 09:47:44 +0100 Subject: Staging: comedi: fix whitespace coding style issues in comedi_fops.c Solves warnings found by the checkpatch.pl tool: spaces before tabs. Signed-off-by: Pieter De Praetere Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index aca9674..287a1af 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -598,19 +598,19 @@ copyback: static int parse_insn(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data, void *file); /* - * COMEDI_INSNLIST - * synchronous instructions + * COMEDI_INSNLIST + * synchronous instructions * - * arg: - * pointer to sync cmd structure + * arg: + * pointer to sync cmd structure * - * reads: - * sync cmd struct at arg - * instruction list - * data (for writes) + * reads: + * sync cmd struct at arg + * instruction list + * data (for writes) * - * writes: - * data (for reads) + * writes: + * data (for reads) */ /* arbitrary limits */ #define MAX_SAMPLES 256 @@ -894,18 +894,18 @@ out: } /* - * COMEDI_INSN - * synchronous instructions + * COMEDI_INSN + * synchronous instructions * - * arg: - * pointer to insn + * arg: + * pointer to insn * - * reads: - * struct comedi_insn struct at arg - * data (for writes) + * reads: + * struct comedi_insn struct at arg + * data (for writes) * - * writes: - * data (for reads) + * writes: + * data (for reads) */ static int do_insn_ioctl(struct comedi_device *dev, void *arg, void *file) { @@ -2105,6 +2105,7 @@ int comedi_alloc_board_minor(struct device *hardware_device) kfree(info->device); kfree(info); printk(KERN_ERR + "comedi: error: ran out of minor numbers for board device files.\n"); return -EBUSY; } -- cgit v0.10.2 From 767700c454301058188fe6561c3d0213f6991e81 Mon Sep 17 00:00:00 2001 From: Jason Wong Date: Wed, 10 Mar 2010 16:58:55 +0800 Subject: Staging: comedi: amplc_pci224: fixed multiple brace coding style issue Fixed multiple coding style issue. Signed-off-by: Jason Wong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/amplc_pci224.c b/drivers/staging/comedi/drivers/amplc_pci224.c index c54cca8..8af156d 100644 --- a/drivers/staging/comedi/drivers/amplc_pci224.c +++ b/drivers/staging/comedi/drivers/amplc_pci224.c @@ -496,9 +496,9 @@ pci224_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, /* Writing a list of values to an AO channel is probably not * very useful, but that's how the interface is defined. */ - for (i = 0; i < insn->n; i++) { + for (i = 0; i < insn->n; i++) pci224_ao_set_data(dev, chan, range, data[i]); - } + return i; } @@ -519,9 +519,9 @@ pci224_ao_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, chan = CR_CHAN(insn->chanspec); - for (i = 0; i < insn->n; i++) { + for (i = 0; i < insn->n; i++) data[i] = devpriv->ao_readback[chan]; - } + return i; } @@ -544,9 +544,9 @@ static void pci224_ao_stop(struct comedi_device *dev, { unsigned long flags; - if (!test_and_clear_bit(AO_CMD_STARTED, &devpriv->state)) { + if (!test_and_clear_bit(AO_CMD_STARTED, &devpriv->state)) return; - } + spin_lock_irqsave(&devpriv->ao_spinlock, flags); /* Kill the interrupts. */ @@ -597,11 +597,11 @@ static void pci224_ao_start(struct comedi_device *dev, } else { /* Enable interrupts. */ spin_lock_irqsave(&devpriv->ao_spinlock, flags); - if (cmd->stop_src == TRIG_EXT) { + if (cmd->stop_src == TRIG_EXT) devpriv->intsce = PCI224_INTR_EXT | PCI224_INTR_DAC; - } else { + else devpriv->intsce = PCI224_INTR_DAC; - } + outb(devpriv->intsce, devpriv->iobase1 + PCI224_INT_SCE); spin_unlock_irqrestore(&devpriv->ao_spinlock, flags); } @@ -630,9 +630,9 @@ static void pci224_ao_handle_fifo(struct comedi_device *dev, num_scans = comedi_buf_read_n_available(s->async) / bytes_per_scan; if (!devpriv->ao_stop_continuous) { /* Fixed number of scans. */ - if (num_scans > devpriv->ao_stop_count) { + if (num_scans > devpriv->ao_stop_count) num_scans = devpriv->ao_stop_count; - } + } /* Determine how much room is in the FIFO (in samples). */ @@ -669,13 +669,13 @@ static void pci224_ao_handle_fifo(struct comedi_device *dev, } } /* Determine how many new scans can be put in the FIFO. */ - if (cmd->chanlist_len) { + if (cmd->chanlist_len) room /= cmd->chanlist_len; - } + /* Determine how many scans to process. */ - if (num_scans > room) { + if (num_scans > room) num_scans = room; - } + /* Process scans. */ for (n = 0; n < num_scans; n++) { cfc_read_array_from_buffer(s, &devpriv->ao_scan_vals[0], @@ -718,19 +718,19 @@ static void pci224_ao_handle_fifo(struct comedi_device *dev, trig = PCI224_DACCON_TRIG_Z2CT0; } else { /* cmd->scan_begin_src == TRIG_EXT */ - if (cmd->scan_begin_arg & CR_INVERT) { + if (cmd->scan_begin_arg & CR_INVERT) trig = PCI224_DACCON_TRIG_EXTN; - } else { + else trig = PCI224_DACCON_TRIG_EXTP; - } + } devpriv->daccon = COMBINE(devpriv->daccon, trig, PCI224_DACCON_TRIG_MASK); outw(devpriv->daccon, dev->iobase + PCI224_DACCON); } - if (s->async->events) { + if (s->async->events) comedi_event(dev, s); - } + } /* @@ -855,9 +855,9 @@ pci224_ao_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, err++; } tmp = cmd->chanlist_len * CONVERT_PERIOD; - if (tmp < MIN_SCAN_PERIOD) { + if (tmp < MIN_SCAN_PERIOD) tmp = MIN_SCAN_PERIOD; - } + if (cmd->scan_begin_arg < tmp) { cmd->scan_begin_arg = tmp; err++; @@ -966,9 +966,9 @@ pci224_ao_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, devpriv->cached_div1 = div1; devpriv->cached_div2 = div2; } - if (tmp != cmd->scan_begin_arg) { + if (tmp != cmd->scan_begin_arg) err++; - } + } if (err) @@ -994,13 +994,13 @@ pci224_ao_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, tmp = 0; for (n = 0; n < cmd->chanlist_len; n++) { ch = CR_CHAN(cmd->chanlist[n]); - if (tmp & (1U << ch)) { + if (tmp & (1U << ch)) errors |= dupchan_err; - } + tmp |= (1U << ch); - if (CR_RANGE(cmd->chanlist[n]) != range) { + if (CR_RANGE(cmd->chanlist[n]) != range) errors |= range_err; - } + } if (errors) { if (errors & dupchan_err) { @@ -1038,9 +1038,9 @@ static int pci224_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) unsigned long flags; /* Cannot handle null/empty chanlist. */ - if (cmd->chanlist == NULL || cmd->chanlist_len == 0) { + if (cmd->chanlist == NULL || cmd->chanlist_len == 0) return -EINVAL; - } + /* Determine which channels are enabled and their load order. */ devpriv->ao_enab = 0; @@ -1050,9 +1050,9 @@ static int pci224_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ao_enab |= 1U << ch; rank = 0; for (j = 0; j < cmd->chanlist_len; j++) { - if (CR_CHAN(cmd->chanlist[j]) < ch) { + if (CR_CHAN(cmd->chanlist[j]) < ch) rank++; - } + } devpriv->ao_scan_order[rank] = i; } @@ -1221,9 +1221,9 @@ pci224_ao_munge(struct comedi_device *dev, struct comedi_subdevice *s, offset = 32768; } /* Munge the data. */ - for (i = 0; i < length; i++) { + for (i = 0; i < length; i++) array[i] = (array[i] << shift) - offset; - } + } /* @@ -1254,15 +1254,15 @@ static irqreturn_t pci224_interrupt(int irq, void *d) cmd = &s->async->cmd; if (valid_intstat & PCI224_INTR_EXT) { devpriv->intsce &= ~PCI224_INTR_EXT; - if (cmd->start_src == TRIG_EXT) { + if (cmd->start_src == TRIG_EXT) pci224_ao_start(dev, s); - } else if (cmd->stop_src == TRIG_EXT) { + else if (cmd->stop_src == TRIG_EXT) pci224_ao_stop(dev, s); - } + } - if (valid_intstat & PCI224_INTR_DAC) { + if (valid_intstat & PCI224_INTR_DAC) pci224_ao_handle_fifo(dev, s); - } + } /* Reenable interrupt sources. */ spin_lock_irqsave(&devpriv->ao_spinlock, flags); @@ -1381,23 +1381,23 @@ static int pci224_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* Allocate readback buffer for AO channels. */ devpriv->ao_readback = kmalloc(sizeof(devpriv->ao_readback[0]) * thisboard->ao_chans, GFP_KERNEL); - if (!devpriv->ao_readback) { + if (!devpriv->ao_readback) return -ENOMEM; - } + /* Allocate buffer to hold values for AO channel scan. */ devpriv->ao_scan_vals = kmalloc(sizeof(devpriv->ao_scan_vals[0]) * thisboard->ao_chans, GFP_KERNEL); - if (!devpriv->ao_scan_vals) { + if (!devpriv->ao_scan_vals) return -ENOMEM; - } + /* Allocate buffer to hold AO channel scan order. */ devpriv->ao_scan_order = kmalloc(sizeof(devpriv->ao_scan_order[0]) * thisboard->ao_chans, GFP_KERNEL); - if (!devpriv->ao_scan_order) { + if (!devpriv->ao_scan_order) return -ENOMEM; - } + /* Disable interrupt sources. */ devpriv->intsce = 0; @@ -1445,9 +1445,9 @@ static int pci224_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->range_table_list = range_table_list = kmalloc(sizeof(struct comedi_lrange *) * s->n_chan, GFP_KERNEL); - if (!s->range_table_list) { + if (!s->range_table_list) return -ENOMEM; - } + for (n = 2; n < 3 + s->n_chan; n++) { if (it->options[n] < 0 || it->options[n] > 1) { printk(KERN_WARNING "comedi%d: %s: warning! " @@ -1459,11 +1459,11 @@ static int pci224_attach(struct comedi_device *dev, struct comedi_devconfig *it) for (n = 0; n < s->n_chan; n++) { if (n < COMEDI_NDEVCONFOPTS - 3 && it->options[3 + n] == 1) { - if (it->options[2] == 1) { + if (it->options[2] == 1) range_table_list[n] = &range_pci234_ext; - } else { + else range_table_list[n] = &range_bipolar5; - } + } else { if (it->options[2] == 1) { range_table_list[n] = @@ -1506,11 +1506,11 @@ static int pci224_attach(struct comedi_device *dev, struct comedi_devconfig *it) printk(KERN_INFO "comedi%d: %s ", dev->minor, dev->board_name); printk("(pci %s) ", pci_name(pci_dev)); - if (irq) { + if (irq) printk("(irq %u%s) ", irq, (dev->irq ? "" : " UNAVAILABLE")); - } else { + else printk("(no irq) "); - } + printk("attached\n"); @@ -1529,9 +1529,9 @@ static int pci224_detach(struct comedi_device *dev) { printk(KERN_DEBUG "comedi%d: %s: detach\n", dev->minor, DRIVER_NAME); - if (dev->irq) { + if (dev->irq) free_irq(dev->irq, dev); - } + if (dev->subdevices) { struct comedi_subdevice *s; @@ -1544,9 +1544,9 @@ static int pci224_detach(struct comedi_device *dev) kfree(devpriv->ao_scan_vals); kfree(devpriv->ao_scan_order); if (devpriv->pci_dev) { - if (dev->iobase) { + if (dev->iobase) comedi_pci_disable(devpriv->pci_dev); - } + pci_dev_put(devpriv->pci_dev); } } -- cgit v0.10.2 From 67a7b3788cd2b9f63a6cfe68e9e937c25709f053 Mon Sep 17 00:00:00 2001 From: Patrick Rooney Date: Wed, 10 Mar 2010 08:46:30 +0000 Subject: Staging: wlan-ng: Fixed 80-character line coding style issues in p80211req.c This is a patch for p80211req.c. An 'if' statement that spanned 80 characters has been split onto 2 lines and one of the tabs preceding a comment has been removed. Signed-off-by: Patrick Rooney Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/p80211req.c b/drivers/staging/wlan-ng/p80211req.c index e1e7bf1..207f080c 100644 --- a/drivers/staging/wlan-ng/p80211req.c +++ b/drivers/staging/wlan-ng/p80211req.c @@ -107,7 +107,8 @@ int p80211req_dorequest(wlandevice_t *wlandev, u8 *msgbuf) } /* Check Permissions */ - if (!capable(CAP_NET_ADMIN) && (msg->msgcode != DIDmsg_dot11req_mibget)) { + if (!capable(CAP_NET_ADMIN) && + (msg->msgcode != DIDmsg_dot11req_mibget)) { printk(KERN_ERR "%s: only dot11req_mibget allowed for non-root.\n", wlandev->name); @@ -128,7 +129,7 @@ int p80211req_dorequest(wlandevice_t *wlandev, u8 *msgbuf) wlandev->mlmerequest(wlandev, msg); clear_bit(1, &(wlandev->request_pending)); - return result; /* if result==0, msg->status still may contain an err */ + return result; /* if result==0, msg->status still may contain an err */ } /*---------------------------------------------------------------- -- cgit v0.10.2 From f3fd4cd59132ff81be9507762d00afa9445827b6 Mon Sep 17 00:00:00 2001 From: Michael Sprecher Date: Wed, 10 Mar 2010 13:15:35 +0100 Subject: Staging: et131x: fix most coding style issues in et131x This is a patch to the et131x driver that fixes up almost all coding style issues Signed-off-by: Michael Sprecher Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/et131x/et1310_address_map.h b/drivers/staging/et131x/et1310_address_map.h index ea746ba..e6c8cb3 100644 --- a/drivers/staging/et131x/et1310_address_map.h +++ b/drivers/staging/et131x/et1310_address_map.h @@ -117,7 +117,7 @@ /* * Software reset reg at address 0x0028 - * 0: txdma_sw_reset + * 0: txdma_sw_reset * 1: rxdma_sw_reset * 2: txmac_sw_reset * 3: rxmac_sw_reset @@ -1052,7 +1052,7 @@ typedef struct _RXMAC_t { /* Location: */ * 4-0: register */ -#define MII_ADDR(phy,reg) ((phy) << 8 | (reg)) +#define MII_ADDR(phy, reg) ((phy) << 8 | (reg)) /* * structure for MII Management Control reg in mac address map. @@ -1249,8 +1249,7 @@ typedef struct _MAC_t { /* Location: */ /* * MAC STATS Module of JAGCore Address Mapping */ -struct macstat_regs -{ /* Location: */ +struct macstat_regs { /* Location: */ u32 pad[32]; /* 0x6000 - 607C */ /* Tx/Rx 0-64 Byte Frame Counter */ diff --git a/drivers/staging/et131x/et1310_eeprom.c b/drivers/staging/et131x/et1310_eeprom.c index e4d095b..5a8e6b9 100644 --- a/drivers/staging/et131x/et1310_eeprom.c +++ b/drivers/staging/et131x/et1310_eeprom.c @@ -302,7 +302,7 @@ static int eeprom_read(struct et131x_adapter *etdev, u32 addr, u8 *pdata) err = eeprom_wait_ready(pdev, NULL); if (err) return err; - /* + /* * Write to the LBCIF Control Register: bit 7=1, bit 6=0, bit 3=0, * and bits 1:0 both =0. Bit 5 should be set according to the type * of EEPROM being accessed (1=two byte addressing, 0=one byte @@ -383,9 +383,9 @@ int et131x_init_eeprom(struct et131x_adapter *etdev) /* This error could mean that there was an error * reading the eeprom or that the eeprom doesn't exist. - * We will treat each case the same and not try to gather - * additional information that normally would come from the - * eeprom, like MAC Address + * We will treat each case the same and not try to + * gather additional information that normally would + * come from the eeprom, like MAC Address */ etdev->has_eeprom = 0; return -EIO; diff --git a/drivers/staging/et131x/et1310_phy.c b/drivers/staging/et131x/et1310_phy.c index 34cd5d1..a6d9f29 100644 --- a/drivers/staging/et131x/et1310_phy.c +++ b/drivers/staging/et131x/et1310_phy.c @@ -344,7 +344,7 @@ static void ET1310_PhyDuplexMode(struct et131x_adapter *etdev, u16 duplex) static void ET1310_PhySpeedSelect(struct et131x_adapter *etdev, u16 speed) { u16 data; - static const u16 bits[3]={0x0000, 0x2000, 0x0040}; + static const u16 bits[3] = {0x0000, 0x2000, 0x0040}; /* Read the PHY control register */ MiRead(etdev, PHY_CONTROL, &data); diff --git a/drivers/staging/et131x/et1310_rx.c b/drivers/staging/et131x/et1310_rx.c index 54686e2..8f5dceb 100644 --- a/drivers/staging/et131x/et1310_rx.c +++ b/drivers/staging/et131x/et1310_rx.c @@ -344,7 +344,7 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter) "Cannot alloc memory for Packet Status Ring\n"); return -ENOMEM; } - printk("PSR %lx\n", (unsigned long) rx_ring->pPSRingPa); + printk(KERN_INFO "PSR %lx\n", (unsigned long) rx_ring->pPSRingPa); /* * NOTE : pci_alloc_consistent(), used above to alloc DMA regions, @@ -363,7 +363,7 @@ int et131x_rx_dma_memory_alloc(struct et131x_adapter *adapter) return -ENOMEM; } rx_ring->NumRfd = NIC_DEFAULT_NUM_RFD; - printk("PRS %lx\n", (unsigned long)rx_ring->rx_status_bus); + printk(KERN_INFO "PRS %lx\n", (unsigned long)rx_ring->rx_status_bus); /* Recv * pci_pool_create initializes a lookaside list. After successful @@ -445,10 +445,10 @@ void et131x_rx_dma_memory_free(struct et131x_adapter *adapter) rx_ring->pFbr1RingVa - rx_ring->Fbr1offset); bufsize = (sizeof(struct fbr_desc) * rx_ring->Fbr1NumEntries) - + 0xfff; + + 0xfff; pci_free_consistent(adapter->pdev, bufsize, - rx_ring->pFbr1RingVa, rx_ring->pFbr1RingPa); + rx_ring->pFbr1RingVa, rx_ring->pFbr1RingPa); rx_ring->pFbr1RingVa = NULL; } @@ -478,7 +478,7 @@ void et131x_rx_dma_memory_free(struct et131x_adapter *adapter) rx_ring->pFbr0RingVa - rx_ring->Fbr0offset); bufsize = (sizeof(struct fbr_desc) * rx_ring->Fbr0NumEntries) - + 0xfff; + + 0xfff; pci_free_consistent(adapter->pdev, bufsize, @@ -504,7 +504,7 @@ void et131x_rx_dma_memory_free(struct et131x_adapter *adapter) pci_free_consistent(adapter->pdev, sizeof(struct rx_status_block), rx_ring->rx_status_block, rx_ring->rx_status_bus); - rx_ring->rx_status_block = NULL; + rx_ring->rx_status_block = NULL; } /* Free receive buffer pool */ @@ -713,7 +713,7 @@ void SetRxDmaTimer(struct et131x_adapter *etdev) */ void et131x_rx_dma_disable(struct et131x_adapter *etdev) { - u32 csr; + u32 csr; /* Setup the receive dma configuration register */ writel(0x00002001, &etdev->regs->rxdma.csr); csr = readl(&etdev->regs->rxdma.csr); @@ -743,9 +743,9 @@ void et131x_rx_dma_enable(struct et131x_adapter *etdev) else if (etdev->rx_ring.Fbr1BufferSize == 16384) csr |= 0x1800; #ifdef USE_FBR0 - csr |= 0x0400; /* FBR0 enable */ + csr |= 0x0400; /* FBR0 enable */ if (etdev->rx_ring.Fbr0BufferSize == 256) - csr |= 0x0100; + csr |= 0x0100; else if (etdev->rx_ring.Fbr0BufferSize == 512) csr |= 0x0200; else if (etdev->rx_ring.Fbr0BufferSize == 1024) @@ -757,7 +757,7 @@ void et131x_rx_dma_enable(struct et131x_adapter *etdev) if ((csr & 0x00020000) != 0) { udelay(5); csr = readl(&etdev->regs->rxdma.csr); - if ((csr & 0x00020000) != 0) { + if ((csr & 0x00020000) != 0) { dev_err(&etdev->pdev->dev, "RX Dma failed to exit halt state. CSR 0x%08x\n", csr); @@ -841,8 +841,7 @@ PMP_RFD nic_rx_pkts(struct et131x_adapter *etdev) (rindex == 1 && bindex > rx_local->Fbr1NumEntries - 1)) #else - if (rindex != 1 || - bindex > rx_local->Fbr1NumEntries - 1) + if (rindex != 1 || bindex > rx_local->Fbr1NumEntries - 1) #endif { /* Illegal buffer or ring index cannot be used by S/W*/ @@ -1063,20 +1062,20 @@ void et131x_handle_recv_interrupt(struct et131x_adapter *etdev) static inline u32 bump_fbr(u32 *fbr, u32 limit) { - u32 v = *fbr; - v++; - /* This works for all cases where limit < 1024. The 1023 case - works because 1023++ is 1024 which means the if condition is not - taken but the carry of the bit into the wrap bit toggles the wrap - value correctly */ - if ((v & ET_DMA10_MASK) > limit) { - v &= ~ET_DMA10_MASK; - v ^= ET_DMA10_WRAP; - } - /* For the 1023 case */ - v &= (ET_DMA10_MASK|ET_DMA10_WRAP); - *fbr = v; - return v; + u32 v = *fbr; + v++; + /* This works for all cases where limit < 1024. The 1023 case + works because 1023++ is 1024 which means the if condition is not + taken but the carry of the bit into the wrap bit toggles the wrap + value correctly */ + if ((v & ET_DMA10_MASK) > limit) { + v &= ~ET_DMA10_MASK; + v ^= ET_DMA10_WRAP; + } + /* For the 1023 case */ + v &= (ET_DMA10_MASK|ET_DMA10_WRAP); + *fbr = v; + return v; } /** @@ -1105,7 +1104,7 @@ void nic_return_rfd(struct et131x_adapter *etdev, PMP_RFD rfd) if (ri == 1) { struct fbr_desc *next = (struct fbr_desc *) (rx_local->pFbr1RingVa) + - INDEX10(rx_local->local_Fbr1_full); + INDEX10(rx_local->local_Fbr1_full); /* Handle the Free Buffer Ring advancement here. Write * the PA / Buffer Index for the returned buffer into diff --git a/drivers/staging/et131x/et1310_rx.h b/drivers/staging/et131x/et1310_rx.h index ca84a91..e8c653d 100644 --- a/drivers/staging/et131x/et1310_rx.h +++ b/drivers/staging/et131x/et1310_rx.h @@ -91,8 +91,7 @@ #define ALCATEL_BROADCAST_PKT 0x02000000 /* typedefs for Free Buffer Descriptors */ -struct fbr_desc -{ +struct fbr_desc { u32 addr_lo; u32 addr_hi; u32 word2; /* Bits 10-31 reserved, 0-9 descriptor */ @@ -117,7 +116,7 @@ struct fbr_desc * 9: jp Jumbo Packet * 10: vp VLAN Packet * 11-15: unused - * 16: asw_prev_pkt_dropped e.g. IFG too small on previous + * 16: asw_prev_pkt_dropped e.g. IFG too small on previous * 17: asw_RX_DV_event short receive event detected * 18: asw_false_carrier_event bad carrier since last good packet * 19: asw_code_err one or more nibbles signalled as errors diff --git a/drivers/staging/et131x/et131x_initpci.c b/drivers/staging/et131x/et131x_initpci.c index 1dd5fa5..47baab3 100644 --- a/drivers/staging/et131x/et131x_initpci.c +++ b/drivers/staging/et131x/et131x_initpci.c @@ -113,7 +113,13 @@ static u32 et131x_speed_set; module_param(et131x_speed_set, uint, 0); MODULE_PARM_DESC(et131x_speed_set, - "Set Link speed and dublex manually (0-5) [0] \n 1 : 10Mb Half-Duplex \n 2 : 10Mb Full-Duplex \n 3 : 100Mb Half-Duplex \n 4 : 100Mb Full-Duplex \n 5 : 1000Mb Full-Duplex \n 0 : Auto Speed Auto Dublex"); + "Set Link speed and dublex manually (0-5) [0]\n \ + 1 : 10Mb Half-Duplex\n \ + 2 : 10Mb Full-Duplex\n \ + 3 : 100Mb Half-Duplex\n \ + 4 : 100Mb Full-Duplex\n \ + 5 : 1000Mb Full-Duplex\n \ + 0 : Auto Speed Auto Dublex"); /** * et131x_hwaddr_init - set up the MAC Address on the ET1310 @@ -558,7 +564,7 @@ static struct et131x_adapter *et131x_adapter_init(struct net_device *netdev, /* Parse configuration parameters into the private adapter struct */ if (et131x_speed_set) dev_info(&etdev->pdev->dev, - "Speed set manually to : %d \n", et131x_speed_set); + "Speed set manually to : %d\n", et131x_speed_set); etdev->SpeedDuplex = et131x_speed_set; etdev->RegistryJumboPacket = 1514; /* 1514-9216 */ @@ -820,7 +826,7 @@ static int __init et131x_init_module(void) if (et131x_speed_set < PARM_SPEED_DUPLEX_MIN || et131x_speed_set > PARM_SPEED_DUPLEX_MAX) { printk(KERN_WARNING "et131x: invalid speed setting ignored.\n"); - et131x_speed_set = 0; + et131x_speed_set = 0; } return pci_register_driver(&et131x_driver); } diff --git a/drivers/staging/et131x/et131x_netdev.c b/drivers/staging/et131x/et131x_netdev.c index ab047f2..535a9d0 100644 --- a/drivers/staging/et131x/et131x_netdev.c +++ b/drivers/staging/et131x/et131x_netdev.c @@ -426,26 +426,22 @@ void et131x_multicast(struct net_device *netdev) * accordingly */ - if (netdev->flags & IFF_PROMISC) { + if (netdev->flags & IFF_PROMISC) adapter->PacketFilter |= ET131X_PACKET_TYPE_PROMISCUOUS; - } else { + else adapter->PacketFilter &= ~ET131X_PACKET_TYPE_PROMISCUOUS; - } - if (netdev->flags & IFF_ALLMULTI) { + if (netdev->flags & IFF_ALLMULTI) adapter->PacketFilter |= ET131X_PACKET_TYPE_ALL_MULTICAST; - } - if (netdev_mc_count(netdev) > NIC_MAX_MCAST_LIST) { + if (netdev_mc_count(netdev) > NIC_MAX_MCAST_LIST) adapter->PacketFilter |= ET131X_PACKET_TYPE_ALL_MULTICAST; - } if (netdev_mc_count(netdev) < 1) { adapter->PacketFilter &= ~ET131X_PACKET_TYPE_ALL_MULTICAST; adapter->PacketFilter &= ~ET131X_PACKET_TYPE_MULTICAST; - } else { + } else adapter->PacketFilter |= ET131X_PACKET_TYPE_MULTICAST; - } /* Set values in the private adapter struct */ i = 0; -- cgit v0.10.2 From 6e26b0154c63b5c0e7aae5155652d1b4daed703a Mon Sep 17 00:00:00 2001 From: Tomas Dabasinskas Date: Wed, 10 Mar 2010 19:51:01 +1000 Subject: Staging: crystalhd: fixed white spaces and brace coding in crystalhd_hw.c This is a patch to the crystalhd_hw.c file that fixes up a white space and brace warnings found by the checkpatch.pl tool Signed-off-by: Tomas Dabasinskas Acked-by: Jarod Wilson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/crystalhd/crystalhd_hw.c b/drivers/staging/crystalhd/crystalhd_hw.c index c438c48..56d1e42 100644 --- a/drivers/staging/crystalhd/crystalhd_hw.c +++ b/drivers/staging/crystalhd/crystalhd_hw.c @@ -432,7 +432,7 @@ static void crystalhd_hw_delete_ioqs(struct crystalhd_hw *hw) if (!hw) return; - BCMLOG(BCMLOG_DBG, "Deleting IOQs \n"); + BCMLOG(BCMLOG_DBG, "Deleting IOQs\n"); crystalhd_hw_delete_ioq(hw->adp, hw->tx_actq); crystalhd_hw_delete_ioq(hw->adp, hw->tx_freeq); crystalhd_hw_delete_ioq(hw->adp, hw->rx_actq); @@ -570,7 +570,7 @@ static bool crystalhd_tx_list0_handler(struct crystalhd_hw *hw, uint32_t err_sts if (!(err_sts & err_mask)) return false; - BCMLOG_ERR("Error on Tx-L0 %x \n", err_sts); + BCMLOG_ERR("Error on Tx-L0 %x\n", err_sts); tmp = err_mask; @@ -602,7 +602,7 @@ static bool crystalhd_tx_list1_handler(struct crystalhd_hw *hw, uint32_t err_sts if (!(err_sts & err_mask)) return false; - BCMLOG_ERR("Error on Tx-L1 %x \n", err_sts); + BCMLOG_ERR("Error on Tx-L1 %x\n", err_sts); tmp = err_mask; @@ -635,9 +635,9 @@ static void crystalhd_tx_isr(struct crystalhd_hw *hw, uint32_t int_sts) BC_STS_SUCCESS); if (!(int_sts & (INTR_INTR_STATUS_L0_TX_DMA_ERR_INTR_MASK | - INTR_INTR_STATUS_L1_TX_DMA_ERR_INTR_MASK))) { - /* No error mask set.. */ - return; + INTR_INTR_STATUS_L1_TX_DMA_ERR_INTR_MASK))) { + /* No error mask set.. */ + return; } /* Handle Tx errors. */ @@ -1134,33 +1134,29 @@ static void crystalhd_stop_rx_dma_engine(struct crystalhd_hw *hw) if (l0y) { l0y = crystalhd_reg_rd(hw->adp, MISC1_Y_RX_FIRST_DESC_L_ADDR_LIST0); l0y &= DMA_START_BIT; - if (!l0y) { + if (!l0y) hw->rx_list_sts[0] &= ~rx_waiting_y_intr; - } } if (l1y) { l1y = crystalhd_reg_rd(hw->adp, MISC1_Y_RX_FIRST_DESC_L_ADDR_LIST1); l1y &= DMA_START_BIT; - if (!l1y) { + if (!l1y) hw->rx_list_sts[1] &= ~rx_waiting_y_intr; - } } if (l0uv) { l0uv = crystalhd_reg_rd(hw->adp, MISC1_UV_RX_FIRST_DESC_L_ADDR_LIST0); l0uv &= DMA_START_BIT; - if (!l0uv) { + if (!l0uv) hw->rx_list_sts[0] &= ~rx_waiting_uv_intr; - } } if (l1uv) { l1uv = crystalhd_reg_rd(hw->adp, MISC1_UV_RX_FIRST_DESC_L_ADDR_LIST1); l1uv &= DMA_START_BIT; - if (!l1uv) { + if (!l1uv) hw->rx_list_sts[1] &= ~rx_waiting_uv_intr; - } } msleep_interruptible(100); count--; @@ -1432,9 +1428,8 @@ static bool crystalhd_rx_list1_handler(struct crystalhd_hw *hw, uint32_t int_sts /* UV1 - DMA */ tmp = uv_err_sts & GET_UV1_ERR_MSK; - if (int_sts & INTR_INTR_STATUS_L1_UV_RX_DMA_DONE_INTR_MASK) { + if (int_sts & INTR_INTR_STATUS_L1_UV_RX_DMA_DONE_INTR_MASK) hw->rx_list_sts[1] &= ~rx_waiting_uv_intr; - } if (uv_err_sts & MISC1_UV_RX_ERROR_STATUS_RX_L1_UNDERRUN_ERROR_MASK) { hw->rx_list_sts[1] &= ~rx_waiting_uv_intr; @@ -1740,7 +1735,7 @@ BC_STATUS crystalhd_do_fw_cmd(struct crystalhd_hw *hw, BC_FW_CMD *fw_cmd) res_buff = fw_cmd->rsp; if (!cmd_buff || !res_buff) { - BCMLOG_ERR("Invalid Parameters for F/W Command \n"); + BCMLOG_ERR("Invalid Parameters for F/W Command\n"); return BC_STS_INV_ARG; } -- cgit v0.10.2 From ed57d08b9f500f6553d8fa755d90ec710757d74b Mon Sep 17 00:00:00 2001 From: Patrick Rooney Date: Wed, 10 Mar 2010 09:37:45 +0000 Subject: Staging: sm7xx: Fixed space-before-tab coding style issues in smtcfb.c Patch for smtcfb.c that removes spaces before tabs in the comments at the beginning of the file. Signed-off-by: Patrick Rooney Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/sm7xx/smtcfb.c b/drivers/staging/sm7xx/smtcfb.c index 8d7261c..e817a20 100644 --- a/drivers/staging/sm7xx/smtcfb.c +++ b/drivers/staging/sm7xx/smtcfb.c @@ -3,7 +3,7 @@ * * Copyright (C) 2006 Silicon Motion Technology Corp. * Authors: Ge Wang, gewang@siliconmotion.com - * Boyod boyod.yang@siliconmotion.com.cn + * Boyod boyod.yang@siliconmotion.com.cn * * Copyright (C) 2009 Lemote, Inc. * Author: Wu Zhangjin, wuzhangjin@gmail.com @@ -13,17 +13,17 @@ * more details. * * Version 0.10.26192.21.01 - * - Add PowerPC/Big endian support - * - Add 2D support for Lynx - * - Verified on2.6.19.2 Boyod.yang + * - Add PowerPC/Big endian support + * - Add 2D support for Lynx + * - Verified on2.6.19.2 Boyod.yang * * Version 0.09.2621.00.01 - * - Only support Linux Kernel's version 2.6.21. + * - Only support Linux Kernel's version 2.6.21. * Boyod.yang * * Version 0.09 - * - Only support Linux Kernel's version 2.6.12. - * Boyod.yang + * - Only support Linux Kernel's version 2.6.12. + * Boyod.yang */ #ifndef __KERNEL__ -- cgit v0.10.2 From 64ff4044a8d99ea0ae858d2a0f1128ef82047f9c Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 10 Mar 2010 12:54:30 +0300 Subject: Staging: rt2860: clean up & => && a4_exists is an integer used as a boolean type so the original code works. But all the other conditions use && and this makes it consistent. Signed-off-by: Dan Carpenter Cc: Bartlomiej Zolnierkiewicz Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/common/cmm_aes.c b/drivers/staging/rt2860/common/cmm_aes.c index 250357c..1d159ff 100644 --- a/drivers/staging/rt2860/common/cmm_aes.c +++ b/drivers/staging/rt2860/common/cmm_aes.c @@ -281,7 +281,7 @@ void construct_mic_header2(unsigned char *mic_header2, mic_header2[6] = mpdu[22] & 0x0f; /* SC */ mic_header2[7] = 0x00; /* mpdu[23]; */ - if ((!qc_exists) & a4_exists) { + if ((!qc_exists) && a4_exists) { for (i = 0; i < 6; i++) mic_header2[8 + i] = mpdu[24 + i]; /* A4 */ -- cgit v0.10.2 From b1facee664ab3b6b27715aec60653659f12182bd Mon Sep 17 00:00:00 2001 From: Mike Sheldon Date: Wed, 10 Mar 2010 13:32:01 +0000 Subject: Staging: winbond: Replace C99 comments with C89. This patches mds.c to replace all the C99 style comments (//) with C89 style (/* ... */), as reported by checkpatch.pl. Signed-off-by: Mike Sheldon Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mds.c b/drivers/staging/winbond/mds.c index 37e0c18..65063c3 100644 --- a/drivers/staging/winbond/mds.c +++ b/drivers/staging/winbond/mds.c @@ -43,53 +43,53 @@ static void Mds_DurationSet(struct wbsoft_priv *adapter, struct wb35_descriptor pT01 = (PT01_DESCRIPTOR)(buffer+4); pNextT00 = (PT00_DESCRIPTOR)(buffer+OffsetSize); - if( buffer[ DOT_11_DA_OFFSET+8 ] & 0x1 ) // +8 for USB hdr + if( buffer[ DOT_11_DA_OFFSET+8 ] & 0x1 ) /* +8 for USB hdr */ boGroupAddr = true; - //======================================== - // Set RTS/CTS mechanism - //======================================== + /****************************************** + * Set RTS/CTS mechanism + ******************************************/ if (!boGroupAddr) { - //NOTE : If the protection mode is enabled and the MSDU will be fragmented, - // the tx rates of MPDUs will all be DSSS rates. So it will not use - // CTS-to-self in this case. CTS-To-self will only be used when without - // fragmentation. -- 20050112 - BodyLen = (u16)pT00->T00_frame_length; //include 802.11 header - BodyLen += 4; //CRC + /* NOTE : If the protection mode is enabled and the MSDU will be fragmented, + * the tx rates of MPDUs will all be DSSS rates. So it will not use + * CTS-to-self in this case. CTS-To-self will only be used when without + * fragmentation. -- 20050112 */ + BodyLen = (u16)pT00->T00_frame_length; /* include 802.11 header */ + BodyLen += 4; /* CRC */ if( BodyLen >= CURRENT_RTS_THRESHOLD ) - RTS_on = true; // Using RTS + RTS_on = true; /* Using RTS */ else { - if( pT01->T01_modulation_type ) // Is using OFDM + if( pT01->T01_modulation_type ) /* Is using OFDM */ { - if( CURRENT_PROTECT_MECHANISM ) // Is using protect - CTS_on = true; // Using CTS + if( CURRENT_PROTECT_MECHANISM ) /* Is using protect */ + CTS_on = true; /* Using CTS */ } } } if( RTS_on || CTS_on ) { - if( pT01->T01_modulation_type) // Is using OFDM + if( pT01->T01_modulation_type) /* Is using OFDM */ { - //CTS duration - // 2 SIFS + DATA transmit time + 1 ACK - // ACK Rate : 24 Mega bps - // ACK frame length = 14 bytes + /* CTS duration + * 2 SIFS + DATA transmit time + 1 ACK + * ACK Rate : 24 Mega bps + * ACK frame length = 14 bytes */ Duration = 2*DEFAULT_SIFSTIME + 2*PREAMBLE_PLUS_SIGNAL_PLUS_SIGNALEXTENSION + ((BodyLen*8 + 22 + Rate*4 - 1)/(Rate*4))*Tsym + ((112 + 22 + 95)/96)*Tsym; } - else //DSSS + else /* DSSS */ { - //CTS duration - // 2 SIFS + DATA transmit time + 1 ACK - // Rate : ?? Mega bps - // ACK frame length = 14 bytes - if( pT01->T01_plcp_header_length ) //long preamble + /* CTS duration + * 2 SIFS + DATA transmit time + 1 ACK + * Rate : ?? Mega bps + * ACK frame length = 14 bytes */ + if( pT01->T01_plcp_header_length ) /* long preamble */ Duration = LONG_PREAMBLE_PLUS_PLCPHEADER_TIME*2; else Duration = SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME*2; @@ -100,21 +100,21 @@ static void Mds_DurationSet(struct wbsoft_priv *adapter, struct wb35_descriptor if( RTS_on ) { - if( pT01->T01_modulation_type ) // Is using OFDM + if( pT01->T01_modulation_type ) /* Is using OFDM */ { - //CTS + 1 SIFS + CTS duration - //CTS Rate : 24 Mega bps - //CTS frame length = 14 bytes + /* CTS + 1 SIFS + CTS duration + * CTS Rate : 24 Mega bps + * CTS frame length = 14 bytes */ Duration += (DEFAULT_SIFSTIME + PREAMBLE_PLUS_SIGNAL_PLUS_SIGNALEXTENSION + ((112 + 22 + 95)/96)*Tsym); } else { - //CTS + 1 SIFS + CTS duration - //CTS Rate : ?? Mega bps - //CTS frame length = 14 bytes - if( pT01->T01_plcp_header_length ) //long preamble + /* CTS + 1 SIFS + CTS duration + * CTS Rate : ?? Mega bps + * CTS frame length = 14 bytes */ + if( pT01->T01_plcp_header_length ) /* long preamble */ Duration += LONG_PREAMBLE_PLUS_PLCPHEADER_TIME; else Duration += SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME; @@ -123,15 +123,15 @@ static void Mds_DurationSet(struct wbsoft_priv *adapter, struct wb35_descriptor } } - // Set the value into USB descriptor + /* Set the value into USB descriptor */ pT01->T01_add_rts = RTS_on ? 1 : 0; pT01->T01_add_cts = CTS_on ? 1 : 0; pT01->T01_rts_cts_duration = Duration; } - //===================================== - // Fill the more fragment descriptor - //===================================== + /****************************************** + * Fill the more fragment descriptor + ******************************************/ if( boGroupAddr ) Duration = 0; else @@ -139,14 +139,14 @@ static void Mds_DurationSet(struct wbsoft_priv *adapter, struct wb35_descriptor for( i=pDes->FragmentCount-1; i>0; i-- ) { NextBodyLen = (u16)pNextT00->T00_frame_length; - NextBodyLen += 4; //CRC + NextBodyLen += 4; /* CRC */ if( pT01->T01_modulation_type ) { - //OFDM - // data transmit time + 3 SIFS + 2 ACK - // Rate : ??Mega bps - // ACK frame length = 14 bytes, tx rate = 24M + /* OFDM + * data transmit time + 3 SIFS + 2 ACK + * Rate : ??Mega bps + * ACK frame length = 14 bytes, tx rate = 24M */ Duration = PREAMBLE_PLUS_SIGNAL_PLUS_SIGNALEXTENSION * 3; Duration += (((NextBodyLen*8 + 22 + Rate*4 - 1)/(Rate*4)) * Tsym + (((2*14)*8 + 22 + 95)/96)*Tsym + @@ -154,12 +154,12 @@ static void Mds_DurationSet(struct wbsoft_priv *adapter, struct wb35_descriptor } else { - //DSSS - // data transmit time + 2 ACK + 3 SIFS - // Rate : ??Mega bps - // ACK frame length = 14 bytes - //TODO : - if( pT01->T01_plcp_header_length ) //long preamble + /* DSSS + * data transmit time + 2 ACK + 3 SIFS + * Rate : ??Mega bps + * ACK frame length = 14 bytes + * TODO : */ + if( pT01->T01_plcp_header_length ) /* long preamble */ Duration = LONG_PREAMBLE_PLUS_PLCPHEADER_TIME*3; else Duration = SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME*3; @@ -168,39 +168,39 @@ static void Mds_DurationSet(struct wbsoft_priv *adapter, struct wb35_descriptor DEFAULT_SIFSTIME*3 ); } - ((u16 *)buffer)[5] = cpu_to_le16(Duration);// 4 USHOR for skip 8B USB, 2USHORT=FC + Duration + ((u16 *)buffer)[5] = cpu_to_le16(Duration); /* 4 USHOR for skip 8B USB, 2USHORT=FC + Duration */ - //----20061009 add by anson's endian + /* ----20061009 add by anson's endian */ pNextT00->value = cpu_to_le32(pNextT00->value); pT01->value = cpu_to_le32( pT01->value ); - //----end 20061009 add by anson's endian + /* ----end 20061009 add by anson's endian */ buffer += OffsetSize; pT01 = (PT01_DESCRIPTOR)(buffer+4); - if (i != 1) //The last fragment will not have the next fragment + if (i != 1) /* The last fragment will not have the next fragment */ pNextT00 = (PT00_DESCRIPTOR)(buffer+OffsetSize); } - //===================================== - // Fill the last fragment descriptor - //===================================== + /******************************************* + * Fill the last fragment descriptor + *******************************************/ if( pT01->T01_modulation_type ) { - //OFDM - // 1 SIFS + 1 ACK - // Rate : 24 Mega bps - // ACK frame length = 14 bytes + /* OFDM + * 1 SIFS + 1 ACK + * Rate : 24 Mega bps + * ACK frame length = 14 bytes */ Duration = PREAMBLE_PLUS_SIGNAL_PLUS_SIGNALEXTENSION; - //The Tx rate of ACK use 24M + /* The Tx rate of ACK use 24M */ Duration += (((112 + 22 + 95)/96)*Tsym + DEFAULT_SIFSTIME ); } else { - // DSSS - // 1 ACK + 1 SIFS - // Rate : ?? Mega bps - // ACK frame length = 14 bytes(112 bits) - if( pT01->T01_plcp_header_length ) //long preamble + /* DSSS + * 1 ACK + 1 SIFS + * Rate : ?? Mega bps + * ACK frame length = 14 bytes(112 bits) */ + if( pT01->T01_plcp_header_length ) /* long preamble */ Duration = LONG_PREAMBLE_PLUS_PLCPHEADER_TIME; else Duration = SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME; @@ -209,14 +209,14 @@ static void Mds_DurationSet(struct wbsoft_priv *adapter, struct wb35_descriptor } } - ((u16 *)buffer)[5] = cpu_to_le16(Duration);// 4 USHOR for skip 8B USB, 2USHORT=FC + Duration + ((u16 *)buffer)[5] = cpu_to_le16(Duration); /* 4 USHOR for skip 8B USB, 2USHORT=FC + Duration */ pT00->value = cpu_to_le32(pT00->value); pT01->value = cpu_to_le32(pT01->value); - //--end 20061009 add + /* --end 20061009 add */ } -// The function return the 4n size of usb pk +/* The function return the 4n size of usb pk */ static u16 Mds_BodyCopy(struct wbsoft_priv *adapter, struct wb35_descriptor *pDes, u8 *TargetBuffer) { PT00_DESCRIPTOR pT00; @@ -229,8 +229,8 @@ static u16 Mds_BodyCopy(struct wbsoft_priv *adapter, struct wb35_descriptor *pDe u8 buf_index, FragmentCount = 0; - // Copy fragment body - buffer = TargetBuffer; // shift 8B usb + 24B 802.11 + /* Copy fragment body */ + buffer = TargetBuffer; /* shift 8B usb + 24B 802.11 */ SizeLeft = pDes->buffer_total_size; buf_index = pDes->buffer_start_index; @@ -240,35 +240,35 @@ static u16 Mds_BodyCopy(struct wbsoft_priv *adapter, struct wb35_descriptor *pDe CopySize = SizeLeft; if (SizeLeft > pDes->FragmentThreshold) { CopySize = pDes->FragmentThreshold; - pT00->T00_frame_length = 24 + CopySize;//Set USB length + pT00->T00_frame_length = 24 + CopySize; /* Set USB length */ } else - pT00->T00_frame_length = 24 + SizeLeft;//Set USB length + pT00->T00_frame_length = 24 + SizeLeft; /* Set USB length */ SizeLeft -= CopySize; - // 1 Byte operation + /* 1 Byte operation */ pctmp = (u8 *)( buffer + 8 + DOT_11_SEQUENCE_OFFSET ); *pctmp &= 0xf0; - *pctmp |= FragmentCount;//931130.5.m + *pctmp |= FragmentCount; /* 931130.5.m */ if( !FragmentCount ) pT00->T00_first_mpdu = 1; - buffer += 32; // 8B usb + 24B 802.11 header + buffer += 32; /* 8B usb + 24B 802.11 header */ Size += 32; - // Copy into buffer + /* Copy into buffer */ stmp = CopySize + 3; - stmp &= ~0x03;//4n Alignment - Size += stmp;// Current 4n offset of mpdu + stmp &= ~0x03; /* 4n Alignment */ + Size += stmp; /* Current 4n offset of mpdu */ while (CopySize) { - // Copy body + /* Copy body */ src_buffer = pDes->buffer_address[buf_index]; CopyLeft = CopySize; if (CopySize >= pDes->buffer_size[buf_index]) { CopyLeft = pDes->buffer_size[buf_index]; - // Get the next buffer of descriptor + /* Get the next buffer of descriptor */ buf_index++; buf_index %= MAX_DESCRIPTOR_BUFFER_INDEX; } else { @@ -283,14 +283,14 @@ static u16 Mds_BodyCopy(struct wbsoft_priv *adapter, struct wb35_descriptor *pDe CopySize -= CopyLeft; } - // 931130.5.n + /* 931130.5.n */ if (pMds->MicAdd) { if (!SizeLeft) { pMds->MicWriteAddress[ pMds->MicWriteIndex ] = buffer - pMds->MicAdd; pMds->MicWriteSize[ pMds->MicWriteIndex ] = pMds->MicAdd; pMds->MicAdd = 0; } - else if( SizeLeft < 8 ) //931130.5.p + else if( SizeLeft < 8 ) /* 931130.5.p */ { pMds->MicAdd = SizeLeft; pMds->MicWriteAddress[ pMds->MicWriteIndex ] = buffer - ( 8 - SizeLeft ); @@ -299,10 +299,10 @@ static u16 Mds_BodyCopy(struct wbsoft_priv *adapter, struct wb35_descriptor *pDe } } - // Does it need to generate the new header for next mpdu? + /* Does it need to generate the new header for next mpdu? */ if (SizeLeft) { - buffer = TargetBuffer + Size; // Get the next 4n start address - memcpy( buffer, TargetBuffer, 32 );//Copy 8B USB +24B 802.11 + buffer = TargetBuffer + Size; /* Get the next 4n start address */ + memcpy( buffer, TargetBuffer, 32 ); /* Copy 8B USB +24B 802.11 */ pT00 = (PT00_DESCRIPTOR)buffer; pT00->T00_first_mpdu = 0; } @@ -312,16 +312,16 @@ static u16 Mds_BodyCopy(struct wbsoft_priv *adapter, struct wb35_descriptor *pDe pT00->T00_last_mpdu = 1; pT00->T00_IsLastMpdu = 1; - buffer = (u8 *)pT00 + 8; // +8 for USB hdr - buffer[1] &= ~0x04; // Clear more frag bit of 802.11 frame control - pDes->FragmentCount = FragmentCount; // Update the correct fragment number + buffer = (u8 *)pT00 + 8; /* +8 for USB hdr */ + buffer[1] &= ~0x04; /* Clear more frag bit of 802.11 frame control */ + pDes->FragmentCount = FragmentCount; /* Update the correct fragment number */ return Size; } static void Mds_HeaderCopy(struct wbsoft_priv * adapter, struct wb35_descriptor *pDes, u8 *TargetBuffer) { struct wb35_mds *pMds = &adapter->Mds; - u8 *src_buffer = pDes->buffer_address[0];//931130.5.g + u8 *src_buffer = pDes->buffer_address[0]; /* 931130.5.g */ PT00_DESCRIPTOR pT00; PT01_DESCRIPTOR pT01; u16 stmp; @@ -330,44 +330,44 @@ static void Mds_HeaderCopy(struct wbsoft_priv * adapter, struct wb35_descriptor stmp = pDes->buffer_total_size; - // - // Set USB header 8 byte - // + /* + * Set USB header 8 byte + */ pT00 = (PT00_DESCRIPTOR)TargetBuffer; TargetBuffer += 4; pT01 = (PT01_DESCRIPTOR)TargetBuffer; TargetBuffer += 4; - pT00->value = 0;// Clear - pT01->value = 0;// Clear + pT00->value = 0; /* Clear */ + pT01->value = 0; /* Clear */ - pT00->T00_tx_packet_id = pDes->Descriptor_ID;// Set packet ID - pT00->T00_header_length = 24;// Set header length - pT01->T01_retry_abort_ebable = 1;//921013 931130.5.h + pT00->T00_tx_packet_id = pDes->Descriptor_ID; /* Set packet ID */ + pT00->T00_header_length = 24; /* Set header length */ + pT01->T01_retry_abort_ebable = 1; /* 921013 931130.5.h */ - // Key ID setup + /* Key ID setup */ pT01->T01_wep_id = 0; - FragmentThreshold = DEFAULT_FRAGMENT_THRESHOLD; //Do not fragment - // Copy full data, the 1'st buffer contain all the data 931130.5.j - memcpy( TargetBuffer, src_buffer, DOT_11_MAC_HEADER_SIZE );// Copy header + FragmentThreshold = DEFAULT_FRAGMENT_THRESHOLD; /* Do not fragment */ + /* Copy full data, the 1'st buffer contain all the data 931130.5.j */ + memcpy( TargetBuffer, src_buffer, DOT_11_MAC_HEADER_SIZE ); /* Copy header */ pDes->buffer_address[0] = src_buffer + DOT_11_MAC_HEADER_SIZE; pDes->buffer_total_size -= DOT_11_MAC_HEADER_SIZE; pDes->buffer_size[0] = pDes->buffer_total_size; - // Set fragment threshold + /* Set fragment threshold */ FragmentThreshold -= (DOT_11_MAC_HEADER_SIZE + 4); pDes->FragmentThreshold = FragmentThreshold; - // Set more frag bit - TargetBuffer[1] |= 0x04;// Set more frag bit + /* Set more frag bit */ + TargetBuffer[1] |= 0x04; /* Set more frag bit */ - // - // Set tx rate - // - stmp = *(u16 *)(TargetBuffer+30); // 2n alignment address + /* + * Set tx rate + */ + stmp = *(u16 *)(TargetBuffer+30); /* 2n alignment address */ - //Use basic rate + /* Use basic rate */ ctmp1 = ctmpf = CURRENT_TX_RATE_FOR_MNG; pDes->TxRate = ctmp1; @@ -381,10 +381,10 @@ static void Mds_HeaderCopy(struct wbsoft_priv * adapter, struct wb35_descriptor if( i == 1 ) ctmp1 = ctmpf; - pMds->TxRate[pDes->Descriptor_ID][i] = ctmp1; // backup the ta rate and fall back rate + pMds->TxRate[pDes->Descriptor_ID][i] = ctmp1; /* backup the ta rate and fall back rate */ if( ctmp1 == 108) ctmp2 = 7; - else if( ctmp1 == 96 ) ctmp2 = 6; // Rate convert for USB + else if( ctmp1 == 96 ) ctmp2 = 6; /* Rate convert for USB */ else if( ctmp1 == 72 ) ctmp2 = 5; else if( ctmp1 == 48 ) ctmp2 = 4; else if( ctmp1 == 36 ) ctmp2 = 3; @@ -394,7 +394,7 @@ static void Mds_HeaderCopy(struct wbsoft_priv * adapter, struct wb35_descriptor else if( ctmp1 == 22 ) ctmp2 = 3; else if( ctmp1 == 11 ) ctmp2 = 2; else if( ctmp1 == 4 ) ctmp2 = 1; - else ctmp2 = 0; // if( ctmp1 == 2 ) or default + else ctmp2 = 0; /* if( ctmp1 == 2 ) or default */ if( i == 0 ) pT01->T01_transmit_rate = ctmp2; @@ -402,14 +402,14 @@ static void Mds_HeaderCopy(struct wbsoft_priv * adapter, struct wb35_descriptor pT01->T01_fall_back_rate = ctmp2; } - // - // Set preamble type - // - if ((pT01->T01_modulation_type == 0) && (pT01->T01_transmit_rate == 0)) // RATE_1M + /* + * Set preamble type + */ + if ((pT01->T01_modulation_type == 0) && (pT01->T01_transmit_rate == 0)) /* RATE_1M */ pDes->PreambleMode = WLAN_PREAMBLE_TYPE_LONG; else pDes->PreambleMode = CURRENT_PREAMBLE_MODE; - pT01->T01_plcp_header_length = pDes->PreambleMode; // Set preamble + pT01->T01_plcp_header_length = pDes->PreambleMode; /* Set preamble */ } @@ -431,21 +431,21 @@ Mds_Tx(struct wbsoft_priv * adapter) if (!hal_driver_init_OK(pHwData)) return; - //Only one thread can be run here + /* Only one thread can be run here */ if (atomic_inc_return(&pMds->TxThreadCount) != 1) goto cleanup; - // Start to fill the data + /* Start to fill the data */ do { FillIndex = pMds->TxFillIndex; - if (pMds->TxOwner[FillIndex]) { // Is owned by software 0:Yes 1:No + if (pMds->TxOwner[FillIndex]) { /* Is owned by software 0:Yes 1:No */ #ifdef _PE_TX_DUMP_ printk("[Mds_Tx] Tx Owner is H/W.\n"); #endif break; } - XmitBufAddress = pMds->pTxBuffer + (MAX_USB_TX_BUFFER * FillIndex); //Get buffer + XmitBufAddress = pMds->pTxBuffer + (MAX_USB_TX_BUFFER * FillIndex); /* Get buffer */ XmitBufSize = 0; FillCount = 0; do { @@ -453,37 +453,37 @@ Mds_Tx(struct wbsoft_priv * adapter) if (!PacketSize) break; - //For Check the buffer resource + /* For Check the buffer resource */ FragmentThreshold = CURRENT_FRAGMENT_THRESHOLD; - //931130.5.b + /* 931130.5.b */ FragmentCount = PacketSize/FragmentThreshold + 1; - stmp = PacketSize + FragmentCount*32 + 8;//931130.5.c 8:MIC + stmp = PacketSize + FragmentCount*32 + 8; /* 931130.5.c 8:MIC */ if ((XmitBufSize + stmp) >= MAX_USB_TX_BUFFER) { printk("[Mds_Tx] Excess max tx buffer.\n"); - break; // buffer is not enough + break; /* buffer is not enough */ } - // - // Start transmitting - // + /* + * Start transmitting + */ BufferFilled = true; /* Leaves first u8 intact */ memset((u8 *)pTxDes + 1, 0, sizeof(struct wb35_descriptor) - 1); - TxDesIndex = pMds->TxDesIndex;//Get the current ID + TxDesIndex = pMds->TxDesIndex; /* Get the current ID */ pTxDes->Descriptor_ID = TxDesIndex; - pMds->TxDesFrom[ TxDesIndex ] = 2;//Storing the information of source comming from + pMds->TxDesFrom[ TxDesIndex ] = 2; /* Storing the information of source comming from */ pMds->TxDesIndex++; pMds->TxDesIndex %= MAX_USB_TX_DESCRIPTOR; MLME_GetNextPacket( adapter, pTxDes ); - // Copy header. 8byte USB + 24byte 802.11Hdr. Set TxRate, Preamble type + /* Copy header. 8byte USB + 24byte 802.11Hdr. Set TxRate, Preamble type */ Mds_HeaderCopy( adapter, pTxDes, XmitBufAddress ); - // For speed up Key setting + /* For speed up Key setting */ if (pTxDes->EapFix) { #ifdef _PE_TX_DUMP_ printk("35: EPA 4th frame detected. Size = %d\n", PacketSize); @@ -491,41 +491,41 @@ Mds_Tx(struct wbsoft_priv * adapter) pHwData->IsKeyPreSet = 1; } - // Copy (fragment) frame body, and set USB, 802.11 hdr flag + /* Copy (fragment) frame body, and set USB, 802.11 hdr flag */ CurrentSize = Mds_BodyCopy(adapter, pTxDes, XmitBufAddress); - // Set RTS/CTS and Normal duration field into buffer + /* Set RTS/CTS and Normal duration field into buffer */ Mds_DurationSet(adapter, pTxDes, XmitBufAddress); - //Shift to the next address + /* Shift to the next address */ XmitBufSize += CurrentSize; XmitBufAddress += CurrentSize; #ifdef _IBSS_BEACON_SEQ_STICK_ - if ((XmitBufAddress[ DOT_11_DA_OFFSET+8 ] & 0xfc) != MAC_SUBTYPE_MNGMNT_PROBE_REQUEST) // +8 for USB hdr + if ((XmitBufAddress[ DOT_11_DA_OFFSET+8 ] & 0xfc) != MAC_SUBTYPE_MNGMNT_PROBE_REQUEST) /* +8 for USB hdr */ #endif pMds->TxToggle = true; - // Get packet to transmit completed, 1:TESTSTA 2:MLME 3: Ndis data + /* Get packet to transmit completed, 1:TESTSTA 2:MLME 3: Ndis data */ MLME_SendComplete(adapter, 0, true); - // Software TSC count 20060214 + /* Software TSC count 20060214 */ pMds->TxTsc++; if (pMds->TxTsc == 0) pMds->TxTsc_2++; - FillCount++; // 20060928 - } while (HAL_USB_MODE_BURST(pHwData)); // End of multiple MSDU copy loop. false = single true = multiple sending + FillCount++; /* 20060928 */ + } while (HAL_USB_MODE_BURST(pHwData)); /* End of multiple MSDU copy loop. false = single true = multiple sending */ - // Move to the next one, if necessary + /* Move to the next one, if necessary */ if (BufferFilled) { - // size setting + /* size setting */ pMds->TxBufferSize[ FillIndex ] = XmitBufSize; - // 20060928 set Tx count + /* 20060928 set Tx count */ pMds->TxCountInBuffer[FillIndex] = FillCount; - // Set owner flag + /* Set owner flag */ pMds->TxOwner[FillIndex] = 1; pMds->TxFillIndex++; @@ -534,14 +534,14 @@ Mds_Tx(struct wbsoft_priv * adapter) } else break; - if (!PacketSize) // No more pk for transmitting + if (!PacketSize) /* No more pk for transmitting */ break; } while(true); - // - // Start to send by lower module - // + /* + * Start to send by lower module + */ if (!pHwData->IsKeyPreSet) Wb35Tx_start(adapter); @@ -558,20 +558,20 @@ Mds_SendComplete(struct wbsoft_priv * adapter, PT02_DESCRIPTOR pT02) unsigned char SendOK = true; u8 RetryCount, TxRate; - if (pT02->T02_IgnoreResult) // Don't care the result + if (pT02->T02_IgnoreResult) /* Don't care the result */ return; if (pT02->T02_IsLastMpdu) { - //TODO: DTO -- get the retry count and fragment count - // Tx rate + /* TODO: DTO -- get the retry count and fragment count */ + /* Tx rate */ TxRate = pMds->TxRate[ PacketId ][ 0 ]; RetryCount = (u8)pT02->T02_MPDU_Cnt; if (pT02->value & FLAG_ERROR_TX_MASK) { SendOK = false; if (pT02->T02_transmit_abort || pT02->T02_out_of_MaxTxMSDULiftTime) { - //retry error + /* retry error */ pHwData->dto_tx_retry_count += (RetryCount+1); - //[for tx debug] + /* [for tx debug] */ if (RetryCount<7) pHwData->tx_retry_count[RetryCount] += RetryCount; else @@ -583,7 +583,7 @@ Mds_SendComplete(struct wbsoft_priv * adapter, PT02_DESCRIPTOR pT02) } pHwData->dto_tx_frag_count += (RetryCount+1); - //[for tx debug] + /* [for tx debug] */ if (pT02->T02_transmit_abort_due_to_TBTT) pHwData->tx_TBTT_start_count++; if (pT02->T02_transmit_without_encryption_due_to_wep_on_false) @@ -596,7 +596,7 @@ Mds_SendComplete(struct wbsoft_priv * adapter, PT02_DESCRIPTOR pT02) MTO_SetTxCount(adapter, TxRate, RetryCount); } - // Clear send result buffer + /* Clear send result buffer */ pMds->TxResult[ PacketId ] = 0; } else pMds->TxResult[ PacketId ] |= ((u16)(pT02->value & 0x0ffff)); -- cgit v0.10.2 From 15df6385d940ad5486b4c2de8ab45979b13349fe Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Thu, 11 Mar 2010 18:22:51 +0200 Subject: Staging: crystalhd: fix device_create() return value check Use IS_ERR() instead of comparing to NULL. Signed-off-by: Jani Nikula Cc: Jarod Wilson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/crystalhd/crystalhd_lnx.c b/drivers/staging/crystalhd/crystalhd_lnx.c index 54bad65..3c562f0 100644 --- a/drivers/staging/crystalhd/crystalhd_lnx.c +++ b/drivers/staging/crystalhd/crystalhd_lnx.c @@ -376,7 +376,7 @@ static int __devinit chd_dec_init_chdev(struct crystalhd_adp *adp) dev = device_create(crystalhd_class, NULL, MKDEV(adp->chd_dec_major, 0), NULL, "crystalhd"); - if (!dev) { + if (IS_ERR(dev)) { BCMLOG_ERR("failed to create device\n"); goto device_create_fail; } -- cgit v0.10.2 From 641b63f9981a082eeefab3b395203a54dcd6e93b Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Thu, 11 Mar 2010 00:21:20 +0100 Subject: Staging: crystalhd: Whitespace fixes, indentation fixes and 3 changed #includes These patches fixes some whitspace and indentation warnings from checkpatch.pl Also these changed #includes: bc_dts_glob_lnx.h:43: WARNING: Use #include instead of rystalhd_lnx.h:45: WARNING: Use #include instead of crystalhd_lnx.h:49: WARNING: Use #include instead of It all compiles fine, but I don't have the hardware to test with.. Signed-off-by: Lars Lindley Cc: Jarod Wilson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/crystalhd/bc_dts_glob_lnx.h b/drivers/staging/crystalhd/bc_dts_glob_lnx.h index b3125e3..0fd34e2 100644 --- a/drivers/staging/crystalhd/bc_dts_glob_lnx.h +++ b/drivers/staging/crystalhd/bc_dts_glob_lnx.h @@ -40,7 +40,7 @@ #include #include #include -#include +#include #include #include diff --git a/drivers/staging/crystalhd/bc_dts_types.h b/drivers/staging/crystalhd/bc_dts_types.h index ac0c817..95a2f87 100644 --- a/drivers/staging/crystalhd/bc_dts_types.h +++ b/drivers/staging/crystalhd/bc_dts_types.h @@ -25,7 +25,7 @@ #ifndef _BC_DTS_TYPES_H_ #define _BC_DTS_TYPES_H_ -#ifdef __LINUX_USER__ // Don't include these for KERNEL.. +#ifdef __LINUX_USER__ /* Don't include these for KERNEL.. */ #include #endif diff --git a/drivers/staging/crystalhd/bcm_70012_regs.h b/drivers/staging/crystalhd/bcm_70012_regs.h index 6922f54..f3ab314 100644 --- a/drivers/staging/crystalhd/bcm_70012_regs.h +++ b/drivers/staging/crystalhd/bcm_70012_regs.h @@ -25,22 +25,22 @@ * m = memory, c = core, r = register, f = field, d = data. */ #if !defined(GET_FIELD) && !defined(SET_FIELD) -#define BRCM_ALIGN(c,r,f) c##_##r##_##f##_ALIGN -#define BRCM_BITS(c,r,f) c##_##r##_##f##_BITS -#define BRCM_MASK(c,r,f) c##_##r##_##f##_MASK -#define BRCM_SHIFT(c,r,f) c##_##r##_##f##_SHIFT +#define BRCM_ALIGN(c, r, f) c##_##r##_##f##_ALIGN +#define BRCM_BITS(c, r, f) c##_##r##_##f##_BITS +#define BRCM_MASK(c, r, f) c##_##r##_##f##_MASK +#define BRCM_SHIFT(c, r, f) c##_##r##_##f##_SHIFT -#define GET_FIELD(m,c,r,f) \ - ((((m) & BRCM_MASK(c,r,f)) >> BRCM_SHIFT(c,r,f)) << BRCM_ALIGN(c,r,f)) +#define GET_FIELD(m, c, r, f) \ + ((((m) & BRCM_MASK(c, r, f)) >> BRCM_SHIFT(c, r, f)) << BRCM_ALIGN(c, r, f)) -#define SET_FIELD(m,c,r,f,d) \ - ((m) = (((m) & ~BRCM_MASK(c,r,f)) | ((((d) >> BRCM_ALIGN(c,r,f)) << \ - BRCM_SHIFT(c,r,f)) & BRCM_MASK(c,r,f))) \ +#define SET_FIELD(m, c, r, f, d) \ + ((m) = (((m) & ~BRCM_MASK(c, r, f)) | ((((d) >> BRCM_ALIGN(c, r, f)) << \ + BRCM_SHIFT(c, r, f)) & BRCM_MASK(c, r, f))) \ ) -#define SET_TYPE_FIELD(m,c,r,f,d) SET_FIELD(m,c,r,f,c##_##d) -#define SET_NAME_FIELD(m,c,r,f,d) SET_FIELD(m,c,r,f,c##_##r##_##f##_##d) -#define SET_VALUE_FIELD(m,c,r,f,d) SET_FIELD(m,c,r,f,d) +#define SET_TYPE_FIELD(m, c, r, f, d) SET_FIELD(m, c, r, f, c##_##d) +#define SET_NAME_FIELD(m, c, r, f, d) SET_FIELD(m, c, r, f, c##_##r##_##f##_##d) +#define SET_VALUE_FIELD(m, c, r, f, d) SET_FIELD(m, c, r, f, d) #endif /* GET & SET */ diff --git a/drivers/staging/crystalhd/crystalhd_cmds.c b/drivers/staging/crystalhd/crystalhd_cmds.c index 26145a8..d826715 100644 --- a/drivers/staging/crystalhd/crystalhd_cmds.c +++ b/drivers/staging/crystalhd/crystalhd_cmds.c @@ -88,7 +88,7 @@ static BC_STATUS bc_cproc_notify_mode(struct crystalhd_cmd *ctx, return BC_STS_SUCCESS; } if (ctx->state != BC_LINK_INVALID) { - BCMLOG_ERR("Link invalid state %d \n", ctx->state); + BCMLOG_ERR("Link invalid state %d\n", ctx->state); return BC_STS_ERR_USAGE; } /* Check for duplicate playback sessions..*/ @@ -301,7 +301,7 @@ static BC_STATUS bc_cproc_download_fw(struct crystalhd_cmd *ctx, } if (ctx->state != BC_LINK_INVALID) { - BCMLOG_ERR("Link invalid state %d \n", ctx->state); + BCMLOG_ERR("Link invalid state %d\n", ctx->state); return BC_STS_ERR_USAGE; } @@ -309,7 +309,7 @@ static BC_STATUS bc_cproc_download_fw(struct crystalhd_cmd *ctx, idata->add_cdata_sz); if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("Firmware Download Failure!! - %d\n", sts); + BCMLOG_ERR("Firmware Download Failure!! - %d\n", sts) } else ctx->state |= BC_LINK_INIT; @@ -335,7 +335,7 @@ static BC_STATUS bc_cproc_do_fw_cmd(struct crystalhd_cmd *ctx, crystalhd_ioctl_d uint32_t *cmd; if (!(ctx->state & BC_LINK_INIT)) { - BCMLOG_ERR("Link invalid state %d \n", ctx->state); + BCMLOG_ERR("Link invalid state %d\n", ctx->state); return BC_STS_ERR_USAGE; } @@ -379,7 +379,7 @@ static void bc_proc_in_completion(crystalhd_dio_req *dio_hnd, return; } if (sts == BC_STS_IO_USER_ABORT) - return; + return; dio_hnd->uinfo.comp_sts = sts; dio_hnd->uinfo.ev_sts = 1; @@ -452,7 +452,7 @@ static BC_STATUS bc_cproc_hw_txdma(struct crystalhd_cmd *ctx, if (!rc) { return dio->uinfo.comp_sts; } else if (rc == -EBUSY) { - BCMLOG(BCMLOG_DBG, "_tx_post() T/O \n"); + BCMLOG(BCMLOG_DBG, "_tx_post() T/O\n"); sts = BC_STS_TIMEOUT; } else if (rc == -EINTR) { BCMLOG(BCMLOG_DBG, "Tx Wait Signal int.\n"); @@ -482,7 +482,7 @@ static BC_STATUS bc_cproc_check_inbuffs(bool pin, void *ubuff, uint32_t ub_sz, /* Check for alignment */ if (((uintptr_t)ubuff) & 0x03) { - BCMLOG_ERR("%s-->Un-aligned address not implemented yet.. %p \n", + BCMLOG_ERR("%s-->Un-aligned address not implemented yet.. %p\n", ((pin) ? "TX" : "RX"), ubuff); return BC_STS_NOT_IMPL; } @@ -523,7 +523,7 @@ static BC_STATUS bc_cproc_proc_input(struct crystalhd_cmd *ctx, crystalhd_ioctl_ sts = crystalhd_map_dio(ctx->adp, ubuff, ub_sz, 0, 0, 1, &dio_hnd); if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("dio map - %d \n", sts); + BCMLOG_ERR("dio map - %d\n", sts); return sts; } @@ -563,7 +563,7 @@ static BC_STATUS bc_cproc_add_cap_buff(struct crystalhd_cmd *ctx, sts = crystalhd_map_dio(ctx->adp, ubuff, ub_sz, uv_off, en_422, 0, &dio_hnd); if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("dio map - %d \n", sts); + BCMLOG_ERR("dio map - %d\n", sts); return sts; } @@ -1026,7 +1026,7 @@ crystalhd_cmd_proc crystalhd_get_cmd_proc(struct crystalhd_cmd *ctx, uint32_t cm if (g_crystalhd_cproc_tbl[i].cmd_id == cmd) { if ((uc->mode == DTS_MONITOR_MODE) && (g_crystalhd_cproc_tbl[i].block_mon)) { - BCMLOG(BCMLOG_INFO, "Blocking cmd %d \n", cmd); + BCMLOG(BCMLOG_INFO, "Blocking cmd %d\n", cmd); break; } cproc = g_crystalhd_cproc_tbl[i].cmd_proc; diff --git a/drivers/staging/crystalhd/crystalhd_cmds.h b/drivers/staging/crystalhd/crystalhd_cmds.h index 6b290ae..9989038 100644 --- a/drivers/staging/crystalhd/crystalhd_cmds.h +++ b/drivers/staging/crystalhd/crystalhd_cmds.h @@ -66,7 +66,7 @@ struct crystalhd_cmd { struct crystalhd_hw hw_ctx; }; -typedef BC_STATUS (*crystalhd_cmd_proc)(struct crystalhd_cmd *, crystalhd_ioctl_data *); +typedef BC_STATUS(*crystalhd_cmd_proc)(struct crystalhd_cmd *, crystalhd_ioctl_data *); typedef struct _crystalhd_cmd_tbl { uint32_t cmd_id; diff --git a/drivers/staging/crystalhd/crystalhd_lnx.c b/drivers/staging/crystalhd/crystalhd_lnx.c index 3c562f0..58fd91a 100644 --- a/drivers/staging/crystalhd/crystalhd_lnx.c +++ b/drivers/staging/crystalhd/crystalhd_lnx.c @@ -51,7 +51,7 @@ static int chd_dec_enable_int(struct crystalhd_adp *adp) rc = request_irq(adp->pdev->irq, chd_dec_isr, IRQF_SHARED, adp->name, (void *)adp); if (rc) { - BCMLOG_ERR("Interrupt request failed.. \n"); + BCMLOG_ERR("Interrupt request failed..\n"); pci_disable_msi(adp->pdev); } @@ -112,7 +112,7 @@ static inline int crystalhd_user_data(unsigned long ud, void *dr, int size, int int rc; if (!ud || !dr) { - BCMLOG_ERR("Invalid arg \n"); + BCMLOG_ERR("Invalid arg\n"); return -EINVAL; } @@ -122,7 +122,7 @@ static inline int crystalhd_user_data(unsigned long ud, void *dr, int size, int rc = copy_from_user(dr, (void *)ud, size); if (rc) { - BCMLOG_ERR("Invalid args for command \n"); + BCMLOG_ERR("Invalid args for command\n"); rc = -EFAULT; } @@ -206,7 +206,7 @@ static int chd_dec_proc_user_data(struct crystalhd_adp *adp, rc = crystalhd_user_data(ua, &io->udata, sizeof(io->udata), set); if (rc) { - BCMLOG_ERR("failed to %s iodata \n", (set ? "set" : "get")); + BCMLOG_ERR("failed to %s iodata\n", (set ? "set" : "get")); return rc; } @@ -308,7 +308,7 @@ static int chd_dec_open(struct inode *in, struct file *fd) sts = crystalhd_user_open(&adp->cmds, &uc); if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("cmd_user_open - %d \n", sts); + BCMLOG_ERR("cmd_user_open - %d\n", sts); rc = -EBUSY; } @@ -326,7 +326,7 @@ static int chd_dec_close(struct inode *in, struct file *fd) BCMLOG_ENTER; if (!adp) { - BCMLOG_ERR("Invalid adp \n"); + BCMLOG_ERR("Invalid adp\n"); return -EINVAL; } @@ -521,7 +521,7 @@ static void __devexit chd_dec_pci_remove(struct pci_dev *pdev) sts = crystalhd_delete_cmd_context(&pinfo->cmds); if (sts != BC_STS_SUCCESS) - BCMLOG_ERR("cmd delete :%d \n", sts); + BCMLOG_ERR("cmd delete :%d\n", sts); chd_dec_release_chdev(pinfo); @@ -581,7 +581,7 @@ static int __devinit chd_dec_pci_probe(struct pci_dev *pdev, chd_dec_init_chdev(pinfo); rc = chd_dec_enable_int(pinfo); if (rc) { - BCMLOG_ERR("_enable_int err:%d \n", rc); + BCMLOG_ERR("_enable_int err:%d\n", rc); pci_disable_device(pdev); return -ENODEV; } @@ -601,7 +601,7 @@ static int __devinit chd_dec_pci_probe(struct pci_dev *pdev, sts = crystalhd_setup_cmd_context(&pinfo->cmds, pinfo); if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("cmd setup :%d \n", sts); + BCMLOG_ERR("cmd setup :%d\n", sts); pci_disable_device(pdev); return -ENODEV; } @@ -675,7 +675,7 @@ int chd_dec_pci_resume(struct pci_dev *pdev) rc = chd_dec_enable_int(adp); if (rc) { - BCMLOG_ERR("_enable_int err:%d \n", rc); + BCMLOG_ERR("_enable_int err:%d\n", rc); pci_disable_device(pdev); return -ENODEV; } @@ -738,13 +738,13 @@ static int __init chd_dec_module_init(void) int rc; chd_set_log_level(NULL, "debug"); - BCMLOG(BCMLOG_DATA, "Loading crystalhd %d.%d.%d \n", + BCMLOG(BCMLOG_DATA, "Loading crystalhd %d.%d.%d\n", crystalhd_kmod_major, crystalhd_kmod_minor, crystalhd_kmod_rev); rc = pci_register_driver(&bc_chd_70012_driver); if (rc < 0) - BCMLOG_ERR("Could not find any devices. err:%d \n", rc); + BCMLOG_ERR("Could not find any devices. err:%d\n", rc); return rc; } @@ -752,7 +752,7 @@ module_init(chd_dec_module_init); static void __exit chd_dec_module_cleanup(void) { - BCMLOG(BCMLOG_DATA, "unloading crystalhd %d.%d.%d \n", + BCMLOG(BCMLOG_DATA, "unloading crystalhd %d.%d.%d\n", crystalhd_kmod_major, crystalhd_kmod_minor, crystalhd_kmod_rev); pci_unregister_driver(&bc_chd_70012_driver); diff --git a/drivers/staging/crystalhd/crystalhd_lnx.h b/drivers/staging/crystalhd/crystalhd_lnx.h index d338ae9..eee4926 100644 --- a/drivers/staging/crystalhd/crystalhd_lnx.h +++ b/drivers/staging/crystalhd/crystalhd_lnx.h @@ -42,11 +42,11 @@ #include #include -#include +#include #include #include #include -#include +#include #include "crystalhd_cmds.h" diff --git a/drivers/staging/crystalhd/crystalhd_misc.c b/drivers/staging/crystalhd/crystalhd_misc.c index 73593b0..d134667 100644 --- a/drivers/staging/crystalhd/crystalhd_misc.c +++ b/drivers/staging/crystalhd/crystalhd_misc.c @@ -237,7 +237,7 @@ BC_STATUS crystalhd_mem_rd(struct crystalhd_adp *adp, uint32_t start_off, if (!adp || !rd_buff || (bc_chk_dram_range(adp, start_off, dw_cnt) != BC_STS_SUCCESS)) { - BCMLOG_ERR("Invalid arg \n"); + BCMLOG_ERR("Invalid arg\n"); return BC_STS_INV_ARG; } for (ix = 0; ix < dw_cnt; ix++) @@ -265,7 +265,7 @@ BC_STATUS crystalhd_mem_wr(struct crystalhd_adp *adp, uint32_t start_off, if (!adp || !wr_buff || (bc_chk_dram_range(adp, start_off, dw_cnt) != BC_STS_SUCCESS)) { - BCMLOG_ERR("Invalid arg \n"); + BCMLOG_ERR("Invalid arg\n"); return BC_STS_INV_ARG; } @@ -293,7 +293,7 @@ BC_STATUS crystalhd_pci_cfg_rd(struct crystalhd_adp *adp, uint32_t off, int rc = 0; if (!adp || !val) { - BCMLOG_ERR("Invalid arg \n"); + BCMLOG_ERR("Invalid arg\n"); return BC_STS_INV_ARG; } @@ -338,7 +338,7 @@ BC_STATUS crystalhd_pci_cfg_wr(struct crystalhd_adp *adp, uint32_t off, int rc = 0; if (!adp || !val) { - BCMLOG_ERR("Invalid arg \n"); + BCMLOG_ERR("Invalid arg\n"); return BC_STS_INV_ARG; } @@ -685,7 +685,7 @@ BC_STATUS crystalhd_map_dio(struct crystalhd_adp *adp, void *ubuff, int i = 0, rw = 0, res = 0, nr_pages = 0, skip_fb_sg = 0; if (!adp || !ubuff || !ubuff_sz || !dio_hnd) { - BCMLOG_ERR("Invalid arg \n"); + BCMLOG_ERR("Invalid arg\n"); return BC_STS_INV_ARG; } /* Compute pages */ @@ -791,7 +791,7 @@ BC_STATUS crystalhd_map_dio(struct crystalhd_adp *adp, void *ubuff, dio->sg_cnt = pci_map_sg(adp->pdev, dio->sg, dio->page_cnt, dio->direction); if (dio->sg_cnt <= 0) { - BCMLOG_ERR("sg map %d-%d \n", dio->sg_cnt, dio->page_cnt); + BCMLOG_ERR("sg map %d-%d\n", dio->sg_cnt, dio->page_cnt); crystalhd_unmap_dio(adp, dio); return BC_STS_ERROR; } @@ -826,7 +826,7 @@ BC_STATUS crystalhd_unmap_dio(struct crystalhd_adp *adp, crystalhd_dio_req *dio) int j = 0; if (!adp || !dio) { - BCMLOG_ERR("Invalid arg \n"); + BCMLOG_ERR("Invalid arg\n"); return BC_STS_INV_ARG; } @@ -947,7 +947,7 @@ void crystalhd_destroy_dio_pool(struct crystalhd_adp *adp) adp->fill_byte_pool = NULL; } - BCMLOG(BCMLOG_DBG, "Released dio pool %d \n", count); + BCMLOG(BCMLOG_DBG, "Released dio pool %d\n", count); } /** @@ -973,7 +973,7 @@ int __devinit crystalhd_create_elem_pool(struct crystalhd_adp *adp, for (i = 0; i < pool_size; i++) { temp = kzalloc(sizeof(*temp), GFP_KERNEL); if (!temp) { - BCMLOG_ERR("kalloc failed \n"); + BCMLOG_ERR("kalloc failed\n"); return -ENOMEM; } crystalhd_free_elem(adp, temp); -- cgit v0.10.2 From 63f63d236b14b5afbac882a1a47d936fbb14c5b4 Mon Sep 17 00:00:00 2001 From: Huang Weiyi Date: Fri, 12 Mar 2010 21:05:41 +0800 Subject: Staging: wlan-ng: remove duplicated #include Remove duplicated #include('s) in drivers/staging/wlan-ng/p80211wext.c Signed-off-by: Huang Weiyi Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/p80211wext.c b/drivers/staging/wlan-ng/p80211wext.c index 83f1d6c..dc72661 100644 --- a/drivers/staging/wlan-ng/p80211wext.c +++ b/drivers/staging/wlan-ng/p80211wext.c @@ -49,7 +49,6 @@ #include #include #include -#include #include "p80211types.h" #include "p80211hdr.h" -- cgit v0.10.2 From 773cde9a496f1f2db6612927863d649bda2dc8da Mon Sep 17 00:00:00 2001 From: Huang Weiyi Date: Fri, 12 Mar 2010 22:13:43 +0800 Subject: Staging: remove unused #include Remove unused #include ('s) in drivers/staging/dt3155/allocator.c drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c drivers/staging/vme/boards/vme_vmivme7805.c Signed-off-by: Huang Weiyi Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/allocator.c b/drivers/staging/dt3155/allocator.c index db382ef..6fbd050 100644 --- a/drivers/staging/dt3155/allocator.c +++ b/drivers/staging/dt3155/allocator.c @@ -45,7 +45,6 @@ # define MODULE #endif -#include #include #include diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c index 48537d9..81aa2ed 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_tx.c @@ -47,7 +47,6 @@ #include #include #include -#include #include #include #include diff --git a/drivers/staging/vme/boards/vme_vmivme7805.c b/drivers/staging/vme/boards/vme_vmivme7805.c index 843c9ed..80eaa0c 100644 --- a/drivers/staging/vme/boards/vme_vmivme7805.c +++ b/drivers/staging/vme/boards/vme_vmivme7805.c @@ -10,7 +10,6 @@ * option) any later version. */ -#include #include #include #include -- cgit v0.10.2 From 09a3c4aeb108dcc2ee89370c511e263dbcc94563 Mon Sep 17 00:00:00 2001 From: Huang Weiyi Date: Fri, 12 Mar 2010 21:05:26 +0800 Subject: Staging: sep: remove duplicated #include Remove duplicated #include('s) in drivers/staging/sep/sep_driver.c Signed-off-by: Huang Weiyi Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/sep/sep_driver.c b/drivers/staging/sep/sep_driver.c index 8888073..0332c37 100644 --- a/drivers/staging/sep/sep_driver.c +++ b/drivers/staging/sep/sep_driver.c @@ -39,7 +39,6 @@ #include #include #include -#include #include #include #include -- cgit v0.10.2 From 59200df52cf7d4bfb93aeb30289a8e9d2af3058d Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Tue, 13 Apr 2010 22:01:31 -0500 Subject: Staging: dt3155: fix wait_ibsyclr function The wait_ibsyclr function is supposed to return the status of the I2C cycle. Currently it will always return FALSE because the IIC_CSR2 register is not re-read in order to update the cached register value. This results in the NEW_CYCLE bit still being 1. The current code actually works correctly only because the return value of {Read|Write}I2C is not checked in the driver. Fix wait_ibsyclr by actually reading the IIC_CSR2 register to get the updated status. While here, change the return type to be an actual errno instead of the private TRUE/FALSE define and remove the now obvious comments about the return value. Also, remove the local variable 'writestat' in WriteI2C and just return the result of wait_ibsyclr. Signed-off-by: H Hartley Sweeten Cc: Scott Smedley Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155_io.c b/drivers/staging/dt3155/dt3155_io.c index 6b9c685..7792e71 100644 --- a/drivers/staging/dt3155/dt3155_io.c +++ b/drivers/staging/dt3155/dt3155_io.c @@ -74,23 +74,22 @@ u8 i2c_pm_lut_data; * wait_ibsyclr() * * This function handles read/write timing and r/w timeout error - * - * Returns TRUE if NEW_CYCLE clears - * Returns FALSE if NEW_CYCLE doesn't clear in roughly 3 msecs, otherwise - * returns 0 */ static int wait_ibsyclr(u8 *lpReg) { /* wait 100 microseconds */ udelay(100L); /* __delay(loops_per_sec/10000); */ + + ReadMReg(lpReg + IIC_CSR2, iic_csr2_r.reg); if (iic_csr2_r.fld.NEW_CYCLE) { /* if NEW_CYCLE didn't clear */ /* TIMEOUT ERROR */ dt3155_errno = DT_ERR_I2C_TIMEOUT; - return FALSE; - } else - return TRUE; /* no error */ + return -ETIMEDOUT; + } + + return 0; /* no error */ } /* @@ -101,14 +100,9 @@ static int wait_ibsyclr(u8 *lpReg) * 1st parameter is pointer to 32-bit register base address * 2nd parameter is reg. index; * 3rd is value to be written - * - * Returns TRUE - Successful completion - * FALSE - Timeout error - cycle did not complete! */ int WriteI2C(u8 *lpReg, u_short wIregIndex, u8 byVal) { - int writestat; /* status for return */ - /* read 32 bit IIC_CSR2 register data into union */ ReadMReg((lpReg + IIC_CSR2), iic_csr2_r.reg); @@ -126,8 +120,7 @@ int WriteI2C(u8 *lpReg, u_short wIregIndex, u8 byVal) WriteMReg((lpReg + IIC_CSR2), iic_csr2_r.reg); /* wait for IIC cycle to finish */ - writestat = wait_ibsyclr(lpReg); - return writestat; + return wait_ibsyclr(lpReg); } /* @@ -138,9 +131,6 @@ int WriteI2C(u8 *lpReg, u_short wIregIndex, u8 byVal) * 1st parameter is pointer to 32-bit register base address * 2nd parameter is reg. index; * 3rd is adrs of value to be read - * - * Returns TRUE - Successful completion - * FALSE - Timeout error - cycle did not complete! */ int ReadI2C(u8 *lpReg, u_short wIregIndex, u8 *byVal) { -- cgit v0.10.2 From b1f2ac07636aadee5cb077fc7e830908b00fcaae Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Tue, 27 Apr 2010 20:15:07 +0200 Subject: Staging: push down BKL into ioctl functions Signed-off-by: Arnd Bergmann Cc: Frederic Weisbecker Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/crystalhd/crystalhd_lnx.c b/drivers/staging/crystalhd/crystalhd_lnx.c index 58fd91a..6090a1d 100644 --- a/drivers/staging/crystalhd/crystalhd_lnx.c +++ b/drivers/staging/crystalhd/crystalhd_lnx.c @@ -16,6 +16,7 @@ ***************************************************************************/ #include +#include #include #include "crystalhd_lnx.h" @@ -261,12 +262,12 @@ static int chd_dec_api_cmd(struct crystalhd_adp *adp, unsigned long ua, } /* API interfaces */ -static int chd_dec_ioctl(struct inode *in, struct file *fd, - unsigned int cmd, unsigned long ua) +static long chd_dec_ioctl(struct file *fd, unsigned int cmd, unsigned long ua) { struct crystalhd_adp *adp = chd_get_adp(); crystalhd_cmd_proc cproc; struct crystalhd_user *uc; + int ret; if (!adp || !fd) { BCMLOG_ERR("Invalid adp\n"); @@ -279,13 +280,17 @@ static int chd_dec_ioctl(struct inode *in, struct file *fd, return -ENODATA; } + lock_kernel(); cproc = crystalhd_get_cmd_proc(&adp->cmds, cmd, uc); if (!cproc) { BCMLOG_ERR("Unhandled command: %d\n", cmd); + unlock_kernel(); return -EINVAL; } - return chd_dec_api_cmd(adp, ua, uc->uid, cmd, cproc); + ret = chd_dec_api_cmd(adp, ua, uc->uid, cmd, cproc); + unlock_kernel(); + return ret; } static int chd_dec_open(struct inode *in, struct file *fd) @@ -345,7 +350,7 @@ static int chd_dec_close(struct inode *in, struct file *fd) static const struct file_operations chd_dec_fops = { .owner = THIS_MODULE, - .ioctl = chd_dec_ioctl, + .unlocked_ioctl = chd_dec_ioctl, .open = chd_dec_open, .release = chd_dec_close, }; diff --git a/drivers/staging/dt3155/dt3155_drv.c b/drivers/staging/dt3155/dt3155_drv.c index e2c44ec..7e6095f 100644 --- a/drivers/staging/dt3155/dt3155_drv.c +++ b/drivers/staging/dt3155/dt3155_drv.c @@ -63,6 +63,7 @@ extern void printques(int); #include #include #include +#include #include #include @@ -835,6 +836,17 @@ static unsigned int dt3155_poll (struct file * filp, poll_table *wait) return 0; } +static long +dt3155_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + int ret; + + lock_kernel(); + ret = dt3155_ioctl(file->f_path.dentry->d_inode, file, cmd, arg); + unlock_kernel(); + + return ret; +} /***************************************************** * file operations supported by DT3155 driver @@ -842,12 +854,12 @@ static unsigned int dt3155_poll (struct file * filp, poll_table *wait) * register_chrdev *****************************************************/ static struct file_operations dt3155_fops = { - read: dt3155_read, - ioctl: dt3155_ioctl, - mmap: dt3155_mmap, - poll: dt3155_poll, - open: dt3155_open, - release: dt3155_close + .read = dt3155_read, + .unlocked_ioctl = dt3155_unlocked_ioctl, + .mmap = dt3155_mmap, + .poll = dt3155_poll, + .open = dt3155_open, + .release = dt3155_close }; diff --git a/drivers/staging/vme/devices/vme_user.c b/drivers/staging/vme/devices/vme_user.c index 1ab9a98..bc16fc07 100644 --- a/drivers/staging/vme/devices/vme_user.c +++ b/drivers/staging/vme/devices/vme_user.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include @@ -130,8 +131,7 @@ static int vme_user_release(struct inode *, struct file *); static ssize_t vme_user_read(struct file *, char *, size_t, loff_t *); static ssize_t vme_user_write(struct file *, const char *, size_t, loff_t *); static loff_t vme_user_llseek(struct file *, loff_t, int); -static int vme_user_ioctl(struct inode *, struct file *, unsigned int, - unsigned long); +static long vme_user_unlocked_ioctl(struct file *, unsigned int, unsigned long); static int __init vme_user_probe(struct device *, int, int); static int __exit vme_user_remove(struct device *, int, int); @@ -142,7 +142,7 @@ static struct file_operations vme_user_fops = { .read = vme_user_read, .write = vme_user_write, .llseek = vme_user_llseek, - .ioctl = vme_user_ioctl, + .unlocked_ioctl = vme_user_unlocked_ioctl, }; @@ -555,6 +555,18 @@ static int vme_user_ioctl(struct inode *inode, struct file *file, return -EINVAL; } +static long +vme_user_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) +{ + int ret; + + lock_kernel(); + ret = vme_user_ioctl(file->f_path.dentry->d_inode, file, cmd, arg); + unlock_kernel(); + + return ret; +} + /* * Unallocate a previously allocated buffer -- cgit v0.10.2 From 25f1a98bfd0b2a097c8477e4b7bdf6dccf3886b6 Mon Sep 17 00:00:00 2001 From: Jason Wong Date: Sat, 13 Mar 2010 00:32:33 +0800 Subject: Staging: comedi: amplc_pci230: fix brace coding style issue Fixed multiple brace coding style issue. Signed-off-by: Jason Wong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/amplc_pci230.c b/drivers/staging/comedi/drivers/amplc_pci230.c index 091a1a5..7fffd96 100644 --- a/drivers/staging/comedi/drivers/amplc_pci230.c +++ b/drivers/staging/comedi/drivers/amplc_pci230.c @@ -669,9 +669,9 @@ static short pci230_ai_read(struct comedi_device *dev) /* If a bipolar range was specified, mangle it (twos * complement->straight binary). */ - if (devpriv->ai_bipolar) { + if (devpriv->ai_bipolar) data ^= 1 << (thisboard->ai_bits - 1); - } + return data; } @@ -680,9 +680,9 @@ static inline unsigned short pci230_ao_mangle_datum(struct comedi_device *dev, { /* If a bipolar range was specified, mangle it (straight binary->twos * complement). */ - if (devpriv->ao_bipolar) { + if (devpriv->ao_bipolar) datum ^= 1 << (thisboard->ao_bits - 1); - } + /* PCI230 is 12 bit - stored in upper bits of 16 bit register (lower * four bits reserved for expansion). */ @@ -734,9 +734,9 @@ static int pci230_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* Allocate the private structure area using alloc_private(). * Macro defined in comedidev.h - memsets struct fields to 0. */ - if ((alloc_private(dev, sizeof(struct pci230_private))) < 0) { + if ((alloc_private(dev, sizeof(struct pci230_private))) < 0) return -ENOMEM; - } + spin_lock_init(&devpriv->isr_spinlock); spin_lock_init(&devpriv->res_spinlock); spin_lock_init(&devpriv->ai_stop_spinlock); @@ -991,9 +991,9 @@ static int pci230_detach(struct comedi_device *dev) if (devpriv) { if (devpriv->pci_dev) { - if (dev->iobase) { + if (dev->iobase) comedi_pci_disable(devpriv->pci_dev); - } + pci_dev_put(devpriv->pci_dev); } } @@ -1055,9 +1055,9 @@ static void put_resources(struct comedi_device *dev, unsigned int res_mask, && (res_mask != 0); b <<= 1, i++) { if ((res_mask & b) != 0) { res_mask &= ~b; - if (devpriv->res_owner[i] == owner) { + if (devpriv->res_owner[i] == owner) devpriv->res_owner[i] = OWNER_NONE; - } + } } spin_unlock_irqrestore(&devpriv->res_spinlock, irqflags); @@ -1132,11 +1132,11 @@ static int pci230_ai_rinsn(struct comedi_device *dev, } devpriv->adcg = (devpriv->adcg & ~(3 << gainshift)) | (pci230_ai_gain[range] << gainshift); - if (devpriv->ai_bipolar) { + if (devpriv->ai_bipolar) adccon |= PCI230_ADC_IR_BIP; - } else { + else adccon |= PCI230_ADC_IR_UNI; - } + /* Enable only this channel in the scan list - otherwise by default * we'll get one sample from each channel. */ @@ -1408,13 +1408,13 @@ static int pci230_ao_cmdtest(struct comedi_device *dev, chan = CR_CHAN(cmd->chanlist[n]); range = CR_RANGE(cmd->chanlist[n]); /* Channel numbers must strictly increase. */ - if (chan < prev_chan) { + if (chan < prev_chan) errors |= seq_err; - } + /* Ranges must be the same. */ - if (range != first_range) { + if (range != first_range) errors |= range_err; - } + prev_chan = chan; } if (errors != 0) { @@ -1583,9 +1583,9 @@ static int pci230_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) if (cmd->scan_begin_src == TRIG_TIMER) { /* Claim Z2-CT1. */ - if (!get_one_resource(dev, RES_Z2CT1, OWNER_AOCMD)) { + if (!get_one_resource(dev, RES_Z2CT1, OWNER_AOCMD)) return -EBUSY; - } + } /* Get number of scans required. */ @@ -1609,9 +1609,9 @@ static int pci230_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) unsigned int i; dacen = 0; - for (i = 0; i < cmd->chanlist_len; i++) { + for (i = 0; i < cmd->chanlist_len; i++) dacen |= 1 << CR_CHAN(cmd->chanlist[i]); - } + /* Set channel scan list. */ outw(dacen, dev->iobase + PCI230P2_DACEN); /* @@ -1656,9 +1656,9 @@ static int pci230_ai_check_scan_period(struct comedi_cmd *cmd) int err = 0; chanlist_len = cmd->chanlist_len; - if (cmd->chanlist_len == 0) { + if (cmd->chanlist_len == 0) chanlist_len = 1; - } + min_scan_period = chanlist_len * cmd->convert_arg; if ((min_scan_period < chanlist_len) || (min_scan_period < cmd->convert_arg)) { @@ -1777,11 +1777,11 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, * single-ended or pseudo-differential. */ if (cmd->chanlist && (cmd->chanlist_len > 0)) { /* Peek analogue reference of first channel. */ - if (CR_AREF(cmd->chanlist[0]) == AREF_DIFF) { + if (CR_AREF(cmd->chanlist[0]) == AREF_DIFF) max_speed_ai = MAX_SPEED_AI_DIFF; - } else { + else max_speed_ai = MAX_SPEED_AI_SE; - } + } else { /* No channel list. Assume single-ended. */ max_speed_ai = MAX_SPEED_AI_SE; @@ -1871,9 +1871,9 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, } } else if (cmd->scan_begin_src == TRIG_TIMER) { /* N.B. cmd->convert_arg is also TRIG_TIMER */ - if (!pci230_ai_check_scan_period(cmd)) { + if (!pci230_ai_check_scan_period(cmd)) err++; - } + } else { if (cmd->scan_begin_arg != 0) { cmd->scan_begin_arg = 0; @@ -1961,13 +1961,13 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, errors |= seq_err; } /* Channels must have same AREF. */ - if (aref != prev_aref) { + if (aref != prev_aref) errors |= aref_err; - } + /* Channel ranges must have same polarity. */ - if (polarity != prev_polarity) { + if (polarity != prev_polarity) errors |= polarity_err; - } + /* Single-ended channel pairs must have same * range. */ if ((aref != AREF_DIFF) @@ -1987,9 +1987,9 @@ static int pci230_ai_cmdtest(struct comedi_device *dev, } /* If channel list is a repeating subsequence, need a whole * number of repeats. */ - if ((n % subseq_len) != 0) { + if ((n % subseq_len) != 0) errors |= seq_err; - } + if ((devpriv->hwver > 0) && (devpriv->hwver < 4)) { /* * Buggy PCI230+ or PCI260+ requires channel 0 to be @@ -2228,9 +2228,9 @@ static void pci230_ai_start(struct comedi_device *dev, devpriv->adccon = (devpriv->adccon & ~PCI230_ADC_TRIG_MASK) | conv; outw(devpriv->adccon, dev->iobase + PCI230_ADCCON); - if (cmd->convert_src == TRIG_INT) { + if (cmd->convert_src == TRIG_INT) async->inttrig = pci230_ai_inttrig_convert; - } + /* Update FIFO interrupt trigger level, which is currently * set to "full". */ pci230_ai_update_fifo_trigger_level(dev, s); @@ -2345,9 +2345,9 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) } } /* Claim resources. */ - if (!get_resources(dev, res_mask, OWNER_AICMD)) { + if (!get_resources(dev, res_mask, OWNER_AICMD)) return -EBUSY; - } + /* Get number of scans required. */ if (cmd->stop_src == TRIG_COUNT) { @@ -2392,11 +2392,11 @@ static int pci230_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) range = CR_RANGE(cmd->chanlist[0]); devpriv->ai_bipolar = pci230_ai_bipolar[range]; - if (devpriv->ai_bipolar) { + if (devpriv->ai_bipolar) adccon |= PCI230_ADC_IR_BIP; - } else { + else adccon |= PCI230_ADC_IR_UNI; - } + for (i = 0; i < cmd->chanlist_len; i++) { unsigned int gainshift; @@ -2543,9 +2543,9 @@ static unsigned int pci230_choose_clk_count(uint64_t ns, unsigned int *count, for (clk_src = CLK_10MHZ;; clk_src++) { cnt = divide_ns(ns, pci230_timebase[clk_src], round_mode); - if ((cnt <= 65536) || (clk_src == CLK_1KHZ)) { + if ((cnt <= 65536) || (clk_src == CLK_1KHZ)) break; - } + } *count = cnt; return clk_src; @@ -2575,9 +2575,9 @@ static void pci230_ct_setup_ns_mode(struct comedi_device *dev, unsigned int ct, /* Program clock source. */ outb(CLK_CONFIG(ct, clk_src), devpriv->iobase1 + PCI230_ZCLK_SCE); /* Set initial count. */ - if (count >= 65536) { + if (count >= 65536) count = 0; - } + i8254_write(devpriv->iobase1 + PCI230_Z2_CT_BASE, 0, ct, count); } @@ -2599,9 +2599,9 @@ static irqreturn_t pci230_interrupt(int irq, void *d) /* Read interrupt status/enable register. */ status_int = inb(devpriv->iobase1 + PCI230_INT_STAT); - if (status_int == PCI230_INT_DISABLE) { + if (status_int == PCI230_INT_DISABLE) return IRQ_NONE; - } + spin_lock_irqsave(&devpriv->isr_spinlock, irqflags); valid_status_int = devpriv->int_en & status_int; @@ -2660,9 +2660,9 @@ static void pci230_handle_ao_nofifo(struct comedi_device *dev, struct comedi_async *async = s->async; struct comedi_cmd *cmd = &async->cmd; - if (!devpriv->ao_continuous && (devpriv->ao_scan_count == 0)) { + if (!devpriv->ao_continuous && (devpriv->ao_scan_count == 0)) return; - } + for (i = 0; i < cmd->chanlist_len; i++) { /* Read sample from Comedi's circular buffer. */ @@ -2711,9 +2711,9 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, num_scans = comedi_buf_read_n_available(async) / bytes_per_scan; if (!devpriv->ao_continuous) { /* Fixed number of scans. */ - if (num_scans > devpriv->ao_scan_count) { + if (num_scans > devpriv->ao_scan_count) num_scans = devpriv->ao_scan_count; - } + if (devpriv->ao_scan_count == 0) { /* End of acquisition. */ events |= COMEDI_CB_EOA; @@ -2736,21 +2736,21 @@ static int pci230_handle_ao_fifo(struct comedi_device *dev, } if (events == 0) { /* Determine how much room is in the FIFO (in samples). */ - if ((dacstat & PCI230P2_DAC_FIFO_FULL) != 0) { + if ((dacstat & PCI230P2_DAC_FIFO_FULL) != 0) room = PCI230P2_DAC_FIFOROOM_FULL; - } else if ((dacstat & PCI230P2_DAC_FIFO_HALF) != 0) { + else if ((dacstat & PCI230P2_DAC_FIFO_HALF) != 0) room = PCI230P2_DAC_FIFOROOM_HALFTOFULL; - } else if ((dacstat & PCI230P2_DAC_FIFO_EMPTY) != 0) { + else if ((dacstat & PCI230P2_DAC_FIFO_EMPTY) != 0) room = PCI230P2_DAC_FIFOROOM_EMPTY; - } else { + else room = PCI230P2_DAC_FIFOROOM_ONETOHALF; - } + /* Convert room to number of scans that can be added. */ room /= cmd->chanlist_len; /* Determine number of scans to process. */ - if (num_scans > room) { + if (num_scans > room) num_scans = room; - } + /* Process scans. */ for (n = 0; n < num_scans; n++) { for (i = 0; i < cmd->chanlist_len; i++) { @@ -2817,14 +2817,14 @@ static void pci230_handle_ai(struct comedi_device *dev, } else { todo = (devpriv->ai_scan_count * scanlen) - devpriv->ai_scan_pos; - if (todo > PCI230_ADC_FIFOLEVEL_HALFFULL) { + if (todo > PCI230_ADC_FIFOLEVEL_HALFFULL) todo = PCI230_ADC_FIFOLEVEL_HALFFULL; - } + } - if (todo == 0) { + if (todo == 0) return; - } + fifoamount = 0; for (i = 0; i < todo; i++) { @@ -2906,9 +2906,9 @@ static void pci230_ao_stop(struct comedi_device *dev, spin_lock_irqsave(&devpriv->ao_stop_spinlock, irqflags); started = test_and_clear_bit(AO_CMD_STARTED, &devpriv->state); spin_unlock_irqrestore(&devpriv->ao_stop_spinlock, irqflags); - if (!started) { + if (!started) return; - } + cmd = &s->async->cmd; if (cmd->scan_begin_src == TRIG_TIMER) { @@ -2968,9 +2968,9 @@ static void pci230_ai_stop(struct comedi_device *dev, spin_lock_irqsave(&devpriv->ai_stop_spinlock, irqflags); started = test_and_clear_bit(AI_CMD_STARTED, &devpriv->state); spin_unlock_irqrestore(&devpriv->ai_stop_spinlock, irqflags); - if (!started) { + if (!started) return; - } + cmd = &s->async->cmd; if (cmd->convert_src == TRIG_TIMER) { -- cgit v0.10.2 From 0686e4f4a2e6f33c418c8d57d9a4fc82b89557b2 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Thu, 11 Mar 2010 23:51:23 +0100 Subject: Staging: hv: trivial whitespace fixes found by checkpatch.pl Signed-off-by: Lars Lindley Cc: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Connection.c b/drivers/staging/hv/Connection.c index cf9c416..dbf0056 100644 --- a/drivers/staging/hv/Connection.c +++ b/drivers/staging/hv/Connection.c @@ -259,8 +259,8 @@ static void VmbusProcessChannelEvent(void *context) VmbusChannelOnChannelEvent(channel); /* * WorkQueueQueueWorkItem(channel->dataWorkQueue, - * VmbusChannelOnChannelEvent, - * (void*)channel); + * VmbusChannelOnChannelEvent, + * (void*)channel); */ } else { DPRINT_ERR(VMBUS, "channel not found for relid - %d.", relId); diff --git a/drivers/staging/hv/NetVsc.c b/drivers/staging/hv/NetVsc.c index e1ca343..f84942d 100644 --- a/drivers/staging/hv/NetVsc.c +++ b/drivers/staging/hv/NetVsc.c @@ -1087,7 +1087,7 @@ static void NetVscOnReceive(struct hv_device *Device, } /* Remove the 1st packet to represent the xfer page packet itself */ - xferpagePacket = (struct xferpage_packet*)listHead.next; + xferpagePacket = (struct xferpage_packet *)listHead.next; list_del(&xferpagePacket->ListEntry); /* This is how much we can satisfy */ @@ -1103,7 +1103,7 @@ static void NetVscOnReceive(struct hv_device *Device, /* Each range represents 1 RNDIS pkt that contains 1 ethernet frame */ for (i = 0; i < (count - 1); i++) { - netvscPacket = (struct hv_netvsc_packet*)listHead.next; + netvscPacket = (struct hv_netvsc_packet *)listHead.next; list_del(&netvscPacket->ListEntry); /* Initialize the netvsc packet */ diff --git a/drivers/staging/hv/RingBuffer.c b/drivers/staging/hv/RingBuffer.c index 80b8a2c..08b3c55 100644 --- a/drivers/staging/hv/RingBuffer.c +++ b/drivers/staging/hv/RingBuffer.c @@ -32,7 +32,7 @@ /* Amount of space to write to */ -#define BYTES_AVAIL_TO_WRITE(r, w, z) ((w) >= (r))?((z) - ((w) - (r))):((r) - (w)) +#define BYTES_AVAIL_TO_WRITE(r, w, z) ((w) >= (r)) ? ((z) - ((w) - (r))) : ((r) - (w)) /*++ diff --git a/drivers/staging/hv/StorVsc.c b/drivers/staging/hv/StorVsc.c index 3592ba2..7372317 100644 --- a/drivers/staging/hv/StorVsc.c +++ b/drivers/staging/hv/StorVsc.c @@ -554,7 +554,7 @@ static int StorVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) /* Save the channel properties to our storvsc channel */ /* props = (struct vmstorage_channel_properties *) - * channel->offerMsg.Offer.u.Standard.UserDefined; */ + * channel->offerMsg.Offer.u.Standard.UserDefined; */ /* FIXME: */ /* @@ -717,7 +717,7 @@ static int StorVscOnIORequest(struct hv_device *Device, } /* print_hex_dump_bytes("", DUMP_PREFIX_NONE, Request->Cdb, - * Request->CdbLen); */ + * Request->CdbLen); */ requestExtension->Request = Request; requestExtension->Device = Device; diff --git a/drivers/staging/hv/VersionInfo.h b/drivers/staging/hv/VersionInfo.h index 10d7b19..82e74b1 100644 --- a/drivers/staging/hv/VersionInfo.h +++ b/drivers/staging/hv/VersionInfo.h @@ -29,11 +29,11 @@ * * Definition of versioning is as follows; * - * Major Number Changes for these scenarios; + * Major Number Changes for these scenarios; * 1. When a new version of Windows Hyper-V * is released. * 2. A Major change has occurred in the - * Linux IC's. + * Linux IC's. * (For example the merge for the first time * into the kernel) Every time the Major Number * changes, the Revision number is reset to 0. diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index e80cae7..8f8637e 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -555,7 +555,7 @@ static int blkvsc_do_inquiry(struct block_device_context *blkdev) blkdev->device_type = UNKNOWN_DEV_TYPE; } - DPRINT_DBG(BLKVSC_DRV, "device type %d \n", device_type); + DPRINT_DBG(BLKVSC_DRV, "device type %d\n", device_type); blkdev->device_id_len = buf[7]; if (blkdev->device_id_len > 64) @@ -940,7 +940,7 @@ static int blkvsc_do_request(struct block_device_context *blkdev, int pending = 0; struct blkvsc_request_group *group = NULL; - DPRINT_DBG(BLKVSC_DRV, "blkdev %p req %p sect %lu \n", blkdev, req, + DPRINT_DBG(BLKVSC_DRV, "blkdev %p req %p sect %lu\n", blkdev, req, (unsigned long)blk_rq_pos(req)); /* Create a group to tie req to list of blkvsc_reqs */ @@ -1144,7 +1144,7 @@ static void blkvsc_request_completion(struct hv_storvsc_request *request) &blkvsc_req->group->blkvsc_req_list, req_entry) { DPRINT_DBG(BLKVSC_DRV, "completing blkvsc_req %p " - "sect_start %lu sect_count %ld \n", + "sect_start %lu sect_count %ld\n", comp_req, (unsigned long)comp_req->sector_start, comp_req->sector_count); @@ -1198,7 +1198,7 @@ static int blkvsc_cancel_pending_reqs(struct block_device_context *blkdev) &pend_req->group->blkvsc_req_list, req_entry) { DPRINT_DBG(BLKVSC_DRV, "completing blkvsc_req %p " - "sect_start %lu sect_count %ld \n", + "sect_start %lu sect_count %ld\n", comp_req, (unsigned long) comp_req->sector_start, comp_req->sector_count); @@ -1276,7 +1276,7 @@ static void blkvsc_request(struct request_queue *queue) struct request *req; int ret = 0; - DPRINT_DBG(BLKVSC_DRV, "- enter \n"); + DPRINT_DBG(BLKVSC_DRV, "- enter\n"); while ((req = blk_peek_request(queue)) != NULL) { DPRINT_DBG(BLKVSC_DRV, "- req %p\n", req); diff --git a/drivers/staging/hv/rndis.h b/drivers/staging/hv/rndis.h index 7c73277..723e1f1 100644 --- a/drivers/staging/hv/rndis.h +++ b/drivers/staging/hv/rndis.h @@ -622,7 +622,7 @@ struct rndis_message { /* get the size of an RNDIS message. Pass in the message type, */ /* struct rndis_set_request, struct rndis_packet for example */ #define RNDIS_MESSAGE_SIZE(Message) \ - (sizeof(Message) + (sizeof(struct rndis_message) - \ + (sizeof(Message) + (sizeof(struct rndis_message) - \ sizeof(union rndis_message_container))) /* get pointer to info buffer with message pointer */ diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index 63360b2..5e28e4c 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -112,7 +112,7 @@ static struct scsi_host_template scsi_driver = { .slave_configure = storvsc_device_configure, .cmd_per_lun = 1, /* 64 max_queue * 1 target */ - .can_queue = STORVSC_MAX_IO_REQUESTS*STORVSC_MAX_TARGETS, + .can_queue = STORVSC_MAX_IO_REQUESTS*STORVSC_MAX_TARGETS, .this_id = -1, /* no use setting to 0 since ll_blk_rw reset it to 1 */ /* currently 32 */ @@ -767,7 +767,7 @@ static int storvsc_queuecommand(struct scsi_cmnd *scmnd, request->DataBuffer.Offset = sgl[0].offset; for (i = 0; i < scsi_sg_count(scmnd); i++) { - DPRINT_DBG(STORVSC_DRV, "sgl[%d] len %d offset %d \n", + DPRINT_DBG(STORVSC_DRV, "sgl[%d] len %d offset %d\n", i, sgl[i].length, sgl[i].offset); request->DataBuffer.PfnArray[i] = page_to_pfn(sg_page((&sgl[i]))); diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c index 2ff61b8..d2a82aa 100644 --- a/drivers/staging/hv/vmbus_drv.c +++ b/drivers/staging/hv/vmbus_drv.c @@ -237,13 +237,13 @@ static ssize_t vmbus_show_device_attr(struct device *dev, * vmbus_bus_init -Main vmbus driver initialization routine. * * Here, we - * - initialize the vmbus driver context - * - setup various driver entry points - * - invoke the vmbus hv main init routine - * - get the irq resource - * - invoke the vmbus to add the vmbus root device - * - setup the vmbus root device - * - retrieve the channel offers + * - initialize the vmbus driver context + * - setup various driver entry points + * - invoke the vmbus hv main init routine + * - get the irq resource + * - invoke the vmbus to add the vmbus root device + * - setup the vmbus root device + * - retrieve the channel offers */ static int vmbus_bus_init(int (*drv_init)(struct hv_driver *drv)) { -- cgit v0.10.2 From 2a613e41ec7684ba863d54a9df3d964e2c7aa4c1 Mon Sep 17 00:00:00 2001 From: Wouter Van Rooy Date: Thu, 11 Mar 2010 20:51:14 +0100 Subject: Staging: cx25821 fixed C99 comments, white spaces and unnecessary braces This patch fixes some C99 style comments, trailing white spaces and some unnecessary 'if' braces found by checkpatch.pl Signed-off-by: Wouter Van Rooy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/cx25821/cx25821-alsa.c b/drivers/staging/cx25821/cx25821-alsa.c index 061add3..f5a7719 100644 --- a/drivers/staging/cx25821/cx25821-alsa.c +++ b/drivers/staging/cx25821/cx25821-alsa.c @@ -42,10 +42,10 @@ #define AUDIO_SRAM_CHANNEL SRAM_CH08 -#define dprintk(level,fmt, arg...) if (debug >= level) \ +#define dprintk(level, fmt, arg...) if (debug >= level) \ printk(KERN_INFO "%s/1: " fmt, chip->dev->name , ## arg) -#define dprintk_core(level,fmt, arg...) if (debug >= level) \ +#define dprintk_core(level, fmt, arg...) if (debug >= level) \ printk(KERN_DEBUG "%s/1: " fmt, chip->dev->name , ## arg) /**************************************************************************** @@ -105,7 +105,7 @@ MODULE_PARM_DESC(index, "Index value for cx25821 capture interface(s)."); MODULE_DESCRIPTION("ALSA driver module for cx25821 based capture cards"); MODULE_AUTHOR("Hiep Huynh"); MODULE_LICENSE("GPL"); -MODULE_SUPPORTED_DEVICE("{{Conexant,25821}"); //"{{Conexant,23881}," +MODULE_SUPPORTED_DEVICE("{{Conexant,25821}"); /*"{{Conexant,23881},"*/ static unsigned int debug; module_param(debug, int, 0644); @@ -135,7 +135,7 @@ MODULE_PARM_DESC(debug, "enable debug messages"); * BOARD Specific: Sets audio DMA */ -static int _cx25821_start_audio_dma(snd_cx25821_card_t * chip) +static int _cx25821_start_audio_dma(snd_cx25821_card_t *chip) { struct cx25821_buffer *buf = chip->buf; struct cx25821_dev *dev = chip->dev; @@ -143,7 +143,7 @@ static int _cx25821_start_audio_dma(snd_cx25821_card_t * chip) &cx25821_sram_channels[AUDIO_SRAM_CHANNEL]; u32 tmp = 0; - // enable output on the GPIO 0 for the MCLK ADC (Audio) + /* enable output on the GPIO 0 for the MCLK ADC (Audio) */ cx25821_set_gpiopin_direction(chip->dev, 0, 0); /* Make sure RISC/FIFO are off before changing FIFO/RISC settings */ @@ -158,18 +158,22 @@ static int _cx25821_start_audio_dma(snd_cx25821_card_t * chip) cx_write(AUD_A_LNGTH, buf->bpl); /* reset counter */ - cx_write(AUD_A_GPCNT_CTL, GP_COUNT_CONTROL_RESET); //GP_COUNT_CONTROL_RESET = 0x3 + cx_write(AUD_A_GPCNT_CTL, GP_COUNT_CONTROL_RESET); + /* GP_COUNT_CONTROL_RESET = 0x3 */ + atomic_set(&chip->count, 0); - //Set the input mode to 16-bit + /* Set the input mode to 16-bit */ tmp = cx_read(AUD_A_CFG); cx_write(AUD_A_CFG, tmp | FLD_AUD_DST_PK_MODE | FLD_AUD_DST_ENABLE | FLD_AUD_CLK_ENABLE); - //printk(KERN_INFO "DEBUG: Start audio DMA, %d B/line, cmds_start(0x%x)= %d lines/FIFO, %d periods, %d " - // "byte buffer\n", buf->bpl, audio_ch->cmds_start, cx_read(audio_ch->cmds_start + 12)>>1, - // chip->num_periods, buf->bpl * chip->num_periods); + /*printk(KERN_INFO "DEBUG: Start audio DMA, %d B/line, " + "cmds_start(0x%x)= %d lines/FIFO, %d periods, %d " + "byte buffer\n", buf->bpl, audio_ch->cmds_start, " + "cx_read(audio_ch->cmds_start + 12)>>1, + chip->num_periods, buf->bpl * chip->num_periods);*/ /* Enables corresponding bits at AUD_INT_STAT */ cx_write(AUD_A_INT_MSK, @@ -182,7 +186,7 @@ static int _cx25821_start_audio_dma(snd_cx25821_card_t * chip) /* enable audio irqs */ cx_set(PCI_INT_MSK, chip->dev->pci_irqmask | PCI_MSK_AUD_INT); - // Turn on audio downstream fifo and risc enable 0x101 + /* Turn on audio downstream fifo and risc enable 0x101 */ tmp = cx_read(AUD_INT_DMA_CTL); cx_set(AUD_INT_DMA_CTL, tmp | (FLD_AUD_DST_A_RISC_EN | FLD_AUD_DST_A_FIFO_EN)); @@ -194,7 +198,7 @@ static int _cx25821_start_audio_dma(snd_cx25821_card_t * chip) /* * BOARD Specific: Resets audio DMA */ -static int _cx25821_stop_audio_dma(snd_cx25821_card_t * chip) +static int _cx25821_stop_audio_dma(snd_cx25821_card_t *chip) { struct cx25821_dev *dev = chip->dev; @@ -232,13 +236,12 @@ static char *cx25821_aud_irqs[32] = { /* * BOARD Specific: Threats IRQ audio specific calls */ -static void cx25821_aud_irq(snd_cx25821_card_t * chip, u32 status, u32 mask) +static void cx25821_aud_irq(snd_cx25821_card_t *chip, u32 status, u32 mask) { struct cx25821_dev *dev = chip->dev; - if (0 == (status & mask)) { + if (0 == (status & mask)) return; - } cx_write(AUD_A_INT_STAT, status); if (debug > 1 || (status & mask & ~0xff)) @@ -318,11 +321,11 @@ static irqreturn_t cx25821_irq(int irq, void *dev_id) if (handled) cx_write(PCI_INT_STAT, pci_status); - out: +out: return IRQ_RETVAL(handled); } -static int dsp_buffer_free(snd_cx25821_card_t * chip) +static int dsp_buffer_free(snd_cx25821_card_t *chip) { BUG_ON(!chip->dma_size); @@ -363,7 +366,8 @@ static struct snd_pcm_hardware snd_cx25821_digital_hw = { .period_bytes_max = DEFAULT_FIFO_SIZE / 3, .periods_min = 1, .periods_max = AUDIO_LINE_SIZE, - .buffer_bytes_max = (AUDIO_LINE_SIZE * AUDIO_LINE_SIZE), //128*128 = 16384 = 1024 * 16 + .buffer_bytes_max = (AUDIO_LINE_SIZE * AUDIO_LINE_SIZE), + /* 128*128 = 16384 = 1024 * 16 */ }; /* @@ -393,18 +397,20 @@ static int snd_cx25821_pcm_open(struct snd_pcm_substream *substream) if (cx25821_sram_channels[AUDIO_SRAM_CHANNEL].fifo_size != DEFAULT_FIFO_SIZE) { - bpl = cx25821_sram_channels[AUDIO_SRAM_CHANNEL].fifo_size / 3; //since there are 3 audio Clusters + /* since there are 3 audio Clusters */ + bpl = cx25821_sram_channels[AUDIO_SRAM_CHANNEL].fifo_size / 3; + bpl &= ~7; /* must be multiple of 8 */ - if (bpl > AUDIO_LINE_SIZE) { + if (bpl > AUDIO_LINE_SIZE) bpl = AUDIO_LINE_SIZE; - } + runtime->hw.period_bytes_min = bpl; runtime->hw.period_bytes_max = bpl; } return 0; - _error: +_error: dprintk(1, "Error opening PCM!\n"); return err; } @@ -445,9 +451,9 @@ static int snd_cx25821_hw_params(struct snd_pcm_substream *substream, if (NULL == buf) return -ENOMEM; - if (chip->period_size > AUDIO_LINE_SIZE) { + if (chip->period_size > AUDIO_LINE_SIZE) chip->period_size = AUDIO_LINE_SIZE; - } + buf->vb.memory = V4L2_MEMORY_MMAP; buf->vb.field = V4L2_FIELD_NONE; @@ -474,7 +480,7 @@ static int snd_cx25821_hw_params(struct snd_pcm_substream *substream, buf->vb.width, buf->vb.height, 1); if (ret < 0) { printk(KERN_INFO - "DEBUG: ERROR after cx25821_risc_databuffer_audio() \n"); + "DEBUG: ERROR after cx25821_risc_databuffer_audio()\n"); goto error; } @@ -494,7 +500,7 @@ static int snd_cx25821_hw_params(struct snd_pcm_substream *substream, return 0; - error: +error: kfree(buf); return ret; } @@ -593,10 +599,10 @@ static struct snd_pcm_ops snd_cx25821_pcm_ops = { }; /* - * ALSA create a PCM device: Called when initializing the board. Sets up the name and hooks up - * the callbacks + * ALSA create a PCM device: Called when initializing the board. + * Sets up the name and hooks up the callbacks */ -static int snd_cx25821_pcm(snd_cx25821_card_t * chip, int device, char *name) +static int snd_cx25821_pcm(snd_cx25821_card_t *chip, int device, char *name) { struct snd_pcm *pcm; int err; @@ -655,7 +661,7 @@ static void snd_cx25821_dev_free(struct snd_card *card) { snd_cx25821_card_t *chip = card->private_data; - //snd_cx25821_free(chip); + /*snd_cx25821_free(chip);*/ snd_card_free(chip->card); } @@ -671,13 +677,13 @@ static int cx25821_audio_initdev(struct cx25821_dev *dev) if (devno >= SNDRV_CARDS) { printk(KERN_INFO "DEBUG ERROR: devno >= SNDRV_CARDS %s\n", __func__); - return (-ENODEV); + return -ENODEV; } if (!enable[devno]) { ++devno; printk(KERN_INFO "DEBUG ERROR: !enable[devno] %s\n", __func__); - return (-ENOENT); + return -ENOENT; } err = snd_card_create(index[devno], id[devno], THIS_MODULE, @@ -741,7 +747,7 @@ static int cx25821_audio_initdev(struct cx25821_dev *dev) devno++; return 0; - error: +error: snd_card_free(card); return err; } -- cgit v0.10.2 From ee21350fae9333acc11e3b1b77c887fd94e450f5 Mon Sep 17 00:00:00 2001 From: Robert Babilon Date: Thu, 11 Mar 2010 13:45:35 -0600 Subject: Staging: comedi: fix export symbol warnings in ni_daq_700.c This is a patch to the ni_daq_700.c file that fixes several EXPORT_SYMBOL warnings found by the checkpatch.pl tool Signed-off-by: Robert Babilon Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/ni_daq_700.c b/drivers/staging/comedi/drivers/ni_daq_700.c index 7ea6453..7844203 100644 --- a/drivers/staging/comedi/drivers/ni_daq_700.c +++ b/drivers/staging/comedi/drivers/ni_daq_700.c @@ -145,6 +145,7 @@ void subdev_700_interrupt(struct comedi_device *dev, struct comedi_subdevice *s) comedi_event(dev, s); } +EXPORT_SYMBOL(subdev_700_interrupt); static int subdev_700_cb(int dir, int port, int data, unsigned long arg) { @@ -326,6 +327,7 @@ int subdev_700_init(struct comedi_device *dev, struct comedi_subdevice *s, return 0; } +EXPORT_SYMBOL(subdev_700_init); int subdev_700_init_irq(struct comedi_device *dev, struct comedi_subdevice *s, int (*cb) (int, int, int, unsigned long), @@ -345,6 +347,7 @@ int subdev_700_init_irq(struct comedi_device *dev, struct comedi_subdevice *s, return 0; } +EXPORT_SYMBOL(subdev_700_init_irq); void subdev_700_cleanup(struct comedi_device *dev, struct comedi_subdevice *s) { @@ -353,11 +356,7 @@ void subdev_700_cleanup(struct comedi_device *dev, struct comedi_subdevice *s) kfree(s->private); } - -EXPORT_SYMBOL(subdev_700_init); -EXPORT_SYMBOL(subdev_700_init_irq); EXPORT_SYMBOL(subdev_700_cleanup); -EXPORT_SYMBOL(subdev_700_interrupt); static int dio700_attach(struct comedi_device *dev, struct comedi_devconfig *it) { -- cgit v0.10.2 From 1b2e434e1b46c0414e9645cce6179e0fef5e388b Mon Sep 17 00:00:00 2001 From: John Sheehan Date: Thu, 11 Mar 2010 17:32:33 +0000 Subject: Staging: comedi: fix coding style in range.c add missing space before closing brace Signed-off-by: John Sheehan Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/range.c b/drivers/staging/comedi/range.c index 8313dfc..188c479 100644 --- a/drivers/staging/comedi/range.c +++ b/drivers/staging/comedi/range.c @@ -29,7 +29,7 @@ const struct comedi_lrange range_bipolar5 = { 1, {BIP_RANGE(5)} }; const struct comedi_lrange range_bipolar2_5 = { 1, {BIP_RANGE(2.5)} }; const struct comedi_lrange range_unipolar10 = { 1, {UNI_RANGE(10)} }; const struct comedi_lrange range_unipolar5 = { 1, {UNI_RANGE(5)} }; -const struct comedi_lrange range_unknown = { 1, {{0, 1000000, UNIT_none}} }; +const struct comedi_lrange range_unknown = { 1, {{0, 1000000, UNIT_none} } }; /* COMEDI_RANGEINFO -- cgit v0.10.2 From 585f7682f975deb8c5a81e49257a315819913511 Mon Sep 17 00:00:00 2001 From: Andre Silva Date: Fri, 12 Mar 2010 15:28:15 +0000 Subject: Staging: arlan: fixed coding style issues in arlan-proc.c This is a patch to the arlan-proc.c file that fixes up multiple coding style errors and warnings found by the checkpatch.pl tool Signed-off-by: Andre Silva Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/arlan/arlan-proc.c b/drivers/staging/arlan/arlan-proc.c index b22983e..62cd1d0 100644 --- a/drivers/staging/arlan/arlan-proc.c +++ b/drivers/staging/arlan/arlan-proc.c @@ -9,48 +9,55 @@ -#define ARLAN_STR_SIZE 0x2ff0 -#define DEV_ARLAN_INFO 1 -#define DEV_ARLAN 1 -#define SARLG(type,var) {\ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x%x\n", #var, READSHMB(priva->card->var)); \ +#define ARLAN_STR_SIZE 0x2ff0 +#define DEV_ARLAN_INFO 1 +#define DEV_ARLAN 1 +#define SARLG(type, var) {\ + pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x%x\n", #var,\ + READSHMB(priva->card->var));\ } -#define SARLBN(type,var,nn) {\ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x",#var);\ - for (i=0; i < nn; i++ ) pos += sprintf(arlan_drive_info+pos, "%02x",READSHMB(priva->card->var[i]));\ - pos += sprintf(arlan_drive_info+pos, "\n"); \ +#define SARLBN(type, var, nn) {\ + pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x", #var);\ + for (i = 0; i < nn; i++)\ + pos += sprintf(arlan_drive_info+pos, "%02x",\ + READSHMB(priva->card->var[i]));\ + pos += sprintf(arlan_drive_info+pos, "\n");\ } -#define SARLBNpln(type,var,nn) {\ - for (i=0; i < nn; i++ ) pos += sprintf(arlan_drive_info+pos, "%02x",READSHMB(priva->card->var[i]));\ +#define SARLBNpln(type, var, nn) {\ + for (i = 0; i < nn; i++)\ + pos += sprintf(arlan_drive_info+pos, "%02x",\ + READSHMB(priva->card->var[i]));\ } -#define SARLSTR(var,nn) {\ +#define SARLSTR(var, nn) {\ char tmpStr[400];\ int tmpLn = nn;\ - if (nn > 399 ) tmpLn = 399; \ - memcpy(tmpStr,(char *) priva->conf->var,tmpLn);\ + if (nn > 399)\ + tmpLn = 399;\ + memcpy(tmpStr, (char *) priva->conf->var, tmpLn);\ tmpStr[tmpLn] = 0; \ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t%s \n",#var,priva->conf->var);\ + pos += sprintf(arlan_drive_info+pos, "%s\t=\t%s\n",\ + #var, priva->conf->var);\ } -#define SARLUC(var) SARLG(u_char, var) -#define SARLUCN(var,nn) SARLBN(u_char,var, nn) +#define SARLUC(var) SARLG(u_char, var) +#define SARLUCN(var, nn) SARLBN(u_char, var, nn) #define SARLUS(var) SARLG(u_short, var) -#define SARLUSN(var,nn) SARLBN(u_short,var, nn) +#define SARLUSN(var, nn) SARLBN(u_short, var, nn) #define SARLUI(var) SARLG(u_int, var) #define SARLUSA(var) {\ u_short tmpVar;\ - memcpy(&tmpVar, (short *) priva->conf->var,2); \ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x%x\n",#var, tmpVar);\ + memcpy(&tmpVar, (short *) priva->conf->var, 2); \ + pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x%x\n", #var, tmpVar);\ } #define SARLUIA(var) {\ u_int tmpVar;\ - memcpy(&tmpVar, (int* )priva->conf->var,4); \ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x%x\n",#var, tmpVar);\ + memcpy(&tmpVar, (int *)priva->conf->var, 4); \ + pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x%x\n", #var, tmpVar);\ } @@ -63,51 +70,51 @@ static const char *arlan_diagnostic_info_string(struct net_device *dev) READSHM(diagnosticInfo, arlan->diagnosticInfo, u_char); - switch (diagnosticInfo) - { - case 0xFF: + switch (diagnosticInfo) { + + case 0xFF: return "Diagnostic info is OK"; - case 0xFE: - return "ERROR EPROM Checksum error "; - case 0xFD: - return "ERROR Local Ram Test Failed "; - case 0xFC: - return "ERROR SCC failure "; - case 0xFB: - return "ERROR BackBone failure "; - case 0xFA: - return "ERROR transceiver not found "; - case 0xF9: - return "ERROR no more address space "; - case 0xF8: - return "ERROR Checksum error "; - case 0xF7: - return "ERROR Missing SS Code"; - case 0xF6: - return "ERROR Invalid config format"; - case 0xF5: - return "ERROR Reserved errorcode F5"; - case 0xF4: - return "ERROR Invalid spreading code/channel number"; - case 0xF3: - return "ERROR Load Code Error"; - case 0xF2: - return "ERROR Reserver errorcode F2 "; - case 0xF1: - return "ERROR Invalid command receivec by LAN card "; - case 0xF0: - return "ERROR Invalid parameter found in command "; - case 0xEF: - return "ERROR On-chip timer failure "; - case 0xEE: - return "ERROR T410 timer failure "; - case 0xED: - return "ERROR Too Many TxEnable commands "; - case 0xEC: - return "ERROR EEPROM error on radio module "; - default: - return "ERROR unknown Diagnostic info reply code "; - } + case 0xFE: + return "ERROR EPROM Checksum error "; + case 0xFD: + return "ERROR Local Ram Test Failed "; + case 0xFC: + return "ERROR SCC failure "; + case 0xFB: + return "ERROR BackBone failure "; + case 0xFA: + return "ERROR transceiver not found "; + case 0xF9: + return "ERROR no more address space "; + case 0xF8: + return "ERROR Checksum error "; + case 0xF7: + return "ERROR Missing SS Code"; + case 0xF6: + return "ERROR Invalid config format"; + case 0xF5: + return "ERROR Reserved errorcode F5"; + case 0xF4: + return "ERROR Invalid spreading code/channel number"; + case 0xF3: + return "ERROR Load Code Error"; + case 0xF2: + return "ERROR Reserver errorcode F2 "; + case 0xF1: + return "ERROR Invalid command receivec by LAN card "; + case 0xF0: + return "ERROR Invalid parameter found in command "; + case 0xEF: + return "ERROR On-chip timer failure "; + case 0xEE: + return "ERROR T410 timer failure "; + case 0xED: + return "ERROR Too Many TxEnable commands "; + case 0xEC: + return "ERROR EEPROM error on radio module "; + default: + return "ERROR unknown Diagnostic info reply code "; + } } static const char *arlan_hardware_type_string(struct net_device *dev) @@ -117,70 +124,69 @@ static const char *arlan_hardware_type_string(struct net_device *dev) volatile struct arlan_shmem __iomem *arlan = priv->card; READSHM(hardwareType, arlan->hardwareType, u_char); - switch (hardwareType) - { - case 0x00: - return "type A450"; - case 0x01: - return "type A650 "; - case 0x04: - return "type TMA coproc"; - case 0x0D: - return "type A650E "; - case 0x18: - return "type TMA coproc Australian"; - case 0x19: - return "type A650A "; - case 0x26: - return "type TMA coproc European"; - case 0x2E: - return "type A655 "; - case 0x2F: - return "type A655A "; - case 0x30: - return "type A655E "; - case 0x0B: - return "type A670 "; - case 0x0C: - return "type A670E "; - case 0x2D: - return "type A670A "; - case 0x0F: - return "type A411T"; - case 0x16: - return "type A411TA"; - case 0x1B: - return "type A440T"; - case 0x1C: - return "type A412T"; - case 0x1E: - return "type A412TA"; - case 0x22: - return "type A411TE"; - case 0x24: - return "type A412TE"; - case 0x27: - return "type A671T "; - case 0x29: - return "type A671TA "; - case 0x2B: - return "type A671TE "; - case 0x31: - return "type A415T "; - case 0x33: - return "type A415TA "; - case 0x35: - return "type A415TE "; - case 0x37: - return "type A672"; - case 0x39: - return "type A672A "; - case 0x3B: - return "type A672T"; - case 0x6B: - return "type IC2200"; - default: - return "type A672T"; + switch (hardwareType) { + case 0x00: + return "type A450"; + case 0x01: + return "type A650 "; + case 0x04: + return "type TMA coproc"; + case 0x0D: + return "type A650E "; + case 0x18: + return "type TMA coproc Australian"; + case 0x19: + return "type A650A "; + case 0x26: + return "type TMA coproc European"; + case 0x2E: + return "type A655 "; + case 0x2F: + return "type A655A "; + case 0x30: + return "type A655E "; + case 0x0B: + return "type A670 "; + case 0x0C: + return "type A670E "; + case 0x2D: + return "type A670A "; + case 0x0F: + return "type A411T"; + case 0x16: + return "type A411TA"; + case 0x1B: + return "type A440T"; + case 0x1C: + return "type A412T"; + case 0x1E: + return "type A412TA"; + case 0x22: + return "type A411TE"; + case 0x24: + return "type A412TE"; + case 0x27: + return "type A671T "; + case 0x29: + return "type A671TA "; + case 0x2B: + return "type A671TE "; + case 0x31: + return "type A415T "; + case 0x33: + return "type A415TA "; + case 0x35: + return "type A415TE "; + case 0x37: + return "type A672"; + case 0x39: + return "type A672A "; + case 0x3B: + return "type A672T"; + case 0x6B: + return "type IC2200"; + default: + return "type A672T"; } } #ifdef ARLAN_DEBUGGING @@ -193,12 +199,12 @@ static void arlan_print_diagnostic_info(struct net_device *dev) struct arlan_private *priv = netdev_priv(dev); volatile struct arlan_shmem __iomem *arlan = priv->card; - // ARLAN_DEBUG_ENTRY("arlan_print_diagnostic_info"); + /* ARLAN_DEBUG_ENTRY("arlan_print_diagnostic_info"); */ if (READSHMB(arlan->configuredStatusFlag) == 0) - printk("Arlan: Card NOT configured\n"); + printk(KERN_WARNING "Arlan: Card NOT configured\n"); else - printk("Arlan: Card is configured\n"); + printk(KERN_INFO "Arlan: Card is configured\n"); READSHM(diagnosticInfo, arlan->diagnosticInfo, u_char); READSHM(diagnosticOffset, arlan->diagnosticOffset, u_short); @@ -206,14 +212,15 @@ static void arlan_print_diagnostic_info(struct net_device *dev) printk(KERN_INFO "%s\n", arlan_diagnostic_info_string(dev)); if (diagnosticInfo != 0xff) - printk("%s arlan: Diagnostic Offset %d \n", dev->name, diagnosticOffset); + printk(KERN_INFO "%s arlan: Diagnostic Offset %d\n",\ + dev->name, diagnosticOffset); - printk("arlan: LAN CODE ID = "); + printk(KERN_INFO "arlan: LAN CODE ID = "); for (i = 0; i < 6; i++) DEBUGSHM(1, "%03d:", arlan->lanCardNodeId[i], u_char); printk("\n"); - printk("arlan: Arlan BroadCast address = "); + printk(KERN_INFO "arlan: Arlan BroadCast address = "); for (i = 0; i < 6; i++) DEBUGSHM(1, "%03d:", arlan->broadcastAddress[i], u_char); printk("\n"); @@ -229,13 +236,13 @@ static void arlan_print_diagnostic_info(struct net_device *dev) DEBUGSHM(1, "arlan: SID =%d\n", arlan->SID, u_short); DEBUGSHM(1, "arlan: rxOffset=%d\n", arlan->rxOffset, u_short); - DEBUGSHM(1, "arlan: registration mode is %d\n", arlan->registrationMode, u_char); + DEBUGSHM(1, "arlan: registration mode is %d\n",\ + arlan->registrationMode, u_char); - printk("arlan: name= "); + printk(KERN_INFO "arlan: name= "); IFDEBUG(1) - - for (i = 0; i < 16; i++) - { + + for (i = 0; i < 16; i++) { char c; READSHM(c, arlan->name[i], char); if (c) @@ -243,18 +250,19 @@ static void arlan_print_diagnostic_info(struct net_device *dev) } printk("\n"); -// ARLAN_DEBUG_EXIT("arlan_print_diagnostic_info"); + /* ARLAN_DEBUG_EXIT("arlan_print_diagnostic_info"); */ } -/****************************** TEST MEMORY **************/ +/****************************** TEST MEMORY **************/ static int arlan_hw_test_memory(struct net_device *dev) { u_char *ptr; int i; - int memlen = sizeof(struct arlan_shmem) - 0xF; /* avoid control register */ + int memlen = sizeof(struct arlan_shmem) - 0xF; /* avoid + control register */ volatile char *arlan_mem = (char *) (dev->mem_start); struct arlan_private *priv = netdev_priv(dev); volatile struct arlan_shmem __iomem *arlan = priv->card; @@ -271,13 +279,11 @@ static int arlan_hw_test_memory(struct net_device *dev) WRITESHM(arlan_mem[i], ((u_char) pattern++), u_char); pattern = 0; - for (i = 0; i < memlen; i++) - { + for (i = 0; i < memlen; i++) { char res; READSHM(res, arlan_mem[i], char); - if (res != pattern++) - { - printk(KERN_ERR "Arlan driver memory test 1 failed \n"); + if (res != pattern++) { + printk(KERN_ERR "Arlan driver memory test 1 failed\n"); return -1; } } @@ -287,13 +293,11 @@ static int arlan_hw_test_memory(struct net_device *dev) WRITESHM(arlan_mem[i], ~(pattern++), char); pattern = 0; - for (i = 0; i < memlen; i++) - { + for (i = 0; i < memlen; i++) { char res; READSHM(res, arlan_mem[i], char); - if (res != ~(pattern++)) - { - printk(KERN_ERR "Arlan driver memory test 2 failed \n"); + if (res != ~(pattern++)) { + printk(KERN_ERR "Arlan driver memory test 2 failed\n"); return -1; } } @@ -311,9 +315,9 @@ static int arlan_hw_test_memory(struct net_device *dev) clearHardwareReset(dev); /* wait for reset flag to become zero, we'll wait for two seconds */ - if (arlan_command(dev, ARLAN_COMMAND_LONG_WAIT_NOW)) - { - printk(KERN_ERR "%s arlan: failed to come back from memory test\n", dev->name); + if (arlan_command(dev, ARLAN_COMMAND_LONG_WAIT_NOW)) { + printk(KERN_ERR "%s arlan: failed to come\ + back from memory test\n", dev->name); return -1; } return 0; @@ -325,29 +329,32 @@ static int arlan_setup_card_by_book(struct net_device *dev) struct arlan_private *priv = netdev_priv(dev); volatile struct arlan_shmem __iomem *arlan = priv->card; -// ARLAN_DEBUG_ENTRY("arlan_setup_card"); + /* ARLAN_DEBUG_ENTRY("arlan_setup_card"); */ READSHM(configuredStatusFlag, arlan->configuredStatusFlag, u_char); IFDEBUG(10) if (configuredStatusFlag != 0) - IFDEBUG(10) printk("arlan: CARD IS CONFIGURED\n"); + IFDEBUG(10) printk(KERN_INFO "arlan: CARD IS CONFIGURED\n"); else - IFDEBUG(10) printk("arlan: card is NOT configured\n"); + IFDEBUG(10) printk(KERN_WARNING\ + "arlan: card is NOT configured\n"); if (testMemory || (READSHMB(arlan->diagnosticInfo) != 0xff)) if (arlan_hw_test_memory(dev)) return -1; - DEBUGSHM(4, "arlan configuredStatus = %d \n", arlan->configuredStatusFlag, u_char); - DEBUGSHM(4, "arlan driver diagnostic: 0x%2x\n", arlan->diagnosticInfo, u_char); + DEBUGSHM(4, "arlan configuredStatus = %d\n",\ + arlan->configuredStatusFlag, u_char); + DEBUGSHM(4, "arlan driver diagnostic: 0x%2x\n",\ + arlan->diagnosticInfo, u_char); /* issue nop command - no interrupt */ arlan_command(dev, ARLAN_COMMAND_NOOP); if (arlan_command(dev, ARLAN_COMMAND_WAIT_NOW) != 0) return -1; - IFDEBUG(50) printk("1st Noop successfully executed !!\n"); + IFDEBUG(50) printk(KERN_INFO "1st Noop successfully executed !!\n"); /* try to turn on the arlan interrupts */ clearClearInterrupt(dev); @@ -361,18 +368,18 @@ static int arlan_setup_card_by_book(struct net_device *dev) return -1; - IFDEBUG(50) printk("2nd Noop successfully executed !!\n"); + IFDEBUG(50) printk(KERN_INFO "2nd Noop successfully executed !!\n"); READSHM(irqLevel, arlan->irqLevel, u_char) - - if (irqLevel != dev->irq) - { - IFDEBUG(1) printk(KERN_WARNING "arlan dip switches set irq to %d\n", irqLevel); - printk(KERN_WARNING "device driver irq set to %d - does not match\n", dev->irq); + + if (irqLevel != dev->irq) { + IFDEBUG(1) printk(KERN_WARNING "arlan dip switches\ + set irq to %d\n", irqLevel); + printk(KERN_WARNING "device driver irq set to %d-\ + does not match\n", dev->irq); dev->irq = irqLevel; - } - else - IFDEBUG(2) printk("irq level is OK\n"); + } else + IFDEBUG(2) printk(KERN_INFO "irq level is OK\n"); IFDEBUG(3) arlan_print_diagnostic_info(dev); @@ -380,8 +387,7 @@ static int arlan_setup_card_by_book(struct net_device *dev) arlan_command(dev, ARLAN_COMMAND_CONF); READSHM(configuredStatusFlag, arlan->configuredStatusFlag, u_char); - if (configuredStatusFlag == 0) - { + if (configuredStatusFlag == 0) { printk(KERN_WARNING "arlan configure failed\n"); return -1; } @@ -391,7 +397,7 @@ static int arlan_setup_card_by_book(struct net_device *dev) printk(KERN_NOTICE "%s: arlan driver version %s loaded\n", dev->name, arlan_version); -// ARLAN_DEBUG_EXIT("arlan_setup_card"); + /* ARLAN_DEBUG_EXIT("arlan_setup_card"); */ return 0; /* no errors */ } @@ -402,7 +408,7 @@ static int arlan_setup_card_by_book(struct net_device *dev) static char arlan_drive_info[ARLAN_STR_SIZE] = "A655\n\0"; -static int arlan_sysctl_info(ctl_table * ctl, int write, +static int arlan_sysctl_info(ctl_table *ctl, int write, void __user *buffer, size_t * lenp, loff_t *ppos) { int i; @@ -410,35 +416,30 @@ static int arlan_sysctl_info(ctl_table * ctl, int write, struct arlan_private *priva = NULL; struct net_device *dev; pos = 0; - if (write) - { - printk("wrirte: "); + if (write) { + printk(KERN_INFO "wrirte: "); for (i = 0; i < 100; i++) - printk("adi %x \n", arlan_drive_info[i]); + printk("adi %x\n", arlan_drive_info[i]); } - if (ctl->procname == NULL || arlan_drive_info == NULL) - { - printk(KERN_WARNING " procname is NULL in sysctl_table or arlan_drive_info is NULL \n at arlan module\n "); + if (ctl->procname == NULL || arlan_drive_info == NULL) { + printk(KERN_WARNING " procname is NULL in sysctl_table or arlan_drive_info is NULL\n at arlan module\n "); return -1; } devnum = ctl->procname[5] - '0'; - if (devnum < 0 || devnum > MAX_ARLANS - 1) - { + if (devnum < 0 || devnum > MAX_ARLANS - 1) { printk(KERN_WARNING "too strange devnum in procfs parse\n "); return -1; - } - else if (arlan_device[devnum] == NULL) - { + } else if (arlan_device[devnum] == NULL) { if (ctl->procname) - pos += sprintf(arlan_drive_info + pos, "\t%s\n\n", ctl->procname); - pos += sprintf(arlan_drive_info + pos, "No device found here \n"); + pos += sprintf(arlan_drive_info + pos,\ + "\t%s\n\n", ctl->procname); + pos += sprintf(arlan_drive_info + pos,\ + "No device found here\n"); goto final; - } - else + } else priva = netdev_priv(arlan_device[devnum]); - if (priva == NULL) - { + if (priva == NULL) { printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); return -1; } @@ -446,17 +447,19 @@ static int arlan_sysctl_info(ctl_table * ctl, int write, memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); - pos = sprintf(arlan_drive_info, "Arlan info \n"); + pos = sprintf(arlan_drive_info, "Arlan info\n"); /* Header Signature */ SARLSTR(textRegion, 48); SARLUC(resetFlag); - pos += sprintf(arlan_drive_info + pos, "diagnosticInfo\t=\t%s \n", arlan_diagnostic_info_string(dev)); + pos += sprintf(arlan_drive_info + pos,\ + "diagnosticInfo\t=\t%s\n", arlan_diagnostic_info_string(dev)); SARLUC(diagnosticInfo); SARLUS(diagnosticOffset); SARLUCN(_1, 12); SARLUCN(lanCardNodeId, 6); SARLUCN(broadcastAddress, 6); - pos += sprintf(arlan_drive_info + pos, "hardwareType =\t %s \n", arlan_hardware_type_string(dev)); + pos += sprintf(arlan_drive_info + pos,\ + "hardwareType =\t %s\n", arlan_hardware_type_string(dev)); SARLUC(hardwareType); SARLUC(majorHardwareVersion); SARLUC(minorHardwareVersion); @@ -602,17 +605,18 @@ static int arlan_sysctl_info(ctl_table * ctl, int write, SARLUCN(dumpPtr, 4); SARLUC(dumpVal); SARLUC(wireTest); - + /* next 4 seems too long for procfs, over single page ? SARLUCN( _17, 0x86); SARLUCN( txBuffer, 0x800); - SARLUCN( rxBuffer, 0x800); + SARLUCN( rxBuffer, 0x800); SARLUCN( _18, 0x0bff); */ pos += sprintf(arlan_drive_info + pos, "rxRing\t=\t0x"); for (i = 0; i < 0x50; i++) - pos += sprintf(arlan_drive_info + pos, "%02x", ((char *) priva->conf)[priva->conf->rxOffset + i]); + pos += sprintf(arlan_drive_info + pos, "%02x",\ + ((char *) priva->conf)[priva->conf->rxOffset + i]); pos += sprintf(arlan_drive_info + pos, "\n"); SARLUC(configStatus); @@ -624,14 +628,14 @@ static int arlan_sysctl_info(ctl_table * ctl, int write, pos += sprintf(arlan_drive_info + pos, " total %d chars\n", pos); if (ctl) if (ctl->procname) - pos += sprintf(arlan_drive_info + pos, " driver name : %s\n", ctl->procname); + pos += sprintf(arlan_drive_info + pos,\ + " driver name : %s\n", ctl->procname); final: *lenp = pos; if (!write) retv = proc_dostring(ctl, write, buffer, lenp, ppos); - else - { + else { *lenp = 0; return -1; } @@ -639,7 +643,7 @@ final: } -static int arlan_sysctl_info161719(ctl_table * ctl, int write, +static int arlan_sysctl_info161719(ctl_table *ctl, int write, void __user *buffer, size_t * lenp, loff_t *ppos) { int i; @@ -648,16 +652,16 @@ static int arlan_sysctl_info161719(ctl_table * ctl, int write, pos = 0; devnum = ctl->procname[5] - '0'; - if (arlan_device[devnum] == NULL) - { - pos += sprintf(arlan_drive_info + pos, "No device found here \n"); + if (arlan_device[devnum] == NULL) { + pos += sprintf(arlan_drive_info + pos,\ + "No device found here\n"); goto final; - } - else + } else priva = netdev_priv(arlan_device[devnum]); - if (priva == NULL) - { - printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); + + if (priva == NULL) { + printk(KERN_WARNING " Could not find the device\ + private in arlan procsys, bad\n "); return -1; } memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); @@ -673,7 +677,7 @@ final: return retv; } -static int arlan_sysctl_infotxRing(ctl_table * ctl, int write, +static int arlan_sysctl_infotxRing(ctl_table *ctl, int write, void __user *buffer, size_t * lenp, loff_t *ppos) { int i; @@ -682,15 +686,14 @@ static int arlan_sysctl_infotxRing(ctl_table * ctl, int write, pos = 0; devnum = ctl->procname[5] - '0'; - if (arlan_device[devnum] == NULL) - { - pos += sprintf(arlan_drive_info + pos, "No device found here \n"); - goto final; - } - else + if (arlan_device[devnum] == NULL) { + pos += sprintf(arlan_drive_info + pos,\ + "No device found here\n"); + goto final; + } else priva = netdev_priv(arlan_device[devnum]); - if (priva == NULL) - { + + if (priva == NULL) { printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); return -1; } @@ -702,7 +705,7 @@ final: return retv; } -static int arlan_sysctl_inforxRing(ctl_table * ctl, int write, +static int arlan_sysctl_inforxRing(ctl_table *ctl, int write, void __user *buffer, size_t * lenp, loff_t *ppos) { int i; @@ -711,14 +714,13 @@ static int arlan_sysctl_inforxRing(ctl_table * ctl, int write, pos = 0; devnum = ctl->procname[5] - '0'; - if (arlan_device[devnum] == NULL) - { - pos += sprintf(arlan_drive_info + pos, "No device found here \n"); - goto final; + if (arlan_device[devnum] == NULL) { + pos += sprintf(arlan_drive_info + pos,\ + "No device found here\n"); + goto final; } else priva = netdev_priv(arlan_device[devnum]); - if (priva == NULL) - { + if (priva == NULL) { printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); return -1; } @@ -730,7 +732,7 @@ final: return retv; } -static int arlan_sysctl_info18(ctl_table * ctl, int write, +static int arlan_sysctl_info18(ctl_table *ctl, int write, void __user *buffer, size_t * lenp, loff_t *ppos) { int i; @@ -739,18 +741,18 @@ static int arlan_sysctl_info18(ctl_table * ctl, int write, pos = 0; devnum = ctl->procname[5] - '0'; - if (arlan_device[devnum] == NULL) - { - pos += sprintf(arlan_drive_info + pos, "No device found here \n"); + if (arlan_device[devnum] == NULL) { + pos += sprintf(arlan_drive_info + pos,\ + "No device found here\n"); goto final; - } - else + } else priva = netdev_priv(arlan_device[devnum]); - if (priva == NULL) - { + + if (priva == NULL) { printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); return -1; } + memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); SARLBNpln(u_char, _18, 0x800); @@ -766,74 +768,73 @@ final: static char conf_reset_result[200]; -static int arlan_configure(ctl_table * ctl, int write, +static int arlan_configure(ctl_table *ctl, int write, void __user *buffer, size_t * lenp, loff_t *ppos) { int pos = 0; int devnum = ctl->procname[6] - '0'; struct arlan_private *priv; - if (devnum < 0 || devnum > MAX_ARLANS - 1) - { - printk(KERN_WARNING "too strange devnum in procfs parse\n "); + if (devnum < 0 || devnum > MAX_ARLANS - 1) { + printk(KERN_WARNING "too strange devnum in procfs parse\n"); return -1; - } - else if (arlan_device[devnum] != NULL) - { - priv = netdev_priv(arlan_device[devnum]); - - arlan_command(arlan_device[devnum], ARLAN_COMMAND_CLEAN_AND_CONF); - } - else + } else if (arlan_device[devnum] != NULL) { + priv = netdev_priv(arlan_device[devnum]); + arlan_command(arlan_device[devnum],\ + ARLAN_COMMAND_CLEAN_AND_CONF); + } else return -1; *lenp = pos; return proc_dostring(ctl, write, buffer, lenp, ppos); } -static int arlan_sysctl_reset(ctl_table * ctl, int write, +static int arlan_sysctl_reset(ctl_table *ctl, int write, void __user *buffer, size_t * lenp, loff_t *ppos) { int pos = 0; int devnum = ctl->procname[5] - '0'; struct arlan_private *priv; - if (devnum < 0 || devnum > MAX_ARLANS - 1) - { - printk(KERN_WARNING "too strange devnum in procfs parse\n "); + if (devnum < 0 || devnum > MAX_ARLANS - 1) { + printk(KERN_WARNING "too strange devnum in procfs parse\n"); return -1; - } - else if (arlan_device[devnum] != NULL) - { + + } else if (arlan_device[devnum] != NULL) { priv = netdev_priv(arlan_device[devnum]); - arlan_command(arlan_device[devnum], ARLAN_COMMAND_CLEAN_AND_RESET); + arlan_command(arlan_device[devnum], \ + ARLAN_COMMAND_CLEAN_AND_RESET); } else return -1; + *lenp = pos + 3; return proc_dostring(ctl, write, buffer, lenp, ppos); } /* Place files in /proc/sys/dev/arlan */ -#define CTBLN(card,nam) \ - { .procname = #nam,\ - .data = &(arlan_conf[card].nam),\ - .maxlen = sizeof(int), .mode = 0600, .proc_handler = proc_dointvec} +#define CTBLN(card, nam) \ + { .procname = #nam,\ + .data = &(arlan_conf[card].nam),\ + .maxlen = sizeof(int), .mode = 0600, .proc_handler = proc_dointvec} #ifdef ARLAN_DEBUGGING -#define ARLAN_PROC_DEBUG_ENTRIES \ - { .procname = "entry_exit_debug",\ - .data = &arlan_entry_and_exit_debug,\ - .maxlen = sizeof(int), .mode = 0600, .proc_handler = proc_dointvec},\ +#define ARLAN_PROC_DEBUG_ENTRIES do {\ + + { .procname = "entry_exit_debug",\ + .data = &arlan_entry_and_exit_debug,\ + .maxlen = sizeof(int), .mode = 0600, .proc_handler = proc_dointvec},\ { .procname = "debug", .data = &arlan_debug,\ - .maxlen = sizeof(int), .mode = 0600, .proc_handler = proc_dointvec}, -#else + .maxlen = sizeof(int), .mode = 0600, .proc_handler = proc_dointvec}, + + } while (0) +#else #define ARLAN_PROC_DEBUG_ENTRIES #endif #define ARLAN_SYSCTL_TABLE_TOTAL(cardNo)\ - CTBLN(cardNo,spreadingCode),\ + CTBLN(cardNo, spreadingCode),\ CTBLN(cardNo, channelNumber),\ CTBLN(cardNo, scramblingDisable),\ CTBLN(cardNo, txAttenuation),\ @@ -861,43 +862,40 @@ static int arlan_sysctl_reset(ctl_table * ctl, int write, CTBLN(cardNo, rxParameter),\ CTBLN(cardNo, txTimeoutMs),\ CTBLN(cardNo, waitCardTimeout),\ - CTBLN(cardNo, channelSet), \ + CTBLN(cardNo, channelSet),\ { .procname = "name",\ .data = arlan_conf[cardNo].siteName,\ - .maxlen = 16, .mode = 0600, .proc_handler = proc_dostring},\ - CTBLN(cardNo,waitTime),\ - CTBLN(cardNo,lParameter),\ - CTBLN(cardNo,_15),\ - CTBLN(cardNo,headerSize),\ - CTBLN(cardNo,tx_delay_ms),\ - CTBLN(cardNo,retries),\ - CTBLN(cardNo,ReTransmitPacketMaxSize),\ - CTBLN(cardNo,waitReTransmitPacketMaxSize),\ - CTBLN(cardNo,fastReTransCount),\ - CTBLN(cardNo,driverRetransmissions),\ - CTBLN(cardNo,txAckTimeoutMs),\ - CTBLN(cardNo,registrationInterrupts),\ - CTBLN(cardNo,hardwareType),\ - CTBLN(cardNo,radioType),\ - CTBLN(cardNo,writeEEPROM),\ - CTBLN(cardNo,writeRadioType),\ + .maxlen = 16, .mode = 0600, .proc_handler = proc_dostring },\ + CTBLN(cardNo, waitTime),\ + CTBLN(cardNo, lParameter),\ + CTBLN(cardNo, _15),\ + CTBLN(cardNo, headerSize),\ + CTBLN(cardNo, tx_delay_ms),\ + CTBLN(cardNo, retries),\ + CTBLN(cardNo, ReTransmitPacketMaxSize),\ + CTBLN(cardNo, waitReTransmitPacketMaxSize),\ + CTBLN(cardNo, fastReTransCount),\ + CTBLN(cardNo, driverRetransmissions),\ + CTBLN(cardNo, txAckTimeoutMs),\ + CTBLN(cardNo, registrationInterrupts),\ + CTBLN(cardNo, hardwareType),\ + CTBLN(cardNo, radioType),\ + CTBLN(cardNo, writeEEPROM),\ + CTBLN(cardNo, writeRadioType),\ ARLAN_PROC_DEBUG_ENTRIES\ - CTBLN(cardNo,in_speed),\ - CTBLN(cardNo,out_speed),\ - CTBLN(cardNo,in_speed10),\ - CTBLN(cardNo,out_speed10),\ - CTBLN(cardNo,in_speed_max),\ - CTBLN(cardNo,out_speed_max),\ - CTBLN(cardNo,measure_rate),\ - CTBLN(cardNo,pre_Command_Wait),\ - CTBLN(cardNo,rx_tweak1),\ - CTBLN(cardNo,rx_tweak2),\ - CTBLN(cardNo,tx_queue_len),\ - - - -static ctl_table arlan_conf_table0[] = -{ + CTBLN(cardNo, in_speed),\ + CTBLN(cardNo, out_speed),\ + CTBLN(cardNo, in_speed10),\ + CTBLN(cardNo, out_speed10),\ + CTBLN(cardNo, in_speed_max),\ + CTBLN(cardNo, out_speed_max),\ + CTBLN(cardNo, measure_rate),\ + CTBLN(cardNo, pre_Command_Wait),\ + CTBLN(cardNo, rx_tweak1),\ + CTBLN(cardNo, rx_tweak2),\ + CTBLN(cardNo, tx_queue_len),\ + +static ctl_table arlan_conf_table0[] = { ARLAN_SYSCTL_TABLE_TOTAL(0) #ifdef ARLAN_PROC_SHM_DUMP @@ -954,8 +952,7 @@ static ctl_table arlan_conf_table0[] = { } }; -static ctl_table arlan_conf_table1[] = -{ +static ctl_table arlan_conf_table1[] = { ARLAN_SYSCTL_TABLE_TOTAL(1) @@ -1013,8 +1010,7 @@ static ctl_table arlan_conf_table1[] = { } }; -static ctl_table arlan_conf_table2[] = -{ +static ctl_table arlan_conf_table2[] = { ARLAN_SYSCTL_TABLE_TOTAL(2) @@ -1072,8 +1068,7 @@ static ctl_table arlan_conf_table2[] = { } }; -static ctl_table arlan_conf_table3[] = -{ +static ctl_table arlan_conf_table3[] = { ARLAN_SYSCTL_TABLE_TOTAL(3) @@ -1133,8 +1128,7 @@ static ctl_table arlan_conf_table3[] = -static ctl_table arlan_table[] = -{ +static ctl_table arlan_table[] = { { .procname = "arlan0", .maxlen = 0, @@ -1164,17 +1158,15 @@ static ctl_table arlan_table[] = #else -static ctl_table arlan_table[] = -{ +static ctl_table arlan_table[] = { { } }; #endif -// static int mmtu = 1234; +/* static int mmtu = 1234; */ -static ctl_table arlan_root_table[] = -{ +static ctl_table arlan_root_table[] = { { .procname = "arlan", .maxlen = 0, @@ -1189,8 +1181,6 @@ static struct ctl_table_header *arlan_device_sysctl_header; int __init init_arlan_proc(void) { - - int i = 0; if (arlan_device_sysctl_header) return 0; arlan_device_sysctl_header = register_sysctl_table(arlan_root_table); @@ -1198,7 +1188,6 @@ int __init init_arlan_proc(void) return -1; return 0; - } void __exit cleanup_arlan_proc(void) -- cgit v0.10.2 From b9e2af544d4fe1a74006a68c744fbdaea13f1665 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Sat, 13 Mar 2010 12:17:59 +0100 Subject: Staging: dream: fix gpio_input compilation gpio_* drivers still need drivers in staging. Yes, that will need to be fixed, but at least fix compilation for now. Signed-off-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/Makefile b/drivers/staging/dream/Makefile index 2b79151..43d1eec 100644 --- a/drivers/staging/dream/Makefile +++ b/drivers/staging/dream/Makefile @@ -1,3 +1,4 @@ +EXTRA_CFLAGS=-Idrivers/staging/dream/include obj-$(CONFIG_MSM_ADSP) += qdsp5/ smd/ obj-$(CONFIG_MSM_CAMERA) += camera/ obj-$(CONFIG_INPUT_GPIO) += gpio_axis.o gpio_event.o gpio_input.o gpio_matrix.o gpio_output.o -- cgit v0.10.2 From 251211c3fa0d218e90f1fb4ce3b475213df467d2 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Sat, 13 Mar 2010 09:22:39 +0100 Subject: Staging: dream: Kconfig fix for non-HTC hardware > All of the Kconfig menu items under "config DREAM" should be listed > indented under the 'DREAM' symbol, but they are not. (using xconfig) > In menuconfig, the DREAM symbol isn't listed (since it depends on BROKEN), > but the other (subordinate) symbols are still listed. Ok, this should fix it ... or at least make it better an non-issue for people with non-HTC hardware. Signed-off-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/Kconfig b/drivers/staging/dream/Kconfig index 4afa081..707cc71 100644 --- a/drivers/staging/dream/Kconfig +++ b/drivers/staging/dream/Kconfig @@ -1,16 +1,14 @@ config DREAM - tristate "HTC Dream support" - depends on BROKEN + tristate "HTC Dream support" + depends on MACH_TROUT +if DREAM source "drivers/staging/dream/smd/Kconfig" source "drivers/staging/dream/camera/Kconfig" - config INPUT_GPIO tristate "GPIO driver support" help Say Y here if you want to support gpio based keys, wheels etc... - - - +endif -- cgit v0.10.2 From 2d1cbb77db089df3d70c2f921ea4b3cf8b9695e9 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Sat, 13 Mar 2010 09:53:25 +0100 Subject: Staging: dream: remove last bits of earlysuspend support Remove last bits of earlysuspend support. Signed-off-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/TODO b/drivers/staging/dream/TODO index c07c880..dcd3ba8 100644 --- a/drivers/staging/dream/TODO +++ b/drivers/staging/dream/TODO @@ -1,4 +1,3 @@ -* remove support for wakelocks since those are not in mainline * camera driver uses old V4L API diff --git a/drivers/staging/dream/qdsp5/audio_out.c b/drivers/staging/dream/qdsp5/audio_out.c index fe7809d..76d7fa5 100644 --- a/drivers/staging/dream/qdsp5/audio_out.c +++ b/drivers/staging/dream/qdsp5/audio_out.c @@ -182,9 +182,6 @@ struct audio { int stopped; /* set when stopped, cleared on flush */ unsigned volume; - struct wake_lock wakelock; - struct wake_lock idlelock; - int adrc_enable; struct adrc_filter adrc; @@ -198,14 +195,10 @@ struct audio { static void audio_prevent_sleep(struct audio *audio) { printk(KERN_INFO "++++++++++++++++++++++++++++++\n"); - wake_lock(&audio->wakelock); - wake_lock(&audio->idlelock); } static void audio_allow_sleep(struct audio *audio) { - wake_unlock(&audio->wakelock); - wake_unlock(&audio->idlelock); printk(KERN_INFO "------------------------------\n"); } @@ -840,8 +833,6 @@ static int __init audio_init(void) mutex_init(&the_audio.write_lock); spin_lock_init(&the_audio.dsp_lock); init_waitqueue_head(&the_audio.wait); - wake_lock_init(&the_audio.wakelock, WAKE_LOCK_SUSPEND, "audio_pcm"); - wake_lock_init(&the_audio.idlelock, WAKE_LOCK_IDLE, "audio_pcm_idle"); return (misc_register(&audio_misc) || misc_register(&audpp_misc)); } diff --git a/drivers/staging/dream/smd/smd_rpcrouter_servers.c b/drivers/staging/dream/smd/smd_rpcrouter_servers.c index 1b152ab..bec3ee9 100644 --- a/drivers/staging/dream/smd/smd_rpcrouter_servers.c +++ b/drivers/staging/dream/smd/smd_rpcrouter_servers.c @@ -42,7 +42,6 @@ static struct msm_rpc_endpoint *endpoint; static LIST_HEAD(rpc_server_list); static DEFINE_MUTEX(rpc_server_list_lock); static int rpc_servers_active; -static struct wake_lock rpc_servers_wake_lock; static void rpc_server_register(struct msm_rpc_server *server) { @@ -136,10 +135,8 @@ static int rpc_servers_thread(void *data) int rc; for (;;) { - wake_unlock(&rpc_servers_wake_lock); rc = wait_event_interruptible(endpoint->wait_q, !list_empty(&endpoint->read_q)); - wake_lock(&rpc_servers_wake_lock); rc = msm_rpc_read(endpoint, &buffer, -1, -1); if (rc < 0) { printk(KERN_ERR "%s: could not read: %d\n", @@ -219,7 +216,6 @@ static struct platform_driver rpcservers_driver = { static int __init rpc_servers_init(void) { - wake_lock_init(&rpc_servers_wake_lock, WAKE_LOCK_SUSPEND, "rpc_server"); return platform_driver_register(&rpcservers_driver); } -- cgit v0.10.2 From d4a505e81bffe8c41b3b701f8fa7b47c902fb149 Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Sat, 13 Mar 2010 12:20:05 +0100 Subject: Staging: windbond: camelCase should be fixed (BTW, winbond/README alias winbond/TODO doesn't mention it, but another (trivial) step is going to be to change variable names and function names from CamelCase to lower_case spelling.) Signed-off-by: Pavel Machek Acked-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/README b/drivers/staging/winbond/README index cb944e4..2771024 100644 --- a/drivers/staging/winbond/README +++ b/drivers/staging/winbond/README @@ -2,6 +2,7 @@ TODO: - sparse cleanups - checkpatch cleanups - kerneldoc cleanups + - fix severeCamelCaseInfestation - remove typedefs - remove unused ioctls - use cfg80211 for regulatory stuff -- cgit v0.10.2 From f4af2361dfb750c746047e21d186df8705d1fd5d Mon Sep 17 00:00:00 2001 From: Stefan Schick Date: Sat, 13 Mar 2010 13:47:09 +0100 Subject: Staging: comedi: dt3000: fixed some coding style issues Fixed some coding style issues Signed-off-by: Stefan Schick Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/dt3000.c b/drivers/staging/comedi/drivers/dt3000.c index bbbef79..ca68789 100644 --- a/drivers/staging/comedi/drivers/dt3000.c +++ b/drivers/staging/comedi/drivers/dt3000.c @@ -314,9 +314,8 @@ static int dt3k_send_cmd(struct comedi_device *dev, unsigned int cmd) break; udelay(1); } - if ((status & DT3000_COMPLETION_MASK) == DT3000_NOERROR) { + if ((status & DT3000_COMPLETION_MASK) == DT3000_NOERROR) return 0; - } printk("dt3k_send_cmd() timeout/error status=0x%04x\n", status); @@ -359,9 +358,8 @@ static irqreturn_t dt3k_interrupt(int irq, void *d) struct comedi_subdevice *s; unsigned int status; - if (!dev->attached) { + if (!dev->attached) return IRQ_NONE; - } s = dev->subdevices + 0; status = readw(devpriv->io_addr + DPR_Intr_Flag); @@ -374,9 +372,8 @@ static irqreturn_t dt3k_interrupt(int irq, void *d) s->async->events |= COMEDI_CB_BLOCK; } - if (status & (DT3000_ADSWERR | DT3000_ADHWERR)) { + if (status & (DT3000_ADSWERR | DT3000_ADHWERR)) s->async->events |= COMEDI_CB_ERROR | COMEDI_CB_EOA; - } debug_n_ints++; if (debug_n_ints >= 10) { @@ -399,9 +396,8 @@ static void debug_intr_flags(unsigned int flags) int i; printk("dt3k: intr_flags:"); for (i = 0; i < 8; i++) { - if (flags & (1 << i)) { + if (flags & (1 << i)) printk(" %s", intr_flags[i]); - } } printk("\n"); } @@ -690,9 +686,8 @@ static int dt3k_ai_insn(struct comedi_device *dev, struct comedi_subdevice *s, /* XXX docs don't explain how to select aref */ aref = CR_AREF(insn->chanspec); - for (i = 0; i < insn->n; i++) { + for (i = 0; i < insn->n; i++) data[i] = dt3k_readsingle(dev, SUBS_AI, chan, gain); - } return i; } @@ -720,9 +715,8 @@ static int dt3k_ao_insn_read(struct comedi_device *dev, unsigned int chan; chan = CR_CHAN(insn->chanspec); - for (i = 0; i < insn->n; i++) { + for (i = 0; i < insn->n; i++) data[i] = devpriv->ao_readback[chan]; - } return i; } @@ -911,9 +905,8 @@ static int dt3000_detach(struct comedi_device *dev) if (devpriv) { if (devpriv->pci_dev) { - if (devpriv->phys_addr) { + if (devpriv->phys_addr) comedi_pci_disable(devpriv->pci_dev); - } pci_dev_put(devpriv->pci_dev); } if (devpriv->io_addr) -- cgit v0.10.2 From a41aec1be2b3b21c08b84fb1e70e23aab29c5820 Mon Sep 17 00:00:00 2001 From: Jason Wong Date: Sat, 27 Mar 2010 09:48:38 +0800 Subject: Staging: comedi: adl_pci9118: fixed multiple brace coding style issues Fixed multiple coding style issues Signed-off-by: Jason Wong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index 2205113..c7cba95 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -496,11 +496,11 @@ static int pci9118_insn_write_ao(struct comedi_device *dev, int n, chanreg, ch; ch = CR_CHAN(insn->chanspec); - if (ch) { + if (ch) chanreg = PCI9118_DA2; - } else { + else chanreg = PCI9118_DA1; - } + for (n = 0; n < insn->n; n++) { outl(data[n], dev->iobase + chanreg); @@ -663,11 +663,11 @@ static void pci9118_ai_munge(struct comedi_device *dev, for (i = 0; i < num_samples; i++) { if (devpriv->usedma) array[i] = be16_to_cpu(array[i]); - if (devpriv->ai16bits) { + if (devpriv->ai16bits) array[i] ^= 0x8000; - } else { + else array[i] = (array[i] >> 4) & 0x0fff; - } + } } @@ -930,20 +930,20 @@ static int pci9118_ai_cmdtest(struct comedi_device *dev, err++; tmp = cmd->scan_begin_src; - if (devpriv->master) { + if (devpriv->master) cmd->scan_begin_src &= TRIG_TIMER | TRIG_EXT | TRIG_FOLLOW; - } else { + else cmd->scan_begin_src &= TRIG_FOLLOW; - } + if (!cmd->scan_begin_src || tmp != cmd->scan_begin_src) err++; tmp = cmd->convert_src; - if (devpriv->master) { + if (devpriv->master) cmd->convert_src &= TRIG_TIMER | TRIG_EXT | TRIG_NOW; - } else { + else cmd->convert_src &= TRIG_TIMER | TRIG_EXT; - } + if (!cmd->convert_src || tmp != cmd->convert_src) err++; @@ -1908,9 +1908,9 @@ static int setup_channel_list(struct comedi_device *dev, } #ifdef PCI9118_EXTDEBUG DPRINTK("CHL: "); - for (i = 0; i <= (useeos * n_chan); i++) { + for (i = 0; i <= (useeos * n_chan); i++) DPRINTK("%04x ", devpriv->chanlist[i]); - } + DPRINTK("\n "); #endif #endif @@ -2222,9 +2222,9 @@ static int pci9118_attach(struct comedi_device *dev, return -EIO; } - if (master) { + if (master) pci_set_master(pcidev); - } + pci_bus = pcidev->bus->number; pci_slot = PCI_SLOT(pcidev->devfn); @@ -2335,11 +2335,11 @@ static int pci9118_attach(struct comedi_device *dev, dev->read_subdev = s; s->type = COMEDI_SUBD_AI; s->subdev_flags = SDF_READABLE | SDF_COMMON | SDF_GROUND | SDF_DIFF; - if (devpriv->usemux) { + if (devpriv->usemux) s->n_chan = devpriv->usemux; - } else { + else s->n_chan = this_board->n_aichan; - } + s->maxdata = this_board->ai_maxdata; s->len_chanlist = this_board->n_aichanlist; s->range_table = this_board->rangelist_ai; @@ -2411,9 +2411,9 @@ static int pci9118_detach(struct comedi_device *dev) if (dev->irq) free_irq(dev->irq, dev); if (devpriv->pcidev) { - if (dev->iobase) { + if (dev->iobase) comedi_pci_disable(devpriv->pcidev); - } + pci_dev_put(devpriv->pcidev); } if (devpriv->dmabuf_virt[0]) -- cgit v0.10.2 From 402a01ae2370e33aa67c483d136ca475756260f5 Mon Sep 17 00:00:00 2001 From: Jason Wong Date: Sat, 27 Mar 2010 09:48:40 +0800 Subject: Staging: comedi: adv_pci_dio: fixed multiple brace coding style issues Fixed multiple coding style issues. Signed-off-by: Jason Wong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adv_pci_dio.c b/drivers/staging/comedi/drivers/adv_pci_dio.c index 61d35fe..dbfeef8 100644 --- a/drivers/staging/comedi/drivers/adv_pci_dio.c +++ b/drivers/staging/comedi/drivers/adv_pci_dio.c @@ -367,9 +367,9 @@ static int pci_dio_insn_bits_di_b(struct comedi_device *dev, int i; data[1] = 0; - for (i = 0; i < d->regs; i++) { + for (i = 0; i < d->regs; i++) data[1] |= inb(dev->iobase + d->addr + i) << (8 * i); - } + return 2; } @@ -882,9 +882,9 @@ static int CheckAndAllocCard(struct comedi_device *dev, struct pci_dio_private *pr, *prev; for (pr = pci_priv, prev = NULL; pr != NULL; prev = pr, pr = pr->next) { - if (pr->pcidev == pcidev) { + if (pr->pcidev == pcidev) return 0; /* this card is used, look for another */ - } + } if (prev) { @@ -1040,22 +1040,22 @@ static int pci_dio_detach(struct comedi_device *dev) int subdev; if (dev->private) { - if (devpriv->valid) { + if (devpriv->valid) pci_dio_reset(dev); - } + /* This shows the silliness of using this kind of * scheme for numbering subdevices. Don't do it. --ds */ subdev = 0; for (i = 0; i < MAX_DI_SUBDEVS; i++) { - if (this_board->sdi[i].chans) { + if (this_board->sdi[i].chans) subdev++; - } + } for (i = 0; i < MAX_DO_SUBDEVS; i++) { - if (this_board->sdo[i].chans) { + if (this_board->sdo[i].chans) subdev++; - } + } for (i = 0; i < MAX_DIO_SUBDEVG; i++) { for (j = 0; j < this_board->sdio[i].regs; j++) { @@ -1071,20 +1071,20 @@ static int pci_dio_detach(struct comedi_device *dev) } if (devpriv->pcidev) { - if (dev->iobase) { + if (dev->iobase) comedi_pci_disable(devpriv->pcidev); - } + pci_dev_put(devpriv->pcidev); } - if (devpriv->prev) { + if (devpriv->prev) devpriv->prev->next = devpriv->next; - } else { + else pci_priv = devpriv->next; - } - if (devpriv->next) { + + if (devpriv->next) devpriv->next->prev = devpriv->prev; - } + } return 0; -- cgit v0.10.2 From ec14016e751106499ef237efc1000a424f53e372 Mon Sep 17 00:00:00 2001 From: Jason Wong Date: Sat, 27 Mar 2010 09:48:39 +0800 Subject: Staging: comedi: adv_pci1710: fixed multiple brace coding style issues Fixed multiple coding style issues. Signed-off-by: Jason Wong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index 394d2ea..f5bb286b 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -657,9 +657,9 @@ static void interrupt_pci1710_every_sample(void *d) #endif ++s->async->cur_chan; - if (s->async->cur_chan >= devpriv->ai_n_chan) { + if (s->async->cur_chan >= devpriv->ai_n_chan) s->async->cur_chan = 0; - } + if (s->async->cur_chan == 0) { /* one scan done */ devpriv->ai_act_scan++; @@ -863,12 +863,12 @@ static int pci171x_ai_docmd_and_mode(int mode, struct comedi_device *dev, devpriv->ai_eos = 0; } - if ((devpriv->ai_scans == 0) || (devpriv->ai_scans == -1)) { + if ((devpriv->ai_scans == 0) || (devpriv->ai_scans == -1)) devpriv->neverending_ai = 1; - } /* well, user want neverending */ - else { + /* well, user want neverending */ + else devpriv->neverending_ai = 0; - } + switch (mode) { case 1: case 2: @@ -1109,11 +1109,11 @@ static int pci171x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) devpriv->ai_timer1 = 0; devpriv->ai_timer2 = 0; - if (cmd->stop_src == TRIG_COUNT) { + if (cmd->stop_src == TRIG_COUNT) devpriv->ai_scans = cmd->stop_arg; - } else { + else devpriv->ai_scans = 0; - } + if (cmd->scan_begin_src == TRIG_FOLLOW) { /* mode 1, 2, 3 */ if (cmd->convert_src == TRIG_TIMER) { /* mode 1 and 2 */ @@ -1593,9 +1593,9 @@ static int pci1710_detach(struct comedi_device *dev) if (dev->irq) free_irq(dev->irq, dev); if (devpriv->pcidev) { - if (dev->iobase) { + if (dev->iobase) comedi_pci_disable(devpriv->pcidev); - } + pci_dev_put(devpriv->pcidev); } } -- cgit v0.10.2 From 7b8f2d1a2ece4180ac5fe418bf915efe728583a8 Mon Sep 17 00:00:00 2001 From: Jason Wong Date: Sat, 27 Mar 2010 09:48:41 +0800 Subject: Staging: comedi: cb_das16_cs: fixed multiple brace coding style issues Fixed multiple coding style issues Signed-off-by: Jason Wong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/cb_das16_cs.c b/drivers/staging/comedi/drivers/cb_das16_cs.c index 5632991..68bd5ca 100644 --- a/drivers/staging/comedi/drivers/cb_das16_cs.c +++ b/drivers/staging/comedi/drivers/cb_das16_cs.c @@ -175,16 +175,16 @@ static int das16cs_attach(struct comedi_device *dev, printk("I/O base=0x%04lx ", dev->iobase); printk("fingerprint:\n"); - for (i = 0; i < 48; i += 2) { + for (i = 0; i < 48; i += 2) printk("%04x ", inw(dev->iobase + i)); - } + printk("\n"); ret = request_irq(link->irq.AssignedIRQ, das16cs_interrupt, IRQF_SHARED, "cb_das16_cs", dev); - if (ret < 0) { + if (ret < 0) return ret; - } + dev->irq = link->irq.AssignedIRQ; printk("irq=%u ", dev->irq); @@ -262,9 +262,9 @@ static int das16cs_detach(struct comedi_device *dev) { printk("comedi%d: das16cs: remove\n", dev->minor); - if (dev->irq) { + if (dev->irq) free_irq(dev->irq, dev); - } + return 0; } -- cgit v0.10.2 From 90cae7944011b7a09b2d248e85ee11e987cc25f8 Mon Sep 17 00:00:00 2001 From: Jason Wong Date: Sat, 27 Mar 2010 09:48:42 +0800 Subject: Staging: comedi: cb_pcidas64: fixed multiple brace coding style issues Fixed multiple coding style issues. Signed-off-by: Jason Wong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 82295e0..1d43d0d 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1621,9 +1621,9 @@ int alloc_and_init_dma_members(struct comedi_device *dev) priv(dev)->ai_buffer[i] = pci_alloc_consistent(priv(dev)->hw_dev, DMA_BUFFER_SIZE, &priv(dev)->ai_buffer_bus_addr[i]); - if (priv(dev)->ai_buffer[i] == NULL) { + if (priv(dev)->ai_buffer[i] == NULL) return -ENOMEM; - } + } for (i = 0; i < AO_DMA_RING_COUNT; i++) { if (ao_cmd_is_supported(board(dev))) { @@ -1632,9 +1632,9 @@ int alloc_and_init_dma_members(struct comedi_device *dev) DMA_BUFFER_SIZE, &priv(dev)-> ao_buffer_bus_addr[i]); - if (priv(dev)->ao_buffer[i] == NULL) { + if (priv(dev)->ao_buffer[i] == NULL) return -ENOMEM; - } + } } /* allocate dma descriptors */ @@ -1643,9 +1643,9 @@ int alloc_and_init_dma_members(struct comedi_device *dev) sizeof(struct plx_dma_desc) * ai_dma_ring_count(board(dev)), &priv(dev)->ai_dma_desc_bus_addr); - if (priv(dev)->ai_dma_desc == NULL) { + if (priv(dev)->ai_dma_desc == NULL) return -ENOMEM; - } + DEBUG_PRINT("ai dma descriptors start at bus addr 0x%x\n", priv(dev)->ai_dma_desc_bus_addr); if (ao_cmd_is_supported(board(dev))) { @@ -1654,9 +1654,9 @@ int alloc_and_init_dma_members(struct comedi_device *dev) sizeof(struct plx_dma_desc) * AO_DMA_RING_COUNT, &priv(dev)->ao_dma_desc_bus_addr); - if (priv(dev)->ao_dma_desc == NULL) { + if (priv(dev)->ao_dma_desc == NULL) return -ENOMEM; - } + DEBUG_PRINT("ao dma descriptors start at bus addr 0x%x\n", priv(dev)->ao_dma_desc_bus_addr); } @@ -1848,9 +1848,9 @@ static int attach(struct comedi_device *dev, struct comedi_devconfig *it) printk(" irq %u\n", dev->irq); retval = setup_subdevices(dev); - if (retval < 0) { + if (retval < 0) return retval; - } + return 0; } @@ -1919,9 +1919,9 @@ static int detach(struct comedi_device *dev) priv(dev)->ao_dma_desc, priv(dev)-> ao_dma_desc_bus_addr); - if (priv(dev)->main_phys_iobase) { + if (priv(dev)->main_phys_iobase) comedi_pci_disable(priv(dev)->hw_dev); - } + pci_dev_put(priv(dev)->hw_dev); } } @@ -2902,9 +2902,9 @@ static void pio_drain_ai_fifo_16(struct comedi_device *dev) if (cmd->stop_src == TRIG_COUNT) { if (priv(dev)->ai_count == 0) break; - if (num_samples > priv(dev)->ai_count) { + if (num_samples > priv(dev)->ai_count) num_samples = priv(dev)->ai_count; - } + priv(dev)->ai_count -= num_samples; } @@ -2943,9 +2943,9 @@ static void pio_drain_ai_fifo_32(struct comedi_device *dev) readw(priv(dev)->main_iobase + ADC_READ_PNTR_REG) & 0x7fff; if (cmd->stop_src == TRIG_COUNT) { - if (max_transfer > priv(dev)->ai_count) { + if (max_transfer > priv(dev)->ai_count) max_transfer = priv(dev)->ai_count; - } + } for (i = 0; read_code != write_code && i < max_transfer;) { fifo_data = readl(priv(dev)->dio_counter_iobase + ADC_FIFO_REG); @@ -2964,9 +2964,9 @@ static void pio_drain_ai_fifo_32(struct comedi_device *dev) /* empty fifo */ static void pio_drain_ai_fifo(struct comedi_device *dev) { - if (board(dev)->layout == LAYOUT_4020) { + if (board(dev)->layout == LAYOUT_4020) pio_drain_ai_fifo_32(dev); - } else + else pio_drain_ai_fifo_16(dev); } @@ -3038,9 +3038,9 @@ void handle_ai_interrupt(struct comedi_device *dev, unsigned short status, priv(dev)->plx9080_iobase + PLX_DMA1_CS_REG); DEBUG_PRINT("dma1 status 0x%x\n", dma1_status); - if (dma1_status & PLX_DMA_EN_BIT) { + if (dma1_status & PLX_DMA_EN_BIT) drain_dma_buffers(dev, 1); - } + DEBUG_PRINT(" cleared dma ch1 interrupt\n"); } spin_unlock_irqrestore(&dev->spinlock, flags); -- cgit v0.10.2 From 003b3e9408425b6bd0b807108ee4cff5498125d3 Mon Sep 17 00:00:00 2001 From: Jason Wong Date: Sat, 27 Mar 2010 09:48:43 +0800 Subject: Staging: comedi: cb_pcidas64: fixed a coding style missed in the previous patch Fixed a coding style issue. Signed-off-by: Jason Wong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 1d43d0d..f17cb09 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1921,7 +1921,7 @@ static int detach(struct comedi_device *dev) ao_dma_desc_bus_addr); if (priv(dev)->main_phys_iobase) comedi_pci_disable(priv(dev)->hw_dev); - + pci_dev_put(priv(dev)->hw_dev); } } -- cgit v0.10.2 From a5729c005c35ce5b7b8cdbe407c0d0dedf4991dd Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Tue, 16 Mar 2010 17:24:47 +0200 Subject: Staging: hv: fix spaces coding style issue in vstorage.h This is a patch to the vstorage.h file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like spaces required around that ':' (ctx:VxV) Signed-off-by: Ruslan Pisarev Cc: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/vstorage.h b/drivers/staging/hv/vstorage.h index 6d160a5..4ea597d 100644 --- a/drivers/staging/hv/vstorage.h +++ b/drivers/staging/hv/vstorage.h @@ -28,7 +28,7 @@ #define REVISION_STRING(REVISION_) #REVISION_ #define FILL_VMSTOR_REVISION(RESULT_LVALUE_) \ { \ - char *revisionString = REVISION_STRING($Revision: 6 $) + 11; \ + char *revisionString = REVISION_STRING($Revision : 6 $) + 11; \ RESULT_LVALUE_ = 0; \ while (*revisionString >= '0' && *revisionString <= '9') { \ RESULT_LVALUE_ *= 10; \ -- cgit v0.10.2 From c6fcf0baa6367fecd3e025253700b64ccff8c1eb Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Tue, 27 Apr 2010 16:23:47 -0400 Subject: Staging: hv: don't use dynamic sized array NetVscOnChannelCallback() used a dynamic sized array that also made the frame size over 2048. Replace it with a buffer allocated from kzalloc. Signed-off-by: Bill Pemberton Cc: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/NetVsc.c b/drivers/staging/hv/NetVsc.c index f84942d..a48e637 100644 --- a/drivers/staging/hv/NetVsc.c +++ b/drivers/staging/hv/NetVsc.c @@ -1288,28 +1288,33 @@ static void NetVscOnReceiveCompletion(void *Context) void NetVscOnChannelCallback(void *Context) { - const int netPacketSize = 2048; int ret; struct hv_device *device = Context; struct netvsc_device *netDevice; u32 bytesRecvd; u64 requestId; - unsigned char packet[netPacketSize]; + unsigned char *packet; struct vmpacket_descriptor *desc; - unsigned char *buffer = packet; - int bufferlen = netPacketSize; + unsigned char *buffer; + int bufferlen = NETVSC_PACKET_SIZE; DPRINT_ENTER(NETVSC); ASSERT(device); + packet = kzalloc(NETVSC_PACKET_SIZE * sizeof(unsigned char), + GFP_KERNEL); + if (!packet) + return; + buffer = packet; + netDevice = GetInboundNetDevice(device); if (!netDevice) { DPRINT_ERR(NETVSC, "net device (%p) shutting down..." "ignoring inbound packets", netDevice); DPRINT_EXIT(NETVSC); - return; + goto out; } do { @@ -1341,17 +1346,17 @@ void NetVscOnChannelCallback(void *Context) } /* reset */ - if (bufferlen > netPacketSize) { + if (bufferlen > NETVSC_PACKET_SIZE) { kfree(buffer); buffer = packet; - bufferlen = netPacketSize; + bufferlen = NETVSC_PACKET_SIZE; } } else { /* reset */ - if (bufferlen > netPacketSize) { + if (bufferlen > NETVSC_PACKET_SIZE) { kfree(buffer); buffer = packet; - bufferlen = netPacketSize; + bufferlen = NETVSC_PACKET_SIZE; } break; @@ -1375,5 +1380,7 @@ void NetVscOnChannelCallback(void *Context) PutNetDevice(device); DPRINT_EXIT(NETVSC); +out: + kfree(buffer); return; } diff --git a/drivers/staging/hv/NetVsc.h b/drivers/staging/hv/NetVsc.h index 6e0e034..a6264db 100644 --- a/drivers/staging/hv/NetVsc.h +++ b/drivers/staging/hv/NetVsc.h @@ -289,6 +289,7 @@ struct nvsp_message { /* Preallocated receive packets */ #define NETVSC_RECEIVE_PACKETLIST_COUNT 256 +#define NETVSC_PACKET_SIZE 2048 /* Per netvsc channel-specific */ struct netvsc_device { -- cgit v0.10.2 From 81b571b77134aed29b9725f161dec6a37b48db68 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Tue, 27 Apr 2010 16:23:48 -0400 Subject: Staging: hv: declare NetVscOnChannelCallback() static NetVscOnChannelCallback() was prototyped as static, but the actual declartion of the function was not static. Signed-off-by: Bill Pemberton Cc: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/NetVsc.c b/drivers/staging/hv/NetVsc.c index a48e637..27516d4 100644 --- a/drivers/staging/hv/NetVsc.c +++ b/drivers/staging/hv/NetVsc.c @@ -1286,7 +1286,7 @@ static void NetVscOnReceiveCompletion(void *Context) DPRINT_EXIT(NETVSC); } -void NetVscOnChannelCallback(void *Context) +static void NetVscOnChannelCallback(void *Context) { int ret; struct hv_device *device = Context; -- cgit v0.10.2 From 1bf2ee4ea19d3ebeb8fe35c03dd44cb1d851e19f Mon Sep 17 00:00:00 2001 From: David Binderman Date: Fri, 19 Mar 2010 09:28:07 +0000 Subject: Staging: comedi: das1800: fix kfree coding style issue Signed-off-by: David Binderman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index 3c3e045..d91c2d9 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -797,10 +797,8 @@ static int das1800_detach(struct comedi_device *dev) free_dma(devpriv->dma0); if (devpriv->dma1) free_dma(devpriv->dma1); - if (devpriv->ai_buf0) - kfree(devpriv->ai_buf0); - if (devpriv->ai_buf1) - kfree(devpriv->ai_buf1); + kfree(devpriv->ai_buf0); + kfree(devpriv->ai_buf1); } printk("comedi%d: %s: remove\n", dev->minor, -- cgit v0.10.2 From 8487d0e93a24de43c847b923f7bbbd9097e59d47 Mon Sep 17 00:00:00 2001 From: Stephen Palmateer Date: Tue, 23 Mar 2010 21:32:14 -0400 Subject: Staging: comedi: comedi_parport: added KERN_ facility levels to printk messages. This is a patch to the comedi_parport.c file that fixes the KERN_ facility warnings found by the checkpatch.pl tool Signed-off-by: Stephen Palmateer Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/comedi_parport.c b/drivers/staging/comedi/drivers/comedi_parport.c index 043afe4..fcd7721 100644 --- a/drivers/staging/comedi/drivers/comedi_parport.c +++ b/drivers/staging/comedi/drivers/comedi_parport.c @@ -309,18 +309,18 @@ static int parport_attach(struct comedi_device *dev, iobase = it->options[0]; printk(KERN_INFO "comedi%d: parport: 0x%04lx ", dev->minor, iobase); if (!request_region(iobase, PARPORT_SIZE, "parport (comedi)")) { - printk("I/O port conflict\n"); + printk(KERN_ERR "I/O port conflict\n"); return -EIO; } dev->iobase = iobase; irq = it->options[1]; if (irq) { - printk(" irq=%u", irq); + printk(KERN_INFO " irq=%u", irq); ret = request_irq(irq, parport_interrupt, 0, "comedi_parport", dev); if (ret < 0) { - printk(" irq not available\n"); + printk(KERN_ERR " irq not available\n"); return -EINVAL; } dev->irq = irq; @@ -380,13 +380,13 @@ static int parport_attach(struct comedi_device *dev, devpriv->c_data = 0; outb(devpriv->c_data, dev->iobase + PARPORT_C); - printk("\n"); + printk(KERN_INFO "\n"); return 1; } static int parport_detach(struct comedi_device *dev) { - printk("comedi%d: parport: remove\n", dev->minor); + printk(KERN_INFO "comedi%d: parport: remove\n", dev->minor); if (dev->iobase) release_region(dev->iobase, PARPORT_SIZE); -- cgit v0.10.2 From 4ca62584a495f97869c1cbc5a61a140a38c8f375 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Sun, 28 Mar 2010 14:48:34 +0300 Subject: Staging: comedi: dt2801.c: off by one issue "dac_range_table" has 5 elements. Signed-off-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/dt2801.c b/drivers/staging/comedi/drivers/dt2801.c index 3f365ae..83fb6e5 100644 --- a/drivers/staging/comedi/drivers/dt2801.c +++ b/drivers/staging/comedi/drivers/dt2801.c @@ -472,7 +472,7 @@ static const struct comedi_lrange *dac_range_table[] = { static const struct comedi_lrange *dac_range_lkup(int opt) { - if (opt < 0 || opt > 5) + if (opt < 0 || opt >= 5) return &range_unknown; return dac_range_table[opt]; } -- cgit v0.10.2 From 48fe6039452cac9b98f2b4e1313e35765c2769df Mon Sep 17 00:00:00 2001 From: Gorskin Ilya Date: Sat, 3 Apr 2010 12:18:25 +0600 Subject: Staging: comedi: fix coding style issue in comedi.h This is a patch to the comedi.h files that fixes up errors found by the checkpatch.pl tool Signed-off-by: Gorskin Ilya Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index b559a9c..1251e07 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -490,7 +490,8 @@ I8254_BINARY = 0 }; - static inline unsigned NI_USUAL_PFI_SELECT(unsigned pfi_channel) { + static inline unsigned NI_USUAL_PFI_SELECT(unsigned pfi_channel) + { if (pfi_channel < 10) return 0x1 + pfi_channel; else @@ -590,14 +591,17 @@ NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS = 0x20000000, /* divide source by 8 */ NI_GPCT_INVERT_CLOCK_SRC_BIT = 0x80000000 }; - static inline unsigned NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(unsigned n) { + static inline unsigned NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(unsigned n) + { /* NI 660x-specific */ return 0x10 + n; } - static inline unsigned NI_GPCT_RTSI_CLOCK_SRC_BITS(unsigned n) { + static inline unsigned NI_GPCT_RTSI_CLOCK_SRC_BITS(unsigned n) + { return 0x18 + n; } - static inline unsigned NI_GPCT_PFI_CLOCK_SRC_BITS(unsigned n) { + static inline unsigned NI_GPCT_PFI_CLOCK_SRC_BITS(unsigned n) + { /* no pfi on NI 660x */ return 0x20 + n; } @@ -625,16 +629,20 @@ May be bitwise-or'd with CR_EDGE or CR_INVERT. */ we should add them here with an offset of 0x300 when known. */ NI_GPCT_DISABLED_GATE_SELECT = 0x8000, }; - static inline unsigned NI_GPCT_GATE_PIN_GATE_SELECT(unsigned n) { + static inline unsigned NI_GPCT_GATE_PIN_GATE_SELECT(unsigned n) + { return 0x102 + n; } - static inline unsigned NI_GPCT_RTSI_GATE_SELECT(unsigned n) { + static inline unsigned NI_GPCT_RTSI_GATE_SELECT(unsigned n) + { return NI_USUAL_RTSI_SELECT(n); } - static inline unsigned NI_GPCT_PFI_GATE_SELECT(unsigned n) { + static inline unsigned NI_GPCT_PFI_GATE_SELECT(unsigned n) + { return NI_USUAL_PFI_SELECT(n); } - static inline unsigned NI_GPCT_UP_DOWN_PIN_GATE_SELECT(unsigned n) { + static inline unsigned NI_GPCT_UP_DOWN_PIN_GATE_SELECT(unsigned n) + { return 0x202 + n; } @@ -650,7 +658,8 @@ INSN_CONFIG_SET_OTHER_SRC when using NI general-purpose counters. */ /* Still unknown, probably only need NI_GPCT_PFI_OTHER_SELECT */ NI_GPCT_DISABLED_OTHER_SELECT = 0x8000, }; - static inline unsigned NI_GPCT_PFI_OTHER_SELECT(unsigned n) { + static inline unsigned NI_GPCT_PFI_OTHER_SELECT(unsigned n) + { return NI_USUAL_PFI_SELECT(n); } @@ -699,7 +708,8 @@ INSN_CONFIG_ARM */ NI_MIO_PLL_PXI10_CLOCK = 3, NI_MIO_PLL_RTSI0_CLOCK = 4 }; - static inline unsigned NI_MIO_PLL_RTSI_CLOCK(unsigned rtsi_channel) { + static inline unsigned NI_MIO_PLL_RTSI_CLOCK(unsigned rtsi_channel) + { return NI_MIO_PLL_RTSI0_CLOCK + rtsi_channel; } @@ -719,7 +729,8 @@ INSN_CONFIG_ARM */ NI_RTSI_OUTPUT_RTSI_OSC = 12 /* pre-m-series always have RTSI clock on line 7 */ }; - static inline unsigned NI_RTSI_OUTPUT_RTSI_BRD(unsigned n) { + static inline unsigned NI_RTSI_OUTPUT_RTSI_BRD(unsigned n) + { return NI_RTSI_OUTPUT_RTSI_BRD_0 + n; } @@ -754,7 +765,8 @@ INSN_CONFIG_ARM */ NI_PFI_OUTPUT_CDI_SAMPLE = 29, NI_PFI_OUTPUT_CDO_UPDATE = 30 }; - static inline unsigned NI_PFI_OUTPUT_RTSI(unsigned rtsi_channel) { + static inline unsigned NI_PFI_OUTPUT_RTSI(unsigned rtsi_channel) + { return NI_PFI_OUTPUT_RTSI0 + rtsi_channel; } @@ -772,10 +784,12 @@ INSN_CONFIG_ARM */ /* NI External Trigger lines. These values are not arbitrary, but are related * to the bits required to program the board (offset by 1 for historical * reasons). */ - static inline unsigned NI_EXT_PFI(unsigned pfi_channel) { + static inline unsigned NI_EXT_PFI(unsigned pfi_channel) + { return NI_USUAL_PFI_SELECT(pfi_channel) - 1; } - static inline unsigned NI_EXT_RTSI(unsigned rtsi_channel) { + static inline unsigned NI_EXT_RTSI(unsigned rtsi_channel) + { return NI_USUAL_RTSI_SELECT(rtsi_channel) - 1; } @@ -801,21 +815,24 @@ INSN_CONFIG_ARM */ NI_CDIO_SCAN_BEGIN_SRC_FREQ_OUT = 32, NI_CDIO_SCAN_BEGIN_SRC_DIO_CHANGE_DETECT_IRQ = 33 }; - static inline unsigned NI_CDIO_SCAN_BEGIN_SRC_PFI(unsigned pfi_channel) { + static inline unsigned NI_CDIO_SCAN_BEGIN_SRC_PFI(unsigned pfi_channel) + { return NI_USUAL_PFI_SELECT(pfi_channel); } - static inline unsigned NI_CDIO_SCAN_BEGIN_SRC_RTSI(unsigned - rtsi_channel) { + static inline unsigned NI_CDIO_SCAN_BEGIN_SRC_RTSI(unsigned rtsi_channel) + { return NI_USUAL_RTSI_SELECT(rtsi_channel); } /* scan_begin_src for scan_begin_arg==TRIG_EXT with analog output command on NI * boards. These scan begin sources can also be bitwise-or'd with CR_INVERT to * change polarity. */ - static inline unsigned NI_AO_SCAN_BEGIN_SRC_PFI(unsigned pfi_channel) { + static inline unsigned NI_AO_SCAN_BEGIN_SRC_PFI(unsigned pfi_channel) + { return NI_USUAL_PFI_SELECT(pfi_channel); } - static inline unsigned NI_AO_SCAN_BEGIN_SRC_RTSI(unsigned rtsi_channel) { + static inline unsigned NI_AO_SCAN_BEGIN_SRC_RTSI(unsigned rtsi_channel) + { return NI_USUAL_RTSI_SELECT(rtsi_channel); } -- cgit v0.10.2 From c76a326f9256e1779dc676781faf19f3a534c147 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Fern=C3=A1ndez?= Date: Mon, 12 Apr 2010 15:19:23 -0400 Subject: Staging: comedi: add new driver for Adlink PCI-7230 devices Signed-off-by: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/Makefile b/drivers/staging/comedi/drivers/Makefile index df2854d..be99514 100644 --- a/drivers/staging/comedi/drivers/Makefile +++ b/drivers/staging/comedi/drivers/Makefile @@ -25,6 +25,7 @@ obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_3120.o obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_3501.o obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_3xxx.o obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci6208.o +obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci7230.o obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci7296.o obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci7432.o obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci8164.o diff --git a/drivers/staging/comedi/drivers/adl_pci7230.c b/drivers/staging/comedi/drivers/adl_pci7230.c new file mode 100644 index 0000000..24a82eb --- /dev/null +++ b/drivers/staging/comedi/drivers/adl_pci7230.c @@ -0,0 +1,206 @@ +/* + comedi/drivers/adl_pci7230.c + + Hardware comedi driver fot PCI7230 Adlink card + Copyright (C) 2010 David Fernandez + + 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ +/* +Driver: adl_pci7230 +Description: Driver for the Adlink PCI-7230 32 ch. isolated digital io board +Devices: [ADLink] PCI-7230 (adl_pci7230) +Author: David Fernandez +Status: experimental +Updated: Mon, 14 Apr 2008 15:08:14 +0100 + +Configuration Options: + [0] - PCI bus of device (optional) + [1] - PCI slot of device (optional) + If bus/slot is not specified, the first supported + PCI device found will be used. +*/ + +#include "../comedidev.h" +#include +#include "comedi_pci.h" + +#define PCI7230_DI 0x00 +#define PCI7230_DO 0x00 + +#define PCI_DEVICE_ID_PCI7230 0x7230 + +static DEFINE_PCI_DEVICE_TABLE(adl_pci7230_pci_table) = { + { + PCI_VENDOR_ID_ADLINK, + PCI_DEVICE_ID_PCI7230, + PCI_ANY_ID, + PCI_ANY_ID, + 0, + 0, + 0 + }, + {0} +}; + +MODULE_DEVICE_TABLE(pci, adl_pci7230_pci_table); + +struct adl_pci7230_private { + int data; + struct pci_dev *pci_dev; +}; + +#define devpriv ((struct adl_pci7230_private *)dev->private) + +static int adl_pci7230_attach(struct comedi_device *dev, + struct comedi_devconfig *it); +static int adl_pci7230_detach(struct comedi_device *dev); +static struct comedi_driver driver_adl_pci7230 = { + .driver_name = "adl_pci7230", + .module = THIS_MODULE, + .attach = adl_pci7230_attach, + .detach = adl_pci7230_detach, +}; + +/* Digital IO */ + +static int adl_pci7230_di_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data); + +static int adl_pci7230_do_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data); + +static int adl_pci7230_attach(struct comedi_device *dev, + struct comedi_devconfig *it) +{ + struct pci_dev *pcidev; + struct comedi_subdevice *s; + int bus, slot; + + printk(KERN_INFO "comedi%d: adl_pci7230\n", dev->minor); + + dev->board_name = "pci7230"; + bus = it->options[0]; + slot = it->options[1]; + + if (alloc_private(dev, sizeof(struct adl_pci7230_private)) < 0) + return -ENOMEM; + + if (alloc_subdevices(dev, 2) < 0) + return -ENOMEM; + + for (pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); + pcidev != NULL; + pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) { + + if (pcidev->vendor == PCI_VENDOR_ID_ADLINK && + pcidev->device == PCI_DEVICE_ID_PCI7230) { + if (bus || slot) { + /* requested particular bus/slot */ + if (pcidev->bus->number != bus || + PCI_SLOT(pcidev->devfn) != slot) { + continue; + } + } + devpriv->pci_dev = pcidev; + break; + } + } + if (pcidev == NULL) { + printk(KERN_ERR "comedi%d: no supported board found! (req. bus/slot : %d/%d)\n", + dev->minor, bus, slot); + return -EIO; + } + if (comedi_pci_enable(pcidev, "adl_pci7230") < 0) { + printk(KERN_ERR "comedi%d: Failed to enable PCI device and request regions\n", + dev->minor); + return -EIO; + } + dev->iobase = pci_resource_start(pcidev, 2); + printk(KERN_DEBUG "comedi: base addr %4lx\n", dev->iobase); + + s = dev->subdevices + 0; + /* Isolated do */ + s->type = COMEDI_SUBD_DO; + s->subdev_flags = SDF_WRITABLE | SDF_GROUND | SDF_COMMON; + s->n_chan = 16; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = adl_pci7230_do_insn_bits; + + s = dev->subdevices + 1; + /* Isolated di */ + s->type = COMEDI_SUBD_DI; + s->subdev_flags = SDF_READABLE | SDF_GROUND | SDF_COMMON; + s->n_chan = 16; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_bits = adl_pci7230_di_insn_bits; + + printk(KERN_DEBUG "comedi: attached\n"); + + return 1; +} + +static int adl_pci7230_detach(struct comedi_device *dev) +{ + printk(KERN_DEBUG "comedi%d: pci7230: remove\n", dev->minor); + + if (devpriv && devpriv->pci_dev) { + if (dev->iobase) + comedi_pci_disable(devpriv->pci_dev); + pci_dev_put(devpriv->pci_dev); + } + + return 0; +} + +static int adl_pci7230_do_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + if (insn->n != 2) + return -EINVAL; + + if (data[0]) { + s->state &= ~data[0]; + s->state |= (data[0] & data[1]); + + outl((s->state << 16) & 0xffffffff, dev->iobase + PCI7230_DO); + } + + return 2; +} + +static int adl_pci7230_di_insn_bits(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + if (insn->n != 2) + return -EINVAL; + + data[1] = inl(dev->iobase + PCI7230_DI) & 0xffffffff; + + return 2; +} + +COMEDI_PCI_INITCLEANUP(driver_adl_pci7230, adl_pci7230_pci_table); -- cgit v0.10.2 From 3c0d681e7d31fe747a2cbed0a93dd92049521683 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Wed, 21 Apr 2010 00:34:35 -0500 Subject: Staging: comedi: drivers: fix coding style issues in das16.c This is a patch to the das16.c file that fixes up the following issues found by the checkpatch.pl tool. WARNING: line over 80 characters x 23 ERROR: spaces required around that '?' (ctx:VxV) x 2 ERROR: spaces required around that ':' (ctx:VxV) x 2 WARNING: printk() should include KERN_ facility level x 17 WARNING: braces {} are not necessary for single statement blocks x 8 Signed-off-by: Gustavo Silva Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/das16.c b/drivers/staging/comedi/drivers/das16.c index f2aadda..ccee4f1 100644 --- a/drivers/staging/comedi/drivers/das16.c +++ b/drivers/staging/comedi/drivers/das16.c @@ -74,7 +74,8 @@ Keithley Manuals: 4922.PDF (das-1400) 4923.PDF (das1200, 1400, 1600) -Computer boards manuals also available from their website www.measurementcomputing.com +Computer boards manuals also available from their website +www.measurementcomputing.com */ @@ -92,7 +93,8 @@ Computer boards manuals also available from their website www.measurementcomputi /* #define DEBUG */ #ifdef DEBUG -#define DEBUG_PRINT(format, args...) printk("das16: " format, ## args) +#define DEBUG_PRINT(format, args...) \ + printk(KERN_DEBUG "das16: " format, ## args) #else #define DEBUG_PRINT(format, args...) #endif @@ -186,15 +188,16 @@ Computer boards manuals also available from their website www.measurementcomputi */ -static const int sample_size = 2; /* size in bytes of a sample from board */ +/* size in bytes of a sample from board */ +static const int sample_size = 2; #define DAS16_TRIG 0 #define DAS16_AI_LSB 0 #define DAS16_AI_MSB 1 #define DAS16_MUX 2 #define DAS16_DIO 3 -#define DAS16_AO_LSB(x) ((x)?6:4) -#define DAS16_AO_MSB(x) ((x)?7:5) +#define DAS16_AO_LSB(x) ((x) ? 6 : 4) +#define DAS16_AO_MSB(x) ((x) ? 7 : 5) #define DAS16_STATUS 8 #define BUSY (1<<7) #define UNIPOLAR (1<<6) @@ -271,7 +274,7 @@ static const struct comedi_lrange range_das1x02_unip = { 4, { }; static const struct comedi_lrange range_das16jr = { 9, { - /* also used by 16/330 */ + /* also used by 16/330 */ BIP_RANGE(10), BIP_RANGE(5), BIP_RANGE(2.5), @@ -547,7 +550,8 @@ static const struct das16_board das16_boards[] = { .id = 0x20, }, { - .name = "das-1401", /* 4919.pdf and 4922.pdf (keithley user's manual) */ + /* 4919.pdf and 4922.pdf (keithley user's manual) */ + .name = "das-1401", .ai = das16_ai_rinsn, .ai_nbits = 12, .ai_speed = 10000, @@ -558,10 +562,11 @@ static const struct das16_board das16_boards[] = { .i8255_offset = 0x0, .i8254_offset = 0x0c, .size = 0x408, - .id = 0xc0 /* 4919.pdf says id bits are 0xe0, 4922.pdf says 0xc0 */ + .id = 0xc0 /* 4919.pdf says id bits are 0xe0, 4922.pdf says 0xc0 */ }, { - .name = "das-1402", /* 4919.pdf and 4922.pdf (keithley user's manual) */ + /* 4919.pdf and 4922.pdf (keithley user's manual) */ + .name = "das-1402", .ai = das16_ai_rinsn, .ai_nbits = 12, .ai_speed = 10000, @@ -572,7 +577,7 @@ static const struct das16_board das16_boards[] = { .i8255_offset = 0x0, .i8254_offset = 0x0c, .size = 0x408, - .id = 0xc0 /* 4919.pdf says id bits are 0xe0, 4922.pdf says 0xc0 */ + .id = 0xc0 /* 4919.pdf says id bits are 0xe0, 4922.pdf says 0xc0 */ }, { .name = "das-1601", /* 4919.pdf */ @@ -704,7 +709,8 @@ static const struct das16_board das16_boards[] = { .name = "das16/jr/ctr5", /* ? */ }, { - .name = "cio-das16/m1/16", /* cio-das16_m1_16.pdf, this board is a bit quirky, no dma */ + /* cio-das16_m1_16.pdf, this board is a bit quirky, no dma */ + .name = "cio-das16/m1/16", }, #endif }; @@ -736,14 +742,19 @@ struct das16_private_struct { unsigned int clockbase; /* master clock speed in ns */ volatile unsigned int control_state; /* dma, interrupt and trigger control bits */ volatile unsigned long adc_byte_count; /* number of bytes remaining */ - unsigned int divisor1; /* divisor dividing master clock to get conversion frequency */ - unsigned int divisor2; /* divisor dividing master clock to get conversion frequency */ + /* divisor dividing master clock to get conversion frequency */ + unsigned int divisor1; + /* divisor dividing master clock to get conversion frequency */ + unsigned int divisor2; unsigned int dma_chan; /* dma channel */ uint16_t *dma_buffer[2]; dma_addr_t dma_buffer_addr[2]; unsigned int current_buffer; volatile unsigned int dma_transfer_size; /* target number of bytes to transfer per dma shot */ - /* user-defined analog input and output ranges defined from config options */ + /** + * user-defined analog input and output ranges + * defined from config options + */ struct comedi_lrange *user_ai_range_table; struct comedi_lrange *user_ao_range_table; @@ -798,7 +809,10 @@ static int das16_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s, if (err) return 1; - /* step 2: make sure trigger sources are unique and mutually compatible */ + /** + * step 2: make sure trigger sources are unique and + * mutually compatible + */ if (cmd->scan_begin_src != TRIG_TIMER && cmd->scan_begin_src != TRIG_EXT && cmd->scan_begin_src != TRIG_FOLLOW) @@ -893,12 +907,15 @@ static int das16_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s, if (CR_CHAN(cmd->chanlist[i]) != (start_chan + i) % s->n_chan) { comedi_error(dev, - "entries in chanlist must be consecutive channels, counting upwards\n"); + "entries in chanlist must be " + "consecutive channels, " + "counting upwards\n"); err++; } if (CR_RANGE(cmd->chanlist[i]) != gain) { comedi_error(dev, - "entries in chanlist must all have the same gain\n"); + "entries in chanlist must all " + "have the same gain\n"); err++; } } @@ -920,12 +937,13 @@ static int das16_cmd_exec(struct comedi_device *dev, struct comedi_subdevice *s) if (devpriv->dma_chan == 0 || (dev->irq == 0 && devpriv->timer_mode == 0)) { comedi_error(dev, - "irq (or use of 'timer mode') dma required to execute comedi_cmd"); + "irq (or use of 'timer mode') dma required to " + "execute comedi_cmd"); return -1; } if (cmd->flags & TRIG_RT) { - comedi_error(dev, - "isa dma transfers cannot be performed with TRIG_RT, aborting"); + comedi_error(dev, "isa dma transfers cannot be performed with " + "TRIG_RT, aborting"); return -1; } @@ -933,16 +951,17 @@ static int das16_cmd_exec(struct comedi_device *dev, struct comedi_subdevice *s) cmd->stop_arg * cmd->chanlist_len * sizeof(uint16_t); /* disable conversions for das1600 mode */ - if (thisboard->size > 0x400) { + if (thisboard->size > 0x400) outb(DAS1600_CONV_DISABLE, dev->iobase + DAS1600_CONV); - } + /* set scan limits */ byte = CR_CHAN(cmd->chanlist[0]); byte |= CR_CHAN(cmd->chanlist[cmd->chanlist_len - 1]) << 4; outb(byte, dev->iobase + DAS16_MUX); /* set gain (this is also burst rate register but according to - * computer boards manual, burst rate does nothing, even on keithley cards) */ + * computer boards manual, burst rate does nothing, even on + * keithley cards) */ if (thisboard->ai_pg != das16_pg_none) { range = CR_RANGE(cmd->chanlist[0]); outb((das16_gainlists[thisboard->ai_pg])[range], @@ -1005,9 +1024,9 @@ static int das16_cmd_exec(struct comedi_device *dev, struct comedi_subdevice *s) outb(devpriv->control_state, dev->iobase + DAS16_CONTROL); /* Enable conversions if using das1600 mode */ - if (thisboard->size > 0x400) { + if (thisboard->size > 0x400) outb(0, dev->iobase + DAS1600_CONV); - } + return 0; } @@ -1030,9 +1049,9 @@ static int das16_cancel(struct comedi_device *dev, struct comedi_subdevice *s) } /* disable burst mode */ - if (thisboard->size > 0x400) { + if (thisboard->size > 0x400) outb(0, dev->iobase + DAS1600_BURST); - } + spin_unlock_irqrestore(&dev->spinlock, flags); @@ -1085,11 +1104,11 @@ static int das16_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, } msb = inb(dev->iobase + DAS16_AI_MSB); lsb = inb(dev->iobase + DAS16_AI_LSB); - if (thisboard->ai_nbits == 12) { + if (thisboard->ai_nbits == 12) data[n] = ((lsb >> 4) & 0xf) | (msb << 4); - } else { + else data[n] = lsb | (msb << 8); - } + } return n; @@ -1207,8 +1226,8 @@ static int disable_dma_on_even(struct comedi_device *dev) residue = get_dma_residue(devpriv->dma_chan); } if (i == disable_limit) { - comedi_error(dev, - "failed to get an even dma transfer, could be trouble."); + comedi_error(dev, "failed to get an even dma transfer, " + "could be trouble."); } return residue; } @@ -1254,7 +1273,8 @@ static void das16_interrupt(struct comedi_device *dev) } else num_bytes = devpriv->dma_transfer_size - residue; - if (cmd->stop_src == TRIG_COUNT && num_bytes >= devpriv->adc_byte_count) { + if (cmd->stop_src == TRIG_COUNT && + num_bytes >= devpriv->adc_byte_count) { num_bytes = devpriv->adc_byte_count; async->events |= COMEDI_CB_EOA; } @@ -1275,9 +1295,9 @@ static void das16_interrupt(struct comedi_device *dev) set_dma_count(devpriv->dma_chan, devpriv->dma_transfer_size); enable_dma(devpriv->dma_chan); /* reenable conversions for das1600 mode, (stupid hardware) */ - if (thisboard->size > 0x400 && devpriv->timer_mode == 0) { + if (thisboard->size > 0x400 && devpriv->timer_mode == 0) outb(0x00, dev->iobase + DAS1600_CONV); - } + } release_dma_lock(dma_flags); @@ -1330,25 +1350,25 @@ static int das16_probe(struct comedi_device *dev, struct comedi_devconfig *it) status = inb(dev->iobase + DAS16_STATUS); - if ((status & UNIPOLAR)) { + if ((status & UNIPOLAR)) devpriv->ai_unipolar = 1; - } else { + else devpriv->ai_unipolar = 0; - } - if ((status & DAS16_MUXBIT)) { + + if ((status & DAS16_MUXBIT)) devpriv->ai_singleended = 1; - } else { + else devpriv->ai_singleended = 0; - } + /* diobits indicates boards */ diobits = inb(dev->iobase + DAS16_DIO) & 0xf0; - printk(" id bits are 0x%02x\n", diobits); + printk(KERN_INFO " id bits are 0x%02x\n", diobits); if (thisboard->id != diobits) { - printk(" requested board's id bits are 0x%x (ignore)\n", + printk(KERN_INFO " requested board's id bits are 0x%x (ignore)\n", thisboard->id); } @@ -1363,10 +1383,10 @@ static int das1600_mode_detect(struct comedi_device *dev) if (status & DAS1600_CLK_10MHZ) { devpriv->clockbase = 100; - printk(" 10MHz pacer clock\n"); + printk(KERN_INFO " 10MHz pacer clock\n"); } else { devpriv->clockbase = 1000; - printk(" 1MHz pacer clock\n"); + printk(KERN_INFO " 1MHz pacer clock\n"); } reg_dump(dev); @@ -1406,14 +1426,15 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (timer_mode) irq = 0; - printk("comedi%d: das16:", dev->minor); + printk(KERN_INFO "comedi%d: das16:", dev->minor); /* check that clock setting is valid */ if (it->options[3]) { if (it->options[3] != 0 && it->options[3] != 1 && it->options[3] != 10) { printk - ("\n Invalid option. Master clock must be set to 1 or 10 (MHz)\n"); + ("\n Invalid option. Master clock must be set " + "to 1 or 10 (MHz)\n"); return -EINVAL; } } @@ -1425,23 +1446,23 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (thisboard->size < 0x400) { printk(" 0x%04lx-0x%04lx\n", iobase, iobase + thisboard->size); if (!request_region(iobase, thisboard->size, "das16")) { - printk(" I/O port conflict\n"); + printk(KERN_ERR " I/O port conflict\n"); return -EIO; } } else { - printk(" 0x%04lx-0x%04lx 0x%04lx-0x%04lx\n", + printk(KERN_INFO " 0x%04lx-0x%04lx 0x%04lx-0x%04lx\n", iobase, iobase + 0x0f, iobase + 0x400, iobase + 0x400 + (thisboard->size & 0x3ff)); if (!request_region(iobase, 0x10, "das16")) { - printk(" I/O port conflict: 0x%04lx-0x%04lx\n", + printk(KERN_ERR " I/O port conflict: 0x%04lx-0x%04lx\n", iobase, iobase + 0x0f); return -EIO; } if (!request_region(iobase + 0x400, thisboard->size & 0x3ff, "das16")) { release_region(iobase, 0x10); - printk(" I/O port conflict: 0x%04lx-0x%04lx\n", + printk(KERN_ERR " I/O port conflict: 0x%04lx-0x%04lx\n", iobase + 0x400, iobase + 0x400 + (thisboard->size & 0x3ff)); return -EIO; @@ -1452,7 +1473,7 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* probe id bits to make sure they are consistent */ if (das16_probe(dev, it)) { - printk(" id bits do not match selected board, aborting\n"); + printk(KERN_ERR " id bits do not match selected board, aborting\n"); return -EINVAL; } dev->board_name = thisboard->name; @@ -1474,7 +1495,7 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (ret < 0) return ret; dev->irq = irq; - printk(" ( irq = %u )", irq); + printk(KERN_INFO " ( irq = %u )", irq); } else if (irq == 0) { printk(" ( no irq )"); } else { @@ -1488,16 +1509,15 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* allocate dma buffers */ int i; for (i = 0; i < 2; i++) { - devpriv->dma_buffer[i] = pci_alloc_consistent(NULL, - DAS16_DMA_SIZE, - &devpriv-> - dma_buffer_addr - [i]); + devpriv->dma_buffer[i] = pci_alloc_consistent( + NULL, DAS16_DMA_SIZE, + &devpriv->dma_buffer_addr[i]); + if (devpriv->dma_buffer[i] == NULL) return -ENOMEM; } if (request_dma(dma_chan, "das16")) { - printk(" failed to allocate dma channel %i\n", + printk(KERN_ERR " failed to allocate dma channel %i\n", dma_chan); return -EINVAL; } @@ -1506,11 +1526,11 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it) disable_dma(devpriv->dma_chan); set_dma_mode(devpriv->dma_chan, DMA_MODE_READ); release_dma_lock(flags); - printk(" ( dma = %u)\n", dma_chan); + printk(KERN_INFO " ( dma = %u)\n", dma_chan); } else if (dma_chan == 0) { - printk(" ( no dma )\n"); + printk(KERN_INFO " ( no dma )\n"); } else { - printk(" invalid dma channel\n"); + printk(KERN_ERR " invalid dma channel\n"); return -EINVAL; } @@ -1569,7 +1589,7 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->subdev_flags |= SDF_DIFF; } s->maxdata = (1 << thisboard->ai_nbits) - 1; - if (devpriv->user_ai_range_table) { /* user defined ai range */ + if (devpriv->user_ai_range_table) { /* user defined ai range */ s->range_table = devpriv->user_ai_range_table; } else if (devpriv->ai_unipolar) { s->range_table = das16_ai_uni_lranges[thisboard->ai_pg]; @@ -1592,11 +1612,12 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->subdev_flags = SDF_WRITABLE; s->n_chan = 2; s->maxdata = (1 << thisboard->ao_nbits) - 1; - if (devpriv->user_ao_range_table) { /* user defined ao range */ + /* user defined ao range */ + if (devpriv->user_ao_range_table) s->range_table = devpriv->user_ao_range_table; - } else { + else s->range_table = &range_unknown; - } + s->insn_write = thisboard->ao; } else { s->type = COMEDI_SUBD_UNUSED; @@ -1656,7 +1677,7 @@ static int das16_attach(struct comedi_device *dev, struct comedi_devconfig *it) static int das16_detach(struct comedi_device *dev) { - printk("comedi%d: das16: remove\n", dev->minor); + printk(KERN_INFO "comedi%d: das16: remove\n", dev->minor); das16_reset(dev); @@ -1750,8 +1771,8 @@ static void das16_ai_munge(struct comedi_device *dev, for (i = 0; i < num_samples; i++) { data[i] = le16_to_cpu(data[i]); - if (thisboard->ai_nbits == 12) { + if (thisboard->ai_nbits == 12) data[i] = (data[i] >> 4) & 0xfff; - } + } } -- cgit v0.10.2 From b4ae23ce014d25af6c09bf3e82b4fd94b0cd2cb9 Mon Sep 17 00:00:00 2001 From: Gustavo Silva Date: Mon, 19 Apr 2010 01:21:10 -0500 Subject: Staging: comedi: drivers: fix coding style issues in das08.c This is a patch to the das08.c file that fixes up the following issues found by the checkpatch.pl tool. WARNING: line over 80 characters x 6 ERROR: code indent should use tabs where possible x 3 ERROR: spaces required around that '?' (ctx:VxV) x 4 ERROR: spaces required around that ':' (ctx:VxV) x 4 ERROR: that open brace { should be on the previous line x 1 WARNING: printk() should include KERN_ facility level x 9 WARNING: braces {} are not necessary for single statement blocks x 1 WARNING: EXPORT_SYMBOL(foo); should immediately follow its function/variable x 2 Signed-off-by: Gustavo Silva Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/das08.c b/drivers/staging/comedi/drivers/das08.c index f425833..9cb144f 100644 --- a/drivers/staging/comedi/drivers/das08.c +++ b/drivers/staging/comedi/drivers/das08.c @@ -1,55 +1,55 @@ /* - comedi/drivers/das08.c - DAS08 driver - - COMEDI - Linux Control and Measurement Device Interface - Copyright (C) 2000 David A. Schleef - Copyright (C) 2001,2002,2003 Frank Mori Hess - Copyright (C) 2004 Salvador E. Tropea - - 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. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -***************************************************************** + * comedi/drivers/das08.c + * DAS08 driver + * + * COMEDI - Linux Control and Measurement Device Interface + * Copyright (C) 2000 David A. Schleef + * Copyright (C) 2001,2002,2003 Frank Mori Hess + * Copyright (C) 2004 Salvador E. Tropea + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + ***************************************************************** + */ -*/ /* -Driver: das08 -Description: DAS-08 compatible boards -Author: Warren Jasper, ds, Frank Hess -Devices: [Keithley Metrabyte] DAS08 (isa-das08), [ComputerBoards] DAS08 (isa-das08), - DAS08-PGM (das08-pgm), - DAS08-PGH (das08-pgh), DAS08-PGL (das08-pgl), DAS08-AOH (das08-aoh), - DAS08-AOL (das08-aol), DAS08-AOM (das08-aom), DAS08/JR-AO (das08/jr-ao), - DAS08/JR-16-AO (das08jr-16-ao), PCI-DAS08 (das08), - PC104-DAS08 (pc104-das08), DAS08/JR/16 (das08jr/16) -Status: works - -This is a rewrite of the das08 and das08jr drivers. - -Options (for ISA cards): - [0] - base io address - -Options (for pci-das08): - [0] - bus (optional) - [1] = slot (optional) - -The das08 driver doesn't support asynchronous commands, since -the cheap das08 hardware doesn't really support them. The -comedi_rt_timer driver can be used to emulate commands for this -driver. -*/ + * Driver: das08 + * Description: DAS-08 compatible boards + * Author: Warren Jasper, ds, Frank Hess + * Devices: [Keithley Metrabyte] DAS08 (isa-das08), + * [ComputerBoards] DAS08 (isa-das08), DAS08-PGM (das08-pgm), + * DAS08-PGH (das08-pgh), DAS08-PGL (das08-pgl), DAS08-AOH (das08-aoh), + * DAS08-AOL (das08-aol), DAS08-AOM (das08-aom), DAS08/JR-AO (das08/jr-ao), + * DAS08/JR-16-AO (das08jr-16-ao), PCI-DAS08 (das08), + * PC104-DAS08 (pc104-das08), DAS08/JR/16 (das08jr/16) + * Status: works + * + * This is a rewrite of the das08 and das08jr drivers. + * + * Options (for ISA cards): + * [0] - base io address + * + * Options (for pci-das08): + * [0] - bus (optional) + * [1] = slot (optional) + * + * The das08 driver doesn't support asynchronous commands, since + * the cheap das08 hardware doesn't really support them. The + * comedi_rt_timer driver can be used to emulate commands for this + * driver. + */ #include "../comedidev.h" @@ -122,8 +122,8 @@ driver. */ #define DAS08JR_DIO 3 -#define DAS08JR_AO_LSB(x) ((x)?6:4) -#define DAS08JR_AO_MSB(x) ((x)?7:5) +#define DAS08JR_AO_LSB(x) ((x) ? 6 : 4) +#define DAS08JR_AO_MSB(x) ((x) ? 7 : 5) /* cio-das08_aox.pdf @@ -148,8 +148,8 @@ driver. #define DAS08AO_GAIN_CONTROL 3 #define DAS08AO_GAIN_STATUS 3 -#define DAS08AO_AO_LSB(x) ((x)?0xa:8) -#define DAS08AO_AO_MSB(x) ((x)?0xb:9) +#define DAS08AO_AO_LSB(x) ((x) ? 0xa : 8) +#define DAS08AO_AO_MSB(x) ((x) ? 0xb : 9) #define DAS08AO_AO_UPDATE 8 /* gainlist same as _pgx_ below */ @@ -239,8 +239,9 @@ static const struct comedi_lrange *const das08_ai_lranges[] = { &range_das08_pgm, }; -static const int das08_pgh_gainlist[] = - { 8, 0, 10, 2, 12, 4, 14, 6, 1, 3, 5, 7 }; +static const int das08_pgh_gainlist[] = { + 8, 0, 10, 2, 12, 4, 14, 6, 1, 3, 5, 7 +}; static const int das08_pgl_gainlist[] = { 8, 0, 2, 4, 6, 1, 3, 5, 7 }; static const int das08_pgm_gainlist[] = { 8, 0, 10, 12, 14, 9, 11, 13, 15 }; @@ -535,7 +536,8 @@ static int das08_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, inb(dev->iobase + DAS08_MSB); /* set multiplexer */ - spin_lock(&dev->spinlock); /* lock to prevent race with digital output */ + /* lock to prevent race with digital output */ + spin_lock(&dev->spinlock); devpriv->do_mux_bits &= ~DAS08_MUX_MASK; devpriv->do_mux_bits |= DAS08_MUX(chan); outb(devpriv->do_mux_bits, dev->iobase + DAS08_CONTROL); @@ -552,7 +554,7 @@ static int das08_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, /* clear over-range bits for 16-bit boards */ if (thisboard->ai_nbits == 16) if (inb(dev->iobase + DAS08_MSB) & 0x80) - printk("das08: over-range\n"); + printk(KERN_INFO "das08: over-range\n"); /* trigger conversion */ outb_p(0, dev->iobase + DAS08_TRIG_12BIT); @@ -562,7 +564,7 @@ static int das08_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, break; } if (i == TIMEOUT) { - printk("das08: timeout\n"); + printk(KERN_ERR "das08: timeout\n"); return -ETIME; } msb = inb(dev->iobase + DAS08_MSB); @@ -607,7 +609,8 @@ static int das08_do_wbits(struct comedi_device *dev, struct comedi_subdevice *s, /* set new bit values */ wbits |= data[0] & data[1]; /* remember digital output bits */ - spin_lock(&dev->spinlock); /* prevent race with setting of analog input mux */ + /* prevent race with setting of analog input mux */ + spin_lock(&dev->spinlock); devpriv->do_mux_bits &= ~DAS08_DO_MASK; devpriv->do_mux_bits |= DAS08_OP(wbits); outb(devpriv->do_mux_bits, dev->iobase + DAS08_CONTROL); @@ -860,9 +863,9 @@ int das08_common_attach(struct comedi_device *dev, unsigned long iobase) /* allocate ioports for non-pcmcia, non-pci boards */ if ((thisboard->bustype != pcmcia) && (thisboard->bustype != pci)) { - printk(" iobase 0x%lx\n", iobase); + printk(KERN_INFO " iobase 0x%lx\n", iobase); if (!request_region(iobase, thisboard->iosize, DRV_NAME)) { - printk(" I/O port conflict\n"); + printk(KERN_ERR " I/O port conflict\n"); return -EIO; } } @@ -878,8 +881,11 @@ int das08_common_attach(struct comedi_device *dev, unsigned long iobase) /* ai */ if (thisboard->ai) { s->type = COMEDI_SUBD_AI; - /* XXX some boards actually have differential inputs instead of single ended. - * The driver does nothing with arefs though, so it's no big deal. */ + /* XXX some boards actually have differential + * inputs instead of single ended. + * The driver does nothing with arefs though, + * so it's no big deal. + */ s->subdev_flags = SDF_READABLE | SDF_GROUND; s->n_chan = 8; s->maxdata = (1 << thisboard->ai_nbits) - 1; @@ -966,6 +972,7 @@ int das08_common_attach(struct comedi_device *dev, unsigned long iobase) return 0; } +EXPORT_SYMBOL_GPL(das08_common_attach); static int das08_attach(struct comedi_device *dev, struct comedi_devconfig *it) { @@ -980,7 +987,7 @@ static int das08_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (ret < 0) return ret; - printk("comedi%d: das08: ", dev->minor); + printk(KERN_INFO "comedi%d: das08: ", dev->minor); /* deal with a pci board */ if (thisboard->bustype == pci) { #ifdef CONFIG_COMEDI_PCI @@ -1007,20 +1014,21 @@ static int das08_attach(struct comedi_device *dev, struct comedi_devconfig *it) } } if (!pdev) { - printk("No pci das08 cards found\n"); + printk(KERN_ERR "No pci das08 cards found\n"); return -EIO; } devpriv->pdev = pdev; /* enable PCI device and reserve I/O spaces */ if (comedi_pci_enable(pdev, DRV_NAME)) { - printk - (" Error enabling PCI device and requesting regions\n"); + printk(KERN_ERR " Error enabling PCI device and " + "requesting regions\n"); return -EIO; } /* read base addresses */ pci_iobase = pci_resource_start(pdev, 1); iobase = pci_resource_start(pdev, 2); - printk("pcibase 0x%lx iobase 0x%lx\n", pci_iobase, iobase); + printk(KERN_INFO "pcibase 0x%lx iobase 0x%lx\n", + pci_iobase, iobase); devpriv->pci_iobase = pci_iobase; #if 0 /* We could enable to pci-das08's interrupt here to make it possible @@ -1034,17 +1042,18 @@ static int das08_attach(struct comedi_device *dev, struct comedi_devconfig *it) outw(INTR1_ENABLE | PCI_INTR_ENABLE, pci_iobase + INTCSR); #endif #else /* CONFIG_COMEDI_PCI */ - printk("this driver has not been built with PCI support.\n"); + printk(KERN_ERR "this driver has not been built with PCI support.\n"); return -EINVAL; #endif /* CONFIG_COMEDI_PCI */ } else { iobase = it->options[0]; } - printk("\n"); + printk(KERN_INFO "\n"); return das08_common_attach(dev, iobase); } + int das08_common_detach(struct comedi_device *dev) { printk(KERN_INFO "comedi%d: das08: remove\n", dev->minor); @@ -1060,9 +1069,9 @@ int das08_common_detach(struct comedi_device *dev) #ifdef CONFIG_COMEDI_PCI if (devpriv) { if (devpriv->pdev) { - if (devpriv->pci_iobase) { + if (devpriv->pci_iobase) comedi_pci_disable(devpriv->pdev); - } + pci_dev_put(devpriv->pdev); } } @@ -1070,6 +1079,7 @@ int das08_common_detach(struct comedi_device *dev) return 0; } +EXPORT_SYMBOL_GPL(das08_common_detach); #ifdef CONFIG_COMEDI_PCI COMEDI_PCI_INITCLEANUP(driver_das08, das08_pci_table); @@ -1077,8 +1087,6 @@ COMEDI_PCI_INITCLEANUP(driver_das08, das08_pci_table); COMEDI_INITCLEANUP(driver_das08); #endif -EXPORT_SYMBOL_GPL(das08_common_attach); -EXPORT_SYMBOL_GPL(das08_common_detach); #ifdef CONFIG_COMEDI_PCMCIA EXPORT_SYMBOL_GPL(das08_cs_boards); #endif -- cgit v0.10.2 From 06033fced289985294e5a3f694646014d80b48cc Mon Sep 17 00:00:00 2001 From: Darren Armstrong Date: Sun, 25 Apr 2010 02:49:49 +0100 Subject: Staging: comedi: ssc_dnp: Fixed coding style issues Fixed coding style issues: 80-char width limit, KERN_ facility level Signed-off-by: Darren Armstrong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/ssv_dnp.c b/drivers/staging/comedi/drivers/ssv_dnp.c index 17c92a5..18b0a83 100644 --- a/drivers/staging/comedi/drivers/ssv_dnp.c +++ b/drivers/staging/comedi/drivers/ssv_dnp.c @@ -41,14 +41,14 @@ Status: unknown /* 0..3 remain unchanged! For details about Port C Mode Register see */ /* the remarks in dnp_insn_config() below. */ -#define CSCIR 0x22 /* Chip Setup and Control Index Register */ -#define CSCDR 0x23 /* Chip Setup and Control Data Register */ -#define PAMR 0xa5 /* Port A Mode Register */ -#define PADR 0xa9 /* Port A Data Register */ -#define PBMR 0xa4 /* Port B Mode Register */ -#define PBDR 0xa8 /* Port B Data Register */ -#define PCMR 0xa3 /* Port C Mode Register */ -#define PCDR 0xa7 /* Port C Data Register */ +#define CSCIR 0x22 /* Chip Setup and Control Index Register */ +#define CSCDR 0x23 /* Chip Setup and Control Data Register */ +#define PAMR 0xa5 /* Port A Mode Register */ +#define PADR 0xa9 /* Port A Data Register */ +#define PBMR 0xa4 /* Port B Mode Register */ +#define PBDR 0xa8 /* Port B Data Register */ +#define PCMR 0xa3 /* Port C Mode Register */ +#define PCDR 0xa7 /* Port C Data Register */ /* This data structure holds information about the supported boards -------- */ @@ -59,8 +59,9 @@ struct dnp_board { int have_dio; }; -static const struct dnp_board dnp_boards[] = { /* we only support one DNP 'board' */ - { /* variant at the moment */ +/* We only support one DNP 'board' variant at the moment */ +static const struct dnp_board dnp_boards[] = { +{ .name = "dnp-1486", .ai_chans = 16, .ai_bits = 12, @@ -80,9 +81,9 @@ struct dnp_private_data { #define devpriv ((dnp_private *)dev->private) /* ------------------------------------------------------------------------- */ -/* The struct comedi_driver structure tells the Comedi core module which functions */ -/* to call to configure/deconfigure (attach/detach) the board, and also */ -/* about the kernel module that contains the device code. */ +/* The struct comedi_driver structure tells the Comedi core module which */ +/* functions to call to configure/deconfigure (attach/detach) the board, and */ +/* also about the kernel module that contains the device code. */ /* */ /* In the following section we define the API of this driver. */ /* ------------------------------------------------------------------------- */ @@ -97,7 +98,7 @@ static struct comedi_driver driver_dnp = { .detach = dnp_detach, .board_name = &dnp_boards[0].name, /* only necessary for non-PnP devs */ - .offset = sizeof(struct dnp_board), /* like ISA-PnP, PCI or PCMCIA. */ + .offset = sizeof(struct dnp_board), /* like ISA-PnP, PCI or PCMCIA */ .num_names = ARRAY_SIZE(dnp_boards), }; @@ -122,28 +123,30 @@ static int dnp_attach(struct comedi_device *dev, struct comedi_devconfig *it) struct comedi_subdevice *s; - printk("comedi%d: dnp: ", dev->minor); + printk(KERN_INFO "comedi%d: dnp: ", dev->minor); - /* Autoprobing: this should find out which board we have. Currently only */ - /* the 1486 board is supported and autoprobing is not implemented :-) */ + /* Autoprobing: this should find out which board we have. Currently */ + /* only the 1486 board is supported and autoprobing is not */ + /* implemented :-) */ /* dev->board_ptr = dnp_probe(dev); */ - /* Initialize the name of the board. We can use the "thisboard" macro now. */ + /* Initialize the name of the board. */ + /* We can use the "thisboard" macro now. */ dev->board_name = thisboard->name; - /* Allocate the private structure area. alloc_private() is a convenient */ - /* macro defined in comedidev.h. */ + /* Allocate the private structure area. alloc_private() is a */ + /* convenient macro defined in comedidev.h. */ if (alloc_private(dev, sizeof(struct dnp_private_data)) < 0) return -ENOMEM; - /* Allocate the subdevice structures. alloc_subdevice() is a convenient */ - /* macro defined in comedidev.h. */ + /* Allocate the subdevice structures. alloc_subdevice() is a */ + /* convenient macro defined in comedidev.h. */ if (alloc_subdevices(dev, 1) < 0) return -ENOMEM; s = dev->subdevices + 0; - /* digital i/o subdevice */ + /* digital i/o subdevice */ s->type = COMEDI_SUBD_DIO; s->subdev_flags = SDF_READABLE | SDF_WRITABLE; s->n_chan = 20; @@ -158,7 +161,7 @@ static int dnp_attach(struct comedi_device *dev, struct comedi_devconfig *it) * allocated for the primary 8259, so we don't need to allocate them * ourselves. */ - /* configure all ports as input (default) */ + /* configure all ports as input (default) */ outb(PAMR, CSCIR); outb(0x00, CSCDR); outb(PBMR, CSCIR); @@ -181,7 +184,7 @@ static int dnp_attach(struct comedi_device *dev, struct comedi_devconfig *it) static int dnp_detach(struct comedi_device *dev) { - /* configure all ports as input (default) */ + /* configure all ports as input (default) */ outb(PAMR, CSCIR); outb(0x00, CSCDR); outb(PBMR, CSCIR); @@ -189,8 +192,8 @@ static int dnp_detach(struct comedi_device *dev) outb(PCMR, CSCIR); outb((inb(CSCDR) & 0xAA), CSCDR); - /* announce that we are finished */ - printk("comedi%d: dnp: remove\n", dev->minor); + /* announce that we are finished */ + printk(KERN_INFO "comedi%d: dnp: remove\n", dev->minor); return 0; @@ -210,12 +213,12 @@ static int dnp_dio_insn_bits(struct comedi_device *dev, if (insn->n != 2) return -EINVAL; /* insn uses data[0] and data[1] */ - /* The insn data is a mask in data[0] and the new data in data[1], each */ - /* channel cooresponding to a bit. */ + /* The insn data is a mask in data[0] and the new data in data[1], */ + /* each channel cooresponding to a bit. */ - /* Ports A and B are straight forward: each bit corresponds to an output */ - /* pin with the same order. Port C is different: bits 0...3 correspond to */ - /* bits 4...7 of the output register (PCDR). */ + /* Ports A and B are straight forward: each bit corresponds to an */ + /* output pin with the same order. Port C is different: bits 0...3 */ + /* correspond to bits 4...7 of the output register (PCDR). */ if (data[0]) { @@ -235,7 +238,7 @@ static int dnp_dio_insn_bits(struct comedi_device *dev, | (u8) ((data[1] & 0x0F0000) >> 12), CSCDR); } - /* on return, data[1] contains the value of the digital input lines. */ + /* on return, data[1] contains the value of the digital input lines. */ outb(PADR, CSCIR); data[0] = inb(CSCDR); outb(PBDR, CSCIR); @@ -260,7 +263,8 @@ static int dnp_dio_insn_config(struct comedi_device *dev, u8 register_buffer; - int chan = CR_CHAN(insn->chanspec); /* reduces chanspec to lower 16 bits */ + /* reduces chanspec to lower 16 bits */ + int chan = CR_CHAN(insn->chanspec); switch (data[0]) { case INSN_CONFIG_DIO_OUTPUT: @@ -275,11 +279,11 @@ static int dnp_dio_insn_config(struct comedi_device *dev, return -EINVAL; break; } - /* Test: which port does the channel belong to? */ + /* Test: which port does the channel belong to? */ - /* We have to pay attention with port C: this is the meaning of PCMR: */ - /* Bit in PCMR: 7 6 5 4 3 2 1 0 */ - /* Corresponding port C pin: d 3 d 2 d 1 d 0 d= don't touch */ + /* We have to pay attention with port C: this is the meaning of PCMR: */ + /* Bit in PCMR: 7 6 5 4 3 2 1 0 */ + /* Corresponding port C pin: d 3 d 2 d 1 d 0 d= don't touch */ if ((chan >= 0) && (chan <= 7)) { /* this is port A */ @@ -289,8 +293,8 @@ static int dnp_dio_insn_config(struct comedi_device *dev, chan -= 8; outb(PBMR, CSCIR); } else if ((chan >= 16) && (chan <= 19)) { - /* this is port C; multiplication with 2 brings bits into correct */ - /* position for PCMR! */ + /* this is port C; multiplication with 2 brings bits into */ + /* correct position for PCMR! */ chan -= 16; chan *= 2; outb(PCMR, CSCIR); @@ -298,7 +302,7 @@ static int dnp_dio_insn_config(struct comedi_device *dev, return -EINVAL; } - /* read 'old' direction of the port and set bits (out=1, in=0) */ + /* read 'old' direction of the port and set bits (out=1, in=0) */ register_buffer = inb(CSCDR); if (data[0] == COMEDI_OUTPUT) register_buffer |= (1 << chan); -- cgit v0.10.2 From a2936e0d243d58bbfb3aa048a00ed0bdd2e24307 Mon Sep 17 00:00:00 2001 From: Stewart Robertson Date: Thu, 22 Apr 2010 20:33:48 +0100 Subject: Staging: comedi: add missing KERN_INFO in ni_at_ao.c This is a patch to the ni_at_ao.c file that adds the missing KERN_INFO requested by the checkpatch.pl tool. Signed-off-by: Stewart Robertson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/ni_at_ao.c b/drivers/staging/comedi/drivers/ni_at_ao.c index 3778565..ce60224 100644 --- a/drivers/staging/comedi/drivers/ni_at_ao.c +++ b/drivers/staging/comedi/drivers/ni_at_ao.c @@ -226,7 +226,7 @@ static int atao_attach(struct comedi_device *dev, struct comedi_devconfig *it) iobase = 0x1c0; ao_unipolar = it->options[3]; - printk("comedi%d: ni_at_ao: 0x%04lx", dev->minor, iobase); + printk(KERN_INFO "comedi%d: ni_at_ao: 0x%04lx", dev->minor, iobase); if (!request_region(iobase, ATAO_SIZE, "ni_at_ao")) { printk(" I/O port conflict\n"); @@ -283,14 +283,14 @@ static int atao_attach(struct comedi_device *dev, struct comedi_devconfig *it) atao_reset(dev); - printk("\n"); + printk(KERN_INFO "\n"); return 0; } static int atao_detach(struct comedi_device *dev) { - printk("comedi%d: atao: remove\n", dev->minor); + printk(KERN_INFO "comedi%d: atao: remove\n", dev->minor); if (dev->iobase) release_region(dev->iobase, ATAO_SIZE); -- cgit v0.10.2 From ac4898a0f81d3b3c218cb4d17bac1750ef82e456 Mon Sep 17 00:00:00 2001 From: Zachary Richey Date: Mon, 26 Apr 2010 07:49:37 -0400 Subject: Staging: comedi: fixed coding style issues in drivers.c This patch fixes coding style issues found by checkpatch.pl, and doesnt line break string literals. Signed-off-by: Zachary Richey Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 44d6b62..4b69d06 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -102,7 +102,7 @@ static void __comedi_device_detach(struct comedi_device *dev) if (dev->driver) dev->driver->detach(dev); else - printk("BUG: dev->driver=NULL in comedi_device_detach()\n"); + printk(KERN_WARNING "BUG: dev->driver=NULL in comedi_device_detach()\n"); cleanup_device(dev); } @@ -124,7 +124,7 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it) for (driv = comedi_drivers; driv; driv = driv->next) { if (!try_module_get(driv->module)) { printk - ("comedi: failed to increment module count, skipping\n"); + (KERN_INFO "comedi: failed to increment module count, skipping\n"); continue; } if (driv->num_names) { @@ -139,7 +139,8 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it) continue; } } - /* initialize dev->driver here so comedi_error() can be called from attach */ + /* initialize dev->driver here so + * comedi_error() can be called from attach */ dev->driver = driv; ret = driv->attach(dev, it); if (ret < 0) { @@ -154,7 +155,7 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* report valid board names before returning error */ for (driv = comedi_drivers; driv; driv = driv->next) { if (!try_module_get(driv->module)) { - printk("comedi: failed to increment module count\n"); + printk(KERN_INFO "comedi: failed to increment module count\n"); continue; } comedi_report_boards(driv); @@ -172,7 +173,7 @@ attached: } if (!dev->board_name) { - printk("BUG: dev->board_name=<%p>\n", dev->board_name); + printk(KERN_WARNING "BUG: dev->board_name=<%p>\n", dev->board_name); dev->board_name = "BUG"; } smp_wmb(); @@ -208,7 +209,7 @@ int comedi_driver_unregister(struct comedi_driver *driver) if (dev->attached && dev->driver == driver) { if (dev->use_count) printk - ("BUG! detaching device with use_count=%d\n", + (KERN_WARNING "BUG! detaching device with use_count=%d\n", dev->use_count); comedi_device_detach(dev); } @@ -253,7 +254,7 @@ static int postconfig(struct comedi_device *dev) async = kzalloc(sizeof(struct comedi_async), GFP_KERNEL); if (async == NULL) { - printk("failed to allocate async struct\n"); + printk(KERN_INFO "failed to allocate async struct\n"); return -ENOMEM; } init_waitqueue_head(&async->wait_head); @@ -268,7 +269,7 @@ static int postconfig(struct comedi_device *dev) async->prealloc_buf = NULL; async->prealloc_bufsz = 0; if (comedi_buf_alloc(dev, s, DEFAULT_BUF_SIZE) < 0) { - printk("Buffer allocation failed\n"); + printk(KERN_INFO "Buffer allocation failed\n"); return -ENOMEM; } if (s->buf_change) { @@ -303,7 +304,8 @@ static int postconfig(struct comedi_device *dev) return 0; } -/* generic recognize function for drivers that register their supported board names */ +/* generic recognize function for drivers + * that register their supported board names */ void *comedi_recognize(struct comedi_driver *driv, const char *name) { unsigned i; @@ -324,17 +326,17 @@ void comedi_report_boards(struct comedi_driver *driv) unsigned int i; const char *const *name_ptr; - printk("comedi: valid board names for %s driver are:\n", + printk(KERN_INFO "comedi: valid board names for %s driver are:\n", driv->driver_name); name_ptr = driv->board_name; for (i = 0; i < driv->num_names; i++) { - printk(" %s\n", *name_ptr); + printk(KERN_INFO " %s\n", *name_ptr); name_ptr = (const char **)((char *)name_ptr + driv->offset); } if (driv->num_names == 0) - printk(" %s\n", driv->driver_name); + printk(KERN_INFO " %s\n", driv->driver_name); } static int poll_invalid(struct comedi_device *dev, struct comedi_subdevice *s) @@ -568,7 +570,7 @@ unsigned int comedi_buf_munge(struct comedi_async *async, block_size = num_bytes - count; if (block_size < 0) { - printk("%s: %s: bug! block_size is negative\n", + printk(KERN_WARNING "%s: %s: bug! block_size is negative\n", __FILE__, __func__); break; } @@ -579,7 +581,8 @@ unsigned int comedi_buf_munge(struct comedi_async *async, s->munge(s->device, s, async->prealloc_buf + async->munge_ptr, block_size, async->munge_chan); - smp_wmb(); /* barrier insures data is munged in buffer before munge_count is incremented */ + smp_wmb(); /* barrier insures data is munged in buffer + * before munge_count is incremented */ async->munge_chan += block_size / num_sample_bytes; async->munge_chan %= async->cmd.chanlist_len; @@ -649,7 +652,7 @@ unsigned comedi_buf_write_free(struct comedi_async *async, unsigned int nbytes) if ((int)(async->buf_write_count + nbytes - async->buf_write_alloc_count) > 0) { printk - ("comedi: attempted to write-free more bytes than have been write-allocated.\n"); + (KERN_INFO "comedi: attempted to write-free more bytes than have been write-allocated.\n"); nbytes = async->buf_write_alloc_count - async->buf_write_count; } async->buf_write_count += nbytes; @@ -678,7 +681,8 @@ unsigned comedi_buf_read_alloc(struct comedi_async *async, unsigned nbytes) /* transfers control of a chunk from reader to free buffer space */ unsigned comedi_buf_read_free(struct comedi_async *async, unsigned int nbytes) { - /* barrier insures data has been read out of buffer before read count is incremented */ + /* barrier insures data has been read out of + * buffer before read count is incremented */ smp_mb(); if ((int)(async->buf_read_count + nbytes - async->buf_read_alloc_count) > 0) { -- cgit v0.10.2 From 04607c9e6573451bd994e21699c82190dd9b4530 Mon Sep 17 00:00:00 2001 From: Huang Weiyi Date: Thu, 8 Apr 2010 19:49:45 +0800 Subject: Staging: rtl8192u: remove unused #include Remove unused #include ('s) in drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c Signed-off-by: Huang Weiyi Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c index 750e94e..4d5348e 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c @@ -30,7 +30,6 @@ ******************************************************************************/ #include -#include #include #include #include -- cgit v0.10.2 From b6595dd110a033f9c8fba0d01fd366d95120b997 Mon Sep 17 00:00:00 2001 From: Huang Weiyi Date: Thu, 8 Apr 2010 19:49:36 +0800 Subject: Staging: crystalhd: remove unused #include Remove unused #include ('s) in drivers/staging/crystalhd/crystalhd_lnx.c Signed-off-by: Huang Weiyi Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/crystalhd/crystalhd_lnx.c b/drivers/staging/crystalhd/crystalhd_lnx.c index 6090a1d..141a3e3 100644 --- a/drivers/staging/crystalhd/crystalhd_lnx.c +++ b/drivers/staging/crystalhd/crystalhd_lnx.c @@ -15,7 +15,6 @@ along with this driver. If not, see . ***************************************************************************/ -#include #include #include -- cgit v0.10.2 From 484d3be1bded596a404ac99401652c7728be2f24 Mon Sep 17 00:00:00 2001 From: Gorskin Ilya Date: Sun, 14 Mar 2010 00:35:17 +0500 Subject: Staging: dt3155: fix coding style issue in dt3155_isr.c This is a patch to the dt3155_isr.c file that fixes up a coding style warning and errors found by the checkpatch.pl tool Signed-off-by: Gorskin Ilya Acked-by: Simon Horman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155_isr.c b/drivers/staging/dt3155/dt3155_isr.c index 09d7d9b..1ebcec0 100644 --- a/drivers/staging/dt3155/dt3155_isr.c +++ b/drivers/staging/dt3155/dt3155_isr.c @@ -1,7 +1,7 @@ /* Copyright 1996,2002,2005 Gregory D. Hager, Alfred A. Rizzi, Noah J. Cowan, - Jason Lapenta, Scott Smedley, Greg Sharp + Jason Lapenta, Scott Smedley, Greg Sharp This file is part of the DT3155 Device Driver. @@ -22,7 +22,7 @@ MA 02111-1307 USA File: dt3155_isr.c Purpose: Buffer management routines, and other routines for the ISR - (the actual isr is in dt3155_drv.c) + (the actual isr is in dt3155_drv.c) -- Changes -- @@ -30,16 +30,16 @@ Purpose: Buffer management routines, and other routines for the ISR ------------------------------------------------------------------- 03-Jul-2000 JML n/a 02-Apr-2002 SS Mods to make work with separate allocator - module; Merged John Roll's mods to make work with - multiple boards. + module; Merged John Roll's mods to make work with + multiple boards. 10-Jul-2002 GCS Complete rewrite of setup_buffers to disallow - buffers which span a 4MB boundary. + buffers which span a 4MB boundary. 24-Jul-2002 SS GPL licence. 30-Jul-2002 NJC Added support for buffer loop. 31-Jul-2002 NJC Complete rewrite of buffer management 02-Aug-2002 NJC Including slab.h instead of malloc.h (no warning). - Also, allocator_init() now returns allocator_max - so cleaned up allocate_buffers() accordingly. + Also, allocator_init() now returns allocator_max + so cleaned up allocate_buffers() accordingly. 08-Aug-2005 SS port to 2.6 kernel. */ @@ -77,9 +77,9 @@ struct dt3155_fbuffer_s *dt3155_fbuffer[MAXBOARDS] = {NULL * are_empty_buffers * m is minor # of device ***************************/ -inline bool are_empty_buffers( int m ) +inline bool are_empty_buffers(int m) { - return ( dt3155_fbuffer[ m ]->empty_len ); + return dt3155_fbuffer[m]->empty_len; } /************************** @@ -92,56 +92,56 @@ inline bool are_empty_buffers( int m ) * given by dt3155_fbuffer[m]->empty_buffers[0]. * empty_buffers should never fill up, though this is not checked. **************************/ -inline void push_empty( int index, int m ) +inline void push_empty(int index, int m) { - dt3155_fbuffer[m]->empty_buffers[ dt3155_fbuffer[m]->empty_len ] = index; + dt3155_fbuffer[m]->empty_buffers[dt3155_fbuffer[m]->empty_len] = index; dt3155_fbuffer[m]->empty_len++; } /************************** - * pop_empty( m ) + * pop_empty(m) * m is minor # of device **************************/ -inline int pop_empty( int m ) +inline int pop_empty(int m) { dt3155_fbuffer[m]->empty_len--; - return dt3155_fbuffer[m]->empty_buffers[ dt3155_fbuffer[m]->empty_len ]; + return dt3155_fbuffer[m]->empty_buffers[dt3155_fbuffer[m]->empty_len]; } /************************* - * is_ready_buf_empty( m ) + * is_ready_buf_empty(m) * m is minor # of device *************************/ -inline bool is_ready_buf_empty( int m ) +inline bool is_ready_buf_empty(int m) { - return ((dt3155_fbuffer[ m ]->ready_len) == 0); + return ((dt3155_fbuffer[m]->ready_len) == 0); } /************************* - * is_ready_buf_full( m ) + * is_ready_buf_full(m) * m is minor # of device * this should *never* be true if there are any active, locked or empty * buffers, since it corresponds to nbuffers ready buffers!! * 7/31/02: total rewrite. --NJC *************************/ -inline bool is_ready_buf_full( int m ) +inline bool is_ready_buf_full(int m) { - return ( dt3155_fbuffer[ m ]->ready_len == dt3155_fbuffer[ m ]->nbuffers ); + return dt3155_fbuffer[m]->ready_len == dt3155_fbuffer[m]->nbuffers; } /***************************************************** - * push_ready( m, buffer ) + * push_ready(m, buffer) * m is minor # of device * *****************************************************/ -inline void push_ready( int m, int index ) +inline void push_ready(int m, int index) { int head = dt3155_fbuffer[m]->ready_head; - dt3155_fbuffer[ m ]->ready_que[ head ] = index; - dt3155_fbuffer[ m ]->ready_head = ( (head + 1) % - (dt3155_fbuffer[ m ]->nbuffers) ); - dt3155_fbuffer[ m ]->ready_len++; + dt3155_fbuffer[m]->ready_que[head] = index; + dt3155_fbuffer[m]->ready_head = ((head + 1) % + (dt3155_fbuffer[m]->nbuffers)); + dt3155_fbuffer[m]->ready_len++; } @@ -151,12 +151,12 @@ inline void push_ready( int m, int index ) * * Simply comptutes the tail given the head and the length. *****************************************************/ -static inline int get_tail( int m ) +static inline int get_tail(int m) { - return ((dt3155_fbuffer[ m ]->ready_head - - dt3155_fbuffer[ m ]->ready_len + - dt3155_fbuffer[ m ]->nbuffers)% - (dt3155_fbuffer[ m ]->nbuffers)); + return (dt3155_fbuffer[m]->ready_head - + dt3155_fbuffer[m]->ready_len + + dt3155_fbuffer[m]->nbuffers)% + (dt3155_fbuffer[m]->nbuffers); } @@ -168,12 +168,12 @@ static inline int get_tail( int m ) * This assumes that there is a ready buffer ready... should * be checked (e.g. with is_ready_buf_empty() prior to call. *****************************************************/ -inline int pop_ready( int m ) +inline int pop_ready(int m) { int tail; tail = get_tail(m); - dt3155_fbuffer[ m ]->ready_len--; - return dt3155_fbuffer[ m ]->ready_que[ tail ]; + dt3155_fbuffer[m]->ready_len--; + return dt3155_fbuffer[m]->ready_que[tail]; } @@ -181,35 +181,33 @@ inline int pop_ready( int m ) * printques * m is minor # of device *****************************************************/ -inline void printques( int m ) +inline void printques(int m) { - int head = dt3155_fbuffer[ m ]->ready_head; + int head = dt3155_fbuffer[m]->ready_head; int tail; - int num = dt3155_fbuffer[ m ]->nbuffers; + int num = dt3155_fbuffer[m]->nbuffers; int frame_index; int index; tail = get_tail(m); printk("\n R:"); - for ( index = tail; index != head; index++, index = index % (num) ) - { - frame_index = dt3155_fbuffer[ m ]->ready_que[ index ]; - printk(" %d ", frame_index ); + for (index = tail; index != head; index++, index = index % (num)) { + frame_index = dt3155_fbuffer[m]->ready_que[index]; + printk(" %d ", frame_index); } printk("\n E:"); - for ( index = 0; index < dt3155_fbuffer[ m ]->empty_len; index++ ) - { - frame_index = dt3155_fbuffer[ m ]->empty_buffers[ index ]; - printk(" %d ", frame_index ); + for (index = 0; index < dt3155_fbuffer[m]->empty_len; index++) { + frame_index = dt3155_fbuffer[m]->empty_buffers[index]; + printk(" %d ", frame_index); } - frame_index = dt3155_fbuffer[ m ]->active_buf; + frame_index = dt3155_fbuffer[m]->active_buf; printk("\n A: %d", frame_index); - frame_index = dt3155_fbuffer[ m ]->locked_buf; - printk("\n L: %d \n", frame_index ); + frame_index = dt3155_fbuffer[m]->locked_buf; + printk("\n L: %d\n", frame_index); } @@ -220,11 +218,12 @@ inline void printques( int m ) * the start address up to the beginning of the * next 4MB chunk (assuming bufsize < 4MB). *****************************************************/ -u32 adjust_4MB (u32 buf_addr, u32 bufsize) { - if (((buf_addr+bufsize) & UPPER_10_BITS) != (buf_addr & UPPER_10_BITS)) - return (buf_addr+bufsize) & UPPER_10_BITS; - else - return buf_addr; +u32 adjust_4MB(u32 buf_addr, u32 bufsize) +{ + if (((buf_addr+bufsize) & UPPER_10_BITS) != (buf_addr & UPPER_10_BITS)) + return (buf_addr+bufsize) & UPPER_10_BITS; + else + return buf_addr; } @@ -235,7 +234,7 @@ u32 adjust_4MB (u32 buf_addr, u32 bufsize) { * buffers. If there is not enough free space * try for less memory. *****************************************************/ -void allocate_buffers (u32 *buf_addr, u32* total_size_kbs, +void allocate_buffers(u32 *buf_addr, u32* total_size_kbs, u32 bufsize) { /* Compute the minimum amount of memory guaranteed to hold all @@ -268,15 +267,15 @@ void allocate_buffers (u32 *buf_addr, u32* total_size_kbs, printk("DT3155: ...but need at least: %d KB\n", min_size_kbs); printk("DT3155: ...the allocator has: %d KB\n", allocator_max); size_kbs = (full_size_kbs <= allocator_max ? full_size_kbs : allocator_max); - if (size_kbs > min_size_kbs) { - if ((*buf_addr = allocator_allocate_dma (size_kbs, GFP_KERNEL)) != 0) { - printk("DT3155: Managed to allocate: %d KB\n", size_kbs); - *total_size_kbs = size_kbs; - return; + if (size_kbs > min_size_kbs) { + if ((*buf_addr = allocator_allocate_dma(size_kbs, GFP_KERNEL)) != 0) { + printk("DT3155: Managed to allocate: %d KB\n", size_kbs); + *total_size_kbs = size_kbs; + return; + } } - } /* If we got here, the allocation failed */ - printk ("DT3155: Allocator failed!\n"); + printk("DT3155: Allocator failed!\n"); *buf_addr = 0; *total_size_kbs = 0; return; @@ -312,28 +311,26 @@ u32 dt3155_setup_buffers(u32 *allocatorAddr) int m; /* minor # of device, looped for all devs */ /* zero the fbuffer status and address structure */ - for ( m = 0; m < ndevices; m++) - { - dt3155_fbuffer[ m ] = &(dt3155_status[ m ].fbuffer); + for (m = 0; m < ndevices; m++) { + dt3155_fbuffer[m] = &(dt3155_status[m].fbuffer); /* Make sure the buffering variables are consistent */ { - u8 *ptr = (u8 *) dt3155_fbuffer[ m ]; - for( index = 0; index < sizeof(struct dt3155_fbuffer_s); index++) - *(ptr++)=0; + u8 *ptr = (u8 *) dt3155_fbuffer[m]; + for (index = 0; index < sizeof(struct dt3155_fbuffer_s); index++) + *(ptr++) = 0; } } /* allocate a large contiguous chunk of RAM */ - allocate_buffers (&rambuff_addr, &rambuff_size, bufsize); + allocate_buffers(&rambuff_addr, &rambuff_size, bufsize); printk("DT3155: mem info\n"); - printk(" - rambuf_addr = 0x%x \n", rambuff_addr); - printk(" - length (kb) = %u \n", rambuff_size); - if( rambuff_addr == 0 ) - { - printk( KERN_INFO - "DT3155: Error setup_buffers() allocator dma failed \n" ); - return -ENOMEM; + printk(" - rambuf_addr = 0x%x\n", rambuff_addr); + printk(" - length (kb) = %u\n", rambuff_size); + if (rambuff_addr == 0) { + printk(KERN_INFO + "DT3155: Error setup_buffers() allocator dma failed\n"); + return -ENOMEM; } *allocatorAddr = rambuff_addr; rambuff_end = rambuff_addr + 1024 * rambuff_size; @@ -341,70 +338,68 @@ u32 dt3155_setup_buffers(u32 *allocatorAddr) /* after allocation, we need to count how many useful buffers there are so we can give an equal number to each device */ rambuff_acm = rambuff_addr; - for ( index = 0; index < MAXBUFFERS; index++) { - rambuff_acm = adjust_4MB (rambuff_acm, bufsize);/*avoid spanning 4MB bdry*/ - if (rambuff_acm + bufsize > rambuff_end) - break; - rambuff_acm += bufsize; - } + for (index = 0; index < MAXBUFFERS; index++) { + rambuff_acm = adjust_4MB(rambuff_acm, bufsize);/*avoid spanning 4MB bdry*/ + if (rambuff_acm + bufsize > rambuff_end) + break; + rambuff_acm += bufsize; + } /* Following line is OK, will waste buffers if index * not evenly divisible by ndevices -NJC*/ numbufs = index / ndevices; printk(" - numbufs = %u\n", numbufs); - if (numbufs < 2) { - printk( KERN_INFO - "DT3155: Error setup_buffers() couldn't allocate 2 bufs/board\n" ); - return -ENOMEM; - } + if (numbufs < 2) { + printk(KERN_INFO + "DT3155: Error setup_buffers() couldn't allocate 2 bufs/board\n"); + return -ENOMEM; + } /* now that we have board memory we spit it up */ /* between the boards and the buffers */ - rambuff_acm = rambuff_addr; - for ( m = 0; m < ndevices; m ++) - { - rambuff_acm = adjust_4MB (rambuff_acm, bufsize); - - /* Save the start of this boards buffer space (for mmap). */ - dt3155_status[ m ].mem_addr = rambuff_acm; - - for (index = 0; index < numbufs; index++) - { - rambuff_acm = adjust_4MB (rambuff_acm, bufsize); - if (rambuff_acm + bufsize > rambuff_end) { - /* Should never happen */ - printk ("DT3155 PROGRAM ERROR (GCS)\n" - "Error distributing allocated buffers\n"); - return -ENOMEM; - } - - dt3155_fbuffer[ m ]->frame_info[ index ].addr = rambuff_acm; - push_empty( index, m ); - /* printk(" - Buffer : %lx\n", - * dt3155_fbuffer[ m ]->frame_info[ index ].addr ); - */ - dt3155_fbuffer[ m ]->nbuffers += 1; - rambuff_acm += bufsize; + rambuff_acm = rambuff_addr; + for (m = 0; m < ndevices; m++) { + rambuff_acm = adjust_4MB(rambuff_acm, bufsize); + + /* Save the start of this boards buffer space (for mmap). */ + dt3155_status[m].mem_addr = rambuff_acm; + + for (index = 0; index < numbufs; index++) { + rambuff_acm = adjust_4MB(rambuff_acm, bufsize); + if (rambuff_acm + bufsize > rambuff_end) { + /* Should never happen */ + printk("DT3155 PROGRAM ERROR (GCS)\n" + "Error distributing allocated buffers\n"); + return -ENOMEM; + } + + dt3155_fbuffer[m]->frame_info[index].addr = rambuff_acm; + push_empty(index, m); + /* printk(" - Buffer : %lx\n", + * dt3155_fbuffer[m]->frame_info[index].addr); + */ + dt3155_fbuffer[m]->nbuffers += 1; + rambuff_acm += bufsize; } - /* Make sure there is an active buffer there. */ - dt3155_fbuffer[ m ]->active_buf = pop_empty( m ); - dt3155_fbuffer[ m ]->even_happened = 0; - dt3155_fbuffer[ m ]->even_stopped = 0; + /* Make sure there is an active buffer there. */ + dt3155_fbuffer[m]->active_buf = pop_empty(m); + dt3155_fbuffer[m]->even_happened = 0; + dt3155_fbuffer[m]->even_stopped = 0; - /* make sure there is no locked_buf JML 2/28/00 */ - dt3155_fbuffer[ m ]->locked_buf = -1; + /* make sure there is no locked_buf JML 2/28/00 */ + dt3155_fbuffer[m]->locked_buf = -1; - dt3155_status[ m ].mem_size = - rambuff_acm - dt3155_status[ m ].mem_addr; + dt3155_status[m].mem_size = + rambuff_acm - dt3155_status[m].mem_addr; - /* setup the ready queue */ - dt3155_fbuffer[ m ]->ready_head = 0; - dt3155_fbuffer[ m ]->ready_len = 0; - printk("Available buffers for device %d: %d\n", - m, dt3155_fbuffer[ m ]->nbuffers); + /* setup the ready queue */ + dt3155_fbuffer[m]->ready_head = 0; + dt3155_fbuffer[m]->ready_len = 0; + printk("Available buffers for device %d: %d\n", + m, dt3155_fbuffer[m]->nbuffers); } - return 1; + return 1; } /***************************************************** @@ -415,13 +410,12 @@ u32 dt3155_setup_buffers(u32 *allocatorAddr) * * m is minor number of device *****************************************************/ -static inline void internal_release_locked_buffer( int m ) +static inline void internal_release_locked_buffer(int m) { /* Pointer into global structure for handling buffers */ - if ( dt3155_fbuffer[ m ]->locked_buf >= 0 ) - { - push_empty( dt3155_fbuffer[ m ]->locked_buf, m ); - dt3155_fbuffer[ m ]->locked_buf = -1; + if (dt3155_fbuffer[m]->locked_buf >= 0) { + push_empty(dt3155_fbuffer[m]->locked_buf, m); + dt3155_fbuffer[m]->locked_buf = -1; } } @@ -433,7 +427,7 @@ static inline void internal_release_locked_buffer( int m ) * The user function of the above. * *****************************************************/ -inline void dt3155_release_locked_buffer( int m ) +inline void dt3155_release_locked_buffer(int m) { unsigned long int flags; local_save_flags(flags); @@ -448,28 +442,28 @@ inline void dt3155_release_locked_buffer( int m ) * m is minor # of device * *****************************************************/ -inline int dt3155_flush( int m ) +inline int dt3155_flush(int m) { int index; unsigned long int flags; local_save_flags(flags); local_irq_disable(); - internal_release_locked_buffer( m ); - dt3155_fbuffer[ m ]->empty_len = 0; + internal_release_locked_buffer(m); + dt3155_fbuffer[m]->empty_len = 0; - for ( index = 0; index < dt3155_fbuffer[ m ]->nbuffers; index++ ) - push_empty( index, m ); + for (index = 0; index < dt3155_fbuffer[m]->nbuffers; index++) + push_empty(index, m); /* Make sure there is an active buffer there. */ - dt3155_fbuffer[ m ]->active_buf = pop_empty( m ); + dt3155_fbuffer[m]->active_buf = pop_empty(m); - dt3155_fbuffer[ m ]->even_happened = 0; - dt3155_fbuffer[ m ]->even_stopped = 0; + dt3155_fbuffer[m]->even_happened = 0; + dt3155_fbuffer[m]->even_stopped = 0; /* setup the ready queue */ - dt3155_fbuffer[ m ]->ready_head = 0; - dt3155_fbuffer[ m ]->ready_len = 0; + dt3155_fbuffer[m]->ready_head = 0; + dt3155_fbuffer[m]->ready_len = 0; local_irq_restore(flags); @@ -485,7 +479,7 @@ inline int dt3155_flush( int m ) * If the user has a buffer locked it will unlock * that buffer before returning the new one. *****************************************************/ -inline int dt3155_get_ready_buffer( int m ) +inline int dt3155_get_ready_buffer(int m) { int frame_index; unsigned long int flags; @@ -493,21 +487,20 @@ inline int dt3155_get_ready_buffer( int m ) local_irq_disable(); #ifdef DEBUG_QUES_A - printques( m ); + printques(m); #endif - internal_release_locked_buffer( m ); + internal_release_locked_buffer(m); - if (is_ready_buf_empty( m )) - frame_index = -1; - else - { - frame_index = pop_ready( m ); - dt3155_fbuffer[ m ]->locked_buf = frame_index; + if (is_ready_buf_empty(m)) + frame_index = -1; + else { + frame_index = pop_ready(m); + dt3155_fbuffer[m]->locked_buf = frame_index; } #ifdef DEBUG_QUES_B - printques( m ); + printques(m); #endif local_irq_restore(flags); -- cgit v0.10.2 From d241fd58e407cd3943cabd61217a0ae32c795c1d Mon Sep 17 00:00:00 2001 From: Jason Baldus Date: Sun, 28 Mar 2010 09:59:37 -0400 Subject: Staging: dt3155: fix parentheses and bracket spacing style issues This is a patch to the dt3155_drv.c file that removes spaces after open parentheses and brackets and before close parentheses and brackets. Signed-off-by: Jason Baldus Reviewed-by: Simon Horman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155_drv.c b/drivers/staging/dt3155/dt3155_drv.c index 7e6095f..91ebfad 100644 --- a/drivers/staging/dt3155/dt3155_drv.c +++ b/drivers/staging/dt3155/dt3155_drv.c @@ -95,7 +95,7 @@ int dt3155_errno = 0; #endif /* wait queue for interrupts */ -wait_queue_head_t dt3155_read_wait_queue[ MAXBOARDS ]; +wait_queue_head_t dt3155_read_wait_queue[MAXBOARDS]; #define DT_3155_SUCCESS 0 #define DT_3155_FAILURE -EIO @@ -112,10 +112,10 @@ int dt3155_major = 0; /* Global structures and variables */ /* Status of each device */ -struct dt3155_status_s dt3155_status[ MAXBOARDS ]; +struct dt3155_status_s dt3155_status[MAXBOARDS]; /* kernel logical address of the board */ -u8 *dt3155_lbase[ MAXBOARDS ] = { NULL +u8 *dt3155_lbase[MAXBOARDS] = { NULL #if MAXBOARDS == 2 , NULL #endif @@ -123,7 +123,7 @@ u8 *dt3155_lbase[ MAXBOARDS ] = { NULL /* DT3155 registers */ u8 *dt3155_bbase = NULL; /* kernel logical address of the * * buffer region */ -u32 dt3155_dev_open[ MAXBOARDS ] = {0 +u32 dt3155_dev_open[MAXBOARDS] = {0 #if MAXBOARDS == 2 , 0 #endif @@ -142,17 +142,17 @@ static void quick_stop (int minor) { // TODO: scott was here #if 1 - ReadMReg((dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg); + ReadMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg); /* disable interrupts */ int_csr_r.fld.FLD_END_EVE_EN = 0; int_csr_r.fld.FLD_END_ODD_EN = 0; - WriteMReg((dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg ); + WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg); - dt3155_status[ minor ].state &= ~(DT3155_STATE_STOP|0xff); + dt3155_status[minor].state &= ~(DT3155_STATE_STOP|0xff); /* mark the system stopped: */ - dt3155_status[ minor ].state |= DT3155_STATE_IDLE; - dt3155_fbuffer[ minor ]->stop_acquire = 0; - dt3155_fbuffer[ minor ]->even_stopped = 0; + dt3155_status[minor].state |= DT3155_STATE_IDLE; + dt3155_fbuffer[minor]->stop_acquire = 0; + dt3155_fbuffer[minor]->even_stopped = 0; #else dt3155_status[minor].state |= DT3155_STATE_STOP; dt3155_status[minor].fbuffer.stop_acquire = 1; @@ -168,7 +168,7 @@ static void quick_stop (int minor) * - Assumes irq's are disabled, via SA_INTERRUPT flag * being set in request_irq() call from init_module() *****************************************************/ -static inline void dt3155_isr( int irq, void *dev_id, struct pt_regs *regs ) +static inline void dt3155_isr(int irq, void *dev_id, struct pt_regs *regs) { int minor = -1; int index; @@ -176,8 +176,8 @@ static inline void dt3155_isr( int irq, void *dev_id, struct pt_regs *regs ) u32 buffer_addr; /* find out who issued the interrupt */ - for ( index = 0; index < ndevices; index++ ) { - if( dev_id == (void*) &dt3155_status[ index ]) + for (index = 0; index < ndevices; index++) { + if(dev_id == (void*) &dt3155_status[index]) { minor = index; break; @@ -185,15 +185,15 @@ static inline void dt3155_isr( int irq, void *dev_id, struct pt_regs *regs ) } /* hopefully we should not get here */ - if ( minor < 0 || minor >= MAXBOARDS ) { + if (minor < 0 || minor >= MAXBOARDS) { printk(KERN_ERR "dt3155_isr called with invalid dev_id\n"); return; } /* Check for corruption and set a flag if so */ - ReadMReg( (dt3155_lbase[ minor ] + CSR1), csr1_r.reg ); + ReadMReg((dt3155_lbase[minor] + CSR1), csr1_r.reg); - if ( (csr1_r.fld.FLD_CRPT_EVE) || (csr1_r.fld.FLD_CRPT_ODD) ) + if ((csr1_r.fld.FLD_CRPT_EVE) || (csr1_r.fld.FLD_CRPT_ODD)) { /* TODO: this should probably stop acquisition */ /* and set some flags so that dt3155_read */ @@ -203,27 +203,27 @@ static inline void dt3155_isr( int irq, void *dev_id, struct pt_regs *regs ) return; } - ReadMReg((dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg); + ReadMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg); /* Handle the even field ... */ if (int_csr_r.fld.FLD_END_EVE) { - if ( (dt3155_status[ minor ].state & DT3155_STATE_MODE) == - DT3155_STATE_FLD ) + if ((dt3155_status[minor].state & DT3155_STATE_MODE) == + DT3155_STATE_FLD) { - dt3155_fbuffer[ minor ]->frame_count++; + dt3155_fbuffer[minor]->frame_count++; } - ReadI2C(dt3155_lbase[ minor ], EVEN_CSR, &i2c_even_csr.reg); + ReadI2C(dt3155_lbase[minor], EVEN_CSR, &i2c_even_csr.reg); /* Clear the interrupt? */ int_csr_r.fld.FLD_END_EVE = 1; /* disable the interrupt if last field */ - if (dt3155_fbuffer[ minor ]->stop_acquire) + if (dt3155_fbuffer[minor]->stop_acquire) { printk("dt3155: even stopped.\n"); - dt3155_fbuffer[ minor ]->even_stopped = 1; + dt3155_fbuffer[minor]->even_stopped = 1; if (i2c_even_csr.fld.SNGL_EVE) { int_csr_r.fld.FLD_END_EVE_EN = 0; @@ -234,75 +234,75 @@ static inline void dt3155_isr( int irq, void *dev_id, struct pt_regs *regs ) } } - WriteMReg( (dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg ); + WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg); /* Set up next DMA if we are doing FIELDS */ - if ( (dt3155_status[ minor ].state & DT3155_STATE_MODE ) == + if ((dt3155_status[minor].state & DT3155_STATE_MODE) == DT3155_STATE_FLD) { /* GCS (Aug 2, 2002) -- In field mode, dma the odd field into the lower half of the buffer */ - const u32 stride = dt3155_status[ minor ].config.cols; - buffer_addr = dt3155_fbuffer[ minor ]-> - frame_info[ dt3155_fbuffer[ minor ]->active_buf ].addr + const u32 stride = dt3155_status[minor].config.cols; + buffer_addr = dt3155_fbuffer[minor]-> + frame_info[dt3155_fbuffer[minor]->active_buf].addr + (DT3155_MAX_ROWS / 2) * stride; local_save_flags(flags); local_irq_disable(); - wake_up_interruptible( &dt3155_read_wait_queue[ minor ] ); + wake_up_interruptible(&dt3155_read_wait_queue[minor]); /* Set up the DMA address for the next field */ local_irq_restore(flags); - WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_START), buffer_addr); + WriteMReg((dt3155_lbase[minor] + ODD_DMA_START), buffer_addr); } /* Check for errors. */ i2c_even_csr.fld.DONE_EVE = 1; - if ( i2c_even_csr.fld.ERROR_EVE ) + if (i2c_even_csr.fld.ERROR_EVE) dt3155_errno = DT_ERR_OVERRUN; - WriteI2C( dt3155_lbase[ minor ], EVEN_CSR, i2c_even_csr.reg ); + WriteI2C(dt3155_lbase[minor], EVEN_CSR, i2c_even_csr.reg); /* Note that we actually saw an even field meaning */ /* that subsequent odd field complete the frame */ - dt3155_fbuffer[ minor ]->even_happened = 1; + dt3155_fbuffer[minor]->even_happened = 1; /* recording the time that the even field finished, this should be */ /* about time in the middle of the frame */ - do_gettimeofday( &(dt3155_fbuffer[ minor ]-> - frame_info[ dt3155_fbuffer[ minor ]-> - active_buf ].time) ); + do_gettimeofday(&(dt3155_fbuffer[minor]-> + frame_info[dt3155_fbuffer[minor]-> + active_buf].time)); return; } /* ... now handle the odd field */ - if ( int_csr_r.fld.FLD_END_ODD ) + if (int_csr_r.fld.FLD_END_ODD) { - ReadI2C( dt3155_lbase[ minor ], ODD_CSR, &i2c_odd_csr.reg ); + ReadI2C(dt3155_lbase[minor], ODD_CSR, &i2c_odd_csr.reg); /* Clear the interrupt? */ int_csr_r.fld.FLD_END_ODD = 1; - if (dt3155_fbuffer[ minor ]->even_happened || - (dt3155_status[ minor ].state & DT3155_STATE_MODE) == + if (dt3155_fbuffer[minor]->even_happened || + (dt3155_status[minor].state & DT3155_STATE_MODE) == DT3155_STATE_FLD) { - dt3155_fbuffer[ minor ]->frame_count++; + dt3155_fbuffer[minor]->frame_count++; } - if ( dt3155_fbuffer[ minor ]->stop_acquire && - dt3155_fbuffer[ minor ]->even_stopped ) + if (dt3155_fbuffer[minor]->stop_acquire && + dt3155_fbuffer[minor]->even_stopped) { printk(KERN_DEBUG "dt3155: stopping odd..\n"); - if ( i2c_odd_csr.fld.SNGL_ODD ) + if (i2c_odd_csr.fld.SNGL_ODD) { /* disable interrupts */ int_csr_r.fld.FLD_END_ODD_EN = 0; - dt3155_status[ minor ].state &= ~(DT3155_STATE_STOP|0xff); + dt3155_status[minor].state &= ~(DT3155_STATE_STOP|0xff); /* mark the system stopped: */ - dt3155_status[ minor ].state |= DT3155_STATE_IDLE; - dt3155_fbuffer[ minor ]->stop_acquire = 0; - dt3155_fbuffer[ minor ]->even_stopped = 0; + dt3155_status[minor].state |= DT3155_STATE_IDLE; + dt3155_fbuffer[minor]->stop_acquire = 0; + dt3155_fbuffer[minor]->even_stopped = 0; printk(KERN_DEBUG "dt3155: state is now %x\n", dt3155_status[minor].state); @@ -313,104 +313,104 @@ static inline void dt3155_isr( int irq, void *dev_id, struct pt_regs *regs ) } } - WriteMReg( (dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg ); + WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg); /* if the odd field has been acquired, then */ /* change the next dma location for both fields */ /* and wake up the process if sleeping */ - if ( dt3155_fbuffer[ minor ]->even_happened || - (dt3155_status[ minor ].state & DT3155_STATE_MODE) == - DT3155_STATE_FLD ) + if (dt3155_fbuffer[minor]->even_happened || + (dt3155_status[minor].state & DT3155_STATE_MODE) == + DT3155_STATE_FLD) { local_save_flags(flags); local_irq_disable(); #ifdef DEBUG_QUES_B - printques( minor ); + printques(minor); #endif - if ( dt3155_fbuffer[ minor ]->nbuffers > 2 ) + if (dt3155_fbuffer[minor]->nbuffers > 2) { - if ( !are_empty_buffers( minor ) ) + if (!are_empty_buffers(minor)) { /* The number of active + locked buffers is * at most 2, and since there are none empty, there * must be at least nbuffers-2 ready buffers. * This is where we 'drop frames', oldest first. */ - push_empty( pop_ready( minor ), minor ); + push_empty(pop_ready(minor), minor); } /* The ready_que can't be full, since we know * there is one active buffer right now, so it's safe * to push the active buf on the ready_que. */ - push_ready( minor, dt3155_fbuffer[ minor ]->active_buf ); + push_ready(minor, dt3155_fbuffer[minor]->active_buf); /* There's at least 1 empty -- make it active */ - dt3155_fbuffer[ minor ]->active_buf = pop_empty( minor ); - dt3155_fbuffer[ minor ]-> - frame_info[ dt3155_fbuffer[ minor ]-> - active_buf ].tag = ++unique_tag; + dt3155_fbuffer[minor]->active_buf = pop_empty(minor); + dt3155_fbuffer[minor]-> + frame_info[dt3155_fbuffer[minor]-> + active_buf].tag = ++unique_tag; } else /* nbuffers == 2, special case */ { /* There is 1 active buffer. * If there is a locked buffer, keep the active buffer * the same -- that means we drop a frame. */ - if ( dt3155_fbuffer[ minor ]->locked_buf < 0 ) + if (dt3155_fbuffer[minor]->locked_buf < 0) { - push_ready( minor, - dt3155_fbuffer[ minor ]->active_buf ); - if (are_empty_buffers( minor ) ) + push_ready(minor, + dt3155_fbuffer[minor]->active_buf); + if (are_empty_buffers(minor)) { - dt3155_fbuffer[ minor ]->active_buf = - pop_empty( minor ); + dt3155_fbuffer[minor]->active_buf = + pop_empty(minor); } else { /* no empty or locked buffers, so use a readybuf */ - dt3155_fbuffer[ minor ]->active_buf = - pop_ready( minor ); + dt3155_fbuffer[minor]->active_buf = + pop_ready(minor); } } } #ifdef DEBUG_QUES_B - printques( minor ); + printques(minor); #endif - dt3155_fbuffer[ minor ]->even_happened = 0; + dt3155_fbuffer[minor]->even_happened = 0; - wake_up_interruptible( &dt3155_read_wait_queue[ minor ] ); + wake_up_interruptible(&dt3155_read_wait_queue[minor]); local_irq_restore(flags); } /* Set up the DMA address for the next frame/field */ - buffer_addr = dt3155_fbuffer[ minor ]-> - frame_info[ dt3155_fbuffer[ minor ]->active_buf ].addr; - if ( (dt3155_status[ minor ].state & DT3155_STATE_MODE) == - DT3155_STATE_FLD ) + buffer_addr = dt3155_fbuffer[minor]-> + frame_info[dt3155_fbuffer[minor]->active_buf].addr; + if ((dt3155_status[minor].state & DT3155_STATE_MODE) == + DT3155_STATE_FLD) { - WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_START), buffer_addr); + WriteMReg((dt3155_lbase[minor] + EVEN_DMA_START), buffer_addr); } else { - WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_START), buffer_addr); + WriteMReg((dt3155_lbase[minor] + EVEN_DMA_START), buffer_addr); - WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_START), buffer_addr - + dt3155_status[ minor ].config.cols); + WriteMReg((dt3155_lbase[minor] + ODD_DMA_START), buffer_addr + + dt3155_status[minor].config.cols); } /* Do error checking */ i2c_odd_csr.fld.DONE_ODD = 1; - if ( i2c_odd_csr.fld.ERROR_ODD ) + if (i2c_odd_csr.fld.ERROR_ODD) dt3155_errno = DT_ERR_OVERRUN; - WriteI2C(dt3155_lbase[ minor ], ODD_CSR, i2c_odd_csr.reg ); + WriteI2C(dt3155_lbase[minor], ODD_CSR, i2c_odd_csr.reg); return; } /* If we get here, the Odd Field wasn't it either... */ - printk( "neither even nor odd. shared perhaps?\n"); + printk("neither even nor odd. shared perhaps?\n"); } /***************************************************** @@ -421,22 +421,22 @@ static inline void dt3155_isr( int irq, void *dev_id, struct pt_regs *regs ) *****************************************************/ static void dt3155_init_isr(int minor) { - const u32 stride = dt3155_status[ minor ].config.cols; + const u32 stride = dt3155_status[minor].config.cols; - switch (dt3155_status[ minor ].state & DT3155_STATE_MODE) + switch (dt3155_status[minor].state & DT3155_STATE_MODE) { case DT3155_STATE_FLD: { - even_dma_start_r = dt3155_status[ minor ]. - fbuffer.frame_info[ dt3155_status[ minor ].fbuffer.active_buf ].addr; + even_dma_start_r = dt3155_status[minor]. + fbuffer.frame_info[dt3155_status[minor].fbuffer.active_buf].addr; even_dma_stride_r = 0; odd_dma_stride_r = 0; - WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_START), + WriteMReg((dt3155_lbase[minor] + EVEN_DMA_START), even_dma_start_r); - WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_STRIDE), + WriteMReg((dt3155_lbase[minor] + EVEN_DMA_STRIDE), even_dma_stride_r); - WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_STRIDE), + WriteMReg((dt3155_lbase[minor] + ODD_DMA_STRIDE), odd_dma_stride_r); break; } @@ -444,19 +444,19 @@ static void dt3155_init_isr(int minor) case DT3155_STATE_FRAME: default: { - even_dma_start_r = dt3155_status[ minor ]. - fbuffer.frame_info[ dt3155_status[ minor ].fbuffer.active_buf ].addr; + even_dma_start_r = dt3155_status[minor]. + fbuffer.frame_info[dt3155_status[minor].fbuffer.active_buf].addr; odd_dma_start_r = even_dma_start_r + stride; even_dma_stride_r = stride; odd_dma_stride_r = stride; - WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_START), + WriteMReg((dt3155_lbase[minor] + EVEN_DMA_START), even_dma_start_r); - WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_START), + WriteMReg((dt3155_lbase[minor] + ODD_DMA_START), odd_dma_start_r); - WriteMReg((dt3155_lbase[ minor ] + EVEN_DMA_STRIDE), + WriteMReg((dt3155_lbase[minor] + EVEN_DMA_STRIDE), even_dma_stride_r); - WriteMReg((dt3155_lbase[ minor ] + ODD_DMA_STRIDE), + WriteMReg((dt3155_lbase[minor] + ODD_DMA_STRIDE), odd_dma_stride_r); break; } @@ -465,9 +465,9 @@ static void dt3155_init_isr(int minor) /* 50/60 Hz should be set before this point but let's make sure it is */ /* right anyway */ - ReadI2C(dt3155_lbase[ minor ], CONFIG, &i2c_csr2.reg); + ReadI2C(dt3155_lbase[minor], CONFIG, &i2c_csr2.reg); i2c_csr2.fld.HZ50 = FORMAT50HZ; - WriteI2C(dt3155_lbase[ minor ], CONFIG, i2c_config.reg); + WriteI2C(dt3155_lbase[minor], CONFIG, i2c_config.reg); /* enable busmaster chip, clear flags */ @@ -487,7 +487,7 @@ static void dt3155_init_isr(int minor) csr1_r.fld.FLD_CRPT_EVE = 1; /* writing a 1 clears flags */ csr1_r.fld.FLD_CRPT_ODD = 1; - WriteMReg((dt3155_lbase[ minor ] + CSR1),csr1_r.reg); + WriteMReg((dt3155_lbase[minor] + CSR1),csr1_r.reg); /* Enable interrupts at the end of each field */ @@ -496,14 +496,14 @@ static void dt3155_init_isr(int minor) int_csr_r.fld.FLD_END_ODD_EN = 1; int_csr_r.fld.FLD_START_EN = 0; - WriteMReg((dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg); + WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg); /* start internal BUSY bits */ - ReadI2C(dt3155_lbase[ minor ], CSR2, &i2c_csr2.reg); + ReadI2C(dt3155_lbase[minor], CSR2, &i2c_csr2.reg); i2c_csr2.fld.BUSY_ODD = 1; i2c_csr2.fld.BUSY_EVE = 1; - WriteI2C(dt3155_lbase[ minor ], CSR2, i2c_csr2.reg); + WriteI2C(dt3155_lbase[minor], CSR2, i2c_csr2.reg); /* Now its up to the interrupt routine!! */ @@ -522,7 +522,7 @@ static int dt3155_ioctl(struct inode *inode, { int minor = MINOR(inode->i_rdev); /* What device are we ioctl()'ing? */ - if ( minor >= MAXBOARDS || minor < 0 ) + if (minor >= MAXBOARDS || minor < 0) return -ENODEV; /* make sure it is valid command */ @@ -566,7 +566,7 @@ static int dt3155_ioctl(struct inode *inode, case DT3155_GET_CONFIG: { if (copy_to_user((void *) arg, (void *) &dt3155_status[minor], - sizeof(dt3155_status_t) )) + sizeof(dt3155_status_t))) return -EFAULT; return 0; } @@ -610,7 +610,7 @@ static int dt3155_ioctl(struct inode *inode, } dt3155_init_isr(minor); - if (copy_to_user( (void *) arg, (void *) &dt3155_status[minor], + if (copy_to_user((void *) arg, (void *) &dt3155_status[minor], sizeof(dt3155_status_t))) return -EFAULT; return 0; @@ -682,36 +682,36 @@ static int dt3155_mmap (struct file * file, struct vm_area_struct * vma) * MOD_INC_USE_COUNT make sure that the driver memory is not freed * while the device is in use. *****************************************************/ -static int dt3155_open( struct inode* inode, struct file* filep) +static int dt3155_open(struct inode* inode, struct file* filep) { int minor = MINOR(inode->i_rdev); /* what device are we opening? */ - if (dt3155_dev_open[ minor ]) { + if (dt3155_dev_open[minor]) { printk ("DT3155: Already opened by another process.\n"); return -EBUSY; } - if (dt3155_status[ minor ].device_installed==0) + if (dt3155_status[minor].device_installed==0) { printk("DT3155 Open Error: No such device dt3155 minor number %d\n", minor); return -EIO; } - if (dt3155_status[ minor ].state != DT3155_STATE_IDLE) { + if (dt3155_status[minor].state != DT3155_STATE_IDLE) { printk ("DT3155: Not in idle state (state = %x)\n", - dt3155_status[ minor ].state); + dt3155_status[minor].state); return -EBUSY; } printk("DT3155: Device opened.\n"); - dt3155_dev_open[ minor ] = 1 ; + dt3155_dev_open[minor] = 1 ; - dt3155_flush( minor ); + dt3155_flush(minor); /* Disable ALL interrupts */ int_csr_r.reg = 0; - WriteMReg( (dt3155_lbase[ minor ] + INT_CSR), int_csr_r.reg ); + WriteMReg((dt3155_lbase[minor] + INT_CSR), int_csr_r.reg); init_waitqueue_head(&(dt3155_read_wait_queue[minor])); @@ -725,20 +725,20 @@ static int dt3155_open( struct inode* inode, struct file* filep) * Now decrement the use count. * *****************************************************/ -static int dt3155_close( struct inode *inode, struct file *filep) +static int dt3155_close(struct inode *inode, struct file *filep) { int minor; minor = MINOR(inode->i_rdev); /* which device are we closing */ - if (!dt3155_dev_open[ minor ]) + if (!dt3155_dev_open[minor]) { printk("DT3155: attempt to CLOSE a not OPEN device\n"); } else { - dt3155_dev_open[ minor ] = 0; + dt3155_dev_open[minor] = 0; - if (dt3155_status[ minor ].state != DT3155_STATE_IDLE) + if (dt3155_status[minor].state != DT3155_STATE_IDLE) { quick_stop(minor); } @@ -782,7 +782,7 @@ static ssize_t dt3155_read(struct file *filep, char __user *buf, if (filep->f_flags & O_NDELAY) { if ((frame_index = dt3155_get_ready_buffer(minor)) < 0) { - /*printk( "dt3155: no buffers available (?)\n");*/ + /*printk("dt3155: no buffers available (?)\n");*/ /* printques(minor); */ return -EAGAIN; } @@ -814,7 +814,7 @@ static ssize_t dt3155_read(struct file *filep, char __user *buf, put_user(offset, (unsigned int *) buf); buf += sizeof(u32); - put_user( dt3155_status[minor].fbuffer.frame_count, (unsigned int *) buf); + put_user(dt3155_status[minor].fbuffer.frame_count, (unsigned int *) buf); buf += sizeof(u32); put_user(dt3155_status[minor].state, (unsigned int *) buf); buf += sizeof(u32); @@ -901,7 +901,7 @@ static int find_PCI (void) /* Now, just go out and make sure that this/these device(s) is/are actually mapped into the kernel address space */ - if ((error = pci_read_config_dword( pci_dev, PCI_BASE_ADDRESS_0, + if ((error = pci_read_config_dword(pci_dev, PCI_BASE_ADDRESS_0, (u32 *) &base))) { printk("DT3155: Was not able to find device \n"); @@ -913,26 +913,26 @@ static int find_PCI (void) /* Remap the base address to a logical address through which we * can access it. */ - dt3155_lbase[ pci_index - 1 ] = ioremap(base,PCI_PAGE_SIZE); - dt3155_status[ pci_index - 1 ].reg_addr = base; + dt3155_lbase[pci_index - 1] = ioremap(base,PCI_PAGE_SIZE); + dt3155_status[pci_index - 1].reg_addr = base; DT_3155_DEBUG_MSG("DT3155: New logical address is %p \n", dt3155_lbase[pci_index-1]); - if ( !dt3155_lbase[pci_index-1] ) + if (!dt3155_lbase[pci_index-1]) { printk("DT3155: Unable to remap control registers\n"); goto err; } - if ( (error = pci_read_config_byte( pci_dev, PCI_INTERRUPT_LINE, &irq)) ) + if ((error = pci_read_config_byte(pci_dev, PCI_INTERRUPT_LINE, &irq))) { printk("DT3155: Was not able to find device \n"); goto err; } DT_3155_DEBUG_MSG("DT3155: IRQ is %d \n",irq); - dt3155_status[ pci_index-1 ].irq = irq; + dt3155_status[pci_index-1].irq = irq; /* Set flag: kth device found! */ - dt3155_status[ pci_index-1 ].device_installed = 1; + dt3155_status[pci_index-1].device_installed = 1; printk("DT3155: Installing device %d w/irq %d and address %p\n", pci_index, dt3155_status[pci_index-1].irq, @@ -957,89 +957,89 @@ int init_module(void) { int index; int rcode = 0; - char *devname[ MAXBOARDS ]; + char *devname[MAXBOARDS]; - devname[ 0 ] = "dt3155a"; + devname[0] = "dt3155a"; #if MAXBOARDS == 2 - devname[ 1 ] = "dt3155b"; + devname[1] = "dt3155b"; #endif printk("DT3155: Loading module...\n"); /* Register the device driver */ - rcode = register_chrdev( dt3155_major, "dt3155", &dt3155_fops ); - if( rcode < 0 ) + rcode = register_chrdev(dt3155_major, "dt3155", &dt3155_fops); + if(rcode < 0) { - printk( KERN_INFO "DT3155: register_chrdev failed \n"); + printk(KERN_INFO "DT3155: register_chrdev failed \n"); return rcode; } - if( dt3155_major == 0 ) + if(dt3155_major == 0) dt3155_major = rcode; /* dynamic */ /* init the status variables. */ /* DMA memory is taken care of in setup_buffers() */ - for ( index = 0; index < MAXBOARDS; index++ ) + for (index = 0; index < MAXBOARDS; index++) { - dt3155_status[ index ].config.acq_mode = DT3155_MODE_FRAME; - dt3155_status[ index ].config.continuous = DT3155_ACQ; - dt3155_status[ index ].config.cols = DT3155_MAX_COLS; - dt3155_status[ index ].config.rows = DT3155_MAX_ROWS; - dt3155_status[ index ].state = DT3155_STATE_IDLE; + dt3155_status[index].config.acq_mode = DT3155_MODE_FRAME; + dt3155_status[index].config.continuous = DT3155_ACQ; + dt3155_status[index].config.cols = DT3155_MAX_COLS; + dt3155_status[index].config.rows = DT3155_MAX_ROWS; + dt3155_status[index].state = DT3155_STATE_IDLE; /* find_PCI() will check if devices are installed; */ /* first assume they're not: */ - dt3155_status[ index ].mem_addr = 0; - dt3155_status[ index ].mem_size = 0; - dt3155_status[ index ].state = DT3155_STATE_IDLE; - dt3155_status[ index ].device_installed = 0; + dt3155_status[index].mem_addr = 0; + dt3155_status[index].mem_size = 0; + dt3155_status[index].state = DT3155_STATE_IDLE; + dt3155_status[index].device_installed = 0; } /* Now let's find the hardware. find_PCI() will set ndevices to the * number of cards found in this machine. */ { - if ( (rcode = find_PCI()) != DT_3155_SUCCESS ) + if ((rcode = find_PCI()) != DT_3155_SUCCESS) { printk("DT3155 error: find_PCI() failed to find dt3155 board(s)\n"); - unregister_chrdev( dt3155_major, "dt3155" ); + unregister_chrdev(dt3155_major, "dt3155"); return rcode; } } /* Ok, time to setup the frame buffers */ - if( (rcode = dt3155_setup_buffers(&allocatorAddr)) < 0 ) + if((rcode = dt3155_setup_buffers(&allocatorAddr)) < 0) { printk("DT3155: Error: setting up buffer not large enough."); - unregister_chrdev( dt3155_major, "dt3155" ); + unregister_chrdev(dt3155_major, "dt3155"); return rcode; } /* If we are this far, then there is enough RAM */ /* for the buffers: Print the configuration. */ - for( index = 0; index < ndevices; index++ ) + for( index = 0; index < ndevices; index++) { printk("DT3155: Device = %d; acq_mode = %d; " "continuous = %d; cols = %d; rows = %d;\n", index , - dt3155_status[ index ].config.acq_mode, - dt3155_status[ index ].config.continuous, - dt3155_status[ index ].config.cols, - dt3155_status[ index ].config.rows); + dt3155_status[index].config.acq_mode, + dt3155_status[index].config.continuous, + dt3155_status[index].config.cols, + dt3155_status[index].config.rows); printk("DT3155: m_addr = 0x%x; m_size = %ld; " "state = %d; device_installed = %d\n", - dt3155_status[ index ].mem_addr, - (long int)dt3155_status[ index ].mem_size, - dt3155_status[ index ].state, - dt3155_status[ index ].device_installed); + dt3155_status[index].mem_addr, + (long int)dt3155_status[index].mem_size, + dt3155_status[index].state, + dt3155_status[index].device_installed); } /* Disable ALL interrupts */ int_csr_r.reg = 0; - for( index = 0; index < ndevices; index++ ) + for( index = 0; index < ndevices; index++) { - WriteMReg( (dt3155_lbase[ index ] + INT_CSR), int_csr_r.reg ); - if( dt3155_status[ index ].device_installed ) + WriteMReg((dt3155_lbase[index] + INT_CSR), int_csr_r.reg); + if(dt3155_status[index].device_installed) { /* * This driver *looks* like it can handle sharing interrupts, @@ -1048,14 +1048,14 @@ int init_module(void) * as a reminder in case any problems arise. (SS) */ /* in older kernels flags are: SA_SHIRQ | SA_INTERRUPT */ - rcode = request_irq( dt3155_status[ index ].irq, (void *)dt3155_isr, - IRQF_SHARED | IRQF_DISABLED, devname[ index ], + rcode = request_irq(dt3155_status[index].irq, (void *)dt3155_isr, + IRQF_SHARED | IRQF_DISABLED, devname[index], (void*) &dt3155_status[index]); - if( rcode < 0 ) + if(rcode < 0) { printk("DT3155: minor %d request_irq failed for IRQ %d\n", index, dt3155_status[index].irq); - unregister_chrdev( dt3155_major, "dt3155" ); + unregister_chrdev(dt3155_major, "dt3155"); return rcode; } } @@ -1084,15 +1084,15 @@ void cleanup_module(void) allocator_cleanup(); #endif - unregister_chrdev( dt3155_major, "dt3155" ); + unregister_chrdev(dt3155_major, "dt3155"); - for( index = 0; index < ndevices; index++ ) + for(index = 0; index < ndevices; index++) { - if( dt3155_status[ index ].device_installed == 1 ) + if(dt3155_status[index].device_installed == 1) { - printk( "DT3155: Freeing irq %d for device %d\n", - dt3155_status[ index ].irq, index ); - free_irq( dt3155_status[ index ].irq, (void*)&dt3155_status[index] ); + printk("DT3155: Freeing irq %d for device %d\n", + dt3155_status[index].irq, index); + free_irq(dt3155_status[index].irq, (void*)&dt3155_status[index]); } } } -- cgit v0.10.2 From 7d4984d8424182eba2774755ae2ae8145651e788 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Mon, 29 Mar 2010 00:34:29 -0700 Subject: Staging: dt3155: allocator.c: sparse cleanups Make prototypes match implementation Use gfp_t flags not int prio Still a couple of sparse warnings left Signed-off-by: Joe Perches Cc: Simon Horman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/allocator.c b/drivers/staging/dt3155/allocator.c index 6fbd050..bd5adbc 100644 --- a/drivers/staging/dt3155/allocator.c +++ b/drivers/staging/dt3155/allocator.c @@ -58,6 +58,8 @@ #include +#include "allocator.h" + /*#define ALL_DEBUG*/ #define ALL_MSG "allocator: " @@ -83,9 +85,9 @@ /*#define PDEBUGG(fmt, args...) printk( KERN_DEBUG ALL_MSG fmt, ## args)*/ -int allocator_himem = 1; /* 0 = probe, pos. = megs, neg. = disable */ -int allocator_step = 1; /* This is the step size in MB */ -int allocator_probe = 1; /* This is a flag -- 1=probe, 0=don't probe */ +static int allocator_himem = 1; /* 0 = probe, pos. = megs, neg. = disable */ +static int allocator_step = 1; /* This is the step size in MB */ +static int allocator_probe = 1; /* This is a flag -- 1=probe, 0=don't probe */ static unsigned long allocator_buffer; /* physical address */ static unsigned long allocator_buffer_size; /* kilobytes */ @@ -101,8 +103,7 @@ struct allocator_struct { struct allocator_struct *next; }; -struct allocator_struct *allocator_list; - +static struct allocator_struct *allocator_list; #ifdef ALL_DEBUG static int dump_list(void) @@ -124,7 +125,7 @@ static int dump_list(void) * be used straight ahead for DMA, but needs remapping for program use). */ -unsigned long allocator_allocate_dma(unsigned long kilobytes, int prio) +unsigned long allocator_allocate_dma(unsigned long kilobytes, gfp_t flags) { struct allocator_struct *ptr = allocator_list, *newptr; unsigned long bytes = kilobytes << 10; @@ -147,7 +148,7 @@ unsigned long allocator_allocate_dma(unsigned long kilobytes, int prio) PDEBUG("alloc failed\n"); return 0; /* end of list */ } - newptr = kmalloc(sizeof(struct allocator_struct), prio); + newptr = kmalloc(sizeof(struct allocator_struct), flags); if (!newptr) return 0; diff --git a/drivers/staging/dt3155/allocator.h b/drivers/staging/dt3155/allocator.h index bdf3268..425b70f 100644 --- a/drivers/staging/dt3155/allocator.h +++ b/drivers/staging/dt3155/allocator.h @@ -22,7 +22,7 @@ * */ -void allocator_free_dma(unsigned long address); -unsigned long allocator_allocate_dma(unsigned long kilobytes, int priority); +int allocator_free_dma(unsigned long address); +unsigned long allocator_allocate_dma(unsigned long kilobytes, gfp_t flags); int allocator_init(u32 *); void allocator_cleanup(void); -- cgit v0.10.2 From e43a0edcb066935268b60c3444e30423bfee664c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 27 Apr 2010 16:04:13 -0700 Subject: Staging: dt3155.h: remove #ifdef We are in the kernel now, don't check to see if we are not. Cc: H Hartley Sweeten Cc: Scott Smedley Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155.h b/drivers/staging/dt3155/dt3155.h index 1bf7863..37d9fc6 100644 --- a/drivers/staging/dt3155/dt3155.h +++ b/drivers/staging/dt3155/dt3155.h @@ -34,15 +34,8 @@ MA 02111-1307 USA #ifndef _DT3155_INC #define _DT3155_INC -#ifdef __KERNEL__ #include #include /* struct timeval */ -#else -#include -#include -#include -#include -#endif #define TRUE 1 -- cgit v0.10.2 From ffefea471134987fc647f0a7502540bb6e5ae71f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 27 Apr 2010 16:06:14 -0700 Subject: Staging: dt3155: remove TRUE/FALSE These aren't needed in the kernel, so remove them. Cc: H Hartley Sweeten Cc: Scott Smedley Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155.h b/drivers/staging/dt3155/dt3155.h index 37d9fc6..453686e 100644 --- a/drivers/staging/dt3155/dt3155.h +++ b/drivers/staging/dt3155/dt3155.h @@ -38,9 +38,6 @@ MA 02111-1307 USA #include /* struct timeval */ -#define TRUE 1 -#define FALSE 0 - /* Uncomment this for 50Hz CCIR */ #define CCIR 1 @@ -55,11 +52,11 @@ MA 02111-1307 USA #ifdef CCIR #define DT3155_MAX_ROWS 576 #define DT3155_MAX_COLS 768 -#define FORMAT50HZ TRUE +#define FORMAT50HZ 1 #else #define DT3155_MAX_ROWS 480 #define DT3155_MAX_COLS 640 -#define FORMAT50HZ FALSE +#define FORMAT50HZ 0 #endif /* Configuration structure */ -- cgit v0.10.2 From 7f76c52fb0f4c7dfbe7dba1e80691fef957242b6 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 27 Apr 2010 16:45:27 -0700 Subject: Staging: dt3155: remove frame_info_t The typedef is not needed. Cc: H Hartley Sweeten Cc: Scott Smedley Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155.h b/drivers/staging/dt3155/dt3155.h index 453686e..93ee663 100644 --- a/drivers/staging/dt3155/dt3155.h +++ b/drivers/staging/dt3155/dt3155.h @@ -68,11 +68,11 @@ struct dt3155_config_s { /* hold data for each frame */ -typedef struct { +struct frame_info { u32 addr; /* address of the buffer with the frame */ u32 tag; /* unique number for the frame */ struct timeval time; /* time that capture took place */ -} frame_info_t; +}; /* * Structure for interrupt and buffer handling. @@ -81,7 +81,7 @@ typedef struct { struct dt3155_fbuffer_s { int nbuffers; - frame_info_t frame_info[BOARD_MAX_BUFFS]; + struct frame_info frame_info[BOARD_MAX_BUFFS]; int empty_buffers[BOARD_MAX_BUFFS]; /* indexes empty frames */ int empty_len; /* Number of empty buffers */ @@ -155,7 +155,7 @@ typedef struct dt3155_read_s { u32 frame_seq; u32 state; - frame_info_t frame_info; + struct frame_info frame_info; } dt3155_read_t; #endif /* _DT3155_inc */ diff --git a/drivers/staging/dt3155/dt3155_drv.c b/drivers/staging/dt3155/dt3155_drv.c index 91ebfad..cd674e1 100644 --- a/drivers/staging/dt3155/dt3155_drv.c +++ b/drivers/staging/dt3155/dt3155_drv.c @@ -757,7 +757,7 @@ static ssize_t dt3155_read(struct file *filep, char __user *buf, int minor = MINOR(filep->f_dentry->d_inode->i_rdev); u32 offset; int frame_index; - frame_info_t *frame_info_p; + struct frame_info *frame_info; /* TODO: this should check the error flag and */ /* return an error on hardware failures */ @@ -807,10 +807,10 @@ static ssize_t dt3155_read(struct file *filep, char __user *buf, } } - frame_info_p = &dt3155_status[minor].fbuffer.frame_info[frame_index]; + frame_info = &dt3155_status[minor].fbuffer.frame_info[frame_index]; /* make this an offset */ - offset = frame_info_p->addr - dt3155_status[minor].mem_addr; + offset = frame_info->addr - dt3155_status[minor].mem_addr; put_user(offset, (unsigned int *) buf); buf += sizeof(u32); @@ -818,7 +818,7 @@ static ssize_t dt3155_read(struct file *filep, char __user *buf, buf += sizeof(u32); put_user(dt3155_status[minor].state, (unsigned int *) buf); buf += sizeof(u32); - if (copy_to_user(buf, frame_info_p, sizeof(frame_info_t))) + if (copy_to_user(buf, frame_info, sizeof(*frame_info))) return -EFAULT; return sizeof(dt3155_read_t); -- cgit v0.10.2 From 923c1244fc27dc1623d95b6b3a29bc305a18bac5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 27 Apr 2010 16:47:55 -0700 Subject: Staging: dt3155: remove dt3155_status_t The typedef is not needed. Cc: H Hartley Sweeten Cc: Scott Smedley Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155.h b/drivers/staging/dt3155/dt3155.h index 93ee663..6546b60 100644 --- a/drivers/staging/dt3155/dt3155.h +++ b/drivers/staging/dt3155/dt3155.h @@ -110,7 +110,7 @@ struct dt3155_fbuffer_s { #define DT3155_ACQ 2 /* There is one status structure for each card. */ -typedef struct dt3155_status_s { +struct dt3155_status { int fixed_mode; /* if 1, we are in fixed frame mode */ u32 reg_addr; /* Register address for a single card */ u32 mem_addr; /* Buffer start addr for this card */ @@ -120,10 +120,10 @@ typedef struct dt3155_status_s { struct dt3155_fbuffer_s fbuffer; /* frame buffer state struct */ u32 state; /* this card's state */ u32 device_installed; /* Flag if installed. 1=installed */ -} dt3155_status_t; +}; /* Reference to global status structure */ -extern struct dt3155_status_s dt3155_status[MAXBOARDS]; +extern struct dt3155_status dt3155_status[MAXBOARDS]; #define DT3155_STATE_IDLE 0x00 #define DT3155_STATE_FRAME 0x01 @@ -135,7 +135,7 @@ extern struct dt3155_status_s dt3155_status[MAXBOARDS]; #define DT3155_IOC_MAGIC '!' #define DT3155_SET_CONFIG _IOW(DT3155_IOC_MAGIC, 1, struct dt3155_config_s) -#define DT3155_GET_CONFIG _IOR(DT3155_IOC_MAGIC, 2, struct dt3155_status_s) +#define DT3155_GET_CONFIG _IOR(DT3155_IOC_MAGIC, 2, struct dt3155_status) #define DT3155_STOP _IO(DT3155_IOC_MAGIC, 3) #define DT3155_START _IO(DT3155_IOC_MAGIC, 4) #define DT3155_FLUSH _IO(DT3155_IOC_MAGIC, 5) diff --git a/drivers/staging/dt3155/dt3155_drv.c b/drivers/staging/dt3155/dt3155_drv.c index cd674e1..5c567e4 100644 --- a/drivers/staging/dt3155/dt3155_drv.c +++ b/drivers/staging/dt3155/dt3155_drv.c @@ -112,7 +112,7 @@ int dt3155_major = 0; /* Global structures and variables */ /* Status of each device */ -struct dt3155_status_s dt3155_status[MAXBOARDS]; +struct dt3155_status dt3155_status[MAXBOARDS]; /* kernel logical address of the board */ u8 *dt3155_lbase[MAXBOARDS] = { NULL @@ -566,7 +566,7 @@ static int dt3155_ioctl(struct inode *inode, case DT3155_GET_CONFIG: { if (copy_to_user((void *) arg, (void *) &dt3155_status[minor], - sizeof(dt3155_status_t))) + sizeof(struct dt3155_status))) return -EFAULT; return 0; } @@ -587,7 +587,7 @@ static int dt3155_ioctl(struct inode *inode, quick_stop(minor); if (copy_to_user((void *) arg, (void *) &dt3155_status[minor], - sizeof(dt3155_status_t))) + sizeof(struct dt3155_status))) return -EFAULT; return 0; } @@ -611,7 +611,7 @@ static int dt3155_ioctl(struct inode *inode, dt3155_init_isr(minor); if (copy_to_user((void *) arg, (void *) &dt3155_status[minor], - sizeof(dt3155_status_t))) + sizeof(struct dt3155_status))) return -EFAULT; return 0; } -- cgit v0.10.2 From 5019d2848c6773ee5815291e6d3fcc33d0f5345c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 27 Apr 2010 16:49:23 -0700 Subject: Staging: dt3155: remove dt3155_read_t The typedef is not needed. Cc: H Hartley Sweeten Cc: Scott Smedley Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155.h b/drivers/staging/dt3155/dt3155.h index 6546b60..74a71f6 100644 --- a/drivers/staging/dt3155/dt3155.h +++ b/drivers/staging/dt3155/dt3155.h @@ -150,12 +150,12 @@ extern struct dt3155_status dt3155_status[MAXBOARDS]; #define DT_ERR_MASK 0xff0000/* not used but it might be one day */ /* User code will probably want to declare one of these for each card */ -typedef struct dt3155_read_s { +struct dt3155_read { u32 offset; u32 frame_seq; u32 state; struct frame_info frame_info; -} dt3155_read_t; +}; #endif /* _DT3155_inc */ diff --git a/drivers/staging/dt3155/dt3155_drv.c b/drivers/staging/dt3155/dt3155_drv.c index 5c567e4..3e8ceac 100644 --- a/drivers/staging/dt3155/dt3155_drv.c +++ b/drivers/staging/dt3155/dt3155_drv.c @@ -761,7 +761,7 @@ static ssize_t dt3155_read(struct file *filep, char __user *buf, /* TODO: this should check the error flag and */ /* return an error on hardware failures */ - if (count != sizeof(dt3155_read_t)) + if (count != sizeof(struct dt3155_read)) { printk("DT3155 ERROR (NJC): count is not right\n"); return -EINVAL; @@ -821,7 +821,7 @@ static ssize_t dt3155_read(struct file *filep, char __user *buf, if (copy_to_user(buf, frame_info, sizeof(*frame_info))) return -EFAULT; - return sizeof(dt3155_read_t); + return sizeof(struct dt3155_read); } static unsigned int dt3155_poll (struct file * filp, poll_table *wait) -- cgit v0.10.2 From 8b692e69c76592fd91ebfbb0e59faea3b6fda256 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 27 Apr 2010 16:51:50 -0700 Subject: Staging: dt3155: rename dt3155_config_s Drop the "_s", as it's not needed. Now, dt3155.h is checkpatch.pl clean. Cc: H Hartley Sweeten Cc: Scott Smedley Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155.h b/drivers/staging/dt3155/dt3155.h index 74a71f6..b99b527 100644 --- a/drivers/staging/dt3155/dt3155.h +++ b/drivers/staging/dt3155/dt3155.h @@ -60,7 +60,7 @@ MA 02111-1307 USA #endif /* Configuration structure */ -struct dt3155_config_s { +struct dt3155_config { u32 acq_mode; u32 cols, rows; u32 continuous; @@ -116,7 +116,7 @@ struct dt3155_status { u32 mem_addr; /* Buffer start addr for this card */ u32 mem_size; /* This is the amount of mem available */ u32 irq; /* this card's irq */ - struct dt3155_config_s config; /* configuration struct */ + struct dt3155_config config; /* configuration struct */ struct dt3155_fbuffer_s fbuffer; /* frame buffer state struct */ u32 state; /* this card's state */ u32 device_installed; /* Flag if installed. 1=installed */ @@ -134,7 +134,7 @@ extern struct dt3155_status dt3155_status[MAXBOARDS]; #define DT3155_IOC_MAGIC '!' -#define DT3155_SET_CONFIG _IOW(DT3155_IOC_MAGIC, 1, struct dt3155_config_s) +#define DT3155_SET_CONFIG _IOW(DT3155_IOC_MAGIC, 1, struct dt3155_config) #define DT3155_GET_CONFIG _IOR(DT3155_IOC_MAGIC, 2, struct dt3155_status) #define DT3155_STOP _IO(DT3155_IOC_MAGIC, 3) #define DT3155_START _IO(DT3155_IOC_MAGIC, 4) diff --git a/drivers/staging/dt3155/dt3155_drv.c b/drivers/staging/dt3155/dt3155_drv.c index 3e8ceac..789d47a 100644 --- a/drivers/staging/dt3155/dt3155_drv.c +++ b/drivers/staging/dt3155/dt3155_drv.c @@ -546,7 +546,7 @@ static int dt3155_ioctl(struct inode *inode, return -EBUSY; { - struct dt3155_config_s tmp; + struct dt3155_config tmp; if (copy_from_user((void *)&tmp, (void *) arg, sizeof(tmp))) return -EFAULT; /* check for valid settings */ -- cgit v0.10.2 From e802b4b79d2b25c47736c135a709b6c31e95fc39 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 27 Apr 2010 16:53:59 -0700 Subject: Staging: dt3155: rename dt3155_fbuffer_s drop the "_s" as it's not needed. Cc: H Hartley Sweeten Cc: Scott Smedley Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155.h b/drivers/staging/dt3155/dt3155.h index b99b527..793e2fc 100644 --- a/drivers/staging/dt3155/dt3155.h +++ b/drivers/staging/dt3155/dt3155.h @@ -78,7 +78,7 @@ struct frame_info { * Structure for interrupt and buffer handling. * This is the setup for 1 card */ -struct dt3155_fbuffer_s { +struct dt3155_fbuffer { int nbuffers; struct frame_info frame_info[BOARD_MAX_BUFFS]; @@ -117,7 +117,7 @@ struct dt3155_status { u32 mem_size; /* This is the amount of mem available */ u32 irq; /* this card's irq */ struct dt3155_config config; /* configuration struct */ - struct dt3155_fbuffer_s fbuffer; /* frame buffer state struct */ + struct dt3155_fbuffer fbuffer; /* frame buffer state struct */ u32 state; /* this card's state */ u32 device_installed; /* Flag if installed. 1=installed */ }; diff --git a/drivers/staging/dt3155/dt3155_isr.c b/drivers/staging/dt3155/dt3155_isr.c index 1ebcec0..61f74b6 100644 --- a/drivers/staging/dt3155/dt3155_isr.c +++ b/drivers/staging/dt3155/dt3155_isr.c @@ -60,7 +60,7 @@ Purpose: Buffer management routines, and other routines for the ISR /* Pointer into global structure for handling buffers */ -struct dt3155_fbuffer_s *dt3155_fbuffer[MAXBOARDS] = {NULL +struct dt3155_fbuffer *dt3155_fbuffer[MAXBOARDS] = {NULL #if MAXBOARDS == 2 , NULL #endif @@ -317,7 +317,7 @@ u32 dt3155_setup_buffers(u32 *allocatorAddr) /* Make sure the buffering variables are consistent */ { u8 *ptr = (u8 *) dt3155_fbuffer[m]; - for (index = 0; index < sizeof(struct dt3155_fbuffer_s); index++) + for (index = 0; index < sizeof(struct dt3155_fbuffer); index++) *(ptr++) = 0; } } diff --git a/drivers/staging/dt3155/dt3155_isr.h b/drivers/staging/dt3155/dt3155_isr.h index 7595cb1..7d474cf 100644 --- a/drivers/staging/dt3155/dt3155_isr.h +++ b/drivers/staging/dt3155/dt3155_isr.h @@ -36,7 +36,7 @@ MA 02111-1307 USA #ifndef DT3155_ISR_H #define DT3155_ISR_H -extern struct dt3155_fbuffer_s *dt3155_fbuffer[MAXBOARDS]; +extern struct dt3155_fbuffer *dt3155_fbuffer[MAXBOARDS]; /* User functions for buffering */ /* Initialize the buffering system. This should */ -- cgit v0.10.2 From e8afd402cc37aa2e6134c2f6e866f4a330d2da80 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 27 Apr 2010 17:04:16 -0700 Subject: Staging: dt3155: remove "inline" usage It was wrong, and not doing what anyone would think it would do. Cc: H Hartley Sweeten Cc: Scott Smedley Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155/dt3155_drv.c b/drivers/staging/dt3155/dt3155_drv.c index 789d47a..f31309b 100644 --- a/drivers/staging/dt3155/dt3155_drv.c +++ b/drivers/staging/dt3155/dt3155_drv.c @@ -168,7 +168,7 @@ static void quick_stop (int minor) * - Assumes irq's are disabled, via SA_INTERRUPT flag * being set in request_irq() call from init_module() *****************************************************/ -static inline void dt3155_isr(int irq, void *dev_id, struct pt_regs *regs) +static void dt3155_isr(int irq, void *dev_id, struct pt_regs *regs) { int minor = -1; int index; diff --git a/drivers/staging/dt3155/dt3155_isr.c b/drivers/staging/dt3155/dt3155_isr.c index 61f74b6..33ddc9c 100644 --- a/drivers/staging/dt3155/dt3155_isr.c +++ b/drivers/staging/dt3155/dt3155_isr.c @@ -77,7 +77,7 @@ struct dt3155_fbuffer *dt3155_fbuffer[MAXBOARDS] = {NULL * are_empty_buffers * m is minor # of device ***************************/ -inline bool are_empty_buffers(int m) +bool are_empty_buffers(int m) { return dt3155_fbuffer[m]->empty_len; } @@ -92,7 +92,7 @@ inline bool are_empty_buffers(int m) * given by dt3155_fbuffer[m]->empty_buffers[0]. * empty_buffers should never fill up, though this is not checked. **************************/ -inline void push_empty(int index, int m) +void push_empty(int index, int m) { dt3155_fbuffer[m]->empty_buffers[dt3155_fbuffer[m]->empty_len] = index; dt3155_fbuffer[m]->empty_len++; @@ -102,7 +102,7 @@ inline void push_empty(int index, int m) * pop_empty(m) * m is minor # of device **************************/ -inline int pop_empty(int m) +int pop_empty(int m) { dt3155_fbuffer[m]->empty_len--; return dt3155_fbuffer[m]->empty_buffers[dt3155_fbuffer[m]->empty_len]; @@ -112,7 +112,7 @@ inline int pop_empty(int m) * is_ready_buf_empty(m) * m is minor # of device *************************/ -inline bool is_ready_buf_empty(int m) +bool is_ready_buf_empty(int m) { return ((dt3155_fbuffer[m]->ready_len) == 0); } @@ -124,7 +124,7 @@ inline bool is_ready_buf_empty(int m) * buffers, since it corresponds to nbuffers ready buffers!! * 7/31/02: total rewrite. --NJC *************************/ -inline bool is_ready_buf_full(int m) +bool is_ready_buf_full(int m) { return dt3155_fbuffer[m]->ready_len == dt3155_fbuffer[m]->nbuffers; } @@ -134,7 +134,7 @@ inline bool is_ready_buf_full(int m) * m is minor # of device * *****************************************************/ -inline void push_ready(int m, int index) +void push_ready(int m, int index) { int head = dt3155_fbuffer[m]->ready_head; @@ -151,7 +151,7 @@ inline void push_ready(int m, int index) * * Simply comptutes the tail given the head and the length. *****************************************************/ -static inline int get_tail(int m) +static int get_tail(int m) { return (dt3155_fbuffer[m]->ready_head - dt3155_fbuffer[m]->ready_len + @@ -168,7 +168,7 @@ static inline int get_tail(int m) * This assumes that there is a ready buffer ready... should * be checked (e.g. with is_ready_buf_empty() prior to call. *****************************************************/ -inline int pop_ready(int m) +int pop_ready(int m) { int tail; tail = get_tail(m); @@ -181,7 +181,7 @@ inline int pop_ready(int m) * printques * m is minor # of device *****************************************************/ -inline void printques(int m) +void printques(int m) { int head = dt3155_fbuffer[m]->ready_head; int tail; @@ -410,7 +410,7 @@ u32 dt3155_setup_buffers(u32 *allocatorAddr) * * m is minor number of device *****************************************************/ -static inline void internal_release_locked_buffer(int m) +static void internal_release_locked_buffer(int m) { /* Pointer into global structure for handling buffers */ if (dt3155_fbuffer[m]->locked_buf >= 0) { @@ -427,7 +427,7 @@ static inline void internal_release_locked_buffer(int m) * The user function of the above. * *****************************************************/ -inline void dt3155_release_locked_buffer(int m) +void dt3155_release_locked_buffer(int m) { unsigned long int flags; local_save_flags(flags); @@ -442,7 +442,7 @@ inline void dt3155_release_locked_buffer(int m) * m is minor # of device * *****************************************************/ -inline int dt3155_flush(int m) +int dt3155_flush(int m) { int index; unsigned long int flags; @@ -479,7 +479,7 @@ inline int dt3155_flush(int m) * If the user has a buffer locked it will unlock * that buffer before returning the new one. *****************************************************/ -inline int dt3155_get_ready_buffer(int m) +int dt3155_get_ready_buffer(int m) { int frame_index; unsigned long int flags; -- cgit v0.10.2 From c1989b36df51b08a59b858920b4c84c392a63d12 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 14 Mar 2010 17:03:04 +0200 Subject: Staging: pohmelfs: fix spaces and TAB coding style issue in net.c This is a patch to the net.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: switch and case should be at the same indent and spaces required around that '=' (ctx:VxV) Signed-off-by: Ruslan Pisarev Acked-by: Evgeniy Polyakov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/pohmelfs/net.c b/drivers/staging/pohmelfs/net.c index 4a86f0b..9279897 100644 --- a/drivers/staging/pohmelfs/net.c +++ b/drivers/staging/pohmelfs/net.c @@ -713,8 +713,8 @@ static int pohmelfs_crypto_cap_response(struct netfs_state *st) dprintk("%s: cipher '%s': %s, hash: '%s': %s.\n", __func__, - psb->cipher_string, (cap->cipher_strlen)?"SUPPORTED":"NOT SUPPORTED", - psb->hash_string, (cap->hash_strlen)?"SUPPORTED":"NOT SUPPORTED"); + psb->cipher_string, (cap->cipher_strlen) ? "SUPPORTED" : "NOT SUPPORTED", + psb->hash_string, (cap->hash_strlen) ? "SUPPORTED" : "NOT SUPPORTED"); if (!cap->hash_strlen) { if (psb->hash_strlen && psb->crypto_fail_unsupported) @@ -748,11 +748,11 @@ static int pohmelfs_capabilities_response(struct netfs_state *st) return err; switch (cmd->id) { - case POHMELFS_CRYPTO_CAPABILITIES: + case POHMELFS_CRYPTO_CAPABILITIES: return pohmelfs_crypto_cap_response(st); - case POHMELFS_ROOT_CAPABILITIES: + case POHMELFS_ROOT_CAPABILITIES: return pohmelfs_root_cap_response(st); - default: + default: break; } return -EINVAL; @@ -774,7 +774,7 @@ static int pohmelfs_getxattr_response(struct netfs_state *st) m = pohmelfs_mcache_search(psb, cmd->id); dprintk("%s: id: %llu, gen: %llu, err: %d.\n", - __func__, cmd->id, (m)?m->gen:0, error); + __func__, cmd->id, (m) ? m->gen : 0, error); if (!m) { printk("%s: failed to find getxattr cache entry: id: %llu.\n", __func__, cmd->id); @@ -824,7 +824,7 @@ int pohmelfs_data_lock_response(struct netfs_state *st) m = pohmelfs_mcache_search(psb, id); dprintk("%s: id: %llu, gen: %llu, err: %d.\n", - __func__, cmd->id, (m)?m->gen:0, err); + __func__, cmd->id, (m) ? m->gen : 0, err); if (!m) { pohmelfs_data_recv(st, st->data, cmd->size); @@ -915,7 +915,7 @@ static int pohmelfs_recv(void *data) unsigned char *hash = e->data; dprintk("%s: received hash: ", __func__); - for (i=0; icsize; ++i) + for (i = 0; i < cmd->csize; ++i) printk("%02x ", hash[i]); printk("\n"); @@ -933,37 +933,37 @@ static int pohmelfs_recv(void *data) } switch (cmd->cmd) { - case NETFS_READ_PAGE: + case NETFS_READ_PAGE: err = pohmelfs_read_page_response(st); break; - case NETFS_READDIR: + case NETFS_READDIR: err = pohmelfs_readdir_response(st); break; - case NETFS_LOOKUP: + case NETFS_LOOKUP: err = pohmelfs_lookup_response(st); break; - case NETFS_CREATE: + case NETFS_CREATE: err = pohmelfs_create_response(st); break; - case NETFS_REMOVE: + case NETFS_REMOVE: err = pohmelfs_remove_response(st); break; - case NETFS_TRANS: + case NETFS_TRANS: err = pohmelfs_transaction_response(st); break; - case NETFS_PAGE_CACHE: + case NETFS_PAGE_CACHE: err = pohmelfs_page_cache_response(st); break; - case NETFS_CAPABILITIES: + case NETFS_CAPABILITIES: err = pohmelfs_capabilities_response(st); break; - case NETFS_LOCK: + case NETFS_LOCK: err = pohmelfs_data_lock_response(st); break; - case NETFS_XATTR_GET: + case NETFS_XATTR_GET: err = pohmelfs_getxattr_response(st); break; - default: + default: printk("%s: wrong cmd: %u, id: %llu, start: %llu, size: %u, ext: %u.\n", __func__, cmd->cmd, cmd->id, cmd->start, cmd->size, cmd->ext); netfs_state_reset(st); -- cgit v0.10.2 From e3f052f2b84f66fcaa9b9149e1e0b4930d78c307 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 14 Mar 2010 17:25:09 +0200 Subject: Staging: pohmelfs: fix spaces and TAB coding style issue in crypto.c This is a patch to the crypto.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: switch and case should be at the same indent and spaces required around that '=' (ctx:VxV) Signed-off-by: Ruslan Pisarev Acked-by: Evgeniy Polyakov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/pohmelfs/crypto.c b/drivers/staging/pohmelfs/crypto.c index 884183c..2fdb3e0 100644 --- a/drivers/staging/pohmelfs/crypto.c +++ b/drivers/staging/pohmelfs/crypto.c @@ -170,17 +170,17 @@ static int pohmelfs_crypto_process(struct ablkcipher_request *req, err = crypto_ablkcipher_decrypt(req); switch (err) { - case -EINPROGRESS: - case -EBUSY: - err = wait_for_completion_interruptible_timeout(&complete.complete, + case -EINPROGRESS: + case -EBUSY: + err = wait_for_completion_interruptible_timeout(&complete.complete, timeout); - if (!err) - err = -ETIMEDOUT; - else if (err > 0) - err = complete.error; - break; - default: - break; + if (!err) + err = -ETIMEDOUT; + else if (err > 0) + err = complete.error; + break; + default: + break; } return err; @@ -196,7 +196,7 @@ int pohmelfs_crypto_process_input_data(struct pohmelfs_crypto_engine *e, u64 cmd return 0; dprintk("%s: eng: %p, iv: %llx, data: %p, page: %p/%lu, size: %u.\n", - __func__, e, cmd_iv, data, page, (page)?page->index:0, size); + __func__, e, cmd_iv, data, page, (page) ? page->index : 0, size); if (data) { sg_init_one(&sg, data, size); @@ -247,7 +247,7 @@ int pohmelfs_crypto_process_input_data(struct pohmelfs_crypto_engine *e, u64 cmd dprintk("%s: eng: %p, hash: %p, cipher: %p: iv : %llx, hash mismatch (recv/calc): ", __func__, e, e->hash, e->cipher, cmd_iv); - for (i=0; ihash); ++i) { + for (i = 0; i < crypto_hash_digestsize(e->hash); ++i) { #if 0 dprintka("%02x ", recv[i]); if (recv[i] != calc[i]) { @@ -279,7 +279,7 @@ err_out_exit: } static int pohmelfs_trans_iter(struct netfs_trans *t, struct pohmelfs_crypto_engine *e, - int (* iterator) (struct pohmelfs_crypto_engine *e, + int (*iterator) (struct pohmelfs_crypto_engine *e, struct scatterlist *dst, struct scatterlist *src)) { @@ -319,7 +319,7 @@ static int pohmelfs_trans_iter(struct netfs_trans *t, struct pohmelfs_crypto_eng return 0; dpage_idx = 0; - for (i=0; ipage_num; ++i) { + for (i = 0; i < t->page_num; ++i) { struct page *page = t->pages[i]; struct page *dpage = e->pages[dpage_idx]; @@ -402,7 +402,7 @@ static int pohmelfs_hash(struct pohmelfs_crypto_thread *tc) { unsigned int i; dprintk("%s: ", __func__); - for (i=0; ipsb->crypto_attached_size; ++i) + for (i = 0; i < tc->psb->crypto_attached_size; ++i) dprintka("%02x ", dst[i]); dprintka("\n"); } @@ -414,7 +414,7 @@ static void pohmelfs_crypto_pages_free(struct pohmelfs_crypto_engine *e) { unsigned int i; - for (i=0; ipage_num; ++i) + for (i = 0; i < e->page_num; ++i) __free_page(e->pages[i]); kfree(e->pages); } @@ -427,7 +427,7 @@ static int pohmelfs_crypto_pages_alloc(struct pohmelfs_crypto_engine *e, struct if (!e->pages) return -ENOMEM; - for (i=0; itrans_max_pages; ++i) { + for (i = 0; i < psb->trans_max_pages; ++i) { e->pages[i] = alloc_page(GFP_KERNEL); if (!e->pages[i]) break; @@ -612,7 +612,7 @@ static int pohmelfs_sys_crypto_init(struct pohmelfs_sb *psb) __func__, st, &st->eng, &st->eng.hash, &st->eng.cipher); } - for (i=0; icrypto_thread_num; ++i) { + for (i = 0; i < psb->crypto_thread_num; ++i) { err = -ENOMEM; t = kzalloc(sizeof(struct pohmelfs_crypto_thread), GFP_KERNEL); if (!t) @@ -780,7 +780,7 @@ int pohmelfs_crypto_init(struct pohmelfs_sb *psb) } static int pohmelfs_crypto_thread_get(struct pohmelfs_sb *psb, - int (* action)(struct pohmelfs_crypto_thread *t, void *data), void *data) + int (*action)(struct pohmelfs_crypto_thread *t, void *data), void *data) { struct pohmelfs_crypto_thread *t = NULL; int err; -- cgit v0.10.2 From 5ac7af8942a4e7aca1eebee9b0b4ebc14c8cda89 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 14 Mar 2010 17:11:03 +0200 Subject: Staging: pohmelfs: fix spaces and TAB coding style issue in config.c This is a patch to the config.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like: ERROR: switch and case should be at the same indent Signed-off-by: Ruslan Pisarev Acked-by: Evgeniy Polyakov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/pohmelfs/config.c b/drivers/staging/pohmelfs/config.c index eed0e55..6571a6a 100644 --- a/drivers/staging/pohmelfs/config.c +++ b/drivers/staging/pohmelfs/config.c @@ -509,13 +509,13 @@ static int pohmelfs_cn_crypto(struct cn_msg *msg) } switch (crypto->type) { - case POHMELFS_CRYPTO_HASH: + case POHMELFS_CRYPTO_HASH: err = pohmelfs_crypto_hash_init(g, crypto); break; - case POHMELFS_CRYPTO_CIPHER: + case POHMELFS_CRYPTO_CIPHER: err = pohmelfs_crypto_cipher_init(g, crypto); break; - default: + default: err = -ENOTSUPP; break; } @@ -536,24 +536,24 @@ static void pohmelfs_cn_callback(struct cn_msg *msg, struct netlink_skb_parms *n return; switch (msg->flags) { - case POHMELFS_FLAGS_ADD: - case POHMELFS_FLAGS_DEL: - case POHMELFS_FLAGS_MODIFY: + case POHMELFS_FLAGS_ADD: + case POHMELFS_FLAGS_DEL: + case POHMELFS_FLAGS_MODIFY: err = pohmelfs_cn_ctl(msg, msg->flags); break; - case POHMELFS_FLAGS_FLUSH: + case POHMELFS_FLAGS_FLUSH: err = pohmelfs_cn_flush(msg); break; - case POHMELFS_FLAGS_SHOW: + case POHMELFS_FLAGS_SHOW: err = pohmelfs_cn_disp(msg); break; - case POHMELFS_FLAGS_DUMP: + case POHMELFS_FLAGS_DUMP: err = pohmelfs_cn_dump(msg); break; - case POHMELFS_FLAGS_CRYPTO: + case POHMELFS_FLAGS_CRYPTO: err = pohmelfs_cn_crypto(msg); break; - default: + default: err = -ENOSYS; break; } -- cgit v0.10.2 From 3420bc94e5c569a3385e781bf65c7d86c3053342 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 14 Mar 2010 17:39:46 +0200 Subject: Staging: pohmelfs: fix spaces and TAB coding style issue in dir.c This is a patch to the dir.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: spaces required around that '=' (ctx:VxV) Signed-off-by: Ruslan Pisarev Acked-by: Evgeniy Polyakov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/pohmelfs/dir.c b/drivers/staging/pohmelfs/dir.c index 79819f0..059e9d2 100644 --- a/drivers/staging/pohmelfs/dir.c +++ b/drivers/staging/pohmelfs/dir.c @@ -105,7 +105,7 @@ static struct pohmelfs_name *pohmelfs_insert_hash(struct pohmelfs_inode *pi, if (ret) { printk("%s: exist: parent: %llu, ino: %llu, hash: %x, len: %u, data: '%s', " - "new: ino: %llu, hash: %x, len: %u, data: '%s'.\n", + "new: ino: %llu, hash: %x, len: %u, data: '%s'.\n", __func__, pi->ino, ret->ino, ret->hash, ret->len, ret->data, new->ino, new->hash, new->len, new->data); @@ -234,7 +234,7 @@ struct pohmelfs_inode *pohmelfs_new_inode(struct pohmelfs_sb *psb, int err = -EEXIST; dprintk("%s: creating inode: parent: %llu, ino: %llu, str: %p.\n", - __func__, (parent)?parent->ino:0, info->ino, str); + __func__, (parent) ? parent->ino : 0, info->ino, str); err = -ENOMEM; new = iget_locked(psb->sb, info->ino); @@ -265,8 +265,8 @@ struct pohmelfs_inode *pohmelfs_new_inode(struct pohmelfs_sb *psb, s.len = 2; s.hash = jhash(s.name, s.len, 0); - err = pohmelfs_add_dir(psb, npi, (parent)?parent:npi, &s, - (parent)?parent->vfs_inode.i_mode:npi->vfs_inode.i_mode, 0); + err = pohmelfs_add_dir(psb, npi, (parent) ? parent : npi, &s, + (parent) ? parent->vfs_inode.i_mode : npi->vfs_inode.i_mode, 0); if (err) goto err_out_put; } @@ -277,7 +277,7 @@ struct pohmelfs_inode *pohmelfs_new_inode(struct pohmelfs_sb *psb, err = pohmelfs_add_dir(psb, parent, npi, str, info->mode, link); dprintk("%s: %s inserted name: '%s', new_offset: %llu, ino: %llu, parent: %llu.\n", - __func__, (err)?"unsuccessfully":"successfully", + __func__, (err) ? "unsuccessfully" : "successfully", str->name, parent->total_len, info->ino, parent->ino); if (err && err != -EEXIST) @@ -605,7 +605,7 @@ struct pohmelfs_inode *pohmelfs_create_entry_local(struct pohmelfs_sb *psb, if (!start) info.ino = pohmelfs_new_ino(psb); - info.nlink = S_ISDIR(mode)?2:1; + info.nlink = S_ISDIR(mode) ? 2 : 1; info.uid = current_fsuid(); info.gid = current_fsgid(); info.size = 0; @@ -849,7 +849,7 @@ static int pohmelfs_create_link(struct pohmelfs_inode *parent, struct qstr *obj, } dprintk("%s: parent: %llu, obj: '%s', target_inode: %llu, target_str: '%s', full: '%s'.\n", - __func__, parent->ino, obj->name, (target)?target->ino:0, (tstr)?tstr->name:NULL, + __func__, parent->ino, obj->name, (target) ? target->ino : 0, (tstr) ? tstr->name : NULL, (char *)data); cmd->cmd = NETFS_LINK; -- cgit v0.10.2 From 9b835ea87b43354d6bd053fba7f79cc84b588a3d Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 14 Mar 2010 18:00:08 +0200 Subject: Staging: pohmelfs: fix comments, spaces and TAB coding style issue in netfs.h This is a patch to the netfs.h file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: spaces required around that '=' (ctx:VxV) and ERROR: do not use C99 // comments Signed-off-by: Ruslan Pisarev Acked-by: Evgeniy Polyakov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/pohmelfs/netfs.h b/drivers/staging/pohmelfs/netfs.h index 01cba00..35c898a 100644 --- a/drivers/staging/pohmelfs/netfs.h +++ b/drivers/staging/pohmelfs/netfs.h @@ -305,7 +305,7 @@ struct pohmelfs_inode { }; struct netfs_trans; -typedef int (* netfs_trans_complete_t)(struct page **pages, unsigned int page_num, +typedef int (*netfs_trans_complete_t)(struct page **pages, unsigned int page_num, void *private, int err); struct netfs_state; @@ -911,7 +911,8 @@ static inline void pohmelfs_mcache_put(struct pohmelfs_sb *psb, pohmelfs_mcache_free(psb, m); } -//#define POHMELFS_TRUNCATE_ON_INODE_FLUSH +/*#define POHMELFS_TRUNCATE_ON_INODE_FLUSH + */ #endif /* __KERNEL__*/ -- cgit v0.10.2 From 75cc5d9c648f6af2362ae4da54f5d237d0cc75ee Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 14 Mar 2010 18:08:05 +0200 Subject: Staging: pohmelfs: fix spaces and TAB coding style issue in netfs.h This is a patch to the netfs.h file that fixed up a TAB and spaces WARNING found by the checkpatch.pl tools, like WARNING: please, no space before tabs Signed-off-by: Ruslan Pisarev Acked-by: Evgeniy Polyakov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/pohmelfs/netfs.h b/drivers/staging/pohmelfs/netfs.h index 35c898a..63391d2 100644 --- a/drivers/staging/pohmelfs/netfs.h +++ b/drivers/staging/pohmelfs/netfs.h @@ -489,7 +489,7 @@ void pohmelfs_crypto_thread_make_ready(struct pohmelfs_crypto_thread *th); struct netfs_state { struct mutex __state_lock; /* Can not allow to use the same socket simultaneously */ struct mutex __state_send_lock; - struct netfs_cmd cmd; /* Cached command */ + struct netfs_cmd cmd; /* Cached command */ struct netfs_inode_info info; /* Cached inode info */ void *data; /* Cached some data */ @@ -500,9 +500,9 @@ struct netfs_state { struct task_struct *thread; /* Async receiving thread */ /* Waiting/polling machinery */ - wait_queue_t wait; - wait_queue_head_t *whead; - wait_queue_head_t thread_wait; + wait_queue_t wait; + wait_queue_head_t *whead; + wait_queue_head_t thread_wait; struct mutex trans_lock; struct rb_root trans_root; @@ -620,8 +620,8 @@ struct pohmelfs_sb { /* * Timed checks: stale transactions, inodes to be freed and so on. */ - struct delayed_work dwork; - struct delayed_work drop_dwork; + struct delayed_work dwork; + struct delayed_work drop_dwork; struct super_block *sb; -- cgit v0.10.2 From 5d6892b3c6811cfd20e3d71d89fa77f4b6bd089b Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 14 Mar 2010 17:50:20 +0200 Subject: Staging: pohmelfs: fix spaces and TAB coding style issue in inode.c This is a patch to the inode.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: spaces required around that '=' (ctx:VxV) Signed-off-by: Ruslan Pisarev Acked-by: Evgeniy Polyakov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/pohmelfs/inode.c b/drivers/staging/pohmelfs/inode.c index 6327552..9286e86 100644 --- a/drivers/staging/pohmelfs/inode.c +++ b/drivers/staging/pohmelfs/inode.c @@ -685,7 +685,7 @@ static int pohmelfs_readpages_trans_complete(struct page **__pages, unsigned int goto err_out_free; } - for (i=0; iidx = option; - break; - case pohmelfs_opt_trans_scan_timeout: - psb->trans_scan_timeout = msecs_to_jiffies(option); - break; - case pohmelfs_opt_drop_scan_timeout: - psb->drop_scan_timeout = msecs_to_jiffies(option); - break; - case pohmelfs_opt_wait_on_page_timeout: - psb->wait_on_page_timeout = msecs_to_jiffies(option); - break; - case pohmelfs_opt_mcache_timeout: - psb->mcache_timeout = msecs_to_jiffies(option); - break; - case pohmelfs_opt_trans_retries: - psb->trans_retries = option; - break; - case pohmelfs_opt_crypto_thread_num: - psb->crypto_thread_num = option; - break; - case pohmelfs_opt_trans_max_pages: - psb->trans_max_pages = option; - break; - case pohmelfs_opt_crypto_fail_unsupported: - psb->crypto_fail_unsupported = 1; - break; - default: - return -EINVAL; + case pohmelfs_opt_idx: + psb->idx = option; + break; + case pohmelfs_opt_trans_scan_timeout: + psb->trans_scan_timeout = msecs_to_jiffies(option); + break; + case pohmelfs_opt_drop_scan_timeout: + psb->drop_scan_timeout = msecs_to_jiffies(option); + break; + case pohmelfs_opt_wait_on_page_timeout: + psb->wait_on_page_timeout = msecs_to_jiffies(option); + break; + case pohmelfs_opt_mcache_timeout: + psb->mcache_timeout = msecs_to_jiffies(option); + break; + case pohmelfs_opt_trans_retries: + psb->trans_retries = option; + break; + case pohmelfs_opt_crypto_thread_num: + psb->crypto_thread_num = option; + break; + case pohmelfs_opt_trans_max_pages: + psb->trans_max_pages = option; + break; + case pohmelfs_opt_crypto_fail_unsupported: + psb->crypto_fail_unsupported = 1; + break; + default: + return -EINVAL; } } @@ -1777,7 +1777,7 @@ static int pohmelfs_show_stats(struct seq_file *m, struct vfsmount *mnt) seq_printf(m, "%pi6:%u", &sin->sin6_addr, ntohs(sin->sin6_port)); } else { unsigned int i; - for (i=0; iaddrlen; ++i) + for (i = 0; i < ctl->addrlen; ++i) seq_printf(m, "%02x.", ctl->addr.addr[i]); } @@ -2035,7 +2035,7 @@ err_out_exit: static void __exit exit_pohmel_fs(void) { - unregister_filesystem(&pohmel_fs_type); + unregister_filesystem(&pohmel_fs_type); pohmelfs_destroy_inodecache(); pohmelfs_mcache_exit(); pohmelfs_config_exit(); -- cgit v0.10.2 From 9fd453c981b07f8cd501a938085b901b0c8c0bf5 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Mon, 29 Mar 2010 01:24:45 +0100 Subject: Staging: rt28xx: Make PCI_{MAP,UNMAP}_SINGLE type-safe To avoid recurrence of bugs such as , change the type of the first parameter to linux_pci_{map,unmap}_single() from void * to struct rt_rtmp_adapter *. Also do not define the macros PCI_{MAP,UNMAP}_SINGLE() when building the rt2870sta driver; they are not used and if they were that would be a bug. Signed-off-by: Ben Hutchings Cc: Bartlomiej Zolnierkiewicz , Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h index a7c540f..b370fb2 100644 --- a/drivers/staging/rt2860/rt_linux.h +++ b/drivers/staging/rt2860/rt_linux.h @@ -455,10 +455,11 @@ void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen); * Device DMA Access related definitions and data structures. **********************************************************************************/ #ifdef RTMP_MAC_PCI -dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, - int sd_idx, int direction); -void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, - int direction); +struct rt_rtmp_adapter; +dma_addr_t linux_pci_map_single(struct rt_rtmp_adapter *pAd, void *ptr, + size_t size, int sd_idx, int direction); +void linux_pci_unmap_single(struct rt_rtmp_adapter *pAd, dma_addr_t dma_addr, + size_t size, int direction); #define PCI_MAP_SINGLE(_handle, _ptr, _size, _sd_idx, _dir) \ linux_pci_map_single(_handle, _ptr, _size, _sd_idx, _dir) @@ -475,11 +476,6 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, #define DEV_ALLOC_SKB(_length) \ dev_alloc_skb(_length) #endif /* RTMP_MAC_PCI // */ -#ifdef RTMP_MAC_USB -#define PCI_MAP_SINGLE(_handle, _ptr, _size, _dir) (unsigned long)0 - -#define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir) -#endif /* RTMP_MAC_USB // */ /* * unsigned long diff --git a/drivers/staging/rt2860/rt_pci_rbus.c b/drivers/staging/rt2860/rt_pci_rbus.c index e0a0aee..acdf09f 100644 --- a/drivers/staging/rt2860/rt_pci_rbus.c +++ b/drivers/staging/rt2860/rt_pci_rbus.c @@ -790,10 +790,9 @@ IRQ_HANDLE_TYPE rt2860_interrupt(int irq, void *dev_instance) * invaild or writeback cache * and convert virtual address to physical address */ -dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, - int sd_idx, int direction) +dma_addr_t linux_pci_map_single(struct rt_rtmp_adapter *pAd, void *ptr, + size_t size, int sd_idx, int direction) { - struct rt_rtmp_adapter *pAd; struct os_cookie *pObj; /* @@ -812,7 +811,6 @@ dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, sd_idx = -1 */ - pAd = (struct rt_rtmp_adapter *)handle; pObj = (struct os_cookie *)pAd->OS_Cookie; if (sd_idx == 1) { @@ -826,13 +824,11 @@ dma_addr_t linux_pci_map_single(void *handle, void *ptr, size_t size, } -void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, - int direction) +void linux_pci_unmap_single(struct rt_rtmp_adapter *pAd, dma_addr_t dma_addr, + size_t size, int direction) { - struct rt_rtmp_adapter *pAd; struct os_cookie *pObj; - pAd = (struct rt_rtmp_adapter *)handle; pObj = (struct os_cookie *)pAd->OS_Cookie; pci_unmap_single(pObj->pci_dev, dma_addr, size, direction); -- cgit v0.10.2 From cc9b5222f225d03d8815a4d7225f0cbf01755ef3 Mon Sep 17 00:00:00 2001 From: Gorskin Ilya Date: Thu, 18 Mar 2010 14:56:47 +0500 Subject: Staging: rt2860: fix coding style issue in rt_linux.c Signed-off-by: Gorskin Ilya Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c index fd9a207..bfda187 100644 --- a/drivers/staging/rt2860/rt_linux.c +++ b/drivers/staging/rt2860/rt_linux.c @@ -82,7 +82,7 @@ char const *pWirelessFloodEventText[IW_FLOOD_EVENT_TYPE_NUM] = { }; /* timeout -- ms */ -void RTMP_SetPeriodicTimer(struct timer_list * pTimer, +void RTMP_SetPeriodicTimer(struct timer_list *pTimer, IN unsigned long timeout) { timeout = ((timeout * OS_HZ) / 1000); @@ -92,7 +92,7 @@ void RTMP_SetPeriodicTimer(struct timer_list * pTimer, /* convert NdisMInitializeTimer --> RTMP_OS_Init_Timer */ void RTMP_OS_Init_Timer(struct rt_rtmp_adapter *pAd, - struct timer_list * pTimer, + struct timer_list *pTimer, IN TIMER_FUNCTION function, void *data) { init_timer(pTimer); @@ -100,7 +100,7 @@ void RTMP_OS_Init_Timer(struct rt_rtmp_adapter *pAd, pTimer->function = function; } -void RTMP_OS_Add_Timer(struct timer_list * pTimer, +void RTMP_OS_Add_Timer(struct timer_list *pTimer, IN unsigned long timeout) { if (timer_pending(pTimer)) @@ -111,14 +111,14 @@ void RTMP_OS_Add_Timer(struct timer_list * pTimer, add_timer(pTimer); } -void RTMP_OS_Mod_Timer(struct timer_list * pTimer, +void RTMP_OS_Mod_Timer(struct timer_list *pTimer, IN unsigned long timeout) { timeout = ((timeout * OS_HZ) / 1000); mod_timer(pTimer, jiffies + timeout); } -void RTMP_OS_Del_Timer(struct timer_list * pTimer, +void RTMP_OS_Del_Timer(struct timer_list *pTimer, OUT BOOLEAN * pCancelled) { if (timer_pending(pTimer)) { @@ -146,7 +146,7 @@ void RTMPusecDelay(unsigned long usec) udelay(usec % 50); } -void RTMP_GetCurrentSystemTime(LARGE_INTEGER * time) +void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time) { time->u.LowPart = jiffies; } @@ -156,9 +156,9 @@ int os_alloc_mem(struct rt_rtmp_adapter *pAd, u8 ** mem, unsigned long size) { *mem = (u8 *)kmalloc(size, GFP_ATOMIC); if (*mem) - return (NDIS_STATUS_SUCCESS); + return NDIS_STATUS_SUCCESS; else - return (NDIS_STATUS_FAILURE); + return NDIS_STATUS_FAILURE; } /* pAd MUST allow to be NULL */ @@ -167,7 +167,7 @@ int os_free_mem(struct rt_rtmp_adapter *pAd, void *mem) ASSERT(mem); kfree(mem); - return (NDIS_STATUS_SUCCESS); + return NDIS_STATUS_SUCCESS; } void *RtmpOSNetPktAlloc(struct rt_rtmp_adapter *pAd, IN int size) @@ -176,7 +176,7 @@ void *RtmpOSNetPktAlloc(struct rt_rtmp_adapter *pAd, IN int size) /* Add 2 more bytes for ip header alignment */ skb = dev_alloc_skb(size + 2); - return ((void *)skb); + return (void *)skb; } void *RTMP_AllocateFragPacketBuffer(struct rt_rtmp_adapter *pAd, @@ -201,7 +201,7 @@ void *RTMP_AllocateFragPacketBuffer(struct rt_rtmp_adapter *pAd, void *RTMP_AllocateTxPacketBuffer(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress) + void **VirtualAddress) { struct sk_buff *pkt; @@ -271,7 +271,7 @@ void RTMPFreeAdapter(struct rt_rtmp_adapter *pAd) BOOLEAN OS_Need_Clone_Packet(void) { - return (FALSE); + return FALSE; } /* @@ -299,7 +299,7 @@ BOOLEAN OS_Need_Clone_Packet(void) int RTMPCloneNdisPacket(struct rt_rtmp_adapter *pAd, IN BOOLEAN pInsAMSDUHdr, void *pInPacket, - void ** ppOutPacket) + void **ppOutPacket) { struct sk_buff *pkt; @@ -328,7 +328,7 @@ int RTMPCloneNdisPacket(struct rt_rtmp_adapter *pAd, /* the allocated NDIS PACKET must be freed via RTMPFreeNdisPacket() */ int RTMPAllocateNdisPacket(struct rt_rtmp_adapter *pAd, - void ** ppPacket, + void **ppPacket, u8 *pHeader, u32 HeaderLen, u8 *pData, u32 DataLen) @@ -391,7 +391,7 @@ int Sniff2BytesFromNdisBuffer(char *pFirstBuffer, void RTMP_QueryPacketInfo(void *pPacket, struct rt_packet_info *pPacketInfo, - u8 ** pSrcBufVA, u32 * pSrcBufLen) + u8 **pSrcBufVA, u32 * pSrcBufLen) { pPacketInfo->BufferCount = 1; pPacketInfo->pFirstBuffer = (char *)GET_OS_PKT_DATAPTR(pPacket); @@ -402,9 +402,9 @@ void RTMP_QueryPacketInfo(void *pPacket, *pSrcBufLen = GET_OS_PKT_LEN(pPacket); } -void RTMP_QueryNextPacketInfo(void ** ppPacket, +void RTMP_QueryNextPacketInfo(void **ppPacket, struct rt_packet_info *pPacketInfo, - u8 ** pSrcBufVA, u32 * pSrcBufLen) + u8 **pSrcBufVA, u32 * pSrcBufLen) { void *pPacket = NULL; @@ -589,7 +589,7 @@ rt_get_sg_list_from_packet(void *pPacket, struct rt_rtmp_sg_list *sg) sg->NumberOfElements = 1; sg->Elements[0].Address = GET_OS_PKT_DATAPTR(pPacket); sg->Elements[0].Length = GET_OS_PKT_LEN(pPacket); - return (sg); + return sg; } void hex_dump(char *str, unsigned char *pSrcBufVA, unsigned int SrcBufLen) @@ -1062,7 +1062,7 @@ void RtmpOSTaskCustomize(struct rt_rtmp_os_task *pTask) #ifndef KTHREAD_SUPPORT - daemonize((char *)& pTask->taskName[0] /*"%s",pAd->net_dev->name */ ); + daemonize((char *)&pTask->taskName[0] /*"%s",pAd->net_dev->name */); allow_signal(SIGTERM); allow_signal(SIGKILL); @@ -1247,7 +1247,7 @@ void RtmpOSNetDevFree(struct net_device *pNetDev) free_netdev(pNetDev); } -int RtmpOSNetDevAlloc(struct net_device ** new_dev_p, u32 privDataSize) +int RtmpOSNetDevAlloc(struct net_device **new_dev_p, u32 privDataSize) { /* assign it as null first. */ *new_dev_p = NULL; @@ -1344,7 +1344,7 @@ struct net_device *RtmpOSNetDevCreate(struct rt_rtmp_adapter *pAd, int status; /* allocate a new network device */ - status = RtmpOSNetDevAlloc(&pNetDev, 0 /*privMemSize */ ); + status = RtmpOSNetDevAlloc(&pNetDev, 0 /*privMemSize */); if (status != NDIS_STATUS_SUCCESS) { /* allocation fail, exit */ DBGPRINT(RT_DEBUG_ERROR, -- cgit v0.10.2 From 52acccb144ef698577a372b60a17e56b686fa064 Mon Sep 17 00:00:00 2001 From: Gorskin Ilya Date: Fri, 19 Mar 2010 22:57:50 +0500 Subject: Staging: rt2860: fix coding style issue in rt_main_dev.c This is a patch to the rt_main_dev.c file that fixes up errors found by the checkpatch.pl tool Signed-off-by: Gorskin Ilya Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c index fbddb00..ad60cea 100644 --- a/drivers/staging/rt2860/rt_main_dev.c +++ b/drivers/staging/rt2860/rt_main_dev.c @@ -439,13 +439,13 @@ int rt28xx_open(struct net_device *dev) RTMPInitPCIeLinkCtrlValue(pAd); #endif /* RTMP_MAC_PCI // */ - return (retval); + return retval; err: /*+++Add by shiang, move from rt28xx_init() to here. */ RtmpOSIRQRelease(net_dev); /*---Add by shiang, move from rt28xx_init() to here. */ - return (-1); + return -1; } /* End of rt28xx_open */ static const struct net_device_ops rt2860_netdev_ops = { @@ -534,7 +534,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb) } RTMP_SET_PACKET_5VT(pPacket, 0); - STASendPackets((void *)pAd, (void **)& pPacket, 1); + STASendPackets((void *)pAd, (void **)&pPacket, 1); status = NETDEV_TX_OK; done: @@ -571,7 +571,7 @@ static int rt28xx_send_packets(IN struct sk_buff *skb_p, return NETDEV_TX_OK; } - NdisZeroMemory((u8 *)& skb_p->cb[CB_OFF], 15); + NdisZeroMemory((u8 *)&skb_p->cb[CB_OFF], 15); RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID); return rt28xx_packet_xmit(skb_p); @@ -628,13 +628,13 @@ void tbtt_tasklet(unsigned long data) ======================================================================== Routine Description: - return ethernet statistics counter + return ethernet statistics counter Arguments: - net_dev Pointer to net_device + net_dev Pointer to net_device Return Value: - net_device_stats* + net_device_stats* Note: @@ -728,9 +728,9 @@ int AdapterBlockAllocateMemory(void *handle, void ** ppAd) if (*ppAd) { NdisZeroMemory(*ppAd, sizeof(struct rt_rtmp_adapter)); - ((struct rt_rtmp_adapter *)* ppAd)->OS_Cookie = handle; - return (NDIS_STATUS_SUCCESS); + ((struct rt_rtmp_adapter *)*ppAd)->OS_Cookie = handle; + return NDIS_STATUS_SUCCESS; } else { - return (NDIS_STATUS_FAILURE); + return NDIS_STATUS_FAILURE; } } -- cgit v0.10.2 From 015ffcbeb3a95bd67fd9851a6428508a2e48837f Mon Sep 17 00:00:00 2001 From: Gorskin Ilya Date: Fri, 19 Mar 2010 23:10:32 +0500 Subject: Staging: rt2860: fix coding style issue in rt_pci_rbus.c This is a patch to the rt_pci_rbus.c file that fixes up errors found by the checkpatch.pl tool Signed-off-by: Gorskin Ilya Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/rt_pci_rbus.c b/drivers/staging/rt2860/rt_pci_rbus.c index acdf09f..3004be6 100644 --- a/drivers/staging/rt2860/rt_pci_rbus.c +++ b/drivers/staging/rt2860/rt_pci_rbus.c @@ -81,7 +81,7 @@ void RTMP_AllocateTxDescMemory(struct rt_rtmp_adapter *pAd, u32 Index, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress) { struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; @@ -96,7 +96,7 @@ void RTMP_AllocateTxDescMemory(struct rt_rtmp_adapter *pAd, void RTMP_AllocateMgmtDescMemory(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress) { struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; @@ -111,7 +111,7 @@ void RTMP_AllocateMgmtDescMemory(struct rt_rtmp_adapter *pAd, void RTMP_AllocateRxDescMemory(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress) { struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; @@ -139,7 +139,7 @@ void RTMP_AllocateFirstTxBuffer(struct rt_rtmp_adapter *pAd, u32 Index, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress) { struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; @@ -173,7 +173,7 @@ void RTMP_FreeFirstTxBuffer(struct rt_rtmp_adapter *pAd, void RTMP_AllocateSharedMemory(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress) { struct os_cookie *pObj = (struct os_cookie *)pAd->OS_Cookie; @@ -197,7 +197,7 @@ void RTMP_AllocateSharedMemory(struct rt_rtmp_adapter *pAd, void *RTMP_AllocateRxPacketBuffer(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, OUT dma_addr_t * PhysicalAddress) { -- cgit v0.10.2 From 3d401c96e08c8e942306387d6ae82be0cc4de12f Mon Sep 17 00:00:00 2001 From: Gorskin Ilya Date: Fri, 19 Mar 2010 23:22:41 +0500 Subject: Staging: rt2860: fix coding style issue in rt_usb.c This is a patch to the rt_usb.c file that fixes up errors found by the checkpatch.pl tool Signed-off-by: Gorskin Ilya Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/rt_usb.c b/drivers/staging/rt2860/rt_usb.c index 01a7eb4..bcfc0f5 100644 --- a/drivers/staging/rt2860/rt_usb.c +++ b/drivers/staging/rt2860/rt_usb.c @@ -233,8 +233,7 @@ static void rtusb_dataout_complete(unsigned long data) FREE_HTTX_RING(pAd, BulkOutPipeId, pHTTXContext); /*RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[BulkOutPipeId], IrqFlags); */ - } else /* STATUS_OTHER */ - { + } else { /* STATUS_OTHER */ u8 *pBuf; pAd->BulkOutCompleteOther++; @@ -316,8 +315,7 @@ static void rtusb_null_frame_done_tasklet(unsigned long data) RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); - } else /* STATUS_OTHER */ - { + } else { /* STATUS_OTHER */ if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && @@ -362,8 +360,7 @@ static void rtusb_rts_frame_done_tasklet(unsigned long data) if (Status == USB_ST_NOERROR) { RTMP_IRQ_UNLOCK(&pAd->BulkOutLock[0], irqFlag); RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); - } else /* STATUS_OTHER */ - { + } else { /* STATUS_OTHER */ if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && @@ -410,8 +407,7 @@ static void rtusb_pspoll_frame_done_tasklet(unsigned long data) if (Status == USB_ST_NOERROR) { RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS); - } else /* STATUS_OTHER */ - { + } else { /* STATUS_OTHER */ if ((!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)) && @@ -473,14 +469,12 @@ static void rx_done_tasklet(unsigned long data) if (Status == USB_ST_NOERROR) { pAd->BulkInComplete++; pAd->NextRxBulkInPosition = 0; - if (pRxContext->BulkInOffset) /* As jan's comment, it may bulk-in success but size is zero. */ - { + if (pRxContext->BulkInOffset) { /* As jan's comment, it may bulk-in success but size is zero. */ pRxContext->Readable = TRUE; INC_RING_INDEX(pAd->NextRxBulkInIndex, RX_RING_SIZE); } RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags); - } else /* STATUS_OTHER */ - { + } else { /* STATUS_OTHER */ pAd->BulkInCompleteFail++; /* Still read this packet although it may comtain wrong bytes. */ pRxContext->Readable = FALSE; @@ -584,7 +578,7 @@ static void rtusb_mgmt_dma_done_tasklet(unsigned long data) /* The protectioon of rest bulk should be in BulkOut routine */ if (pAd->MgmtRing.TxSwFreeIdx < MGMT_RING_SIZE - /* pMLMEContext->bWaitingBulkOut == TRUE */ ) { + /* pMLMEContext->bWaitingBulkOut == TRUE */) { RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_MLME); } RTUSBKickBulkOut(pAd); -- cgit v0.10.2 From 1995dbabd44a5540a9950512c8b87e888a399c2a Mon Sep 17 00:00:00 2001 From: Gorskin Ilya Date: Sat, 20 Mar 2010 01:18:51 +0500 Subject: Staging: rt2860: fix coding style issue in rt3070.c, rt3090.c, rt30xx.c This is a patch to the rt3070.c, rt3090.c, rt30xx.c files that fixes up errors found by the checkpatch.pl tool Signed-off-by: Gorskin Ilya Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/chips/rt3070.c b/drivers/staging/rt2860/chips/rt3070.c index 627bad9..3a17fd1 100644 --- a/drivers/staging/rt2860/chips/rt3070.c +++ b/drivers/staging/rt2860/chips/rt3070.c @@ -56,7 +56,7 @@ void NICInitRT3070RFRegisters(struct rt_rtmp_adapter *pAd) u32 RfReg = 0; u32 data; - RT30xxReadRFRegister(pAd, RF_R30, (u8 *)& RfReg); + RT30xxReadRFRegister(pAd, RF_R30, (u8 *)&RfReg); RfReg |= 0x80; RT30xxWriteRFRegister(pAd, RF_R30, (u8)RfReg); RTMPusecDelay(1000); @@ -84,7 +84,7 @@ void NICInitRT3070RFRegisters(struct rt_rtmp_adapter *pAd) } } else if (IS_RT3071(pAd)) { /* Driver should set RF R6 bit6 on before init RF registers */ - RT30xxReadRFRegister(pAd, RF_R06, (u8 *)& RfReg); + RT30xxReadRFRegister(pAd, RF_R06, (u8 *)&RfReg); RfReg |= 0x40; RT30xxWriteRFRegister(pAd, RF_R06, (u8)RfReg); diff --git a/drivers/staging/rt2860/chips/rt3090.c b/drivers/staging/rt2860/chips/rt3090.c index 5927ba4..c2933c6 100644 --- a/drivers/staging/rt2860/chips/rt3090.c +++ b/drivers/staging/rt2860/chips/rt3090.c @@ -53,7 +53,7 @@ void NICInitRT3090RFRegisters(struct rt_rtmp_adapter *pAd) /* Driver should toggle RF R30 bit7 before init RF registers */ u32 RfReg = 0, data; - RT30xxReadRFRegister(pAd, RF_R30, (u8 *)& RfReg); + RT30xxReadRFRegister(pAd, RF_R30, (u8 *)&RfReg); RfReg |= 0x80; RT30xxWriteRFRegister(pAd, RF_R30, (u8)RfReg); RTMPusecDelay(1000); @@ -90,7 +90,7 @@ void NICInitRT3090RFRegisters(struct rt_rtmp_adapter *pAd) } /* Driver should set RF R6 bit6 on before calibration */ - RT30xxReadRFRegister(pAd, RF_R06, (u8 *)& RfReg); + RT30xxReadRFRegister(pAd, RF_R06, (u8 *)&RfReg); RfReg |= 0x40; RT30xxWriteRFRegister(pAd, RF_R06, (u8)RfReg); diff --git a/drivers/staging/rt2860/chips/rt30xx.c b/drivers/staging/rt2860/chips/rt30xx.c index 6e684a3..4367a19 100644 --- a/drivers/staging/rt2860/chips/rt30xx.c +++ b/drivers/staging/rt2860/chips/rt30xx.c @@ -170,8 +170,7 @@ void RTMPFilterCalibration(struct rt_rtmp_adapter *pAd) pAd->Mlme.CaliBW40RfR24 = 0x2F; /*Bit[5] must be 1 for BW 40 */ do { - if (loop == 1) /*BandWidth = 40 MHz */ - { + if (loop == 1) { /*BandWidth = 40 MHz */ /* Write 0x27 to RF_R24 to program filter */ RF_R24_Value = 0x27; RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); @@ -190,8 +189,7 @@ void RTMPFilterCalibration(struct rt_rtmp_adapter *pAd) RT30xxReadRFRegister(pAd, RF_R31, &value); value |= 0x20; RT30xxWriteRFRegister(pAd, RF_R31, value); - } else /*BandWidth = 20 MHz */ - { + } else { /*BandWidth = 20 MHz */ /* Write 0x07 to RF_R24 to program filter */ RF_R24_Value = 0x07; RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value); @@ -353,8 +351,7 @@ void RT30xxLoadRFNormalModeSetup(struct rt_rtmp_adapter *pAd) RT30xxReadRFRegister(pAd, RF_R27, &RFValue); /* TX to RX IQ glitch(RF_R27) has been fixed in RT3070(F). */ /* Raising RF voltage is no longer needed for RT3070(F) */ - if (IS_RT3090(pAd)) /* RT309x and RT3071/72 */ - { + if (IS_RT3090(pAd)) { /* RT309x and RT3071/72 */ if ((pAd->MACVersion & 0xffff) < 0x0211) RFValue = (RFValue & (~0x77)) | 0x3; else -- cgit v0.10.2 From 5d9ffae0828fd6c74d7e2fe79c94a7cef90fe435 Mon Sep 17 00:00:00 2001 From: Gorskin Ilya Date: Sat, 3 Apr 2010 14:29:13 +0600 Subject: Staging: rt2860: fix coding style issue in mac_pci.h, mac_usb.h, rtmp_mac.h, rtmp_phy.h This is a patch to the mac_pci.h, mac_usb.h, rtmp_mac.h, rtmp_phy.h files that fixes up errors found by the checkpatch.pl tool Signed-off-by: Gorskin Ilya Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/chip/mac_pci.h b/drivers/staging/rt2860/chip/mac_pci.h index bc704ac..9f25ef0 100644 --- a/drivers/staging/rt2860/chip/mac_pci.h +++ b/drivers/staging/rt2860/chip/mac_pci.h @@ -147,13 +147,12 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { /* ----------------- Frimware Related MACRO ----------------- */ #define RTMP_WRITE_FIRMWARE(_pAd, _pFwImage, _FwLen) \ - do{ \ + do { \ unsigned long _i, _firm; \ RTMP_IO_WRITE32(_pAd, PBF_SYS_CTRL, 0x10000); \ \ - for(_i=0; _i<_FwLen; _i+=4) \ - { \ - _firm = _pFwImage[_i] + \ + for (_i = 0; _i < _FwLen; _i += 4) { \ + _firm = _pFwImage[_i] + \ (_pFwImage[_i+3] << 24) + \ (_pFwImage[_i+2] << 16) + \ (_pFwImage[_i+1] << 8); \ @@ -165,19 +164,19 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { /* initialize BBP R/W access agent */ \ RTMP_IO_WRITE32(_pAd, H2M_BBP_AGENT, 0); \ RTMP_IO_WRITE32(_pAd, H2M_MAILBOX_CSR, 0); \ - }while(0) + } while (0) /* ----------------- TX Related MACRO ----------------- */ -#define RTMP_START_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) -#define RTMP_STOP_DEQUEUE(pAd, QueIdx, irqFlags) do{}while(0) +#define RTMP_START_DEQUEUE(pAd, QueIdx, irqFlags) do {} while (0) +#define RTMP_STOP_DEQUEUE(pAd, QueIdx, irqFlags) do {} while (0) #define RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, freeNum, pPacket) \ ((freeNum) >= (unsigned long)(pTxBlk->TotalFragNum + RTMP_GET_PACKET_FRAGMENTS(pPacket) + 3)) /* rough estimate we will use 3 more descriptor. */ -#define RTMP_RELEASE_DESC_RESOURCE(pAd, QueIdx) \ - do{}while(0) +#define RTMP_RELEASE_DESC_RESOURCE(pAd, QueIdx) do {} while (0) #define NEED_QUEUE_BACK_FOR_AGG(pAd, QueIdx, freeNum, _TxFrameType) \ - (((freeNum != (TX_RING_SIZE-1)) && (pAd->TxSwQueue[QueIdx].Number == 0)) || (freeNum<3)) + (((freeNum != (TX_RING_SIZE-1)) && \ + (pAd->TxSwQueue[QueIdx].Number == 0)) || (freeNum < 3)) #define HAL_KickOutMgmtTx(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) \ RtmpPCIMgmtKickOut(_pAd, _QueIdx, _pPacket, _pSrcBufVA, _SrcBufLen) @@ -185,19 +184,19 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { #define HAL_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ /* RtmpPCI_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) */ -#define HAL_WriteTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) \ +#define HAL_WriteTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ RtmpPCI_WriteSingleTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) #define HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) \ RtmpPCI_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) -#define HAL_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) \ +#define HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, pFreeNumber) \ RtmpPCI_WriteMultiTxResource(pAd, pTxBlk, frameNum, pFreeNumber) #define HAL_FinalWriteTxResource(_pAd, _pTxBlk, _TotalMPDUSize, _FirstTxIdx) \ RtmpPCI_FinalWriteTxResource(_pAd, _pTxBlk, _TotalMPDUSize, _FirstTxIdx) -#define HAL_LastTxIdx(_pAd, _QueIdx,_LastTxIdx) \ +#define HAL_LastTxIdx(_pAd, _QueIdx, _LastTxIdx) \ /*RtmpPCIDataLastTxIdx(_pAd, _QueIdx,_LastTxIdx) */ #define HAL_KickOutTx(_pAd, _pTxBlk, _QueIdx) \ @@ -259,24 +258,24 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { /* Insert the BA bitmap to ASIC for the Wcid entry */ #define RTMP_ADD_BA_SESSION_TO_ASIC(_pAd, _Aid, _TID) \ - do{ \ + do { \ u32 _Value = 0, _Offset; \ _Offset = MAC_WCID_BASE + (_Aid) * HW_WCID_ENTRY_SIZE + 4; \ RTMP_IO_READ32((_pAd), _Offset, &_Value);\ _Value |= (0x10000<<(_TID)); \ RTMP_IO_WRITE32((_pAd), _Offset, _Value);\ - }while(0) + } while (0) /* Remove the BA bitmap from ASIC for the Wcid entry */ /* bitmap field starts at 0x10000 in ASIC WCID table */ #define RTMP_DEL_BA_SESSION_FROM_ASIC(_pAd, _Wcid, _TID) \ - do{ \ + do { \ u32 _Value = 0, _Offset; \ _Offset = MAC_WCID_BASE + (_Wcid) * HW_WCID_ENTRY_SIZE + 4; \ RTMP_IO_READ32((_pAd), _Offset, &_Value); \ _Value &= (~(0x10000 << (_TID))); \ RTMP_IO_WRITE32((_pAd), _Offset, _Value); \ - }while(0) + } while (0) /* ----------------- Interface Related MACRO ----------------- */ @@ -285,16 +284,16 @@ typedef union _TX_ATTENUATION_CTRL_STRUC { /* Since it use ADAPTER structure, it have to be put after structure definition. */ /* */ #define RTMP_ASIC_INTERRUPT_DISABLE(_pAd) \ - do{ \ + do { \ RTMP_IO_WRITE32((_pAd), INT_MASK_CSR, 0x0); /* 0: disable */ \ RTMP_CLEAR_FLAG((_pAd), fRTMP_ADAPTER_INTERRUPT_ACTIVE); \ - }while(0) + } while (0) #define RTMP_ASIC_INTERRUPT_ENABLE(_pAd)\ - do{ \ + do { \ RTMP_IO_WRITE32((_pAd), INT_MASK_CSR, (_pAd)->int_enable_reg /*DELAYINTMASK*/); /* 1:enable */ \ RTMP_SET_FLAG((_pAd), fRTMP_ADAPTER_INTERRUPT_ACTIVE); \ - }while(0) + } while (0) #define RTMP_IRQ_INIT(pAd) \ { pAd->int_enable_reg = ((DELAYINTMASK) | \ diff --git a/drivers/staging/rt2860/chip/mac_usb.h b/drivers/staging/rt2860/chip/mac_usb.h index 0b67c0b..ed0c0b4 100644 --- a/drivers/staging/rt2860/chip/mac_usb.h +++ b/drivers/staging/rt2860/chip/mac_usb.h @@ -25,7 +25,7 @@ ************************************************************************* Module Name: - mac_usb.h + mac_usb.h Abstract: @@ -46,7 +46,7 @@ #define USB_CYC_CFG 0x02a4 #define BEACON_RING_SIZE 2 -#define MGMTPIPEIDX 0 /* EP6 is highest priority */ +#define MGMTPIPEIDX 0 /* EP6 is highest priority */ #define RTMP_PKT_TAIL_PADDING 11 /* 3(max 4 byte padding) + 4 (last packet padding) + 4 (MaxBulkOutsize align padding) */ @@ -220,53 +220,51 @@ struct rt_rx_context { ******************************************************************************/ #define RTMP_START_DEQUEUE(pAd, QueIdx, irqFlags) \ - do{ \ + do { \ RTMP_IRQ_LOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ - if (pAd->DeQueueRunning[QueIdx]) \ - { \ - RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags);\ + if (pAd->DeQueueRunning[QueIdx]) { \ + RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ DBGPRINT(RT_DEBUG_OFF, ("DeQueueRunning[%d]= TRUE!\n", QueIdx)); \ continue; \ - } \ - else \ - { \ + } else { \ pAd->DeQueueRunning[QueIdx] = TRUE; \ RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags);\ } \ - }while(0) + } while (0) #define RTMP_STOP_DEQUEUE(pAd, QueIdx, irqFlags) \ - do{ \ + do { \ RTMP_IRQ_LOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ pAd->DeQueueRunning[QueIdx] = FALSE; \ RTMP_IRQ_UNLOCK(&pAd->DeQueueLock[QueIdx], irqFlags); \ - }while(0) + } while (0) #define RTMP_HAS_ENOUGH_FREE_DESC(pAd, pTxBlk, freeNum, pPacket) \ (RTUSBFreeDescriptorRequest(pAd, pTxBlk->QueIdx, (pTxBlk->TotalFrameLen + GET_OS_PKT_LEN(pPacket))) == NDIS_STATUS_SUCCESS) #define RTMP_RELEASE_DESC_RESOURCE(pAd, QueIdx) \ - do{}while(0) + do {} while (0) #define NEED_QUEUE_BACK_FOR_AGG(_pAd, _QueIdx, _freeNum, _TxFrameType) \ - ((_TxFrameType == TX_RALINK_FRAME) && (RTUSBNeedQueueBackForAgg(_pAd, _QueIdx))) + ((_TxFrameType == TX_RALINK_FRAME) && \ + (RTUSBNeedQueueBackForAgg(_pAd, _QueIdx))) #define HAL_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ - RtmpUSB_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) + RtmpUSB_WriteSubTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) -#define HAL_WriteTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) \ - RtmpUSB_WriteSingleTxResource(pAd, pTxBlk,bIsLast, pFreeNumber) +#define HAL_WriteTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) \ + RtmpUSB_WriteSingleTxResource(pAd, pTxBlk, bIsLast, pFreeNumber) #define HAL_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) \ - RtmpUSB_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) + RtmpUSB_WriteFragTxResource(pAd, pTxBlk, fragNum, pFreeNumber) -#define HAL_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) \ - RtmpUSB_WriteMultiTxResource(pAd, pTxBlk,frameNum, pFreeNumber) +#define HAL_WriteMultiTxResource(pAd, pTxBlk, frameNum, pFreeNumber) \ + RtmpUSB_WriteMultiTxResource(pAd, pTxBlk, frameNum, pFreeNumber) #define HAL_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, TxIdx) \ - RtmpUSB_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, TxIdx) + RtmpUSB_FinalWriteTxResource(pAd, pTxBlk, totalMPDUSize, TxIdx) -#define HAL_LastTxIdx(pAd, QueIdx,TxIdx) \ +#define HAL_LastTxIdx(pAd, QueIdx, TxIdx) \ /*RtmpUSBDataLastTxIdx(pAd, QueIdx,TxIdx) */ #define HAL_KickOutTx(pAd, pTxBlk, QueIdx) \ @@ -286,8 +284,8 @@ struct rt_rx_context { /* * Device Hardware Interface Related MACRO */ -#define RTMP_IRQ_INIT(pAd) do{}while(0) -#define RTMP_IRQ_ENABLE(pAd) do{}while(0) +#define RTMP_IRQ_INIT(pAd) do {} while (0) +#define RTMP_IRQ_ENABLE(pAd) do {} while (0) /* * MLME Related MACRO @@ -305,8 +303,8 @@ struct rt_rx_context { RTUSBMlmeUp(pAd); } #define RTMP_MLME_RESET_STATE_MACHINE(pAd) \ - MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_RESET_CONF, 0, NULL); \ - RTUSBMlmeUp(pAd); + { MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_RESET_CONF, 0, NULL); \ + RTUSBMlmeUp(pAd); } #define RTMP_HANDLE_COUNTER_MEASURE(_pAd, _pEntry) \ { RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_802_11_COUNTER_MEASURE, _pEntry, sizeof(struct rt_mac_table_entry)); \ @@ -330,12 +328,11 @@ struct rt_rx_context { {\ if ((_pAd)->StaCfg.WindowsPowerMode == Ndis802_11PowerModeFast_PSP) \ MlmeSetPsmBit(_pAd, _val);\ - else \ - { \ + else { \ u16 _psm_val; \ _psm_val = _val; \ RTUSBEnqueueInternalCmd(_pAd, CMDTHREAD_SET_PSM_BIT, &(_psm_val), sizeof(u16)); \ - }\ + } \ } #define RTMP_MLME_RADIO_ON(pAd) \ diff --git a/drivers/staging/rt2860/chip/rtmp_mac.h b/drivers/staging/rt2860/chip/rtmp_mac.h index f6a7258..e8f7172 100644 --- a/drivers/staging/rt2860/chip/rtmp_mac.h +++ b/drivers/staging/rt2860/chip/rtmp_mac.h @@ -154,7 +154,7 @@ typedef union _INT_SOURCE_CSR_STRUC { u32 GPTimer:1; u32 RxCoherent:1; /*bit16 */ u32 TxCoherent:1; - u32 : 14; + u32: 14; } field; u32 word; } INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC; @@ -175,7 +175,7 @@ typedef union _INT_MASK_CSR_STRUC { u32 HccaDmaDone:1; u32 MgmtDmaDone:1; u32 MCUCommandINT:1; - u32 : 20; + u32: 20; u32 RxCoherent:1; u32 TxCoherent:1; } field; @@ -209,7 +209,7 @@ typedef union _WPDMA_RST_IDX_STRUC { u32 RST_DTX_IDX5:1; u32 rsv:10; u32 RST_DRX_IDX0:1; - u32 : 15; + u32: 15; } field; u32 word; } WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC; @@ -448,7 +448,7 @@ typedef union _BBP_CSR_CFG_STRUC { u32 Busy:1; /* 1: ASIC is busy execute BBP programming. */ u32 BBP_PAR_DUR:1; /* 0: 4 MAC clock cycles 1: 8 MAC clock cycles */ u32 BBP_RW_MODE:1; /* 0: use serial mode 1:parallel */ - u32 : 12; + u32: 12; } field; u32 word; } BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC; @@ -494,7 +494,7 @@ typedef union _LED_CFG_STRUC { u32 GLedMode:2; /* green Led Mode */ u32 YLedMode:2; /* yellow Led Mode */ u32 LedPolar:1; /* Led Polarity. 0: active low1: active high */ - u32 : 1; + u32: 1; } field; u32 word; } LED_CFG_STRUC, *PLED_CFG_STRUC; @@ -533,7 +533,7 @@ typedef union _BCN_TIME_CFG_STRUC { u32 TsfSyncMode:2; /* Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode */ u32 bTBTTEnable:1; u32 bBeaconGen:1; /* Enable beacon generator */ - u32 : 3; + u32: 3; u32 TxTimestampCompensate:8; } field; u32 word; @@ -560,7 +560,7 @@ typedef union _AUTO_WAKEUP_STRUC { u32 AutoLeadTime:8; u32 NumofSleepingTbtt:7; /* ForceWake has high privilege than PutToSleep when both set */ u32 EnableAutoWakeup:1; /* 0:sleep, 1:awake */ - u32 : 16; + u32: 16; } field; u32 word; } AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC; @@ -578,7 +578,7 @@ typedef union _EDCA_AC_CFG_STRUC { u32 Aifsn:4; /* # of slot time */ u32 Cwmin:4; /* */ u32 Cwmax:4; /*unit power of 2 */ - u32 : 12; /* */ + u32: 12; /* */ } field; u32 word; } EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC; @@ -751,7 +751,7 @@ typedef union _AUTO_RSP_CFG_STRUC { u32 rsv:1; /* Power bit value in conrtrol frame */ u32 DualCTSEn:1; /* Power bit value in conrtrol frame */ u32 AckCtsPsmBit:1; /* Power bit value in conrtrol frame */ - u32 : 24; + u32: 24; } field; u32 word; } AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC; @@ -981,21 +981,21 @@ typedef union _MPDU_DEN_CNT_STRUC { typedef union _SHAREDKEY_MODE_STRUC { struct { u32 Bss0Key0CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss0Key1CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss0Key2CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss0Key3CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss1Key0CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss1Key1CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss1Key2CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss1Key3CipherAlg:3; - u32 : 1; + u32: 1; } field; u32 word; } SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC; @@ -1103,7 +1103,7 @@ typedef union _RX_FILTR_CFG_STRUC { u32 DropBAR:1; /* */ u32 DropRsvCntlType:1; - u32 : 15; + u32: 15; } field; u32 word; } RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC; @@ -1128,21 +1128,21 @@ typedef union _PHY_CSR4_STRUC { typedef union _SEC_CSR5_STRUC { struct { u32 Bss2Key0CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss2Key1CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss2Key2CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss2Key3CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss3Key0CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss3Key1CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss3Key2CipherAlg:3; - u32 : 1; + u32: 1; u32 Bss3Key3CipherAlg:3; - u32 : 1; + u32: 1; } field; u32 word; } SEC_CSR5_STRUC, *PSEC_CSR5_STRUC; diff --git a/drivers/staging/rt2860/chip/rtmp_phy.h b/drivers/staging/rt2860/chip/rtmp_phy.h index 8b8b0f4..9f924ea 100644 --- a/drivers/staging/rt2860/chip/rtmp_phy.h +++ b/drivers/staging/rt2860/chip/rtmp_phy.h @@ -177,8 +177,7 @@ #ifdef RTMP_MAC_PCI #define RTMP_RF_IO_WRITE32(_A, _V) \ { \ - if ((_A)->bPCIclkOff == FALSE) \ - { \ + if ((_A)->bPCIclkOff == FALSE) { \ PHY_CSR4_STRUC _value; \ unsigned long _busyCnt = 0; \ \ @@ -187,9 +186,8 @@ if (_value.field.Busy == IDLE) \ break; \ _busyCnt++; \ - }while (_busyCnt < MAX_BUSY_COUNT); \ - if(_busyCnt < MAX_BUSY_COUNT) \ - { \ + } while (_busyCnt < MAX_BUSY_COUNT); \ + if (_busyCnt < MAX_BUSY_COUNT) { \ RTMP_IO_WRITE32((_A), RF_CSR_CFG0, (_V)); \ } \ } \ @@ -218,52 +216,46 @@ _bViaMCU: if we need access the bbp via the MCU. */ #define RTMP_BBP_IO_READ8(_pAd, _bbpID, _pV, _bViaMCU) \ - do{ \ - BBP_CSR_CFG_STRUC BbpCsr; \ - int _busyCnt, _secCnt, _regID; \ - \ - _regID = ((_bViaMCU) == TRUE ? H2M_BBP_AGENT : BBP_CSR_CFG); \ - for (_busyCnt=0; _busyCntBbpWriteLatch[_bbpID]; \ - if ((_bViaMCU) == TRUE) \ - { \ + if ((_bViaMCU) == TRUE) { \ RTMP_IO_READ32(_pAd, _regID, &BbpCsr.word); \ BbpCsr.field.Busy = 0; \ RTMP_IO_WRITE32(_pAd, _regID, BbpCsr.word); \ } \ } \ - }while(0) + } while (0) /* This marco used for the BBP read operation which didn't need via MCU. @@ -283,42 +275,35 @@ int i, k; \ BOOLEAN brc; \ BbpCsr.field.Busy = IDLE; \ - if ((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ + if ((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) \ + && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE) \ && ((_A)->bPCIclkOff == FALSE) \ - && ((_A)->brt30xxBanMcuCmd == FALSE)) \ - { \ - for (i=0; ibrt30xxBanMcuCmd == FALSE)) { \ + for (i = 0; i < MAX_BUSY_COUNT; i++) { \ + RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ + if (BbpCsr.field.Busy == BUSY) { \ + continue; \ + } \ + BbpCsr.word = 0; \ + BbpCsr.field.fRead = 1; \ + BbpCsr.field.BBP_RW_MODE = 1; \ + BbpCsr.field.Busy = 1; \ + BbpCsr.field.RegNum = _I; \ + RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ + brc = AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \ + if (brc == TRUE) { \ + for (k = 0; k < MAX_BUSY_COUNT; k++) { \ + RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ + if (BbpCsr.field.Busy == IDLE) \ + break; \ + } \ + if ((BbpCsr.field.Busy == IDLE) && \ + (BbpCsr.field.RegNum == _I)) { \ + *(_pV) = (u8)BbpCsr.field.Value; \ + break; \ + } \ + } else { \ BbpCsr.field.Busy = 0; \ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ } \ @@ -326,46 +311,38 @@ } \ else if (!((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE)) \ - && ((_A)->bPCIclkOff == FALSE)) \ - { \ - for (i=0; ibPCIclkOff == FALSE)) { \ + for (i = 0; i < MAX_BUSY_COUNT; i++) { \ + RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ + if (BbpCsr.field.Busy == BUSY) { \ + continue; \ + } \ + BbpCsr.word = 0; \ + BbpCsr.field.fRead = 1; \ + BbpCsr.field.BBP_RW_MODE = 1; \ + BbpCsr.field.Busy = 1; \ + BbpCsr.field.RegNum = _I; \ + RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ + AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \ + for (k = 0; k < MAX_BUSY_COUNT; k++) { \ + RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ + if (BbpCsr.field.Busy == IDLE) \ + break; \ + } \ + if ((BbpCsr.field.Busy == IDLE) && \ + (BbpCsr.field.RegNum == _I)) { \ + *(_pV) = (u8)BbpCsr.field.Value; \ + break; \ + } \ + } \ + } else { \ DBGPRINT_ERR((" , brt30xxBanMcuCmd = %d, Read BBP %d \n", (_A)->brt30xxBanMcuCmd, (_I))); \ - *(_pV) = (_A)->BbpWriteLatch[_I]; \ - } \ - if ((BbpCsr.field.Busy == BUSY) || ((_A)->bPCIclkOff == TRUE)) \ - { \ - DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \ - *(_pV) = (_A)->BbpWriteLatch[_I]; \ - } \ + *(_pV) = (_A)->BbpWriteLatch[_I]; \ + } \ + if ((BbpCsr.field.Busy == BUSY) || ((_A)->bPCIclkOff == TRUE)) { \ + DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \ + *(_pV) = (_A)->BbpWriteLatch[_I]; \ + } \ } /* @@ -376,43 +353,39 @@ _bViaMCU: if we need access the bbp via the MCU. */ #define RTMP_BBP_IO_WRITE8(_pAd, _bbpID, _pV, _bViaMCU) \ - do{ \ + do { \ BBP_CSR_CFG_STRUC BbpCsr; \ - int _busyCnt, _regID; \ - \ + int _busyCnt, _regID; \ + \ _regID = ((_bViaMCU) == TRUE ? H2M_BBP_AGENT : BBP_CSR_CFG); \ - for (_busyCnt=0; _busyCntOpMode == OPMODE_AP) \ - RTMPusecDelay(1000); \ - } \ - (_pAd)->BbpWriteLatch[_bbpID] = _pV; \ - break; \ - } \ - if (_busyCnt == MAX_BUSY_COUNT) \ - { \ - DBGPRINT_ERR(("BBP write R%d fail\n", _bbpID)); \ - if((_bViaMCU) == TRUE) \ - { \ + if (BbpCsr.field.Busy == BUSY) \ + continue; \ + BbpCsr.word = 0; \ + BbpCsr.field.fRead = 0; \ + BbpCsr.field.BBP_RW_MODE = 1; \ + BbpCsr.field.Busy = 1; \ + BbpCsr.field.Value = _pV; \ + BbpCsr.field.RegNum = _bbpID; \ + RTMP_IO_WRITE32((_pAd), BBP_CSR_CFG, BbpCsr.word); \ + if ((_bViaMCU) == TRUE) { \ + AsicSendCommandToMcu(_pAd, 0x80, 0xff, 0x0, 0x0); \ + if ((_pAd)->OpMode == OPMODE_AP) \ + RTMPusecDelay(1000); \ + } \ + (_pAd)->BbpWriteLatch[_bbpID] = _pV; \ + break; \ + } \ + if (_busyCnt == MAX_BUSY_COUNT) { \ + DBGPRINT_ERR(("BBP write R%d fail\n", _bbpID)); \ + if ((_bViaMCU) == TRUE) { \ RTMP_IO_READ32(_pAd, H2M_BBP_AGENT, &BbpCsr.word); \ - BbpCsr.field.Busy = 0; \ + BbpCsr.field.Busy = 0; \ RTMP_IO_WRITE32(_pAd, H2M_BBP_AGENT, BbpCsr.word); \ - } \ - } \ - }while(0) + } \ + } \ + } while (0) /* This marco used for the BBP write operation which didn't need via MCU. @@ -426,25 +399,22 @@ will use this function too and didn't access the bbp register via the MCU. */ /* Write BBP register by register's ID & value */ -#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ -{ \ - BBP_CSR_CFG_STRUC BbpCsr; \ - int BusyCnt = 0; \ +#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \ +{ \ + BBP_CSR_CFG_STRUC BbpCsr; \ + int BusyCnt = 0; \ BOOLEAN brc; \ - if (_I < MAX_NUM_OF_BBP_LATCH) \ - { \ - if ((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ + if (_I < MAX_NUM_OF_BBP_LATCH) { \ + if ((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) \ + && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE) \ && ((_A)->bPCIclkOff == FALSE) \ - && ((_A)->brt30xxBanMcuCmd == FALSE)) \ - { \ - if (_A->AccessBBPFailCount > 20) \ - { \ - AsicResetBBPAgent(_A); \ - _A->AccessBBPFailCount = 0; \ - } \ - for (BusyCnt=0; BusyCntbrt30xxBanMcuCmd == FALSE)) { \ + if (_A->AccessBBPFailCount > 20) { \ + AsicResetBBPAgent(_A); \ + _A->AccessBBPFailCount = 0; \ + } \ + for (BusyCnt = 0; BusyCnt < MAX_BUSY_COUNT; BusyCnt++) { \ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ if (BbpCsr.field.Busy == BUSY) \ continue; \ @@ -456,29 +426,24 @@ BbpCsr.field.RegNum = _I; \ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ brc = AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \ - if (brc == TRUE) \ - { \ + if (brc == TRUE) { \ (_A)->BbpWriteLatch[_I] = _V; \ - } \ - else \ - { \ + } else { \ BbpCsr.field.Busy = 0; \ RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \ } \ break; \ } \ } \ - else if (!((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ + else if (!((IS_RT3090((_A)) || IS_RT3572((_A)) || IS_RT3390((_A))) \ + && ((_A)->StaCfg.PSControl.field.rt30xxPowerMode == 3) \ && ((_A)->StaCfg.PSControl.field.EnableNewPS == TRUE)) \ - && ((_A)->bPCIclkOff == FALSE)) \ - { \ - if (_A->AccessBBPFailCount > 20) \ - { \ - AsicResetBBPAgent(_A); \ - _A->AccessBBPFailCount = 0; \ - } \ - for (BusyCnt=0; BusyCntbPCIclkOff == FALSE)) { \ + if (_A->AccessBBPFailCount > 20) { \ + AsicResetBBPAgent(_A); \ + _A->AccessBBPFailCount = 0; \ + } \ + for (BusyCnt = 0; BusyCnt < MAX_BUSY_COUNT; BusyCnt++) { \ RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \ if (BbpCsr.field.Busy == BUSY) \ continue; \ @@ -493,20 +458,15 @@ (_A)->BbpWriteLatch[_I] = _V; \ break; \ } \ - } \ - else \ - { \ + } else { \ DBGPRINT_ERR((" brt30xxBanMcuCmd = %d. Write BBP %d \n", (_A)->brt30xxBanMcuCmd, (_I))); \ } \ - if ((BusyCnt == MAX_BUSY_COUNT) || ((_A)->bPCIclkOff == TRUE)) \ - { \ - if (BusyCnt == MAX_BUSY_COUNT) \ + if ((BusyCnt == MAX_BUSY_COUNT) || ((_A)->bPCIclkOff == TRUE)) { \ + if (BusyCnt == MAX_BUSY_COUNT) \ (_A)->AccessBBPFailCount++; \ - DBGPRINT_ERR(("BBP write R%d=0x%x fail. BusyCnt= %d.bPCIclkOff = %d. \n", _I, BbpCsr.word, BusyCnt, (_A)->bPCIclkOff )); \ + DBGPRINT_ERR(("BBP write R%d=0x%x fail. BusyCnt= %d.bPCIclkOff = %d. \n", _I, BbpCsr.word, BusyCnt, (_A)->bPCIclkOff)); \ } \ - } \ - else \ - { \ + } else { \ DBGPRINT_ERR(("****** BBP_Write_Latch Buffer exceeds max boundry ****** \n")); \ } \ } @@ -522,7 +482,7 @@ #ifdef RT30xx #define RTMP_ASIC_MMPS_DISABLE(_pAd) \ - do{ \ + do { \ u32 _macData; \ u8 _bbpData = 0; \ /* disable MMPS BBP control register */ \ @@ -534,10 +494,10 @@ RTMP_IO_READ32(_pAd, 0x1210, &_macData); \ _macData &= ~(0x09); /*bit 0, 3*/ \ RTMP_IO_WRITE32(_pAd, 0x1210, _macData); \ - }while(0) + } while (0) #define RTMP_ASIC_MMPS_ENABLE(_pAd) \ - do{ \ + do { \ u32 _macData; \ u8 _bbpData = 0; \ /* enable MMPS BBP control register */ \ @@ -549,7 +509,7 @@ RTMP_IO_READ32(_pAd, 0x1210, &_macData); \ _macData |= (0x09); /*bit 0, 3*/ \ RTMP_IO_WRITE32(_pAd, 0x1210, _macData); \ - }while(0) + } while (0) #endif /* RT30xx // */ -- cgit v0.10.2 From a3327f07987468794f4afc602790aca6856e1a5a Mon Sep 17 00:00:00 2001 From: Trey Evans Date: Mon, 19 Apr 2010 16:15:37 -0400 Subject: Staging: rt2860: fix usb_main_dev.c style errors Correct several style errors related to pointers in usb_main_dev.c. Signed-off-by: Trey Evans Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c index 1873a79..abe9f24 100644 --- a/drivers/staging/rt2860/usb_main_dev.c +++ b/drivers/staging/rt2860/usb_main_dev.c @@ -153,7 +153,7 @@ static void rt2870_disconnect(struct usb_device *dev, struct rt_rtmp_adapter *pA static int __devinit rt2870_probe(IN struct usb_interface *intf, IN struct usb_device *usb_dev, IN const struct usb_device_id *dev_id, - struct rt_rtmp_adapter ** ppAd); + struct rt_rtmp_adapter **ppAd); #ifndef PF_NOFREEZE #define PF_NOFREEZE 0 @@ -801,7 +801,7 @@ static void rt2870_disconnect(struct usb_device *dev, struct rt_rtmp_adapter *pA static int __devinit rt2870_probe(IN struct usb_interface *intf, IN struct usb_device *usb_dev, IN const struct usb_device_id *dev_id, - struct rt_rtmp_adapter ** ppAd) + struct rt_rtmp_adapter **ppAd) { struct net_device *net_dev = NULL; struct rt_rtmp_adapter *pAd = (struct rt_rtmp_adapter *)NULL; -- cgit v0.10.2 From fdb2fd14c71e51472e1025d58b0322f75503f8c3 Mon Sep 17 00:00:00 2001 From: Neil Munro Date: Tue, 20 Apr 2010 01:06:33 +0100 Subject: Staging: rt2860: rtmp.h: Fixed all bar one error. All simple errors have been removed, including +80 line character limits and various pointer syntax isues. Signed-off-by: Neil Munro Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h index 4401a55..ab525ee 100644 --- a/drivers/staging/rt2860/rtmp.h +++ b/drivers/staging/rt2860/rtmp.h @@ -181,8 +181,7 @@ struct rt_queue_header { (QueueHeader)->Head; \ { \ struct rt_queue_entry *pNext; \ - if ((QueueHeader)->Head != NULL) \ - { \ + if ((QueueHeader)->Head != NULL) { \ pNext = (QueueHeader)->Head->Next; \ (QueueHeader)->Head->Next = NULL; \ (QueueHeader)->Head = pNext; \ @@ -242,9 +241,9 @@ struct rt_queue_header { #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F)) #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0) -#define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F)) -#define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F)) -#define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0) +#define CLIENT_STATUS_SET_FLAG(_pEntry, _F) ((_pEntry)->ClientStatusFlags |= (_F)) +#define CLIENT_STATUS_CLEAR_FLAG(_pEntry, _F) ((_pEntry)->ClientStatusFlags &= ~(_F)) +#define CLIENT_STATUS_TEST_FLAG(_pEntry, _F) (((_pEntry)->ClientStatusFlags & (_F)) != 0) #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F)) #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F)) @@ -279,13 +278,13 @@ struct rt_queue_header { _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \ _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \ _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \ - NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(u8)* 16);\ + NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(u8) * 16);\ } #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \ { \ _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (u8)(_pHtCapability->HtCapInfo.AMsduSize); \ - _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (u8)(_pHtCapability->HtCapInfo.MimoPs); \ + _pAd->MacTab.Content[BSSID_WCID].MmpsMode = (u8)(_pHtCapability->HtCapInfo.MimoPs); \ _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (u8)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \ } @@ -349,17 +348,14 @@ struct rt_rtmp_sg_list { /* if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required */ #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \ { \ - if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \ - { \ + if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) { \ _pExtraLlcSnapEncap = SNAP_802_1H; \ if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \ - NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \ - { \ + NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) { \ _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \ } \ } \ - else \ - { \ + else { \ _pExtraLlcSnapEncap = NULL; \ } \ } @@ -367,17 +363,14 @@ struct rt_rtmp_sg_list { /* New Define for new Tx Path. */ #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \ { \ - if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \ - { \ + if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) { \ _pExtraLlcSnapEncap = SNAP_802_1H; \ if (NdisEqualMemory(IPX, _pBufVA, 2) || \ - NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \ - { \ + NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) { \ _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \ } \ } \ - else \ - { \ + else { \ _pExtraLlcSnapEncap = NULL; \ } \ } @@ -399,33 +392,29 @@ struct rt_rtmp_sg_list { #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \ { \ char LLC_Len[2]; \ - \ + \ _pRemovedLLCSNAP = NULL; \ if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \ - NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \ - { \ - u8 *pProto = _pData + 6; \ - \ - if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \ - NdisEqualMemory(SNAP_802_1H, _pData, 6)) \ - { \ - LLC_Len[0] = (u8)(_DataSize / 256); \ - LLC_Len[1] = (u8)(_DataSize % 256); \ - MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ - } \ - else \ - { \ - MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \ - _pRemovedLLCSNAP = _pData; \ - _DataSize -= LENGTH_802_1_H; \ - _pData += LENGTH_802_1_H; \ - } \ + NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) { \ + u8 *pProto = _pData + 6; \ + \ + if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \ + NdisEqualMemory(SNAP_802_1H, _pData, 6)) { \ + LLC_Len[0] = (u8)(_DataSize / 256); \ + LLC_Len[1] = (u8)(_DataSize % 256); \ + MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ + } \ + else { \ + MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \ + _pRemovedLLCSNAP = _pData; \ + _DataSize -= LENGTH_802_1_H; \ + _pData += LENGTH_802_1_H; \ + } \ } \ - else \ - { \ - LLC_Len[0] = (u8)(_DataSize / 256); \ - LLC_Len[1] = (u8)(_DataSize % 256); \ - MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ + else { \ + LLC_Len[0] = (u8)(_DataSize / 256); \ + LLC_Len[1] = (u8)(_DataSize % 256); \ + MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \ } \ } @@ -438,19 +427,19 @@ struct rt_rtmp_sg_list { u32 High32TSF, Low32TSF; \ RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \ RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \ - MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (u8)_Rssi0, (u8)_Rssi1,(u8)_Rssi2,_FrameSize, _pFrame, (u8)_PlcpSignal); \ + MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (u8)_Rssi0, (u8)_Rssi1, (u8)_Rssi2, _FrameSize, _pFrame, (u8)_PlcpSignal); \ } #endif /* RTMP_MAC_PCI // */ #ifdef RTMP_MAC_USB #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ { \ - u32 High32TSF=0, Low32TSF=0; \ - MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (u8)_Rssi0, (u8)_Rssi1,(u8)_Rssi2,_FrameSize, _pFrame, (u8)_PlcpSignal); \ + u32 High32TSF = 0, Low32TSF = 0; \ + MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (u8)_Rssi0, (u8)_Rssi1, (u8)_Rssi2, _FrameSize, _pFrame, (u8)_PlcpSignal); \ } #endif /* RTMP_MAC_USB // */ -#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((void *)(pAddr1), (void *)(pAddr2), MAC_ADDR_LEN) -#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1))) +#define MAC_ADDR_EQUAL(pAddr1, pAddr2) RTMPEqualMemory((void *)(pAddr1), (void *)(pAddr2), MAC_ADDR_LEN) +#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1 == len2) && (RTMPEqualMemory(ssid1, ssid2, len1))) /* */ /* Check if it is Japan W53(ch52,56,60,64) channel. */ @@ -1054,7 +1043,7 @@ typedef union _BACAP_STRUC { u32 MMPSmode:2; /* MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable */ u32 bHtAdhoc:1; /* adhoc can use ht rate. */ u32 b2040CoexistScanSup:1; /*As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz. */ - u32 : 4; + u32: 4; } field; u32 word; } BACAP_STRUC, *PBACAP_STRUC; @@ -1334,7 +1323,7 @@ struct rt_common_config { BOOLEAN PSPXlink; /* 0: Disable. 1: Enable */ -#if defined(RT305x)||defined(RT30xx) +#if defined(RT305x) || defined(RT30xx) /* request by Gary, for High Power issue */ u8 HighPowerPatchDisabled; #endif @@ -2169,8 +2158,8 @@ struct rt_rtmp_adapter { **************************************************************************/ struct rt_rx_blk { RT28XX_RXD_STRUC RxD; - struct rt_rxwi * pRxWI; - struct rt_header_802_11 * pHeader; + struct rt_rxwi *pRxWI; + struct rt_header_802_11 *pHeader; void *pRxPacket; u8 *pData; u16 DataSize; @@ -2268,7 +2257,7 @@ struct rt_tx_blk { * Other static inline function definitions **************************************************************************/ static inline void ConvertMulticastIP2MAC(u8 *pIpAddr, - u8 ** ppMacAddr, + u8 **ppMacAddr, u16 ProtoType) { if (pIpAddr == NULL) @@ -2310,7 +2299,7 @@ char *GetBW(int BW); /* Private routines in rtmp_init.c */ /* */ int RTMPAllocAdapterBlock(void *handle, - struct rt_rtmp_adapter * * ppAdapter); + struct rt_rtmp_adapter **ppAdapter); int RTMPAllocTxRxRingMemory(struct rt_rtmp_adapter *pAd); @@ -2431,11 +2420,11 @@ void ORIBATimerTimeout(struct rt_rtmp_adapter *pAd); void SendRefreshBAR(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry); void ActHeaderInit(struct rt_rtmp_adapter *pAd, - struct rt_header_802_11 * pHdr80211, + struct rt_header_802_11 *pHdr80211, u8 *Addr1, u8 *Addr2, u8 *Addr3); void BarHeaderInit(struct rt_rtmp_adapter *pAd, - struct rt_frame_bar * pCntlBar, u8 *pDA, u8 *pSA); + struct rt_frame_bar *pCntlBar, u8 *pDA, u8 *pSA); void InsertActField(struct rt_rtmp_adapter *pAd, u8 *pFrameBuf, @@ -2443,7 +2432,7 @@ void InsertActField(struct rt_rtmp_adapter *pAd, BOOLEAN CntlEnqueueForRecv(struct rt_rtmp_adapter *pAd, unsigned long Wcid, - unsigned long MsgLen, struct rt_frame_ba_req * pMsg); + unsigned long MsgLen, struct rt_frame_ba_req *pMsg); /* */ /* Private routines in rtmp_data.c */ @@ -2511,7 +2500,7 @@ int MlmeDataHardTransmit(struct rt_rtmp_adapter *pAd, u8 QueIdx, void *pPacket); void RTMPWriteTxDescriptor(struct rt_rtmp_adapter *pAd, - struct rt_txd * pTxD, IN BOOLEAN bWIV, u8 QSEL); + struct rt_txd *pTxD, IN BOOLEAN bWIV, u8 QSEL); #endif /* RTMP_MAC_PCI // */ u16 RTMPCalcDuration(struct rt_rtmp_adapter *pAd, u8 Rate, unsigned long Size); @@ -2527,10 +2516,10 @@ void RTMPWriteTxWI(struct rt_rtmp_adapter *pAd, struct rt_txwi * pTxWI, IN BOOLE IN BOOLEAN CfAck, IN HTTRANSMIT_SETTING * pTransmit); void RTMPWriteTxWI_Data(struct rt_rtmp_adapter *pAd, - struct rt_txwi * pTxWI, struct rt_tx_blk *pTxBlk); + struct rt_txwi *pTxWI, struct rt_tx_blk *pTxBlk); void RTMPWriteTxWI_Cache(struct rt_rtmp_adapter *pAd, - struct rt_txwi * pTxWI, struct rt_tx_blk *pTxBlk); + struct rt_txwi *pTxWI, struct rt_tx_blk *pTxBlk); void RTMPSuspendMsduTransmission(struct rt_rtmp_adapter *pAd); @@ -2573,10 +2562,10 @@ void WpaStaGroupKeySetting(struct rt_rtmp_adapter *pAd); int RTMPCloneNdisPacket(struct rt_rtmp_adapter *pAd, IN BOOLEAN pInsAMSDUHdr, void *pInPacket, - void ** ppOutPacket); + void **ppOutPacket); int RTMPAllocateNdisPacket(struct rt_rtmp_adapter *pAd, - void ** pPacket, + void **pPacket, u8 *pHeader, u32 HeaderLen, u8 *pData, u32 DataLen); @@ -2717,7 +2706,7 @@ BOOLEAN AsicCheckCommanOk(struct rt_rtmp_adapter *pAd, u8 Command); void MacAddrRandomBssid(struct rt_rtmp_adapter *pAd, u8 *pAddr); void MgtMacHeaderInit(struct rt_rtmp_adapter *pAd, - struct rt_header_802_11 * pHdr80211, + struct rt_header_802_11 *pHdr80211, u8 SubType, u8 ToDs, u8 *pDA, u8 *pBssid); @@ -2796,7 +2785,7 @@ void MlmeQueueDestroy(struct rt_mlme_queue *Queue); BOOLEAN MlmeEnqueue(struct rt_rtmp_adapter *pAd, unsigned long Machine, - unsigned long MsgType, unsigned long MsgLen, void * Msg); + unsigned long MsgType, unsigned long MsgLen, void *Msg); BOOLEAN MlmeEnqueueForRecv(struct rt_rtmp_adapter *pAd, unsigned long Wcid, @@ -2807,7 +2796,7 @@ BOOLEAN MlmeEnqueueForRecv(struct rt_rtmp_adapter *pAd, u8 Rssi2, unsigned long MsgLen, void *Msg, u8 Signal); -BOOLEAN MlmeDequeue(struct rt_mlme_queue *Queue, struct rt_mlme_queue_elem ** Elem); +BOOLEAN MlmeDequeue(struct rt_mlme_queue *Queue, struct rt_mlme_queue_elem **Elem); void MlmeRestartStateMachine(struct rt_rtmp_adapter *pAd); @@ -2816,8 +2805,8 @@ BOOLEAN MlmeQueueEmpty(struct rt_mlme_queue *Queue); BOOLEAN MlmeQueueFull(struct rt_mlme_queue *Queue); BOOLEAN MsgTypeSubst(struct rt_rtmp_adapter *pAd, - struct rt_frame_802_11 * pFrame, - int * Machine, int * MsgType); + struct rt_frame_802_11 *pFrame, + int *Machine, int *MsgType); void StateMachineInit(struct rt_state_machine *Sm, IN STATE_MACHINE_FUNC Trans[], @@ -2895,8 +2884,8 @@ void AssocPostProc(struct rt_rtmp_adapter *pAd, u8 ExtRate[], u8 ExtRateLen, struct rt_edca_parm *pEdcaParm, - struct rt_ht_capability_ie * pHtCapability, - u8 HtCapabilityLen, struct rt_add_ht_info_ie * pAddHtInfo); + struct rt_ht_capability_ie *pHtCapability, + u8 HtCapabilityLen, struct rt_add_ht_info_ie *pAddHtInfo); void AuthStateMachineInit(struct rt_rtmp_adapter *pAd, struct rt_state_machine *sm, OUT STATE_MACHINE_FUNC Trans[]); @@ -2928,7 +2917,7 @@ void AuthRspStateMachineInit(struct rt_rtmp_adapter *pAd, void PeerDeauthAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem); void PeerAuthSimpleRspGenAndSend(struct rt_rtmp_adapter *pAd, - struct rt_header_802_11 * pHdr80211, + struct rt_header_802_11 *pHdr80211, u16 Alg, u16 Seq, u16 Reason, u16 Status); @@ -3054,133 +3043,133 @@ void ScanNextChannel(struct rt_rtmp_adapter *pAd); unsigned long MakeIbssBeacon(struct rt_rtmp_adapter *pAd); BOOLEAN MlmeScanReqSanity(struct rt_rtmp_adapter *pAd, - void * Msg, + void *Msg, unsigned long MsgLen, - u8 * BssType, + u8 *BssType, char ssid[], - u8 * SsidLen, u8 * ScanType); + u8 *SsidLen, u8 *ScanType); BOOLEAN PeerBeaconAndProbeRspSanity(struct rt_rtmp_adapter *pAd, - void * Msg, + void *Msg, unsigned long MsgLen, u8 MsgChannel, u8 *pAddr2, u8 *pBssid, char Ssid[], - u8 * pSsidLen, - u8 * pBssType, - u16 * pBeaconPeriod, - u8 * pChannel, - u8 * pNewChannel, + u8 *pSsidLen, + u8 *pBssType, + u16 *pBeaconPeriod, + u8 *pChannel, + u8 *pNewChannel, OUT LARGE_INTEGER * pTimestamp, - struct rt_cf_parm * pCfParm, - u16 * pAtimWin, - u16 * pCapabilityInfo, - u8 * pErp, - u8 * pDtimCount, - u8 * pDtimPeriod, - u8 * pBcastFlag, - u8 * pMessageToMe, + struct rt_cf_parm *pCfParm, + u16 *pAtimWin, + u16 *pCapabilityInfo, + u8 *pErp, + u8 *pDtimCount, + u8 *pDtimPeriod, + u8 *pBcastFlag, + u8 *pMessageToMe, u8 SupRate[], - u8 * pSupRateLen, + u8 *pSupRateLen, u8 ExtRate[], - u8 * pExtRateLen, - u8 * pCkipFlag, - u8 * pAironetCellPowerLimit, + u8 *pExtRateLen, + u8 *pCkipFlag, + u8 *pAironetCellPowerLimit, struct rt_edca_parm *pEdcaParm, struct rt_qbss_load_parm *pQbssLoad, struct rt_qos_capability_parm *pQosCapability, - unsigned long * pRalinkIe, - u8 * pHtCapabilityLen, - u8 * pPreNHtCapabilityLen, - struct rt_ht_capability_ie * pHtCapability, - u8 * AddHtInfoLen, - struct rt_add_ht_info_ie * AddHtInfo, - u8 * NewExtChannel, - u16 * LengthVIE, + unsigned long *pRalinkIe, + u8 *pHtCapabilityLen, + u8 *pPreNHtCapabilityLen, + struct rt_ht_capability_ie *pHtCapability, + u8 *AddHtInfoLen, + struct rt_add_ht_info_ie *AddHtInfo, + u8 *NewExtChannel, + u16 *LengthVIE, struct rt_ndis_802_11_variable_ies *pVIE); BOOLEAN PeerAddBAReqActionSanity(struct rt_rtmp_adapter *pAd, - void * pMsg, + void *pMsg, unsigned long MsgLen, u8 *pAddr2); BOOLEAN PeerAddBARspActionSanity(struct rt_rtmp_adapter *pAd, - void * pMsg, unsigned long MsgLen); + void *pMsg, unsigned long MsgLen); BOOLEAN PeerDelBAActionSanity(struct rt_rtmp_adapter *pAd, - u8 Wcid, void * pMsg, unsigned long MsgLen); + u8 Wcid, void *pMsg, unsigned long MsgLen); BOOLEAN MlmeAssocReqSanity(struct rt_rtmp_adapter *pAd, - void * Msg, + void *Msg, unsigned long MsgLen, u8 *pApAddr, - u16 * CapabilityInfo, - unsigned long * Timeout, u16 * ListenIntv); + u16 *CapabilityInfo, + unsigned long *Timeout, u16 *ListenIntv); BOOLEAN MlmeAuthReqSanity(struct rt_rtmp_adapter *pAd, - void * Msg, + void *Msg, unsigned long MsgLen, u8 *pAddr, - unsigned long * Timeout, u16 * Alg); + unsigned long *Timeout, u16 *Alg); BOOLEAN MlmeStartReqSanity(struct rt_rtmp_adapter *pAd, - void * Msg, + void *Msg, unsigned long MsgLen, - char Ssid[], u8 * Ssidlen); + char Ssid[], u8 *Ssidlen); BOOLEAN PeerAuthSanity(struct rt_rtmp_adapter *pAd, - void * Msg, + void *Msg, unsigned long MsgLen, u8 *pAddr, - u16 * Alg, - u16 * Seq, - u16 * Status, char ChlgText[]); + u16 *Alg, + u16 *Seq, + u16 *Status, char ChlgText[]); -BOOLEAN PeerAssocRspSanity(struct rt_rtmp_adapter *pAd, void * pMsg, unsigned long MsgLen, u8 *pAddr2, u16 * pCapabilityInfo, u16 * pStatus, u16 * pAid, u8 SupRate[], u8 * pSupRateLen, u8 ExtRate[], u8 * pExtRateLen, struct rt_ht_capability_ie * pHtCapability, struct rt_add_ht_info_ie * pAddHtInfo, /* AP might use this additional ht info IE */ - u8 * pHtCapabilityLen, - u8 * pAddHtInfoLen, - u8 * pNewExtChannelOffset, - struct rt_edca_parm *pEdcaParm, u8 * pCkipFlag); +BOOLEAN PeerAssocRspSanity(struct rt_rtmp_adapter *pAd, void *pMsg, unsigned long MsgLen, u8 *pAddr2, u16 *pCapabilityInfo, u16 *pStatus, u16 *pAid, u8 SupRate[], u8 *pSupRateLen, u8 ExtRate[], u8 *pExtRateLen, struct rt_ht_capability_ie *pHtCapability, struct rt_add_ht_info_ie *pAddHtInfo, /* AP might use this additional ht info IE */ + u8 *pHtCapabilityLen, + u8 *pAddHtInfoLen, + u8 *pNewExtChannelOffset, + struct rt_edca_parm *pEdcaParm, u8 *pCkipFlag); BOOLEAN PeerDisassocSanity(struct rt_rtmp_adapter *pAd, - void * Msg, + void *Msg, unsigned long MsgLen, - u8 *pAddr2, u16 * Reason); + u8 *pAddr2, u16 *Reason); BOOLEAN PeerWpaMessageSanity(struct rt_rtmp_adapter *pAd, - struct rt_eapol_packet * pMsg, + struct rt_eapol_packet *pMsg, unsigned long MsgLen, u8 MsgType, struct rt_mac_table_entry *pEntry); BOOLEAN PeerDeauthSanity(struct rt_rtmp_adapter *pAd, - void * Msg, + void *Msg, unsigned long MsgLen, - u8 *pAddr2, u16 * Reason); + u8 *pAddr2, u16 *Reason); BOOLEAN PeerProbeReqSanity(struct rt_rtmp_adapter *pAd, - void * Msg, + void *Msg, unsigned long MsgLen, u8 *pAddr2, - char Ssid[], u8 * pSsidLen); + char Ssid[], u8 *pSsidLen); -BOOLEAN GetTimBit(char * Ptr, +BOOLEAN GetTimBit(char *Ptr, u16 Aid, - u8 * TimLen, - u8 * BcastFlag, - u8 * DtimCount, - u8 * DtimPeriod, u8 * MessageToMe); + u8 *TimLen, + u8 *BcastFlag, + u8 *DtimCount, + u8 *DtimPeriod, u8 *MessageToMe); u8 ChannelSanity(struct rt_rtmp_adapter *pAd, u8 channel); NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(struct rt_bss_entry *pBss); BOOLEAN MlmeDelBAReqSanity(struct rt_rtmp_adapter *pAd, - void * Msg, unsigned long MsgLen); + void *Msg, unsigned long MsgLen); BOOLEAN MlmeAddBAReqSanity(struct rt_rtmp_adapter *pAd, - void * Msg, unsigned long MsgLen, u8 *pAddr2); + void *Msg, unsigned long MsgLen, u8 *pAddr2); -unsigned long MakeOutgoingFrame(u8 * Buffer, unsigned long * Length, ...); +unsigned long MakeOutgoingFrame(u8 *Buffer, unsigned long *Length, ...); void LfsrInit(struct rt_rtmp_adapter *pAd, unsigned long Seed); @@ -3215,7 +3204,7 @@ void MlmeSetTxRate(struct rt_rtmp_adapter *pAd, void MlmeSelectTxRateTable(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry, - u8 ** ppTable, + u8 **ppTable, u8 *pTableSize, u8 *pInitTxRateIdx); void MlmeCalculateChannelQuality(struct rt_rtmp_adapter *pAd, @@ -3235,15 +3224,15 @@ void MlmeUpdateTxRates(struct rt_rtmp_adapter *pAd, void MlmeUpdateHtTxRates(struct rt_rtmp_adapter *pAd, u8 apidx); void RTMPCheckRates(struct rt_rtmp_adapter *pAd, - IN u8 SupRate[], IN u8 * SupRateLen); + IN u8 SupRate[], IN u8 *SupRateLen); BOOLEAN RTMPCheckChannel(struct rt_rtmp_adapter *pAd, u8 CentralChannel, u8 Channel); BOOLEAN RTMPCheckHt(struct rt_rtmp_adapter *pAd, u8 Wcid, - struct rt_ht_capability_ie * pHtCapability, - struct rt_add_ht_info_ie * pAddHtInfo); + struct rt_ht_capability_ie *pHtCapability, + struct rt_add_ht_info_ie *pAddHtInfo); void StaQuickResponeForRateUpExec(void *SystemSpecific1, void *FunctionContext, @@ -3268,7 +3257,7 @@ int set_eFusedump_Proc(struct rt_rtmp_adapter *pAd, char *arg); void eFusePhysicalReadRegisters(struct rt_rtmp_adapter *pAd, u16 Offset, - u16 Length, u16 * pData); + u16 Length, u16 *pData); int RtmpEfuseSupportCheck(struct rt_rtmp_adapter *pAd); @@ -3391,7 +3380,7 @@ int RT_CfgSetWepKey(struct rt_rtmp_adapter *pAd, int RT_CfgSetWPAPSKKey(struct rt_rtmp_adapter *pAd, char *keyString, - u8 * pHashStr, + u8 *pHashStr, int hashStrLen, u8 *pPMKBuf); /* */ @@ -3402,9 +3391,9 @@ void RTMPWPARemoveAllKeys(struct rt_rtmp_adapter *pAd); void RTMPSetPhyMode(struct rt_rtmp_adapter *pAd, unsigned long phymode); void RTMPUpdateHTIE(struct rt_ht_capability *pRtHt, - u8 * pMcsSet, - struct rt_ht_capability_ie * pHtCapability, - struct rt_add_ht_info_ie * pAddHtInfo); + u8 *pMcsSet, + struct rt_ht_capability_ie *pHtCapability, + struct rt_add_ht_info_ie *pAddHtInfo); void RTMPAddWcidAttributeEntry(struct rt_rtmp_adapter *pAd, u8 BssIdx, @@ -3436,22 +3425,22 @@ void RTMPToWirelessSta(struct rt_rtmp_adapter *pAd, u32 DataLen, IN BOOLEAN bClearFrame); void WpaDerivePTK(struct rt_rtmp_adapter *pAd, - u8 * PMK, - u8 * ANonce, - u8 * AA, - u8 * SNonce, - u8 * SA, u8 * output, u32 len); + u8 *PMK, + u8 *ANonce, + u8 *AA, + u8 *SNonce, + u8 *SA, u8 *output, u32 len); -void GenRandom(struct rt_rtmp_adapter *pAd, u8 * macAddr, u8 * random); +void GenRandom(struct rt_rtmp_adapter *pAd, u8 *macAddr, u8 *random); BOOLEAN RTMPCheckWPAframe(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry, u8 *pData, unsigned long DataByteCount, u8 FromWhichBSSID); -void AES_GTK_KEY_UNWRAP(u8 * key, - u8 * plaintext, - u32 c_len, u8 * ciphertext); +void AES_GTK_KEY_UNWRAP(u8 *key, + u8 *plaintext, + u32 c_len, u8 *ciphertext); BOOLEAN RTMPParseEapolKeyData(struct rt_rtmp_adapter *pAd, u8 *pKeyData, @@ -3464,11 +3453,11 @@ void ConstructEapolMsg(struct rt_mac_table_entry *pEntry, u8 GroupKeyWepStatus, u8 MsgType, u8 DefaultKeyIdx, - u8 * KeyNonce, - u8 * TxRSC, - u8 * GTK, - u8 * RSNIE, - u8 RSNIE_Len, struct rt_eapol_packet * pMsg); + u8 *KeyNonce, + u8 *TxRSC, + u8 *GTK, + u8 *RSNIE, + u8 RSNIE_Len, struct rt_eapol_packet *pMsg); int RTMPSoftDecryptBroadCastData(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk, @@ -3515,66 +3504,66 @@ void PeerGroupMsg1Action(struct rt_rtmp_adapter *pAd, void PeerGroupMsg2Action(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry, - void * Msg, u32 MsgLen); + void *Msg, u32 MsgLen); -void WpaDeriveGTK(u8 * PMK, - u8 * GNonce, - u8 * AA, u8 * output, u32 len); +void WpaDeriveGTK(u8 *PMK, + u8 *GNonce, + u8 *AA, u8 *output, u32 len); -void AES_GTK_KEY_WRAP(u8 * key, - u8 * plaintext, - u32 p_len, u8 * ciphertext); +void AES_GTK_KEY_WRAP(u8 *key, + u8 *plaintext, + u32 p_len, u8 *ciphertext); /*typedef void (*TIMER_FUNCTION)(unsigned long); */ /* timeout -- ms */ -void RTMP_SetPeriodicTimer(struct timer_list * pTimer, +void RTMP_SetPeriodicTimer(struct timer_list *pTimer, IN unsigned long timeout); void RTMP_OS_Init_Timer(struct rt_rtmp_adapter *pAd, - struct timer_list * pTimer, + struct timer_list *pTimer, IN TIMER_FUNCTION function, void *data); -void RTMP_OS_Add_Timer(struct timer_list * pTimer, +void RTMP_OS_Add_Timer(struct timer_list *pTimer, IN unsigned long timeout); -void RTMP_OS_Mod_Timer(struct timer_list * pTimer, +void RTMP_OS_Mod_Timer(struct timer_list *pTimer, IN unsigned long timeout); -void RTMP_OS_Del_Timer(struct timer_list * pTimer, - OUT BOOLEAN * pCancelled); +void RTMP_OS_Del_Timer(struct timer_list *pTimer, + OUT BOOLEAN *pCancelled); void RTMP_OS_Release_Packet(struct rt_rtmp_adapter *pAd, struct rt_queue_entry *pEntry); void RTMPusecDelay(unsigned long usec); int os_alloc_mem(struct rt_rtmp_adapter *pAd, - u8 ** mem, unsigned long size); + u8 **mem, unsigned long size); int os_free_mem(struct rt_rtmp_adapter *pAd, void *mem); void RTMP_AllocateSharedMemory(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress); void RTMPFreeTxRxRingMemory(struct rt_rtmp_adapter *pAd); -int AdapterBlockAllocateMemory(void *handle, void ** ppAd); +int AdapterBlockAllocateMemory(void *handle, void **ppAd); void RTMP_AllocateTxDescMemory(struct rt_rtmp_adapter *pAd, u32 Index, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress); void RTMP_AllocateFirstTxBuffer(struct rt_rtmp_adapter *pAd, u32 Index, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress); void RTMP_FreeFirstTxBuffer(struct rt_rtmp_adapter *pAd, @@ -3586,13 +3575,13 @@ void RTMP_FreeFirstTxBuffer(struct rt_rtmp_adapter *pAd, void RTMP_AllocateMgmtDescMemory(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress); void RTMP_AllocateRxDescMemory(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, + void **VirtualAddress, dma_addr_t *PhysicalAddress); void RTMP_FreeDescMemory(struct rt_rtmp_adapter *pAd, @@ -3605,30 +3594,29 @@ void *RtmpOSNetPktAlloc(struct rt_rtmp_adapter *pAd, IN int size); void *RTMP_AllocateRxPacketBuffer(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress, - OUT dma_addr_t * - PhysicalAddress); + void **VirtualAddress, + OUT dma_addr_t *PhysicalAddress); void *RTMP_AllocateTxPacketBuffer(struct rt_rtmp_adapter *pAd, unsigned long Length, IN BOOLEAN Cached, - void ** VirtualAddress); + void **VirtualAddress); void *RTMP_AllocateFragPacketBuffer(struct rt_rtmp_adapter *pAd, unsigned long Length); void RTMP_QueryPacketInfo(void *pPacket, struct rt_packet_info *pPacketInfo, - u8 ** pSrcBufVA, u32 * pSrcBufLen); + u8 **pSrcBufVA, u32 *pSrcBufLen); -void RTMP_QueryNextPacketInfo(void ** ppPacket, +void RTMP_QueryNextPacketInfo(void **ppPacket, struct rt_packet_info *pPacketInfo, - u8 ** pSrcBufVA, u32 * pSrcBufLen); + u8 **pSrcBufVA, u32 *pSrcBufLen); BOOLEAN RTMP_FillTxBlkInfo(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk); -struct rt_rtmp_sg_list * -rt_get_sg_list_from_packet(void *pPacket, struct rt_rtmp_sg_list *sg); +struct rt_rtmp_sg_list *rt_get_sg_list_from_packet(void *pPacket, + struct rt_rtmp_sg_list *sg); void announce_802_3_packet(struct rt_rtmp_adapter *pAd, void *pPacket); @@ -3717,23 +3705,19 @@ void wlan_802_11_to_802_3_packet(struct rt_rtmp_adapter *pAd, { \ u8 *_pRemovedLLCSNAP = NULL, *_pDA, *_pSA; \ \ - if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \ - { \ + if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) { \ _pDA = _pRxBlk->pHeader->Addr3; \ _pSA = (u8 *)_pRxBlk->pHeader + sizeof(struct rt_header_802_11); \ } \ - else \ - { \ - if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \ - { \ + else {\ + if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) {\ _pDA = _pRxBlk->pHeader->Addr1; \ if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \ _pSA = _pRxBlk->pHeader->Addr2; \ else \ _pSA = _pRxBlk->pHeader->Addr3; \ } \ - else \ - { \ + else { \ _pDA = _pRxBlk->pHeader->Addr1; \ _pSA = _pRxBlk->pHeader->Addr2; \ } \ @@ -3771,8 +3755,8 @@ void Update_Rssi_Sample(struct rt_rtmp_adapter *pAd, void *GetPacketFromRxRing(struct rt_rtmp_adapter *pAd, OUT PRT28XX_RXD_STRUC pSaveRxD, - OUT BOOLEAN * pbReschedule, - IN u32 * pRxPending); + OUT BOOLEAN *pbReschedule, + IN u32 *pRxPending); void *RTMPDeFragmentDataFrame(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk); @@ -3919,24 +3903,24 @@ BOOLEAN RtmpRaDevCtrlExit(struct rt_rtmp_adapter *pAd); /* */ u16 RtmpPCI_WriteTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, - IN BOOLEAN bIsLast, u16 * FreeNumber); + IN BOOLEAN bIsLast, u16 *FreeNumber); u16 RtmpPCI_WriteSingleTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, IN BOOLEAN bIsLast, - u16 * FreeNumber); + u16 *FreeNumber); u16 RtmpPCI_WriteMultiTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, - u8 frameNum, u16 * FreeNumber); + u8 frameNum, u16 *FreeNumber); u16 RtmpPCI_WriteFragTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, - u8 fragNum, u16 * FreeNumber); + u8 fragNum, u16 *FreeNumber); u16 RtmpPCI_WriteSubTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, - IN BOOLEAN bIsLast, u16 * FreeNumber); + IN BOOLEAN bIsLast, u16 *FreeNumber); void RtmpPCI_FinalWriteTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, @@ -3955,8 +3939,8 @@ int RtmpPCIMgmtKickOut(struct rt_rtmp_adapter *pAd, u8 *pSrcBufVA, u32 SrcBufLen); int RTMPCheckRxError(struct rt_rtmp_adapter *pAd, - struct rt_header_802_11 * pHeader, - struct rt_rxwi * pRxWI, IN PRT28XX_RXD_STRUC pRxD); + struct rt_header_802_11 *pHeader, + struct rt_rxwi *pRxWI, IN PRT28XX_RXD_STRUC pRxD); BOOLEAN RT28xxPciAsicRadioOff(struct rt_rtmp_adapter *pAd, u8 Level, u16 TbttNumToNextWakeUp); @@ -4138,15 +4122,15 @@ void append_pkt(struct rt_rtmp_adapter *pAd, u8 *pHeader802_3, u32 HdrLen, u8 *pData, - unsigned long DataSize, void ** ppPacket); + unsigned long DataSize, void **ppPacket); u32 deaggregate_AMSDU_announce(struct rt_rtmp_adapter *pAd, void *pPacket, u8 *pData, unsigned long DataSize); int RTMPCheckRxError(struct rt_rtmp_adapter *pAd, - struct rt_header_802_11 * pHeader, - struct rt_rxwi * pRxWI, + struct rt_header_802_11 *pHeader, + struct rt_rxwi *pRxWI, IN PRT28XX_RXD_STRUC pRxINFO); void RTUSBMlmeHardTransmit(struct rt_rtmp_adapter *pAd, struct rt_mgmt *pMgmt); @@ -4173,20 +4157,20 @@ void RTMPWriteTxInfo(struct rt_rtmp_adapter *pAd, /* */ u16 RtmpUSB_WriteSubTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, - IN BOOLEAN bIsLast, u16 * FreeNumber); + IN BOOLEAN bIsLast, u16 *FreeNumber); u16 RtmpUSB_WriteSingleTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, IN BOOLEAN bIsLast, - u16 * FreeNumber); + u16 *FreeNumber); u16 RtmpUSB_WriteFragTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, - u8 fragNum, u16 * FreeNumber); + u8 fragNum, u16 *FreeNumber); u16 RtmpUSB_WriteMultiTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, - u8 frameNum, u16 * FreeNumber); + u8 frameNum, u16 *FreeNumber); void RtmpUSB_FinalWriteTxResource(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk, @@ -4205,7 +4189,7 @@ int RtmpUSBMgmtKickOut(struct rt_rtmp_adapter *pAd, void RtmpUSBNullFrameKickOut(struct rt_rtmp_adapter *pAd, u8 QueIdx, - u8 * pNullFrame, u32 frameLen); + u8 *pNullFrame, u32 frameLen); void RtmpUsbStaAsicForceWakeupTimeout(void *SystemSpecific1, void *FunctionContext, @@ -4245,9 +4229,9 @@ void AsicStaBbpTuning(struct rt_rtmp_adapter *pAd); BOOLEAN StaAddMacTableEntry(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry, u8 MaxSupportedRateIn500Kbps, - struct rt_ht_capability_ie * pHtCapability, + struct rt_ht_capability_ie *pHtCapability, u8 HtCapabilityLen, - struct rt_add_ht_info_ie * pAddHtInfo, + struct rt_add_ht_info_ie *pAddHtInfo, u8 AddHtInfoLen, u16 CapabilityInfo); BOOLEAN AUTH_ReqSend(struct rt_rtmp_adapter *pAd, @@ -4313,7 +4297,7 @@ void RtmpOSNetDevClose(struct net_device *pNetDev); void RtmpOSNetDevDetach(struct net_device *pNetDev); -int RtmpOSNetDevAlloc(struct net_device ** pNewNetDev, u32 privDataSize); +int RtmpOSNetDevAlloc(struct net_device **pNewNetDev, u32 privDataSize); void RtmpOSNetDevFree(struct net_device *pNetDev); -- cgit v0.10.2 From cd20decf7ef49983e973ebd6a76a0000cd26cd2a Mon Sep 17 00:00:00 2001 From: Steven Harms Date: Sun, 14 Mar 2010 11:56:00 -0400 Subject: Staging: otus: Remove mix of tabs and spaces with just tabs in ioctl.c Previously defines had a mix of both tabs and spaces, causing an error in the checkpatch tool. These tabs and spaces have been consolidated to only tabs. Signed-off-by: Steven Harms Acked-by: Simon Horman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/ioctl.c b/drivers/staging/otus/ioctl.c index 84be4b2..b9dd943 100644 --- a/drivers/staging/otus/ioctl.c +++ b/drivers/staging/otus/ioctl.c @@ -30,34 +30,34 @@ #include "usbdrv.h" -#define ZD_IOCTL_WPA (SIOCDEVPRIVATE + 1) -#define ZD_IOCTL_PARAM (SIOCDEVPRIVATE + 2) -#define ZD_IOCTL_GETWPAIE (SIOCDEVPRIVATE + 3) +#define ZD_IOCTL_WPA (SIOCDEVPRIVATE + 1) +#define ZD_IOCTL_PARAM (SIOCDEVPRIVATE + 2) +#define ZD_IOCTL_GETWPAIE (SIOCDEVPRIVATE + 3) #ifdef ZM_ENABLE_CENC -#define ZM_IOCTL_CENC (SIOCDEVPRIVATE + 4) +#define ZM_IOCTL_CENC (SIOCDEVPRIVATE + 4) #endif /* ZM_ENABLE_CENC */ -#define ZD_PARAM_ROAMING 0x0001 -#define ZD_PARAM_PRIVACY 0x0002 -#define ZD_PARAM_WPA 0x0003 +#define ZD_PARAM_ROAMING 0x0001 +#define ZD_PARAM_PRIVACY 0x0002 +#define ZD_PARAM_WPA 0x0003 #define ZD_PARAM_COUNTERMEASURES 0x0004 #define ZD_PARAM_DROPUNENCRYPTED 0x0005 -#define ZD_PARAM_AUTH_ALGS 0x0006 -#define ZD_PARAM_WPS_FILTER 0x0007 +#define ZD_PARAM_AUTH_ALGS 0x0006 +#define ZD_PARAM_WPS_FILTER 0x0007 #ifdef ZM_ENABLE_CENC #define P80211_PACKET_CENCFLAG 0x0001 #endif /* ZM_ENABLE_CENC */ -#define P80211_PACKET_SETKEY 0x0003 +#define P80211_PACKET_SETKEY 0x0003 #define ZD_CMD_SET_ENCRYPT_KEY 0x0001 -#define ZD_CMD_SET_MLME 0x0002 -#define ZD_CMD_SCAN_REQ 0x0003 +#define ZD_CMD_SET_MLME 0x0002 +#define ZD_CMD_SCAN_REQ 0x0003 #define ZD_CMD_SET_GENERIC_ELEMENT 0x0004 -#define ZD_CMD_GET_TSC 0x0005 +#define ZD_CMD_GET_TSC 0x0005 #define ZD_CRYPT_ALG_NAME_LEN 16 -#define ZD_MAX_KEY_SIZE 32 -#define ZD_MAX_GENERIC_SIZE 64 +#define ZD_MAX_KEY_SIZE 32 +#define ZD_MAX_GENERIC_SIZE 64 #include -- cgit v0.10.2 From 263974d918474d17b5963d0b22fbc81729ce0479 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Sun, 28 Mar 2010 14:48:10 +0300 Subject: Staging: otus: hpani: using the wrong variable We're updating the "HpPriv->ani" array here so we should use that to determine the end of the for loop. "HpPriv->ani" has 50 elements and "wd->regulationTable.allowChannel" has 59 elements. Signed-off-by: Dan Carpenter Signed-off-by: Andrew Morton Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpani.c b/drivers/staging/otus/hal/hpani.c index 0afecd8..d401504 100644 --- a/drivers/staging/otus/hal/hpani.c +++ b/drivers/staging/otus/hal/hpani.c @@ -96,7 +96,7 @@ void zfHpAniAttach(zdev_t* dev) HpPriv->hasHwPhyCounters = 1; memset((char *)&HpPriv->ani, 0, sizeof(HpPriv->ani)); - for (i = 0; i < N(wd->regulationTable.allowChannel); i++) + for (i = 0; i < ARRAY_SIZE(HpPriv->ani); i++) { /* New ANI stuff */ HpPriv->ani[i].ofdmTrigHigh = ZM_HAL_ANI_OFDM_TRIG_HIGH; -- cgit v0.10.2 From b4001982bcd79e9685bc09f68a05526f8c5887c7 Mon Sep 17 00:00:00 2001 From: Vikram Dhillon Date: Sun, 4 Apr 2010 01:22:53 -0400 Subject: Staging: Otus: Hal: hpani.c Fixed some style issues Fixed some style issues in accordance with checkpatch.pl Signed-by: Vikram Dhillon Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpani.c b/drivers/staging/otus/hal/hpani.c index d401504..f53e483 100644 --- a/drivers/staging/otus/hal/hpani.c +++ b/drivers/staging/otus/hal/hpani.c @@ -18,8 +18,8 @@ #include "hpusb.h" -extern u16_t zfDelayWriteInternalReg(zdev_t* dev, u32_t addr, u32_t val); -extern u16_t zfFlushDelayWrite(zdev_t* dev); +extern u16_t zfDelayWriteInternalReg(zdev_t *dev, u32_t addr, u32_t val); +extern u16_t zfFlushDelayWrite(zdev_t *dev); /* * Anti noise immunity support. We track phy errors and react @@ -52,13 +52,13 @@ extern u16_t zfFlushDelayWrite(zdev_t* dev); #define ZM_HAL_EP_RND(x, mul) \ ((((x)%(mul)) >= ((mul)/2)) ? ((x) + ((mul) - 1)) / (mul) : (x)/(mul)) -s32_t BEACON_RSSI(zdev_t* dev) +s32_t BEACON_RSSI(zdev_t *dev) { s32_t rssi; struct zsHpPriv *HpPriv; zmw_get_wlan_dev(dev); - HpPriv = (struct zsHpPriv*)wd->hpPrivate; + HpPriv = (struct zsHpPriv *)wd->hpPrivate; rssi = ZM_HAL_EP_RND(HpPriv->stats.ast_nodestats.ns_avgbrssi, ZM_HAL_RSSI_EP_MULTIPLIER); @@ -70,7 +70,7 @@ s32_t BEACON_RSSI(zdev_t* dev) * resets the channel statistics */ -void zfHpAniAttach(zdev_t* dev) +void zfHpAniAttach(zdev_t *dev) { #define N(a) (sizeof(a) / sizeof(a[0])) u32_t i; @@ -82,11 +82,10 @@ void zfHpAniAttach(zdev_t* dev) const int firpwr[] = { -78, -78, -78, -78, -80 }; zmw_get_wlan_dev(dev); - HpPriv = (struct zsHpPriv*)wd->hpPrivate; + HpPriv = (struct zsHpPriv *)wd->hpPrivate; - for (i = 0; i < 5; i++) - { - HpPriv->totalSizeDesired[i] = totalSizeDesired[i]; + for (i = 0; i < 5; i++) { + HpPriv->totalSizeDesired[i] = totalSizeDesired[i]; HpPriv->coarseHigh[i] = coarseHigh[i]; HpPriv->coarseLow[i] = coarseLow[i]; HpPriv->firpwr[i] = firpwr[i]; @@ -96,8 +95,7 @@ void zfHpAniAttach(zdev_t* dev) HpPriv->hasHwPhyCounters = 1; memset((char *)&HpPriv->ani, 0, sizeof(HpPriv->ani)); - for (i = 0; i < ARRAY_SIZE(HpPriv->ani); i++) - { + for (i = 0; i < ARRAY_SIZE(HpPriv->ani); i++) { /* New ANI stuff */ HpPriv->ani[i].ofdmTrigHigh = ZM_HAL_ANI_OFDM_TRIG_HIGH; HpPriv->ani[i].ofdmTrigLow = ZM_HAL_ANI_OFDM_TRIG_LOW; @@ -109,14 +107,12 @@ void zfHpAniAttach(zdev_t* dev) HpPriv->ani[i].cckWeakSigThreshold = ZM_HAL_ANI_CCK_WEAK_SIG_THR; HpPriv->ani[i].spurImmunityLevel = ZM_HAL_ANI_SPUR_IMMUNE_LVL; HpPriv->ani[i].firstepLevel = ZM_HAL_ANI_FIRSTEP_LVL; - if (HpPriv->hasHwPhyCounters) - { + if (HpPriv->hasHwPhyCounters) { HpPriv->ani[i].ofdmPhyErrBase = 0;//AR_PHY_COUNTMAX - ZM_HAL_ANI_OFDM_TRIG_HIGH; HpPriv->ani[i].cckPhyErrBase = 0;//AR_PHY_COUNTMAX - ZM_HAL_ANI_CCK_TRIG_HIGH; } } - if (HpPriv->hasHwPhyCounters) - { + if (HpPriv->hasHwPhyCounters) { //zm_debug_msg2("Setting OfdmErrBase = 0x", HpPriv->ani[0].ofdmPhyErrBase); //zm_debug_msg2("Setting cckErrBase = 0x", HpPriv->ani[0].cckPhyErrBase); //OS_REG_WRITE(ah, AR_PHY_ERR_1, HpPriv->ani[0].ofdmPhyErrBase); @@ -135,7 +131,7 @@ void zfHpAniAttach(zdev_t* dev) /* * Control Adaptive Noise Immunity Parameters */ -u8_t zfHpAniControl(zdev_t* dev, ZM_HAL_ANI_CMD cmd, int param) +u8_t zfHpAniControl(zdev_t *dev, ZM_HAL_ANI_CMD cmd, int param) { #define N(a) (sizeof(a)/sizeof(a[0])) typedef s32_t TABLE[]; @@ -143,7 +139,7 @@ u8_t zfHpAniControl(zdev_t* dev, ZM_HAL_ANI_CMD cmd, int param) struct zsAniState *aniState; zmw_get_wlan_dev(dev); - HpPriv = (struct zsHpPriv*)wd->hpPrivate; + HpPriv = (struct zsHpPriv *)wd->hpPrivate; aniState = HpPriv->curani; switch (cmd) @@ -152,8 +148,7 @@ u8_t zfHpAniControl(zdev_t* dev, ZM_HAL_ANI_CMD cmd, int param) { u32_t level = param; - if (level >= N(HpPriv->totalSizeDesired)) - { + if (level >= N(HpPriv->totalSizeDesired)) { zm_debug_msg1("level out of range, desired level : ", level); zm_debug_msg1("max level : ", N(HpPriv->totalSizeDesired)); return FALSE; -- cgit v0.10.2 From f4d52b072d35ad2cc3720af65853e6fcc9d8414f Mon Sep 17 00:00:00 2001 From: Peter Huewe Date: Tue, 27 Apr 2010 00:34:49 +0200 Subject: Staging: otus: Add null check and fix coding style issue This patch removes mixing of declarations and code and adds a null-test after a kmalloc. Signed-off-by: Peter Huewe Acked-by: Simon Horman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/ioctl.c b/drivers/staging/otus/ioctl.c index b9dd943..a48c8e4 100644 --- a/drivers/staging/otus/ioctl.c +++ b/drivers/staging/otus/ioctl.c @@ -867,6 +867,7 @@ int usbdrvwext_giwscan(struct net_device *dev, char *current_ev = extra; char *end_buf; int i; + struct zsBssListV1 *pBssList; /* BssList = wd->sta.pBssList; */ /* zmw_get_wlan_dev(dev); */ @@ -874,8 +875,10 @@ int usbdrvwext_giwscan(struct net_device *dev, return 0; /* struct zsBssList BssList; */ - struct zsBssListV1 *pBssList = kmalloc(sizeof(struct zsBssListV1), - GFP_KERNEL); + pBssList = kmalloc(sizeof(struct zsBssListV1), GFP_KERNEL); + if (pBssList == NULL) + return -ENOMEM; + if (data->length == 0) end_buf = extra + IW_SCAN_MAX_DATA; else -- cgit v0.10.2 From ec8f002e6dbd6a55b79544f72ea5760ca69e225e Mon Sep 17 00:00:00 2001 From: Steven Harms Date: Thu, 18 Mar 2010 10:15:59 -0400 Subject: Staging: vt6655: Convert C99 style comments, remove spaces between function definitions and parenthesis Converted C99 style comments to kernel style guideline complianet comments. Removed spaces between function definitions and parenthesis. These were indicated as problems by checkpatch tool. Fixed typo found by Gabor Stefanik Signed-off-by: Steven Harms Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/srom.c b/drivers/staging/vt6655/srom.c index 5a7c6ca..fb7a646 100644 --- a/drivers/staging/vt6655/srom.c +++ b/drivers/staging/vt6655/srom.c @@ -85,15 +85,15 @@ BYTE SROMbyReadEmbedded(DWORD_PTR dwIoBase, BYTE byContntOffset) byData = 0xFF; VNSvInPortB(dwIoBase + MAC_REG_I2MCFG, &byOrg); - // turn off hardware retry for getting NACK + /* turn off hardware retry for getting NACK */ VNSvOutPortB(dwIoBase + MAC_REG_I2MCFG, (byOrg & (~I2MCFG_NORETRY))); for (wNoACK = 0; wNoACK < W_MAX_I2CRETRY; wNoACK++) { VNSvOutPortB(dwIoBase + MAC_REG_I2MTGID, EEP_I2C_DEV_ID); VNSvOutPortB(dwIoBase + MAC_REG_I2MTGAD, byContntOffset); - // issue read command + /* issue read command */ VNSvOutPortB(dwIoBase + MAC_REG_I2MCSR, I2MCSR_EEMR); - // wait DONE be set + /* wait DONE be set */ for (wDelay = 0; wDelay < W_MAX_TIMEOUT; wDelay++) { VNSvInPortB(dwIoBase + MAC_REG_I2MCSR, &byWait); if (byWait & (I2MCSR_DONE | I2MCSR_NACK)) @@ -125,7 +125,7 @@ BYTE SROMbyReadEmbedded(DWORD_PTR dwIoBase, BYTE byContntOffset) * Return Value: TRUE if succeeded; FALSE if failed. * */ -BOOL SROMbWriteEmbedded (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byData) +BOOL SROMbWriteEmbedded(DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byData) { WORD wDelay, wNoACK; BYTE byWait; @@ -133,16 +133,16 @@ BOOL SROMbWriteEmbedded (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byData) BYTE byOrg; VNSvInPortB(dwIoBase + MAC_REG_I2MCFG, &byOrg); - // turn off hardware retry for getting NACK + /* turn off hardware retry for getting NACK */ VNSvOutPortB(dwIoBase + MAC_REG_I2MCFG, (byOrg & (~I2MCFG_NORETRY))); for (wNoACK = 0; wNoACK < W_MAX_I2CRETRY; wNoACK++) { VNSvOutPortB(dwIoBase + MAC_REG_I2MTGID, EEP_I2C_DEV_ID); VNSvOutPortB(dwIoBase + MAC_REG_I2MTGAD, byContntOffset); VNSvOutPortB(dwIoBase + MAC_REG_I2MDOPT, byData); - // issue write command + /* issue write command */ VNSvOutPortB(dwIoBase + MAC_REG_I2MCSR, I2MCSR_EEMW); - // wait DONE be set + /* wait DONE be set */ for (wDelay = 0; wDelay < W_MAX_TIMEOUT; wDelay++) { VNSvInPortB(dwIoBase + MAC_REG_I2MCSR, &byWait); if (byWait & (I2MCSR_DONE | I2MCSR_NACK)) @@ -178,7 +178,7 @@ BOOL SROMbWriteEmbedded (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byData) * Return Value: none * */ -void SROMvRegBitsOn (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byBits) +void SROMvRegBitsOn(DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byBits) { BYTE byOrgData; @@ -199,7 +199,7 @@ void SROMvRegBitsOn (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byBits) * none * */ -void SROMvRegBitsOff (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byBits) +void SROMvRegBitsOff(DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byBits) { BYTE byOrgData; @@ -222,7 +222,7 @@ void SROMvRegBitsOff (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byBits) * Return Value: TRUE if all test bits on; otherwise FALSE * */ -BOOL SROMbIsRegBitsOn (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byTestBits) +BOOL SROMbIsRegBitsOn(DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byTestBits) { BYTE byOrgData; @@ -245,7 +245,7 @@ BOOL SROMbIsRegBitsOn (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byTestBits) * Return Value: TRUE if all test bits off; otherwise FALSE * */ -BOOL SROMbIsRegBitsOff (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byTestBits) +BOOL SROMbIsRegBitsOff(DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byTestBits) { BYTE byOrgData; @@ -266,11 +266,11 @@ BOOL SROMbIsRegBitsOff (DWORD_PTR dwIoBase, BYTE byContntOffset, BYTE byTestBits * Return Value: none * */ -void SROMvReadAllContents (DWORD_PTR dwIoBase, PBYTE pbyEepromRegs) +void SROMvReadAllContents(DWORD_PTR dwIoBase, PBYTE pbyEepromRegs) { int ii; - // ii = Rom Address + /* ii = Rom Address */ for (ii = 0; ii < EEP_MAX_CONTEXT_SIZE; ii++) { *pbyEepromRegs = SROMbyReadEmbedded(dwIoBase,(BYTE) ii); pbyEepromRegs++; @@ -291,11 +291,11 @@ void SROMvReadAllContents (DWORD_PTR dwIoBase, PBYTE pbyEepromRegs) * Return Value: none * */ -void SROMvWriteAllContents (DWORD_PTR dwIoBase, PBYTE pbyEepromRegs) +void SROMvWriteAllContents(DWORD_PTR dwIoBase, PBYTE pbyEepromRegs) { int ii; - // ii = Rom Address + /* ii = Rom Address */ for (ii = 0; ii < EEP_MAX_CONTEXT_SIZE; ii++) { SROMbWriteEmbedded(dwIoBase,(BYTE) ii, *pbyEepromRegs); pbyEepromRegs++; @@ -315,11 +315,11 @@ void SROMvWriteAllContents (DWORD_PTR dwIoBase, PBYTE pbyEepromRegs) * Return Value: none * */ -void SROMvReadEtherAddress (DWORD_PTR dwIoBase, PBYTE pbyEtherAddress) +void SROMvReadEtherAddress(DWORD_PTR dwIoBase, PBYTE pbyEtherAddress) { BYTE ii; - // ii = Rom Address + /* ii = Rom Address */ for (ii = 0; ii < U_ETHER_ADDR_LEN; ii++) { *pbyEtherAddress = SROMbyReadEmbedded(dwIoBase, ii); pbyEtherAddress++; @@ -340,11 +340,11 @@ void SROMvReadEtherAddress (DWORD_PTR dwIoBase, PBYTE pbyEtherAddress) * Return Value: none * */ -void SROMvWriteEtherAddress (DWORD_PTR dwIoBase, PBYTE pbyEtherAddress) +void SROMvWriteEtherAddress(DWORD_PTR dwIoBase, PBYTE pbyEtherAddress) { BYTE ii; - // ii = Rom Address + /* ii = Rom Address */ for (ii = 0; ii < U_ETHER_ADDR_LEN; ii++) { SROMbWriteEmbedded(dwIoBase, ii, *pbyEtherAddress); pbyEtherAddress++; @@ -364,15 +364,15 @@ void SROMvWriteEtherAddress (DWORD_PTR dwIoBase, PBYTE pbyEtherAddress) * Return Value: none * */ -void SROMvReadSubSysVenId (DWORD_PTR dwIoBase, PDWORD pdwSubSysVenId) +void SROMvReadSubSysVenId(DWORD_PTR dwIoBase, PDWORD pdwSubSysVenId) { PBYTE pbyData; pbyData = (PBYTE)pdwSubSysVenId; - // sub vendor + /* sub vendor */ *pbyData = SROMbyReadEmbedded(dwIoBase, 6); *(pbyData+1) = SROMbyReadEmbedded(dwIoBase, 7); - // sub system + /* sub system */ *(pbyData+2) = SROMbyReadEmbedded(dwIoBase, 8); *(pbyData+3) = SROMbyReadEmbedded(dwIoBase, 9); } @@ -389,7 +389,7 @@ void SROMvReadSubSysVenId (DWORD_PTR dwIoBase, PDWORD pdwSubSysVenId) * Return Value: TRUE if success; otherwise FALSE * */ -BOOL SROMbAutoLoad (DWORD_PTR dwIoBase) +BOOL SROMbAutoLoad(DWORD_PTR dwIoBase) { BYTE byWait; int ii; @@ -397,12 +397,12 @@ BOOL SROMbAutoLoad (DWORD_PTR dwIoBase) BYTE byOrg; VNSvInPortB(dwIoBase + MAC_REG_I2MCFG, &byOrg); - // turn on hardware retry + /* turn on hardware retry */ VNSvOutPortB(dwIoBase + MAC_REG_I2MCFG, (byOrg | I2MCFG_NORETRY)); MACvRegBitsOn(dwIoBase, MAC_REG_I2MCSR, I2MCSR_AUTOLD); - // ii = Rom Address + /* ii = Rom Address */ for (ii = 0; ii < EEP_MAX_CONTEXT_SIZE; ii++) { MACvTimer0MicroSDelay(dwIoBase, CB_EEPROM_READBYTE_WAIT); VNSvInPortB(dwIoBase + MAC_REG_I2MCSR, &byWait); -- cgit v0.10.2 From 646755ad9156eae5d19af5fd0e1a068f1f9d064c Mon Sep 17 00:00:00 2001 From: Roel Kluin Date: Mon, 22 Mar 2010 22:36:20 +0100 Subject: Staging: vt6655: CGI/CSI confusion in device_ioctl() The wrong messages were printed Signed-off-by: Roel Kluin Signed-off-by: Andrew Morton Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index e40a2e9..fde352b 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -3328,7 +3328,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { break; case SIOCSIWTXPOW: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWTXPOW \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWTXPOW \n"); rc = -EOPNOTSUPP; break; @@ -3406,7 +3406,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { // Get the spy list case SIOCGIWSPY: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCSIWSPY \n"); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWSPY \n"); rc = -EOPNOTSUPP; break; -- cgit v0.10.2 From 7c2c2eb7b2ea83e759d75bf362b161c264b98081 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:16:55 -0700 Subject: Staging: cx25821: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/cx25821/cx25821-core.c b/drivers/staging/cx25821/cx25821-core.c index 9e9b8c3..eee4dc7 100644 --- a/drivers/staging/cx25821/cx25821-core.c +++ b/drivers/staging/cx25821/cx25821-core.c @@ -1299,7 +1299,8 @@ int cx25821_risc_databuffer_audio(struct pci_dev *pci, instructions = 1 + (bpl * lines) / PAGE_SIZE + lines; instructions += 1; - if ((rc = btcx_riscmem_alloc(pci, risc, instructions * 12)) < 0) + rc = btcx_riscmem_alloc(pci, risc, instructions * 12); + if (rc < 0) return rc; /* write risc instructions */ -- cgit v0.10.2 From 92363b529f2ee08ee3fa14d590058e492ad49a1c Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:16:57 -0700 Subject: Staging: otus: 80211core: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/80211core/cagg.c b/drivers/staging/otus/80211core/cagg.c index f9514c0..c3cef1a 100644 --- a/drivers/staging/otus/80211core/cagg.c +++ b/drivers/staging/otus/80211core/cagg.c @@ -2485,7 +2485,7 @@ void zfAggTxRetransmit(zdev_t* dev, struct bufInfo *buf_info, struct aggControl BAW->insert(dev, buf_info->buf, tid_tx->bar_ssn >> 4, aggControl->tid_baw, buf_info->baw_retransmit, &header_r); }*/ - if ((err = zfHpSend(dev, + err = zfHpSend(dev, buf_info->baw_header->header, buf_info->baw_header->headerLen, buf_info->baw_header->snap, @@ -2496,7 +2496,8 @@ void zfAggTxRetransmit(zdev_t* dev, struct bufInfo *buf_info, struct aggControl buf_info->baw_header->removeLen, ZM_EXTERNAL_ALLOC_BUF, (u8_t)tid_tx->ac, - buf_info->baw_header->keyIdx)) != ZM_SUCCESS) + buf_info->baw_header->keyIdx); + if (err != ZM_SUCCESS) { goto zlError; } @@ -2797,9 +2798,10 @@ u16_t zfAggTxSendEth(zdev_t* dev, zbuf_t* buf, u16_t port, u16_t bufType, u8_t f BAW->insert(dev, buf, tid_tx->bar_ssn >> 4, aggControl->tid_baw, 0, &header_r); }*/ - if ((err = zfHpSend(dev, header, headerLen, snap, snapLen, + err = zfHpSend(dev, header, headerLen, snap, snapLen, mic, micLen, frag.buf[i], removeLen, - frag.bufType[i], zcUpToAc[up&0x7], keyIdx)) != ZM_SUCCESS) + frag.bufType[i], zcUpToAc[up&0x7], keyIdx); + if (err != ZM_SUCCESS) { goto zlError; } @@ -2849,7 +2851,8 @@ u16_t zfAggSendAddbaRequest(zdev_t* dev, u16_t *dst, u16_t ac, u16_t up) /* * TBD : Maximum size of management frame */ - if ((buf = zfwBufAllocate(dev, 1024)) == NULL) + buf = zfwBufAllocate(dev, 1024); + if (buf == NULL) { zm_msg0_mm(ZM_LV_0, "Alloc mm buf Fail!"); return ZM_SUCCESS; @@ -2892,8 +2895,9 @@ u16_t zfAggSendAddbaRequest(zdev_t* dev, u16_t *dst, u16_t ac, u16_t up) //zm_msg2_mm(ZM_LV_2, "buf->data=", buf->data); #if 0 - if ((err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, - ZM_INTERNAL_ALLOC_BUF, 0, 0xff)) != ZM_SUCCESS) + err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, + ZM_INTERNAL_ALLOC_BUF, 0, 0xff); + if (err != ZM_SUCCESS) { goto zlError; } @@ -3290,7 +3294,8 @@ u16_t zfAggSendAddbaResponse(zdev_t* dev, struct aggBaFrameParameter *bf) /* * TBD : Maximum size of management frame */ - if ((buf = zfwBufAllocate(dev, 1024)) == NULL) + buf = zfwBufAllocate(dev, 1024); + if (buf == NULL) { zm_msg0_mm(ZM_LV_0, "Alloc mm buf Fail!"); return ZM_SUCCESS; @@ -3337,8 +3342,9 @@ u16_t zfAggSendAddbaResponse(zdev_t* dev, struct aggBaFrameParameter *bf) //zm_msg2_mm(ZM_LV_2, "buf->data=", buf->data); #if 0 - if ((err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, - ZM_INTERNAL_ALLOC_BUF, 0, 0xff)) != ZM_SUCCESS) + err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, + ZM_INTERNAL_ALLOC_BUF, 0, 0xff); + if (err != ZM_SUCCESS) { goto zlError; } @@ -3443,7 +3449,8 @@ u16_t zfAggSendBar(zdev_t* dev, TID_TX tid_tx, struct aggBarControl *aggBarCon /* * TBD : Maximum size of management frame */ - if ((buf = zfwBufAllocate(dev, 1024)) == NULL) + buf = zfwBufAllocate(dev, 1024); + if (buf == NULL) { zm_msg0_mm(ZM_LV_0, "Alloc mm buf Fail!"); return ZM_SUCCESS; @@ -3486,8 +3493,9 @@ u16_t zfAggSendBar(zdev_t* dev, TID_TX tid_tx, struct aggBarControl *aggBarCon //zm_msg2_mm(ZM_LV_2, "buf->data=", buf->data); #if 0 - if ((err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, - ZM_INTERNAL_ALLOC_BUF, 0, 0xff)) != ZM_SUCCESS) + err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, + ZM_INTERNAL_ALLOC_BUF, 0, 0xff); + if (err != ZM_SUCCESS) { goto zlError; } diff --git a/drivers/staging/otus/80211core/ccmd.c b/drivers/staging/otus/80211core/ccmd.c index 3e3d9b5..ab300df 100644 --- a/drivers/staging/otus/80211core/ccmd.c +++ b/drivers/staging/otus/80211core/ccmd.c @@ -1436,7 +1436,8 @@ u16_t zfiWlanDeauth(zdev_t *dev, u16_t *macAddr, u16_t reason) */ /* - if ((id = zfApFindSta(dev, macAddr)) != 0xffff) + id = zfApFindSta(dev, macAddr); + if (id != 0xffff) { u32_t key[8]; u16_t nullAddr[3] = { 0x0, 0x0, 0x0 }; diff --git a/drivers/staging/otus/80211core/cfunc.c b/drivers/staging/otus/80211core/cfunc.c index e0a9f38..3b9341b 100644 --- a/drivers/staging/otus/80211core/cfunc.c +++ b/drivers/staging/otus/80211core/cfunc.c @@ -1072,7 +1072,8 @@ u16_t zfFindCleanFrequency(zdev_t* dev, u32_t adhocMode) zmw_get_wlan_dev(dev); - if ((pBssInfo = wd->sta.bssList.head) == NULL) + pBssInfo = wd->sta.bssList.head; + if (pBssInfo == NULL) { if( adhocMode == ZM_ADHOCBAND_B || adhocMode == ZM_ADHOCBAND_G || adhocMode == ZM_ADHOCBAND_BG || adhocMode == ZM_ADHOCBAND_ABG ) diff --git a/drivers/staging/otus/80211core/cic.c b/drivers/staging/otus/80211core/cic.c index c84f079..53c09a0 100644 --- a/drivers/staging/otus/80211core/cic.c +++ b/drivers/staging/otus/80211core/cic.c @@ -329,7 +329,8 @@ void zfCoreEvent(zdev_t* dev, u16_t event, u8_t* rsp) if (wd->wlanMode == ZM_MODE_AP) { zmw_enter_critical_section(dev); - if ((i=zfApFindSta(dev, (u16_t*)rsp)) != 0xffff) + i = zfApFindSta(dev, (u16_t*)rsp); + if (i != 0xffff) { zfRateCtrlTxFailEvent(dev, &wd->ap.staTable[i].rcCell, 0,(u32_t)zfPhyCtrlToRate(retryRate)); } @@ -357,7 +358,8 @@ void zfCoreEvent(zdev_t* dev, u16_t event, u8_t* rsp) if (wd->wlanMode == ZM_MODE_AP) { zmw_enter_critical_section(dev); - if ((i=zfApFindSta(dev, (u16_t*)rsp)) != 0xffff) + i = zfApFindSta(dev, (u16_t*)rsp); + if (i != 0xffff) { zfRateCtrlTxFailEvent(dev, &wd->ap.staTable[i].rcCell, 0,(u32_t)zfPhyCtrlToRate(retryRate)); } @@ -387,7 +389,8 @@ void zfCoreEvent(zdev_t* dev, u16_t event, u8_t* rsp) if (wd->wlanMode == ZM_MODE_AP) { zmw_enter_critical_section(dev); - if ((i=zfApFindSta(dev, (u16_t*)rsp)) != 0xffff) + i = zfApFindSta(dev, (u16_t*)rsp); + if (i != 0xffff) { zfRateCtrlTxSuccessEvent(dev, &wd->ap.staTable[i].rcCell, zfPhyCtrlToRate(retryRate)); } diff --git a/drivers/staging/otus/80211core/cinit.c b/drivers/staging/otus/80211core/cinit.c index 5f853ce..1182331 100644 --- a/drivers/staging/otus/80211core/cinit.c +++ b/drivers/staging/otus/80211core/cinit.c @@ -622,7 +622,8 @@ u16_t zfTxGenWlanHeader(zdev_t* dev, zbuf_t* buf, u16_t* header, u16_t seq, phyCtrl = 0xc0001; //PHY control L /* WDS port checking */ - if ((wdsPort = (port - 0x20)) >= ZM_MAX_WDS_SUPPORT) + wdsPort = port - 0x20; + if (wdsPort >= ZM_MAX_WDS_SUPPORT) { wdsPort = 0; } diff --git a/drivers/staging/otus/80211core/cmm.c b/drivers/staging/otus/80211core/cmm.c index 484e753..007ef3b 100644 --- a/drivers/staging/otus/80211core/cmm.c +++ b/drivers/staging/otus/80211core/cmm.c @@ -83,7 +83,8 @@ u16_t zfFindElement(zdev_t* dev, zbuf_t* buf, u8_t eid) /* Get offset of first element */ subType = (zmw_rx_buf_readb(dev, buf, 0) >> 4); - if ((offset = zgElementOffsetTable[subType]) == 0xff) + offset = zgElementOffsetTable[subType]; + if (offset == 0xff) { zm_assert(0); } @@ -107,10 +108,12 @@ u16_t zfFindElement(zdev_t* dev, zbuf_t* buf, u8_t eid) while ((offset+2)(bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen > bufLen - offset) { /* Element length error */ return 0xffff; @@ -151,7 +154,8 @@ u16_t zfFindElement(zdev_t* dev, zbuf_t* buf, u8_t eid) #if 1 elen = zmw_rx_buf_readb(dev, buf, offset+1); #else - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) == 0) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen == 0) { return 0xffff; } @@ -194,7 +198,8 @@ u16_t zfFindWifiElement(zdev_t* dev, zbuf_t* buf, u8_t type, u8_t subtype) /* Get offset of first element */ subType = (zmw_rx_buf_readb(dev, buf, 0) >> 4); - if ((offset = zgElementOffsetTable[subType]) == 0xff) + offset = zgElementOffsetTable[subType]; + if (offset == 0xff) { zm_assert(0); } @@ -207,10 +212,12 @@ u16_t zfFindWifiElement(zdev_t* dev, zbuf_t* buf, u8_t type, u8_t subtype) while ((offset+2)(bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen > bufLen - offset) { /* Element length error */ return 0xffff; @@ -229,7 +236,8 @@ u16_t zfFindWifiElement(zdev_t* dev, zbuf_t* buf, u8_t type, u8_t subtype) { if ( subtype != 0xff ) { - if ( (tmp = zmw_rx_buf_readb(dev, buf, offset+6)) == subtype ) + tmp = zmw_rx_buf_readb(dev, buf, offset+6); + if (tmp == subtype) { return offset; } @@ -241,7 +249,8 @@ u16_t zfFindWifiElement(zdev_t* dev, zbuf_t* buf, u8_t type, u8_t subtype) } } /* Advance to next element */ - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) == 0) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen == 0) { return 0xffff; } @@ -348,7 +357,8 @@ u16_t zfFindSuperGElement(zdev_t* dev, zbuf_t* buf, u8_t type) /* Get offset of first element */ subType = (zmw_rx_buf_readb(dev, buf, 0) >> 4); - if ((offset = zgElementOffsetTable[subType]) == 0xff) + offset = zgElementOffsetTable[subType]; + if (offset == 0xff) { zm_assert(0); } @@ -361,10 +371,12 @@ u16_t zfFindSuperGElement(zdev_t* dev, zbuf_t* buf, u8_t type) while ((offset+2)(bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen > bufLen - offset) { /* Element length error */ return 0xffff; @@ -389,7 +401,8 @@ u16_t zfFindSuperGElement(zdev_t* dev, zbuf_t* buf, u8_t type) #if 1 elen = zmw_rx_buf_readb(dev, buf, offset+1); #else - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) == 0) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen == 0) { return 0xffff; } @@ -411,7 +424,8 @@ u16_t zfFindXRElement(zdev_t* dev, zbuf_t* buf, u8_t type) /* Get offset of first element */ subType = (zmw_rx_buf_readb(dev, buf, 0) >> 4); - if ((offset = zgElementOffsetTable[subType]) == 0xff) + offset = zgElementOffsetTable[subType]; + if (offset == 0xff) { zm_assert(0); } @@ -424,10 +438,12 @@ u16_t zfFindXRElement(zdev_t* dev, zbuf_t* buf, u8_t type) while ((offset+2)(bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen > bufLen - offset) { /* Element length error */ return 0xffff; @@ -447,7 +463,8 @@ u16_t zfFindXRElement(zdev_t* dev, zbuf_t* buf, u8_t type) #if 1 elen = zmw_rx_buf_readb(dev, buf, offset+1); #else - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) == 0) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen == 0) { return 0xffff; } @@ -868,7 +885,8 @@ void zfSendMmFrame(zdev_t* dev, u8_t frameType, u16_t* dst, zm_msg2_mm(ZM_LV_2, "Send mm frame, type=", frameType); /* TBD : Maximum size of management frame */ - if ((buf = zfwBufAllocate(dev, 1024)) == NULL) + buf = zfwBufAllocate(dev, 1024); + if (buf == NULL) { zm_msg0_mm(ZM_LV_0, "Alloc mm buf Fail!"); return; @@ -1257,7 +1275,8 @@ void zfSendMmFrame(zdev_t* dev, u8_t frameType, u16_t* dst, { vap = (u16_t) p3; - if ((aid = zfApFindSta(dev, dst)) != 0xffff) + aid = zfApFindSta(dev, dst); + if (aid != 0xffff) { zmw_enter_critical_section(dev); /* Clear STA table */ @@ -1303,8 +1322,9 @@ void zfSendMmFrame(zdev_t* dev, u8_t frameType, u16_t* dst, //zm_msg2_mm(ZM_LV_2, "buf->data=", buf->data); #if 0 - if ((err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, - ZM_INTERNAL_ALLOC_BUF, 0, 0xff)) != ZM_SUCCESS) + err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, + ZM_INTERNAL_ALLOC_BUF, 0, 0xff); + if (err != ZM_SUCCESS) { goto zlError; } @@ -1366,7 +1386,8 @@ void zfProcessManagement(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* AddInf if ((ra[0] & 0x1) != 1) { /* AP : Find virtual AP */ - if ((index = zfApFindSta(dev, ta)) != 0xffff) + index = zfApFindSta(dev, ta); + if (index != 0xffff) { vap = wd->ap.staTable[index].vap; } @@ -1534,7 +1555,8 @@ void zfProcessProbeReq(zdev_t* dev, zbuf_t* buf, u16_t* src) } /* check SSID */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID)) == 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID); + if (offset == 0xffff) { zm_msg0_mm(ZM_LV_3, "probe req SSID not found"); return; @@ -1561,8 +1583,8 @@ void zfProcessProbeReq(zdev_t* dev, zbuf_t* buf, u16_t* src) { for (j=0; jap.ssid[i][j]) + ch = zmw_rx_buf_readb(dev, buf, offset+2+j); + if (ch != wd->ap.ssid[i][j]) { break; } @@ -1814,7 +1836,8 @@ u16_t zfFindATHExtCap(zdev_t* dev, zbuf_t* buf, u8_t type, u8_t subtype) /* Get offset of first element */ subType = (zmw_rx_buf_readb(dev, buf, 0) >> 4); - if ((offset = zgElementOffsetTable[subType]) == 0xff) + offset = zgElementOffsetTable[subType]; + if (offset == 0xff) { zm_assert(0); } @@ -1828,10 +1851,12 @@ u16_t zfFindATHExtCap(zdev_t* dev, zbuf_t* buf, u8_t type, u8_t subtype) while ((offset+2)(bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen > bufLen - offset) { /* Element length error */ return 0xffff; @@ -1850,7 +1875,8 @@ u16_t zfFindATHExtCap(zdev_t* dev, zbuf_t* buf, u8_t type, u8_t subtype) { if ( subtype != 0xff ) { - if ( (tmp = zmw_rx_buf_readb(dev, buf, offset+6)) == subtype ) + tmp = zmw_rx_buf_readb(dev, buf, offset+6); + if (tmp == subtype ) { return offset; } @@ -1863,7 +1889,8 @@ u16_t zfFindATHExtCap(zdev_t* dev, zbuf_t* buf, u8_t type, u8_t subtype) } /* Advance to next element */ - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) == 0) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen == 0) { return 0xffff; } @@ -1884,7 +1911,8 @@ u16_t zfFindBrdcmMrvlRlnkExtCap(zdev_t* dev, zbuf_t* buf) /* Get offset of first element */ subType = (zmw_rx_buf_readb(dev, buf, 0) >> 4); - if ((offset = zgElementOffsetTable[subType]) == 0xff) + offset = zgElementOffsetTable[subType]; + if (offset == 0xff) { zm_assert(0); } @@ -1898,10 +1926,12 @@ u16_t zfFindBrdcmMrvlRlnkExtCap(zdev_t* dev, zbuf_t* buf) while ((offset+2)(bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen > bufLen - offset) { /* Element length error */ return 0xffff; @@ -1930,7 +1960,8 @@ u16_t zfFindBrdcmMrvlRlnkExtCap(zdev_t* dev, zbuf_t* buf) else if ((id = zmw_rx_buf_readb(dev, buf, offset)) == 0x7F) { /* Bingo */ - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1))>(bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen > bufLen - offset) { /* Element length error */ return 0xffff; @@ -1941,7 +1972,8 @@ u16_t zfFindBrdcmMrvlRlnkExtCap(zdev_t* dev, zbuf_t* buf) return 0xffff; } - if ((tmp = zmw_rx_buf_readb(dev, buf, offset+2)) == 0x01) + tmp = zmw_rx_buf_readb(dev, buf, offset+2); + if (tmp == 0x01) { return offset; @@ -1949,7 +1981,8 @@ u16_t zfFindBrdcmMrvlRlnkExtCap(zdev_t* dev, zbuf_t* buf) } /* Advance to next element */ - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) == 0) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen == 0) { return 0xffff; } @@ -1970,7 +2003,8 @@ u16_t zfFindMarvelExtCap(zdev_t* dev, zbuf_t* buf) /* Get offset of first element */ subType = (zmw_rx_buf_readb(dev, buf, 0) >> 4); - if ((offset = zgElementOffsetTable[subType]) == 0xff) + offset = zgElementOffsetTable[subType]; + if (offset == 0xff) { zm_assert(0); } @@ -1984,10 +2018,12 @@ u16_t zfFindMarvelExtCap(zdev_t* dev, zbuf_t* buf) while ((offset+2)(bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen>(bufLen - offset)) { /* Element length error */ return 0xffff; @@ -2008,7 +2044,8 @@ u16_t zfFindMarvelExtCap(zdev_t* dev, zbuf_t* buf) } /* Advance to next element */ - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) == 0) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen == 0) { return 0xffff; } @@ -2029,7 +2066,8 @@ u16_t zfFindBroadcomExtCap(zdev_t* dev, zbuf_t* buf) /* Get offset of first element */ subType = (zmw_rx_buf_readb(dev, buf, 0) >> 4); - if ((offset = zgElementOffsetTable[subType]) == 0xff) + offset = zgElementOffsetTable[subType]; + if (offset == 0xff) { zm_assert(0); } @@ -2043,10 +2081,12 @@ u16_t zfFindBroadcomExtCap(zdev_t* dev, zbuf_t* buf) while((offset+2) < bufLen) // including element ID and length (2bytes) { /* Search target element */ - if ((id = zmw_rx_buf_readb(dev, buf, offset)) == ZM_WLAN_EID_WIFI_IE) + id = zmw_rx_buf_readb(dev, buf, offset); + if (id == ZM_WLAN_EID_WIFI_IE) { /* Bingo */ - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) > (bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen > (bufLen - offset)) { /* Element length error */ return 0xffff; @@ -2066,7 +2106,8 @@ u16_t zfFindBroadcomExtCap(zdev_t* dev, zbuf_t* buf) } /* Advance to next element */ - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) == 0) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen == 0) { return 0xffff; } @@ -2089,7 +2130,8 @@ u16_t zfFindRlnkExtCap(zdev_t* dev, zbuf_t* buf) /* Get offset of first element */ subType = (zmw_rx_buf_readb(dev, buf, 0) >> 4); - if ((offset = zgElementOffsetTable[subType]) == 0xff) + offset = zgElementOffsetTable[subType]; + if (offset == 0xff) { zm_assert(0); } @@ -2103,10 +2145,12 @@ u16_t zfFindRlnkExtCap(zdev_t* dev, zbuf_t* buf) while((offset+2) < bufLen) // including element ID and length (2bytes) { /* Search target element */ - if ((id = zmw_rx_buf_readb(dev, buf, offset)) == 0x7F) + id = zmw_rx_buf_readb(dev, buf, offset); + if (id == 0x7F) { /* Bingo */ - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) > (bufLen - offset)) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen > bufLen - offset) { /* Element length error */ return 0xffff; @@ -2117,7 +2161,8 @@ u16_t zfFindRlnkExtCap(zdev_t* dev, zbuf_t* buf) return 0xffff; } - if ((tmp = zmw_rx_buf_readb(dev, buf, offset+2)) == 0x01) + tmp = zmw_rx_buf_readb(dev, buf, offset+2); + if (tmp == 0x01) { return offset; @@ -2125,7 +2170,8 @@ u16_t zfFindRlnkExtCap(zdev_t* dev, zbuf_t* buf) } /* Advance to next element */ - if ((elen = zmw_rx_buf_readb(dev, buf, offset+1)) == 0) + elen = zmw_rx_buf_readb(dev, buf, offset+1); + if (elen == 0) { return 0xffff; } diff --git a/drivers/staging/otus/80211core/cmmap.c b/drivers/staging/otus/80211core/cmmap.c index 7f09fde..8ec3830 100644 --- a/drivers/staging/otus/80211core/cmmap.c +++ b/drivers/staging/otus/80211core/cmmap.c @@ -141,7 +141,8 @@ u16_t zfApGetSTAInfo(zdev_t* dev, u16_t* addr, u16_t* state, u8_t* vap) zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { *vap = wd->ap.staTable[id].vap; *state = wd->ap.staTable[id++].state; @@ -163,7 +164,8 @@ void zfApGetStaQosType(zdev_t* dev, u16_t* addr, u8_t* qosType) zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { *qosType = wd->ap.staTable[id].qosType; } @@ -189,7 +191,8 @@ void zfApGetStaTxRateAndQosType(zdev_t* dev, u16_t* addr, u32_t* phyCtrl, zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { rate = (u8_t)zfRateCtrlGetTxRate(dev, &wd->ap.staTable[id].rcCell, rcProbingFlag); #ifdef ZM_AP_DEBUG @@ -234,7 +237,8 @@ void zfApGetStaEncryType(zdev_t* dev, u16_t* addr, u8_t* encryType) zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { *encryType = wd->ap.staTable[id].encryMode; } @@ -260,7 +264,8 @@ void zfApGetStaWpaIv(zdev_t* dev, u16_t* addr, u16_t* iv16, u32_t* iv32) zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { *iv16 = wd->ap.staTable[id].iv16; *iv32 = wd->ap.staTable[id].iv32; @@ -289,7 +294,8 @@ void zfApSetStaWpaIv(zdev_t* dev, u16_t* addr, u16_t iv16, u32_t iv32) zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { wd->ap.staTable[id].iv16 = iv16; wd->ap.staTable[id].iv32 = iv32; @@ -321,7 +327,8 @@ void zfApClearStaKey(zdev_t* dev, u16_t* addr) zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { /* Turn off STA's key information */ zfHpRemoveKey(dev, id+1); @@ -348,7 +355,8 @@ void zfApGetStaCencIvAndKeyIdx(zdev_t* dev, u16_t* addr, u32_t *iv, u8_t *keyIdx zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { *iv++ = wd->ap.staTable[id].txiv[0]; *iv++ = wd->ap.staTable[id].txiv[1]; @@ -379,7 +387,8 @@ void zfApSetStaCencIv(zdev_t* dev, u16_t* addr, u32_t *iv) zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { wd->ap.staTable[id].txiv[0] = *iv++; wd->ap.staTable[id].txiv[1] = *iv++; @@ -539,7 +548,8 @@ u16_t zfApBufferPsFrame(zdev_t* dev, zbuf_t* buf, u16_t port) { zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { if (wd->ap.staTable[id].psMode == 1) { @@ -603,7 +613,8 @@ u16_t zfApGetSTAInfoAndUpdatePs(zdev_t* dev, u16_t* addr, u16_t* state, //psMode=0; #endif - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { if (psMode != 0) { @@ -648,7 +659,8 @@ u16_t zfApGetSTAInfoAndUpdatePs(zdev_t* dev, u16_t* addr, u16_t* state, while (1) { - if ((psBuf = zfQueueGetWithMac(dev, wd->ap.uapsdQ, (u8_t*)addr, &mb)) != NULL) + psBuf = zfQueueGetWithMac(dev, wd->ap.uapsdQ, (u8_t*)addr, &mb); + if (psBuf != NULL) { zfTxSendEth(dev, psBuf, 0, ZM_EXTERNAL_ALLOC_BUF, 0); } @@ -730,7 +742,8 @@ u16_t zfApAddSta(zdev_t* dev, u16_t* addr, u16_t state, u16_t apId, u8_t type, zmw_enter_critical_section(dev); - if ((index = zfApFindSta(dev, addr)) != 0xffff) + index = zfApFindSta(dev, addr); + if (index != 0xffff) { zm_msg0_mm(ZM_LV_2, "found"); /* Update STA state */ @@ -963,7 +976,8 @@ void zfApProcessBeacon(zdev_t* dev, zbuf_t* buf) zm_msg0_mm(ZM_LV_3, "Rx beacon"); /* update Non-ERP flag(wd->ap.nonErpObss) */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_ERP)) == 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_ERP); + if (offset == 0xffff) { /* 11b OBSS */ wd->ap.protectedObss++; @@ -1046,7 +1060,8 @@ void zfApProcessAuth(zdev_t* dev, zbuf_t* buf, u16_t* src, u16_t apId) if (seq == 1) { /* AP : update STA to auth */ - if ((ret = zfApAddSta(dev, src, ZM_STATE_AUTH, apId, 0, 0, 0)) != 0xffff) + ret = zfApAddSta(dev, src, ZM_STATE_AUTH, apId, 0, 0, 0); + if (ret != 0xffff) { /* AP : call zfwAuthNotify() for host to judge */ //zfwAuthNotify(dev, src); @@ -1177,12 +1192,14 @@ void zfApProcessAsocReq(zdev_t* dev, zbuf_t* buf, u16_t* src, u16_t apId) zmw_get_wlan_dev(dev); /* AP : check SSID */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID)) != 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID); + if (offset != 0xffff) { k = 0; for (j = 0; j < wd->ap.vapNumber; j++) { - if ((tmp = zmw_buf_readb(dev, buf, offset+1)) + tmp = zmw_buf_readb(dev, buf, offset+1); + if (tmp != wd->ap.ssidLen[j]) { k++; @@ -1198,7 +1215,8 @@ void zfApProcessAsocReq(zdev_t* dev, zbuf_t* buf, u16_t* src, u16_t apId) { for (i=0; iap.ssidLen[j]; i++) { - if ((tmp = zmw_buf_readb(dev, buf, offset+2+i)) + tmp = zmw_buf_readb(dev, buf, offset+2+i); + if (tmp != wd->ap.ssid[j][i]) { break; @@ -1222,13 +1240,15 @@ void zfApProcessAsocReq(zdev_t* dev, zbuf_t* buf, u16_t* src, u16_t apId) /* TODO : check capability */ /* AP : check support rate */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_RATE)) != 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_RATE); + if (offset != 0xffff) { /* 11g STA */ staType = 1; } //CWYang(+) - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY)) != 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY); + if (offset != 0xffff) { /* 11n STA */ staType = 2; @@ -1251,7 +1271,8 @@ void zfApProcessAsocReq(zdev_t* dev, zbuf_t* buf, u16_t* src, u16_t apId) /* AP : check 11h */ /* AP : check WME */ - if ((offset = zfFindWifiElement(dev, buf, 2, 0)) != 0xffff) + offset = zfFindWifiElement(dev, buf, 2, 0); + if (offset != 0xffff) { /* WME STA */ qosType = 1; @@ -1265,7 +1286,8 @@ void zfApProcessAsocReq(zdev_t* dev, zbuf_t* buf, u16_t* src, u16_t apId) if (wd->ap.wpaSupport[apId] == 1) { - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_WPA_IE)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_WPA_IE); + if (offset != 0xffff) { /* get WPA IE */ u8_t length = zmw_rx_buf_readb(dev, buf, offset+1); @@ -1406,12 +1428,14 @@ void zfApStoreAsocReqIe(zdev_t* dev, zbuf_t* buf, u16_t aid) offset = 28; /* supported rates */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_SUPPORT_RATE)) == 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_SUPPORT_RATE); + if (offset == 0xffff) return; length = zmw_rx_buf_readb(dev, buf, offset + 1); /* extended supported rates */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_RATE)) == 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_RATE); + if (offset == 0xffff) return; length = zmw_rx_buf_readb(dev, buf, offset + 1); @@ -1426,7 +1450,8 @@ void zfApStoreAsocReqIe(zdev_t* dev, zbuf_t* buf, u16_t aid) /* QoS */ /* HT capabilities: 28 octets */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY)) != 0xffff) { + offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY); + if (offset != 0xffff) { /* atheros pre n */ htcap = (u8_t *)&wd->ap.ie[aid].HtCap; htcap[0] = zmw_rx_buf_readb(dev, buf, offset); @@ -1479,7 +1504,8 @@ void zfApProcessDeauth(zdev_t* dev, zbuf_t* buf, u16_t* src, u16_t apId) zmw_enter_critical_section(dev); /* AP : if SA=associated STA then deauthenticate STA */ - if ((aid = zfApFindSta(dev, src)) != 0xffff) + aid = zfApFindSta(dev, src); + if (aid != 0xffff) { /* Clear STA table */ wd->ap.staTable[aid].valid = 0; @@ -1500,7 +1526,8 @@ void zfApProcessDisasoc(zdev_t* dev, zbuf_t* buf, u16_t* src, u16_t apId) zmw_enter_critical_section(dev); /* AP : if SA=associated STA then deauthenticate STA */ - if ((aid = zfApFindSta(dev, src)) != 0xffff) + aid = zfApFindSta(dev, src); + if (aid != 0xffff) { /* Clear STA table */ wd->ap.staTable[aid].valid = 0; @@ -1674,7 +1701,8 @@ u16_t zfApAddIeTim(zdev_t* dev, zbuf_t* buf, u16_t offset, u16_t vap) dst[0] = zmw_tx_buf_readh(dev, psBuf, 0); dst[1] = zmw_tx_buf_readh(dev, psBuf, 2); dst[2] = zmw_tx_buf_readh(dev, psBuf, 4); - if ((aid = zfApFindSta(dev, dst)) != 0xffff) + aid = zfApFindSta(dev, dst); + if (aid != 0xffff) { if (wd->ap.staTable[aid].psMode != 0) { @@ -1896,7 +1924,8 @@ void zfApSendBeacon(zdev_t* dev) zm_msg1_mm(ZM_LV_2, "Send beacon, vap=", vap); /* TBD : Maximum size of beacon */ - if ((buf = zfwBufAllocate(dev, 1024)) == NULL) + buf = zfwBufAllocate(dev, 1024); + if (buf == NULL) { zm_msg0_mm(ZM_LV_0, "Alloc beacon buf Fail!"); return; @@ -2101,8 +2130,8 @@ u16_t zfIntrabssForward(zdev_t* dev, zbuf_t* buf, u8_t srcVap) if ((asocFlag == 1) || ((dst[0]&0x1) == 0x1)) { /* Allocate frame */ - if ((txBuf = zfwBufAllocate(dev, ZM_RX_FRAME_SIZE)) - == NULL) + txBuf = zfwBufAllocate(dev, ZM_RX_FRAME_SIZE); + if (txBuf == NULL) { zm_msg0_rx(ZM_LV_1, "Alloc intra-bss buf Fail!"); goto zlAllocError; @@ -2133,7 +2162,8 @@ u16_t zfIntrabssForward(zdev_t* dev, zbuf_t* buf, u8_t srcVap) /* Transmit frame */ /* Return error if port is disabled */ - if ((err = zfTxPortControl(dev, txBuf, vap)) == ZM_PORT_DISABLED) + err = zfTxPortControl(dev, txBuf, vap); + if (err == ZM_PORT_DISABLED) { err = ZM_ERR_TX_PORT_DISABLED; goto zlTxError; @@ -2141,7 +2171,8 @@ u16_t zfIntrabssForward(zdev_t* dev, zbuf_t* buf, u8_t srcVap) #if 1 /* AP : Buffer frame for power saving STA */ - if ((ret = zfApBufferPsFrame(dev, txBuf, vap)) == 0) + ret = zfApBufferPsFrame(dev, txBuf, vap); + if (ret == 0) { /* forward frame if not been buffered */ #if 1 @@ -2177,7 +2208,8 @@ struct zsMicVar* zfApGetRxMicKey(zdev_t* dev, zbuf_t* buf) macAddr[1] = sa[2] + (sa[3] << 8); macAddr[2] = sa[4] + (sa[5] << 8); - if ((id = zfApFindSta(dev, macAddr)) != 0xffff) + id = zfApFindSta(dev, macAddr); + if (id != 0xffff) return (&wd->ap.staTable[id].rxMicKey); return NULL; @@ -2369,7 +2401,8 @@ void zfApSendFailure(zdev_t* dev, u8_t* addr) staAddr[1] = addr[2] + (((u16_t)addr[3])<<8); staAddr[2] = addr[4] + (((u16_t)addr[5])<<8); zmw_enter_critical_section(dev); - if ((id = zfApFindSta(dev, staAddr)) != 0xffff) + id = zfApFindSta(dev, staAddr); + if (id != 0xffff) { /* Send failture : Add 3 minutes to inactive time that will */ /* will make STA been kicked out soon */ diff --git a/drivers/staging/otus/80211core/cmmsta.c b/drivers/staging/otus/80211core/cmmsta.c index c3fd475..0fda30d 100644 --- a/drivers/staging/otus/80211core/cmmsta.c +++ b/drivers/staging/otus/80211core/cmmsta.c @@ -602,7 +602,8 @@ void zfStaProtErpMonitor(zdev_t* dev, zbuf_t* buf) if (zfRxBufferEqualToStr(dev, buf, bssid, ZM_WLAN_HEADER_A2_OFFSET, 6)) { - if ( (offset=zfFindElement(dev, buf, ZM_WLAN_EID_ERP)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_ERP); + if (offset != 0xffff) { erp = zmw_rx_buf_readb(dev, buf, offset+2); @@ -628,7 +629,8 @@ void zfStaProtErpMonitor(zdev_t* dev, zbuf_t* buf) } //Check the existence of Non-N AP //Follow the check the "pBssInfo->EnableHT" - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY)) != 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY); + if (offset != 0xffff) {} else if ((offset = zfFindElement(dev, buf, ZM_WLAN_PREN2_EID_HTCAPABILITY)) != 0xffff) {} @@ -658,9 +660,11 @@ void zfStaUpdateWmeParameter(zdev_t* dev, zbuf_t* buf) if (wd->sta.wmeConnected != 0) { /* Find WME parameter element */ - if ((offset = zfFindWifiElement(dev, buf, 2, 1)) != 0xffff) + offset = zfFindWifiElement(dev, buf, 2, 1); + if (offset != 0xffff) { - if ((len = zmw_rx_buf_readb(dev, buf, offset+1)) >= 7) + len = zmw_rx_buf_readb(dev, buf, offset+1); + if (len >= 7) { rxWmeParameterSetCount=zmw_rx_buf_readb(dev, buf, offset+8); if (rxWmeParameterSetCount != wd->sta.wmeParameterSetCount) @@ -741,7 +745,8 @@ void zfStaUpdateDot11HDFS(zdev_t* dev, zbuf_t* buf) */ /* get EID(Channel Switch Announcement) */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_CHANNEL_SWITCH_ANNOUNCE)) == 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_CHANNEL_SWITCH_ANNOUNCE); + if (offset == 0xffff) { //zm_debug_msg0("EID(Channel Switch Announcement) not found"); return; @@ -1216,7 +1221,8 @@ void zfStaSendBeacon(zdev_t* dev) //zm_debug_msg0("\n"); /* TBD : Maximum size of beacon */ - if ((buf = zfwBufAllocate(dev, 1024)) == NULL) + buf = zfwBufAllocate(dev, 1024); + if (buf == NULL) { zm_debug_msg0("Allocate beacon buffer failed"); return; @@ -1370,7 +1376,8 @@ struct zsBssInfo* zfStaFindBssInfo(zdev_t* dev, zbuf_t* buf, struct zsWlanProbeR zmw_get_wlan_dev(dev); - if ((pBssInfo = wd->sta.bssList.head) == NULL) + pBssInfo = wd->sta.bssList.head; + if (pBssInfo == NULL) { return NULL; } @@ -1420,8 +1427,10 @@ struct zsBssInfo* zfStaFindBssInfo(zdev_t* dev, zbuf_t* buf, struct zsWlanProbeR /* Check channel */ /* Add check channel to solve the bug #31222 */ if (isMatched) { - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_DS)) != 0xffff) { - if ((length = zmw_rx_buf_readb(dev, buf, offset+1)) == 1) { + offset = zfFindElement(dev, buf, ZM_WLAN_EID_DS); + if (offset != 0xffff) { + length = zmw_rx_buf_readb(dev, buf, offset+1); + if (length == 1) { channel = zmw_rx_buf_readb(dev, buf, offset+2); if (zfHpIsAllowedChannel(dev, zfChNumToFreq(dev, channel, 0)) == 0) { frequency = 0; @@ -1473,7 +1482,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, } /* get SSID */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID)) == 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID); + if (offset == 0xffff) { zm_debug_msg0("EID(SSID) not found"); goto zlError; @@ -1506,7 +1516,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, zfCopyFromRxBuffer(dev, buf, pBssInfo->ssid, offset, length+2); /* get DS parameter */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_DS)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_DS); + if (offset != 0xffff) { length = zmw_rx_buf_readb(dev, buf, offset+1); if ( length != 1 ) @@ -1590,7 +1601,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, pBssInfo->frameBodysize = accumulateLen; /* get supported rates */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_SUPPORT_RATE)) == 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_SUPPORT_RATE); + if (offset == 0xffff) { zm_debug_msg0("EID(supported rates) not found"); goto zlError; @@ -1607,7 +1619,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, /* get Country information */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_COUNTRY)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_COUNTRY); + if (offset != 0xffff) { length = zmw_rx_buf_readb(dev, buf, offset+1); if (length > ZM_MAX_COUNTRY_INFO_SIZE) @@ -1625,13 +1638,15 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, } /* get ERP information */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_ERP)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_ERP); + if (offset != 0xffff) { pBssInfo->erp = zmw_rx_buf_readb(dev, buf, offset+2); } /* get extended supported rates */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_RATE)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_RATE); + if (offset != 0xffff) { length = zmw_rx_buf_readb(dev, buf, offset+1); if (length > ZM_MAX_SUPP_RATES_IE_SIZE) @@ -1648,7 +1663,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, } /* get WPA IE */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_WPA_IE)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_WPA_IE); + if (offset != 0xffff) { length = zmw_rx_buf_readb(dev, buf, offset+1); if (length > ZM_MAX_IE_SIZE) @@ -1664,7 +1680,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, } /* get WPS IE */ - if ((offset = zfFindWifiElement(dev, buf, 4, 0xff)) != 0xffff) + offset = zfFindWifiElement(dev, buf, 4, 0xff); + if (offset != 0xffff) { length = zmw_rx_buf_readb(dev, buf, offset+1); if (length > ZM_MAX_WPS_IE_SIZE ) @@ -1679,19 +1696,22 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, } /* get SuperG IE */ - if ((offset = zfFindSuperGElement(dev, buf, ZM_WLAN_EID_VENDOR_PRIVATE)) != 0xffff) + offset = zfFindSuperGElement(dev, buf, ZM_WLAN_EID_VENDOR_PRIVATE); + if (offset != 0xffff) { pBssInfo->apCap |= ZM_SuperG_AP; } /* get XR IE */ - if ((offset = zfFindXRElement(dev, buf, ZM_WLAN_EID_VENDOR_PRIVATE)) != 0xffff) + offset = zfFindXRElement(dev, buf, ZM_WLAN_EID_VENDOR_PRIVATE); + if (offset != 0xffff) { pBssInfo->apCap |= ZM_XR_AP; } /* get RSN IE */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_RSN_IE)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_RSN_IE); + if (offset != 0xffff) { length = zmw_rx_buf_readb(dev, buf, offset+1); if (length > ZM_MAX_IE_SIZE) @@ -1707,7 +1727,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, } #ifdef ZM_ENABLE_CENC /* get CENC IE */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_CENC_IE)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_CENC_IE); + if (offset != 0xffff) { length = zmw_rx_buf_readb(dev, buf, offset+1); if (length > ZM_MAX_IE_SIZE ) @@ -1726,7 +1747,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, /* get WME Parameter IE, probe rsp may contain WME parameter element */ //if ( wd->bQoSEnable ) { - if ((offset = zfFindWifiElement(dev, buf, 2, 1)) != 0xffff) + offset = zfFindWifiElement(dev, buf, 2, 1); + if (offset != 0xffff) { apQosInfo = zmw_rx_buf_readb(dev, buf, offset+8) & 0x80; pBssInfo->wmeSupport = 1 | apQosInfo; @@ -1742,7 +1764,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, } } //CWYang(+) - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY)) != 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY); + if (offset != 0xffff) { /* 11n AP */ pBssInfo->EnableHT = 1; @@ -1792,7 +1815,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, pBssInfo->EnableHT = 0; } /* HT information */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_HT_CAPABILITY)) != 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_HT_CAPABILITY); + if (offset != 0xffff) { /* atheros pre n */ pBssInfo->extChOffset = zmw_rx_buf_readb(dev, buf, offset+2) & 0x03; @@ -1848,7 +1872,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, } /* get Marvel Extended Capability */ - if ((offset = zfFindMarvelExtCap(dev, buf)) != 0xffff) + offset = zfFindMarvelExtCap(dev, buf); + if (offset != 0xffff) { pBssInfo->marvelAp = 1; } @@ -1858,7 +1883,8 @@ u8_t zfStaInitBssInfo(zdev_t* dev, zbuf_t* buf, } /* get ATIM window */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_IBSS)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_IBSS); + if (offset != 0xffff ) { pBssInfo->atimWindow = zmw_rx_buf_readh(dev, buf,offset+2); } @@ -2017,7 +2043,8 @@ zlUpdateRssi: pBssInfo->tick = wd->tick; /* Update ERP information */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_ERP)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_ERP); + if (offset != 0xffff) { pBssInfo->erp = zmw_rx_buf_readb(dev, buf, offset+2); } @@ -2116,7 +2143,8 @@ void zfStaProcessBeacon(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* AddInfo #if 0 else if ( wd->sta.oppositeCount == 0 ) { /* IBSS merge if SSID matched */ - if ( (offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID); + if (offset != 0xffff) { if ( (wd->sta.ssidLen == zmw_buf_readb(dev, buf, offset+1))&& (zfRxBufferEqualToStr(dev, buf, wd->sta.ssid, @@ -2410,7 +2438,8 @@ void zfStaProcessAsocRsp(zdev_t* dev, zbuf_t* buf) if ((wd->sta.wmeEnabled & ZM_STA_WME_ENABLE_BIT) != 0) //WME enabled { /* Asoc rsp may contain WME parameter element */ - if ((offset = zfFindWifiElement(dev, buf, 2, 1)) != 0xffff) + offset = zfFindWifiElement(dev, buf, 2, 1); + if (offset != 0xffff) { zm_debug_msg0("WME enable"); wd->sta.wmeConnected = 1; @@ -2605,7 +2634,8 @@ void zfStaStoreAsocRspIe(zdev_t* dev, zbuf_t* buf) return; } - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY)) != 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_HT_CAPABILITY); + if (offset != 0xffff) { /* atheros pre n */ zm_debug_msg0("atheros pre n"); @@ -2645,7 +2675,8 @@ void zfStaStoreAsocRspIe(zdev_t* dev, zbuf_t* buf) asocBw40 = (u8_t)((wd->sta.ie.HtCap.HtCapInfo & HTCAP_SupChannelWidthSet) >> 1); /* HT information */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_HT_CAPABILITY)) != 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_EXTENDED_HT_CAPABILITY); + if (offset != 0xffff) { /* atheros pre n */ zm_debug_msg0("atheros pre n HTINFO"); @@ -2815,7 +2846,8 @@ void zfStaProcessProbeReq(zdev_t* dev, zbuf_t* buf, u16_t* src) } /* check SSID */ - if ((offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID)) == 0xffff) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_SSID); + if (offset == 0xffff) { zm_msg0_mm(ZM_LV_3, "probe req SSID not found"); return; @@ -3774,7 +3806,8 @@ static struct zsBssInfo* zfInfraFindAPToConnect(zdev_t* dev, } /* Skip if AP in blocking list */ - if ((ret = zfStaIsApInBlockingList(dev, pBssInfo->bssid)) == TRUE) + ret = zfStaIsApInBlockingList(dev, pBssInfo->bssid); + if (ret == TRUE) { zm_msg0_mm(ZM_LV_0, "Candidate AP in blocking List, skip if there's stilla choice!"); pNowBssInfo = pBssInfo; @@ -5007,7 +5040,8 @@ void zfSendNullData(zdev_t* dev, u8_t type) zmw_get_wlan_dev(dev); - if ((buf = zfwBufAllocate(dev, 1024)) == NULL) + buf = zfwBufAllocate(dev, 1024); + if (buf == NULL) { zm_msg0_mm(ZM_LV_0, "Alloc mm buf Fail!"); return; @@ -5056,8 +5090,9 @@ void zfSendNullData(zdev_t* dev, u8_t type) /*increase unicast frame counter*/ wd->commTally.txUnicastFrm++; - if ((err = zfHpSend(dev, header, hlen, NULL, 0, NULL, 0, buf, 0, - ZM_INTERNAL_ALLOC_BUF, 0, 0xff)) != ZM_SUCCESS) + err = zfHpSend(dev, header, hlen, NULL, 0, NULL, 0, buf, 0, + ZM_INTERNAL_ALLOC_BUF, 0, 0xff); + if (err != ZM_SUCCESS) { goto zlError; } @@ -5083,7 +5118,8 @@ void zfSendPSPoll(zdev_t* dev) zmw_get_wlan_dev(dev); - if ((buf = zfwBufAllocate(dev, 1024)) == NULL) + buf = zfwBufAllocate(dev, 1024); + if (buf == NULL) { zm_msg0_mm(ZM_LV_0, "Alloc mm buf Fail!"); return; @@ -5107,8 +5143,9 @@ void zfSendPSPoll(zdev_t* dev) // goto zlError; //} - if ((err = zfHpSend(dev, header, hlen, NULL, 0, NULL, 0, buf, 0, - ZM_INTERNAL_ALLOC_BUF, 0, 0xff)) != ZM_SUCCESS) + err = zfHpSend(dev, header, hlen, NULL, 0, NULL, 0, buf, 0, + ZM_INTERNAL_ALLOC_BUF, 0, 0xff); + if (err != ZM_SUCCESS) { goto zlError; } @@ -5134,7 +5171,8 @@ void zfSendBA(zdev_t* dev, u16_t start_seq, u8_t *bitmap) zmw_get_wlan_dev(dev); - if ((buf = zfwBufAllocate(dev, 1024)) == NULL) + buf = zfwBufAllocate(dev, 1024); + if (buf == NULL) { zm_msg0_mm(ZM_LV_0, "Alloc mm buf Fail!"); return; @@ -5166,8 +5204,9 @@ void zfSendBA(zdev_t* dev, u16_t start_seq, u8_t *bitmap) offset++; } - if ((err = zfHpSend(dev, header, hlen, NULL, 0, NULL, 0, buf, 0, - ZM_INTERNAL_ALLOC_BUF, 0, 0xff)) != ZM_SUCCESS) + err = zfHpSend(dev, header, hlen, NULL, 0, NULL, 0, buf, 0, + ZM_INTERNAL_ALLOC_BUF, 0, 0xff); + if (err != ZM_SUCCESS) { goto zlError; } diff --git a/drivers/staging/otus/80211core/coid.c b/drivers/staging/otus/80211core/coid.c index 0524e1f..229aed8 100644 --- a/drivers/staging/otus/80211core/coid.c +++ b/drivers/staging/otus/80211core/coid.c @@ -553,7 +553,8 @@ u8_t zfiWlanSetKey(zdev_t* dev, struct zsKeyInfo keyInfo) if (keyInfo.flag & ZM_KEY_FLAG_PK) { /* Find STA's information */ - if ((id = zfApFindSta(dev, keyInfo.macAddr)) == 0xffff) + id = zfApFindSta(dev, keyInfo.macAddr); + if (id == 0xffff) { /* Can't STA in the staTable */ return ZM_STATUS_FAILURE; diff --git a/drivers/staging/otus/80211core/cpsmgr.c b/drivers/staging/otus/80211core/cpsmgr.c index 98e1f0c..32313be 100644 --- a/drivers/staging/otus/80211core/cpsmgr.c +++ b/drivers/staging/otus/80211core/cpsmgr.c @@ -602,7 +602,8 @@ void zfPowerSavingMgrProcessBeacon(zdev_t* dev, zbuf_t* buf) wd->sta.psMgr.isSleepAllowed = 1; - if ( (offset=zfFindElement(dev, buf, ZM_WLAN_EID_TIM)) != 0xffff ) + offset = zfFindElement(dev, buf, ZM_WLAN_EID_TIM); + if (offset != 0xffff) { length = zmw_rx_buf_readb(dev, buf, offset+1); diff --git a/drivers/staging/otus/80211core/ctxrx.c b/drivers/staging/otus/80211core/ctxrx.c index 4e7f4bd..a127196 100644 --- a/drivers/staging/otus/80211core/ctxrx.c +++ b/drivers/staging/otus/80211core/ctxrx.c @@ -109,7 +109,8 @@ void zfGetRxIvIcvLength(zdev_t* dev, zbuf_t* buf, u8_t vap, u16_t* pIvLen, addr[2] = zmw_rx_buf_readh(dev, buf, ZM_WLAN_HEADER_A2_OFFSET+4); /* Find STA's information */ - if ((id = zfApFindSta(dev, addr)) != 0xffff) + id = zfApFindSta(dev, addr); + if (id != 0xffff) { if (wd->ap.staTable[id].encryMode == ZM_TKIP) { @@ -132,7 +133,8 @@ void zfGetRxIvIcvLength(zdev_t* dev, zbuf_t* buf, u8_t vap, u16_t* pIvLen, } } /* WDS port checking */ - if ((wdsPort = vap - 0x20) >= ZM_MAX_WDS_SUPPORT) + wdsPort = vap - 0x20; + if (wdsPort >= ZM_MAX_WDS_SUPPORT) { wdsPort = 0; } @@ -741,8 +743,9 @@ u16_t zfiTxSend80211Mgmt(zdev_t* dev, zbuf_t* buf, u16_t port) zfwBufRemoveHead(dev, buf, 24); - if ((err = zfHpSend(dev, header, hlen, NULL, 0, NULL, 0, buf, 0, - ZM_EXTERNAL_ALLOC_BUF, 0, 0)) != ZM_SUCCESS) + err = zfHpSend(dev, header, hlen, NULL, 0, NULL, 0, buf, 0, + ZM_EXTERNAL_ALLOC_BUF, 0, 0); + if (err != ZM_SUCCESS) { goto zlError; } @@ -799,7 +802,8 @@ u16_t zfiTxSendEth(zdev_t* dev, zbuf_t* buf, u16_t port) ZM_PERFORMANCE_TX_MSDU(dev, wd->tick); zm_msg1_tx(ZM_LV_2, "zfiTxSendEth(), port=", port); /* Return error if port is disabled */ - if ((err = zfTxPortControl(dev, buf, port)) == ZM_PORT_DISABLED) + err = zfTxPortControl(dev, buf, port); + if (err == ZM_PORT_DISABLED) { err = ZM_ERR_TX_PORT_DISABLED; goto zlError; @@ -809,7 +813,8 @@ u16_t zfiTxSendEth(zdev_t* dev, zbuf_t* buf, u16_t port) if ((wd->wlanMode == ZM_MODE_AP) && (port < 0x20)) { /* AP : Buffer frame for power saving STA */ - if ((ret = zfApBufferPsFrame(dev, buf, port)) == 1) + ret = zfApBufferPsFrame(dev, buf, port); + if (ret == 1) { return ZM_SUCCESS; } @@ -1119,7 +1124,8 @@ u16_t zfTxSendEth(zdev_t* dev, zbuf_t* buf, u16_t port, u16_t bufType, u16_t fla i = 0; while( frameLen > 0 ) { - if ((frag.buf[i] = zfwBufAllocate(dev, fragLen+32)) != NULL) + frag.buf[i] = zfwBufAllocate(dev, fragLen+32); + if (frag.buf[i] != NULL) { frag.bufType[i] = ZM_INTERNAL_ALLOC_BUF; frag.seq[i] = frag.seq[0] + i; @@ -1276,7 +1282,8 @@ void zfCoreRecv(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo) bssid[2] = zmw_buf_readh(dev, buf, 20); /* Validate Rx frame */ - if ((ret = zfWlanRxValidate(dev, buf)) != ZM_SUCCESS) + ret = zfWlanRxValidate(dev, buf); + if (ret != ZM_SUCCESS) { zm_msg1_rx(ZM_LV_1, "Rx invalid:", ret); goto zlError; @@ -1301,7 +1308,8 @@ void zfCoreRecv(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo) #endif /* Filter Rx frame */ - if ((ret = zfWlanRxFilter(dev, buf)) != ZM_SUCCESS) + ret = zfWlanRxFilter(dev, buf); + if (ret != ZM_SUCCESS) { zm_msg1_rx(ZM_LV_1, "Rx duplicated:", ret); goto zlError; @@ -2086,7 +2094,8 @@ void zfiRecv80211(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo) //zm_msg0_rx(ZM_LV_0, "Rx data"); if (wd->wlanMode == ZM_MODE_AP) { - if ((ret = zfApUpdatePsBit(dev, buf, &vap, &uapsdTrig)) != ZM_SUCCESS) + ret = zfApUpdatePsBit(dev, buf, &vap, &uapsdTrig); + if (ret != ZM_SUCCESS) { zfwBufFree(dev, buf, 0); return; @@ -2115,7 +2124,8 @@ void zfiRecv80211(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo) for (ii=0; iiap.uapsdQ)) != NULL) - if ((psBuf = zfQueueGetWithMac(dev, wd->ap.uapsdQ, src, &mb)) != NULL) + psBuf = zfQueueGetWithMac(dev, wd->ap.uapsdQ, src, &mb); + if (psBuf != NULL) { if ((ii+1) == pktNum) { @@ -2232,7 +2242,8 @@ void zfiRecv80211(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo) } else { - if ( (buf = zfDefragment(dev, buf, &bIsDefrag, addInfo)) == NULL ) + buf = zfDefragment(dev, buf, &bIsDefrag, addInfo); + if (buf == NULL) { /* In this case, the buffer has been freed in zfDefragment */ return; @@ -2836,7 +2847,8 @@ void zfiRecv80211(zdev_t* dev, zbuf_t* buf, struct zsAdditionInfo* addInfo) zfwBufRemoveHead(dev, buf, 18+offset); #endif // ZM_ENABLE_NATIVE_WIFI #if 1 - if ((ret = zfIntrabssForward(dev, buf, vap)) == 1) + ret = zfIntrabssForward(dev, buf, vap); + if (ret == 1) { /* Free Rx buffer if intra-BSS unicast frame */ zm_msg0_rx(ZM_LV_2, "Free intra-BSS unicast frame"); @@ -3037,7 +3049,8 @@ u16_t zfWlanRxValidate(zdev_t* dev, zbuf_t* buf) } else if ( wd->wlanMode != ZM_MODE_PSEUDO ) { - if ( (ret=zfStaRxValidateFrame(dev, buf))!=ZM_SUCCESS ) + ret = zfStaRxValidateFrame(dev, buf); + if (ret != ZM_SUCCESS) { //zm_debug_msg1("discard frame, code = ", ret); return ret; @@ -3787,12 +3800,14 @@ void zfPushVtxq(zdev_t* dev) /* 2006.12.20, Serve Management queue */ while( zfHpGetFreeTxdCount(dev) > 0 ) { - if ((buf = zfGetVmmq(dev)) != 0) + buf = zfGetVmmq(dev); + if (buf != 0) { txed = 1; //zm_debug_msg2("send buf = ", buf); - if ((err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, - ZM_INTERNAL_ALLOC_BUF, 0, 0xff)) != ZM_SUCCESS) + err = zfHpSend(dev, NULL, 0, NULL, 0, NULL, 0, buf, 0, + ZM_INTERNAL_ALLOC_BUF, 0, 0xff); + if (err != ZM_SUCCESS) { zfwBufFree(dev, buf, 0); } @@ -3831,9 +3846,11 @@ void zfPushVtxq(zdev_t* dev) /* Service VTxQ[3] */ for (i=0; i<4; i++) { - if ((freeTxd = zfHpGetFreeTxdCount(dev)) >= 3) + freeTxd = zfHpGetFreeTxdCount(dev); + if (freeTxd >= 3) { - if ((buf = zfGetVtxq(dev, 3)) != 0) + buf = zfGetVtxq(dev, 3); + if (buf != 0) { txed = 1; //zm_debug_msg2("send buf = ", buf); @@ -3850,9 +3867,11 @@ void zfPushVtxq(zdev_t* dev) /* Service VTxQ[2] */ for (i=0; i<3; i++) { - if ((freeTxd = zfHpGetFreeTxdCount(dev)) >= (zfHpGetMaxTxdCount(dev)*1/4)) + freeTxd = zfHpGetFreeTxdCount(dev); + if (freeTxd >= (zfHpGetMaxTxdCount(dev)*1/4)) { - if ((buf = zfGetVtxq(dev, 2)) != 0) + buf = zfGetVtxq(dev, 2); + if (buf != 0) { txed = 1; zfTxSendEth(dev, buf, 0, ZM_EXTERNAL_ALLOC_BUF, 0); @@ -3860,7 +3879,8 @@ void zfPushVtxq(zdev_t* dev) } if (wd->sta.ac0PriorityHigherThanAc2 == 1) { - if ((buf = zfGetVtxq(dev, 0)) != 0) + buf = zfGetVtxq(dev, 0); + if (buf != 0) { txed = 1; zfTxSendEth(dev, buf, 0, ZM_EXTERNAL_ALLOC_BUF, 0); @@ -3877,9 +3897,11 @@ void zfPushVtxq(zdev_t* dev) /* Service VTxQ[0] */ for (i=0; i<2; i++) { - if ((freeTxd = zfHpGetFreeTxdCount(dev)) >= (zfHpGetMaxTxdCount(dev)*2/4)) + freeTxd = zfHpGetFreeTxdCount(dev); + if (freeTxd >= (zfHpGetMaxTxdCount(dev)*2/4)) { - if ((buf = zfGetVtxq(dev, 0)) != 0) + buf = zfGetVtxq(dev, 0); + if (buf != 0) { txed = 1; zfTxSendEth(dev, buf, 0, ZM_EXTERNAL_ALLOC_BUF, 0); @@ -3894,9 +3916,11 @@ void zfPushVtxq(zdev_t* dev) } /* Service VTxQ[1] */ - if ((freeTxd = zfHpGetFreeTxdCount(dev)) >= (zfHpGetMaxTxdCount(dev)*3/4)) + freeTxd = zfHpGetFreeTxdCount(dev); + if (freeTxd >= (zfHpGetMaxTxdCount(dev)*3/4)) { - if ((buf = zfGetVtxq(dev, 1)) != 0) + buf = zfGetVtxq(dev, 1); + if (buf != 0) { txed = 1; zfTxSendEth(dev, buf, 0, ZM_EXTERNAL_ALLOC_BUF, 0); @@ -3983,9 +4007,10 @@ void zf80211FrameSend(zdev_t* dev, zbuf_t* buf, u16_t* header, u16_t snapLen, } wd->ledStruct.txTraffic++; - if ((err = zfHpSend(dev, header, headerLen, snap, snapLen, + err = zfHpSend(dev, header, headerLen, snap, snapLen, tail, tailLen, buf, offset, - bufType, ac, keyIdx)) != ZM_SUCCESS) + bufType, ac, keyIdx); + if (err != ZM_SUCCESS) { if (bufType == ZM_EXTERNAL_ALLOC_BUF) { diff --git a/drivers/staging/otus/80211core/queue.c b/drivers/staging/otus/80211core/queue.c index d294831..29be4bd 100644 --- a/drivers/staging/otus/80211core/queue.c +++ b/drivers/staging/otus/80211core/queue.c @@ -31,8 +31,9 @@ struct zsQueue* zfQueueCreate(zdev_t* dev, u16_t size) { struct zsQueue* q; - if ((q = (struct zsQueue*)zfwMemAllocate(dev, sizeof(struct zsQueue) - + (sizeof(struct zsQueueCell)*(size-1)))) != NULL) + q = (struct zsQueue*)zfwMemAllocate(dev, sizeof(struct zsQueue) + + (sizeof(struct zsQueueCell)*(size-1))); + if (q != NULL) { q->size = size; q->sizeMask = size-1; diff --git a/drivers/staging/otus/80211core/ratectrl.c b/drivers/staging/otus/80211core/ratectrl.c index a43104c..a1abe2f 100644 --- a/drivers/staging/otus/80211core/ratectrl.c +++ b/drivers/staging/otus/80211core/ratectrl.c @@ -538,7 +538,8 @@ u16_t zfRateCtrlGetTxRate(zdev_t* dev, struct zsRcCell* rcCell, u16_t* probing) ((rcCell->currentRate <= 16) && ((wd->PER[rcCell->currentRate]/2) <= ZM_RATE_PROBING_THRESHOLD))) { - if ((newRate=zfRateCtrlGetHigherRate(rcCell)) != rcCell->currentRate) + newRate = zfRateCtrlGetHigherRate(rcCell); + if (newRate != rcCell->currentRate) { *probing = 1; wd->probeCount++; -- cgit v0.10.2 From 62fa452648d3098896bf5a8d78af4f058b355aa0 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:16:58 -0700 Subject: Staging: otus: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/otus/hal/hpmain.c b/drivers/staging/otus/hal/hpmain.c index 8dff5b9..5f412e0 100644 --- a/drivers/staging/otus/hal/hpmain.c +++ b/drivers/staging/otus/hal/hpmain.c @@ -142,8 +142,9 @@ u16_t zfHpInit(zdev_t* dev, u32_t frequency) if (wd->modeMDKEnable) { /* download the MDK firmware */ - if ((ret = zfFirmwareDownload(dev, (u32_t*)zcDKFwImage, - (u32_t)zcDKFwImageSize, ZM_FIRMWARE_WLAN_ADDR)) != ZM_SUCCESS) + ret = zfFirmwareDownload(dev, (u32_t*)zcDKFwImage, + (u32_t)zcDKFwImageSize, ZM_FIRMWARE_WLAN_ADDR); + if (ret != ZM_SUCCESS) { /* TODO : exception handling */ //return 1; @@ -153,8 +154,9 @@ u16_t zfHpInit(zdev_t* dev, u32_t frequency) { #ifndef ZM_OTUS_LINUX_PHASE_2 /* download the normal firmware */ - if ((ret = zfFirmwareDownload(dev, (u32_t*)zcFwImage, - (u32_t)zcFwImageSize, ZM_FIRMWARE_WLAN_ADDR)) != ZM_SUCCESS) + ret = zfFirmwareDownload(dev, (u32_t*)zcFwImage, + (u32_t)zcFwImageSize, ZM_FIRMWARE_WLAN_ADDR); + if (ret != ZM_SUCCESS) { /* TODO : exception handling */ //return 1; @@ -162,16 +164,18 @@ u16_t zfHpInit(zdev_t* dev, u32_t frequency) #else // 1-PH fw: ReadMac() store some global variable - if ((ret = zfFirmwareDownloadNotJump(dev, (u32_t*)zcFwBufImage, - (u32_t)zcFwBufImageSize, 0x102800)) != ZM_SUCCESS) + ret = zfFirmwareDownloadNotJump(dev, (u32_t*)zcFwBufImage, + (u32_t)zcFwBufImageSize, 0x102800); + if (ret != ZM_SUCCESS) { DbgPrint("Dl zcFwBufImage failed!"); } zfwSleep(dev, 1000); - if ((ret = zfFirmwareDownload(dev, (u32_t*)zcFwImage, - (u32_t)zcFwImageSize, ZM_FIRMWARE_WLAN_ADDR)) != ZM_SUCCESS) + ret = zfFirmwareDownload(dev, (u32_t*)zcFwImage, + (u32_t)zcFwImageSize, ZM_FIRMWARE_WLAN_ADDR); + if (ret != ZM_SUCCESS) { DbgPrint("Dl zcFwBufImage failed!"); } @@ -249,15 +253,17 @@ u16_t zfHpReinit(zdev_t* dev, u32_t frequency) #ifndef ZM_OTUS_LINUX_PHASE_2 /* Download firmware */ - if ((ret = zfFirmwareDownload(dev, (u32_t*)zcFwImage, - (u32_t)zcFwImageSize, ZM_FIRMWARE_WLAN_ADDR)) != ZM_SUCCESS) + ret = zfFirmwareDownload(dev, (u32_t*)zcFwImage, + (u32_t)zcFwImageSize, ZM_FIRMWARE_WLAN_ADDR); + if (ret != ZM_SUCCESS) { /* TODO : exception handling */ //return 1; } #else - if ((ret = zfFirmwareDownload(dev, (u32_t*)zcP2FwImage, - (u32_t)zcP2FwImageSize, ZM_FIRMWARE_WLAN_ADDR)) != ZM_SUCCESS) + ret = zfFirmwareDownload(dev, (u32_t*)zcP2FwImage, + (u32_t)zcP2FwImageSize, ZM_FIRMWARE_WLAN_ADDR); + if (ret != ZM_SUCCESS) { /* TODO : exception handling */ //return 1; diff --git a/drivers/staging/otus/usbdrv.c b/drivers/staging/otus/usbdrv.c index 0ce65b5..165a82b 100644 --- a/drivers/staging/otus/usbdrv.c +++ b/drivers/staging/otus/usbdrv.c @@ -350,7 +350,8 @@ int usbdrv_open(struct net_device *dev) } size = zfiGlobalDataSize(dev); - if ((mem = kmalloc(size, GFP_KERNEL)) == NULL) + mem = kmalloc(size, GFP_KERNEL); + if (mem == NULL) { rc = -EBUSY; goto exit; @@ -698,7 +699,8 @@ void usbdrv_remove1(struct pci_dev *pcid) struct net_device *dev; struct usbdrv_private *macp; - if (!(dev = (struct net_device *) pci_get_drvdata(pcid))) + dev = (struct net_device *)pci_get_drvdata(pcid); + if (!dev) return; macp = dev->ml_priv; diff --git a/drivers/staging/otus/zdusb.c b/drivers/staging/otus/zdusb.c index bb89d85..6509bc5 100644 --- a/drivers/staging/otus/zdusb.c +++ b/drivers/staging/otus/zdusb.c @@ -95,7 +95,8 @@ static int zfLnxProbe(struct usb_interface *interface, printk(KERN_NOTICE "USB 1.1 Host\n"); #endif - if (!(macp = kmalloc(sizeof(struct usbdrv_private), GFP_KERNEL))) + macp = kmalloc(sizeof(struct usbdrv_private), GFP_KERNEL); + if (!macp) { printk(KERN_ERR "out of memory allocating device structure\n"); result = -ENOMEM; -- cgit v0.10.2 From 6aed5295ae93fc7947ee50eb2789655b88f6c941 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:16:59 -0700 Subject: Staging: rt2860: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c index 68263ce..65b00e6 100644 --- a/drivers/staging/rt2860/common/cmm_data.c +++ b/drivers/staging/rt2860/common/cmm_data.c @@ -773,7 +773,8 @@ void RTMPDeQueuePacket(struct rt_rtmp_adapter *pAd, IN BOOLEAN bIntContext, u8 Q /* probe the Queue Head */ pQueue = &pAd->TxSwQueue[QueIdx]; - if ((pEntry = pQueue->Head) == NULL) { + pEntry = pQueue->Head; + if (pEntry == NULL) { DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags); break; @@ -824,7 +825,8 @@ void RTMPDeQueuePacket(struct rt_rtmp_adapter *pAd, IN BOOLEAN bIntContext, u8 Q } do { - if ((pEntry = pQueue->Head) == NULL) + pEntry = pQueue->Head; + if (pEntry == NULL) break; /* For TX_AMSDU_FRAME/TX_RALINK_FRAME, Need to check if next pakcet can do aggregation. */ diff --git a/drivers/staging/rt2860/common/cmm_wpa.c b/drivers/staging/rt2860/common/cmm_wpa.c index 94e119f..c16f376 100644 --- a/drivers/staging/rt2860/common/cmm_wpa.c +++ b/drivers/staging/rt2860/common/cmm_wpa.c @@ -2928,25 +2928,23 @@ void WpaShowAllsuite(u8 *rsnie, u32 rsnie_len) hex_dump("RSNIE", rsnie, rsnie_len); /* group cipher */ - if ((pSuite = - GetSuiteFromRSNIE(rsnie, rsnie_len, GROUP_SUITE, - &count)) != NULL) { + pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, GROUP_SUITE, &count); + if (pSuite != NULL) { hex_dump("group cipher", pSuite, 4 * count); } /* pairwise cipher */ - if ((pSuite = - GetSuiteFromRSNIE(rsnie, rsnie_len, PAIRWISE_SUITE, - &count)) != NULL) { + pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, PAIRWISE_SUITE, &count); + if (pSuite != NULL) { hex_dump("pairwise cipher", pSuite, 4 * count); } /* AKM */ - if ((pSuite = - GetSuiteFromRSNIE(rsnie, rsnie_len, AKM_SUITE, &count)) != NULL) { + pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, AKM_SUITE, &count); + if (pSuite != NULL) { hex_dump("AKM suite", pSuite, 4 * count); } /* PMKID */ - if ((pSuite = - GetSuiteFromRSNIE(rsnie, rsnie_len, PMKID_LIST, &count)) != NULL) { + pSuite = GetSuiteFromRSNIE(rsnie, rsnie_len, PMKID_LIST, &count); + if (pSuite != NULL) { hex_dump("PMKID", pSuite, LEN_PMKID); } diff --git a/drivers/staging/rt2860/common/spectrum.c b/drivers/staging/rt2860/common/spectrum.c index 51e38d8..2d5f847 100644 --- a/drivers/staging/rt2860/common/spectrum.c +++ b/drivers/staging/rt2860/common/spectrum.c @@ -1900,8 +1900,8 @@ static void PeerMeasureReportAction(struct rt_rtmp_adapter *pAd, /* if (pAd->CommonCfg.bIEEE80211H != TRUE) */ /* return; */ - if ((pMeasureReportInfo = - kmalloc(sizeof(struct rt_measure_rpi_report), GFP_ATOMIC)) == NULL) { + pMeasureReportInfo = kmalloc(sizeof(struct rt_measure_rpi_report), GFP_ATOMIC); + if (pMeasureReportInfo == NULL) { DBGPRINT(RT_DEBUG_ERROR, ("%s unable to alloc memory for measure report buffer (size=%zu).\n", __func__, sizeof(struct rt_measure_rpi_report))); @@ -2016,7 +2016,8 @@ static void PeerTpcRepAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_e NdisZeroMemory(&TpcRepInfo, sizeof(struct rt_tpc_report_info)); if (PeerTpcRepSanity (pAd, Elem->Msg, Elem->MsgLen, &DialogToken, &TpcRepInfo)) { - if ((pEntry = TpcReqLookUp(pAd, DialogToken)) != NULL) { + pEntry = TpcReqLookUp(pAd, DialogToken); + if (pEntry != NULL) { TpcReqDelete(pAd, pEntry->DialogToken); DBGPRINT(RT_DEBUG_TRACE, ("%s: DialogToken=%x, TxPwr=%d, LinkMargin=%d\n", diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c index bfda187..27b7810 100644 --- a/drivers/staging/rt2860/rt_linux.c +++ b/drivers/staging/rt2860/rt_linux.c @@ -463,8 +463,8 @@ void *duplicate_pkt(struct rt_rtmp_adapter *pAd, struct sk_buff *skb; void *pPacket = NULL; - if ((skb = - __dev_alloc_skb(HdrLen + DataSize + 2, MEM_ALLOC_FLAG)) != NULL) { + skb = __dev_alloc_skb(HdrLen + DataSize + 2, MEM_ALLOC_FLAG); + if (skb != NULL) { skb_reserve(skb, 2); NdisMoveMemory(skb_tail_pointer(skb), pHeader802_3, HdrLen); skb_put(skb, HdrLen); @@ -673,7 +673,8 @@ void RTMPSendWirelessEvent(struct rt_rtmp_adapter *pAd, return; } /*Allocate memory and copy the msg. */ - if ((pBuf = kmalloc(IW_CUSTOM_MAX_LEN, GFP_ATOMIC)) != NULL) { + pBuf = kmalloc(IW_CUSTOM_MAX_LEN, GFP_ATOMIC); + if (pBuf != NULL) { /*Prepare the payload */ memset(pBuf, 0, IW_CUSTOM_MAX_LEN); -- cgit v0.10.2 From 699910dd756d782a9d281414d20c89ef94302177 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:17:00 -0700 Subject: Staging: rt2870: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2870/common/rtusb_bulk.c b/drivers/staging/rt2870/common/rtusb_bulk.c index 625b872..d2746f8 100644 --- a/drivers/staging/rt2870/common/rtusb_bulk.c +++ b/drivers/staging/rt2870/common/rtusb_bulk.c @@ -474,7 +474,8 @@ void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd, (usb_complete_t) RTUSBBulkOutDataPacketComplete); pUrb = pHTTXContext->pUrb; - if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { + ret = RTUSB_SUBMIT_URB(pUrb); + if (ret != 0) { DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutDataPacket: Submit Tx URB failed %d\n", ret)); @@ -572,7 +573,8 @@ void RTUSBBulkOutNullFrame(struct rt_rtmp_adapter *pAd) (usb_complete_t) RTUSBBulkOutNullFrameComplete); pUrb = pNullContext->pUrb; - if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { + ret = RTUSB_SUBMIT_URB(pUrb); + if (ret != 0) { RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags); pAd->BulkOutPending[0] = FALSE; pAd->watchDogTxPendingCnt[0] = 0; @@ -666,7 +668,8 @@ void RTUSBBulkOutMLMEPacket(struct rt_rtmp_adapter *pAd, u8 Index) pUrb->transfer_flags &= (~URB_NO_TRANSFER_DMA_MAP); pUrb = pMLMEContext->pUrb; - if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { + ret = RTUSB_SUBMIT_URB(pUrb); + if (ret != 0) { DBGPRINT(RT_DEBUG_ERROR, ("RTUSBBulkOutMLMEPacket: Submit MLME URB failed %d\n", ret)); @@ -741,7 +744,8 @@ void RTUSBBulkOutPsPoll(struct rt_rtmp_adapter *pAd) (usb_complete_t) RTUSBBulkOutPsPollComplete); pUrb = pPsPollContext->pUrb; - if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { + ret = RTUSB_SUBMIT_URB(pUrb); + if (ret != 0) { RTMP_IRQ_LOCK(&pAd->BulkOutLock[0], IrqFlags); pAd->BulkOutPending[0] = FALSE; pAd->watchDogTxPendingCnt[0] = 0; @@ -798,7 +802,8 @@ void DoBulkIn(struct rt_rtmp_adapter *pAd) RTUSBInitRxDesc(pAd, pRxContext); pUrb = pRxContext->pUrb; - if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { /* fail */ + ret = RTUSB_SUBMIT_URB(pUrb); + if (ret != 0) { /* fail */ RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags); pRxContext->InUse = FALSE; diff --git a/drivers/staging/rt2870/common/rtusb_io.c b/drivers/staging/rt2870/common/rtusb_io.c index cde38fe..6b9ca24 100644 --- a/drivers/staging/rt2870/common/rtusb_io.c +++ b/drivers/staging/rt2870/common/rtusb_io.c @@ -1167,11 +1167,10 @@ void CMDHandler(struct rt_rtmp_adapter *pAd) (usb_complete_t) RTUSBBulkOutDataPacketComplete); - if ((ret = - RTUSB_SUBMIT_URB + ret = RTUSB_SUBMIT_URB (pHTTXContext-> - pUrb)) != - 0) { + pUrb); + if (ret != 0) { RTMP_INT_LOCK (&pAd-> BulkOutLock @@ -1540,7 +1539,8 @@ void CMDHandler(struct rt_rtmp_adapter *pAd) RTUSBInitRxDesc(pAd, pRxContext); pUrb = pRxContext->pUrb; - if ((ret = RTUSB_SUBMIT_URB(pUrb)) != 0) { /* fail */ + ret = RTUSB_SUBMIT_URB(pUrb); + if (ret != 0) { /* fail */ RTMP_IRQ_LOCK (&pAd-> -- cgit v0.10.2 From 53756de3831fb9aac83e4766221aac3bf6f6cfe7 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:17:01 -0700 Subject: Staging: rtl8187se: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c index be2d17f..5fdb8f3 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c @@ -1555,7 +1555,8 @@ ieee80211_rx_auth_rq(struct ieee80211_device *ieee, struct sk_buff *skb) //IEEE80211DMESG("Rx probe"); ieee->softmac_stats.rx_auth_rq++; - if ((status = auth_rq_parse(skb, dest))!= -1){ + status = auth_rq_parse(skb, dest); + if (status != -1) { ieee80211_resp_to_auth(ieee, status, dest); } //DMESG("Dest is "MACSTR, MAC2STR(dest)); diff --git a/drivers/staging/rtl8187se/r8180_core.c b/drivers/staging/rtl8187se/r8180_core.c index 55d12e3..88fe623 100644 --- a/drivers/staging/rtl8187se/r8180_core.c +++ b/drivers/staging/rtl8187se/r8180_core.c @@ -403,7 +403,8 @@ short buffer_add(struct buffer **buffer, u32 *buf, dma_addr_t dma, tmp=*buffer; while(tmp->next!=(*buffer)) tmp=tmp->next; - if ((tmp->next= kmalloc(sizeof(struct buffer),GFP_KERNEL)) == NULL){ + tmp->next = kmalloc(sizeof(struct buffer),GFP_KERNEL); + if (tmp->next == NULL) { DMESGE("Failed to kmalloc TX/RX struct"); return -1; } @@ -1155,7 +1156,8 @@ short alloc_rx_desc_ring(struct net_device *dev, u16 bufsize, int count) tmp=desc; for (i = 0; i < count; i++) { - if ((buf= kmalloc(bufsize * sizeof(u8),GFP_ATOMIC)) == NULL){ + buf = kmalloc(bufsize * sizeof(u8),GFP_ATOMIC); + if (buf == NULL) { DMESGE("Failed to kmalloc RX buffer"); return -1; } -- cgit v0.10.2 From d6d42dfbdf9148dbc69c6345b6cdf9132782f7b5 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:17:02 -0700 Subject: Staging: rtl8192e: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c index d1d7b08..b4beb20 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c @@ -1934,7 +1934,8 @@ ieee80211_rx_auth_rq(struct ieee80211_device *ieee, struct sk_buff *skb) //IEEE80211DMESG("Rx probe"); ieee->softmac_stats.rx_auth_rq++; - if ((status = auth_rq_parse(skb, dest))!= -1){ + status = auth_rq_parse(skb, dest); + if (status != -1) { ieee80211_resp_to_auth(ieee, status, dest); } //DMESG("Dest is "MACSTR, MAC2STR(dest)); diff --git a/drivers/staging/rtl8192e/r8192E_core.c b/drivers/staging/rtl8192e/r8192E_core.c index bb7e1ef..0b0506d 100644 --- a/drivers/staging/rtl8192e/r8192E_core.c +++ b/drivers/staging/rtl8192e/r8192E_core.c @@ -1864,13 +1864,15 @@ static short rtl8192_pci_initdescring(struct net_device *dev) /* general process for other queue */ for (i = 0; i < MAX_TX_QUEUE_COUNT; i++) { - if ((ret = rtl8192_alloc_tx_desc_ring(dev, i, priv->txringcount))) + ret = rtl8192_alloc_tx_desc_ring(dev, i, priv->txringcount); + if (ret) goto err_free_rings; } #if 0 /* specific process for hardware beacon process */ - if ((ret = rtl8192_alloc_tx_desc_ring(dev, MAX_TX_QUEUE_COUNT - 1, 2))) + ret = rtl8192_alloc_tx_desc_ring(dev, MAX_TX_QUEUE_COUNT - 1, 2); + if (ret) goto err_free_rings; #endif -- cgit v0.10.2 From 810ba6a25b390f8c72a65cc0141fa94a216f8a7a Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:17:03 -0700 Subject: Staging: rtl8192su: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c index 84a4e23..3cf5fdf 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c @@ -1691,7 +1691,8 @@ ieee80211_rx_auth_rq(struct ieee80211_device *ieee, struct sk_buff *skb) //IEEE80211DMESG("Rx probe"); ieee->softmac_stats.rx_auth_rq++; - if ((status = auth_rq_parse(skb, dest))!= -1){ + status = auth_rq_parse(skb, dest); + if (status != -1) { ieee80211_resp_to_auth(ieee, status, dest); } //DMESG("Dest is "MACSTR, MAC2STR(dest)); -- cgit v0.10.2 From d10219fcae91199284e990cbb1e23b5ec3a81db9 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:17:04 -0700 Subject: Staging: rtl8192u: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c index d54e3a7..148424a 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c @@ -1713,7 +1713,8 @@ ieee80211_rx_auth_rq(struct ieee80211_device *ieee, struct sk_buff *skb) //IEEE80211DMESG("Rx probe"); ieee->softmac_stats.rx_auth_rq++; - if ((status = auth_rq_parse(skb, dest))!= -1){ + status = auth_rq_parse(skb, dest); + if (status != -1) { ieee80211_resp_to_auth(ieee, status, dest); } //DMESG("Dest is "MACSTR, MAC2STR(dest)); -- cgit v0.10.2 From d2c6170bd1c4796ce5017de2987808a6db879483 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:17:05 -0700 Subject: Staging: vt6655: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/desc.h b/drivers/staging/vt6655/desc.h index b573ef7..0e11949 100644 --- a/drivers/staging/vt6655/desc.h +++ b/drivers/staging/vt6655/desc.h @@ -232,7 +232,8 @@ typedef struct tagDEVICE_RD_INFO { /* static inline PDEVICE_RD_INFO alloc_rd_info(void) { PDEVICE_RD_INFO ptr; - if ((ptr = kmalloc(sizeof(DEVICE_RD_INFO), GFP_ATOMIC)) == NULL) + ptr = kmalloc(sizeof(DEVICE_RD_INFO), GFP_ATOMIC); + if (ptr == NULL) return NULL; else { memset(ptr,0,sizeof(DEVICE_RD_INFO)); @@ -361,7 +362,8 @@ typedef struct tagDEVICE_TD_INFO{ /* static inline PDEVICE_TD_INFO alloc_td_info(void) { PDEVICE_TD_INFO ptr; - if ((ptr = kmalloc(sizeof(DEVICE_TD_INFO),GFP_ATOMIC))==NULL) + ptr = kmalloc(sizeof(DEVICE_TD_INFO),GFP_ATOMIC); + if (ptr == NULL) return NULL; else { memset(ptr,0,sizeof(DEVICE_TD_INFO)); diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index cde44d2..7a9f406 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -898,7 +898,8 @@ inline static BOOL device_get_ip(PSDevice pInfo) { static inline PDEVICE_RD_INFO alloc_rd_info(void) { PDEVICE_RD_INFO ptr; - if ((ptr = (PDEVICE_RD_INFO)kmalloc((int)sizeof(DEVICE_RD_INFO), (int)GFP_ATOMIC)) == NULL) + ptr = (PDEVICE_RD_INFO)kmalloc((int)sizeof(DEVICE_RD_INFO), (int)GFP_ATOMIC); + if (ptr == NULL) return NULL; else { memset(ptr,0,sizeof(DEVICE_RD_INFO)); @@ -908,7 +909,8 @@ static inline PDEVICE_RD_INFO alloc_rd_info(void) { static inline PDEVICE_TD_INFO alloc_td_info(void) { PDEVICE_TD_INFO ptr; - if ((ptr = (PDEVICE_TD_INFO)kmalloc((int)sizeof(DEVICE_TD_INFO), (int)GFP_ATOMIC))==NULL) + ptr = (PDEVICE_TD_INFO)kmalloc((int)sizeof(DEVICE_TD_INFO), (int)GFP_ATOMIC); + if (ptr == NULL) return NULL; else { memset(ptr,0,sizeof(DEVICE_TD_INFO)); diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index fde352b..50f02ee 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -638,7 +638,8 @@ byValue1 = SROMbyReadEmbedded(pDevice->PortOffset, EEP_OFS_ANTENNA); //2008-8-4 by chester //zonetype initial pDevice->byOriginalZonetype = pDevice->abyEEPROM[EEP_OFS_ZONETYPE]; - if((zonetype=Config_FileOperation(pDevice,FALSE,NULL)) >= 0) { //read zonetype file ok! + zonetype = Config_FileOperation(pDevice,FALSE,NULL); + if (zonetype >= 0) { //read zonetype file ok! if ((zonetype == 0)&& (pDevice->abyEEPROM[EEP_OFS_ZONETYPE] !=0x00)){ //for USA pDevice->abyEEPROM[EEP_OFS_ZONETYPE] = 0; diff --git a/drivers/staging/vt6655/iwctl.c b/drivers/staging/vt6655/iwctl.c index 824466d..7fa5842 100644 --- a/drivers/staging/vt6655/iwctl.c +++ b/drivers/staging/vt6655/iwctl.c @@ -1700,7 +1700,8 @@ int iwctl_giwpower(struct net_device *dev, DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWPOWER \n"); - if ((wrq->disabled = (mode == WMAC_POWER_CAM))) + wrq->disabled = (mode == WMAC_POWER_CAM); + if (wrq->disabled) return 0; if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { -- cgit v0.10.2 From bfbfeecca6957d749b95540626a6c348dc8d9301 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:17:06 -0700 Subject: Staging: vt6656: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index a8e1adb..f15e7b4 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1434,7 +1434,8 @@ static int Config_FileGetParameter(UCHAR *string, UCHAR *dest,UCHAR *source) source+=strlen(buf1); //find target string start point - if((start_p = kstrstr(source,buf1))==NULL) + start_p = kstrstr(source,buf1); + if (start_p == NULL) return FALSE; //check if current config line is marked by "#" ?? @@ -1446,7 +1447,8 @@ for(ii=1;;ii++) { } //find target string end point - if((end_p = kstrstr(start_p,"\n"))==NULL) { //cann't find "\n",but don't care + end_p = kstrstr(start_p,"\n"); + if (end_p == NULL) { //can't find "\n",but don't care end_p=start_p+strlen(start_p); //no include "\n" } @@ -1455,7 +1457,8 @@ for(ii=1;;ii++) { buf2[end_p-start_p]='\0'; //find value - if((start_p = kstrstr(buf2,"="))==NULL) + start_p = kstrstr(buf2,"="); + if (start_p == NULL) return FALSE; memset(buf1,0,100); strcpy(buf1,start_p+1); @@ -1548,7 +1551,8 @@ static int Read_config_file(PSDevice pDevice) { pDevice->config_file.eAuthenMode = -1; pDevice->config_file.eEncryptionStatus = -1; - if((buffer=Config_FileOperation(pDevice)) ==NULL) { + buffer = Config_FileOperation(pDevice); + if (buffer == NULL) { result =-1; return result; } diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 65e91a3..cd1da33 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -193,7 +193,8 @@ PIPEnsControlOut( usb_sndctrlpipe(pDevice->usb , 0), (char *) &pDevice->sUsbCtlRequest, pbyBuffer, wLength, s_nsControlInUsbIoCompleteWrite, pDevice); - if ((ntStatus = usb_submit_urb(pDevice->pControlURB, GFP_ATOMIC)) != 0) { + ntStatus = usb_submit_urb(pDevice->pControlURB, GFP_ATOMIC); + if (ntStatus != 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control send request submission failed: %d\n", ntStatus); return STATUS_FAILURE; } @@ -251,7 +252,8 @@ PIPEnsControlIn( usb_rcvctrlpipe(pDevice->usb , 0), (char *) &pDevice->sUsbCtlRequest, pbyBuffer, wLength, s_nsControlInUsbIoCompleteRead, pDevice); - if ((ntStatus = usb_submit_urb(pDevice->pControlURB, GFP_ATOMIC)) != 0) { + ntStatus = usb_submit_urb(pDevice->pControlURB, GFP_ATOMIC); + if (ntStatus != 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"control request submission failed: %d\n", ntStatus); }else { MP_SET_FLAG(pDevice, fMP_CONTROL_READS); @@ -414,7 +416,8 @@ usb_fill_bulk_urb(pDevice->pInterruptURB, #endif #endif - if ((ntStatus = usb_submit_urb(pDevice->pInterruptURB, GFP_ATOMIC)) != 0) { + ntStatus = usb_submit_urb(pDevice->pInterruptURB, GFP_ATOMIC); + if (ntStatus != 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit int URB failed %d\n", ntStatus); } @@ -494,7 +497,8 @@ s_nsInterruptUsbIoCompleteRead( if (pDevice->fKillEventPollingThread != TRUE) { #if 0 //reserve int URB submit - if ((ntStatus = usb_submit_urb(urb, GFP_ATOMIC)) != 0) { + ntStatus = usb_submit_urb(urb, GFP_ATOMIC); + if (ntStatus != 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Re-Submit int URB failed %d\n", ntStatus); } #else //replace int URB submit by bulk transfer @@ -507,7 +511,8 @@ s_nsInterruptUsbIoCompleteRead( s_nsInterruptUsbIoCompleteRead, pDevice); - if ((ntStatus = usb_submit_urb(pDevice->pInterruptURB, GFP_ATOMIC)) != 0) { + ntStatus = usb_submit_urb(pDevice->pInterruptURB, GFP_ATOMIC); + if (ntStatus != 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit int URB failed %d\n", ntStatus); } @@ -572,7 +577,8 @@ PIPEnsBulkInUsbRead( s_nsBulkInUsbIoCompleteRead, pRCB); - if((ntStatus = usb_submit_urb(pUrb, GFP_ATOMIC)) != 0){ + ntStatus = usb_submit_urb(pUrb, GFP_ATOMIC); + if (ntStatus != 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit Rx URB failed %d\n", ntStatus); return STATUS_FAILURE ; } @@ -718,7 +724,8 @@ PIPEnsSendBulkOut( s_nsBulkOutIoCompleteWrite, pContext); - if((status = usb_submit_urb(pUrb, GFP_ATOMIC))!=0) + status = usb_submit_urb(pUrb, GFP_ATOMIC); + if (status != 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Submit Tx URB failed %d\n", status); return STATUS_FAILURE; -- cgit v0.10.2 From 491dbc8d1ae56199ad199830d16c77c8317aa987 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Wed, 24 Mar 2010 22:17:07 -0700 Subject: Staging: wlags49_h2: Hoist assign from if Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/hcf.c b/drivers/staging/wlags49_h2/hcf.c index 6e39f50..390628c 100644 --- a/drivers/staging/wlags49_h2/hcf.c +++ b/drivers/staging/wlags49_h2/hcf.c @@ -990,7 +990,8 @@ int rc = HCF_ERR_INCOMP_FW; ifbp->IFB_CntlOpt |= DMA_ENABLED; HCFASSERT( NT_ASSERT, NEVER_TESTED ) // make the entire rx descriptor chain DMA-owned, so the DMA engine can (re-)use it. - if ( ( p = ifbp->IFB_FirstDesc[DMA_RX] ) != NULL ) { //;? Think this over again in the light of the new chaining strategy + p = ifbp->IFB_FirstDesc[DMA_RX]; + if (p != NULL) { //;? Think this over again in the light of the new chaining strategy if ( 1 ) { //begin alternative HCFASSERT( NT_ASSERT, NEVER_TESTED ) put_frame_lst( ifbp, ifbp->IFB_FirstDesc[DMA_RX], DMA_RX ); @@ -2087,7 +2088,8 @@ wci_bufp pt; //pointer with the "right" type, just to help ease writing macr OPW( HREG_AUX_OFFSET, (hcf_16)(PLUG_DATA_OFFSET & 0x7E) ); io_port = ifbp->IFB_IOBase + HREG_AUX_DATA; //to prevent side effects of the MSF-defined macro p = ltvp->val; //destination char pointer (in LTV record) - if ( ( i = len - 1 ) > 0 ) { + i = len - 1; + if (i > 0 ) { pt = (wci_bufp)p; //just to help ease writing macros with embedded assembly IN_PORT_STRING_8_16( io_port, pt, i ); //space used by T: -1 } @@ -2674,7 +2676,8 @@ hcf_16 fid = 0; #if (HCF_EXT) & HCF_EXT_TX_CONT // Continuous transmit test if ( tx_cntl == HFS_TX_CNTL_TX_CONT ) { - if ( ( fid = get_fid( ifbp ) ) != 0 ) { + fid = get_fid(ifbp); + if (fid != 0 ) { //setup BAP to begin of TxFS (void)setup_bap( ifbp, fid, 0, IO_OUT ); //copy all the fragments in a transparent fashion @@ -2700,7 +2703,8 @@ hcf_16 fid = 0; #if (HCF_TYPE) & HCF_TYPE_WPA tx_cntl |= ifbp->IFB_MICTxCntl; #endif // HCF_TYPE_WPA - if ( (fid = ifbp->IFB_TxFID) == 0 && ( fid = get_fid( ifbp ) ) != 0 ) /* 4 */ + fid = ifbp->IFB_TxFID; + if (fid == 0 && ( fid = get_fid( ifbp ) ) != 0 ) /* 4 */ /* skip the next compound statement if: - pre-put message or - no fid available (which should never occur if the MSF adheres to the WCI) @@ -4860,7 +4864,8 @@ PROT_CNT_INI int rc; HCFTRACE( ifbp, HCF_TRACE_STRIO ); - if ( ( rc = ifbp->IFB_DefunctStat ) == HCF_SUCCESS ) { /*2*/ + rc = ifbp->IFB_DefunctStat; + if (rc == HCF_SUCCESS) { /*2*/ OPW( HREG_SELECT_1, fid ); /*4*/ OPW( HREG_OFFSET_1, offset ); if ( type == IO_IN ) { diff --git a/drivers/staging/wlags49_h2/wl_main.c b/drivers/staging/wlags49_h2/wl_main.c index cf0c384..88d0d47 100644 --- a/drivers/staging/wlags49_h2/wl_main.c +++ b/drivers/staging/wlags49_h2/wl_main.c @@ -3591,7 +3591,8 @@ int scull_read_procmem(char *buf, char **start, off_t offset, int len, int *eof, len=0; - if ( ( lp = ((struct net_device *)data)->priv ) == NULL ) { + lp = ((struct net_device *)data)->priv; + if (lp == NULL) { len += sprintf(buf+len,"No wl_private in scull_read_procmem\n" ); } else if ( lp->wlags49_type == 0 ){ ifbp = &lp->hcfCtx; diff --git a/drivers/staging/wlags49_h2/wl_netdev.c b/drivers/staging/wlags49_h2/wl_netdev.c index 1db73eb..1cfaee3 100644 --- a/drivers/staging/wlags49_h2/wl_netdev.c +++ b/drivers/staging/wlags49_h2/wl_netdev.c @@ -930,8 +930,10 @@ int wl_rx(struct net_device *dev) port = ( hfs_stat >> 8 ) & 0x0007; DBG_RX( DbgInfo, "Rx frame for port %d\n", port ); - if(( pktlen = lp->hcfCtx.IFB_RxLen ) != 0 ) { - if(( skb = ALLOC_SKB( pktlen )) != NULL ) { + pktlen = lp->hcfCtx.IFB_RxLen; + if (pktlen != 0) { + skb = ALLOC_SKB(pktlen); + if (skb != NULL) { /* Set the netdev based on the port */ switch( port ) { #ifdef USE_WDS @@ -1995,8 +1997,10 @@ int wl_rx_dma( struct net_device *dev ) port = ( hfs_stat >> 8 ) & 0x0007; DBG_RX( DbgInfo, "Rx frame for port %d\n", port ); - if(( pktlen = GET_BUF_CNT( desc_next )) != 0 ) { - if(( skb = ALLOC_SKB( pktlen )) != NULL ) { + pktlen = GET_BUF_CNT(desc_next); + if (pktlen != 0) { + skb = ALLOC_SKB(pktlen); + if (skb != NULL) { switch( port ) { #ifdef USE_WDS case 1: diff --git a/drivers/staging/wlags49_h2/wl_priv.c b/drivers/staging/wlags49_h2/wl_priv.c index 727ea8a..a67ff52 100644 --- a/drivers/staging/wlags49_h2/wl_priv.c +++ b/drivers/staging/wlags49_h2/wl_priv.c @@ -503,7 +503,8 @@ int wvlan_uil_send_diag_msg( struct uilreq *urq, struct wl_private *lp ) return result; } - if ((data = kmalloc(urq->len, GFP_KERNEL)) != NULL) { + data = kmalloc(urq->len, GFP_KERNEL); + if (data != NULL) { memset( Descp, 0, sizeof( DESC_STRCT )); memcpy( data, urq->data, urq->len ); @@ -617,7 +618,8 @@ int wvlan_uil_put_info( struct uilreq *urq, struct wl_private *lp ) LTV record, try to allocate it from the kernel stack. Otherwise, we just use our local LTV record. */ if( urq->len > sizeof( lp->ltvRecord )) { - if(( pLtv = (ltv_t *)kmalloc( urq->len, GFP_KERNEL )) != NULL ) { + pLtv = (ltv_t *)kmalloc( urq->len, GFP_KERNEL ); + if (pLtv != NULL) { ltvAllocated = TRUE; } else { DBG_ERROR( DbgInfo, "Alloc FAILED\n" ); @@ -1296,7 +1298,8 @@ int wvlan_uil_get_info( struct uilreq *urq, struct wl_private *lp ) LTV record, try to allocate it from the kernel stack. Otherwise, we just use our local LTV record. */ if( urq->len > sizeof( lp->ltvRecord )) { - if(( pLtv = (ltv_t *)kmalloc( urq->len, GFP_KERNEL )) != NULL ) { + pLtv = (ltv_t *)kmalloc( urq->len, GFP_KERNEL ); + if (pLtv != NULL) { ltvAllocated = TRUE; /* Copy the command/length information into the new buffer. */ diff --git a/drivers/staging/wlags49_h2/wl_sysfs.c b/drivers/staging/wlags49_h2/wl_sysfs.c index 864e01a..e4c8804 100644 --- a/drivers/staging/wlags49_h2/wl_sysfs.c +++ b/drivers/staging/wlags49_h2/wl_sysfs.c @@ -46,7 +46,8 @@ static ssize_t show_tallies(struct device *d, struct device_attribute *attr, if (dev_isalive(dev)) { wl_lock(lp, &flags); - if ((ret = wl_get_tallies(lp, &tallies)) == 0) { + ret = wl_get_tallies(lp, &tallies); + if (ret == 0) { wl_unlock(lp, &flags); ret = snprintf(buf, PAGE_SIZE, "TxUnicastFrames: %u\n" -- cgit v0.10.2 From b761cbb56ec8f4a1ad0b68a6d457d9e506c12037 Mon Sep 17 00:00:00 2001 From: Vikram Dhillon Date: Sun, 14 Mar 2010 20:39:30 -0400 Subject: Staging: arlan: arlan.h: Fixed some style issues Fixed some style issues in accordance with checkpatch.pl. Before the patch contained "total: 2 errors, 186 warnings, 535 lines checked" and now it has: total: 0 errors, 170 warnings. Most of the warnings that remain now are the line over 80 chars ones. Signed-off-by: Vikram Dhillon Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/arlan/arlan.h b/drivers/staging/arlan/arlan.h index ffcd3ea..3974acf 100644 --- a/drivers/staging/arlan/arlan.h +++ b/drivers/staging/arlan/arlan.h @@ -318,7 +318,7 @@ extern struct arlan_conf_stru arlan_conf[MAX_ARLANS]; struct TxParam { volatile short offset; volatile short length; - volatile u_char dest[6]; + volatile u_char dest[6]; volatile unsigned char clear; volatile unsigned char retries; volatile unsigned char routing; @@ -354,37 +354,37 @@ struct arlan_private { unsigned long tx_last_sent; unsigned long tx_last_cleared; unsigned long retransmissions; - unsigned long interrupt_ack_requested; + unsigned long interrupt_ack_requested; spinlock_t lock; unsigned long waiting_command_mask; - unsigned long card_polling_interval; - unsigned long last_command_buff_free_time; + unsigned long card_polling_interval; + unsigned long last_command_buff_free_time; - int under_reset; - int under_config; - int rx_command_given; - int tx_command_given; + int under_reset; + int under_config; + int rx_command_given; + int tx_command_given; unsigned long interrupt_processing_active; unsigned long last_rx_int_ack_time; unsigned long in_bytes; - unsigned long out_bytes; + unsigned long out_bytes; unsigned long in_time; unsigned long out_time; unsigned long in_time10; unsigned long out_time10; unsigned long in_bytes10; - unsigned long out_bytes10; + unsigned long out_bytes10; int init_etherdev_alloc; }; #define ARLAN_CLEAR 0x00 -#define ARLAN_RESET 0x01 +#define ARLAN_RESET 0x01 #define ARLAN_CHANNEL_ATTENTION 0x02 -#define ARLAN_INTERRUPT_ENABLE 0x04 -#define ARLAN_CLEAR_INTERRUPT 0x08 -#define ARLAN_POWER 0x40 +#define ARLAN_INTERRUPT_ENABLE 0x04 +#define ARLAN_CLEAR_INTERRUPT 0x08 +#define ARLAN_POWER 0x40 #define ARLAN_ACCESS 0x80 #define ARLAN_COM_CONF 0x01 @@ -445,8 +445,8 @@ struct arlan_private { #define registrationBad(dev)\ - (( READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationMode) > 0) && \ - ( READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationStatus) == 0)) + ((READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationMode) > 0) && \ + (READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationStatus) == 0)) #define readControlRegister(dev)\ @@ -461,9 +461,9 @@ struct arlan_private { int cr; \ \ cr = readControlRegister(dev);\ - if (cr & ARLAN_CHANNEL_ATTENTION) { \ + if (cr & ARLAN_CHANNEL_ATTENTION) \ writeControlRegister(dev, (cr & ~ARLAN_CHANNEL_ATTENTION));\ - } else \ + else \ writeControlRegister(dev, (cr | ARLAN_CHANNEL_ATTENTION));\ } @@ -504,8 +504,8 @@ struct arlan_private { #define ARLAN_COMMAND_RX_ABORT 0x000080 #define ARLAN_COMMAND_POWERDOWN 0x000100 #define ARLAN_COMMAND_POWERUP 0x000200 -#define ARLAN_COMMAND_SLOW_POLL 0x000400 -#define ARLAN_COMMAND_ACTIVATE 0x000800 +#define ARLAN_COMMAND_SLOW_POLL 0x000400 +#define ARLAN_COMMAND_ACTIVATE 0x000800 #define ARLAN_COMMAND_INT_ACK 0x001000 #define ARLAN_COMMAND_INT_ENABLE 0x002000 #define ARLAN_COMMAND_WAIT_NOW 0x004000 -- cgit v0.10.2 From 17e7b137df499a9d6c9c69dd28d427e6117aa17c Mon Sep 17 00:00:00 2001 From: Chihau Chau Date: Mon, 15 Mar 2010 00:44:54 -0300 Subject: Staging: dream: smd: smd_qmi: fix code style issues This fixes some code style issues about to #include instead of and some not necessary braces {}. Signed-off-by: Chihau Chau Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/smd/smd_qmi.c b/drivers/staging/dream/smd/smd_qmi.c index 687db14..9e9067f 100644 --- a/drivers/staging/dream/smd/smd_qmi.c +++ b/drivers/staging/dream/smd/smd_qmi.c @@ -25,7 +25,7 @@ #include #include -#include +#include #include #define QMI_CTL 0x00 @@ -643,11 +643,10 @@ static int qmi_print_state(struct qmi_ctxt *ctxt, char *buf, int max) } i = scnprintf(buf, max, "STATE=%s\n", statename); - i += scnprintf(buf + i, max - i, "CID=%d\n",ctxt->wds_client_id); + i += scnprintf(buf + i, max - i, "CID=%d\n", ctxt->wds_client_id); - if (ctxt->state != STATE_ONLINE){ + if (ctxt->state != STATE_ONLINE) return i; - } i += scnprintf(buf + i, max - i, "ADDR=%d.%d.%d.%d\n", ctxt->addr[0], ctxt->addr[1], ctxt->addr[2], ctxt->addr[3]); -- cgit v0.10.2 From 593a961649226aae13705dc066ee277f112b8397 Mon Sep 17 00:00:00 2001 From: Chihau Chau Date: Mon, 15 Mar 2010 00:29:02 -0300 Subject: Staging: dream: smd: smd_private: fix code style issues This put open braces '{' following structs on the same line. Signed-off-by: Chihau Chau Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/smd/smd_private.h b/drivers/staging/dream/smd/smd_private.h index c0eb3de..1b2e1c89 100644 --- a/drivers/staging/dream/smd/smd_private.h +++ b/drivers/staging/dream/smd/smd_private.h @@ -16,24 +16,21 @@ #ifndef _ARCH_ARM_MACH_MSM_MSM_SMD_PRIVATE_H_ #define _ARCH_ARM_MACH_MSM_MSM_SMD_PRIVATE_H_ -struct smem_heap_info -{ +struct smem_heap_info { unsigned initialized; unsigned free_offset; unsigned heap_remaining; unsigned reserved; }; -struct smem_heap_entry -{ +struct smem_heap_entry { unsigned allocated; unsigned offset; unsigned size; unsigned reserved; }; -struct smem_proc_comm -{ +struct smem_proc_comm { unsigned command; unsigned status; unsigned data1; @@ -49,22 +46,19 @@ struct smem_proc_comm #define VERSION_APPS 8 #define VERSION_MODEM 9 -struct smem_shared -{ +struct smem_shared { struct smem_proc_comm proc_comm[4]; unsigned version[32]; struct smem_heap_info heap_info; struct smem_heap_entry heap_toc[128]; }; -struct smsm_shared -{ +struct smsm_shared { unsigned host; unsigned state; }; -struct smsm_interrupt_info -{ +struct smsm_interrupt_info { uint32_t aArm_en_mask; uint32_t aArm_interrupts_pending; uint32_t aArm_wakeup_reason; @@ -108,8 +102,7 @@ void smsm_print_sleep_info(void); #define SMEM_NUM_SMD_CHANNELS 64 -typedef enum -{ +typedef enum { /* fixed items */ SMEM_PROC_COMM = 0, SMEM_HEAP_INFO, -- cgit v0.10.2 From 5ff0dd18267efc0e7b0352fe54b74114b58535ae Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Sat, 20 Mar 2010 15:13:00 +0100 Subject: Staging: dream: fix dangling i2c pointers Fix I2C-drivers which missed setting clientdata to NULL before freeing the structure it points to. Also fix drivers which do this _after_ the structure was freed already. Signed-off-by: Wolfram Sang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/synaptics_i2c_rmi.c b/drivers/staging/dream/synaptics_i2c_rmi.c index d2ca116..ae2f72c 100644 --- a/drivers/staging/dream/synaptics_i2c_rmi.c +++ b/drivers/staging/dream/synaptics_i2c_rmi.c @@ -535,6 +535,7 @@ err_input_register_device_failed: err_input_dev_alloc_failed: err_detect_failed: err_power_failed: + i2c_set_clientdata(client, NULL); kfree(ts); err_alloc_data_failed: err_check_functionality_failed: @@ -552,6 +553,7 @@ static int synaptics_ts_remove(struct i2c_client *client) else hrtimer_cancel(&ts->timer); input_unregister_device(ts->input_dev); + i2c_set_clientdata(client, NULL); kfree(ts); return 0; } -- cgit v0.10.2 From 665752e528c32e40d9f5c684abd53ebd2f1ae724 Mon Sep 17 00:00:00 2001 From: Wolfram Sang Date: Sat, 20 Mar 2010 15:13:01 +0100 Subject: Staging: go7007: fix dangling i2c pointers Fix I2C-drivers which missed setting clientdata to NULL before freeing the structure it points to. Also fix drivers which do this _after_ the structure was freed already. Signed-off-by: Wolfram Sang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/go7007/wis-saa7113.c b/drivers/staging/go7007/wis-saa7113.c index 5c12b4d..bd92545 100644 --- a/drivers/staging/go7007/wis-saa7113.c +++ b/drivers/staging/go7007/wis-saa7113.c @@ -289,6 +289,7 @@ static int wis_saa7113_probe(struct i2c_client *client, if (write_regs(client, initial_registers) < 0) { printk(KERN_ERR "wis-saa7113: error initializing SAA7113\n"); + i2c_set_clientdata(client, NULL); kfree(dec); return -ENODEV; } diff --git a/drivers/staging/go7007/wis-saa7115.c b/drivers/staging/go7007/wis-saa7115.c index 73f2283..b2eb804 100644 --- a/drivers/staging/go7007/wis-saa7115.c +++ b/drivers/staging/go7007/wis-saa7115.c @@ -422,6 +422,7 @@ static int wis_saa7115_probe(struct i2c_client *client, if (write_regs(client, initial_registers) < 0) { printk(KERN_ERR "wis-saa7115: error initializing SAA7115\n"); + i2c_set_clientdata(client, NULL); kfree(dec); return -ENODEV; } diff --git a/drivers/staging/go7007/wis-tw9903.c b/drivers/staging/go7007/wis-tw9903.c index 3ac6f78..2afea09 100644 --- a/drivers/staging/go7007/wis-tw9903.c +++ b/drivers/staging/go7007/wis-tw9903.c @@ -294,6 +294,7 @@ static int wis_tw9903_probe(struct i2c_client *client, if (write_regs(client, initial_registers) < 0) { printk(KERN_ERR "wis-tw9903: error initializing TW9903\n"); + i2c_set_clientdata(client, NULL); kfree(dec); return -ENODEV; } -- cgit v0.10.2 From cf1b02d0b8f5415c776d1de548bbf720fc782740 Mon Sep 17 00:00:00 2001 From: Hemanth V Date: Thu, 1 Apr 2010 18:46:19 +0530 Subject: Staging: dream: Synaptic: Remove non-standard multi touch support Signed-off-by: Hemanth V Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/synaptics_i2c_rmi.c b/drivers/staging/dream/synaptics_i2c_rmi.c index ae2f72c..e34d11f 100644 --- a/drivers/staging/dream/synaptics_i2c_rmi.c +++ b/drivers/staging/dream/synaptics_i2c_rmi.c @@ -109,9 +109,7 @@ static void decode_report(struct synaptics_ts_data *ts, u8 *buf) int f, a; int base = 2; int z = buf[1]; - int w = buf[0] >> 4; int finger = buf[0] & 7; - int finger2_pressed; for (f = 0; f < 2; f++) { u32 flip_flag = SYNAPTICS_FLIP_X; @@ -151,14 +149,7 @@ static void decode_report(struct synaptics_ts_data *ts, u8 *buf) input_report_abs(ts->input_dev, ABS_Y, pos[0][1]); } input_report_abs(ts->input_dev, ABS_PRESSURE, z); - input_report_abs(ts->input_dev, ABS_TOOL_WIDTH, w); input_report_key(ts->input_dev, BTN_TOUCH, finger); - finger2_pressed = finger > 1 && finger != 7; - input_report_key(ts->input_dev, BTN_2, finger2_pressed); - if (finger2_pressed) { - input_report_abs(ts->input_dev, ABS_HAT0X, pos[1][0]); - input_report_abs(ts->input_dev, ABS_HAT0Y, pos[1][1]); - } input_sync(ts->input_dev); } @@ -347,11 +338,6 @@ static void compute_areas(struct synaptics_ts_data *ts, -inactive_area_top, max_y + inactive_area_bottom, fuzz_y, 0); input_set_abs_params(ts->input_dev, ABS_PRESSURE, 0, 255, fuzz_p, 0); - input_set_abs_params(ts->input_dev, ABS_TOOL_WIDTH, 0, 15, fuzz_w, 0); - input_set_abs_params(ts->input_dev, ABS_HAT0X, -inactive_area_left, - max_x + inactive_area_right, fuzz_x, 0); - input_set_abs_params(ts->input_dev, ABS_HAT0Y, -inactive_area_top, - max_y + inactive_area_bottom, fuzz_y, 0); } static struct synaptics_i2c_rmi_platform_data fake_pdata; @@ -487,7 +473,6 @@ static int __devinit synaptics_ts_probe( __set_bit(EV_SYN, ts->input_dev->evbit); __set_bit(EV_KEY, ts->input_dev->evbit); __set_bit(BTN_TOUCH, ts->input_dev->keybit); - __set_bit(BTN_2, ts->input_dev->keybit); __set_bit(EV_ABS, ts->input_dev->evbit); compute_areas(ts, pdata, max_x, max_y); -- cgit v0.10.2 From 97dcc7c6fc52fe64f15b431397e44fba398b1768 Mon Sep 17 00:00:00 2001 From: Hemanth V Date: Thu, 1 Apr 2010 18:46:27 +0530 Subject: Staging: dream: Synaptic: Add threaded IRQ support Signed-off-by: Hemanth V Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/synaptics_i2c_rmi.c b/drivers/staging/dream/synaptics_i2c_rmi.c index e34d11f..1f020da 100644 --- a/drivers/staging/dream/synaptics_i2c_rmi.c +++ b/drivers/staging/dream/synaptics_i2c_rmi.c @@ -199,8 +199,6 @@ static void synaptics_ts_work_func(struct work_struct *work) decode_report(ts, buf); } - if (ts->use_irq) - enable_irq(ts->client->irq); } static enum hrtimer_restart synaptics_ts_timer_func(struct hrtimer *timer) @@ -218,8 +216,7 @@ static irqreturn_t synaptics_ts_irq_handler(int irq, void *dev_id) { struct synaptics_ts_data *ts = dev_id; - disable_irq_nosync(ts->client->irq); - queue_work(synaptics_wq, &ts->work); + synaptics_ts_work_func(&ts->work); return IRQ_HANDLED; } @@ -485,8 +482,10 @@ static int __devinit synaptics_ts_probe( goto err_input_register_device_failed; } if (client->irq) { - ret = request_irq(client->irq, synaptics_ts_irq_handler, - 0, client->name, ts); + ret = request_threaded_irq(client->irq, NULL, + synaptics_ts_irq_handler, + IRQF_TRIGGER_LOW|IRQF_ONESHOT, + client->name, ts); if (ret == 0) { ret = i2c_set(ts, 0xf1, 0x01, "enable abs int"); if (ret) -- cgit v0.10.2 From eb450e894524f912941b121ff036dae14b83d53d Mon Sep 17 00:00:00 2001 From: Chihau Chau Date: Sat, 10 Apr 2010 15:14:38 -0400 Subject: Staging: dream: pmem: fix some code style issues This fixes some code style issues like prohibited spaces after that open parenthesis '(' and before that close parenthesis ')', and lines over 80 characters. Signed-off-by: Chihau Chau Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/pmem.c b/drivers/staging/dream/pmem.c index 6edfdd4..dbd2b1d 100644 --- a/drivers/staging/dream/pmem.c +++ b/drivers/staging/dream/pmem.c @@ -38,17 +38,17 @@ * the file should not be released until put_pmem_file is called */ #define PMEM_FLAGS_BUSY 0x1 /* indicates that this is a suballocation of a larger master range */ -#define PMEM_FLAGS_CONNECTED ( 0x1 << 1 ) +#define PMEM_FLAGS_CONNECTED (0x1 << 1) /* indicates this is a master and not a sub allocation and that it is mmaped */ -#define PMEM_FLAGS_MASTERMAP ( 0x1 << 2 ) +#define PMEM_FLAGS_MASTERMAP (0x1 << 2) /* submap and unsubmap flags indicate: * 00: subregion has never been mmaped * 10: subregion has been mmaped, reference to the mm was taken * 11: subretion has ben released, refernece to the mm still held * 01: subretion has been released, reference to the mm has been released */ -#define PMEM_FLAGS_SUBMAP ( 0x1 << 3 ) -#define PMEM_FLAGS_UNSUBMAP ( 0x1 << 4 ) +#define PMEM_FLAGS_SUBMAP (0x1 << 3) +#define PMEM_FLAGS_UNSUBMAP (0x1 << 4) struct pmem_data { @@ -153,7 +153,7 @@ struct pmem_info { static struct pmem_info pmem[PMEM_MAX_DEVICES]; static int id_count; -#define PMEM_IS_FREE(id, index) ( !(pmem[id].bitmap[index].allocated) ) +#define PMEM_IS_FREE(id, index) (!(pmem[id].bitmap[index].allocated)) #define PMEM_ORDER(id, index) pmem[id].bitmap[index].order #define PMEM_BUDDY_INDEX(id, index) (index ^ (1 << PMEM_ORDER(id, index))) #define PMEM_NEXT_INDEX(id, index) (index + (1 << PMEM_ORDER(id, index))) @@ -845,8 +845,8 @@ static int pmem_connect(unsigned long connect, struct file *file) src_data = (struct pmem_data *)src_file->private_data; if (has_allocation(file) && (data->index != src_data->index)) { - printk(KERN_INFO "pmem: file is already mapped but doesn't match this" - " src_file!\n"); + printk(KERN_INFO "pmem: file is already mapped but doesn't " + "match this src_file!\n"); ret = -EINVAL; goto err_bad_file; } @@ -935,8 +935,8 @@ int pmem_remap(struct pmem_region *region, struct file *file, if (unlikely(!PMEM_IS_PAGE_ALIGNED(region->offset) || !PMEM_IS_PAGE_ALIGNED(region->len))) { #if PMEM_DEBUG - printk(KERN_DEBUG "pmem: request for unaligned pmem suballocation " - "%lx %lx\n", region->offset, region->len); + printk(KERN_DEBUG "pmem: request for unaligned pmem " + "suballocation %lx %lx\n", region->offset, region->len); #endif return -EINVAL; } @@ -1086,8 +1086,8 @@ static long pmem_ioctl(struct file *file, unsigned int cmd, unsigned long arg) region.offset = pmem_start_addr(id, data); region.len = pmem_len(id, data); } - printk(KERN_INFO "pmem: request for physical address of pmem region " - "from process %d.\n", current->pid); + printk(KERN_INFO "pmem: request for physical address " + "of pmem region from process %d.\n", current->pid); if (copy_to_user((void __user *)arg, ®ion, sizeof(struct pmem_region))) return -EFAULT; -- cgit v0.10.2 From 41f8b96e3d1a25e328ae77727fefa4e3c780f8a4 Mon Sep 17 00:00:00 2001 From: Chihau Chau Date: Thu, 15 Apr 2010 17:01:37 -0400 Subject: Staging: dream: smd: smd_qmi: fix code style issues This fixes some code style issues detected with the checkpatch.pl script, like not necessary braces {} in some if and else statements and include a KERN_INFO facility level in a printk() function. Signed-off-by: Chihau Chau Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/smd/smd_qmi.c b/drivers/staging/dream/smd/smd_qmi.c index 9e9067f..76fce51 100644 --- a/drivers/staging/dream/smd/smd_qmi.c +++ b/drivers/staging/dream/smd/smd_qmi.c @@ -211,11 +211,10 @@ static int qmi_send(struct qmi_ctxt *ctxt, struct qmi_msg *msg) qmi_dump_msg(msg, "send"); - if (msg->service == QMI_CTL) { + if (msg->service == QMI_CTL) hlen = QMUX_HEADER - 1; - } else { + else hlen = QMUX_HEADER; - } /* QMUX length is total header + total payload - IFC selector */ len = hlen + msg->size - 1; @@ -248,11 +247,10 @@ static int qmi_send(struct qmi_ctxt *ctxt, struct qmi_msg *msg) /* len + 1 takes the interface selector into account */ r = smd_write(ctxt->ch, msg->tlv - hlen, len + 1); - if (r != len) { + if (r != len) return -1; - } else { + else return 0; - } } static void qmi_process_ctl_msg(struct qmi_ctxt *ctxt, struct qmi_msg *msg) @@ -376,7 +374,7 @@ static void qmi_process_broadcast_wds_msg(struct qmi_ctxt *ctxt, static void qmi_process_wds_msg(struct qmi_ctxt *ctxt, struct qmi_msg *msg) { - printk("wds: %04x @ %02x\n", msg->type, msg->client_id); + printk(KERN_INFO "wds: %04x @ %02x\n", msg->type, msg->client_id); if (msg->client_id == ctxt->wds_client_id) { qmi_process_unicast_wds_msg(ctxt, msg); } else if (msg->client_id == 0xff) { @@ -504,9 +502,8 @@ static void qmi_notify(void *priv, unsigned event) case SMD_EVENT_DATA: { int sz; sz = smd_cur_packet_size(ctxt->ch); - if ((sz > 0) && (sz <= smd_read_avail(ctxt->ch))) { + if ((sz > 0) && (sz <= smd_read_avail(ctxt->ch))) queue_work(qmi_wq, &ctxt->read_work); - } break; } case SMD_EVENT_OPEN: -- cgit v0.10.2 From 1bd3302c383e8179423d15a53891c49663a06e23 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 17:00:57 +0200 Subject: Staging: usbip: fix space before tab in usbip_common.h This is a patch to the usbip_common.h fix space before tab warning found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/usbip/usbip_common.h b/drivers/staging/usbip/usbip_common.h index 6f1dcb1..e1bbd12 100644 --- a/drivers/staging/usbip/usbip_common.h +++ b/drivers/staging/usbip/usbip_common.h @@ -182,7 +182,7 @@ struct usbip_header_basic { __u32 devid; #define USBIP_DIR_OUT 0 -#define USBIP_DIR_IN 1 +#define USBIP_DIR_IN 1 __u32 direction; __u32 ep; /* endpoint number */ } __attribute__ ((packed)); -- cgit v0.10.2 From 005126872a3a605d6f7fc2f739f5d4234f9df92c Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 17:06:44 +0200 Subject: Staging: usbip: fix space before tab in vhci_hcd.c This is a patch to the vhci_hcd.c fix space before tab warning found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/usbip/vhci_hcd.c b/drivers/staging/usbip/vhci_hcd.c index 0b17661..be5d8db 100644 --- a/drivers/staging/usbip/vhci_hcd.c +++ b/drivers/staging/usbip/vhci_hcd.c @@ -1072,7 +1072,7 @@ static struct hc_driver vhci_hc_driver = { .flags = HCD_USB2, .start = vhci_start, - .stop = vhci_stop, + .stop = vhci_stop, .urb_enqueue = vhci_urb_enqueue, .urb_dequeue = vhci_urb_dequeue, -- cgit v0.10.2 From acc4e4168f87c05be31c3259ee0cb6262473c8ea Mon Sep 17 00:00:00 2001 From: Michael Sprecher Date: Wed, 17 Mar 2010 21:15:44 +0100 Subject: staging: usbip: fix coding style issues in the usbip driver This is a patch to the usbip driver that fixes up some coding style issues found by the checkpack.pl tool Signed-off-by: Michael Sprecher Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/usbip/vhci_tx.c b/drivers/staging/usbip/vhci_tx.c index b71b4c2..e1c1f71 100644 --- a/drivers/staging/usbip/vhci_tx.c +++ b/drivers/staging/usbip/vhci_tx.c @@ -179,7 +179,7 @@ static int vhci_send_cmd_unlink(struct vhci_device *vdev) memset(&msg, 0, sizeof(msg)); memset(&iov, 0, sizeof(iov)); - usbip_dbg_vhci_tx("setup cmd unlink, %lu \n", unlink->seqnum); + usbip_dbg_vhci_tx("setup cmd unlink, %lu\n", unlink->seqnum); /* 1. setup usbip_header */ -- cgit v0.10.2 From 013659f558d90369d1a555ae3c39cc42a6c3cb74 Mon Sep 17 00:00:00 2001 From: Andrea Gelmini Date: Thu, 25 Mar 2010 18:22:37 +0100 Subject: Staging: iio: Documentation/lis3l02dqbuffersimple.c: duplicated include drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c: dirent.h is included more than once. Signed-off-by: Andrea Gelmini Acked-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c b/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c index 2b5cfc5..6a8fa0c 100644 --- a/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c +++ b/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c @@ -19,7 +19,6 @@ #include #include -#include #include "iio_util.h" static const char *ring_access = "/dev/iio/lis3l02dq_ring_access"; -- cgit v0.10.2 From ceb0525c9e4f7e6a3ec762deb0960be3522030dc Mon Sep 17 00:00:00 2001 From: Barry Song <21cnbao@gmail.com> Date: Mon, 26 Apr 2010 12:19:01 +0800 Subject: Staging: iio: fix typo in userspace example codes and document Signed-off-by: Barry Song <21cnbao@gmail.com> Acked-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c b/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c index 6a8fa0c..08e012f 100644 --- a/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c +++ b/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c @@ -19,7 +19,7 @@ #include #include -#include "iio_util.h" +#include "iio_utils.h" static const char *ring_access = "/dev/iio/lis3l02dq_ring_access"; static const char *ring_event = "/dev/iio/lis3l02dq_ring_event"; diff --git a/drivers/staging/iio/Documentation/userspace.txt b/drivers/staging/iio/Documentation/userspace.txt index 661015a..4838818 100644 --- a/drivers/staging/iio/Documentation/userspace.txt +++ b/drivers/staging/iio/Documentation/userspace.txt @@ -56,5 +56,5 @@ KERNEL="ring_event_line*", ID="spi1.0", DRIVER="lis3l02dq", NAME="iio/lis3l02dq_ KERNEL="event_line*", ID="spi1.0", DRIVER="lis3l02dq", NAME="iio/lis3l02dq_event" KERNEL="ring_access*", ID="spi1.0", DRIVER="lis3l02dq", NAME="iio/lis3l02dq_ring_access" -The files, lis3l02dqbuffersimple.c and iio_util.h in this directory provide an example +The files, lis3l02dqbuffersimple.c and iio_utils.h in this directory provide an example of how to use the ring buffer and event interfaces. -- cgit v0.10.2 From a05d7ce36c55bc6496e1085584c9df901b899ab2 Mon Sep 17 00:00:00 2001 From: Michael Hennerich Date: Mon, 26 Apr 2010 10:36:36 +0200 Subject: Staging: iio: iio-trig-gpio: Remove redundant gpio_request Remove redundant gpio_request: The GPIO used as trigger IRQ, is also requested as gpio, but actually never read. Use platform resource facility to get IRQs numbers and flags. Make sure this driver can be used with any system IRQ, not necessarily limited to GPIO-IRQs. Use dev_err(dev...) and friends instead of printk(KERN_ERR...) Signed-off-by: Michael Hennerich Acked-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/trigger/iio-trig-gpio.c b/drivers/staging/iio/trigger/iio-trig-gpio.c index 0c3bad3..e40099f 100644 --- a/drivers/staging/iio/trigger/iio-trig-gpio.c +++ b/drivers/staging/iio/trigger/iio-trig-gpio.c @@ -13,7 +13,6 @@ * TODO: * * Add board config elements to allow specification of startup settings. - * Add configuration settings (irq type etc) */ #include @@ -31,7 +30,7 @@ DEFINE_MUTEX(iio_gpio_trigger_list_lock); struct iio_gpio_trigger_info { struct mutex in_use; - int gpio; + unsigned int irq; }; /* * Need to reference count these triggers and only enable gpio interrupts @@ -58,78 +57,77 @@ static const struct attribute_group iio_gpio_trigger_attr_group = { .attrs = iio_gpio_trigger_attrs, }; -static int iio_gpio_trigger_probe(struct platform_device *dev) +static int iio_gpio_trigger_probe(struct platform_device *pdev) { - int *pdata = dev->dev.platform_data; struct iio_gpio_trigger_info *trig_info; struct iio_trigger *trig, *trig2; - int i, irq, ret = 0; - if (!pdata) { - printk(KERN_ERR "No IIO gpio trigger platform data found\n"); - goto error_ret; - } - for (i = 0;; i++) { - if (!gpio_is_valid(pdata[i])) - break; - trig = iio_allocate_trigger(); - if (!trig) { - ret = -ENOMEM; - goto error_free_completed_registrations; - } + unsigned long irqflags; + struct resource *irq_res; + int irq, ret = 0, irq_res_cnt = 0; - trig_info = kzalloc(sizeof(*trig_info), GFP_KERNEL); - if (!trig_info) { - ret = -ENOMEM; - goto error_put_trigger; - } - trig->control_attrs = &iio_gpio_trigger_attr_group; - trig->private_data = trig_info; - trig_info->gpio = pdata[i]; - trig->owner = THIS_MODULE; - trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL); - if (!trig->name) { - ret = -ENOMEM; - goto error_free_trig_info; + do { + irq_res = platform_get_resource(pdev, + IORESOURCE_IRQ, irq_res_cnt); + + if (irq_res == NULL) { + if (irq_res_cnt == 0) + dev_err(&pdev->dev, "No GPIO IRQs specified"); + break; } - snprintf((char *)trig->name, - IIO_TRIGGER_NAME_LENGTH, - "gpiotrig%d", - pdata[i]); - ret = gpio_request(trig_info->gpio, trig->name); - if (ret) - goto error_free_name; - - ret = gpio_direction_input(trig_info->gpio); - if (ret) - goto error_release_gpio; - - irq = gpio_to_irq(trig_info->gpio); - if (irq < 0) { - ret = irq; - goto error_release_gpio; + irqflags = (irq_res->flags & IRQF_TRIGGER_MASK) | IRQF_SHARED; + + for (irq = irq_res->start; irq <= irq_res->end; irq++) { + + trig = iio_allocate_trigger(); + if (!trig) { + ret = -ENOMEM; + goto error_free_completed_registrations; + } + + trig_info = kzalloc(sizeof(*trig_info), GFP_KERNEL); + if (!trig_info) { + ret = -ENOMEM; + goto error_put_trigger; + } + trig->control_attrs = &iio_gpio_trigger_attr_group; + trig->private_data = trig_info; + trig_info->irq = irq; + trig->owner = THIS_MODULE; + trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, + GFP_KERNEL); + if (!trig->name) { + ret = -ENOMEM; + goto error_free_trig_info; + } + snprintf((char *)trig->name, + IIO_TRIGGER_NAME_LENGTH, + "irqtrig%d", irq); + + ret = request_irq(irq, iio_gpio_trigger_poll, + irqflags, trig->name, trig); + if (ret) { + dev_err(&pdev->dev, + "request IRQ-%d failed", irq); + goto error_free_name; + } + + ret = iio_trigger_register(trig); + if (ret) + goto error_release_irq; + + list_add_tail(&trig->alloc_list, + &iio_gpio_trigger_list); } - ret = request_irq(irq, iio_gpio_trigger_poll, - IRQF_TRIGGER_RISING, - trig->name, - trig); - if (ret) - goto error_release_gpio; + irq_res_cnt++; + } while (irq_res != NULL); - ret = iio_trigger_register(trig); - if (ret) - goto error_release_irq; - list_add_tail(&trig->alloc_list, &iio_gpio_trigger_list); - - } return 0; /* First clean up the partly allocated trigger */ error_release_irq: free_irq(irq, trig); -error_release_gpio: - gpio_free(trig_info->gpio); error_free_name: kfree(trig->name); error_free_trig_info: @@ -143,18 +141,16 @@ error_free_completed_registrations: &iio_gpio_trigger_list, alloc_list) { trig_info = trig->private_data; - free_irq(gpio_to_irq(trig_info->gpio), trig); - gpio_free(trig_info->gpio); + free_irq(gpio_to_irq(trig_info->irq), trig); kfree(trig->name); kfree(trig_info); iio_trigger_unregister(trig); } -error_ret: return ret; } -static int iio_gpio_trigger_remove(struct platform_device *dev) +static int iio_gpio_trigger_remove(struct platform_device *pdev) { struct iio_trigger *trig, *trig2; struct iio_gpio_trigger_info *trig_info; @@ -166,8 +162,7 @@ static int iio_gpio_trigger_remove(struct platform_device *dev) alloc_list) { trig_info = trig->private_data; iio_trigger_unregister(trig); - free_irq(gpio_to_irq(trig_info->gpio), trig); - gpio_free(trig_info->gpio); + free_irq(trig_info->irq, trig); kfree(trig->name); kfree(trig_info); iio_put_trigger(trig); -- cgit v0.10.2 From 7c327857016116eba1595c67c25d0314d1385e85 Mon Sep 17 00:00:00 2001 From: Michael Hennerich Date: Mon, 26 Apr 2010 10:49:10 +0200 Subject: Staging: iio: iio_trigger_find_by_name: Skip trailing newline if available Skip trailing newline if available. Signed-off-by: Michael Hennerich Acked-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c index 35ec80b..3c8f6ff 100644 --- a/drivers/staging/iio/industrialio-trigger.c +++ b/drivers/staging/iio/industrialio-trigger.c @@ -156,6 +156,9 @@ struct iio_trigger *iio_trigger_find_by_name(const char *name, size_t len) struct iio_trigger *trig; bool found = false; + if (len && name[len - 1] == '\n') + len--; + mutex_lock(&iio_trigger_list_lock); list_for_each_entry(trig, &iio_trigger_list, list) { if (strncmp(trig->name, name, len) == 0) { -- cgit v0.10.2 From cebb7e83361aba7ff05ec5cfb1bd1d5c8d983eed Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 14:24:21 +0200 Subject: Staging: wavelan: fix spaces and TAB coding style issue in i82586.h This is a patch to the i82586.h file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: spaces required around that '=' (ctx:VxV) and ERROR: space required before the open brace '{' Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wavelan/i82586.h b/drivers/staging/wavelan/i82586.h index 5f65b25..27f8324 100644 --- a/drivers/staging/wavelan/i82586.h +++ b/drivers/staging/wavelan/i82586.h @@ -30,14 +30,13 @@ #define ADDR_LEN 6 #define I82586NULL 0xFFFF -#define toff(t,p,f) (unsigned short)((void *)(&((t *)((void *)0 + (p)))->f) - (void *)0) +#define toff(t, p, f) (unsigned short)((void *)(&((t *)((void *)0 + (p)))->f) - (void *)0) /* * System Configuration Pointer (SCP). */ typedef struct scp_t scp_t; -struct scp_t -{ +struct scp_t { unsigned short scp_sysbus; /* 82586 bus width: */ #define SCP_SY_16BBUS (0x0 << 0) /* 16 bits */ #define SCP_SY_8BBUS (0x1 << 0) /* 8 bits. */ @@ -50,8 +49,7 @@ struct scp_t * Intermediate System Configuration Pointer (ISCP). */ typedef struct iscp_t iscp_t; -struct iscp_t -{ +struct iscp_t { unsigned short iscp_busy; /* set by CPU before first CA, */ /* cleared by 82586 after read. */ unsigned short iscp_offset; /* offset of SCB */ @@ -67,8 +65,7 @@ struct iscp_t * then issues a Channel Attention (CA) to alert the 82586. */ typedef struct scb_t scb_t; -struct scb_t -{ +struct scb_t { unsigned short scb_status; /* Status of 82586 */ #define SCB_ST_INT (0xF << 12) /* Some of: */ #define SCB_ST_CX (0x1 << 15) /* Cmd completed */ @@ -118,14 +115,13 @@ struct scb_t unsigned short scb_ovrnerrs; /* Frames lost due to slow bus */ }; -#define scboff(p,f) toff(scb_t, p, f) +#define scboff(p, f) toff(scb_t, p, f) /* * The eight Action Commands. */ typedef enum acmd_e acmd_e; -enum acmd_e -{ +enum acmd_e { acmd_nop = 0, /* Do nothing */ acmd_ia_setup = 1, /* Load an (ethernet) address into the */ /* 82586 */ @@ -143,8 +139,7 @@ enum acmd_e * Generic Action Command header. */ typedef struct ach_t ach_t; -struct ach_t -{ +struct ach_t { unsigned short ac_status; /* Command status: */ #define AC_SFLD_C (0x1 << 15) /* Command completed */ #define AC_SFLD_B (0x1 << 14) /* Busy executing */ @@ -172,14 +167,13 @@ struct ach_t unsigned short ac_link; /* Next Action Command */ }; -#define acoff(p,f) toff(ach_t, p, f) +#define acoff(p, f) toff(ach_t, p, f) /* * The Nop Action Command. */ typedef struct ac_nop_t ac_nop_t; -struct ac_nop_t -{ +struct ac_nop_t { ach_t nop_h; }; @@ -187,8 +181,7 @@ struct ac_nop_t * The IA-Setup Action Command. */ typedef struct ac_ias_t ac_ias_t; -struct ac_ias_t -{ +struct ac_ias_t { ach_t ias_h; unsigned char ias_addr[ADDR_LEN]; /* The (ethernet) address */ }; @@ -197,8 +190,7 @@ struct ac_ias_t * The Configure Action Command. */ typedef struct ac_cfg_t ac_cfg_t; -struct ac_cfg_t -{ +struct ac_cfg_t { ach_t cfg_h; unsigned char cfg_byte_cnt; /* Size foll data: 4-12 */ #define AC_CFG_BYTE_CNT(v) (((v) & 0xF) << 0) @@ -255,8 +247,7 @@ struct ac_cfg_t * The MC-Setup Action Command. */ typedef struct ac_mcs_t ac_mcs_t; -struct ac_mcs_t -{ +struct ac_mcs_t { ach_t mcs_h; unsigned short mcs_cnt; /* No. of bytes of MC addresses */ #if 0 @@ -271,8 +262,7 @@ struct ac_mcs_t * The Transmit Action Command. */ typedef struct ac_tx_t ac_tx_t; -struct ac_tx_t -{ +struct ac_tx_t { ach_t tx_h; unsigned short tx_tbd_offset; /* Address of list of buffers. */ #if 0 @@ -290,8 +280,7 @@ ac_cfg_t action command. * The Time Domain Reflectometer Action Command. */ typedef struct ac_tdr_t ac_tdr_t; -struct ac_tdr_t -{ +struct ac_tdr_t { ach_t tdr_h; unsigned short tdr_result; /* Result. */ #define AC_TDR_LNK_OK (0x1 << 15) /* No link problem */ @@ -307,8 +296,7 @@ struct ac_tdr_t * The Dump Action Command. */ typedef struct ac_dmp_t ac_dmp_t; -struct ac_dmp_t -{ +struct ac_dmp_t { ach_t dmp_h; unsigned short dmp_offset; /* Result. */ }; @@ -322,8 +310,7 @@ struct ac_dmp_t * The Diagnose Action Command. */ typedef struct ac_dgn_t ac_dgn_t; -struct ac_dgn_t -{ +struct ac_dgn_t { ach_t dgn_h; }; @@ -331,8 +318,7 @@ struct ac_dgn_t * Transmit Buffer Descriptor (TBD). */ typedef struct tbd_t tbd_t; -struct tbd_t -{ +struct tbd_t { unsigned short tbd_status; /* Written by the CPU */ #define TBD_STATUS_EOF (0x1 << 15) /* This TBD is the */ /* last for this frame */ @@ -347,8 +333,7 @@ struct tbd_t * Receive Buffer Descriptor (RBD). */ typedef struct rbd_t rbd_t; -struct rbd_t -{ +struct rbd_t { unsigned short rbd_status; /* Written by the 82586 */ #define RBD_STATUS_EOF (0x1 << 15) /* This RBD is the */ /* last for this frame */ @@ -365,14 +350,13 @@ struct rbd_t /* buffer can hold */ }; -#define rbdoff(p,f) toff(rbd_t, p, f) +#define rbdoff(p, f) toff(rbd_t, p, f) /* * Frame Descriptor (FD). */ typedef struct fd_t fd_t; -struct fd_t -{ +struct fd_t { unsigned short fd_status; /* Written by the 82586 */ #define FD_STATUS_C (0x1 << 15) /* Completed storing frame */ #define FD_STATUS_B (0x1 << 14) /* FD was consumed by RU */ @@ -403,7 +387,7 @@ in case, we leave the space. /* Written by 82586 */ }; -#define fdoff(p,f) toff(fd_t, p, f) +#define fdoff(p, f) toff(fd_t, p, f) /* * This software may only be used and distributed -- cgit v0.10.2 From a0ec96206192a58ec1c429aa1436717d2a351d0c Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 14:45:27 +0200 Subject: Staging: wavelan: fix spaces and TAB coding style issue in wavelan.h This is a patch to the wavelan.h file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: spaces required around that '=' (ctx:VxV) and ERROR: space required before the open brace '{' Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wavelan/wavelan.h b/drivers/staging/wavelan/wavelan.h index 9ab3605..1ebae10 100644 --- a/drivers/staging/wavelan/wavelan.h +++ b/drivers/staging/wavelan/wavelan.h @@ -26,8 +26,7 @@ * product (OEM, like DEC RoamAbout, Digital Ocean, or Epson), * you might need to modify this part to accommodate your hardware. */ -static const char MAC_ADDRESSES[][3] = -{ +static const char MAC_ADDRESSES[][3] = { { 0x08, 0x00, 0x0E }, /* AT&T WaveLAN (standard) & DEC RoamAbout */ { 0x08, 0x00, 0x6A }, /* AT&T WaveLAN (alternate) */ { 0x00, 0x00, 0xE1 }, /* Hitachi Wavelan */ @@ -67,8 +66,7 @@ static const int fixed_bands[] = { 915e6, 2.425e8, 2.46e8, 2.484e8, 2.4305e8 }; * (base is board port address). */ typedef union hacs_u hacs_u; -union hacs_u -{ +union hacs_u { unsigned short hu_command; /* Command register */ #define HACR_RESET 0x0001 /* Reset board */ #define HACR_CA 0x0002 /* Set Channel Attention for 82586 */ @@ -88,8 +86,7 @@ union hacs_u } __attribute__ ((packed)); typedef struct ha_t ha_t; -struct ha_t -{ +struct ha_t { hacs_u ha_cs; /* Command and status registers */ #define ha_command ha_cs.hu_command #define ha_status ha_cs.hu_status @@ -104,7 +101,7 @@ struct ha_t #define HA_SIZE 16 -#define hoff(p,f) (unsigned short)((void *)(&((ha_t *)((void *)0 + (p)))->f) - (void *)0) +#define hoff(p, f) (unsigned short)((void *)(&((ha_t *)((void *)0 + (p)))->f) - (void *)0) #define HACR(p) hoff(p, ha_command) #define HASR(p) hoff(p, ha_status) #define MMCR(p) hoff(p, ha_mmcr) @@ -127,7 +124,7 @@ struct ha_t #define PARAM_ACCESS_PIO 3 /* Mode 4: LAN parameter access mode */ /* Parameter access. */ #define PIO_MASK 3 /* register mask */ -#define PIOM(cmd,piono) ((u_short)cmd << 10 << (piono * 2)) +#define PIOM(cmd, piono) ((u_short)cmd << 10 << (piono * 2)) #define HACR_DEFAULT (HACR_OUT0 | HACR_OUT1 | HACR_16BITS | PIOM(STATIC_PIO, 0) | PIOM(AUTOINCR_PIO, 1) | PIOM(PARAM_ACCESS_PIO, 2)) #define HACR_INTRON (HACR_82586_INT_ENABLE | HACR_MMC_INT_ENABLE | HACR_INTR_CLR_ENABLE) @@ -156,8 +153,7 @@ struct ha_t * Parameter Storage Area (PSA). */ typedef struct psa_t psa_t; -struct psa_t -{ +struct psa_t { unsigned char psa_io_base_addr_1; /* [0x00] Base address 1 ??? */ unsigned char psa_io_base_addr_2; /* [0x01] Base address 2 */ unsigned char psa_io_base_addr_3; /* [0x02] Base address 3 */ @@ -208,7 +204,7 @@ struct psa_t /* Calculate offset of a field in the above structure. * Warning: only even addresses are used. */ -#define psaoff(p,f) ((unsigned short) ((void *)(&((psa_t *) ((void *) NULL + (p)))->f) - (void *) NULL)) +#define psaoff(p, f) ((unsigned short) ((void *)(&((psa_t *) ((void *) NULL + (p)))->f) - (void *) NULL)) /******************** MODEM MANAGEMENT INTERFACE ********************/ @@ -216,8 +212,7 @@ struct psa_t * Modem Management Controller (MMC) write structure. */ typedef struct mmw_t mmw_t; -struct mmw_t -{ +struct mmw_t { unsigned char mmw_encr_key[8]; /* encryption key */ unsigned char mmw_encr_enable; /* Enable or disable encryption. */ #define MMW_ENCR_ENABLE_MODE 0x02 /* mode of security option */ @@ -296,14 +291,13 @@ struct mmw_t #define MMW_SIZE 37 -#define mmwoff(p,f) (unsigned short)((void *)(&((mmw_t *)((void *)0 + (p)))->f) - (void *)0) +#define mmwoff(p, f) (unsigned short)((void *)(&((mmw_t *)((void *)0 + (p)))->f) - (void *)0) /* * Modem Management Controller (MMC) read structure. */ typedef struct mmr_t mmr_t; -struct mmr_t -{ +struct mmr_t { unsigned char mmr_unused0[8]; /* unused */ unsigned char mmr_des_status; /* encryption status */ unsigned char mmr_des_avail; /* encryption available (0x55 read) */ @@ -351,11 +345,10 @@ struct mmr_t #define MMR_SIZE 36 -#define mmroff(p,f) (unsigned short)((void *)(&((mmr_t *)((void *)0 + (p)))->f) - (void *)0) +#define mmroff(p, f) (unsigned short)((void *)(&((mmr_t *)((void *)0 + (p)))->f) - (void *)0) /* Make the two above structures one */ -typedef union mm_t -{ +typedef union mm_t { struct mmw_t w; /* Write to the mmc */ struct mmr_t r; /* Read from the mmc */ } mm_t; -- cgit v0.10.2 From 604ef85819ec42c3ec8faca62eee8deb534b89c9 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 14:58:01 +0200 Subject: Staging: wavelan: fix spaces and TAB coding style and macros issue in wavelan.p.h This is a patch to the wavelan.h file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: spaces required around that '=' (ctx:VxV) and ERROR: space required before the open brace '{' and Macros with complex values should be enclosed in parenthesis Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wavelan/wavelan.p.h b/drivers/staging/wavelan/wavelan.p.h index dbe8de6..d5f322c 100644 --- a/drivers/staging/wavelan/wavelan.p.h +++ b/drivers/staging/wavelan/wavelan.p.h @@ -125,7 +125,7 @@ * writing a WaveLAN ISA driver for the Mach microkernel. Girish * Welling had also worked on it. * Keith Moore modified this for the PCMCIA hardware. - * + * * Robert Morris ported these two drivers to BSDI * and added specific PCMCIA support (there is currently no equivalent * of the PCMCIA package under BSD). @@ -451,17 +451,18 @@ static const char *version = "wavelan.c : v24 (SMP + wireless extensions) 11/12/ /* ------------------------ PRIVATE IOCTL ------------------------ */ #define SIOCSIPQTHR SIOCIWFIRSTPRIV /* Set quality threshold */ -#define SIOCGIPQTHR SIOCIWFIRSTPRIV + 1 /* Get quality threshold */ +#define SIOCGIPQTHR (SIOCIWFIRSTPRIV + 1) /* Get quality threshold */ -#define SIOCSIPHISTO SIOCIWFIRSTPRIV + 2 /* Set histogram ranges */ -#define SIOCGIPHISTO SIOCIWFIRSTPRIV + 3 /* Get histogram values */ +#define SIOCSIPHISTO (SIOCIWFIRSTPRIV + 2) /* Set histogram ranges */ +#define SIOCGIPHISTO (SIOCIWFIRSTPRIV + 3) /* Get histogram values */ /****************************** TYPES ******************************/ /* Shortcuts */ typedef struct iw_statistics iw_stats; typedef struct iw_quality iw_qual; -typedef struct iw_freq iw_freq;typedef struct net_local net_local; +typedef struct iw_freq iw_freq; +typedef struct net_local net_local; typedef struct timer_list timer_list; /* Basic types */ @@ -474,10 +475,9 @@ typedef u_char mac_addr[WAVELAN_ADDR_SIZE]; /* Hardware address */ * keeps the generic data (same format for everybody) and "net_local" keeps * additional specific data. */ -struct net_local -{ - net_local * next; /* linked list of the devices */ - struct net_device * dev; /* reverse link */ +struct net_local { + net_local *next; /* linked list of the devices */ + struct net_device *dev; /* reverse link */ spinlock_t spinlock; /* Serialize access to the hardware (SMP) */ int nresets; /* number of hardware resets */ u_char reconfig_82586; /* We need to reconfigure the controller. */ @@ -534,7 +534,7 @@ static void int, /* offset in PSA */ u_char *, /* buffer to fill */ int), /* size to read */ - psa_write(u_long, /* Write to the PSA. */ + psa_write(u_long, /* Write to the PSA. */ u_short, /* hacr */ int, /* offset in PSA */ u_char *, /* buffer in memory */ @@ -654,8 +654,7 @@ static net_local * wavelan_list = (net_local *) NULL; * This table is used to translate the PSA value to IRQ number * and vice versa. */ -static u_char irqvals[] = -{ +static u_char irqvals[] = { 0, 0, 0, 0x01, 0x02, 0x04, 0, 0x08, 0, 0, 0x10, 0x20, @@ -665,8 +664,7 @@ static u_char irqvals[] = /* * Table of the available I/O addresses (base addresses) for WaveLAN */ -static unsigned short iobase[] = -{ +static unsigned short iobase[] = { #if 0 /* Leave out 0x3C0 for now -- seems to clash with some video * controllers. -- cgit v0.10.2 From b2561f212210a7c31b4d1c7d7136c38724719fa8 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 15:21:30 +0200 Subject: Staging: wavelan: fix spaces and TAB coding style issue in wavelan_cs.h This is a patch to the wavelan.h file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: spaces required around that '=' (ctx:VxV) and ERROR: space required before the open brace '{' Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wavelan/wavelan_cs.h b/drivers/staging/wavelan/wavelan_cs.h index 2e4bfe4..42e268d 100644 --- a/drivers/staging/wavelan/wavelan_cs.h +++ b/drivers/staging/wavelan/wavelan_cs.h @@ -18,7 +18,7 @@ */ /* - * Definitions for the AT&T GIS (formerly NCR) WaveLAN PCMCIA card: + * Definitions for the AT&T GIS (formerly NCR) WaveLAN PCMCIA card: * An Ethernet-like radio transceiver controlled by an Intel 82593 * coprocessor. * @@ -37,7 +37,7 @@ * in supporting documentation that copying and distribution is * by permission of M.I.T. M.I.T. makes no representations about * the suitability of this software for any purpose. It is pro- - * vided "as is" without express or implied warranty. + * vided "as is" without express or implied warranty. **************************************************************************** * * @@ -62,8 +62,7 @@ * like DEC RoamAbout, or Digital Ocean, Epson, ...), you must modify this * part to accommodate your hardware... */ -static const unsigned char MAC_ADDRESSES[][3] = -{ +static const unsigned char MAC_ADDRESSES[][3] = { { 0x08, 0x00, 0x0E }, /* AT&T Wavelan (standard) & DEC RoamAbout */ { 0x08, 0x00, 0x6A }, /* AT&T Wavelan (alternate) */ { 0x00, 0x00, 0xE1 }, /* Hitachi Wavelan */ @@ -171,8 +170,7 @@ static const int fixed_bands[] = { 915e6, 2.425e8, 2.46e8, 2.484e8, 2.4305e8 }; * Parameter Storage Area (PSA). */ typedef struct psa_t psa_t; -struct psa_t -{ +struct psa_t { /* For the PCMCIA Adapter, locations 0x00-0x0F are unused and fixed at 00 */ unsigned char psa_io_base_addr_1; /* [0x00] Base address 1 ??? */ unsigned char psa_io_base_addr_2; /* [0x01] Base address 2 */ @@ -191,14 +189,14 @@ struct psa_t #define PSA_UNIVERSAL 0 /* Universal (factory) */ #define PSA_LOCAL 1 /* Local */ unsigned char psa_comp_number; /* [0x1D] Compatability Number: */ -#define PSA_COMP_PC_AT_915 0 /* PC-AT 915 MHz */ -#define PSA_COMP_PC_MC_915 1 /* PC-MC 915 MHz */ -#define PSA_COMP_PC_AT_2400 2 /* PC-AT 2.4 GHz */ -#define PSA_COMP_PC_MC_2400 3 /* PC-MC 2.4 GHz */ -#define PSA_COMP_PCMCIA_915 4 /* PCMCIA 915 MHz or 2.0 */ +#define PSA_COMP_PC_AT_915 0 /* PC-AT 915 MHz */ +#define PSA_COMP_PC_MC_915 1 /* PC-MC 915 MHz */ +#define PSA_COMP_PC_AT_2400 2 /* PC-AT 2.4 GHz */ +#define PSA_COMP_PC_MC_2400 3 /* PC-MC 2.4 GHz */ +#define PSA_COMP_PCMCIA_915 4 /* PCMCIA 915 MHz or 2.0 */ unsigned char psa_thr_pre_set; /* [0x1E] Modem Threshold Preset */ unsigned char psa_feature_select; /* [0x1F] Call code required (1=on) */ -#define PSA_FEATURE_CALL_CODE 0x01 /* Call code required (Japan) */ +#define PSA_FEATURE_CALL_CODE 0x01 /* Call code required (Japan) */ unsigned char psa_subband; /* [0x20] Subband */ #define PSA_SUBBAND_915 0 /* 915 MHz or 2.0 */ #define PSA_SUBBAND_2425 1 /* 2425 MHz */ @@ -225,7 +223,7 @@ struct psa_t /* Calculate offset of a field in the above structure * Warning : only even addresses are used */ -#define psaoff(p,f) ((unsigned short) ((void *)(&((psa_t *) ((void *) NULL + (p)))->f) - (void *) NULL)) +#define psaoff(p, f) ((unsigned short) ((void *)(&((psa_t *) ((void *) NULL + (p)))->f) - (void *) NULL)) /******************** MODEM MANAGEMENT INTERFACE ********************/ @@ -233,8 +231,7 @@ struct psa_t * Modem Management Controller (MMC) write structure. */ typedef struct mmw_t mmw_t; -struct mmw_t -{ +struct mmw_t { unsigned char mmw_encr_key[8]; /* encryption key */ unsigned char mmw_encr_enable; /* enable/disable encryption */ #define MMW_ENCR_ENABLE_MODE 0x02 /* Mode of security option */ @@ -315,15 +312,14 @@ struct mmw_t #define MMW_SIZE 37 /* Calculate offset of a field in the above structure */ -#define mmwoff(p,f) (unsigned short)((void *)(&((mmw_t *)((void *)0 + (p)))->f) - (void *)0) +#define mmwoff(p, f) (unsigned short)((void *)(&((mmw_t *)((void *)0 + (p)))->f) - (void *)0) /* * Modem Management Controller (MMC) read structure. */ typedef struct mmr_t mmr_t; -struct mmr_t -{ +struct mmr_t { unsigned char mmr_unused0[8]; /* unused */ unsigned char mmr_des_status; /* encryption status */ unsigned char mmr_des_avail; /* encryption available (0x55 read) */ @@ -373,12 +369,11 @@ struct mmr_t #define MMR_SIZE 36 /* Calculate offset of a field in the above structure */ -#define mmroff(p,f) (unsigned short)((void *)(&((mmr_t *)((void *)0 + (p)))->f) - (void *)0) +#define mmroff(p, f) (unsigned short)((void *)(&((mmr_t *)((void *)0 + (p)))->f) - (void *)0) /* Make the two above structures one */ -typedef union mm_t -{ +typedef union mm_t { struct mmw_t w; /* Write to the mmc */ struct mmr_t r; /* Read from the mmc */ } mm_t; -- cgit v0.10.2 From fb549675ffc09afecea771229ce48a33c7ea604e Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 16:05:09 +0200 Subject: Staging: wavelan: fix macros, spaces and TAB coding style issue in wavelan_cs.p.h This is a patch to the wavelan.h file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like ERROR: spaces required around that '=' (ctx:VxV) and ERROR: space required before the open brace '{' and Macros complex expr -> (complex expr) Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wavelan/wavelan_cs.p.h b/drivers/staging/wavelan/wavelan_cs.p.h index 8fbfaa8..9427eb2 100644 --- a/drivers/staging/wavelan/wavelan_cs.p.h +++ b/drivers/staging/wavelan/wavelan_cs.p.h @@ -123,7 +123,7 @@ * writing a Wavelan ISA driver for the MACH microkernel. Girish * Welling had also worked on it. * Keith Moore modify this for the Pcmcia hardware. - * + * * Robert Morris port these two drivers to BSDI * and add specific Pcmcia support (there is currently no equivalent * of the PCMCIA package under BSD...). @@ -283,7 +283,7 @@ * Changes made in sixth release (2.9.1a) : * -------------------------------------- * - Change the detection code for multi manufacturer code support - * - Correct bug (hang kernel) in init when we were "rejecting" a card + * - Correct bug (hang kernel) in init when we were "rejecting" a card * * Changes made in seventh release (2.9.1b) : * ---------------------------------------- @@ -514,12 +514,12 @@ static const char *version = "wavelan_cs.c : v24 (SMP + wireless extensions) 11/ /* ------------------------ PRIVATE IOCTL ------------------------ */ #define SIOCSIPQTHR SIOCIWFIRSTPRIV /* Set quality threshold */ -#define SIOCGIPQTHR SIOCIWFIRSTPRIV + 1 /* Get quality threshold */ -#define SIOCSIPROAM SIOCIWFIRSTPRIV + 2 /* Set roaming state */ -#define SIOCGIPROAM SIOCIWFIRSTPRIV + 3 /* Get roaming state */ +#define SIOCGIPQTHR (SIOCIWFIRSTPRIV + 1) /* Get quality threshold */ +#define SIOCSIPROAM (SIOCIWFIRSTPRIV + 2) /* Set roaming state */ +#define SIOCGIPROAM (SIOCIWFIRSTPRIV + 3) /* Get roaming state */ -#define SIOCSIPHISTO SIOCIWFIRSTPRIV + 4 /* Set histogram ranges */ -#define SIOCGIPHISTO SIOCIWFIRSTPRIV + 5 /* Get histogram values */ +#define SIOCSIPHISTO (SIOCIWFIRSTPRIV + 4) /* Set histogram ranges */ +#define SIOCGIPHISTO (SIOCIWFIRSTPRIV + 5) /* Get histogram values */ /*************************** WaveLAN Roaming **************************/ #ifdef WAVELAN_ROAMING /* Conditional compile, see above in options */ @@ -532,17 +532,16 @@ static const char *version = "wavelan_cs.c : v24 (SMP + wireless extensions) 11/ #define SEARCH_THRESH_LOW 10 /* SNR to enter cell search */ #define SEARCH_THRESH_HIGH 13 /* SNR to leave cell search */ #define WAVELAN_ROAMING_DELTA 1 /* Hysteresis value (+/- SNR) */ -#define CELL_TIMEOUT 2*HZ /* in jiffies */ +#define CELL_TIMEOUT (2*HZ) /* in jiffies */ #define FAST_CELL_SEARCH 1 /* Boolean values... */ #define NWID_PROMISC 1 /* for code clarity. */ -typedef struct wavepoint_beacon -{ +typedef struct wavepoint_beacon { unsigned char dsap, /* Unused */ ssap, /* Unused */ ctrl, /* Unused */ - O,U,I, /* Unused */ + O, U, I, /* Unused */ spec_id1, /* Unused */ spec_id2, /* Unused */ pdu_type, /* Unused */ @@ -551,8 +550,7 @@ typedef struct wavepoint_beacon nwid; /* WavePoint NWID */ } wavepoint_beacon; -typedef struct wavepoint_history -{ +typedef struct wavepoint_history { unsigned short nwid; /* WavePoint's NWID */ int average_slow; /* SNR running average */ int average_fast; /* SNR running average */ @@ -564,8 +562,7 @@ typedef struct wavepoint_history unsigned long last_seen; /* Time of last beacon recvd, jiffies */ } wavepoint_history; -struct wavepoint_table -{ +struct wavepoint_table { wavepoint_history *head; /* Start of ringbuffer */ int num_wavepoints; /* No. of WavePoints visible */ unsigned char locked; /* Table lock */ @@ -592,12 +589,11 @@ typedef u_char mac_addr[WAVELAN_ADDR_SIZE]; /* Hardware address */ * keep the generic data (same format for everybody) and "net_local" keep * the additional specific data. */ -struct net_local -{ +struct net_local { dev_node_t node; /* ???? What is this stuff ???? */ - struct net_device * dev; /* Reverse link... */ + struct net_device *dev; /* Reverse link... */ spinlock_t spinlock; /* Serialize access to the hardware (SMP) */ - struct pcmcia_device * link; /* pcmcia structure */ + struct pcmcia_device *link; /* pcmcia structure */ int nresets; /* Number of hw resets */ u_char configured; /* If it is configured */ u_char reconfig_82593; /* Need to reconfigure the controller */ @@ -623,7 +619,7 @@ struct net_local u_long domain_id; /* Domain ID we lock on for roaming */ int filter_domains; /* Check Domain ID of beacon found */ struct wavepoint_table wavepoint_table; /* Table of visible WavePoints*/ - wavepoint_history * curr_point; /* Current wavepoint */ + wavepoint_history *curr_point; /* Current wavepoint */ int cell_search; /* Searching for new cell? */ struct timer_list cell_timer; /* Garbage collection */ #endif /* WAVELAN_ROAMING */ @@ -673,7 +669,7 @@ static void int); /* number of registers */ /* ---------------------- I82593 SUBROUTINES ----------------------- */ static int - wv_82593_cmd(struct net_device *, /* synchronously send a command to i82593 */ + wv_82593_cmd(struct net_device *, /* synchronously send a command to i82593 */ char *, int, int); -- cgit v0.10.2 From 8eb3e22e56ee35a6a65c956bd2862c8247443cbd Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 16:13:04 +0200 Subject: Staging: wavelan: fix initialise statics to 0 in wavelan_cs.p.h This is a patch to the wavelan_cs.p.h fix initialise statics to 0 Errors found by the checkpatch.pl tools, like ERROR: do not initialise statics to 0 or NULL Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wavelan/wavelan_cs.p.h b/drivers/staging/wavelan/wavelan_cs.p.h index 9427eb2..7196267 100644 --- a/drivers/staging/wavelan/wavelan_cs.p.h +++ b/drivers/staging/wavelan/wavelan_cs.p.h @@ -745,14 +745,14 @@ static void */ /* Shared memory speed, in ns */ -static int mem_speed = 0; +static int mem_speed; /* New module interface */ module_param(mem_speed, int, 0); #ifdef WAVELAN_ROAMING /* Conditional compile, see above in options */ /* Enable roaming mode ? No ! Please keep this to 0 */ -static int do_roaming = 0; +static int do_roaming; module_param(do_roaming, bool, 0); #endif /* WAVELAN_ROAMING */ -- cgit v0.10.2 From 0970305a9f36e24e841f2bd79caab4fa0cb56662 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Wed, 17 Mar 2010 22:33:27 +0100 Subject: Staging: winbond: phy_calibration.h coding style cleanup. I fixed all checkpatch.pl problems, removed versioning comments and "commented away" code. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Acked-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/phy_calibration.h b/drivers/staging/winbond/phy_calibration.h index 51c8fde..3032031 100644 --- a/drivers/staging/winbond/phy_calibration.h +++ b/drivers/staging/winbond/phy_calibration.h @@ -3,105 +3,82 @@ #include "wbhal_f.h" -// 20031229 Turbo add -#define REG_AGC_CTRL1 0x1000 -#define REG_AGC_CTRL2 0x1004 -#define REG_AGC_CTRL3 0x1008 -#define REG_AGC_CTRL4 0x100C -#define REG_AGC_CTRL5 0x1010 -#define REG_AGC_CTRL6 0x1014 -#define REG_AGC_CTRL7 0x1018 -#define REG_AGC_CTRL8 0x101C -#define REG_AGC_CTRL9 0x1020 -#define REG_AGC_CTRL10 0x1024 -#define REG_CCA_CTRL 0x1028 -#define REG_A_ACQ_CTRL 0x102C -#define REG_B_ACQ_CTRL 0x1030 -#define REG_A_TXRX_CTRL 0x1034 -#define REG_B_TXRX_CTRL 0x1038 -#define REG_A_TX_COEF3 0x103C -#define REG_A_TX_COEF2 0x1040 -#define REG_A_TX_COEF1 0x1044 -#define REG_B_TX_COEF2 0x1048 -#define REG_B_TX_COEF1 0x104C -#define REG_MODE_CTRL 0x1050 -#define REG_CALIB_DATA 0x1054 -#define REG_IQ_ALPHA 0x1058 -#define REG_DC_CANCEL 0x105C -#define REG_WTO_READ 0x1060 -#define REG_OFFSET_READ 0x1064 -#define REG_CALIB_READ1 0x1068 -#define REG_CALIB_READ2 0x106C -#define REG_A_FREQ_EST 0x1070 - - - - -// 20031101 Turbo add -#define MASK_AMER_OFF_REG BIT(31) - -#define MASK_BMER_OFF_REG BIT(31) - -#define MASK_LNA_FIX_GAIN (BIT(3)|BIT(4)) -#define MASK_AGC_FIX BIT(1) - -#define MASK_AGC_FIX_GAIN 0xFF00 - -#define MASK_ADC_DC_CAL_STR BIT(10) -#define MASK_CALIB_START BIT(4) -#define MASK_IQCAL_TONE_SEL (BIT(3)|BIT(2)) -#define MASK_IQCAL_MODE (BIT(1)|BIT(0)) - -#define MASK_TX_CAL_0 0xF0000000 -#define TX_CAL_0_SHIFT 28 -#define MASK_TX_CAL_1 0x0F000000 -#define TX_CAL_1_SHIFT 24 -#define MASK_TX_CAL_2 0x00F00000 -#define TX_CAL_2_SHIFT 20 -#define MASK_TX_CAL_3 0x000F0000 -#define TX_CAL_3_SHIFT 16 -#define MASK_RX_CAL_0 0x0000F000 -#define RX_CAL_0_SHIFT 12 -#define MASK_RX_CAL_1 0x00000F00 -#define RX_CAL_1_SHIFT 8 -#define MASK_RX_CAL_2 0x000000F0 -#define RX_CAL_2_SHIFT 4 -#define MASK_RX_CAL_3 0x0000000F -#define RX_CAL_3_SHIFT 0 - -#define MASK_CANCEL_DC_I 0x3E0 -#define CANCEL_DC_I_SHIFT 5 -#define MASK_CANCEL_DC_Q 0x01F -#define CANCEL_DC_Q_SHIFT 0 - -// LA20040210 kevin -//#define MASK_ADC_DC_CAL_I(x) (((x)&0x1FE00)>>9) -//#define MASK_ADC_DC_CAL_Q(x) ((x)&0x1FF) -#define MASK_ADC_DC_CAL_I(x) (((x)&0x0003FE00)>>9) -#define MASK_ADC_DC_CAL_Q(x) ((x)&0x000001FF) - -// LA20040210 kevin (Turbo has wrong definition) -//#define MASK_IQCAL_TONE_I 0x7FFC000 -//#define SHIFT_IQCAL_TONE_I(x) ((x)>>13) -//#define MASK_IQCAL_TONE_Q 0x1FFF -//#define SHIFT_IQCAL_TONE_Q(x) ((x)>>0) -#define MASK_IQCAL_TONE_I 0x00001FFF -#define SHIFT_IQCAL_TONE_I(x) ((x)>>0) -#define MASK_IQCAL_TONE_Q 0x03FFE000 -#define SHIFT_IQCAL_TONE_Q(x) ((x)>>13) - -// LA20040210 kevin (Turbo has wrong definition) -//#define MASK_IQCAL_IMAGE_I 0x7FFC000 -//#define SHIFT_IQCAL_IMAGE_I(x) ((x)>>13) -//#define MASK_IQCAL_IMAGE_Q 0x1FFF -//#define SHIFT_IQCAL_IMAGE_Q(x) ((x)>>0) - -//#define MASK_IQCAL_IMAGE_I 0x00001FFF -//#define SHIFT_IQCAL_IMAGE_I(x) ((x)>>0) -//#define MASK_IQCAL_IMAGE_Q 0x03FFE000 -//#define SHIFT_IQCAL_IMAGE_Q(x) ((x)>>13) - -void phy_set_rf_data( struct hw_data * pHwData, u32 index, u32 value ); -#define phy_init_rf( _A ) //RFSynthesizer_initial( _A ) +#define REG_AGC_CTRL1 0x1000 +#define REG_AGC_CTRL2 0x1004 +#define REG_AGC_CTRL3 0x1008 +#define REG_AGC_CTRL4 0x100C +#define REG_AGC_CTRL5 0x1010 +#define REG_AGC_CTRL6 0x1014 +#define REG_AGC_CTRL7 0x1018 +#define REG_AGC_CTRL8 0x101C +#define REG_AGC_CTRL9 0x1020 +#define REG_AGC_CTRL10 0x1024 +#define REG_CCA_CTRL 0x1028 +#define REG_A_ACQ_CTRL 0x102C +#define REG_B_ACQ_CTRL 0x1030 +#define REG_A_TXRX_CTRL 0x1034 +#define REG_B_TXRX_CTRL 0x1038 +#define REG_A_TX_COEF3 0x103C +#define REG_A_TX_COEF2 0x1040 +#define REG_A_TX_COEF1 0x1044 +#define REG_B_TX_COEF2 0x1048 +#define REG_B_TX_COEF1 0x104C +#define REG_MODE_CTRL 0x1050 +#define REG_CALIB_DATA 0x1054 +#define REG_IQ_ALPHA 0x1058 +#define REG_DC_CANCEL 0x105C +#define REG_WTO_READ 0x1060 +#define REG_OFFSET_READ 0x1064 +#define REG_CALIB_READ1 0x1068 +#define REG_CALIB_READ2 0x106C +#define REG_A_FREQ_EST 0x1070 + + +#define MASK_AMER_OFF_REG BIT(31) + +#define MASK_BMER_OFF_REG BIT(31) + +#define MASK_LNA_FIX_GAIN (BIT(3) | BIT(4)) +#define MASK_AGC_FIX BIT(1) + +#define MASK_AGC_FIX_GAIN 0xFF00 + +#define MASK_ADC_DC_CAL_STR BIT(10) +#define MASK_CALIB_START BIT(4) +#define MASK_IQCAL_TONE_SEL (BIT(3) | BIT(2)) +#define MASK_IQCAL_MODE (BIT(1) | BIT(0)) + +#define MASK_TX_CAL_0 0xF0000000 +#define TX_CAL_0_SHIFT 28 +#define MASK_TX_CAL_1 0x0F000000 +#define TX_CAL_1_SHIFT 24 +#define MASK_TX_CAL_2 0x00F00000 +#define TX_CAL_2_SHIFT 20 +#define MASK_TX_CAL_3 0x000F0000 +#define TX_CAL_3_SHIFT 16 +#define MASK_RX_CAL_0 0x0000F000 +#define RX_CAL_0_SHIFT 12 +#define MASK_RX_CAL_1 0x00000F00 +#define RX_CAL_1_SHIFT 8 +#define MASK_RX_CAL_2 0x000000F0 +#define RX_CAL_2_SHIFT 4 +#define MASK_RX_CAL_3 0x0000000F +#define RX_CAL_3_SHIFT 0 + +#define MASK_CANCEL_DC_I 0x3E0 +#define CANCEL_DC_I_SHIFT 5 +#define MASK_CANCEL_DC_Q 0x01F +#define CANCEL_DC_Q_SHIFT 0 + +#define MASK_ADC_DC_CAL_I(x) (((x) & 0x0003FE00) >> 9) +#define MASK_ADC_DC_CAL_Q(x) ((x) & 0x000001FF) + +#define MASK_IQCAL_TONE_I 0x00001FFF +#define SHIFT_IQCAL_TONE_I(x) ((x) >> 0) +#define MASK_IQCAL_TONE_Q 0x03FFE000 +#define SHIFT_IQCAL_TONE_Q(x) ((x) >> 13) + +void phy_set_rf_data(struct hw_data *pHwData, u32 index, u32 value); +#define phy_init_rf(_A) /* RFSynthesizer_initial(_A) */ #endif -- cgit v0.10.2 From e7b10ba8c7152e3c888355656d38e19732b98bf1 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Thu, 18 Mar 2010 09:54:53 +0100 Subject: Staging: winbond: mds_f.h whitespace and CamelCase corrections. I fixed the whitespaces, the C99 comment and the CamelCase parameter names. Signed-off-by: Lars Lindley Acked-by: Pekka Enberg Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mds_f.h b/drivers/staging/winbond/mds_f.h index e09dd4b..20e97bf 100644 --- a/drivers/staging/winbond/mds_f.h +++ b/drivers/staging/winbond/mds_f.h @@ -4,17 +4,17 @@ #include "wbhal_s.h" #include "core.h" -unsigned char Mds_initial( struct wbsoft_priv *adapter ); -void Mds_Destroy( struct wbsoft_priv *adapter ); -void Mds_Tx( struct wbsoft_priv *adapter ); -void Mds_SendComplete( struct wbsoft_priv *adapter, PT02_DESCRIPTOR pT02 ); -void Mds_MpduProcess( struct wbsoft_priv *adapter, struct wb35_descriptor *pRxDes ); +unsigned char Mds_initial(struct wbsoft_priv *adapter); +void Mds_Destroy(struct wbsoft_priv *adapter); +void Mds_Tx(struct wbsoft_priv *adapter); +void Mds_SendComplete(struct wbsoft_priv *adapter, PT02_DESCRIPTOR pt02); +void Mds_MpduProcess(struct wbsoft_priv *adapter, struct wb35_descriptor *prxdes); extern void DataDmp(u8 *pdata, u32 len, u32 offset); -// For data frame sending 20060802 -u16 MDS_GetPacketSize( struct wbsoft_priv *adapter ); -void MDS_GetNextPacket( struct wbsoft_priv *adapter, struct wb35_descriptor *pDes ); -void MDS_GetNextPacketComplete( struct wbsoft_priv *adapter, struct wb35_descriptor *pDes ); -void MDS_SendResult( struct wbsoft_priv *adapter, u8 PacketId, unsigned char SendOK ); +/* For data frame sending */ +u16 MDS_GetPacketSize(struct wbsoft_priv *adapter); +void MDS_GetNextPacket(struct wbsoft_priv *adapter, struct wb35_descriptor *pdes); +void MDS_GetNextPacketComplete(struct wbsoft_priv *adapter, struct wb35_descriptor *pdes); +void MDS_SendResult(struct wbsoft_priv *adapter, u8 packetid, unsigned char sendok); #endif -- cgit v0.10.2 From 5ea0525500f7cd3c09d4ee7beb66079d6abef8ab Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Thu, 18 Mar 2010 15:43:36 +0100 Subject: Staging: winbond: mds_s.h coding style fixes. I fixed all problems reported by checkpatch.pl except some long lines. Signed-off-by: Lars Lindley Acked-by: Pekka Enberg Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mds_s.h b/drivers/staging/winbond/mds_s.h index 217ff08..89328c5 100644 --- a/drivers/staging/winbond/mds_s.h +++ b/drivers/staging/winbond/mds_s.h @@ -15,122 +15,121 @@ enum { WLAN_PREAMBLE_TYPE_LONG, }; -//////////////////////////////////////////////////////////////////////////////////////////////////////// -#define MAX_USB_TX_DESCRIPTOR 15 // IS89C35 ability -#define MAX_USB_TX_BUFFER_NUMBER 4 // Virtual pre-buffer number of MAX_USB_TX_BUFFER -#define MAX_USB_TX_BUFFER 4096 // IS89C35 ability 4n alignment is required for hardware +/*****************************************************************************/ +#define MAX_USB_TX_DESCRIPTOR 15 /* IS89C35 ability */ +#define MAX_USB_TX_BUFFER_NUMBER 4 /* Virtual pre-buffer number of MAX_USB_TX_BUFFER */ +#define MAX_USB_TX_BUFFER 4096 /* IS89C35 ability 4n alignment is required for hardware */ -#define AUTH_REQUEST_PAIRWISE_ERROR 0 // _F flag setting -#define AUTH_REQUEST_GROUP_ERROR 1 // _F flag setting +#define AUTH_REQUEST_PAIRWISE_ERROR 0 /* _F flag setting */ +#define AUTH_REQUEST_GROUP_ERROR 1 /* _F flag setting */ -#define CURRENT_FRAGMENT_THRESHOLD (adapter->Mds.TxFragmentThreshold & ~0x1) -#define CURRENT_PREAMBLE_MODE psLOCAL->boShortPreamble?WLAN_PREAMBLE_TYPE_SHORT:WLAN_PREAMBLE_TYPE_LONG -#define CURRENT_TX_RATE_FOR_MNG adapter->sLocalPara.CurrentTxRateForMng -#define CURRENT_PROTECT_MECHANISM psLOCAL->boProtectMechanism -#define CURRENT_RTS_THRESHOLD adapter->Mds.TxRTSThreshold +#define CURRENT_FRAGMENT_THRESHOLD (adapter->Mds.TxFragmentThreshold & ~0x1) +#define CURRENT_PREAMBLE_MODE (psLOCAL->boShortPreamble ? WLAN_PREAMBLE_TYPE_SHORT : WLAN_PREAMBLE_TYPE_LONG) +#define CURRENT_TX_RATE_FOR_MNG (adapter->sLocalPara.CurrentTxRateForMng) +#define CURRENT_PROTECT_MECHANISM (psLOCAL->boProtectMechanism) +#define CURRENT_RTS_THRESHOLD (adapter->Mds.TxRTSThreshold) -#define MIB_GS_XMIT_OK_INC adapter->sLocalPara.GS_XMIT_OK++ -#define MIB_GS_RCV_OK_INC adapter->sLocalPara.GS_RCV_OK++ -#define MIB_GS_XMIT_ERROR_INC adapter->sLocalPara.GS_XMIT_ERROR +#define MIB_GS_XMIT_OK_INC (adapter->sLocalPara.GS_XMIT_OK++) +#define MIB_GS_RCV_OK_INC (adapter->sLocalPara.GS_RCV_OK++) +#define MIB_GS_XMIT_ERROR_INC (adapter->sLocalPara.GS_XMIT_ERROR) -//---------- TX ----------------------------------- +/* ---------- TX ----------------------------------- */ #define ETHERNET_TX_DESCRIPTORS MAX_USB_TX_BUFFER_NUMBER -//---------- RX ------------------------------------ -#define ETHERNET_RX_DESCRIPTORS 8 //It's not necessary to allocate more than 2 in sync indicate - -//================================================================ -// Configration default value -//================================================================ -#define DEFAULT_MULTICASTLISTMAX 32 // standard -#define DEFAULT_TX_BURSTLENGTH 3 // 32 Longwords -#define DEFAULT_RX_BURSTLENGTH 3 // 32 Longwords -#define DEFAULT_TX_THRESHOLD 0 // Full Packet -#define DEFAULT_RX_THRESHOLD 0 // Full Packet -#define DEFAULT_MAXTXRATE 6 // 11 Mbps (Long) -#define DEFAULT_CHANNEL 3 // Chennel 3 -#define DEFAULT_RTSThreshold 2347 // Disable RTS -//#define DEFAULT_PME 1 // Enable -#define DEFAULT_PME 0 // Disable -#define DEFAULT_SIFSTIME 10 -#define DEFAULT_ACKTIME_1ML 304 // 148+44+112 911220 by LCC -#define DEFAULT_ACKTIME_2ML 248 // 148+44+56 911220 by LCC -#define DEFAULT_FRAGMENT_THRESHOLD 2346 // No fragment -#define DEFAULT_PREAMBLE_LENGTH 72 +/* ---------- RX ----------------------------------- */ +#define ETHERNET_RX_DESCRIPTORS 8 /* It's not necessary to allocate more than 2 in sync indicate */ + +/* + * ================================================================ + * Configration default value + * ================================================================ + */ +#define DEFAULT_MULTICASTLISTMAX 32 /* standard */ +#define DEFAULT_TX_BURSTLENGTH 3 /* 32 Longwords */ +#define DEFAULT_RX_BURSTLENGTH 3 /* 32 Longwords */ +#define DEFAULT_TX_THRESHOLD 0 /* Full Packet */ +#define DEFAULT_RX_THRESHOLD 0 /* Full Packet */ +#define DEFAULT_MAXTXRATE 6 /* 11 Mbps (Long) */ +#define DEFAULT_CHANNEL 3 /* Chennel 3 */ +#define DEFAULT_RTSThreshold 2347 /* Disable RTS */ +#define DEFAULT_PME 0 /* Disable */ +#define DEFAULT_SIFSTIME 10 +#define DEFAULT_ACKTIME_1ML 304 /* 148 + 44 + 112 */ +#define DEFAULT_ACKTIME_2ML 248 /* 148 + 44 + 56 */ +#define DEFAULT_FRAGMENT_THRESHOLD 2346 /* No fragment */ +#define DEFAULT_PREAMBLE_LENGTH 72 #define DEFAULT_PLCPHEADERTIME_LENGTH 24 -/*------------------------------------------------------------------------ - 0.96 sec since time unit of the R03 for the current, W89C32 is about 60ns - instead of 960 ns. This shall be fixed in the future W89C32 - -------------------------------------------------------------------------*/ -#define DEFAULT_MAX_RECEIVE_TIME 16440000 +/* + * ------------------------------------------------------------------------ + * 0.96 sec since time unit of the R03 for the current, W89C32 is about 60ns + * instead of 960 ns. This shall be fixed in the future W89C32 + * ------------------------------------------------------------------------- + */ +#define DEFAULT_MAX_RECEIVE_TIME 16440000 -#define RX_BUF_SIZE 2352 // 600 // For 301 must be multiple of 8 -#define MAX_RX_DESCRIPTORS 18 // Rx Layer 2 +#define RX_BUF_SIZE 2352 /* 600 - For 301 must be multiple of 8 */ +#define MAX_RX_DESCRIPTORS 18 /* Rx Layer 2 */ +/* For brand-new rx system */ +#define MDS_ID_IGNORE ETHERNET_RX_DESCRIPTORS -// For brand-new rx system -#define MDS_ID_IGNORE ETHERNET_RX_DESCRIPTORS - -// For Tx Packet status classify -#define PACKET_FREE_TO_USE 0 -#define PACKET_COME_FROM_NDIS 0x08 -#define PACKET_COME_FROM_MLME 0x80 -#define PACKET_SEND_COMPLETE 0xff +/* For Tx Packet status classify */ +#define PACKET_FREE_TO_USE 0 +#define PACKET_COME_FROM_NDIS 0x08 +#define PACKET_COME_FROM_MLME 0x80 +#define PACKET_SEND_COMPLETE 0xff struct wb35_mds { - // For Tx usage - u8 TxOwner[ ((MAX_USB_TX_BUFFER_NUMBER + 3) & ~0x03) ]; + /* For Tx usage */ + u8 TxOwner[((MAX_USB_TX_BUFFER_NUMBER + 3) & ~0x03)]; u8 *pTxBuffer; - u16 TxBufferSize[ ((MAX_USB_TX_BUFFER_NUMBER + 1) & ~0x01) ]; - u8 TxDesFrom[ ((MAX_USB_TX_DESCRIPTOR + 3) & ~0x03) ];//931130.4.u // 1: MLME 2: NDIS control 3: NDIS data - u8 TxCountInBuffer[ ((MAX_USB_TX_DESCRIPTOR + 3) & ~0x03) ]; // 20060928 + u16 TxBufferSize[((MAX_USB_TX_BUFFER_NUMBER + 1) & ~0x01)]; + u8 TxDesFrom[((MAX_USB_TX_DESCRIPTOR + 3) & ~0x03)];/* 1: MLME 2: NDIS control 3: NDIS data */ + u8 TxCountInBuffer[((MAX_USB_TX_DESCRIPTOR + 3) & ~0x03)]; - u8 TxFillIndex;//the next index of TxBuffer can be used - u8 TxDesIndex;//The next index of TxDes can be used - u8 ScanTxPause; //data Tx pause because the scanning is progressing, but probe request Tx won't. - u8 TxPause;//For pause the Mds_Tx modult + u8 TxFillIndex; /* the next index of TxBuffer can be used */ + u8 TxDesIndex; /* The next index of TxDes can be used */ + u8 ScanTxPause; /* data Tx pause because the scanning is progressing, but probe request Tx won't. */ + u8 TxPause; /*For pause the Mds_Tx modult */ - atomic_t TxThreadCount;//For thread counting 931130.4.v -//950301 delete due to HW -// atomic_t TxConcurrentCount;//931130.4.w + atomic_t TxThreadCount; /* For thread counting */ - u16 TxResult[ ((MAX_USB_TX_DESCRIPTOR + 1) & ~0x01) ];//Collect the sending result of Mpdu + u16 TxResult[((MAX_USB_TX_DESCRIPTOR + 1) & ~0x01)];/* Collect the sending result of Mpdu */ - u8 MicRedundant[8]; // For tmp use - u8 *MicWriteAddress[2]; //The start address to fill the Mic, use 2 point due to Mic maybe fragment + u8 MicRedundant[8]; /* For tmp use */ + u8 *MicWriteAddress[2]; /* The start address to fill the Mic, use 2 point due to Mic maybe fragment */ - u16 MicWriteSize[2]; //931130.4.x + u16 MicWriteSize[2]; - u16 MicAdd; // If want to add the Mic, this variable equal to 8 - u16 MicWriteIndex;//The number of MicWriteAddress 931130.4.y + u16 MicAdd; /* If want to add the Mic, this variable equal to 8 */ + u16 MicWriteIndex; /* The number of MicWriteAddress */ - u8 TxRate[ ((MAX_USB_TX_DESCRIPTOR+1)&~0x01) ][2]; // [0] current tx rate, [1] fall back rate - u8 TxInfo[ ((MAX_USB_TX_DESCRIPTOR+1)&~0x01) ]; //Store information for callback function + u8 TxRate[((MAX_USB_TX_DESCRIPTOR + 1) & ~0x01)][2]; /* [0] current tx rate, [1] fall back rate */ + u8 TxInfo[((MAX_USB_TX_DESCRIPTOR + 1) & ~0x01)]; /*Store information for callback function */ - //WKCHEN added for scanning mechanism - u8 TxToggle; //It is TRUE if there are tx activities in some time interval + /* for scanning mechanism */ + u8 TxToggle; /* It is TRUE if there are tx activities in some time interval */ u8 Reserved_[3]; - //---------- for Tx Parameter - u16 TxFragmentThreshold; // For frame body only + /* ---- for Tx Parameter */ + u16 TxFragmentThreshold; /* For frame body only */ u16 TxRTSThreshold; - u32 MaxReceiveTime;//911220.3 Add - - // depend on OS, - u32 MulticastListNo; - u32 PacketFilter; // Setting by NDIS, the current packet filter in use. - u8 MulticastAddressesArray[DEFAULT_MULTICASTLISTMAX][MAC_ADDR_LENGTH]; + u32 MaxReceiveTime; - //COUNTERMEASURE - u8 bMICfailCount; - u8 boCounterMeasureBlock; - u8 reserved_4[2]; + /* depend on OS, */ + u32 MulticastListNo; + u32 PacketFilter; /* Setting by NDIS, the current packet filter in use. */ + u8 MulticastAddressesArray[DEFAULT_MULTICASTLISTMAX][MAC_ADDR_LENGTH]; - u32 TxTsc; // 20060214 - u32 TxTsc_2; // 20060214 + /* COUNTERMEASURE */ + u8 bMICfailCount; + u8 boCounterMeasureBlock; + u8 reserved_4[2]; + u32 TxTsc; + u32 TxTsc_2; }; #endif -- cgit v0.10.2 From 1a48ba148c45052efc2e1505e28198b725a23e95 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Thu, 18 Mar 2010 16:45:06 +0100 Subject: Staging: winbond: mlme_s.h Coding style fixes I fixed all problems found by checkpatch.pl except typedefs. Signed-off-by: Lars Lindley Acked-by: Pekka Enberg Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mlme_s.h b/drivers/staging/winbond/mlme_s.h index 1217a1c..a7ef3c7 100644 --- a/drivers/staging/winbond/mlme_s.h +++ b/drivers/staging/winbond/mlme_s.h @@ -7,28 +7,29 @@ #include "mac_structures.h" #include "mds_s.h" -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Mlme.h -// Define the related definitions of MLME module -// history -- 01/14/03' created -// -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -#define AUTH_REJECT_REASON_CHALLENGE_FAIL 1 - -//====== the state of MLME module -#define INACTIVE 0x0 -#define IDLE_SCAN 0x1 - -//====== the state of MLME/ESS module -#define STATE_1 0x2 -#define AUTH_REQ 0x3 -#define AUTH_WEP 0x4 -#define STATE_2 0x5 -#define ASSOC_REQ 0x6 -#define STATE_3 0x7 - -//====== the state of MLME/IBSS module +/* + * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + * Mlme.h + * Define the related definitions of MLME module + * + * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + */ + +#define AUTH_REJECT_REASON_CHALLENGE_FAIL 1 + +/* the state of MLME module */ +#define INACTIVE 0x0 +#define IDLE_SCAN 0x1 + +/* the state of MLME/ESS module */ +#define STATE_1 0x2 +#define AUTH_REQ 0x3 +#define AUTH_WEP 0x4 +#define STATE_2 0x5 +#define ASSOC_REQ 0x6 +#define STATE_3 0x7 + +/* the state of MLME/IBSS module */ #define IBSS_JOIN_SYNC 0x8 #define IBSS_AUTH_REQ 0x9 #define IBSS_AUTH_CHANLGE 0xa @@ -38,159 +39,150 @@ -//========================================= -//depend on D5C(MAC timing control 03 register): MaxTxMSDULifeTime default 0x80000us -#define AUTH_FAIL_TIMEOUT 550 -#define ASSOC_FAIL_TIMEOUT 550 +/* + * ========================================= + * depend on D5C(MAC timing control 03 register): + * MaxTxMSDULifeTime default 0x80000us + */ +#define AUTH_FAIL_TIMEOUT 550 +#define ASSOC_FAIL_TIMEOUT 550 #define REASSOC_FAIL_TIMEOUT 550 - - -// -// MLME task global CONSTANTS, STRUCTURE, variables -// - - -///////////////////////////////////////////////////////////// -// enum_ResultCode -- -// Result code returned from MLME to SME. -// -///////////////////////////////////////////////////////////// -// PD43 20030829 Modifiled -//#define SUCCESS 0 -#define MLME_SUCCESS 0 //follow spec. -#define INVALID_PARAMETERS 1 //Not following spec. -#define NOT_SUPPPORTED 2 -#define TIMEOUT 3 -#define TOO_MANY_SIMULTANEOUS_REQUESTS 4 -#define REFUSED 5 -#define BSS_ALREADY_STARTED_OR_JOINED 6 -#define TRANSMIT_FRAME_FAIL 7 -#define NO_BSS_FOUND 8 -#define RETRY 9 -#define GIVE_UP 10 - - -#define OPEN_AUTH 0 -#define SHARE_AUTH 1 -#define ANY_AUTH 2 -#define WPA_AUTH 3 //for WPA -#define WPAPSK_AUTH 4 -#define WPANONE_AUTH 5 -///////////////////////////////////////////// added by ws 04/19/04 +/* MLME task global CONSTANTS, STRUCTURE, variables */ + +/* ========================================= + * enum_ResultCode -- + * Result code returned from MLME to SME. + * ========================================= + */ +#define MLME_SUCCESS 0 /* follow spec. */ +#define INVALID_PARAMETERS 1 /* Not following spec. */ +#define NOT_SUPPPORTED 2 +#define TIMEOUT 3 +#define TOO_MANY_SIMULTANEOUS_REQUESTS 4 +#define REFUSED 5 +#define BSS_ALREADY_STARTED_OR_JOINED 6 +#define TRANSMIT_FRAME_FAIL 7 +#define NO_BSS_FOUND 8 +#define RETRY 9 +#define GIVE_UP 10 + + +#define OPEN_AUTH 0 +#define SHARE_AUTH 1 +#define ANY_AUTH 2 +#define WPA_AUTH 3 /* for WPA */ +#define WPAPSK_AUTH 4 +#define WPANONE_AUTH 5 #ifdef _WPA2_ -#define WPA2_AUTH 6//for WPA2 -#define WPA2PSK_AUTH 7 -#endif //end def _WPA2_ - -////////////////////////////////////////////////////////////////// -//define the msg type of MLME module -////////////////////////////////////////////////////////////////// -//-------------------------------------------------------- -//from SME - -#define MLMEMSG_AUTH_REQ 0x0b -#define MLMEMSG_DEAUTH_REQ 0x0c -#define MLMEMSG_ASSOC_REQ 0x0d -#define MLMEMSG_REASSOC_REQ 0x0e -#define MLMEMSG_DISASSOC_REQ 0x0f -#define MLMEMSG_START_IBSS_REQ 0x10 -#define MLMEMSG_IBSS_NET_CFM 0x11 - -//from RX : -#define MLMEMSG_RCV_MLMEFRAME 0x20 -#define MLMEMSG_RCV_ASSOCRSP 0x22 -#define MLMEMSG_RCV_REASSOCRSP 0x24 -#define MLMEMSG_RCV_DISASSOC 0x2b -#define MLMEMSG_RCV_AUTH 0x2c -#define MLMEMSG_RCV_DEAUTH 0x2d - - -//from TX callback -#define MLMEMSG_TX_CALLBACK 0x40 -#define MLMEMSG_ASSOCREQ_CALLBACK 0x41 -#define MLMEMSG_REASSOCREQ_CALLBACK 0x43 -#define MLMEMSG_DISASSOC_CALLBACK 0x4a -#define MLMEMSG_AUTH_CALLBACK 0x4c -#define MLMEMSG_DEAUTH_CALLBACK 0x4d - -//#define MLMEMSG_JOIN_FAIL 4 -//#define MLMEMSG_AUTHEN_FAIL 18 -#define MLMEMSG_TIMEOUT 0x50 - -/////////////////////////////////////////////////////////////////////////// -//Global data structures -#define MAX_NUM_TX_MMPDU 2 -#define MAX_MMPDU_SIZE 1512 -#define MAX_NUM_RX_MMPDU 6 - - -/////////////////////////////////////////////////////////////////////////// -//MACRO -#define boMLME_InactiveState(_AA_) (_AA_->wState==INACTIVE) -#define boMLME_IdleScanState(_BB_) (_BB_->wState==IDLE_SCAN) -#define boMLME_FoundSTAinfo(_CC_) (_CC_->wState>=IDLE_SCAN) - -typedef struct _MLME_FRAME -{ - //NDIS_PACKET MLME_Packet; - s8 * pMMPDU; - u16 len; - u8 DataType; - u8 IsInUsed; +#define WPA2_AUTH 6 /* for WPA2 */ +#define WPA2PSK_AUTH 7 +#endif /* end def _WPA2_ */ + +/* + * ========================================= + * define the msg type of MLME module + * ========================================= + */ + +/* from SME */ +#define MLMEMSG_AUTH_REQ 0x0b +#define MLMEMSG_DEAUTH_REQ 0x0c +#define MLMEMSG_ASSOC_REQ 0x0d +#define MLMEMSG_REASSOC_REQ 0x0e +#define MLMEMSG_DISASSOC_REQ 0x0f +#define MLMEMSG_START_IBSS_REQ 0x10 +#define MLMEMSG_IBSS_NET_CFM 0x11 + +/* from RX */ +#define MLMEMSG_RCV_MLMEFRAME 0x20 +#define MLMEMSG_RCV_ASSOCRSP 0x22 +#define MLMEMSG_RCV_REASSOCRSP 0x24 +#define MLMEMSG_RCV_DISASSOC 0x2b +#define MLMEMSG_RCV_AUTH 0x2c +#define MLMEMSG_RCV_DEAUTH 0x2d + + +/* from TX callback */ +#define MLMEMSG_TX_CALLBACK 0x40 +#define MLMEMSG_ASSOCREQ_CALLBACK 0x41 +#define MLMEMSG_REASSOCREQ_CALLBACK 0x43 +#define MLMEMSG_DISASSOC_CALLBACK 0x4a +#define MLMEMSG_AUTH_CALLBACK 0x4c +#define MLMEMSG_DEAUTH_CALLBACK 0x4d + +#define MLMEMSG_TIMEOUT 0x50 + +/* + * ============================================== + * Global data structures + * ============================================== + */ +#define MAX_NUM_TX_MMPDU 2 +#define MAX_MMPDU_SIZE 1512 +#define MAX_NUM_RX_MMPDU 6 + + +/* + * ============================================== + * MACRO + * ============================================== + */ +#define boMLME_InactiveState(_AA_) (_AA_->wState == INACTIVE) +#define boMLME_IdleScanState(_BB_) (_BB_->wState == IDLE_SCAN) +#define boMLME_FoundSTAinfo(_CC_) (_CC_->wState >= IDLE_SCAN) + +typedef struct _MLME_FRAME { + s8 *pMMPDU; + u16 len; + u8 DataType; + u8 IsInUsed; spinlock_t MLMESpinLock; - u8 TxMMPDU[MAX_NUM_TX_MMPDU][MAX_MMPDU_SIZE]; - u8 TxMMPDUInUse[ (MAX_NUM_TX_MMPDU+3) & ~0x03 ]; + u8 TxMMPDU[MAX_NUM_TX_MMPDU][MAX_MMPDU_SIZE]; + u8 TxMMPDUInUse[(MAX_NUM_TX_MMPDU + 3) & ~0x03]; u16 wNumTxMMPDU; u16 wNumTxMMPDUDiscarded; - u8 RxMMPDU[MAX_NUM_RX_MMPDU][MAX_MMPDU_SIZE]; - u8 SaveRxBufSlotInUse[ (MAX_NUM_RX_MMPDU+3) & ~0x03 ]; + u8 RxMMPDU[MAX_NUM_RX_MMPDU][MAX_MMPDU_SIZE]; + u8 SaveRxBufSlotInUse[(MAX_NUM_RX_MMPDU + 3) & ~0x03]; u16 wNumRxMMPDU; u16 wNumRxMMPDUDiscarded; - u16 wNumRxMMPDUInMLME; // Number of the Rx MMPDU - u16 reserved_1; // in MLME. - // excluding the discarded + u16 wNumRxMMPDUInMLME; /* Number of the Rx MMPDU */ + u16 reserved_1; /* in MLME. */ + /* excluding the discarded */ } MLME_FRAME, *psMLME_FRAME; typedef struct _AUTHREQ { - u8 peerMACaddr[MAC_ADDR_LENGTH]; - u16 wAuthAlgorithm; - + u8 peerMACaddr[MAC_ADDR_LENGTH]; + u16 wAuthAlgorithm; } MLME_AUTHREQ_PARA, *psMLME_AUTHREQ_PARA; typedef struct _ASSOCREQ { - u8 PeerSTAAddr[MAC_ADDR_LENGTH]; - u16 CapabilityInfo; - u16 ListenInterval; - -}__attribute__ ((packed)) MLME_ASSOCREQ_PARA, *psMLME_ASSOCREQ_PARA; + u8 PeerSTAAddr[MAC_ADDR_LENGTH]; + u16 CapabilityInfo; + u16 ListenInterval; +} __attribute__ ((packed)) MLME_ASSOCREQ_PARA, *psMLME_ASSOCREQ_PARA; typedef struct _REASSOCREQ { - u8 NewAPAddr[MAC_ADDR_LENGTH]; - u16 CapabilityInfo; - u16 ListenInterval; - -}__attribute__ ((packed)) MLME_REASSOCREQ_PARA, *psMLME_REASSOCREQ_PARA; + u8 NewAPAddr[MAC_ADDR_LENGTH]; + u16 CapabilityInfo; + u16 ListenInterval; +} __attribute__ ((packed)) MLME_REASSOCREQ_PARA, *psMLME_REASSOCREQ_PARA; typedef struct _MLMECALLBACK { - - u8 *psFramePtr; - u8 bResult; - + u8 *psFramePtr; + u8 bResult; } MLME_TXCALLBACK, *psMLME_TXCALLBACK; -typedef struct _RXDATA -{ +typedef struct _RXDATA { s32 FrameLength; - u8 __attribute__ ((packed)) *pbFramePtr; - -}__attribute__ ((packed)) RXDATA, *psRXDATA; + u8 __attribute__ ((packed)) *pbFramePtr; +} __attribute__ ((packed)) RXDATA, *psRXDATA; #endif -- cgit v0.10.2 From 649f0650acae35ff301b81159820bf8eecf7f68e Mon Sep 17 00:00:00 2001 From: Sankar P Date: Sat, 20 Mar 2010 02:10:59 +0530 Subject: Staging: winbond: Convert typedef struct _PMKID to struct pmkid This patch converts the definition typedef struct _PMKID to struct pmkid and also the part where the typedef was used. Signed-off-by: Sankar P Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mac_structures.h b/drivers/staging/winbond/mac_structures.h index 0d16196..3502990 100644 --- a/drivers/staging/winbond/mac_structures.h +++ b/drivers/staging/winbond/mac_structures.h @@ -505,10 +505,10 @@ struct RSN_Capability_Element }__attribute__ ((packed)) ; #ifdef _WPA2_ -typedef struct _PMKID +struct pmkid { u8 pValue[16]; -}PMKID; +}; struct WPA2_RSN_Information_Element { @@ -531,7 +531,7 @@ struct WPA2_RSN_Auth_Sub_Information_Element struct PMKID_Information_Element { u16 PMKID_Count; - PMKID pmkid [16] ; + struct pmkid pmkid[16]; }__attribute__ ((packed)); #endif //enddef _WPA2_ -- cgit v0.10.2 From ef1566e2bb23bc4d7384c27fe973f4d16c2f3c25 Mon Sep 17 00:00:00 2001 From: Sankar P Date: Sat, 20 Mar 2010 02:11:00 +0530 Subject: Staging: winbond: Remove unused enum enum_PowerManagementMode Signed-off-by: Sankar P Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mac_structures.h b/drivers/staging/winbond/mac_structures.h index 3502990..44c1aaf 100644 --- a/drivers/staging/winbond/mac_structures.h +++ b/drivers/staging/winbond/mac_structures.h @@ -116,13 +116,6 @@ #define WLAN_MAX_PAIRWISE_CIPHER_SUITE_COUNT ((u16) 6) #define WLAN_MAX_AUTH_KEY_MGT_SUITE_LIST_COUNT ((u16) 2) -//======================================================== -typedef enum enum_PowerManagementMode -{ - ACTIVE = 0, - POWER_SAVE -} WB_PM_Mode, *PWB_PM_MODE; - //=================================================================== // Reason Code (Table 18): indicate the reason of DisAssoc, DeAuthen // length of ReasonCode is 2 Octs. -- cgit v0.10.2 From 2de975336fbcf5a7b76703b00276668d0f932ebe Mon Sep 17 00:00:00 2001 From: Sankar P Date: Sat, 20 Mar 2010 02:11:01 +0530 Subject: Staging: winbond: Convert typedef struct _STRUCT_SELECTOR This patch converts the declaration typedef struct _STRUCT_SELECTOR to struct struct_selector and also the places where it was used. Signed-off-by: Sankar P Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mac_structures.h b/drivers/staging/winbond/mac_structures.h index 44c1aaf..f24dbb9 100644 --- a/drivers/staging/winbond/mac_structures.h +++ b/drivers/staging/winbond/mac_structures.h @@ -436,7 +436,7 @@ struct Extended_Supported_Rates_Element #define OUI_CIPHER_CCMP 0x04 #define OUI_CIPHER_WEP_104 0x05 -typedef struct _SUITE_SELECTOR_ +struct suite_selector { union { @@ -447,23 +447,23 @@ typedef struct _SUITE_SELECTOR_ u8 Type; }SuitSelector; }; -}SUITE_SELECTOR; +}; //-- WPA -- struct RSN_Information_Element { u8 Element_ID; u8 Length; - SUITE_SELECTOR OuiWPAAdditional;//WPA version 2.0 additional field, and should be 00:50:F2:01 + struct suite_selector OuiWPAAdditional; /* WPA version 2.0 additional field, and should be 00:50:F2:01 */ u16 Version; - SUITE_SELECTOR GroupKeySuite; + struct suite_selector GroupKeySuite; u16 PairwiseKeySuiteCount; - SUITE_SELECTOR PairwiseKeySuite[1]; + struct suite_selector PairwiseKeySuite[1]; }__attribute__ ((packed)); struct RSN_Auth_Sub_Information_Element { u16 AuthKeyMngtSuiteCount; - SUITE_SELECTOR AuthKeyMngtSuite[1]; + struct suite_selector AuthKeyMngtSuite[1]; }__attribute__ ((packed)); //-- WPA2 -- @@ -508,16 +508,16 @@ struct WPA2_RSN_Information_Element u8 Element_ID; u8 Length; u16 Version; - SUITE_SELECTOR GroupKeySuite; + struct suite_selector GroupKeySuite; u16 PairwiseKeySuiteCount; - SUITE_SELECTOR PairwiseKeySuite[1]; + struct suite_selector PairwiseKeySuite[1]; }__attribute__ ((packed)); struct WPA2_RSN_Auth_Sub_Information_Element { u16 AuthKeyMngtSuiteCount; - SUITE_SELECTOR AuthKeyMngtSuite[1]; + struct suite_selector AuthKeyMngtSuite[1]; }__attribute__ ((packed)); -- cgit v0.10.2 From 20dbe695c37e832ad48352ebfdd6234086620608 Mon Sep 17 00:00:00 2001 From: Sankar P Date: Sat, 20 Mar 2010 02:11:02 +0530 Subject: Staging: winbond: Remove typedef for standard types Remove the typedef named "fixed" used for the standard type s32 Signed-off-by: Sankar P Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/phy_calibration.c b/drivers/staging/winbond/phy_calibration.c index 8c56962..7893586 100644 --- a/drivers/staging/winbond/phy_calibration.c +++ b/drivers/staging/winbond/phy_calibration.c @@ -25,10 +25,7 @@ #define FIXED(X) ((s32)((X) * 32768.0)) #define DEG2RAD(X) 0.017453 * (X) -/****************** LOCAL TYPE DEFINITION SECTION ***************************/ -typedef s32 fixed; /* 16.16 fixed-point */ - -static const fixed Angles[]= +static const s32 Angles[] = { FIXED(DEG2RAD(45.0)), FIXED(DEG2RAD(26.565)), FIXED(DEG2RAD(14.0362)), FIXED(DEG2RAD(7.12502)), FIXED(DEG2RAD(3.57633)), FIXED(DEG2RAD(1.78991)), @@ -300,7 +297,7 @@ u32 _sqrt(u32 sqsum) /****************************************************************************/ void _sin_cos(s32 angle, s32 *sin, s32 *cos) { - fixed X, Y, TargetAngle, CurrAngle; + s32 X, Y, TargetAngle, CurrAngle; unsigned Step; X=FIXED(AG_CONST); // AG_CONST * cos(0) @@ -310,7 +307,7 @@ void _sin_cos(s32 angle, s32 *sin, s32 *cos) for (Step=0; Step < 12; Step++) { - fixed NewX; + s32 NewX; if(TargetAngle > CurrAngle) { -- cgit v0.10.2 From 75df20e0385198e80439bfc33c001fcecf094622 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Fri, 19 Mar 2010 21:43:25 +0100 Subject: Staging: winbond: mto.h Coding style fixes I fixed all problems reported by checkpatch.pl except for a couple of long lines. I also removed version comments and removed "commented away" code. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mto.h b/drivers/staging/winbond/mto.h index fb4781d..a0f659c 100644 --- a/drivers/staging/winbond/mto.h +++ b/drivers/staging/winbond/mto.h @@ -1,13 +1,10 @@ -//================================================================== -// MTO.H -// -// Revision history -//================================= -// 20030110 UN20 Pete Chao -// Initial Release -// -// Copyright (c) 2003 Winbond Electronics Corp. All rights reserved. -//================================================================== +/* + * ================================================================== + * MTO.H + * + * Copyright (c) 2003 Winbond Electronics Corp. All rights reserved. + * ================================================================== + */ #ifndef __MTO_H__ #define __MTO_H__ @@ -15,115 +12,104 @@ struct wbsoft_priv; -// LA20040210_DTO kevin -//#define MTO_PREAMBLE_LONG 0 -//#define MTO_PREAMBLE_SHORT 1 #define MTO_PREAMBLE_LONG WLAN_PREAMBLE_TYPE_LONG #define MTO_PREAMBLE_SHORT WLAN_PREAMBLE_TYPE_SHORT -//============================================================================ -// struct _MTOParameters -- -// -// Defines the parameters used in the MAC Throughput Optimization algorithm -//============================================================================ +/* Defines the parameters used in the MAC Throughput Optimization algorithm */ struct wb35_mto_params { - //--------- wkchen added ------------- - u32 TxFlowCount; //to judge what kind the tx flow(sparse or busy) is - //------------------------------------------------ + u32 TxFlowCount; /* to judge what kind the tx flow(sparse or busy) is */ - //--------- DTO threshold parameters ------------- - u16 DTO_PeriodicCheckCycle; - u16 DTO_RssiThForAntDiv; + /* --------- DTO threshold parameters ------------- */ + u16 DTO_PeriodicCheckCycle; + u16 DTO_RssiThForAntDiv; - u16 DTO_TxCountThForCalcNewRate; - u16 DTO_TxRateIncTh; + u16 DTO_TxCountThForCalcNewRate; + u16 DTO_TxRateIncTh; - u16 DTO_TxRateDecTh; - u16 DTO_TxRateEqTh; + u16 DTO_TxRateDecTh; + u16 DTO_TxRateEqTh; - u16 DTO_TxRateBackOff; - u16 DTO_TxRetryRateReduce; + u16 DTO_TxRateBackOff; + u16 DTO_TxRetryRateReduce; - u16 DTO_TxPowerIndex; //0 ~ 31 - u16 reserved_1; - //------------------------------------------------ + u16 DTO_TxPowerIndex; /* 0 ~ 31 */ + u16 reserved_1; + /* ------------------------------------------------ */ - u8 PowerChangeEnable; - u8 AntDiversityEnable; - u8 CCA_Mode; - u8 CCA_Mode_Setup; - u8 Preamble_Type; - u8 PreambleChangeEnable; + u8 PowerChangeEnable; + u8 AntDiversityEnable; + u8 CCA_Mode; + u8 CCA_Mode_Setup; + u8 Preamble_Type; + u8 PreambleChangeEnable; - u8 DataRateLevel; - u8 DataRateChangeEnable; - u8 FragThresholdLevel; - u8 FragThresholdChangeEnable; + u8 DataRateLevel; + u8 DataRateChangeEnable; + u8 FragThresholdLevel; + u8 FragThresholdChangeEnable; - u16 RTSThreshold; - u16 RTSThreshold_Setup; + u16 RTSThreshold; + u16 RTSThreshold_Setup; - u32 AvgIdleSlot; - u32 Pr_Interf; - u32 AvgGapBtwnInterf; + u32 AvgIdleSlot; + u32 Pr_Interf; + u32 AvgGapBtwnInterf; - u8 RTSChangeEnable; - u8 Ant_sel; - u8 aging_timeout; - u8 reserved_2; + u8 RTSChangeEnable; + u8 Ant_sel; + u8 aging_timeout; + u8 reserved_2; - u32 Cnt_Ant[2]; - u32 SQ_Ant[2]; + u32 Cnt_Ant[2]; + u32 SQ_Ant[2]; -// 20040510 remove from globe vairable - u8 FallbackRateLevel; - u8 OfdmRateLevel; + u8 FallbackRateLevel; + u8 OfdmRateLevel; - u8 RatePolicy; - u8 reserved_3[3]; - - // For RSSI turning - s32 RSSI_high; - s32 RSSI_low; + u8 RatePolicy; + u8 reserved_3[3]; + /* For RSSI turning */ + s32 RSSI_high; + s32 RSSI_low; }; -#define MTO_DATA() (adapter->sMtoPara) -#define MTO_HAL() (&adapter->sHwData) -#define MTO_SET_PREAMBLE_TYPE(x) // 20040511 Turbo mark LM_PREAMBLE_TYPE(&pcore_data->lm_data) = (x) -#define MTO_ENABLE (adapter->sLocalPara.TxRateMode == RATE_AUTO) -#define MTO_TXPOWER_FROM_EEPROM (adapter->sHwData.PowerIndexFromEEPROM) -#define LOCAL_ANTENNA_NO() (adapter->sLocalPara.bAntennaNo) -#define LOCAL_IS_CONNECTED() (adapter->sLocalPara.wConnectedSTAindex != 0) -#define MTO_INITTXRATE_MODE (adapter->sHwData.SoftwareSet&0x2) //bit 1 +#define MTO_DATA() (adapter->sMtoPara) +#define MTO_HAL() (&adapter->sHwData) +#define MTO_SET_PREAMBLE_TYPE(x) /* Turbo mark LM_PREAMBLE_TYPE(&pcore_data->lm_data) = (x) */ +#define MTO_ENABLE (adapter->sLocalPara.TxRateMode == RATE_AUTO) +#define MTO_TXPOWER_FROM_EEPROM (adapter->sHwData.PowerIndexFromEEPROM) +#define LOCAL_ANTENNA_NO() (adapter->sLocalPara.bAntennaNo) +#define LOCAL_IS_CONNECTED() (adapter->sLocalPara.wConnectedSTAindex != 0) +#define MTO_INITTXRATE_MODE (adapter->sHwData.SoftwareSet&0x2) /* bit 1 */ -#define MTO_POWER_CHANGE_ENABLE() MTO_DATA().PowerChangeEnable -#define MTO_CCA_MODE() MTO_DATA().CCA_Mode -#define MTO_CCA_MODE_SETUP() MTO_DATA().CCA_Mode_Setup -#define MTO_PREAMBLE_TYPE() MTO_DATA().Preamble_Type -#define MTO_PREAMBLE_CHANGE_ENABLE() MTO_DATA().PreambleChangeEnable +#define MTO_POWER_CHANGE_ENABLE() MTO_DATA().PowerChangeEnable +#define MTO_CCA_MODE() MTO_DATA().CCA_Mode +#define MTO_CCA_MODE_SETUP() MTO_DATA().CCA_Mode_Setup +#define MTO_PREAMBLE_TYPE() MTO_DATA().Preamble_Type +#define MTO_PREAMBLE_CHANGE_ENABLE() MTO_DATA().PreambleChangeEnable -#define MTO_RATE_LEVEL() MTO_DATA().DataRateLevel +#define MTO_RATE_LEVEL() MTO_DATA().DataRateLevel #define MTO_OFDM_RATE_LEVEL() MTO_DATA().OfdmRateLevel -#define MTO_RATE_CHANGE_ENABLE() MTO_DATA().DataRateChangeEnable -#define MTO_FRAG_TH_LEVEL() MTO_DATA().FragThresholdLevel -#define MTO_FRAG_CHANGE_ENABLE() MTO_DATA().FragThresholdChangeEnable -#define MTO_RTS_THRESHOLD() MTO_DATA().RTSThreshold -#define MTO_RTS_CHANGE_ENABLE() MTO_DATA().RTSChangeEnable -#define MTO_RTS_THRESHOLD_SETUP() MTO_DATA().RTSThreshold_Setup +#define MTO_RATE_CHANGE_ENABLE() MTO_DATA().DataRateChangeEnable +#define MTO_FRAG_TH_LEVEL() MTO_DATA().FragThresholdLevel +#define MTO_FRAG_CHANGE_ENABLE() MTO_DATA().FragThresholdChangeEnable +#define MTO_RTS_THRESHOLD() MTO_DATA().RTSThreshold +#define MTO_RTS_CHANGE_ENABLE() MTO_DATA().RTSChangeEnable +#define MTO_RTS_THRESHOLD_SETUP() MTO_DATA().RTSThreshold_Setup -#define MTO_AVG_IDLE_SLOT() MTO_DATA().AvgIdleSlot -#define MTO_PR_INTERF() MTO_DATA().Pr_Interf -#define MTO_AVG_GAP_BTWN_INTERF() MTO_DATA().AvgGapBtwnInterf +#define MTO_AVG_IDLE_SLOT() MTO_DATA().AvgIdleSlot +#define MTO_PR_INTERF() MTO_DATA().Pr_Interf +#define MTO_AVG_GAP_BTWN_INTERF() MTO_DATA().AvgGapBtwnInterf -#define MTO_CNT_ANT(x) MTO_DATA().Cnt_Ant[(x)] -#define MTO_SQ_ANT(x) MTO_DATA().SQ_Ant[(x)] -#define MTO_AGING_TIMEOUT() MTO_DATA().aging_timeout +#define MTO_CNT_ANT(x) MTO_DATA().Cnt_Ant[(x)] +#define MTO_SQ_ANT(x) MTO_DATA().SQ_Ant[(x)] +#define MTO_AGING_TIMEOUT() MTO_DATA().aging_timeout +#define MTO_TXFLOWCOUNT() MTO_DATA().TxFlowCount -#define MTO_TXFLOWCOUNT() MTO_DATA().TxFlowCount -//--------- DTO threshold parameters ------------- +/* --------- DTO threshold parameters ------------- */ #define MTOPARA_PERIODIC_CHECK_CYCLE() MTO_DATA().DTO_PeriodicCheckCycle #define MTOPARA_RSSI_TH_FOR_ANTDIV() MTO_DATA().DTO_RssiThForAntDiv #define MTOPARA_TXCOUNT_TH_FOR_CALC_RATE() MTO_DATA().DTO_TxCountThForCalcNewRate @@ -133,13 +119,13 @@ struct wb35_mto_params { #define MTOPARA_TXRATE_BACKOFF() MTO_DATA().DTO_TxRateBackOff #define MTOPARA_TXRETRYRATE_REDUCE() MTO_DATA().DTO_TxRetryRateReduce #define MTOPARA_TXPOWER_INDEX() MTO_DATA().DTO_TxPowerIndex -//------------------------------------------------ +/* ------------------------------------------------ */ -extern u16 MTO_Frag_Th_Tbl[]; +extern u16 MTO_Frag_Th_Tbl[]; -#define MTO_DATA_RATE() MTO_Data_Rate_Tbl[MTO_RATE_LEVEL()] -#define MTO_FRAG_TH() MTO_Frag_Th_Tbl[MTO_FRAG_TH_LEVEL()] +#define MTO_DATA_RATE() MTO_Data_Rate_Tbl[MTO_RATE_LEVEL()] +#define MTO_FRAG_TH() MTO_Frag_Th_Tbl[MTO_FRAG_TH_LEVEL()] extern void MTO_Init(struct wbsoft_priv *); extern void MTO_PeriodicTimerExpired(struct wbsoft_priv *); @@ -148,6 +134,5 @@ extern u8 MTO_GetTxRate(struct wbsoft_priv *adapter, u32 fpdu_len); extern u8 MTO_GetTxFallbackRate(struct wbsoft_priv *adapter); extern void MTO_SetTxCount(struct wbsoft_priv *adapter, u8 t0, u8 index); -#endif //__MTO_H__ - +#endif /* __MTO_H__ */ -- cgit v0.10.2 From f9a4191cfbe86c5f96a6c6d340ab8bb65fa5c211 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sat, 20 Mar 2010 00:26:45 +0100 Subject: Staging: winbond: mto.c Coding style fixes I changed all things reported by checkpatch.pl except some long lines and the use of externs in a .c file. I also removed revision comments and "commented out" code. Signed-off-by: Lars Lindley Acked-by: Pekka Enberg Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mto.c b/drivers/staging/winbond/mto.c index 5e7fa1c..9cd2127 100644 --- a/drivers/staging/winbond/mto.c +++ b/drivers/staging/winbond/mto.c @@ -1,222 +1,181 @@ -//============================================================================ -// MTO.C - -// -// Description: -// MAC Throughput Optimization for W89C33 802.11g WLAN STA. -// -// The following MIB attributes or internal variables will be affected -// while the MTO is being executed: -// dot11FragmentationThreshold, -// dot11RTSThreshold, -// transmission rate and PLCP preamble type, -// CCA mode, -// antenna diversity. -// -// Revision history: -// -------------------------------------------------------------------------- -// 20031227 UN20 Pete Chao -// First draft -// 20031229 Turbo copy from PD43 -// 20040210 Kevin revised -// Copyright (c) 2003 Winbond Electronics Corp. All rights reserved. -//============================================================================ - -// LA20040210_DTO kevin +/* + * ============================================================================ + * MTO.C - + * + * Description: + * MAC Throughput Optimization for W89C33 802.11g WLAN STA. + * + * The following MIB attributes or internal variables will be affected + * while the MTO is being executed: + * dot11FragmentationThreshold, + * dot11RTSThreshold, + * transmission rate and PLCP preamble type, + * CCA mode, + * antenna diversity. + * + * Copyright (c) 2003 Winbond Electronics Corp. All rights reserved. + * ============================================================================ + */ + #include "sysdef.h" #include "sme_api.h" #include "wbhal_f.h" -// Declare SQ3 to rate and fragmentation threshold table -// Declare fragmentation thresholds table -#define MTO_MAX_FRAG_TH_LEVELS 5 -#define MTO_MAX_DATA_RATE_LEVELS 12 +/* Declare SQ3 to rate and fragmentation threshold table */ +/* Declare fragmentation thresholds table */ +#define MTO_MAX_FRAG_TH_LEVELS 5 +#define MTO_MAX_DATA_RATE_LEVELS 12 -u16 MTO_Frag_Th_Tbl[MTO_MAX_FRAG_TH_LEVELS] = -{ - 256, 384, 512, 768, 1536 +u16 MTO_Frag_Th_Tbl[MTO_MAX_FRAG_TH_LEVELS] = { + 256, 384, 512, 768, 1536 }; -// Declare data rate table -//The following table will be changed at anytime if the opration rate supported by AP don't -//match the table +/* + * Declare data rate table: + * The following table will be changed at anytime if the opration rate + * supported by AP don't match the table + */ static u8 MTO_Data_Rate_Tbl[MTO_MAX_DATA_RATE_LEVELS] = { - 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 + 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 }; -static int TotalTxPkt = 0; -static int TotalTxPktRetry = 0; -static int retryrate_rec[MTO_MAX_DATA_RATE_LEVELS];//this record the retry rate at different data rate +static int TotalTxPkt; +static int TotalTxPktRetry; +/* this record the retry rate at different data rate */ +static int retryrate_rec[MTO_MAX_DATA_RATE_LEVELS]; -static int PeriodTotalTxPkt = 0; -static int PeriodTotalTxPktRetry = 0; +static int PeriodTotalTxPkt; +static int PeriodTotalTxPktRetry; -static u8 boSparseTxTraffic = false; +static u8 boSparseTxTraffic; void MTO_Init(struct wbsoft_priv *adapter); void TxRateReductionCtrl(struct wbsoft_priv *adapter); -/** 1.1.31.1000 Turbo modify */ void MTO_SetTxCount(struct wbsoft_priv *adapter, u8 t0, u8 index); void MTO_TxFailed(struct wbsoft_priv *adapter); void hal_get_dto_para(struct wbsoft_priv *adapter, char *buffer); -//=========================================================================== -// MTO_Init -- -// -// Description: -// Initialize MTO parameters. -// -// This function should be invoked during system initialization. -// -// Arguments: -// adapter - The pointer to the Miniport adapter Context -// -// Return Value: -// None -//============================================================================ +/* + * =========================================================================== + * MTO_Init -- + * + * Description: + * Initialize MTO parameters. + * + * This function should be invoked during system initialization. + * + * Arguments: + * adapter - The pointer to the Miniport adapter Context + * =========================================================================== + */ void MTO_Init(struct wbsoft_priv *adapter) { - int i; - - //[WKCHEN]MTO_CCA_MODE_SETUP()= (u8) hal_get_cca_mode(MTO_HAL()); - //[WKCHEN]MTO_CCA_MODE() = MTO_CCA_MODE_SETUP(); - - //MTO_PREAMBLE_TYPE() = MTO_PREAMBLE_LONG; - MTO_PREAMBLE_TYPE() = MTO_PREAMBLE_SHORT; // for test - - MTO_CNT_ANT(0) = 0; - MTO_CNT_ANT(1) = 0; - MTO_SQ_ANT(0) = 0; - MTO_SQ_ANT(1) = 0; - - MTO_AGING_TIMEOUT() = 0; - - // The following parameters should be initialized to the values set by user - // - //MTO_RATE_LEVEL() = 10; - MTO_RATE_LEVEL() = 0; - MTO_FRAG_TH_LEVEL() = 4; - /** 1.1.23.1000 Turbo modify from -1 to +1 - MTO_RTS_THRESHOLD() = MTO_FRAG_TH() - 1; - MTO_RTS_THRESHOLD_SETUP() = MTO_FRAG_TH() - 1; - */ - MTO_RTS_THRESHOLD() = MTO_FRAG_TH() + 1; - MTO_RTS_THRESHOLD_SETUP() = MTO_FRAG_TH() + 1; - // 1.1.23.1000 Turbo add for mto change preamble from 0 to 1 - MTO_RATE_CHANGE_ENABLE() = 1; - MTO_FRAG_CHANGE_ENABLE() = 0; // 1.1.29.1000 Turbo add don't support frag - //The default valud of ANTDIV_DEFAULT_ON will be decided by EEPROM - //#ifdef ANTDIV_DEFAULT_ON - //#else - //#endif - MTO_POWER_CHANGE_ENABLE() = 1; - MTO_PREAMBLE_CHANGE_ENABLE()= 1; - MTO_RTS_CHANGE_ENABLE() = 0; // 1.1.29.1000 Turbo add don't support frag - // 20040512 Turbo add - //old_antenna[0] = 1; - //old_antenna[1] = 0; - //old_antenna[2] = 1; - //old_antenna[3] = 0; - for (i=0;iphy_type) - { - case RF_AIROHA_2230: - case RF_AIROHA_2230S: // 20060420 Add this - MTOPARA_TXPOWER_INDEX() = 46; // MAX-8 // @@ Only for AL 2230 - break; - case RF_AIROHA_7230: - MTOPARA_TXPOWER_INDEX() = 49; - break; - case RF_WB_242: - MTOPARA_TXPOWER_INDEX() = 10; - break; - case RF_WB_242_1: - MTOPARA_TXPOWER_INDEX() = 24; // ->10 20060316.1 modify - break; + /* --------- DTO threshold parameters ------------- */ + MTOPARA_PERIODIC_CHECK_CYCLE() = 10; + MTOPARA_RSSI_TH_FOR_ANTDIV() = 10; + MTOPARA_TXCOUNT_TH_FOR_CALC_RATE() = 50; + MTOPARA_TXRATE_INC_TH() = 10; + MTOPARA_TXRATE_DEC_TH() = 30; + MTOPARA_TXRATE_EQ_TH() = 40; + MTOPARA_TXRATE_BACKOFF() = 12; + MTOPARA_TXRETRYRATE_REDUCE() = 6; + if (MTO_TXPOWER_FROM_EEPROM == 0xff) { + switch (MTO_HAL()->phy_type) { + case RF_AIROHA_2230: + case RF_AIROHA_2230S: + MTOPARA_TXPOWER_INDEX() = 46; /* MAX-8 @@ Only for AL 2230 */ + break; + case RF_AIROHA_7230: + MTOPARA_TXPOWER_INDEX() = 49; + break; + case RF_WB_242: + MTOPARA_TXPOWER_INDEX() = 10; + break; + case RF_WB_242_1: + MTOPARA_TXPOWER_INDEX() = 24; + break; } - } - else //follow the setting from EEPROM + } else { /* follow the setting from EEPROM */ MTOPARA_TXPOWER_INDEX() = MTO_TXPOWER_FROM_EEPROM; - RFSynthesizer_SetPowerIndex(MTO_HAL(), (u8)MTOPARA_TXPOWER_INDEX()); - //------------------------------------------------ + } + RFSynthesizer_SetPowerIndex(MTO_HAL(), (u8) MTOPARA_TXPOWER_INDEX()); + /* ------------------------------------------------ */ - // For RSSI turning 20060808.4 Cancel load from EEPROM + /* For RSSI turning -- Cancel load from EEPROM */ MTO_DATA().RSSI_high = -41; MTO_DATA().RSSI_low = -60; } -//=========================================================================== -// Description: -// If we enable DTO, we will ignore the tx count with different tx rate from -// DTO rate. This is because when we adjust DTO tx rate, there could be some -// packets in the tx queue with previous tx rate +/* =========================================================================== + * Description: + * If we enable DTO, we will ignore the tx count with different tx rate + * from DTO rate. This is because when we adjust DTO tx rate, there could + * be some packets in the tx queue with previous tx rate + */ + void MTO_SetTxCount(struct wbsoft_priv *adapter, u8 tx_rate, u8 index) { MTO_TXFLOWCOUNT()++; - if ((MTO_ENABLE==1) && (MTO_RATE_CHANGE_ENABLE()==1)) - { - if(tx_rate == MTO_DATA_RATE()) - { - if (index == 0) - { + if ((MTO_ENABLE == 1) && (MTO_RATE_CHANGE_ENABLE() == 1)) { + if (tx_rate == MTO_DATA_RATE()) { + if (index == 0) { if (boSparseTxTraffic) MTO_HAL()->dto_tx_frag_count += MTOPARA_PERIODIC_CHECK_CYCLE(); else MTO_HAL()->dto_tx_frag_count += 1; - } - else - { - if (index<8) - { + } else { + if (index < 8) { MTO_HAL()->dto_tx_retry_count += index; - MTO_HAL()->dto_tx_frag_count += (index+1); - } - else - { + MTO_HAL()->dto_tx_frag_count += (index + 1); + } else { MTO_HAL()->dto_tx_retry_count += 7; MTO_HAL()->dto_tx_frag_count += 7; } } - } - else if(MTO_DATA_RATE()>48 && tx_rate ==48) - {//ALFRED - if (index<3) //for reduciing data rate scheme , - //do not calcu different data rate - //3 is the reducing data rate at retry - { + } else if (MTO_DATA_RATE() > 48 && tx_rate == 48) { + /* for reducing data rate scheme, do not calculate different data rate. 3 is the reducing data rate at retry. */ + if (index < 3) { MTO_HAL()->dto_tx_retry_count += index; - MTO_HAL()->dto_tx_frag_count += (index+1); - } - else - { + MTO_HAL()->dto_tx_frag_count += (index + 1); + } else { MTO_HAL()->dto_tx_retry_count += 3; MTO_HAL()->dto_tx_frag_count += 3; } } - } - else - { + } else { MTO_HAL()->dto_tx_retry_count += index; - MTO_HAL()->dto_tx_frag_count += (index+1); + MTO_HAL()->dto_tx_frag_count += (index + 1); } - TotalTxPkt ++; - TotalTxPktRetry += (index+1); + TotalTxPkt++; + TotalTxPktRetry += (index + 1); - PeriodTotalTxPkt ++; - PeriodTotalTxPktRetry += (index+1); + PeriodTotalTxPkt++; + PeriodTotalTxPktRetry += (index + 1); } -- cgit v0.10.2 From 5dcf8f668c330e72bf3a1de9e8b9451912a68ccd Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sat, 20 Mar 2010 15:37:21 +0200 Subject: Staging: winbond: fix comments coding style issue in core.h This is a patch to the core.h file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like do not use C99 // comments Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/core.h b/drivers/staging/winbond/core.h index 0a2060b..b87d6c0 100644 --- a/drivers/staging/winbond/core.h +++ b/drivers/staging/winbond/core.h @@ -12,14 +12,16 @@ #define WB_MAX_LINK_NAME_LEN 40 struct wbsoft_priv { - u32 adapterIndex; // 20060703.4 Add for using padapterContext global adapter point + u32 adapterIndex; /* 20060703.4 Add for using padapterContext + global adapter point */ - struct wb_local_para sLocalPara; // Myself connected parameters + struct wb_local_para sLocalPara; /* Myself connected + parameters */ - MLME_FRAME sMlmeFrame; // connect to peerSTA parameters + MLME_FRAME sMlmeFrame; /* connect to peerSTA parameters */ - struct wb35_mto_params sMtoPara; // MTO_struct ... - struct hw_data sHwData; //For HAL + struct wb35_mto_params sMtoPara; /* MTO_struct ... */ + struct hw_data sHwData; /*For HAL */ struct wb35_mds Mds; spinlock_t SpinLock; @@ -30,7 +32,7 @@ struct wbsoft_priv { u32 TxByteCount; struct sk_buff *packet_return; - s32 netif_state_stop; // 1: stop 0: normal + s32 netif_state_stop; /* 1: stop 0: normal */ struct iw_statistics iw_stats; u8 LinkName[WB_MAX_LINK_NAME_LEN]; -- cgit v0.10.2 From 03a4389c808a552abb734483310b52140491ed00 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sat, 20 Mar 2010 16:29:01 +0200 Subject: Staging: winbond: fix comments coding style issue in mac_structures.h This is a patch to the mac_structures.h file that fixed up a comments Errors found by the checkpatch.pl tool Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mac_structures.h b/drivers/staging/winbond/mac_structures.h index f24dbb9..80d7e4a 100644 --- a/drivers/staging/winbond/mac_structures.h +++ b/drivers/staging/winbond/mac_structures.h @@ -1,4 +1,4 @@ -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // MAC_Structures.h // // This file contains the definitions and data structures used by SW-MAC. @@ -16,24 +16,24 @@ // Deleted some unused. // 20021129 PD43 Austin // 20030617 increase the 802.11g definition -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ #ifndef _MAC_Structures_H_ #define _MAC_Structures_H_ #include -//========================================================= +/*========================================================= // Some miscellaneous definitions -//----- +//-----*/ #define MAX_CHANNELS 30 #define MAC_ADDR_LENGTH 6 -#define MAX_WEP_KEY_SIZE 16 // 128 bits -#define MAX_802_11_FRAGMENT_NUMBER 10 // By spec +#define MAX_WEP_KEY_SIZE 16 /* 128 bits */ +#define MAX_802_11_FRAGMENT_NUMBER 10 /* By spec */ -//======================================================== +/* ======================================================== // 802.11 Frame define -//----- +//----- */ #define MASK_PROTOCOL_VERSION_TYPE 0x0F #define MASK_FRAGMENT_NUMBER 0x000F #define SEQUENCE_NUMBER_SHIFT 4 @@ -41,8 +41,8 @@ #define DOT_11_MAC_HEADER_SIZE 24 #define DOT_11_SNAP_SIZE 6 #define DOT_11_DURATION_OFFSET 2 -#define DOT_11_SEQUENCE_OFFSET 22 //Sequence control offset -#define DOT_11_TYPE_OFFSET 30 //The start offset of 802.11 Frame// +#define DOT_11_SEQUENCE_OFFSET 22 /* Sequence control offset */ +#define DOT_11_TYPE_OFFSET 30 /* The start offset of 802.11 Frame// */ #define DOT_11_DATA_OFFSET 24 #define DOT_11_DA_OFFSET 4 #define DOT_3_TYPE_ARP 0x80F3 @@ -54,7 +54,7 @@ #define MAX_ETHERNET_PACKET_SIZE 1514 -//----- management : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7) +/* ----- management : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7) */ #define MAC_SUBTYPE_MNGMNT_ASSOC_REQUEST 0x00 #define MAC_SUBTYPE_MNGMNT_ASSOC_RESPONSE 0x10 #define MAC_SUBTYPE_MNGMNT_REASSOC_REQUEST 0x20 @@ -67,7 +67,7 @@ #define MAC_SUBTYPE_MNGMNT_AUTHENTICATION 0xB0 #define MAC_SUBTYPE_MNGMNT_DEAUTHENTICATION 0xC0 -//----- control : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7) +/* ----- control : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7) */ #define MAC_SUBTYPE_CONTROL_PSPOLL 0xA4 #define MAC_SUBTYPE_CONTROL_RTS 0xB4 #define MAC_SUBTYPE_CONTROL_CTS 0xC4 @@ -75,7 +75,7 @@ #define MAC_SUBTYPE_CONTROL_CFEND 0xE4 #define MAC_SUBTYPE_CONTROL_CFEND_CFACK 0xF4 -//----- data : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7) +/* ----- data : Type of Bits (2, 3) and Subtype of Bits (4, 5, 6, 7) */ #define MAC_SUBTYPE_DATA 0x08 #define MAC_SUBTYPE_DATA_CFACK 0x18 #define MAC_SUBTYPE_DATA_CFPOLL 0x28 @@ -85,12 +85,12 @@ #define MAC_SUBTYPE_DATA_CFPOLL_NULL 0x68 #define MAC_SUBTYPE_DATA_CFACK_CFPOLL_NULL 0x78 -//----- Frame Type of Bits (2, 3) +/* ----- Frame Type of Bits (2, 3) */ #define MAC_TYPE_MANAGEMENT 0x00 #define MAC_TYPE_CONTROL 0x04 #define MAC_TYPE_DATA 0x08 -//----- definitions for Management Frame Element ID (1 BYTE) +/* ----- definitions for Management Frame Element ID (1 BYTE) */ #define ELEMENT_ID_SSID 0 #define ELEMENT_ID_SUPPORTED_RATES 1 #define ELEMENT_ID_FH_PARAMETER_SET 2 @@ -130,7 +130,7 @@ #define REASON_CLASS3_FRAME_FROM_NONASSO_STA 7 #define DISASS_REASON_LEFT_BSS 8 #define REASON_NOT_AUTH_YET 9 -//802.11i define +/* 802.11i define */ #define REASON_INVALID_IE 13 #define REASON_MIC_ERROR 14 #define REASON_4WAY_HANDSHAKE_TIMEOUT 15 @@ -175,11 +175,11 @@ enum enum_MMPDUResultCode } WB_MMPDURESULTCODE, *PWB_MMPDURESULTCODE; */ -//=========================================================== +/*=========================================================== // enum_TxRate -- // Define the transmission constants based on W89C32 MAC // target specification. -//=========================================================== +//===========================================================*/ typedef enum enum_TxRate { TXRATE_1M = 0, @@ -189,7 +189,7 @@ typedef enum enum_TxRate TXRATE_55MSHORT = 5, TXRATE_11MLONG = 6, TXRATE_11MSHORT = 7, - TXRATE_AUTO = 255 // PD43 20021108 + TXRATE_AUTO = 255 /* PD43 20021108 */ } WB_TXRATE, *PWB_TXRATE; @@ -225,7 +225,7 @@ typedef enum enum_TxRate #define RATE_54M 108 #define RATE_MAX 255 -//CAPABILITY +/* CAPABILITY */ #define CAPABILITY_ESS_BIT 0x0001 #define CAPABILITY_IBSS_BIT 0x0002 #define CAPABILITY_CF_POLL_BIT 0x0004 @@ -243,10 +243,10 @@ struct Capability_Information_Element union { u16 __attribute__ ((packed)) wValue; - #ifdef _BIG_ENDIAN_ //20060926 add by anson's endian + #ifdef _BIG_ENDIAN_ /* 20060926 add by anson's endian */ struct _Capability { - //-- 11G -- + /* -- 11G -- */ u8 Reserved3 : 2; u8 DSSS_OFDM : 1; u8 Reserved2 : 2; @@ -273,7 +273,7 @@ struct Capability_Information_Element u8 PBCC : 1; u8 Channel_Agility : 1; u8 Reserved1 : 2; - //-- 11G -- + /* -- 11G -- */ u8 Short_Slot_Time : 1; u8 Reserved2 : 2; u8 DSSS_OFDM : 1; @@ -320,8 +320,8 @@ struct CF_Parameter_Set_Element u8 Length; u8 CFP_Count; u8 CFP_Period; - u8 CFP_MaxDuration[2]; // in Time Units - u8 CFP_DurRemaining[2]; // in time units + u8 CFP_MaxDuration[2]; /* in Time Units */ + u8 CFP_DurRemaining[2]; /* in time units */ }; struct TIM_Element @@ -350,8 +350,8 @@ struct Challenge_Text_Element struct PHY_Parameter_Set_Element { -// int aSlotTime; -// int aSifsTime; +/* int aSlotTime; */ +/* int aSifsTime; */ s32 aCCATime; s32 aRxTxTurnaroundTime; s32 aTxPLCPDelay; @@ -367,17 +367,17 @@ struct PHY_Parameter_Set_Element s32 aPLCPHeaderLength; s32 aMPDUDurationFactor; s32 aMPDUMaxLength; -// int aCWmin; -// int aCWmax; +/* int aCWmin; */ +/* int aCWmax; */ }; -//-- 11G -- +/* -- 11G -- */ struct ERP_Information_Element { u8 Element_ID; u8 Length; - #ifdef _BIG_ENDIAN_ //20060926 add by anson's endian - u8 Reserved:5; //20060926 add by anson + #ifdef _BIG_ENDIAN_ /* 20060926 add by anson's endian */ + u8 Reserved:5; /* 20060926 add by anson */ u8 Barker_Preamble_Mode:1; u8 Use_Protection:1; u8 NonERP_Present:1; @@ -396,41 +396,41 @@ struct Extended_Supported_Rates_Element u8 ExtendedSupportedRates[255]; }__attribute__ ((packed)); -//WPA(802.11i draft 3.0) +/* WPA(802.11i draft 3.0) */ #define VERSION_WPA 1 #ifdef _WPA2_ #define VERSION_WPA2 1 -#endif //end def _WPA2_ -#define OUI_WPA 0x00F25000 //WPA2.0 OUI=00:50:F2, the MSB is reserved for suite type +#endif /* end def _WPA2_ */ +#define OUI_WPA 0x00F25000 /* WPA2.0 OUI=00:50:F2, the MSB is reserved for suite type */ #ifdef _WPA2_ -#define OUI_WPA2 0x00AC0F00 // for wpa2 change to 0x00ACOF04 by Ws 26/04/04 -#endif //end def _WPA2_ +#define OUI_WPA2 0x00AC0F00 /* for wpa2 change to 0x00ACOF04 by Ws 26/04/04 */ +#endif /* end def _WPA2_ */ #define OUI_WPA_ADDITIONAL 0x01 -#define WLAN_MIN_RSN_WPA_LENGTH 6 //added by ws 09/10/04 +#define WLAN_MIN_RSN_WPA_LENGTH 6 /* added by ws 09/10/04 */ #ifdef _WPA2_ -#define WLAN_MIN_RSN_WPA2_LENGTH 2 // Fix to 2 09/14/05 -#endif //end def _WPA2_ +#define WLAN_MIN_RSN_WPA2_LENGTH 2 /* Fix to 2 09/14/05 */ +#endif /* end def _WPA2_ */ #define oui_wpa (u32)(OUI_WPA|OUI_WPA_ADDITIONAL) -#define WPA_OUI_BIG ((u32) 0x01F25000)//added by ws 09/23/04 -#define WPA_OUI_LITTLE ((u32) 0x01F25001)//added by ws 09/23/04 +#define WPA_OUI_BIG ((u32) 0x01F25000)/* added by ws 09/23/04 */ +#define WPA_OUI_LITTLE ((u32) 0x01F25001)/* added by ws 09/23/04 */ -#define WPA_WPS_OUI cpu_to_le32(0x04F25000) // 20061108 For WPS. It's little endian. Big endian is 0x0050F204 +#define WPA_WPS_OUI cpu_to_le32(0x04F25000) /* 20061108 For WPS. It's little endian. Big endian is 0x0050F204 */ -//-----WPA2----- +/* -----WPA2----- */ #ifdef _WPA2_ #define WPA2_OUI_BIG ((u32)0x01AC0F00) #define WPA2_OUI_LITTLE ((u32)0x01AC0F01) -#endif //end def _WPA2_ +#endif /* end def _WPA2_ */ -//Authentication suite -#define OUI_AUTH_WPA_NONE 0x00 //for WPA_NONE +/* Authentication suite */ +#define OUI_AUTH_WPA_NONE 0x00 /* for WPA_NONE */ #define OUI_AUTH_8021X 0x01 #define OUI_AUTH_PSK 0x02 -//Cipher suite -#define OUI_CIPHER_GROUP_KEY 0x00 //added by ws 05/21/04 +/* Cipher suite */ +#define OUI_CIPHER_GROUP_KEY 0x00 /* added by ws 05/21/04 */ #define OUI_CIPHER_WEP_40 0x01 #define OUI_CIPHER_TKIP 0x02 #define OUI_CIPHER_CCMP 0x04 @@ -466,16 +466,16 @@ struct RSN_Auth_Sub_Information_Element struct suite_selector AuthKeyMngtSuite[1]; }__attribute__ ((packed)); -//-- WPA2 -- +/* -- WPA2 -- */ struct RSN_Capability_Element { union { u16 __attribute__ ((packed)) wValue; - #ifdef _BIG_ENDIAN_ //20060927 add by anson's endian + #ifdef _BIG_ENDIAN_ /* 20060927 add by anson's endian */ struct _RSN_Capability { - u16 __attribute__ ((packed)) Reserved2 : 8; // 20051201 + u16 __attribute__ ((packed)) Reserved2 : 8; /* 20051201 */ u16 __attribute__ ((packed)) Reserved1 : 2; u16 __attribute__ ((packed)) GTK_Replay_Counter : 2; u16 __attribute__ ((packed)) PTK_Replay_Counter : 2; @@ -490,7 +490,7 @@ struct RSN_Capability_Element u16 __attribute__ ((packed)) PTK_Replay_Counter : 2; u16 __attribute__ ((packed)) GTK_Replay_Counter : 2; u16 __attribute__ ((packed)) Reserved1 : 2; - u16 __attribute__ ((packed)) Reserved2 : 8; // 20051201 + u16 __attribute__ ((packed)) Reserved2 : 8; /* 20051201 */ }__attribute__ ((packed)) RSN_Capability; #endif @@ -527,14 +527,14 @@ struct PMKID_Information_Element struct pmkid pmkid[16]; }__attribute__ ((packed)); -#endif //enddef _WPA2_ -//============================================================ +#endif /* enddef _WPA2_ */ +/*============================================================ // MAC Frame structure (different type) and subfield structure -//============================================================ +//============================================================*/ struct MAC_frame_control { - u8 mac_frame_info; // a combination of the [Protocol Version, Control Type, Control Subtype] - #ifdef _BIG_ENDIAN_ //20060927 add by anson's endian + u8 mac_frame_info; /* a combination of the [Protocol Version, Control Type, Control Subtype]*/ + #ifdef _BIG_ENDIAN_ /* 20060927 add by anson's endian */ u8 order:1; u8 WEP:1; u8 more_data:1; @@ -556,19 +556,19 @@ struct MAC_frame_control } __attribute__ ((packed)); struct Management_Frame { - struct MAC_frame_control frame_control; // 2B, ToDS,FromDS,MoreFrag,MoreData,Order=0 + struct MAC_frame_control frame_control; /* 2B, ToDS,FromDS,MoreFrag,MoreData,Order=0 */ u16 duration; - u8 DA[MAC_ADDR_LENGTH]; // Addr1 - u8 SA[MAC_ADDR_LENGTH]; // Addr2 - u8 BSSID[MAC_ADDR_LENGTH]; // Addr3 + u8 DA[MAC_ADDR_LENGTH]; /* Addr1 */ + u8 SA[MAC_ADDR_LENGTH]; /* Addr2 */ + u8 BSSID[MAC_ADDR_LENGTH]; /* Addr3 */ u16 Sequence_Control; - // Management Frame Body <= 325 bytes - // FCS 4 bytes + /* Management Frame Body <= 325 bytes */ + /* FCS 4 bytes */ }__attribute__ ((packed)); -// SW-MAC don't Tx/Rx Control-Frame, HW-MAC do it. +/* SW-MAC don't Tx/Rx Control-Frame, HW-MAC do it. */ struct Control_Frame { - struct MAC_frame_control frame_control; // ToDS,FromDS,MoreFrag,Retry,MoreData,WEP,Order=0 + struct MAC_frame_control frame_control; /* ToDS,FromDS,MoreFrag,Retry,MoreData,WEP,Order=0 */ u16 duration; u8 RA[MAC_ADDR_LENGTH]; u8 TA[MAC_ADDR_LENGTH]; @@ -582,9 +582,9 @@ struct Data_Frame { u8 Addr2[MAC_ADDR_LENGTH]; u8 Addr3[MAC_ADDR_LENGTH]; u16 Sequence_Control; - u8 Addr4[MAC_ADDR_LENGTH]; // only exist when ToDS=FromDS=1 - // Data Frame Body <= 2312 - // FCS + u8 Addr4[MAC_ADDR_LENGTH]; /* only exist when ToDS=FromDS=1 */ + /* Data Frame Body <= 2312 */ + /* FCS */ }__attribute__ ((packed)); struct Disassociation_Frame_Body @@ -596,9 +596,9 @@ struct Association_Request_Frame_Body { u16 capability_information; u16 listenInterval; - u8 Current_AP_Address[MAC_ADDR_LENGTH];//for reassociation only - // SSID (2+32 bytes) - // Supported_Rates (2+8 bytes) + u8 Current_AP_Address[MAC_ADDR_LENGTH];/* for reassociation only */ + /* SSID (2+32 bytes) */ + /* Supported_Rates (2+8 bytes) */ }__attribute__ ((packed)); struct Association_Response_Frame_Body @@ -617,7 +617,7 @@ struct Association_Response_Frame_Body // SSID (2+32 bytes) // Supported_Rates (2+8 bytes) };*/ -// eliminated by WS 07/22/04 comboined with associateion request frame. +/* eliminated by WS 07/22/04 comboined with associateion request frame. */ struct Reassociation_Response_Frame_Body { @@ -638,11 +638,11 @@ struct Probe_Response_Frame_Body u16 Timestamp; u16 Beacon_Interval; u16 Capability_Information; - // SSID + /* SSID // Supported_Rates // PHY parameter Set (DS Parameters) // CF parameter Set - // IBSS parameter Set + // IBSS parameter Set */ }__attribute__ ((packed)); struct Authentication_Frame_Body @@ -650,11 +650,11 @@ struct Authentication_Frame_Body u16 algorithmNumber; u16 sequenceNumber; u16 statusCode; - // NB: don't include ChallengeText in this structure - // struct Challenge_Text_Element sChallengeTextElement; // wkchen added + /* NB: don't include ChallengeText in this structure + // struct Challenge_Text_Element sChallengeTextElement; // wkchen added */ }__attribute__ ((packed)); -#endif // _MAC_Structure_H_ +#endif /* _MAC_Structure_H_ */ -- cgit v0.10.2 From d20279d7d45e3428b2202385e488ea57fbc4ab39 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sat, 20 Mar 2010 16:46:35 +0200 Subject: Staging: winbond: fix brace and space coding style issue in mac_structures.h This is a patch to the mac_structures.h file that fixed up a brace and space Errors found by the checkpatch.pl tool. Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mac_structures.h b/drivers/staging/winbond/mac_structures.h index 80d7e4a..7441015 100644 --- a/drivers/staging/winbond/mac_structures.h +++ b/drivers/staging/winbond/mac_structures.h @@ -180,8 +180,7 @@ enum enum_MMPDUResultCode // Define the transmission constants based on W89C32 MAC // target specification. //===========================================================*/ -typedef enum enum_TxRate -{ +typedef enum enum_TxRate { TXRATE_1M = 0, TXRATE_2MLONG = 2, TXRATE_2MSHORT = 3, @@ -238,53 +237,48 @@ typedef enum enum_TxRate #define CAPABILITY_DSSS_OFDM_BIT 0x2000 -struct Capability_Information_Element -{ - union - { - u16 __attribute__ ((packed)) wValue; +struct Capability_Information_Element { + union { + u16 __attribute__ ((packed)) wValue; #ifdef _BIG_ENDIAN_ /* 20060926 add by anson's endian */ - struct _Capability - { - /* -- 11G -- */ - u8 Reserved3 : 2; - u8 DSSS_OFDM : 1; - u8 Reserved2 : 2; - u8 Short_Slot_Time : 1; - u8 Reserved1 : 2; - u8 Channel_Agility : 1; - u8 PBCC : 1; - u8 ShortPreamble : 1; - u8 CF_Privacy : 1; - u8 CF_Poll_Request : 1; - u8 CF_Pollable : 1; - u8 IBSS : 1; - u8 ESS : 1; + struct _Capability { + /* -- 11G -- */ + u8 Reserved3:2; + u8 DSSS_OFDM:1; + u8 Reserved2:2; + u8 Short_Slot_Time:1; + u8 Reserved1:2; + u8 Channel_Agility:1; + u8 PBCC:1; + u8 ShortPreamble:1; + u8 CF_Privacy:1; + u8 CF_Poll_Request:1; + u8 CF_Pollable:1; + u8 IBSS:1; + u8 ESS:1; } __attribute__ ((packed)) Capability; #else - struct _Capability - { - u8 ESS : 1; - u8 IBSS : 1; - u8 CF_Pollable : 1; - u8 CF_Poll_Request : 1; - u8 CF_Privacy : 1; - u8 ShortPreamble : 1; - u8 PBCC : 1; - u8 Channel_Agility : 1; - u8 Reserved1 : 2; + struct _Capability { + u8 ESS:1; + u8 IBSS:1; + u8 CF_Pollable:1; + u8 CF_Poll_Request:1; + u8 CF_Privacy:1; + u8 ShortPreamble:1; + u8 PBCC:1; + u8 Channel_Agility:1; + u8 Reserved1:2; /* -- 11G -- */ - u8 Short_Slot_Time : 1; - u8 Reserved2 : 2; - u8 DSSS_OFDM : 1; - u8 Reserved3 : 2; + u8 Short_Slot_Time:1; + u8 Reserved2:2; + u8 DSSS_OFDM:1; + u8 Reserved3:2; } __attribute__ ((packed)) Capability; #endif - }__attribute__ ((packed)) ; -}__attribute__ ((packed)); + } __attribute__ ((packed)) ; +} __attribute__ ((packed)); -struct FH_Parameter_Set_Element -{ +struct FH_Parameter_Set_Element { u8 Element_ID; u8 Length; u8 Dwell_Time[2]; @@ -293,29 +287,25 @@ struct FH_Parameter_Set_Element u8 Hop_Index; }; -struct DS_Parameter_Set_Element -{ +struct DS_Parameter_Set_Element { u8 Element_ID; u8 Length; u8 Current_Channel; }; -struct Supported_Rates_Element -{ +struct Supported_Rates_Element { u8 Element_ID; u8 Length; u8 SupportedRates[8]; -}__attribute__ ((packed)); +} __attribute__ ((packed)); -struct SSID_Element -{ +struct SSID_Element { u8 Element_ID; u8 Length; u8 SSID[32]; -}__attribute__ ((packed)) ; +} __attribute__ ((packed)) ; -struct CF_Parameter_Set_Element -{ +struct CF_Parameter_Set_Element { u8 Element_ID; u8 Length; u8 CFP_Count; @@ -324,8 +314,7 @@ struct CF_Parameter_Set_Element u8 CFP_DurRemaining[2]; /* in time units */ }; -struct TIM_Element -{ +struct TIM_Element { u8 Element_ID; u8 Length; u8 DTIM_Count; @@ -334,22 +323,19 @@ struct TIM_Element u8 Partial_Virtual_Bitmap[251]; }; -struct IBSS_Parameter_Set_Element -{ +struct IBSS_Parameter_Set_Element { u8 Element_ID; u8 Length; u8 ATIM_Window[2]; }; -struct Challenge_Text_Element -{ +struct Challenge_Text_Element { u8 Element_ID; u8 Length; u8 Challenge_Text[253]; }; -struct PHY_Parameter_Set_Element -{ +struct PHY_Parameter_Set_Element { /* int aSlotTime; */ /* int aSifsTime; */ s32 aCCATime; @@ -372,13 +358,12 @@ struct PHY_Parameter_Set_Element }; /* -- 11G -- */ -struct ERP_Information_Element -{ +struct ERP_Information_Element { u8 Element_ID; u8 Length; #ifdef _BIG_ENDIAN_ /* 20060926 add by anson's endian */ - u8 Reserved:5; /* 20060926 add by anson */ - u8 Barker_Preamble_Mode:1; + u8 Reserved:5; /* 20060926 add by anson */ + u8 Barker_Preamble_Mode:1; u8 Use_Protection:1; u8 NonERP_Present:1; #else @@ -389,12 +374,11 @@ struct ERP_Information_Element #endif }; -struct Extended_Supported_Rates_Element -{ +struct Extended_Supported_Rates_Element { u8 Element_ID; u8 Length; u8 ExtendedSupportedRates[255]; -}__attribute__ ((packed)); +} __attribute__ ((packed)); /* WPA(802.11i draft 3.0) */ #define VERSION_WPA 1 @@ -564,7 +548,7 @@ struct Management_Frame { u16 Sequence_Control; /* Management Frame Body <= 325 bytes */ /* FCS 4 bytes */ -}__attribute__ ((packed)); +} __attribute__ ((packed)); /* SW-MAC don't Tx/Rx Control-Frame, HW-MAC do it. */ struct Control_Frame { @@ -573,7 +557,7 @@ struct Control_Frame { u8 RA[MAC_ADDR_LENGTH]; u8 TA[MAC_ADDR_LENGTH]; u16 FCS; -}__attribute__ ((packed)); +} __attribute__ ((packed)); struct Data_Frame { struct MAC_frame_control frame_control; @@ -585,29 +569,26 @@ struct Data_Frame { u8 Addr4[MAC_ADDR_LENGTH]; /* only exist when ToDS=FromDS=1 */ /* Data Frame Body <= 2312 */ /* FCS */ -}__attribute__ ((packed)); +} __attribute__ ((packed)); -struct Disassociation_Frame_Body -{ +struct Disassociation_Frame_Body { u16 reasonCode; -}__attribute__ ((packed)); +} __attribute__ ((packed)); -struct Association_Request_Frame_Body -{ +struct Association_Request_Frame_Body { u16 capability_information; u16 listenInterval; u8 Current_AP_Address[MAC_ADDR_LENGTH];/* for reassociation only */ /* SSID (2+32 bytes) */ /* Supported_Rates (2+8 bytes) */ -}__attribute__ ((packed)); +} __attribute__ ((packed)); -struct Association_Response_Frame_Body -{ +struct Association_Response_Frame_Body { u16 capability_information; u16 statusCode; u16 Association_ID; struct Supported_Rates_Element supportedRates; -}__attribute__ ((packed)); +} __attribute__ ((packed)); /*struct Reassociation_Request_Frame_Body { @@ -619,22 +600,19 @@ struct Association_Response_Frame_Body };*/ /* eliminated by WS 07/22/04 comboined with associateion request frame. */ -struct Reassociation_Response_Frame_Body -{ +struct Reassociation_Response_Frame_Body { u16 capability_information; u16 statusCode; u16 Association_ID; struct Supported_Rates_Element supportedRates; -}__attribute__ ((packed)); +} __attribute__ ((packed)); -struct Deauthentication_Frame_Body -{ +struct Deauthentication_Frame_Body { u16 reasonCode; -}__attribute__ ((packed)); +} __attribute__ ((packed)); -struct Probe_Response_Frame_Body -{ +struct Probe_Response_Frame_Body { u16 Timestamp; u16 Beacon_Interval; u16 Capability_Information; @@ -643,16 +621,15 @@ struct Probe_Response_Frame_Body // PHY parameter Set (DS Parameters) // CF parameter Set // IBSS parameter Set */ -}__attribute__ ((packed)); +} __attribute__ ((packed)); -struct Authentication_Frame_Body -{ +struct Authentication_Frame_Body { u16 algorithmNumber; u16 sequenceNumber; u16 statusCode; /* NB: don't include ChallengeText in this structure // struct Challenge_Text_Element sChallengeTextElement; // wkchen added */ -}__attribute__ ((packed)); +} __attribute__ ((packed)); #endif /* _MAC_Structure_H_ */ -- cgit v0.10.2 From 152f1bc0517f95f6866046f00c7ef7aff1ca58cd Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sat, 20 Mar 2010 20:43:59 +0100 Subject: Staging: winbond: scan_s.h Coding style fixes. I fixed all things reported by checkpatch.pl except a couple of long lines and typedefs. I also removed "commented away" code and a history comment. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Acked-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/scan_s.h b/drivers/staging/winbond/scan_s.h index 209717f5..85e7523 100644 --- a/drivers/staging/winbond/scan_s.h +++ b/drivers/staging/winbond/scan_s.h @@ -4,117 +4,107 @@ #include #include "localpara.h" -// -// SCAN task global CONSTANTS, STRUCTURES, variables -// - -////////////////////////////////////////////////////////////////////////// -//define the msg type of SCAN module -#define SCANMSG_SCAN_REQ 0x01 -#define SCANMSG_BEACON 0x02 +/* + * SCAN task global CONSTANTS, STRUCTURES, variables + */ + +/* define the msg type of SCAN module */ +#define SCANMSG_SCAN_REQ 0x01 +#define SCANMSG_BEACON 0x02 #define SCANMSG_PROBE_RESPONSE 0x03 -#define SCANMSG_TIMEOUT 0x04 +#define SCANMSG_TIMEOUT 0x04 #define SCANMSG_TXPROBE_FAIL 0x05 #define SCANMSG_ENABLE_BGSCAN 0x06 -#define SCANMSG_STOP_SCAN 0x07 +#define SCANMSG_STOP_SCAN 0x07 -// BSS Type =>conform to -// IBSS : ToDS/FromDS = 00 -// Infrastructure : ToDS/FromDS = 01 +/* + * BSS Type =>conform to + * IBSS : ToDS/FromDS = 00 + * Infrastructure : ToDS/FromDS = 01 + */ #define IBSS_NET 0 #define ESS_NET 1 #define ANYBSS_NET 2 -// Scan Type +/* Scan Type */ #define ACTIVE_SCAN 0 -#define PASSIVE_SCAN 1 +#define PASSIVE_SCAN 1 + +/* Global data structures, Initial Scan & Background Scan */ +typedef struct _SCAN_REQ_PARA { /* mandatory parameters for SCAN request */ -/////////////////////////////////////////////////////////////////////////// -//Global data structures, Initial Scan & Background Scan -typedef struct _SCAN_REQ_PARA //mandatory parameters for SCAN request -{ - u32 ScanType; //passive/active scan + u32 ScanType; /* passive/active scan */ u8 reserved_1[2]; - struct SSID_Element sSSID; // 34B. scan only for this SSID + struct SSID_Element sSSID; /* 34B. scan only for this SSID */ u8 reserved_2[2]; } SCAN_REQ_PARA, *psSCAN_REQ_PARA; -typedef struct _SCAN_PARAMETERS -{ - u16 wState; - u16 iCurrentChannelIndex; +typedef struct _SCAN_PARAMETERS { + u16 wState; + u16 iCurrentChannelIndex; SCAN_REQ_PARA sScanReq; - u8 BSSID[MAC_ADDR_LENGTH + 2]; //scan only for this BSSID + u8 BSSID[MAC_ADDR_LENGTH + 2]; /* scan only for this BSSID */ - u32 BssType; //scan only for this BSS type + u32 BssType; /* scan only for this BSS type */ - //struct SSID_Element sSSID; //scan only for this SSID - u16 ProbeDelay; - u16 MinChannelTime; + u16 ProbeDelay; + u16 MinChannelTime; - u16 MaxChannelTime; - u16 reserved_1; + u16 MaxChannelTime; + u16 reserved_1; - s32 iBgScanPeriod; // XP: 5 sec + s32 iBgScanPeriod; /* XP: 5 sec */ - u8 boBgScan; // Wb: enable BG scan, For XP, this value must be FALSE - u8 boFastScan; // Wb: reserved - u8 boCCAbusy; // Wb: HWMAC CCA busy status - u8 reserved_2; + u8 boBgScan; /* Wb: enable BG scan, For XP, this value must be FALSE */ + u8 boFastScan; /* Wb: reserved */ + u8 boCCAbusy; /* Wb: HWMAC CCA busy status */ + u8 reserved_2; struct timer_list timer; - u32 ScanTimeStamp; //Increase 1 per background scan(1 minute) - u32 BssTimeStamp; //Increase 1 per connect status check - u32 RxNumPerAntenna[2]; // - - u8 AntennaToggle; // - u8 boInTimerHandler; - u8 boTimerActive; // Wb: reserved - u8 boSave; + u32 ScanTimeStamp; /* Increase 1 per background scan(1 minute) */ + u32 BssTimeStamp; /* Increase 1 per connect status check */ + u32 RxNumPerAntenna[2]; - u32 BScanEnable; // Background scan enable. Default is On + u8 AntennaToggle; + u8 boInTimerHandler; + u8 boTimerActive; /* Wb: reserved */ + u8 boSave; + u32 BScanEnable; /* Background scan enable. Default is On */ } SCAN_PARAMETERS, *psSCAN_PARAMETERS; -// Encapsulate 'adapter' data structure -#define psSCAN (&(adapter->sScanPara)) -#define psSCANREQ (&(adapter->sScanPara.sScanReq)) - -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// scan.h -// Define the related definitions of scan module -// history -- 01/14/03' created -// -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - -//Define the state of scan module -#define SCAN_INACTIVE 0 -#define WAIT_PROBE_DELAY 1 -#define WAIT_RESPONSE_MIN 2 -#define WAIT_RESPONSE_MAX_ACTIVE 3 -#define WAIT_BEACON_MAX_PASSIVE 4 -#define SCAN_COMPLETE 5 -#define BG_SCAN 6 -#define BG_SCANNING 7 - - -// The value will load from EEPROM -// If 0xff is set in EEPOM, the driver will use SCAN_MAX_CHNL_TIME instead. -// The definition is in WbHal.h -// #define SCAN_MAX_CHNL_TIME (50) - - - -// static functions - -//static void ScanTimerHandler(struct wbsoft_priv * adapter); -//static void vScanTimerStart(struct wbsoft_priv * adapter, int timeout_value); -//static void vScanTimerStop(struct wbsoft_priv * adapter); - +/* Encapsulate 'adapter' data structure */ +#define psSCAN (&(adapter->sScanPara)) +#define psSCANREQ (&(adapter->sScanPara.sScanReq)) + +/* + * =========================================================== + * scan.h + * Define the related definitions of scan module + * + * =========================================================== + */ + +/* Define the state of scan module */ +#define SCAN_INACTIVE 0 +#define WAIT_PROBE_DELAY 1 +#define WAIT_RESPONSE_MIN 2 +#define WAIT_RESPONSE_MAX_ACTIVE 3 +#define WAIT_BEACON_MAX_PASSIVE 4 +#define SCAN_COMPLETE 5 +#define BG_SCAN 6 +#define BG_SCANNING 7 + + +/* + * The value will load from EEPROM + * If 0xff is set in EEPOM, the driver will use SCAN_MAX_CHNL_TIME instead. + * The definition is in WbHal.h + */ #endif -- cgit v0.10.2 From fa6896f2c5416c773f7c6f13bb7db140f8208c71 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 21 Mar 2010 17:50:42 +0100 Subject: Staging: winbond: reg.c Coding style fixes I fixed all problems reported by checkpatch.pl except some (a lot of) long lines and some printk:s. I removed "commented away" code and version comments. Signed-off-by: Lars Lindley Acked-by: Pekka Enberg Acked-by: Pavel Machek Acked-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/reg.c b/drivers/staging/winbond/reg.c index 5f5048a..d9a8128 100644 --- a/drivers/staging/winbond/reg.c +++ b/drivers/staging/winbond/reg.c @@ -1,514 +1,452 @@ #include "sysdef.h" #include "wbhal_f.h" -/////////////////////////////////////////////////////////////////////////////////////////////////// -// Original Phy.h -//***************************************************************************** - -/***************************************************************************** -; For MAXIM2825/6/7 Ver. 331 or more -; Edited by Tiger, Sep-17-2003 -; revised by Ben, Sep-18-2003 - -0x00 0x000a2 -0x01 0x21cc0 -;0x02 0x13802 -0x02 0x1383a - -;channe1 01 ; 0x03 0x30142 ; 0x04 0x0b333; -;channe1 02 ;0x03 0x32141 ;0x04 0x08444; -;channe1 03 ;0x03 0x32143 ;0x04 0x0aeee; -;channe1 04 ;0x03 0x32142 ;0x04 0x0b333; -;channe1 05 ;0x03 0x31141 ;0x04 0x08444; -;channe1 06 ; -0x03 0x31143; -0x04 0x0aeee; -;channe1 07 ;0x03 0x31142 ;0x04 0x0b333; -;channe1 08 ;0x03 0x33141 ;0x04 0x08444; -;channe1 09 ;0x03 0x33143 ;0x04 0x0aeee; -;channe1 10 ;0x03 0x33142 ;0x04 0x0b333; -;channe1 11 ;0x03 0x30941 ;0x04 0x08444; -;channe1 12 ;0x03 0x30943 ;0x04 0x0aeee; -;channe1 13 ;0x03 0x30942 ;0x04 0x0b333; - -0x05 0x28986 -0x06 0x18008 -0x07 0x38400 -0x08 0x05100; 100 Hz DC -;0x08 0x05900; 30 KHz DC -0x09 0x24f08 -0x0a 0x17e00, 0x17ea0 -0x0b 0x37d80 -0x0c 0x0c900 // 0x0ca00 (lager power 9db than 0x0c000), 0x0c000 -*****************************************************************************/ -// MAX2825 (pure b/g) -u32 max2825_rf_data[] = -{ - (0x00<<18)|0x000a2, - (0x01<<18)|0x21cc0, - (0x02<<18)|0x13806, - (0x03<<18)|0x30142, - (0x04<<18)|0x0b333, - (0x05<<18)|0x289A6, - (0x06<<18)|0x18008, - (0x07<<18)|0x38000, - (0x08<<18)|0x05100, - (0x09<<18)|0x24f08, - (0x0A<<18)|0x14000, - (0x0B<<18)|0x37d80, - (0x0C<<18)|0x0c100 // 11a: 0x0c300, 11g: 0x0c100 -}; +/* + * ==================================================== + * Original Phy.h + * ==================================================== + */ -u32 max2825_channel_data_24[][3] = -{ - {(0x03<<18)|0x30142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 01 - {(0x03<<18)|0x32141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 02 - {(0x03<<18)|0x32143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 03 - {(0x03<<18)|0x32142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 04 - {(0x03<<18)|0x31141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 05 - {(0x03<<18)|0x31143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 06 - {(0x03<<18)|0x31142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 07 - {(0x03<<18)|0x33141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 08 - {(0x03<<18)|0x33143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 09 - {(0x03<<18)|0x33142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 10 - {(0x03<<18)|0x30941, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 11 - {(0x03<<18)|0x30943, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 12 - {(0x03<<18)|0x30942, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 13 - {(0x03<<18)|0x32941, (0x04<<18)|0x09999, (0x05<<18)|0x289A6} // 14 (2484MHz) hhmodify +/* + * ==================================================== + * For MAXIM2825/6/7 Ver. 331 or more + * + * 0x00 0x000a2 + * 0x01 0x21cc0 + * 0x02 0x13802 + * 0x02 0x1383a + * + * channe1 01 ; 0x03 0x30142 ; 0x04 0x0b333; + * channe1 02 ; 0x03 0x32141 ; 0x04 0x08444; + * channe1 03 ; 0x03 0x32143 ; 0x04 0x0aeee; + * channe1 04 ; 0x03 0x32142 ; 0x04 0x0b333; + * channe1 05 ; 0x03 0x31141 ; 0x04 0x08444; + * channe1 06 ; 0x03 0x31143 ; 0x04 0x0aeee; + * channe1 07 ; 0x03 0x31142 ; 0x04 0x0b333; + * channe1 08 ; 0x03 0x33141 ; 0x04 0x08444; + * channe1 09 ; 0x03 0x33143 ; 0x04 0x0aeee; + * channe1 10 ; 0x03 0x33142 ; 0x04 0x0b333; + * channe1 11 ; 0x03 0x30941 ; 0x04 0x08444; + * channe1 12 ; 0x03 0x30943 ; 0x04 0x0aeee; + * channe1 13 ; 0x03 0x30942 ; 0x04 0x0b333; + * + * 0x05 0x28986 + * 0x06 0x18008 + * 0x07 0x38400 + * 0x08 0x05100; 100 Hz DC + * 0x08 0x05900; 30 KHz DC + * 0x09 0x24f08 + * 0x0a 0x17e00, 0x17ea0 + * 0x0b 0x37d80 + * 0x0c 0x0c900 -- 0x0ca00 (lager power 9db than 0x0c000), 0x0c000 + */ + +/* MAX2825 (pure b/g) */ +u32 max2825_rf_data[] = { + (0x00<<18) | 0x000a2, + (0x01<<18) | 0x21cc0, + (0x02<<18) | 0x13806, + (0x03<<18) | 0x30142, + (0x04<<18) | 0x0b333, + (0x05<<18) | 0x289A6, + (0x06<<18) | 0x18008, + (0x07<<18) | 0x38000, + (0x08<<18) | 0x05100, + (0x09<<18) | 0x24f08, + (0x0A<<18) | 0x14000, + (0x0B<<18) | 0x37d80, + (0x0C<<18) | 0x0c100 /* 11a: 0x0c300, 11g: 0x0c100 */ }; -u32 max2825_power_data_24[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; - -/****************************************************************************/ -// MAX2827 (a/b/g) -u32 max2827_rf_data[] = -{ - (0x00<<18)|0x000a2, - (0x01<<18)|0x21cc0, - (0x02<<18)|0x13806, - (0x03<<18)|0x30142, - (0x04<<18)|0x0b333, - (0x05<<18)|0x289A6, - (0x06<<18)|0x18008, - (0x07<<18)|0x38000, - (0x08<<18)|0x05100, - (0x09<<18)|0x24f08, - (0x0A<<18)|0x14000, - (0x0B<<18)|0x37d80, - (0x0C<<18)|0x0c100 // 11a: 0x0c300, 11g: 0x0c100 +u32 max2825_channel_data_24[][3] = { + {(0x03 << 18) | 0x30142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channel 01 */ + {(0x03 << 18) | 0x32141, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channel 02 */ + {(0x03 << 18) | 0x32143, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channel 03 */ + {(0x03 << 18) | 0x32142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channel 04 */ + {(0x03 << 18) | 0x31141, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channel 05 */ + {(0x03 << 18) | 0x31143, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channel 06 */ + {(0x03 << 18) | 0x31142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channel 07 */ + {(0x03 << 18) | 0x33141, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channel 08 */ + {(0x03 << 18) | 0x33143, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channel 09 */ + {(0x03 << 18) | 0x33142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channel 10 */ + {(0x03 << 18) | 0x30941, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channel 11 */ + {(0x03 << 18) | 0x30943, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channel 12 */ + {(0x03 << 18) | 0x30942, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channel 13 */ + {(0x03 << 18) | 0x32941, (0x04 << 18) | 0x09999, (0x05 << 18) | 0x289A6} /* channel 14 (2484MHz) */ }; -u32 max2827_channel_data_24[][3] = -{ - {(0x03<<18)|0x30142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 01 - {(0x03<<18)|0x32141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 02 - {(0x03<<18)|0x32143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 03 - {(0x03<<18)|0x32142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 04 - {(0x03<<18)|0x31141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 05 - {(0x03<<18)|0x31143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 06 - {(0x03<<18)|0x31142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 07 - {(0x03<<18)|0x33141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 08 - {(0x03<<18)|0x33143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 09 - {(0x03<<18)|0x33142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 10 - {(0x03<<18)|0x30941, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 11 - {(0x03<<18)|0x30943, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 12 - {(0x03<<18)|0x30942, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 13 - {(0x03<<18)|0x32941, (0x04<<18)|0x09999, (0x05<<18)|0x289A6} // 14 (2484MHz) hhmodify +u32 max2825_power_data_24[] = {(0x0C << 18) | 0x0c000, (0x0C << 18) | 0x0c100}; + +/* ========================================== */ +/* MAX2827 (a/b/g) */ +u32 max2827_rf_data[] = { + (0x00 << 18) | 0x000a2, + (0x01 << 18) | 0x21cc0, + (0x02 << 18) | 0x13806, + (0x03 << 18) | 0x30142, + (0x04 << 18) | 0x0b333, + (0x05 << 18) | 0x289A6, + (0x06 << 18) | 0x18008, + (0x07 << 18) | 0x38000, + (0x08 << 18) | 0x05100, + (0x09 << 18) | 0x24f08, + (0x0A << 18) | 0x14000, + (0x0B << 18) | 0x37d80, + (0x0C << 18) | 0x0c100 /* 11a: 0x0c300, 11g: 0x0c100 */ }; -u32 max2827_channel_data_50[][3] = -{ - {(0x03<<18)|0x33cc3, (0x04<<18)|0x08ccc, (0x05<<18)|0x2A9A6}, // channel 36 - {(0x03<<18)|0x302c0, (0x04<<18)|0x08000, (0x05<<18)|0x2A9A6}, // channel 40 - {(0x03<<18)|0x302c2, (0x04<<18)|0x0b333, (0x05<<18)|0x2A9A6}, // channel 44 - {(0x03<<18)|0x322c1, (0x04<<18)|0x09999, (0x05<<18)|0x2A9A6}, // channel 48 - {(0x03<<18)|0x312c1, (0x04<<18)|0x0a666, (0x05<<18)|0x2A9A6}, // channel 52 - {(0x03<<18)|0x332c3, (0x04<<18)|0x08ccc, (0x05<<18)|0x2A9A6}, // channel 56 - {(0x03<<18)|0x30ac0, (0x04<<18)|0x08000, (0x05<<18)|0x2A9A6}, // channel 60 - {(0x03<<18)|0x30ac2, (0x04<<18)|0x0b333, (0x05<<18)|0x2A9A6} // channel 64 +u32 max2827_channel_data_24[][3] = { + {(0x03 << 18) | 0x30142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 01 */ + {(0x03 << 18) | 0x32141, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channe1 02 */ + {(0x03 << 18) | 0x32143, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channe1 03 */ + {(0x03 << 18) | 0x32142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 04 */ + {(0x03 << 18) | 0x31141, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channe1 05 */ + {(0x03 << 18) | 0x31143, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channe1 06 */ + {(0x03 << 18) | 0x31142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 07 */ + {(0x03 << 18) | 0x33141, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channe1 08 */ + {(0x03 << 18) | 0x33143, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channe1 09 */ + {(0x03 << 18) | 0x33142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 10 */ + {(0x03 << 18) | 0x30941, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channe1 11 */ + {(0x03 << 18) | 0x30943, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channe1 12 */ + {(0x03 << 18) | 0x30942, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 13 */ + {(0x03 << 18) | 0x32941, (0x04 << 18) | 0x09999, (0x05 << 18) | 0x289A6} /* channel 14 (2484MHz) */ }; -u32 max2827_power_data_24[] = {(0x0C<<18)|0x0C000, (0x0C<<18)|0x0D600, (0x0C<<18)|0x0C100}; -u32 max2827_power_data_50[] = {(0x0C<<18)|0x0C400, (0x0C<<18)|0x0D500, (0x0C<<18)|0x0C300}; - -/****************************************************************************/ -// MAX2828 (a/b/g) -u32 max2828_rf_data[] = -{ - (0x00<<18)|0x000a2, - (0x01<<18)|0x21cc0, - (0x02<<18)|0x13806, - (0x03<<18)|0x30142, - (0x04<<18)|0x0b333, - (0x05<<18)|0x289A6, - (0x06<<18)|0x18008, - (0x07<<18)|0x38000, - (0x08<<18)|0x05100, - (0x09<<18)|0x24f08, - (0x0A<<18)|0x14000, - (0x0B<<18)|0x37d80, - (0x0C<<18)|0x0c100 // 11a: 0x0c300, 11g: 0x0c100 +u32 max2827_channel_data_50[][3] = { + {(0x03 << 18) | 0x33cc3, (0x04 << 18) | 0x08ccc, (0x05 << 18) | 0x2A9A6}, /* channel 36 */ + {(0x03 << 18) | 0x302c0, (0x04 << 18) | 0x08000, (0x05 << 18) | 0x2A9A6}, /* channel 40 */ + {(0x03 << 18) | 0x302c2, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x2A9A6}, /* channel 44 */ + {(0x03 << 18) | 0x322c1, (0x04 << 18) | 0x09999, (0x05 << 18) | 0x2A9A6}, /* channel 48 */ + {(0x03 << 18) | 0x312c1, (0x04 << 18) | 0x0a666, (0x05 << 18) | 0x2A9A6}, /* channel 52 */ + {(0x03 << 18) | 0x332c3, (0x04 << 18) | 0x08ccc, (0x05 << 18) | 0x2A9A6}, /* channel 56 */ + {(0x03 << 18) | 0x30ac0, (0x04 << 18) | 0x08000, (0x05 << 18) | 0x2A9A6}, /* channel 60 */ + {(0x03 << 18) | 0x30ac2, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x2A9A6} /* channel 64 */ }; -u32 max2828_channel_data_24[][3] = -{ - {(0x03<<18)|0x30142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 01 - {(0x03<<18)|0x32141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 02 - {(0x03<<18)|0x32143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 03 - {(0x03<<18)|0x32142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 04 - {(0x03<<18)|0x31141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 05 - {(0x03<<18)|0x31143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 06 - {(0x03<<18)|0x31142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 07 - {(0x03<<18)|0x33141, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 08 - {(0x03<<18)|0x33143, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 09 - {(0x03<<18)|0x33142, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 10 - {(0x03<<18)|0x30941, (0x04<<18)|0x08444, (0x05<<18)|0x289A6}, // channe1 11 - {(0x03<<18)|0x30943, (0x04<<18)|0x0aeee, (0x05<<18)|0x289A6}, // channe1 12 - {(0x03<<18)|0x30942, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channe1 13 - {(0x03<<18)|0x32941, (0x04<<18)|0x09999, (0x05<<18)|0x289A6} // 14 (2484MHz) hhmodify +u32 max2827_power_data_24[] = {(0x0C << 18) | 0x0C000, (0x0C << 18) | 0x0D600, (0x0C << 18) | 0x0C100}; +u32 max2827_power_data_50[] = {(0x0C << 18) | 0x0C400, (0x0C << 18) | 0x0D500, (0x0C << 18) | 0x0C300}; + +/* ======================================================= */ +/* MAX2828 (a/b/g) */ +u32 max2828_rf_data[] = { + (0x00 << 18) | 0x000a2, + (0x01 << 18) | 0x21cc0, + (0x02 << 18) | 0x13806, + (0x03 << 18) | 0x30142, + (0x04 << 18) | 0x0b333, + (0x05 << 18) | 0x289A6, + (0x06 << 18) | 0x18008, + (0x07 << 18) | 0x38000, + (0x08 << 18) | 0x05100, + (0x09 << 18) | 0x24f08, + (0x0A << 18) | 0x14000, + (0x0B << 18) | 0x37d80, + (0x0C << 18) | 0x0c100 /* 11a: 0x0c300, 11g: 0x0c100 */ }; -u32 max2828_channel_data_50[][3] = -{ - {(0x03<<18)|0x33cc3, (0x04<<18)|0x08ccc, (0x05<<18)|0x289A6}, // channel 36 - {(0x03<<18)|0x302c0, (0x04<<18)|0x08000, (0x05<<18)|0x289A6}, // channel 40 - {(0x03<<18)|0x302c2, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6}, // channel 44 - {(0x03<<18)|0x322c1, (0x04<<18)|0x09999, (0x05<<18)|0x289A6}, // channel 48 - {(0x03<<18)|0x312c1, (0x04<<18)|0x0a666, (0x05<<18)|0x289A6}, // channel 52 - {(0x03<<18)|0x332c3, (0x04<<18)|0x08ccc, (0x05<<18)|0x289A6}, // channel 56 - {(0x03<<18)|0x30ac0, (0x04<<18)|0x08000, (0x05<<18)|0x289A6}, // channel 60 - {(0x03<<18)|0x30ac2, (0x04<<18)|0x0b333, (0x05<<18)|0x289A6} // channel 64 +u32 max2828_channel_data_24[][3] = { + {(0x03 << 18) | 0x30142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 01 */ + {(0x03 << 18) | 0x32141, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channe1 02 */ + {(0x03 << 18) | 0x32143, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channe1 03 */ + {(0x03 << 18) | 0x32142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 04 */ + {(0x03 << 18) | 0x31141, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channe1 05 */ + {(0x03 << 18) | 0x31143, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channe1 06 */ + {(0x03 << 18) | 0x31142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 07 */ + {(0x03 << 18) | 0x33141, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channe1 08 */ + {(0x03 << 18) | 0x33143, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channe1 09 */ + {(0x03 << 18) | 0x33142, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 10 */ + {(0x03 << 18) | 0x30941, (0x04 << 18) | 0x08444, (0x05 << 18) | 0x289A6}, /* channe1 11 */ + {(0x03 << 18) | 0x30943, (0x04 << 18) | 0x0aeee, (0x05 << 18) | 0x289A6}, /* channe1 12 */ + {(0x03 << 18) | 0x30942, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channe1 13 */ + {(0x03 << 18) | 0x32941, (0x04 << 18) | 0x09999, (0x05 << 18) | 0x289A6} /* channel 14 (2484MHz) */ }; -u32 max2828_power_data_24[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; -u32 max2828_power_data_50[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; - -/****************************************************************************/ -// LA20040728 kevin -// MAX2829 (a/b/g) -u32 max2829_rf_data[] = -{ - (0x00<<18)|0x000a2, - (0x01<<18)|0x23520, - (0x02<<18)|0x13802, - (0x03<<18)|0x30142, - (0x04<<18)|0x0b333, - (0x05<<18)|0x28906, - (0x06<<18)|0x18008, - (0x07<<18)|0x3B500, - (0x08<<18)|0x05100, - (0x09<<18)|0x24f08, - (0x0A<<18)|0x14000, - (0x0B<<18)|0x37d80, - (0x0C<<18)|0x0F300 //TXVGA=51, (MAX-6 dB) +u32 max2828_channel_data_50[][3] = { + {(0x03 << 18) | 0x33cc3, (0x04 << 18) | 0x08ccc, (0x05 << 18) | 0x289A6}, /* channel 36 */ + {(0x03 << 18) | 0x302c0, (0x04 << 18) | 0x08000, (0x05 << 18) | 0x289A6}, /* channel 40 */ + {(0x03 << 18) | 0x302c2, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6}, /* channel 44 */ + {(0x03 << 18) | 0x322c1, (0x04 << 18) | 0x09999, (0x05 << 18) | 0x289A6}, /* channel 48 */ + {(0x03 << 18) | 0x312c1, (0x04 << 18) | 0x0a666, (0x05 << 18) | 0x289A6}, /* channel 52 */ + {(0x03 << 18) | 0x332c3, (0x04 << 18) | 0x08ccc, (0x05 << 18) | 0x289A6}, /* channel 56 */ + {(0x03 << 18) | 0x30ac0, (0x04 << 18) | 0x08000, (0x05 << 18) | 0x289A6}, /* channel 60 */ + {(0x03 << 18) | 0x30ac2, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x289A6} /* channel 64 */ }; -u32 max2829_channel_data_24[][3] = -{ - {(3<<18)|0x30142, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 01 (2412MHz) - {(3<<18)|0x32141, (4<<18)|0x08444, (5<<18)|0x289C6}, // 02 (2417MHz) - {(3<<18)|0x32143, (4<<18)|0x0aeee, (5<<18)|0x289C6}, // 03 (2422MHz) - {(3<<18)|0x32142, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 04 (2427MHz) - {(3<<18)|0x31141, (4<<18)|0x08444, (5<<18)|0x289C6}, // 05 (2432MHz) - {(3<<18)|0x31143, (4<<18)|0x0aeee, (5<<18)|0x289C6}, // 06 (2437MHz) - {(3<<18)|0x31142, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 07 (2442MHz) - {(3<<18)|0x33141, (4<<18)|0x08444, (5<<18)|0x289C6}, // 08 (2447MHz) - {(3<<18)|0x33143, (4<<18)|0x0aeee, (5<<18)|0x289C6}, // 09 (2452MHz) - {(3<<18)|0x33142, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 10 (2457MHz) - {(3<<18)|0x30941, (4<<18)|0x08444, (5<<18)|0x289C6}, // 11 (2462MHz) - {(3<<18)|0x30943, (4<<18)|0x0aeee, (5<<18)|0x289C6}, // 12 (2467MHz) - {(3<<18)|0x30942, (4<<18)|0x0b333, (5<<18)|0x289C6}, // 13 (2472MHz) - {(3<<18)|0x32941, (4<<18)|0x09999, (5<<18)|0x289C6}, // 14 (2484MHz) hh-modify +u32 max2828_power_data_24[] = {(0x0C << 18) | 0x0c000, (0x0C << 18) | 0x0c100}; +u32 max2828_power_data_50[] = {(0x0C << 18) | 0x0c000, (0x0C << 18) | 0x0c100}; + +/* ========================================================== */ +/* MAX2829 (a/b/g) */ +u32 max2829_rf_data[] = { + (0x00 << 18) | 0x000a2, + (0x01 << 18) | 0x23520, + (0x02 << 18) | 0x13802, + (0x03 << 18) | 0x30142, + (0x04 << 18) | 0x0b333, + (0x05 << 18) | 0x28906, + (0x06 << 18) | 0x18008, + (0x07 << 18) | 0x3B500, + (0x08 << 18) | 0x05100, + (0x09 << 18) | 0x24f08, + (0x0A << 18) | 0x14000, + (0x0B << 18) | 0x37d80, + (0x0C << 18) | 0x0F300 /* TXVGA=51, (MAX-6 dB) */ }; -u32 max2829_channel_data_50[][4] = -{ - {36, (3<<18)|0x33cc3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 36 (5.180GHz) - {40, (3<<18)|0x302c0, (4<<18)|0x08000, (5<<18)|0x2A946}, // 40 (5.200GHz) - {44, (3<<18)|0x302c2, (4<<18)|0x0b333, (5<<18)|0x2A946}, // 44 (5.220GHz) - {48, (3<<18)|0x322c1, (4<<18)|0x09999, (5<<18)|0x2A946}, // 48 (5.240GHz) - {52, (3<<18)|0x312c1, (4<<18)|0x0a666, (5<<18)|0x2A946}, // 52 (5.260GHz) - {56, (3<<18)|0x332c3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 56 (5.280GHz) - {60, (3<<18)|0x30ac0, (4<<18)|0x08000, (5<<18)|0x2A946}, // 60 (5.300GHz) - {64, (3<<18)|0x30ac2, (4<<18)|0x0b333, (5<<18)|0x2A946}, // 64 (5.320GHz) - - {100, (3<<18)|0x30ec0, (4<<18)|0x08000, (5<<18)|0x2A9C6}, // 100 (5.500GHz) - {104, (3<<18)|0x30ec2, (4<<18)|0x0b333, (5<<18)|0x2A9C6}, // 104 (5.520GHz) - {108, (3<<18)|0x32ec1, (4<<18)|0x09999, (5<<18)|0x2A9C6}, // 108 (5.540GHz) - {112, (3<<18)|0x31ec1, (4<<18)|0x0a666, (5<<18)|0x2A9C6}, // 112 (5.560GHz) - {116, (3<<18)|0x33ec3, (4<<18)|0x08ccc, (5<<18)|0x2A9C6}, // 116 (5.580GHz) - {120, (3<<18)|0x301c0, (4<<18)|0x08000, (5<<18)|0x2A9C6}, // 120 (5.600GHz) - {124, (3<<18)|0x301c2, (4<<18)|0x0b333, (5<<18)|0x2A9C6}, // 124 (5.620GHz) - {128, (3<<18)|0x321c1, (4<<18)|0x09999, (5<<18)|0x2A9C6}, // 128 (5.640GHz) - {132, (3<<18)|0x311c1, (4<<18)|0x0a666, (5<<18)|0x2A9C6}, // 132 (5.660GHz) - {136, (3<<18)|0x331c3, (4<<18)|0x08ccc, (5<<18)|0x2A9C6}, // 136 (5.680GHz) - {140, (3<<18)|0x309c0, (4<<18)|0x08000, (5<<18)|0x2A9C6}, // 140 (5.700GHz) - - {149, (3<<18)|0x329c2, (4<<18)|0x0b333, (5<<18)|0x2A9C6}, // 149 (5.745GHz) - {153, (3<<18)|0x319c1, (4<<18)|0x09999, (5<<18)|0x2A9C6}, // 153 (5.765GHz) - {157, (3<<18)|0x339c1, (4<<18)|0x0a666, (5<<18)|0x2A9C6}, // 157 (5.785GHz) - {161, (3<<18)|0x305c3, (4<<18)|0x08ccc, (5<<18)|0x2A9C6}, // 161 (5.805GHz) - - // Japan - { 184, (3<<18)|0x308c2, (4<<18)|0x0b333, (5<<18)|0x2A946}, // 184 (4.920GHz) - { 188, (3<<18)|0x328c1, (4<<18)|0x09999, (5<<18)|0x2A946}, // 188 (4.940GHz) - { 192, (3<<18)|0x318c1, (4<<18)|0x0a666, (5<<18)|0x2A946}, // 192 (4.960GHz) - { 196, (3<<18)|0x338c3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 196 (4.980GHz) - { 8, (3<<18)|0x324c1, (4<<18)|0x09999, (5<<18)|0x2A946}, // 8 (5.040GHz) - { 12, (3<<18)|0x314c1, (4<<18)|0x0a666, (5<<18)|0x2A946}, // 12 (5.060GHz) - { 16, (3<<18)|0x334c3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 16 (5.080GHz) - { 34, (3<<18)|0x31cc2, (4<<18)|0x0b333, (5<<18)|0x2A946}, // 34 (5.170GHz) - { 38, (3<<18)|0x33cc1, (4<<18)|0x09999, (5<<18)|0x2A946}, // 38 (5.190GHz) - { 42, (3<<18)|0x302c1, (4<<18)|0x0a666, (5<<18)|0x2A946}, // 42 (5.210GHz) - { 46, (3<<18)|0x322c3, (4<<18)|0x08ccc, (5<<18)|0x2A946}, // 46 (5.230GHz) +u32 max2829_channel_data_24[][3] = { + {(3 << 18) | 0x30142, (4 << 18) | 0x0b333, (5 << 18) | 0x289C6}, /* 01 (2412MHz) */ + {(3 << 18) | 0x32141, (4 << 18) | 0x08444, (5 << 18) | 0x289C6}, /* 02 (2417MHz) */ + {(3 << 18) | 0x32143, (4 << 18) | 0x0aeee, (5 << 18) | 0x289C6}, /* 03 (2422MHz) */ + {(3 << 18) | 0x32142, (4 << 18) | 0x0b333, (5 << 18) | 0x289C6}, /* 04 (2427MHz) */ + {(3 << 18) | 0x31141, (4 << 18) | 0x08444, (5 << 18) | 0x289C6}, /* 05 (2432MHz) */ + {(3 << 18) | 0x31143, (4 << 18) | 0x0aeee, (5 << 18) | 0x289C6}, /* 06 (2437MHz) */ + {(3 << 18) | 0x31142, (4 << 18) | 0x0b333, (5 << 18) | 0x289C6}, /* 07 (2442MHz) */ + {(3 << 18) | 0x33141, (4 << 18) | 0x08444, (5 << 18) | 0x289C6}, /* 08 (2447MHz) */ + {(3 << 18) | 0x33143, (4 << 18) | 0x0aeee, (5 << 18) | 0x289C6}, /* 09 (2452MHz) */ + {(3 << 18) | 0x33142, (4 << 18) | 0x0b333, (5 << 18) | 0x289C6}, /* 10 (2457MHz) */ + {(3 << 18) | 0x30941, (4 << 18) | 0x08444, (5 << 18) | 0x289C6}, /* 11 (2462MHz) */ + {(3 << 18) | 0x30943, (4 << 18) | 0x0aeee, (5 << 18) | 0x289C6}, /* 12 (2467MHz) */ + {(3 << 18) | 0x30942, (4 << 18) | 0x0b333, (5 << 18) | 0x289C6}, /* 13 (2472MHz) */ + {(3 << 18) | 0x32941, (4 << 18) | 0x09999, (5 << 18) | 0x289C6}, /* 14 (2484MHz) */ }; -/***************************************************************************** -; For MAXIM2825/6/7 Ver. 317 or less -; Edited by Tiger, Sep-17-2003 for 2.4Ghz channels -; Updated by Tiger, Sep-22-2003 for 5.0Ghz channels -; Corrected by Tiger, Sep-23-2003, for 0x03 and 0x04 of 5.0Ghz channels - -0x00 0x00080 -0x01 0x214c0 -0x02 0x13802 - -;2.4GHz Channels -;channe1 01 (2.412GHz); 0x03 0x30143 ;0x04 0x0accc -;channe1 02 (2.417GHz); 0x03 0x32140 ;0x04 0x09111 -;channe1 03 (2.422GHz); 0x03 0x32142 ;0x04 0x0bbbb -;channe1 04 (2.427GHz); 0x03 0x32143 ;0x04 0x0accc -;channe1 05 (2.432GHz); 0x03 0x31140 ;0x04 0x09111 -;channe1 06 (2.437GHz); 0x03 0x31142 ;0x04 0x0bbbb -;channe1 07 (2.442GHz); 0x03 0x31143 ;0x04 0x0accc -;channe1 08 (2.447GHz); 0x03 0x33140 ;0x04 0x09111 -;channe1 09 (2.452GHz); 0x03 0x33142 ;0x04 0x0bbbb -;channe1 10 (2.457GHz); 0x03 0x33143 ;0x04 0x0accc -;channe1 11 (2.462GHz); 0x03 0x30940 ;0x04 0x09111 -;channe1 12 (2.467GHz); 0x03 0x30942 ;0x04 0x0bbbb -;channe1 13 (2.472GHz); 0x03 0x30943 ;0x04 0x0accc - -;5.0Ghz Channels -;channel 36 (5.180GHz); 0x03 0x33cc0 ;0x04 0x0b333 -;channel 40 (5.200GHz); 0x03 0x302c0 ;0x04 0x08000 -;channel 44 (5.220GHz); 0x03 0x302c2 ;0x04 0x0b333 -;channel 48 (5.240GHz); 0x03 0x322c1 ;0x04 0x09999 -;channel 52 (5.260GHz); 0x03 0x312c1 ;0x04 0x0a666 -;channel 56 (5.280GHz); 0x03 0x332c3 ;0x04 0x08ccc -;channel 60 (5.300GHz); 0x03 0x30ac0 ;0x04 0x08000 -;channel 64 (5.320GHz); 0x03 0x30ac2 ;0x04 0x08333 - -;2.4GHz band ;0x05 0x28986; -;5.0GHz band -0x05 0x2a986 - -0x06 0x18008 -0x07 0x38400 -0x08 0x05108 -0x09 0x27ff8 -0x0a 0x14000 -0x0b 0x37f99 -0x0c 0x0c000 -*****************************************************************************/ -u32 maxim_317_rf_data[] = -{ - (0x00<<18)|0x000a2, - (0x01<<18)|0x214c0, - (0x02<<18)|0x13802, - (0x03<<18)|0x30143, - (0x04<<18)|0x0accc, - (0x05<<18)|0x28986, - (0x06<<18)|0x18008, - (0x07<<18)|0x38400, - (0x08<<18)|0x05108, - (0x09<<18)|0x27ff8, - (0x0A<<18)|0x14000, - (0x0B<<18)|0x37f99, - (0x0C<<18)|0x0c000 +u32 max2829_channel_data_50[][4] = { + {36, (3 << 18) | 0x33cc3, (4 << 18) | 0x08ccc, (5 << 18) | 0x2A946}, /* 36 (5.180GHz) */ + {40, (3 << 18) | 0x302c0, (4 << 18) | 0x08000, (5 << 18) | 0x2A946}, /* 40 (5.200GHz) */ + {44, (3 << 18) | 0x302c2, (4 << 18) | 0x0b333, (5 << 18) | 0x2A946}, /* 44 (5.220GHz) */ + {48, (3 << 18) | 0x322c1, (4 << 18) | 0x09999, (5 << 18) | 0x2A946}, /* 48 (5.240GHz) */ + {52, (3 << 18) | 0x312c1, (4 << 18) | 0x0a666, (5 << 18) | 0x2A946}, /* 52 (5.260GHz) */ + {56, (3 << 18) | 0x332c3, (4 << 18) | 0x08ccc, (5 << 18) | 0x2A946}, /* 56 (5.280GHz) */ + {60, (3 << 18) | 0x30ac0, (4 << 18) | 0x08000, (5 << 18) | 0x2A946}, /* 60 (5.300GHz) */ + {64, (3 << 18) | 0x30ac2, (4 << 18) | 0x0b333, (5 << 18) | 0x2A946}, /* 64 (5.320GHz) */ + + {100, (3 << 18) | 0x30ec0, (4 << 18) | 0x08000, (5 << 18) | 0x2A9C6}, /* 100 (5.500GHz) */ + {104, (3 << 18) | 0x30ec2, (4 << 18) | 0x0b333, (5 << 18) | 0x2A9C6}, /* 104 (5.520GHz) */ + {108, (3 << 18) | 0x32ec1, (4 << 18) | 0x09999, (5 << 18) | 0x2A9C6}, /* 108 (5.540GHz) */ + {112, (3 << 18) | 0x31ec1, (4 << 18) | 0x0a666, (5 << 18) | 0x2A9C6}, /* 112 (5.560GHz) */ + {116, (3 << 18) | 0x33ec3, (4 << 18) | 0x08ccc, (5 << 18) | 0x2A9C6}, /* 116 (5.580GHz) */ + {120, (3 << 18) | 0x301c0, (4 << 18) | 0x08000, (5 << 18) | 0x2A9C6}, /* 120 (5.600GHz) */ + {124, (3 << 18) | 0x301c2, (4 << 18) | 0x0b333, (5 << 18) | 0x2A9C6}, /* 124 (5.620GHz) */ + {128, (3 << 18) | 0x321c1, (4 << 18) | 0x09999, (5 << 18) | 0x2A9C6}, /* 128 (5.640GHz) */ + {132, (3 << 18) | 0x311c1, (4 << 18) | 0x0a666, (5 << 18) | 0x2A9C6}, /* 132 (5.660GHz) */ + {136, (3 << 18) | 0x331c3, (4 << 18) | 0x08ccc, (5 << 18) | 0x2A9C6}, /* 136 (5.680GHz) */ + {140, (3 << 18) | 0x309c0, (4 << 18) | 0x08000, (5 << 18) | 0x2A9C6}, /* 140 (5.700GHz) */ + + {149, (3 << 18) | 0x329c2, (4 << 18) | 0x0b333, (5 << 18) | 0x2A9C6}, /* 149 (5.745GHz) */ + {153, (3 << 18) | 0x319c1, (4 << 18) | 0x09999, (5 << 18) | 0x2A9C6}, /* 153 (5.765GHz) */ + {157, (3 << 18) | 0x339c1, (4 << 18) | 0x0a666, (5 << 18) | 0x2A9C6}, /* 157 (5.785GHz) */ + {161, (3 << 18) | 0x305c3, (4 << 18) | 0x08ccc, (5 << 18) | 0x2A9C6}, /* 161 (5.805GHz) */ + + /* Japan */ + { 184, (3 << 18) | 0x308c2, (4 << 18) | 0x0b333, (5 << 18) | 0x2A946}, /* 184 (4.920GHz) */ + { 188, (3 << 18) | 0x328c1, (4 << 18) | 0x09999, (5 << 18) | 0x2A946}, /* 188 (4.940GHz) */ + { 192, (3 << 18) | 0x318c1, (4 << 18) | 0x0a666, (5 << 18) | 0x2A946}, /* 192 (4.960GHz) */ + { 196, (3 << 18) | 0x338c3, (4 << 18) | 0x08ccc, (5 << 18) | 0x2A946}, /* 196 (4.980GHz) */ + { 8, (3 << 18) | 0x324c1, (4 << 18) | 0x09999, (5 << 18) | 0x2A946}, /* 8 (5.040GHz) */ + { 12, (3 << 18) | 0x314c1, (4 << 18) | 0x0a666, (5 << 18) | 0x2A946}, /* 12 (5.060GHz) */ + { 16, (3 << 18) | 0x334c3, (4 << 18) | 0x08ccc, (5 << 18) | 0x2A946}, /* 16 (5.080GHz) */ + { 34, (3 << 18) | 0x31cc2, (4 << 18) | 0x0b333, (5 << 18) | 0x2A946}, /* 34 (5.170GHz) */ + { 38, (3 << 18) | 0x33cc1, (4 << 18) | 0x09999, (5 << 18) | 0x2A946}, /* 38 (5.190GHz) */ + { 42, (3 << 18) | 0x302c1, (4 << 18) | 0x0a666, (5 << 18) | 0x2A946}, /* 42 (5.210GHz) */ + { 46, (3 << 18) | 0x322c3, (4 << 18) | 0x08ccc, (5 << 18) | 0x2A946}, /* 46 (5.230GHz) */ }; -u32 maxim_317_channel_data_24[][3] = -{ - {(0x03<<18)|0x30143, (0x04<<18)|0x0accc, (0x05<<18)|0x28986}, // channe1 01 - {(0x03<<18)|0x32140, (0x04<<18)|0x09111, (0x05<<18)|0x28986}, // channe1 02 - {(0x03<<18)|0x32142, (0x04<<18)|0x0bbbb, (0x05<<18)|0x28986}, // channe1 03 - {(0x03<<18)|0x32143, (0x04<<18)|0x0accc, (0x05<<18)|0x28986}, // channe1 04 - {(0x03<<18)|0x31140, (0x04<<18)|0x09111, (0x05<<18)|0x28986}, // channe1 05 - {(0x03<<18)|0x31142, (0x04<<18)|0x0bbbb, (0x05<<18)|0x28986}, // channe1 06 - {(0x03<<18)|0x31143, (0x04<<18)|0x0accc, (0x05<<18)|0x28986}, // channe1 07 - {(0x03<<18)|0x33140, (0x04<<18)|0x09111, (0x05<<18)|0x28986}, // channe1 08 - {(0x03<<18)|0x33142, (0x04<<18)|0x0bbbb, (0x05<<18)|0x28986}, // channe1 09 - {(0x03<<18)|0x33143, (0x04<<18)|0x0accc, (0x05<<18)|0x28986}, // channe1 10 - {(0x03<<18)|0x30940, (0x04<<18)|0x09111, (0x05<<18)|0x28986}, // channe1 11 - {(0x03<<18)|0x30942, (0x04<<18)|0x0bbbb, (0x05<<18)|0x28986}, // channe1 12 - {(0x03<<18)|0x30943, (0x04<<18)|0x0accc, (0x05<<18)|0x28986} // channe1 13 +/* + * ==================================================================== + * For MAXIM2825/6/7 Ver. 317 or less + * + * 0x00 0x00080 + * 0x01 0x214c0 + * 0x02 0x13802 + * + * 2.4GHz Channels + * channe1 01 (2.412GHz); 0x03 0x30143 ;0x04 0x0accc + * channe1 02 (2.417GHz); 0x03 0x32140 ;0x04 0x09111 + * channe1 03 (2.422GHz); 0x03 0x32142 ;0x04 0x0bbbb + * channe1 04 (2.427GHz); 0x03 0x32143 ;0x04 0x0accc + * channe1 05 (2.432GHz); 0x03 0x31140 ;0x04 0x09111 + * channe1 06 (2.437GHz); 0x03 0x31142 ;0x04 0x0bbbb + * channe1 07 (2.442GHz); 0x03 0x31143 ;0x04 0x0accc + * channe1 08 (2.447GHz); 0x03 0x33140 ;0x04 0x09111 + * channe1 09 (2.452GHz); 0x03 0x33142 ;0x04 0x0bbbb + * channe1 10 (2.457GHz); 0x03 0x33143 ;0x04 0x0accc + * channe1 11 (2.462GHz); 0x03 0x30940 ;0x04 0x09111 + * channe1 12 (2.467GHz); 0x03 0x30942 ;0x04 0x0bbbb + * channe1 13 (2.472GHz); 0x03 0x30943 ;0x04 0x0accc + * + * 5.0Ghz Channels + * channel 36 (5.180GHz); 0x03 0x33cc0 ;0x04 0x0b333 + * channel 40 (5.200GHz); 0x03 0x302c0 ;0x04 0x08000 + * channel 44 (5.220GHz); 0x03 0x302c2 ;0x04 0x0b333 + * channel 48 (5.240GHz); 0x03 0x322c1 ;0x04 0x09999 + * channel 52 (5.260GHz); 0x03 0x312c1 ;0x04 0x0a666 + * channel 56 (5.280GHz); 0x03 0x332c3 ;0x04 0x08ccc + * channel 60 (5.300GHz); 0x03 0x30ac0 ;0x04 0x08000 + * channel 64 (5.320GHz); 0x03 0x30ac2 ;0x04 0x08333 + * + * 2.4GHz band ; 0x05 0x28986; + * 5.0GHz band ; 0x05 0x2a986 + * 0x06 0x18008 + * 0x07 0x38400 + * 0x08 0x05108 + * 0x09 0x27ff8 + * 0x0a 0x14000 + * 0x0b 0x37f99 + * 0x0c 0x0c000 + * ==================================================================== + */ +u32 maxim_317_rf_data[] = { + (0x00 << 18) | 0x000a2, + (0x01 << 18) | 0x214c0, + (0x02 << 18) | 0x13802, + (0x03 << 18) | 0x30143, + (0x04 << 18) | 0x0accc, + (0x05 << 18) | 0x28986, + (0x06 << 18) | 0x18008, + (0x07 << 18) | 0x38400, + (0x08 << 18) | 0x05108, + (0x09 << 18) | 0x27ff8, + (0x0A << 18) | 0x14000, + (0x0B << 18) | 0x37f99, + (0x0C << 18) | 0x0c000 }; -u32 maxim_317_channel_data_50[][3] = -{ - {(0x03<<18)|0x33cc0, (0x04<<18)|0x0b333, (0x05<<18)|0x2a986}, // channel 36 - {(0x03<<18)|0x302c0, (0x04<<18)|0x08000, (0x05<<18)|0x2a986}, // channel 40 - {(0x03<<18)|0x302c3, (0x04<<18)|0x0accc, (0x05<<18)|0x2a986}, // channel 44 - {(0x03<<18)|0x322c1, (0x04<<18)|0x09666, (0x05<<18)|0x2a986}, // channel 48 - {(0x03<<18)|0x312c2, (0x04<<18)|0x09999, (0x05<<18)|0x2a986}, // channel 52 - {(0x03<<18)|0x332c0, (0x04<<18)|0x0b333, (0x05<<18)|0x2a99e}, // channel 56 - {(0x03<<18)|0x30ac0, (0x04<<18)|0x08000, (0x05<<18)|0x2a99e}, // channel 60 - {(0x03<<18)|0x30ac3, (0x04<<18)|0x0accc, (0x05<<18)|0x2a99e} // channel 64 +u32 maxim_317_channel_data_24[][3] = { + {(0x03 << 18) | 0x30143, (0x04 << 18) | 0x0accc, (0x05 << 18) | 0x28986}, /* channe1 01 */ + {(0x03 << 18) | 0x32140, (0x04 << 18) | 0x09111, (0x05 << 18) | 0x28986}, /* channe1 02 */ + {(0x03 << 18) | 0x32142, (0x04 << 18) | 0x0bbbb, (0x05 << 18) | 0x28986}, /* channe1 03 */ + {(0x03 << 18) | 0x32143, (0x04 << 18) | 0x0accc, (0x05 << 18) | 0x28986}, /* channe1 04 */ + {(0x03 << 18) | 0x31140, (0x04 << 18) | 0x09111, (0x05 << 18) | 0x28986}, /* channe1 05 */ + {(0x03 << 18) | 0x31142, (0x04 << 18) | 0x0bbbb, (0x05 << 18) | 0x28986}, /* channe1 06 */ + {(0x03 << 18) | 0x31143, (0x04 << 18) | 0x0accc, (0x05 << 18) | 0x28986}, /* channe1 07 */ + {(0x03 << 18) | 0x33140, (0x04 << 18) | 0x09111, (0x05 << 18) | 0x28986}, /* channe1 08 */ + {(0x03 << 18) | 0x33142, (0x04 << 18) | 0x0bbbb, (0x05 << 18) | 0x28986}, /* channe1 09 */ + {(0x03 << 18) | 0x33143, (0x04 << 18) | 0x0accc, (0x05 << 18) | 0x28986}, /* channe1 10 */ + {(0x03 << 18) | 0x30940, (0x04 << 18) | 0x09111, (0x05 << 18) | 0x28986}, /* channe1 11 */ + {(0x03 << 18) | 0x30942, (0x04 << 18) | 0x0bbbb, (0x05 << 18) | 0x28986}, /* channe1 12 */ + {(0x03 << 18) | 0x30943, (0x04 << 18) | 0x0accc, (0x05 << 18) | 0x28986} /* channe1 13 */ }; -u32 maxim_317_power_data_24[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; -u32 maxim_317_power_data_50[] = {(0x0C<<18)|0x0c000, (0x0C<<18)|0x0c100}; - -/***************************************************************************** -;;AL2230 MP (Mass Production Version) -;;RF Registers Setting for Airoha AL2230 silicon after June 1st, 2004 -;;Updated by Tiger Huang (June 1st, 2004) -;;20-bit length and LSB first - -;;Ch01 (2412MHz) ;0x00 0x09EFC ;0x01 0x8CCCC; -;;Ch02 (2417MHz) ;0x00 0x09EFC ;0x01 0x8CCCD; -;;Ch03 (2422MHz) ;0x00 0x09E7C ;0x01 0x8CCCC; -;;Ch04 (2427MHz) ;0x00 0x09E7C ;0x01 0x8CCCD; -;;Ch05 (2432MHz) ;0x00 0x05EFC ;0x01 0x8CCCC; -;;Ch06 (2437MHz) ;0x00 0x05EFC ;0x01 0x8CCCD; -;;Ch07 (2442MHz) ;0x00 0x05E7C ;0x01 0x8CCCC; -;;Ch08 (2447MHz) ;0x00 0x05E7C ;0x01 0x8CCCD; -;;Ch09 (2452MHz) ;0x00 0x0DEFC ;0x01 0x8CCCC; -;;Ch10 (2457MHz) ;0x00 0x0DEFC ;0x01 0x8CCCD; -;;Ch11 (2462MHz) ;0x00 0x0DE7C ;0x01 0x8CCCC; -;;Ch12 (2467MHz) ;0x00 0x0DE7C ;0x01 0x8CCCD; -;;Ch13 (2472MHz) ;0x00 0x03EFC ;0x01 0x8CCCC; -;;Ch14 (2484Mhz) ;0x00 0x03E7C ;0x01 0x86666; - -0x02 0x401D8; RXDCOC BW 100Hz for RXHP low -;;0x02 0x481DC; RXDCOC BW 30Khz for RXHP low - -0x03 0xCFFF0 -0x04 0x23800 -0x05 0xA3B72 -0x06 0x6DA01 -0x07 0xE1688 -0x08 0x11600 -0x09 0x99E02 -0x0A 0x5DDB0 -0x0B 0xD9900 -0x0C 0x3FFBD -0x0D 0xB0000 -0x0F 0xF00A0 - -;RF Calibration for Airoha AL2230 -;Edit by Ben Chang (01/30/04) -;Updated by Tiger Huang (03/03/04) -0x0f 0xf00a0 ; Initial Setting -0x0f 0xf00b0 ; Activate TX DCC -0x0f 0xf02a0 ; Activate Phase Calibration -0x0f 0xf00e0 ; Activate Filter RC Calibration -0x0f 0xf00a0 ; Restore Initial Setting -*****************************************************************************/ - -u32 al2230_rf_data[] = -{ - (0x00<<20)|0x09EFC, - (0x01<<20)|0x8CCCC, - (0x02<<20)|0x40058,// 20060627 Anson 0x401D8, - (0x03<<20)|0xCFFF0, - (0x04<<20)|0x24100,// 20060627 Anson 0x23800, - (0x05<<20)|0xA3B2F,// 20060627 Anson 0xA3B72 - (0x06<<20)|0x6DA01, - (0x07<<20)|0xE3628,// 20060627 Anson 0xE1688, - (0x08<<20)|0x11600, - (0x09<<20)|0x9DC02,// 20060627 Anosn 0x97602,//0x99E02, //0x9AE02 - (0x0A<<20)|0x5ddb0, // 941206 For QCOM interference 0x588b0,//0x5DDB0, 940601 adj 0x5aa30 for bluetooth - (0x0B<<20)|0xD9900, - (0x0C<<20)|0x3FFBD, - (0x0D<<20)|0xB0000, - (0x0F<<20)|0xF01A0 // 20060627 Anson 0xF00A0 +u32 maxim_317_channel_data_50[][3] = { + {(0x03 << 18) | 0x33cc0, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x2a986}, /* channel 36 */ + {(0x03 << 18) | 0x302c0, (0x04 << 18) | 0x08000, (0x05 << 18) | 0x2a986}, /* channel 40 */ + {(0x03 << 18) | 0x302c3, (0x04 << 18) | 0x0accc, (0x05 << 18) | 0x2a986}, /* channel 44 */ + {(0x03 << 18) | 0x322c1, (0x04 << 18) | 0x09666, (0x05 << 18) | 0x2a986}, /* channel 48 */ + {(0x03 << 18) | 0x312c2, (0x04 << 18) | 0x09999, (0x05 << 18) | 0x2a986}, /* channel 52 */ + {(0x03 << 18) | 0x332c0, (0x04 << 18) | 0x0b333, (0x05 << 18) | 0x2a99e}, /* channel 56 */ + {(0x03 << 18) | 0x30ac0, (0x04 << 18) | 0x08000, (0x05 << 18) | 0x2a99e}, /* channel 60 */ + {(0x03 << 18) | 0x30ac3, (0x04 << 18) | 0x0accc, (0x05 << 18) | 0x2a99e} /* channel 64 */ }; -u32 al2230s_rf_data[] = -{ - (0x00<<20)|0x09EFC, - (0x01<<20)|0x8CCCC, - (0x02<<20)|0x40058,// 20060419 0x401D8, - (0x03<<20)|0xCFFF0, - (0x04<<20)|0x24100,// 20060419 0x23800, - (0x05<<20)|0xA3B2F,// 20060419 0xA3B72, - (0x06<<20)|0x6DA01, - (0x07<<20)|0xE3628,// 20060419 0xE1688, - (0x08<<20)|0x11600, - (0x09<<20)|0x9DC02,// 20060419 0x97602,//0x99E02, //0x9AE02 - (0x0A<<20)|0x5DDB0,// 941206 For QCOM interference 0x588b0,//0x5DDB0, 940601 adj 0x5aa30 for bluetooth - (0x0B<<20)|0xD9900, - (0x0C<<20)|0x3FFBD, - (0x0D<<20)|0xB0000, - (0x0F<<20)|0xF01A0 // 20060419 0xF00A0 +u32 maxim_317_power_data_24[] = {(0x0C << 18) | 0x0c000, (0x0C << 18) | 0x0c100}; +u32 maxim_317_power_data_50[] = {(0x0C << 18) | 0x0c000, (0x0C << 18) | 0x0c100}; + +/* + * =================================================================== + * AL2230 MP (Mass Production Version) + * RF Registers Setting for Airoha AL2230 silicon after June 1st, 2004 + * 20-bit length and LSB first + * + * Ch01 (2412MHz) ;0x00 0x09EFC ;0x01 0x8CCCC; + * Ch02 (2417MHz) ;0x00 0x09EFC ;0x01 0x8CCCD; + * Ch03 (2422MHz) ;0x00 0x09E7C ;0x01 0x8CCCC; + * Ch04 (2427MHz) ;0x00 0x09E7C ;0x01 0x8CCCD; + * Ch05 (2432MHz) ;0x00 0x05EFC ;0x01 0x8CCCC; + * Ch06 (2437MHz) ;0x00 0x05EFC ;0x01 0x8CCCD; + * Ch07 (2442MHz) ;0x00 0x05E7C ;0x01 0x8CCCC; + * Ch08 (2447MHz) ;0x00 0x05E7C ;0x01 0x8CCCD; + * Ch09 (2452MHz) ;0x00 0x0DEFC ;0x01 0x8CCCC; + * Ch10 (2457MHz) ;0x00 0x0DEFC ;0x01 0x8CCCD; + * Ch11 (2462MHz) ;0x00 0x0DE7C ;0x01 0x8CCCC; + * Ch12 (2467MHz) ;0x00 0x0DE7C ;0x01 0x8CCCD; + * Ch13 (2472MHz) ;0x00 0x03EFC ;0x01 0x8CCCC; + * Ch14 (2484Mhz) ;0x00 0x03E7C ;0x01 0x86666; + * + * 0x02 0x401D8; RXDCOC BW 100Hz for RXHP low + * 0x02 0x481DC; RXDCOC BW 30Khz for RXHP low + * + * 0x03 0xCFFF0 + * 0x04 0x23800 + * 0x05 0xA3B72 + * 0x06 0x6DA01 + * 0x07 0xE1688 + * 0x08 0x11600 + * 0x09 0x99E02 + * 0x0A 0x5DDB0 + * 0x0B 0xD9900 + * 0x0C 0x3FFBD + * 0x0D 0xB0000 + * 0x0F 0xF00A0 + * + * RF Calibration for Airoha AL2230 + * + * 0x0f 0xf00a0 ; Initial Setting + * 0x0f 0xf00b0 ; Activate TX DCC + * 0x0f 0xf02a0 ; Activate Phase Calibration + * 0x0f 0xf00e0 ; Activate Filter RC Calibration + * 0x0f 0xf00a0 ; Restore Initial Setting + * ================================================================== + */ +u32 al2230_rf_data[] = { + (0x00 << 20) | 0x09EFC, + (0x01 << 20) | 0x8CCCC, + (0x02 << 20) | 0x40058, + (0x03 << 20) | 0xCFFF0, + (0x04 << 20) | 0x24100, + (0x05 << 20) | 0xA3B2F, + (0x06 << 20) | 0x6DA01, + (0x07 << 20) | 0xE3628, + (0x08 << 20) | 0x11600, + (0x09 << 20) | 0x9DC02, + (0x0A << 20) | 0x5ddb0, + (0x0B << 20) | 0xD9900, + (0x0C << 20) | 0x3FFBD, + (0x0D << 20) | 0xB0000, + (0x0F << 20) | 0xF01A0 }; -u32 al2230_channel_data_24[][2] = -{ - {(0x00<<20)|0x09EFC, (0x01<<20)|0x8CCCC}, // channe1 01 - {(0x00<<20)|0x09EFC, (0x01<<20)|0x8CCCD}, // channe1 02 - {(0x00<<20)|0x09E7C, (0x01<<20)|0x8CCCC}, // channe1 03 - {(0x00<<20)|0x09E7C, (0x01<<20)|0x8CCCD}, // channe1 04 - {(0x00<<20)|0x05EFC, (0x01<<20)|0x8CCCC}, // channe1 05 - {(0x00<<20)|0x05EFC, (0x01<<20)|0x8CCCD}, // channe1 06 - {(0x00<<20)|0x05E7C, (0x01<<20)|0x8CCCC}, // channe1 07 - {(0x00<<20)|0x05E7C, (0x01<<20)|0x8CCCD}, // channe1 08 - {(0x00<<20)|0x0DEFC, (0x01<<20)|0x8CCCC}, // channe1 09 - {(0x00<<20)|0x0DEFC, (0x01<<20)|0x8CCCD}, // channe1 10 - {(0x00<<20)|0x0DE7C, (0x01<<20)|0x8CCCC}, // channe1 11 - {(0x00<<20)|0x0DE7C, (0x01<<20)|0x8CCCD}, // channe1 12 - {(0x00<<20)|0x03EFC, (0x01<<20)|0x8CCCC}, // channe1 13 - {(0x00<<20)|0x03E7C, (0x01<<20)|0x86666} // channe1 14 +u32 al2230s_rf_data[] = { + (0x00 << 20) | 0x09EFC, + (0x01 << 20) | 0x8CCCC, + (0x02 << 20) | 0x40058, + (0x03 << 20) | 0xCFFF0, + (0x04 << 20) | 0x24100, + (0x05 << 20) | 0xA3B2F, + (0x06 << 20) | 0x6DA01, + (0x07 << 20) | 0xE3628, + (0x08 << 20) | 0x11600, + (0x09 << 20) | 0x9DC02, + (0x0A << 20) | 0x5DDB0, + (0x0B << 20) | 0xD9900, + (0x0C << 20) | 0x3FFBD, + (0x0D << 20) | 0xB0000, + (0x0F << 20) | 0xF01A0 }; -// Current setting. u32 airoha_power_data_24[] = {(0x09<<20)|0x90202, (0x09<<20)|0x96602, (0x09<<20)|0x97602}; -#define AIROHA_TXVGA_LOW_INDEX 31 // Index for 0x90202 -#define AIROHA_TXVGA_MIDDLE_INDEX 12 // Index for 0x96602 -#define AIROHA_TXVGA_HIGH_INDEX 8 // Index for 0x97602 1.0.24.0 1.0.28.0 -/* -u32 airoha_power_data_24[] = -{ - 0x9FE02, // Max - 0 dB - 0x9BE02, // Max - 1 dB - 0x9DE02, // Max - 2 dB - 0x99E02, // Max - 3 dB - 0x9EE02, // Max - 4 dB - 0x9AE02, // Max - 5 dB - 0x9CE02, // Max - 6 dB - 0x98E02, // Max - 7 dB - 0x97602, // Max - 8 dB - 0x93602, // Max - 9 dB - 0x95602, // Max - 10 dB - 0x91602, // Max - 11 dB - 0x96602, // Max - 12 dB - 0x92602, // Max - 13 dB - 0x94602, // Max - 14 dB - 0x90602, // Max - 15 dB - 0x97A02, // Max - 16 dB - 0x93A02, // Max - 17 dB - 0x95A02, // Max - 18 dB - 0x91A02, // Max - 19 dB - 0x96A02, // Max - 20 dB - 0x92A02, // Max - 21 dB - 0x94A02, // Max - 22 dB - 0x90A02, // Max - 23 dB - 0x97202, // Max - 24 dB - 0x93202, // Max - 25 dB - 0x95202, // Max - 26 dB - 0x91202, // Max - 27 dB - 0x96202, // Max - 28 dB - 0x92202, // Max - 29 dB - 0x94202, // Max - 30 dB - 0x90202 // Max - 31 dB +u32 al2230_channel_data_24[][2] = { + {(0x00 << 20) | 0x09EFC, (0x01 << 20) | 0x8CCCC}, /* channe1 01 */ + {(0x00 << 20) | 0x09EFC, (0x01 << 20) | 0x8CCCD}, /* channe1 02 */ + {(0x00 << 20) | 0x09E7C, (0x01 << 20) | 0x8CCCC}, /* channe1 03 */ + {(0x00 << 20) | 0x09E7C, (0x01 << 20) | 0x8CCCD}, /* channe1 04 */ + {(0x00 << 20) | 0x05EFC, (0x01 << 20) | 0x8CCCC}, /* channe1 05 */ + {(0x00 << 20) | 0x05EFC, (0x01 << 20) | 0x8CCCD}, /* channe1 06 */ + {(0x00 << 20) | 0x05E7C, (0x01 << 20) | 0x8CCCC}, /* channe1 07 */ + {(0x00 << 20) | 0x05E7C, (0x01 << 20) | 0x8CCCD}, /* channe1 08 */ + {(0x00 << 20) | 0x0DEFC, (0x01 << 20) | 0x8CCCC}, /* channe1 09 */ + {(0x00 << 20) | 0x0DEFC, (0x01 << 20) | 0x8CCCD}, /* channe1 10 */ + {(0x00 << 20) | 0x0DE7C, (0x01 << 20) | 0x8CCCC}, /* channe1 11 */ + {(0x00 << 20) | 0x0DE7C, (0x01 << 20) | 0x8CCCD}, /* channe1 12 */ + {(0x00 << 20) | 0x03EFC, (0x01 << 20) | 0x8CCCC}, /* channe1 13 */ + {(0x00 << 20) | 0x03E7C, (0x01 << 20) | 0x86666} /* channe1 14 */ }; -*/ -// 20040927 1.1.69.1000 ybjiang -// from John -u32 al2230_txvga_data[][2] = -{ - //value , index +/* Current setting. u32 airoha_power_data_24[] = {(0x09 << 20) | 0x90202, (0x09 << 20) | 0x96602, (0x09 << 20) | 0x97602}; */ +#define AIROHA_TXVGA_LOW_INDEX 31 /* Index for 0x90202 */ +#define AIROHA_TXVGA_MIDDLE_INDEX 12 /* Index for 0x96602 */ +#define AIROHA_TXVGA_HIGH_INDEX 8 /* Index for 0x97602 1.0.24.0 1.0.28.0 */ + +u32 al2230_txvga_data[][2] = { + /* value , index */ {0x090202, 0}, {0x094202, 2}, {0x092202, 4}, @@ -551,263 +489,242 @@ u32 al2230_txvga_data[][2] = {0x09FE02, 63} }; -//-------------------------------- -// For Airoha AL7230, 2.4Ghz band -// Edit by Tiger, (March, 9, 2005) -// 24bit, MSB first - -//channel independent registers: -u32 al7230_rf_data_24[] = -{ - (0x00<<24)|0x003790, - (0x01<<24)|0x133331, - (0x02<<24)|0x841FF2, - (0x03<<24)|0x3FDFA3, - (0x04<<24)|0x7FD784, - (0x05<<24)|0x802B55, - (0x06<<24)|0x56AF36, - (0x07<<24)|0xCE0207, - (0x08<<24)|0x6EBC08, - (0x09<<24)|0x221BB9, - (0x0A<<24)|0xE0000A, - (0x0B<<24)|0x08071B, - (0x0C<<24)|0x000A3C, - (0x0D<<24)|0xFFFFFD, - (0x0E<<24)|0x00000E, - (0x0F<<24)|0x1ABA8F +/* + * ========================================== + * For Airoha AL7230, 2.4Ghz band + * 24bit, MSB first + */ + +/* channel independent registers: */ +u32 al7230_rf_data_24[] = { + (0x00 << 24) | 0x003790, + (0x01 << 24) | 0x133331, + (0x02 << 24) | 0x841FF2, + (0x03 << 24) | 0x3FDFA3, + (0x04 << 24) | 0x7FD784, + (0x05 << 24) | 0x802B55, + (0x06 << 24) | 0x56AF36, + (0x07 << 24) | 0xCE0207, + (0x08 << 24) | 0x6EBC08, + (0x09 << 24) | 0x221BB9, + (0x0A << 24) | 0xE0000A, + (0x0B << 24) | 0x08071B, + (0x0C << 24) | 0x000A3C, + (0x0D << 24) | 0xFFFFFD, + (0x0E << 24) | 0x00000E, + (0x0F << 24) | 0x1ABA8F }; -u32 al7230_channel_data_24[][2] = -{ - {(0x00<<24)|0x003790, (0x01<<24)|0x133331}, // channe1 01 - {(0x00<<24)|0x003790, (0x01<<24)|0x1B3331}, // channe1 02 - {(0x00<<24)|0x003790, (0x01<<24)|0x033331}, // channe1 03 - {(0x00<<24)|0x003790, (0x01<<24)|0x0B3331}, // channe1 04 - {(0x00<<24)|0x0037A0, (0x01<<24)|0x133331}, // channe1 05 - {(0x00<<24)|0x0037A0, (0x01<<24)|0x1B3331}, // channe1 06 - {(0x00<<24)|0x0037A0, (0x01<<24)|0x033331}, // channe1 07 - {(0x00<<24)|0x0037A0, (0x01<<24)|0x0B3331}, // channe1 08 - {(0x00<<24)|0x0037B0, (0x01<<24)|0x133331}, // channe1 09 - {(0x00<<24)|0x0037B0, (0x01<<24)|0x1B3331}, // channe1 10 - {(0x00<<24)|0x0037B0, (0x01<<24)|0x033331}, // channe1 11 - {(0x00<<24)|0x0037B0, (0x01<<24)|0x0B3331}, // channe1 12 - {(0x00<<24)|0x0037C0, (0x01<<24)|0x133331}, // channe1 13 - {(0x00<<24)|0x0037C0, (0x01<<24)|0x066661} // channel 14 +u32 al7230_channel_data_24[][2] = { + {(0x00 << 24) | 0x003790, (0x01 << 24) | 0x133331}, /* channe1 01 */ + {(0x00 << 24) | 0x003790, (0x01 << 24) | 0x1B3331}, /* channe1 02 */ + {(0x00 << 24) | 0x003790, (0x01 << 24) | 0x033331}, /* channe1 03 */ + {(0x00 << 24) | 0x003790, (0x01 << 24) | 0x0B3331}, /* channe1 04 */ + {(0x00 << 24) | 0x0037A0, (0x01 << 24) | 0x133331}, /* channe1 05 */ + {(0x00 << 24) | 0x0037A0, (0x01 << 24) | 0x1B3331}, /* channe1 06 */ + {(0x00 << 24) | 0x0037A0, (0x01 << 24) | 0x033331}, /* channe1 07 */ + {(0x00 << 24) | 0x0037A0, (0x01 << 24) | 0x0B3331}, /* channe1 08 */ + {(0x00 << 24) | 0x0037B0, (0x01 << 24) | 0x133331}, /* channe1 09 */ + {(0x00 << 24) | 0x0037B0, (0x01 << 24) | 0x1B3331}, /* channe1 10 */ + {(0x00 << 24) | 0x0037B0, (0x01 << 24) | 0x033331}, /* channe1 11 */ + {(0x00 << 24) | 0x0037B0, (0x01 << 24) | 0x0B3331}, /* channe1 12 */ + {(0x00 << 24) | 0x0037C0, (0x01 << 24) | 0x133331}, /* channe1 13 */ + {(0x00 << 24) | 0x0037C0, (0x01 << 24) | 0x066661} /* channel 14 */ }; -//channel independent registers: -u32 al7230_rf_data_50[] = -{ - (0x00<<24)|0x0FF520, - (0x01<<24)|0x000001, - (0x02<<24)|0x451FE2, - (0x03<<24)|0x5FDFA3, - (0x04<<24)|0x6FD784, - (0x05<<24)|0x853F55, - (0x06<<24)|0x56AF36, - (0x07<<24)|0xCE0207, - (0x08<<24)|0x6EBC08, - (0x09<<24)|0x221BB9, - (0x0A<<24)|0xE0600A, - (0x0B<<24)|0x08044B, - (0x0C<<24)|0x00143C, - (0x0D<<24)|0xFFFFFD, - (0x0E<<24)|0x00000E, - (0x0F<<24)|0x12BACF //5Ghz default state +/* channel independent registers: */ +u32 al7230_rf_data_50[] = { + (0x00 << 24) | 0x0FF520, + (0x01 << 24) | 0x000001, + (0x02 << 24) | 0x451FE2, + (0x03 << 24) | 0x5FDFA3, + (0x04 << 24) | 0x6FD784, + (0x05 << 24) | 0x853F55, + (0x06 << 24) | 0x56AF36, + (0x07 << 24) | 0xCE0207, + (0x08 << 24) | 0x6EBC08, + (0x09 << 24) | 0x221BB9, + (0x0A << 24) | 0xE0600A, + (0x0B << 24) | 0x08044B, + (0x0C << 24) | 0x00143C, + (0x0D << 24) | 0xFFFFFD, + (0x0E << 24) | 0x00000E, + (0x0F << 24) | 0x12BACF /* 5Ghz default state */ }; -u32 al7230_channel_data_5[][4] = -{ - //channel dependent registers: 0x00, 0x01 and 0x04 - //11J =========== - {184, (0x00<<24)|0x0FF520, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 184 - {188, (0x00<<24)|0x0FF520, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 188 - {192, (0x00<<24)|0x0FF530, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 192 - {196, (0x00<<24)|0x0FF530, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 196 - {8, (0x00<<24)|0x0FF540, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 008 - {12, (0x00<<24)|0x0FF540, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 012 - {16, (0x00<<24)|0x0FF550, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 016 - {34, (0x00<<24)|0x0FF560, (0x01<<24)|0x055551, (0x04<<24)|0x77F784}, // channel 034 - {38, (0x00<<24)|0x0FF570, (0x01<<24)|0x100001, (0x04<<24)|0x77F784}, // channel 038 - {42, (0x00<<24)|0x0FF570, (0x01<<24)|0x1AAAA1, (0x04<<24)|0x77F784}, // channel 042 - {46, (0x00<<24)|0x0FF570, (0x01<<24)|0x055551, (0x04<<24)|0x77F784}, // channel 046 - //11 A/H ========= - {36, (0x00<<24)|0x0FF560, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 036 - {40, (0x00<<24)|0x0FF570, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 040 - {44, (0x00<<24)|0x0FF570, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 044 - {48, (0x00<<24)|0x0FF570, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 048 - {52, (0x00<<24)|0x0FF580, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 052 - {56, (0x00<<24)|0x0FF580, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 056 - {60, (0x00<<24)|0x0FF580, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 060 - {64, (0x00<<24)|0x0FF590, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 064 - {100, (0x00<<24)|0x0FF5C0, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 100 - {104, (0x00<<24)|0x0FF5C0, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 104 - {108, (0x00<<24)|0x0FF5C0, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 108 - {112, (0x00<<24)|0x0FF5D0, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 112 - {116, (0x00<<24)|0x0FF5D0, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 116 - {120, (0x00<<24)|0x0FF5D0, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 120 - {124, (0x00<<24)|0x0FF5E0, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 124 - {128, (0x00<<24)|0x0FF5E0, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 128 - {132, (0x00<<24)|0x0FF5E0, (0x01<<24)|0x0AAAA1, (0x04<<24)|0x77F784}, // channel 132 - {136, (0x00<<24)|0x0FF5F0, (0x01<<24)|0x155551, (0x04<<24)|0x77F784}, // channel 136 - {140, (0x00<<24)|0x0FF5F0, (0x01<<24)|0x000001, (0x04<<24)|0x67F784}, // channel 140 - {149, (0x00<<24)|0x0FF600, (0x01<<24)|0x180001, (0x04<<24)|0x77F784}, // channel 149 - {153, (0x00<<24)|0x0FF600, (0x01<<24)|0x02AAA1, (0x04<<24)|0x77F784}, // channel 153 - {157, (0x00<<24)|0x0FF600, (0x01<<24)|0x0D5551, (0x04<<24)|0x77F784}, // channel 157 - {161, (0x00<<24)|0x0FF610, (0x01<<24)|0x180001, (0x04<<24)|0x77F784}, // channel 161 - {165, (0x00<<24)|0x0FF610, (0x01<<24)|0x02AAA1, (0x04<<24)|0x77F784} // channel 165 +u32 al7230_channel_data_5[][4] = { + /* channel dependent registers: 0x00, 0x01 and 0x04 */ + /* 11J =========== */ + {184, (0x00 << 24) | 0x0FF520, (0x01 << 24) | 0x000001, (0x04 << 24) | 0x67F784}, /* channel 184 */ + {188, (0x00 << 24) | 0x0FF520, (0x01 << 24) | 0x0AAAA1, (0x04 << 24) | 0x77F784}, /* channel 188 */ + {192, (0x00 << 24) | 0x0FF530, (0x01 << 24) | 0x155551, (0x04 << 24) | 0x77F784}, /* channel 192 */ + {196, (0x00 << 24) | 0x0FF530, (0x01 << 24) | 0x000001, (0x04 << 24) | 0x67F784}, /* channel 196 */ + {8, (0x00 << 24) | 0x0FF540, (0x01 << 24) | 0x000001, (0x04 << 24) | 0x67F784}, /* channel 008 */ + {12, (0x00 << 24) | 0x0FF540, (0x01 << 24) | 0x0AAAA1, (0x04 << 24) | 0x77F784}, /* channel 012 */ + {16, (0x00 << 24) | 0x0FF550, (0x01 << 24) | 0x155551, (0x04 << 24) | 0x77F784}, /* channel 016 */ + {34, (0x00 << 24) | 0x0FF560, (0x01 << 24) | 0x055551, (0x04 << 24) | 0x77F784}, /* channel 034 */ + {38, (0x00 << 24) | 0x0FF570, (0x01 << 24) | 0x100001, (0x04 << 24) | 0x77F784}, /* channel 038 */ + {42, (0x00 << 24) | 0x0FF570, (0x01 << 24) | 0x1AAAA1, (0x04 << 24) | 0x77F784}, /* channel 042 */ + {46, (0x00 << 24) | 0x0FF570, (0x01 << 24) | 0x055551, (0x04 << 24) | 0x77F784}, /* channel 046 */ + /* 11 A/H ========= */ + {36, (0x00 << 24) | 0x0FF560, (0x01 << 24) | 0x0AAAA1, (0x04 << 24) | 0x77F784}, /* channel 036 */ + {40, (0x00 << 24) | 0x0FF570, (0x01 << 24) | 0x155551, (0x04 << 24) | 0x77F784}, /* channel 040 */ + {44, (0x00 << 24) | 0x0FF570, (0x01 << 24) | 0x000001, (0x04 << 24) | 0x67F784}, /* channel 044 */ + {48, (0x00 << 24) | 0x0FF570, (0x01 << 24) | 0x0AAAA1, (0x04 << 24) | 0x77F784}, /* channel 048 */ + {52, (0x00 << 24) | 0x0FF580, (0x01 << 24) | 0x155551, (0x04 << 24) | 0x77F784}, /* channel 052 */ + {56, (0x00 << 24) | 0x0FF580, (0x01 << 24) | 0x000001, (0x04 << 24) | 0x67F784}, /* channel 056 */ + {60, (0x00 << 24) | 0x0FF580, (0x01 << 24) | 0x0AAAA1, (0x04 << 24) | 0x77F784}, /* channel 060 */ + {64, (0x00 << 24) | 0x0FF590, (0x01 << 24) | 0x155551, (0x04 << 24) | 0x77F784}, /* channel 064 */ + {100, (0x00 << 24) | 0x0FF5C0, (0x01 << 24) | 0x155551, (0x04 << 24) | 0x77F784}, /* channel 100 */ + {104, (0x00 << 24) | 0x0FF5C0, (0x01 << 24) | 0x000001, (0x04 << 24) | 0x67F784}, /* channel 104 */ + {108, (0x00 << 24) | 0x0FF5C0, (0x01 << 24) | 0x0AAAA1, (0x04 << 24) | 0x77F784}, /* channel 108 */ + {112, (0x00 << 24) | 0x0FF5D0, (0x01 << 24) | 0x155551, (0x04 << 24) | 0x77F784}, /* channel 112 */ + {116, (0x00 << 24) | 0x0FF5D0, (0x01 << 24) | 0x000001, (0x04 << 24) | 0x67F784}, /* channel 116 */ + {120, (0x00 << 24) | 0x0FF5D0, (0x01 << 24) | 0x0AAAA1, (0x04 << 24) | 0x77F784}, /* channel 120 */ + {124, (0x00 << 24) | 0x0FF5E0, (0x01 << 24) | 0x155551, (0x04 << 24) | 0x77F784}, /* channel 124 */ + {128, (0x00 << 24) | 0x0FF5E0, (0x01 << 24) | 0x000001, (0x04 << 24) | 0x67F784}, /* channel 128 */ + {132, (0x00 << 24) | 0x0FF5E0, (0x01 << 24) | 0x0AAAA1, (0x04 << 24) | 0x77F784}, /* channel 132 */ + {136, (0x00 << 24) | 0x0FF5F0, (0x01 << 24) | 0x155551, (0x04 << 24) | 0x77F784}, /* channel 136 */ + {140, (0x00 << 24) | 0x0FF5F0, (0x01 << 24) | 0x000001, (0x04 << 24) | 0x67F784}, /* channel 140 */ + {149, (0x00 << 24) | 0x0FF600, (0x01 << 24) | 0x180001, (0x04 << 24) | 0x77F784}, /* channel 149 */ + {153, (0x00 << 24) | 0x0FF600, (0x01 << 24) | 0x02AAA1, (0x04 << 24) | 0x77F784}, /* channel 153 */ + {157, (0x00 << 24) | 0x0FF600, (0x01 << 24) | 0x0D5551, (0x04 << 24) | 0x77F784}, /* channel 157 */ + {161, (0x00 << 24) | 0x0FF610, (0x01 << 24) | 0x180001, (0x04 << 24) | 0x77F784}, /* channel 161 */ + {165, (0x00 << 24) | 0x0FF610, (0x01 << 24) | 0x02AAA1, (0x04 << 24) | 0x77F784} /* channel 165 */ }; -//; RF Calibration <=== Register 0x0F -//0x0F 0x1ABA8F; start from 2.4Ghz default state -//0x0F 0x9ABA8F; TXDC compensation -//0x0F 0x3ABA8F; RXFIL adjustment -//0x0F 0x1ABA8F; restore 2.4Ghz default state - -//;TXVGA Mapping Table <=== Register 0x0B -u32 al7230_txvga_data[][2] = -{ - {0x08040B, 0}, //TXVGA=0; - {0x08041B, 1}, //TXVGA=1; - {0x08042B, 2}, //TXVGA=2; - {0x08043B, 3}, //TXVGA=3; - {0x08044B, 4}, //TXVGA=4; - {0x08045B, 5}, //TXVGA=5; - {0x08046B, 6}, //TXVGA=6; - {0x08047B, 7}, //TXVGA=7; - {0x08048B, 8}, //TXVGA=8; - {0x08049B, 9}, //TXVGA=9; - {0x0804AB, 10}, //TXVGA=10; - {0x0804BB, 11}, //TXVGA=11; - {0x0804CB, 12}, //TXVGA=12; - {0x0804DB, 13}, //TXVGA=13; - {0x0804EB, 14}, //TXVGA=14; - {0x0804FB, 15}, //TXVGA=15; - {0x08050B, 16}, //TXVGA=16; - {0x08051B, 17}, //TXVGA=17; - {0x08052B, 18}, //TXVGA=18; - {0x08053B, 19}, //TXVGA=19; - {0x08054B, 20}, //TXVGA=20; - {0x08055B, 21}, //TXVGA=21; - {0x08056B, 22}, //TXVGA=22; - {0x08057B, 23}, //TXVGA=23; - {0x08058B, 24}, //TXVGA=24; - {0x08059B, 25}, //TXVGA=25; - {0x0805AB, 26}, //TXVGA=26; - {0x0805BB, 27}, //TXVGA=27; - {0x0805CB, 28}, //TXVGA=28; - {0x0805DB, 29}, //TXVGA=29; - {0x0805EB, 30}, //TXVGA=30; - {0x0805FB, 31}, //TXVGA=31; - {0x08060B, 32}, //TXVGA=32; - {0x08061B, 33}, //TXVGA=33; - {0x08062B, 34}, //TXVGA=34; - {0x08063B, 35}, //TXVGA=35; - {0x08064B, 36}, //TXVGA=36; - {0x08065B, 37}, //TXVGA=37; - {0x08066B, 38}, //TXVGA=38; - {0x08067B, 39}, //TXVGA=39; - {0x08068B, 40}, //TXVGA=40; - {0x08069B, 41}, //TXVGA=41; - {0x0806AB, 42}, //TXVGA=42; - {0x0806BB, 43}, //TXVGA=43; - {0x0806CB, 44}, //TXVGA=44; - {0x0806DB, 45}, //TXVGA=45; - {0x0806EB, 46}, //TXVGA=46; - {0x0806FB, 47}, //TXVGA=47; - {0x08070B, 48}, //TXVGA=48; - {0x08071B, 49}, //TXVGA=49; - {0x08072B, 50}, //TXVGA=50; - {0x08073B, 51}, //TXVGA=51; - {0x08074B, 52}, //TXVGA=52; - {0x08075B, 53}, //TXVGA=53; - {0x08076B, 54}, //TXVGA=54; - {0x08077B, 55}, //TXVGA=55; - {0x08078B, 56}, //TXVGA=56; - {0x08079B, 57}, //TXVGA=57; - {0x0807AB, 58}, //TXVGA=58; - {0x0807BB, 59}, //TXVGA=59; - {0x0807CB, 60}, //TXVGA=60; - {0x0807DB, 61}, //TXVGA=61; - {0x0807EB, 62}, //TXVGA=62; - {0x0807FB, 63}, //TXVGA=63; +/* + * RF Calibration <=== Register 0x0F + * 0x0F 0x1ABA8F; start from 2.4Ghz default state + * 0x0F 0x9ABA8F; TXDC compensation + * 0x0F 0x3ABA8F; RXFIL adjustment + * 0x0F 0x1ABA8F; restore 2.4Ghz default state + */ + +/* TXVGA Mapping Table <=== Register 0x0B */ +u32 al7230_txvga_data[][2] = { + {0x08040B, 0}, /* TXVGA = 0; */ + {0x08041B, 1}, /* TXVGA = 1; */ + {0x08042B, 2}, /* TXVGA = 2; */ + {0x08043B, 3}, /* TXVGA = 3; */ + {0x08044B, 4}, /* TXVGA = 4; */ + {0x08045B, 5}, /* TXVGA = 5; */ + {0x08046B, 6}, /* TXVGA = 6; */ + {0x08047B, 7}, /* TXVGA = 7; */ + {0x08048B, 8}, /* TXVGA = 8; */ + {0x08049B, 9}, /* TXVGA = 9; */ + {0x0804AB, 10}, /* TXVGA = 10; */ + {0x0804BB, 11}, /* TXVGA = 11; */ + {0x0804CB, 12}, /* TXVGA = 12; */ + {0x0804DB, 13}, /* TXVGA = 13; */ + {0x0804EB, 14}, /* TXVGA = 14; */ + {0x0804FB, 15}, /* TXVGA = 15; */ + {0x08050B, 16}, /* TXVGA = 16; */ + {0x08051B, 17}, /* TXVGA = 17; */ + {0x08052B, 18}, /* TXVGA = 18; */ + {0x08053B, 19}, /* TXVGA = 19; */ + {0x08054B, 20}, /* TXVGA = 20; */ + {0x08055B, 21}, /* TXVGA = 21; */ + {0x08056B, 22}, /* TXVGA = 22; */ + {0x08057B, 23}, /* TXVGA = 23; */ + {0x08058B, 24}, /* TXVGA = 24; */ + {0x08059B, 25}, /* TXVGA = 25; */ + {0x0805AB, 26}, /* TXVGA = 26; */ + {0x0805BB, 27}, /* TXVGA = 27; */ + {0x0805CB, 28}, /* TXVGA = 28; */ + {0x0805DB, 29}, /* TXVGA = 29; */ + {0x0805EB, 30}, /* TXVGA = 30; */ + {0x0805FB, 31}, /* TXVGA = 31; */ + {0x08060B, 32}, /* TXVGA = 32; */ + {0x08061B, 33}, /* TXVGA = 33; */ + {0x08062B, 34}, /* TXVGA = 34; */ + {0x08063B, 35}, /* TXVGA = 35; */ + {0x08064B, 36}, /* TXVGA = 36; */ + {0x08065B, 37}, /* TXVGA = 37; */ + {0x08066B, 38}, /* TXVGA = 38; */ + {0x08067B, 39}, /* TXVGA = 39; */ + {0x08068B, 40}, /* TXVGA = 40; */ + {0x08069B, 41}, /* TXVGA = 41; */ + {0x0806AB, 42}, /* TXVGA = 42; */ + {0x0806BB, 43}, /* TXVGA = 43; */ + {0x0806CB, 44}, /* TXVGA = 44; */ + {0x0806DB, 45}, /* TXVGA = 45; */ + {0x0806EB, 46}, /* TXVGA = 46; */ + {0x0806FB, 47}, /* TXVGA = 47; */ + {0x08070B, 48}, /* TXVGA = 48; */ + {0x08071B, 49}, /* TXVGA = 49; */ + {0x08072B, 50}, /* TXVGA = 50; */ + {0x08073B, 51}, /* TXVGA = 51; */ + {0x08074B, 52}, /* TXVGA = 52; */ + {0x08075B, 53}, /* TXVGA = 53; */ + {0x08076B, 54}, /* TXVGA = 54; */ + {0x08077B, 55}, /* TXVGA = 55; */ + {0x08078B, 56}, /* TXVGA = 56; */ + {0x08079B, 57}, /* TXVGA = 57; */ + {0x0807AB, 58}, /* TXVGA = 58; */ + {0x0807BB, 59}, /* TXVGA = 59; */ + {0x0807CB, 60}, /* TXVGA = 60; */ + {0x0807DB, 61}, /* TXVGA = 61; */ + {0x0807EB, 62}, /* TXVGA = 62; */ + {0x0807FB, 63}, /* TXVGA = 63; */ }; -//-------------------------------- - +/* ============================================= */ -//; W89RF242 RFIC SPI programming initial data -//; Winbond WLAN 11g RFIC BB-SPI register -- version FA5976A rev 1.3b -//; Update Date: Ocotber 3, 2005 by PP10 Hsiang-Te Ho -//; -//; Version 1.3b revision items: (Oct. 1, 2005 by HTHo) for FA5976A -u32 w89rf242_rf_data[] = -{ - (0x00<<24)|0xF86100, // 20060721 0xF86100, //; 3E184; MODA (0x00) -- Normal mode ; calibration off - (0x01<<24)|0xEFFFC2, //; 3BFFF; MODB (0x01) -- turn off RSSI, and other circuits are turned on - (0x02<<24)|0x102504, //; 04094; FSET (0x02) -- default 20MHz crystal ; Icmp=1.5mA - (0x03<<24)|0x026286, //; 0098A; FCHN (0x03) -- default CH7, 2442MHz - (0x04<<24)|0x000208, // 20060612.1.a 0x0002C8, // 20050818 // 20050816 0x000388 - //; 02008; FCAL (0x04) -- XTAL Freq Trim=001000 (socket board#1); FA5976AYG_v1.3C - (0x05<<24)|0x24C60A, // 20060612.1.a 0x24C58A, // 941003 0x24C48A, // 20050818.2 0x24848A, // 20050818 // 20050816 0x24C48A - //; 09316; GANA (0x05) -- TX VGA default (TXVGA=0x18(12)) & TXGPK=110 ; FA5976A_1.3D - (0x06<<24)|0x3432CC, // 941003 0x26C34C, // 20050818 0x06B40C - //; 0D0CB; GANB (0x06) -- RXDC(DC offset) on; LNA=11; RXVGA=001011(11) ; RXFLSW=11(010001); RXGPK=00; RXGCF=00; -50dBm input - (0x07<<24)|0x0C68CE, // 20050818.2 0x0C66CE, // 20050818 // 20050816 0x0C68CE - //; 031A3; FILT (0x07) -- TX/RX filter with auto-tuning; TFLBW=011; RFLBW=100 - (0x08<<24)|0x100010, //; 04000; TCAL (0x08) -- //for LO - (0x09<<24)|0x004012, // 20060612.1.a 0x6E4012, // 0x004012, - //; 1B900; RCALA (0x09) -- FASTS=11; HPDE=01 (100nsec); SEHP=1 (select B0 pin=RXHP); RXHP=1 (Turn on RXHP function)(FA5976A_1.3C) - (0x0A<<24)|0x704014, //; 1C100; RCALB (0x0A) - (0x0B<<24)|0x18BDD6, // 941003 0x1805D6, // 20050818.2 0x1801D6, // 20050818 // 20050816 0x1805D6 - //; 062F7; IQCAL (0x0B) -- Turn on LO phase tuner=0111 & RX-LO phase = 0111; FA5976A_1.3B (2005/09/29) - (0x0C<<24)|0x575558, // 20050818.2 0x555558, // 20050818 // 20050816 0x575558 - //; 15D55 ; IBSA (0x0C) -- IFPre =11 ; TC5376A_v1.3A for corner - (0x0D<<24)|0x55545A, // 20060612.1.a 0x55555A, - //; 15555 ; IBSB (0x0D) - (0x0E<<24)|0x5557DC, // 20060612.1.a 0x55555C, // 941003 0x5557DC, - //; 1555F ; IBSC (0x0E) -- IRLNA & IRLNB (PTAT & Const current)=01/01; FA5976B_1.3F (2005/11/25) - (0x10<<24)|0x000C20, // 941003 0x000020, // 20050818 - //; 00030 ; TMODA (0x10) -- LNA_gain_step=0011 ; LNA=15/16dB - (0x11<<24)|0x0C0022, // 941003 0x030022 // 20050818.2 0x030022 // 20050818 // 20050816 0x0C0022 - //; 03000 ; TMODB (0x11) -- Turn ON RX-Q path Test Switch; To improve IQ path group delay (FA5976A_1.3C) - (0x12<<24)|0x000024 // 20060612.1.a 0x001824 // 941003 add - //; TMODC (0x12) -- Turn OFF Tempearure sensor +/* + * W89RF242 RFIC SPI programming initial data + * Winbond WLAN 11g RFIC BB-SPI register -- version FA5976A rev 1.3b + */ +u32 w89rf242_rf_data[] = { + (0x00 << 24) | 0xF86100, /* 3E184; MODA (0x00) -- Normal mode ; calibration off */ + (0x01 << 24) | 0xEFFFC2, /* 3BFFF; MODB (0x01) -- turn off RSSI, and other circuits are turned on */ + (0x02 << 24) | 0x102504, /* 04094; FSET (0x02) -- default 20MHz crystal ; Icmp=1.5mA */ + (0x03 << 24) | 0x026286, /* 0098A; FCHN (0x03) -- default CH7, 2442MHz */ + (0x04 << 24) | 0x000208, /* 02008; FCAL (0x04) -- XTAL Freq Trim=001000 (socket board#1); FA5976AYG_v1.3C */ + (0x05 << 24) | 0x24C60A, /* 09316; GANA (0x05) -- TX VGA default (TXVGA=0x18(12)) & TXGPK=110 ; FA5976A_1.3D */ + (0x06 << 24) | 0x3432CC, /* 0D0CB; GANB (0x06) -- RXDC(DC offset) on; LNA=11; RXVGA=001011(11) ; RXFLSW=11(010001); RXGPK=00; RXGCF=00; -50dBm input */ + (0x07 << 24) | 0x0C68CE, /* 031A3; FILT (0x07) -- TX/RX filter with auto-tuning; TFLBW=011; RFLBW=100 */ + (0x08 << 24) | 0x100010, /* 04000; TCAL (0x08) -- for LO */ + (0x09 << 24) | 0x004012, /* 1B900; RCALA (0x09) -- FASTS=11; HPDE=01 (100nsec); SEHP=1 (select B0 pin=RXHP); RXHP=1 (Turn on RXHP function)(FA5976A_1.3C) */ + (0x0A << 24) | 0x704014, /* 1C100; RCALB (0x0A) */ + (0x0B << 24) | 0x18BDD6, /* 062F7; IQCAL (0x0B) -- Turn on LO phase tuner=0111 & RX-LO phase = 0111; FA5976A_1.3B */ + (0x0C << 24) | 0x575558, /* 15D55 ; IBSA (0x0C) -- IFPre =11 ; TC5376A_v1.3A for corner */ + (0x0D << 24) | 0x55545A, /* 15555 ; IBSB (0x0D) */ + (0x0E << 24) | 0x5557DC, /* 1555F ; IBSC (0x0E) -- IRLNA & IRLNB (PTAT & Const current)=01/01; FA5976B_1.3F */ + (0x10 << 24) | 0x000C20, /* 00030 ; TMODA (0x10) -- LNA_gain_step=0011 ; LNA=15/16dB */ + (0x11 << 24) | 0x0C0022, /* 03000 ; TMODB (0x11) -- Turn ON RX-Q path Test Switch; To improve IQ path group delay (FA5976A_1.3C) */ + (0x12 << 24) | 0x000024 /* TMODC (0x12) -- Turn OFF Tempearure sensor */ }; -u32 w89rf242_channel_data_24[][2] = -{ - {(0x03<<24)|0x025B06, (0x04<<24)|0x080408}, // channe1 01 - {(0x03<<24)|0x025C46, (0x04<<24)|0x080408}, // channe1 02 - {(0x03<<24)|0x025D86, (0x04<<24)|0x080408}, // channe1 03 - {(0x03<<24)|0x025EC6, (0x04<<24)|0x080408}, // channe1 04 - {(0x03<<24)|0x026006, (0x04<<24)|0x080408}, // channe1 05 - {(0x03<<24)|0x026146, (0x04<<24)|0x080408}, // channe1 06 - {(0x03<<24)|0x026286, (0x04<<24)|0x080408}, // channe1 07 - {(0x03<<24)|0x0263C6, (0x04<<24)|0x080408}, // channe1 08 - {(0x03<<24)|0x026506, (0x04<<24)|0x080408}, // channe1 09 - {(0x03<<24)|0x026646, (0x04<<24)|0x080408}, // channe1 10 - {(0x03<<24)|0x026786, (0x04<<24)|0x080408}, // channe1 11 - {(0x03<<24)|0x0268C6, (0x04<<24)|0x080408}, // channe1 12 - {(0x03<<24)|0x026A06, (0x04<<24)|0x080408}, // channe1 13 - {(0x03<<24)|0x026D06, (0x04<<24)|0x080408} // channe1 14 +u32 w89rf242_channel_data_24[][2] = { + {(0x03 << 24) | 0x025B06, (0x04 << 24) | 0x080408}, /* channe1 01 */ + {(0x03 << 24) | 0x025C46, (0x04 << 24) | 0x080408}, /* channe1 02 */ + {(0x03 << 24) | 0x025D86, (0x04 << 24) | 0x080408}, /* channe1 03 */ + {(0x03 << 24) | 0x025EC6, (0x04 << 24) | 0x080408}, /* channe1 04 */ + {(0x03 << 24) | 0x026006, (0x04 << 24) | 0x080408}, /* channe1 05 */ + {(0x03 << 24) | 0x026146, (0x04 << 24) | 0x080408}, /* channe1 06 */ + {(0x03 << 24) | 0x026286, (0x04 << 24) | 0x080408}, /* channe1 07 */ + {(0x03 << 24) | 0x0263C6, (0x04 << 24) | 0x080408}, /* channe1 08 */ + {(0x03 << 24) | 0x026506, (0x04 << 24) | 0x080408}, /* channe1 09 */ + {(0x03 << 24) | 0x026646, (0x04 << 24) | 0x080408}, /* channe1 10 */ + {(0x03 << 24) | 0x026786, (0x04 << 24) | 0x080408}, /* channe1 11 */ + {(0x03 << 24) | 0x0268C6, (0x04 << 24) | 0x080408}, /* channe1 12 */ + {(0x03 << 24) | 0x026A06, (0x04 << 24) | 0x080408}, /* channe1 13 */ + {(0x03 << 24) | 0x026D06, (0x04 << 24) | 0x080408} /* channe1 14 */ }; -u32 w89rf242_power_data_24[] = {(0x05<<24)|0x24C48A, (0x05<<24)|0x24C48A, (0x05<<24)|0x24C48A}; +u32 w89rf242_power_data_24[] = {(0x05 << 24) | 0x24C48A, (0x05 << 24) | 0x24C48A, (0x05 << 24) | 0x24C48A}; -// 20060315.6 Enlarge for new scale -// 20060316.6 20060619.2.a add mapping array -u32 w89rf242_txvga_old_mapping[][2] = -{ - {0, 0} , // New <-> Old +u32 w89rf242_txvga_old_mapping[][2] = { + {0, 0} , /* New <-> Old */ {1, 1} , {2, 2} , {3, 3} , {4, 4} , {6, 5} , - {8, 6 }, - {10, 7 }, - {12, 8 }, - {14, 9 }, + {8, 6}, + {10, 7}, + {12, 8}, + {14, 9}, {16, 10}, {18, 11}, {20, 12}, @@ -818,1704 +735,1514 @@ u32 w89rf242_txvga_old_mapping[][2] = {30, 17}, {32, 18}, {34, 19}, +}; +u32 w89rf242_txvga_data[][5] = { + /* low gain mode */ + {(0x05 << 24) | 0x24C00A, 0, 0x00292315, 0x0800FEFF, 0x52523131}, /* min gain */ + {(0x05 << 24) | 0x24C80A, 1, 0x00292315, 0x0800FEFF, 0x52523131}, + {(0x05 << 24) | 0x24C04A, 2, 0x00292315, 0x0800FEFF, 0x52523131}, /* (default) +14dBm (ANT) */ + {(0x05 << 24) | 0x24C84A, 3, 0x00292315, 0x0800FEFF, 0x52523131}, -}; + /* TXVGA=0x10 */ + {(0x05 << 24) | 0x24C40A, 4, 0x00292315, 0x0800FEFF, 0x60603838}, + {(0x05 << 24) | 0x24C40A, 5, 0x00262114, 0x0700FEFF, 0x65653B3B}, -// 20060619.3 modify from Bruce's mail -u32 w89rf242_txvga_data[][5] = -{ - //low gain mode - { (0x05<<24)|0x24C00A, 0, 0x00292315, 0x0800FEFF, 0x52523131 },// ; min gain - { (0x05<<24)|0x24C80A, 1, 0x00292315, 0x0800FEFF, 0x52523131 }, - { (0x05<<24)|0x24C04A, 2, 0x00292315, 0x0800FEFF, 0x52523131 },// (default) +14dBm (ANT) - { (0x05<<24)|0x24C84A, 3, 0x00292315, 0x0800FEFF, 0x52523131 }, - - //TXVGA=0x10 - { (0x05<<24)|0x24C40A, 4, 0x00292315, 0x0800FEFF, 0x60603838 }, - { (0x05<<24)|0x24C40A, 5, 0x00262114, 0x0700FEFF, 0x65653B3B }, - - //TXVGA=0x11 - { (0x05<<24)|0x24C44A, 6, 0x00241F13, 0x0700FFFF, 0x58583333 }, - { (0x05<<24)|0x24C44A, 7, 0x00292315, 0x0800FEFF, 0x5E5E3737 }, - - //TXVGA=0x12 - { (0x05<<24)|0x24C48A, 8, 0x00262114, 0x0700FEFF, 0x53533030 }, - { (0x05<<24)|0x24C48A, 9, 0x00241F13, 0x0700FFFF, 0x59593434 }, - - //TXVGA=0x13 - { (0x05<<24)|0x24C4CA, 10, 0x00292315, 0x0800FEFF, 0x52523030 }, - { (0x05<<24)|0x24C4CA, 11, 0x00262114, 0x0700FEFF, 0x56563232 }, - - //TXVGA=0x14 - { (0x05<<24)|0x24C50A, 12, 0x00292315, 0x0800FEFF, 0x54543131 }, - { (0x05<<24)|0x24C50A, 13, 0x00262114, 0x0700FEFF, 0x58583434 }, - - //TXVGA=0x15 - { (0x05<<24)|0x24C54A, 14, 0x00292315, 0x0800FEFF, 0x54543131 }, - { (0x05<<24)|0x24C54A, 15, 0x00262114, 0x0700FEFF, 0x59593434 }, - - //TXVGA=0x16 - { (0x05<<24)|0x24C58A, 16, 0x00292315, 0x0800FEFF, 0x55553131 }, - { (0x05<<24)|0x24C58A, 17, 0x00292315, 0x0800FEFF, 0x5B5B3535 }, - - //TXVGA=0x17 - { (0x05<<24)|0x24C5CA, 18, 0x00262114, 0x0700FEFF, 0x51512F2F }, - { (0x05<<24)|0x24C5CA, 19, 0x00241F13, 0x0700FFFF, 0x55553131 }, - - //TXVGA=0x18 - { (0x05<<24)|0x24C60A, 20, 0x00292315, 0x0800FEFF, 0x4F4F2E2E }, - { (0x05<<24)|0x24C60A, 21, 0x00262114, 0x0700FEFF, 0x53533030 }, - - //TXVGA=0x19 - { (0x05<<24)|0x24C64A, 22, 0x00292315, 0x0800FEFF, 0x4E4E2D2D }, - { (0x05<<24)|0x24C64A, 23, 0x00262114, 0x0700FEFF, 0x53533030 }, - - //TXVGA=0x1A - { (0x05<<24)|0x24C68A, 24, 0x00292315, 0x0800FEFF, 0x50502E2E }, - { (0x05<<24)|0x24C68A, 25, 0x00262114, 0x0700FEFF, 0x55553131 }, - - //TXVGA=0x1B - { (0x05<<24)|0x24C6CA, 26, 0x00262114, 0x0700FEFF, 0x53533030 }, - { (0x05<<24)|0x24C6CA, 27, 0x00292315, 0x0800FEFF, 0x5A5A3434 }, - - //TXVGA=0x1C - { (0x05<<24)|0x24C70A, 28, 0x00292315, 0x0800FEFF, 0x55553131 }, - { (0x05<<24)|0x24C70A, 29, 0x00292315, 0x0800FEFF, 0x5D5D3636 }, - - //TXVGA=0x1D - { (0x05<<24)|0x24C74A, 30, 0x00292315, 0x0800FEFF, 0x5F5F3737 }, - { (0x05<<24)|0x24C74A, 31, 0x00262114, 0x0700FEFF, 0x65653B3B }, - - //TXVGA=0x1E - { (0x05<<24)|0x24C78A, 32, 0x00292315, 0x0800FEFF, 0x66663B3B }, - { (0x05<<24)|0x24C78A, 33, 0x00262114, 0x0700FEFF, 0x70704141 }, - - //TXVGA=0x1F - { (0x05<<24)|0x24C7CA, 34, 0x00292315, 0x0800FEFF, 0x72724242 } + /* TXVGA=0x11 */ + { (0x05 << 24) | 0x24C44A, 6, 0x00241F13, 0x0700FFFF, 0x58583333}, + { (0x05 << 24) | 0x24C44A, 7, 0x00292315, 0x0800FEFF, 0x5E5E3737}, + + /* TXVGA=0x12 */ + {(0x05 << 24) | 0x24C48A, 8, 0x00262114, 0x0700FEFF, 0x53533030}, + {(0x05 << 24) | 0x24C48A, 9, 0x00241F13, 0x0700FFFF, 0x59593434}, + + /* TXVGA=0x13 */ + {(0x05 << 24) | 0x24C4CA, 10, 0x00292315, 0x0800FEFF, 0x52523030}, + {(0x05 << 24) | 0x24C4CA, 11, 0x00262114, 0x0700FEFF, 0x56563232}, + + /* TXVGA=0x14 */ + {(0x05 << 24) | 0x24C50A, 12, 0x00292315, 0x0800FEFF, 0x54543131}, + {(0x05 << 24) | 0x24C50A, 13, 0x00262114, 0x0700FEFF, 0x58583434}, + + /* TXVGA=0x15 */ + {(0x05 << 24) | 0x24C54A, 14, 0x00292315, 0x0800FEFF, 0x54543131}, + {(0x05 << 24) | 0x24C54A, 15, 0x00262114, 0x0700FEFF, 0x59593434}, + + /* TXVGA=0x16 */ + {(0x05 << 24) | 0x24C58A, 16, 0x00292315, 0x0800FEFF, 0x55553131}, + {(0x05 << 24) | 0x24C58A, 17, 0x00292315, 0x0800FEFF, 0x5B5B3535}, + + /* TXVGA=0x17 */ + {(0x05 << 24) | 0x24C5CA, 18, 0x00262114, 0x0700FEFF, 0x51512F2F}, + {(0x05 << 24) | 0x24C5CA, 19, 0x00241F13, 0x0700FFFF, 0x55553131}, + + /* TXVGA=0x18 */ + {(0x05 << 24) | 0x24C60A, 20, 0x00292315, 0x0800FEFF, 0x4F4F2E2E}, + {(0x05 << 24) | 0x24C60A, 21, 0x00262114, 0x0700FEFF, 0x53533030}, + + /* TXVGA=0x19 */ + {(0x05 << 24) | 0x24C64A, 22, 0x00292315, 0x0800FEFF, 0x4E4E2D2D}, + {(0x05 << 24) | 0x24C64A, 23, 0x00262114, 0x0700FEFF, 0x53533030}, + + /* TXVGA=0x1A */ + {(0x05 << 24) | 0x24C68A, 24, 0x00292315, 0x0800FEFF, 0x50502E2E}, + {(0x05 << 24) | 0x24C68A, 25, 0x00262114, 0x0700FEFF, 0x55553131}, + + /* TXVGA=0x1B */ + {(0x05 << 24) | 0x24C6CA, 26, 0x00262114, 0x0700FEFF, 0x53533030}, + {(0x05 << 24) | 0x24C6CA, 27, 0x00292315, 0x0800FEFF, 0x5A5A3434}, + + /* TXVGA=0x1C */ + {(0x05 << 24) | 0x24C70A, 28, 0x00292315, 0x0800FEFF, 0x55553131}, + {(0x05 << 24) | 0x24C70A, 29, 0x00292315, 0x0800FEFF, 0x5D5D3636}, + + /* TXVGA=0x1D */ + {(0x05 << 24) | 0x24C74A, 30, 0x00292315, 0x0800FEFF, 0x5F5F3737}, + {(0x05 << 24) | 0x24C74A, 31, 0x00262114, 0x0700FEFF, 0x65653B3B}, + + /* TXVGA=0x1E */ + {(0x05 << 24) | 0x24C78A, 32, 0x00292315, 0x0800FEFF, 0x66663B3B}, + {(0x05 << 24) | 0x24C78A, 33, 0x00262114, 0x0700FEFF, 0x70704141}, + + /* TXVGA=0x1F */ + {(0x05 << 24) | 0x24C7CA, 34, 0x00292315, 0x0800FEFF, 0x72724242} }; -/////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////////////////////////////////// - - - -//============================================================================================================= -// Uxx_ReadEthernetAddress -- -// -// Routine Description: -// Reads in the Ethernet address from the IC. -// -// Arguments: -// pHwData - The pHwData structure -// -// Return Value: -// -// The address is stored in EthernetIDAddr. -//============================================================================================================= -void -Uxx_ReadEthernetAddress( struct hw_data * pHwData ) +/* ================================================================================================== */ + + + +/* + * ============================================================================================================= + * Uxx_ReadEthernetAddress -- + * + * Routine Description: + * Reads in the Ethernet address from the IC. + * + * Arguments: + * pHwData - The pHwData structure + * + * Return Value: + * + * The address is stored in EthernetIDAddr. + * ============================================================================================================= + */ +void Uxx_ReadEthernetAddress(struct hw_data *pHwData) { u32 ltmp; - // Reading Ethernet address from EEPROM and set into hardware due to MAC address maybe change. - // Only unplug and plug again can make hardware read EEPROM again. 20060727 - Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08000000 ); // Start EEPROM access + Read + address(0x0d) - Wb35Reg_ReadSync( pHwData, 0x03b4, <mp ); - *(u16 *)pHwData->PermanentMacAddress = cpu_to_le16((u16)ltmp); //20060926 anson's endian - Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08010000 ); // Start EEPROM access + Read + address(0x0d) - Wb35Reg_ReadSync( pHwData, 0x03b4, <mp ); - *(u16 *)(pHwData->PermanentMacAddress + 2) = cpu_to_le16((u16)ltmp); //20060926 anson's endian - Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08020000 ); // Start EEPROM access + Read + address(0x0d) - Wb35Reg_ReadSync( pHwData, 0x03b4, <mp ); - *(u16 *)(pHwData->PermanentMacAddress + 4) = cpu_to_le16((u16)ltmp); //20060926 anson's endian + /* + * Reading Ethernet address from EEPROM and set into hardware due to MAC address maybe change. + * Only unplug and plug again can make hardware read EEPROM again. + */ + Wb35Reg_WriteSync(pHwData, 0x03b4, 0x08000000); /* Start EEPROM access + Read + address(0x0d) */ + Wb35Reg_ReadSync(pHwData, 0x03b4, <mp); + *(u16 *)pHwData->PermanentMacAddress = cpu_to_le16((u16) ltmp); + Wb35Reg_WriteSync(pHwData, 0x03b4, 0x08010000); /* Start EEPROM access + Read + address(0x0d) */ + Wb35Reg_ReadSync(pHwData, 0x03b4, <mp); + *(u16 *)(pHwData->PermanentMacAddress + 2) = cpu_to_le16((u16) ltmp); + Wb35Reg_WriteSync(pHwData, 0x03b4, 0x08020000); /* Start EEPROM access + Read + address(0x0d) */ + Wb35Reg_ReadSync(pHwData, 0x03b4, <mp); + *(u16 *)(pHwData->PermanentMacAddress + 4) = cpu_to_le16((u16) ltmp); *(u16 *)(pHwData->PermanentMacAddress + 6) = 0; - Wb35Reg_WriteSync( pHwData, 0x03e8, cpu_to_le32(*(u32 *)pHwData->PermanentMacAddress) ); //20060926 anson's endian - Wb35Reg_WriteSync( pHwData, 0x03ec, cpu_to_le32(*(u32 *)(pHwData->PermanentMacAddress+4)) ); //20060926 anson's endian + Wb35Reg_WriteSync(pHwData, 0x03e8, cpu_to_le32(*(u32 *)pHwData->PermanentMacAddress)); + Wb35Reg_WriteSync(pHwData, 0x03ec, cpu_to_le32(*(u32 *)(pHwData->PermanentMacAddress + 4))); } -//=============================================================================================================== -// CardGetMulticastBit -- -// Description: -// For a given multicast address, returns the byte and bit in the card multicast registers that it hashes to. -// Calls CardComputeCrc() to determine the CRC value. -// Arguments: -// Address - the address -// Byte - the byte that it hashes to -// Value - will have a 1 in the relevant bit -// Return Value: -// None. -//============================================================================================================== -void CardGetMulticastBit( u8 Address[ETH_ALEN], u8 *Byte, u8 *Value ) +/* + * =============================================================================================================== + * CardGetMulticastBit -- + * Description: + * For a given multicast address, returns the byte and bit in the card multicast registers that it hashes to. + * Calls CardComputeCrc() to determine the CRC value. + * Arguments: + * Address - the address + * Byte - the byte that it hashes to + * Value - will have a 1 in the relevant bit + * Return Value: + * None. + * ============================================================================================================== + */ +void CardGetMulticastBit(u8 Address[ETH_ALEN], u8 *Byte, u8 *Value) { - u32 Crc; - u32 BitNumber; + u32 Crc; + u32 BitNumber; - // First compute the CRC. - Crc = CardComputeCrc(Address, ETH_ALEN); + /* First compute the CRC. */ + Crc = CardComputeCrc(Address, ETH_ALEN); - // The computed CRC is bit0~31 from left to right - //At first we should do right shift 25bits, and read 7bits by using '&', 2^7=128 + /* The computed CRC is bit0~31 from left to right */ + /* At first we should do right shift 25bits, and read 7bits by using '&', 2^7=128 */ BitNumber = (u32) ((Crc >> 26) & 0x3f); - *Byte = (u8) (BitNumber >> 3);// 900514 original (BitNumber / 8) - *Value = (u8) ((u8)1 << (BitNumber % 8)); + *Byte = (u8) (BitNumber >> 3); /* 900514 original (BitNumber / 8) */ + *Value = (u8) ((u8) 1 << (BitNumber % 8)); } -void Uxx_power_on_procedure( struct hw_data * pHwData ) +void Uxx_power_on_procedure(struct hw_data *pHwData) { u32 ltmp, loop; - if( pHwData->phy_type <= RF_MAXIM_V1 ) - Wb35Reg_WriteSync( pHwData, 0x03d4, 0xffffff38 ); - else - { - Wb35Reg_WriteSync( pHwData, 0x03f4, 0xFF5807FF );// 20060721 For NEW IC 0xFF5807FF - - // 20060511.1 Fix the following 4 steps for Rx of RF 2230 initial fail - Wb35Reg_WriteSync( pHwData, 0x03d4, 0x80 );// regulator on only - msleep(10); // Modify 20051221.1.b - Wb35Reg_WriteSync( pHwData, 0x03d4, 0xb8 );// REG_ON RF_RSTN on, and - msleep(10); // Modify 20051221.1.b - + if (pHwData->phy_type <= RF_MAXIM_V1) + Wb35Reg_WriteSync(pHwData, 0x03d4, 0xffffff38); + else { + Wb35Reg_WriteSync(pHwData, 0x03f4, 0xFF5807FF); + Wb35Reg_WriteSync(pHwData, 0x03d4, 0x80); /* regulator on only */ + msleep(10); + Wb35Reg_WriteSync(pHwData, 0x03d4, 0xb8); /* REG_ON RF_RSTN on, and */ + msleep(10); ltmp = 0x4968; - if( (pHwData->phy_type == RF_WB_242) || - (RF_WB_242_1 == pHwData->phy_type) ) // 20060619.5 Add + if ((pHwData->phy_type == RF_WB_242) || + (RF_WB_242_1 == pHwData->phy_type)) ltmp = 0x4468; - Wb35Reg_WriteSync( pHwData, 0x03d0, ltmp ); - Wb35Reg_WriteSync( pHwData, 0x03d4, 0xa0 );// PLL_PD REF_PD set to 0 + Wb35Reg_WriteSync(pHwData, 0x03d0, ltmp); + Wb35Reg_WriteSync(pHwData, 0x03d4, 0xa0); /* PLL_PD REF_PD set to 0 */ - msleep(20); // Modify 20051221.1.b - Wb35Reg_ReadSync( pHwData, 0x03d0, <mp ); - loop = 500; // Wait for 5 second 20061101 - while( !(ltmp & 0x20) && loop-- ) - { - msleep(10); // Modify 20051221.1.b - if( !Wb35Reg_ReadSync( pHwData, 0x03d0, <mp ) ) + msleep(20); + Wb35Reg_ReadSync(pHwData, 0x03d0, <mp); + loop = 500; /* Wait for 5 second */ + while (!(ltmp & 0x20) && loop--) { + msleep(10); + if (!Wb35Reg_ReadSync(pHwData, 0x03d0, <mp)) break; } - Wb35Reg_WriteSync( pHwData, 0x03d4, 0xe0 );// MLK_EN + Wb35Reg_WriteSync(pHwData, 0x03d4, 0xe0); /* MLK_EN */ } - Wb35Reg_WriteSync( pHwData, 0x03b0, 1 );// Reset hardware first - msleep(10); // Add this 20051221.1.b + Wb35Reg_WriteSync(pHwData, 0x03b0, 1); /* Reset hardware first */ + msleep(10); - // Set burst write delay - Wb35Reg_WriteSync( pHwData, 0x03f8, 0x7ff ); + /* Set burst write delay */ + Wb35Reg_WriteSync(pHwData, 0x03f8, 0x7ff); } -void Set_ChanIndep_RfData_al7230_24( struct hw_data * pHwData, u32 *pltmp ,char number) +void Set_ChanIndep_RfData_al7230_24(struct hw_data *pHwData, u32 *pltmp , char number) { u8 i; - for( i=0; iphy_para[i] = al7230_rf_data_24[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_rf_data_24[i]&0xffffff); + pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_rf_data_24[i] & 0xffffff); } } -void Set_ChanIndep_RfData_al7230_50( struct hw_data * pHwData, u32 *pltmp, char number) +void Set_ChanIndep_RfData_al7230_50(struct hw_data *pHwData, u32 *pltmp, char number) { u8 i; - for( i=0; iphy_para[i] = al7230_rf_data_50[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_rf_data_50[i]&0xffffff); + pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_rf_data_50[i] & 0xffffff); } } -//============================================================================================================= -// RFSynthesizer_initial -- -//============================================================================================================= -void -RFSynthesizer_initial(struct hw_data * pHwData) +/* + * ============================================================================================================= + * RFSynthesizer_initial -- + * ============================================================================================================= + */ +void RFSynthesizer_initial(struct hw_data *pHwData) { u32 altmp[32]; - u32 * pltmp = altmp; + u32 *pltmp = altmp; u32 ltmp; - u8 number=0x00; // The number of register vale + u8 number = 0x00; /* The number of register vale */ u8 i; - // - // bit[31] SPI Enable. - // 1=perform synthesizer program operation. This bit will - // cleared automatically after the operation is completed. - // bit[30] SPI R/W Control - // 0=write, 1=read - // bit[29:24] SPI Data Format Length - // bit[17:4 ] RF Data bits. - // bit[3 :0 ] RF address. - switch( pHwData->phy_type ) - { + /* + * bit[31] SPI Enable. + * 1=perform synthesizer program operation. This bit will + * cleared automatically after the operation is completed. + * bit[30] SPI R/W Control + * 0=write, 1=read + * bit[29:24] SPI Data Format Length + * bit[17:4 ] RF Data bits. + * bit[3 :0 ] RF address. + */ + switch (pHwData->phy_type) { case RF_MAXIM_2825: - case RF_MAXIM_V1: // 11g Winbond 2nd BB(with Phy board (v1) + Maxim 331) - number = sizeof(max2825_rf_data)/sizeof(max2825_rf_data[0]); - for( i=0; iphy_para[i] = max2825_rf_data[i];// Backup Rf parameter - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2825_rf_data[i], 18); + case RF_MAXIM_V1: /* 11g Winbond 2nd BB(with Phy board (v1) + Maxim 331) */ + number = sizeof(max2825_rf_data) / sizeof(max2825_rf_data[0]); + for (i = 0; i < number; i++) { + pHwData->phy_para[i] = max2825_rf_data[i]; /* Backup Rf parameter */ + pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2825_rf_data[i], 18); } break; - case RF_MAXIM_2827: - number = sizeof(max2827_rf_data)/sizeof(max2827_rf_data[0]); - for( i=0; iphy_para[i] = max2827_rf_data[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_rf_data[i], 18); + pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2827_rf_data[i], 18); } break; - case RF_MAXIM_2828: - number = sizeof(max2828_rf_data)/sizeof(max2828_rf_data[0]); - for( i=0; iphy_para[i] = max2828_rf_data[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_rf_data[i], 18); + pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2828_rf_data[i], 18); } break; - case RF_MAXIM_2829: - number = sizeof(max2829_rf_data)/sizeof(max2829_rf_data[0]); - for( i=0; iphy_para[i] = max2829_rf_data[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2829_rf_data[i], 18); + pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2829_rf_data[i], 18); } break; - case RF_AIROHA_2230: - number = sizeof(al2230_rf_data)/sizeof(al2230_rf_data[0]); - for( i=0; iphy_para[i] = al2230_rf_data[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( al2230_rf_data[i], 20); + pltmp[i] = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse(al2230_rf_data[i], 20); } break; - case RF_AIROHA_2230S: - number = sizeof(al2230s_rf_data)/sizeof(al2230s_rf_data[0]); - for( i=0; iphy_para[i] = al2230s_rf_data[i]; - pltmp[i] = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( al2230s_rf_data[i], 20); + pltmp[i] = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse(al2230s_rf_data[i], 20); } break; - case RF_AIROHA_7230: - - //Start to fill RF parameters, PLL_ON should be pulled low. - Wb35Reg_WriteSync( pHwData, 0x03dc, 0x00000000 ); -#ifdef _PE_STATE_DUMP_ + /* Start to fill RF parameters, PLL_ON should be pulled low. */ + Wb35Reg_WriteSync(pHwData, 0x03dc, 0x00000000); + #ifdef _PE_STATE_DUMP_ printk("* PLL_ON low\n"); -#endif - - number = sizeof(al7230_rf_data_24)/sizeof(al7230_rf_data_24[0]); + #endif + number = sizeof(al7230_rf_data_24) / sizeof(al7230_rf_data_24[0]); Set_ChanIndep_RfData_al7230_24(pHwData, pltmp, number); break; - case RF_WB_242: - case RF_WB_242_1: // 20060619.5 Add - number = sizeof(w89rf242_rf_data)/sizeof(w89rf242_rf_data[0]); - for( i=0; iVCO_trim<<4; + if (i == 4) { /* Update the VCO trim from EEPROM */ + ltmp &= ~0xff0; /* Mask bit4 ~bit11 */ + ltmp |= pHwData->VCO_trim << 4; } pHwData->phy_para[i] = ltmp; - pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( ltmp, 24); + pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse(ltmp, 24); } break; } pHwData->phy_number = number; - // The 16 is the maximum capability of hardware. Here use 12 - if( number > 12 ) { - //Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 12, NO_INCREMENT ); - for( i=0; i<12; i++ ) // For Al2230 - Wb35Reg_WriteSync( pHwData, 0x0864, pltmp[i] ); + /* The 16 is the maximum capability of hardware. Here use 12 */ + if (number > 12) { + for (i = 0; i < 12; i++) /* For Al2230 */ + Wb35Reg_WriteSync(pHwData, 0x0864, pltmp[i]); pltmp += 12; number -= 12; } - // Write to register. number must less and equal than 16 - for( i=0; iCalOneTime ) + /* Calibration only 1 time */ + if (pHwData->CalOneTime) return; pHwData->CalOneTime = 1; - switch( pHwData->phy_type ) - { - case RF_AIROHA_2230: - - // 20060511.1 --- Modifying the follow step for Rx issue----------------- - ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x07<<20)|0xE168E, 20); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(10); - ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( al2230_rf_data[7], 20); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(10); - - case RF_AIROHA_2230S: // 20060420 Add this - - // 20060511.1 --- Modifying the follow step for Rx issue----------------- - Wb35Reg_WriteSync( pHwData, 0x03d4, 0x80 );// regulator on only - msleep(10); // Modify 20051221.1.b - - Wb35Reg_WriteSync( pHwData, 0x03d4, 0xa0 );// PLL_PD REF_PD set to 0 - msleep(10); // Modify 20051221.1.b - - Wb35Reg_WriteSync( pHwData, 0x03d4, 0xe0 );// MLK_EN - Wb35Reg_WriteSync( pHwData, 0x03b0, 1 );// Reset hardware first - msleep(10); // Add this 20051221.1.b - //------------------------------------------------------------------------ - - // The follow code doesn't use the burst-write mode - //phy_set_rf_data(phw_data, 0x0F, (0x0F<<20) | 0xF01A0); //Raise Initial Setting - ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x0F<<20) | 0xF01A0, 20); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - - ltmp = pHwData->reg.BB5C & 0xfffff000; - Wb35Reg_WriteSync( pHwData, 0x105c, ltmp ); - pHwData->reg.BB50 |= 0x13;//(MASK_IQCAL_MODE|MASK_CALIB_START);//20060315.1 modify - Wb35Reg_WriteSync(pHwData, 0x1050, pHwData->reg.BB50); - msleep(5); - - //phy_set_rf_data(phw_data, 0x0F, (0x0F<<20) | 0xF01B0); //Activate Filter Cal. - ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x0F<<20) | 0xF01B0, 20); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(5); - - //phy_set_rf_data(phw_data, 0x0F, (0x0F<<20) | 0xF01e0); //Activate TX DCC - ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x0F<<20) | 0xF01E0, 20); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(5); - - //phy_set_rf_data(phw_data, 0x0F, (0x0F<<20) | 0xF01A0); //Resotre Initial Setting - ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( (0x0F<<20) | 0xF01A0, 20); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - -// //Force TXI(Q)P(N) to normal control - Wb35Reg_WriteSync( pHwData, 0x105c, pHwData->reg.BB5C ); - pHwData->reg.BB50 &= ~0x13;//(MASK_IQCAL_MODE|MASK_CALIB_START); - Wb35Reg_WriteSync( pHwData, 0x1050, pHwData->reg.BB50); - break; - - case RF_AIROHA_7230: - - //RF parameters have filled completely, PLL_ON should be - //pulled high - Wb35Reg_WriteSync( pHwData, 0x03dc, 0x00000080 ); - #ifdef _PE_STATE_DUMP_ - printk("* PLL_ON high\n"); - #endif - - //2.4GHz - //ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x1ABA8F; - //Wb35Reg_WriteSync pHwData, 0x0864, ltmp ); - //msleep(1); // Sleep 1 ms - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x9ABA8F; - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(5); - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x3ABA8F; - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(5); - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x1ABA8F; - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(5); - - //5GHz - Wb35Reg_WriteSync( pHwData, 0x03dc, 0x00000000 ); - #ifdef _PE_STATE_DUMP_ - printk("* PLL_ON low\n"); - #endif - - number = sizeof(al7230_rf_data_50)/sizeof(al7230_rf_data_50[0]); - Set_ChanIndep_RfData_al7230_50(pHwData, pltmp, number); - // Write to register. number must less and equal than 16 - for( i=0; ireg.BB5C & 0xfffff000; - Wb35Reg_WriteSync( pHwData, 0x105c, ltmp ); - Wb35Reg_WriteSync( pHwData, 0x1058, 0 ); - pHwData->reg.BB50 |= 0x3;//(MASK_IQCAL_MODE|MASK_CALIB_START);//20060630 - Wb35Reg_WriteSync(pHwData, 0x1050, pHwData->reg.BB50); - - //----- Calibration (1). VCO frequency calibration - //Calibration (1a.0). Synthesizer reset (HTHo corrected 2005/05/10) - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x0F<<24) | 0x00101E, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(5); // Sleep 5ms - //Calibration (1a). VCO frequency calibration mode ; waiting 2msec VCO calibration time - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFE69c0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(2); // Sleep 2ms - - //----- Calibration (2). TX baseband Gm-C filter auto-tuning - //Calibration (2a). turn off ENCAL signal - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xF8EBC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (2b.0). TX filter auto-tuning BW: TFLBW=101 (TC5376A default) - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x07<<24) | 0x0C68CE, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (2b). send TX reset signal (HTHo corrected May 10, 2005) - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x0F<<24) | 0x00201E, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (2c). turn-on TX Gm-C filter auto-tuning - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFCEBC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - udelay(150); // Sleep 150 us - //turn off ENCAL signal - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xF8EBC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - - //----- Calibration (3). RX baseband Gm-C filter auto-tuning - //Calibration (3a). turn off ENCAL signal - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (3b.0). RX filter auto-tuning BW: RFLBW=100 (TC5376A+corner default; July 26, 2005) - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x07<<24) | 0x0C68CE, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (3b). send RX reset signal (HTHo corrected May 10, 2005) - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x0F<<24) | 0x00401E, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (3c). turn-on RX Gm-C filter auto-tuning - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFEEDC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - udelay(150); // Sleep 150 us - //Calibration (3e). turn off ENCAL signal - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - - //----- Calibration (4). TX LO leakage calibration - //Calibration (4a). TX LO leakage calibration - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFD6BC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - udelay(150); // Sleep 150 us - - //----- Calibration (5). RX DC offset calibration - //Calibration (5a). turn off ENCAL signal and set to RX SW DC caliration mode - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (5b). turn off AGC servo-loop & RSSI - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x01<<24) | 0xEBFFC2, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - - //; for LNA=11 -------- - //Calibration (5c-h). RX DC offset current bias ON; & LNA=11; RXVGA=111111 - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x06<<24) | 0x343FCC, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFF6DC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(2); // Sleep 2ms - //Calibration (5f). turn off ENCAL signal - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - - //; for LNA=10 -------- - //Calibration (5c-m). RX DC offset current bias ON; & LNA=10; RXVGA=111111 - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x06<<24) | 0x342FCC, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFF6DC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(2); // Sleep 2ms - //Calibration (5f). turn off ENCAL signal - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - - //; for LNA=01 -------- - //Calibration (5c-m). RX DC offset current bias ON; & LNA=01; RXVGA=111111 - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x06<<24) | 0x341FCC, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFF6DC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(2); // Sleep 2ms - //Calibration (5f). turn off ENCAL signal - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - - //; for LNA=00 -------- - //Calibration (5c-l). RX DC offset current bias ON; & LNA=00; RXVGA=111111 - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x06<<24) | 0x340FCC, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFF6DC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(2); // Sleep 2ms - //Calibration (5f). turn off ENCAL signal - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xFAEDC0, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - //Calibration (5g). turn on AGC servo-loop - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x01<<24) | 0xEFFFC2, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - - //; ----- Calibration (7). Switch RF chip to normal mode - //0x00 0xF86100 ; 3E184 ; Switch RF chip to normal mode -// msleep(10); // @@ 20060721 - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( (0x00<<24) | 0xF86100, 24); - Wb35Reg_WriteSync( pHwData, 0x0864, ltmp ); - msleep(5); // Sleep 5 ms - -// //write back -// Wb35Reg_WriteSync(pHwData, 0x105c, pHwData->reg.BB5C); -// pHwData->reg.BB50 &= ~0x13;//(MASK_IQCAL_MODE|MASK_CALIB_START); // 20060315.1 fix -// Wb35Reg_WriteSync(pHwData, 0x1050, pHwData->reg.BB50); -// msleep(1); // Sleep 1 ms - break; + switch (pHwData->phy_type) { + case RF_AIROHA_2230: + ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse((0x07 << 20) | 0xE168E, 20); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(10); + ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse(al2230_rf_data[7], 20); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(10); + case RF_AIROHA_2230S: + Wb35Reg_WriteSync(pHwData, 0x03d4, 0x80); /* regulator on only */ + msleep(10); + Wb35Reg_WriteSync(pHwData, 0x03d4, 0xa0); /* PLL_PD REF_PD set to 0 */ + msleep(10); + Wb35Reg_WriteSync(pHwData, 0x03d4, 0xe0); /* MLK_EN */ + Wb35Reg_WriteSync(pHwData, 0x03b0, 1); /* Reset hardware first */ + msleep(10); + /* ========================================================= */ + + /* The follow code doesn't use the burst-write mode */ + ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse((0x0F<<20) | 0xF01A0, 20); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + + ltmp = pHwData->reg.BB5C & 0xfffff000; + Wb35Reg_WriteSync(pHwData, 0x105c, ltmp); + pHwData->reg.BB50 |= 0x13; /* (MASK_IQCAL_MODE|MASK_CALIB_START) */ + Wb35Reg_WriteSync(pHwData, 0x1050, pHwData->reg.BB50); + msleep(5); + + ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse((0x0F << 20) | 0xF01B0, 20); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + + ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse((0x0F << 20) | 0xF01E0, 20); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + + ltmp = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse((0x0F << 20) | 0xF01A0, 20); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp) ; + + Wb35Reg_WriteSync(pHwData, 0x105c, pHwData->reg.BB5C); + pHwData->reg.BB50 &= ~0x13; /* (MASK_IQCAL_MODE|MASK_CALIB_START); */ + Wb35Reg_WriteSync(pHwData, 0x1050, pHwData->reg.BB50); + break; + case RF_AIROHA_7230: + /* RF parameters have filled completely, PLL_ON should be pulled high */ + Wb35Reg_WriteSync(pHwData, 0x03dc, 0x00000080); + #ifdef _PE_STATE_DUMP_ + printk("* PLL_ON high\n"); + #endif + + /* 2.4GHz */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x9ABA8F; + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x3ABA8F; + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x1ABA8F; + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + + /* 5GHz */ + Wb35Reg_WriteSync(pHwData, 0x03dc, 0x00000000); + #ifdef _PE_STATE_DUMP_ + printk("* PLL_ON low\n"); + #endif + + number = sizeof(al7230_rf_data_50) / sizeof(al7230_rf_data_50[0]); + Set_ChanIndep_RfData_al7230_50(pHwData, pltmp, number); + /* Write to register. number must less and equal than 16 */ + for (i = 0; i < number; i++) + Wb35Reg_WriteSync(pHwData, 0x0864, pltmp[i]); + msleep(5); + + Wb35Reg_WriteSync(pHwData, 0x03dc, 0x00000080); + #ifdef _PE_STATE_DUMP_ + printk("* PLL_ON high\n"); + #endif + + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x9ABA8F; + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x3ABA8F; + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x12BACF; + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + break; + case RF_WB_242: + case RF_WB_242_1: + /* for FA5976A */ + ltmp = pHwData->reg.BB5C & 0xfffff000; + Wb35Reg_WriteSync(pHwData, 0x105c, ltmp); + Wb35Reg_WriteSync(pHwData, 0x1058, 0); + pHwData->reg.BB50 |= 0x3; /* (MASK_IQCAL_MODE|MASK_CALIB_START); */ + Wb35Reg_WriteSync(pHwData, 0x1050, pHwData->reg.BB50); + + /* ----- Calibration (1). VCO frequency calibration */ + /* Calibration (1a.0). Synthesizer reset */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x0F<<24) | 0x00101E, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + /* Calibration (1a). VCO frequency calibration mode ; waiting 2msec VCO calibration time */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFE69c0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(2); + + /* ----- Calibration (2). TX baseband Gm-C filter auto-tuning */ + /* Calibration (2a). turn off ENCAL signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xF8EBC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (2b.0). TX filter auto-tuning BW: TFLBW=101 (TC5376A default) */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x07<<24) | 0x0C68CE, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (2b). send TX reset signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x0F<<24) | 0x00201E, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (2c). turn-on TX Gm-C filter auto-tuning */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFCEBC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + udelay(150); /* Sleep 150 us */ + /* turn off ENCAL signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xF8EBC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + + /* ----- Calibration (3). RX baseband Gm-C filter auto-tuning */ + /* Calibration (3a). turn off ENCAL signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFAEDC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (3b.0). RX filter auto-tuning BW: RFLBW=100 (TC5376A+corner default;) */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x07<<24) | 0x0C68CE, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (3b). send RX reset signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x0F<<24) | 0x00401E, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (3c). turn-on RX Gm-C filter auto-tuning */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFEEDC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + udelay(150); /* Sleep 150 us */ + /* Calibration (3e). turn off ENCAL signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFAEDC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + + /* ----- Calibration (4). TX LO leakage calibration */ + /* Calibration (4a). TX LO leakage calibration */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFD6BC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + udelay(150); /* Sleep 150 us */ + + /* ----- Calibration (5). RX DC offset calibration */ + /* Calibration (5a). turn off ENCAL signal and set to RX SW DC calibration mode */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFAEDC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (5b). turn off AGC servo-loop & RSSI */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x01<<24) | 0xEBFFC2, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + + /* for LNA=11 -------- */ + /* Calibration (5c-h). RX DC offset current bias ON; & LNA=11; RXVGA=111111 */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x06<<24) | 0x343FCC, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFF6DC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(2); + /* Calibration (5f). turn off ENCAL signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFAEDC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + + /* for LNA=10 -------- */ + /* Calibration (5c-m). RX DC offset current bias ON; & LNA=10; RXVGA=111111 */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x06<<24) | 0x342FCC, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFF6DC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(2); + /* Calibration (5f). turn off ENCAL signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFAEDC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + + /* for LNA=01 -------- */ + /* Calibration (5c-m). RX DC offset current bias ON; & LNA=01; RXVGA=111111 */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x06<<24) | 0x341FCC, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFF6DC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(2); + /* Calibration (5f). turn off ENCAL signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFAEDC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + + /* for LNA=00 -------- */ + /* Calibration (5c-l). RX DC offset current bias ON; & LNA=00; RXVGA=111111 */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x06<<24) | 0x340FCC, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (5d). turn on RX DC offset cal function; and waiting 2 msec cal time */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFF6DC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(2); + /* Calibration (5f). turn off ENCAL signal */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xFAEDC0, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + /* Calibration (5g). turn on AGC servo-loop */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x01<<24) | 0xEFFFC2, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + + /* ----- Calibration (7). Switch RF chip to normal mode */ + /* 0x00 0xF86100 ; 3E184 ; Switch RF chip to normal mode */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse((0x00<<24) | 0xF86100, 24); + Wb35Reg_WriteSync(pHwData, 0x0864, ltmp); + msleep(5); + break; } } -void BBProcessor_AL7230_2400( struct hw_data * pHwData) +void BBProcessor_AL7230_2400(struct hw_data *pHwData) { struct wb35_reg *reg = &pHwData->reg; u32 pltmp[12]; - pltmp[0] = 0x16A8337A; // 0x16a5215f; // 0x1000 AGC_Ctrl1 - pltmp[1] = 0x9AFF9AA6; // 0x9aff9ca6; // 0x1004 AGC_Ctrl2 - pltmp[2] = 0x55D00A04; // 0x55d00a04; // 0x1008 AGC_Ctrl3 - pltmp[3] = 0xFFF72031; // 0xFfFf2138; // 0x100c AGC_Ctrl4 + pltmp[0] = 0x16A8337A; /* 0x1000 AGC_Ctrl1 */ + pltmp[1] = 0x9AFF9AA6; /* 0x1004 AGC_Ctrl2 */ + pltmp[2] = 0x55D00A04; /* 0x1008 AGC_Ctrl3 */ + pltmp[3] = 0xFFF72031; /* 0x100c AGC_Ctrl4 */ reg->BB0C = 0xFFF72031; - pltmp[4] = 0x0FacDCC5; // 0x1010 AGC_Ctrl5 // 20050927 0x0FacDCB7 - pltmp[5] = 0x00CAA333; // 0x00eaa333; // 0x1014 AGC_Ctrl6 - pltmp[6] = 0xF2211111; // 0x11111111; // 0x1018 AGC_Ctrl7 - pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 - pltmp[8] = 0x06443440; // 0x1020 AGC_Ctrl9 - pltmp[9] = 0xA8002A79; // 0xa9002A79; // 0x1024 AGC_Ctrl10 - pltmp[10] = 0x40000528; // 20050927 0x40000228 - pltmp[11] = 0x232D7F30; // 0x23457f30;// 0x102c A_ACQ_Ctrl + pltmp[4] = 0x0FacDCC5; /* 0x1010 AGC_Ctrl5 */ + pltmp[5] = 0x00CAA333; /* 0x1014 AGC_Ctrl6 */ + pltmp[6] = 0xF2211111; /* 0x1018 AGC_Ctrl7 */ + pltmp[7] = 0x0FA3F0ED; /* 0x101c AGC_Ctrl8 */ + pltmp[8] = 0x06443440; /* 0x1020 AGC_Ctrl9 */ + pltmp[9] = 0xA8002A79; /* 0x1024 AGC_Ctrl10 */ + pltmp[10] = 0x40000528; + pltmp[11] = 0x232D7F30; /* 0x102c A_ACQ_Ctrl */ reg->BB2C = 0x232D7F30; - Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); + Wb35Reg_BurstWrite(pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT); - pltmp[0] = 0x00002c54; // 0x1030 B_ACQ_Ctrl + pltmp[0] = 0x00002c54; /* 0x1030 B_ACQ_Ctrl */ reg->BB30 = 0x00002c54; - pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl - pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl - pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter + pltmp[1] = 0x00C0D6C5; /* 0x1034 A_TXRX_Ctrl */ + pltmp[2] = 0x5B2C8769; /* 0x1038 B_TXRX_Ctrl */ + pltmp[3] = 0x00000000; /* 0x103c 11a TX LS filter */ reg->BB3C = 0x00000000; - pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter - pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter - pltmp[6] = 0x00332C1B; // 0x00453B24; // 0x1048 11b TX RC filter - pltmp[7] = 0x0A00FEFF; // 0x0E00FEFF; // 0x104c 11b TX RC filter - pltmp[8] = 0x2B106208; // 0x1050 MODE_Ctrl + pltmp[4] = 0x00003F29; /* 0x1040 11a TX LS filter */ + pltmp[5] = 0x0EFEFBFE; /* 0x1044 11a TX LS filter */ + pltmp[6] = 0x00332C1B; /* 0x1048 11b TX RC filter */ + pltmp[7] = 0x0A00FEFF; /* 0x104c 11b TX RC filter */ + pltmp[8] = 0x2B106208; /* 0x1050 MODE_Ctrl */ reg->BB50 = 0x2B106208; - pltmp[9] = 0; // 0x1054 + pltmp[9] = 0; /* 0x1054 */ reg->BB54 = 0x00000000; - pltmp[10] = 0x52524242; // 0x64645252; // 0x1058 IQ_Alpha + pltmp[10] = 0x52524242; /* 0x1058 IQ_Alpha */ reg->BB58 = 0x52524242; - pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel - Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); - + pltmp[11] = 0xAA0AC000; /* 0x105c DC_Cancel */ + Wb35Reg_BurstWrite(pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT); } -void BBProcessor_AL7230_5000( struct hw_data * pHwData) +void BBProcessor_AL7230_5000(struct hw_data *pHwData) { struct wb35_reg *reg = &pHwData->reg; u32 pltmp[12]; - pltmp[0] = 0x16AA6678; // 0x1000 AGC_Ctrl1 - pltmp[1] = 0x9AFFA0B2; // 0x1004 AGC_Ctrl2 - pltmp[2] = 0x55D00A04; // 0x1008 AGC_Ctrl3 - pltmp[3] = 0xEFFF233E; // 0x100c AGC_Ctrl4 + pltmp[0] = 0x16AA6678; /* 0x1000 AGC_Ctrl1 */ + pltmp[1] = 0x9AFFA0B2; /* 0x1004 AGC_Ctrl2 */ + pltmp[2] = 0x55D00A04; /* 0x1008 AGC_Ctrl3 */ + pltmp[3] = 0xEFFF233E; /* 0x100c AGC_Ctrl4 */ reg->BB0C = 0xEFFF233E; - pltmp[4] = 0x0FacDCC5; // 0x1010 AGC_Ctrl5 // 20050927 0x0FacDCB7 - pltmp[5] = 0x00CAA333; // 0x1014 AGC_Ctrl6 - pltmp[6] = 0xF2432111; // 0x1018 AGC_Ctrl7 - pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 - pltmp[8] = 0x05C43440; // 0x1020 AGC_Ctrl9 - pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 - pltmp[10] = 0x40000528; // 20050927 0x40000228 - pltmp[11] = 0x232FDF30;// 0x102c A_ACQ_Ctrl + pltmp[4] = 0x0FacDCC5; /* 0x1010 AGC_Ctrl5 */ + pltmp[5] = 0x00CAA333; /* 0x1014 AGC_Ctrl6 */ + pltmp[6] = 0xF2432111; /* 0x1018 AGC_Ctrl7 */ + pltmp[7] = 0x0FA3F0ED; /* 0x101c AGC_Ctrl8 */ + pltmp[8] = 0x05C43440; /* 0x1020 AGC_Ctrl9 */ + pltmp[9] = 0x00002A79; /* 0x1024 AGC_Ctrl10 */ + pltmp[10] = 0x40000528; + pltmp[11] = 0x232FDF30;/* 0x102c A_ACQ_Ctrl */ reg->BB2C = 0x232FDF30; - Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); + Wb35Reg_BurstWrite(pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT); - pltmp[0] = 0x80002C7C; // 0x1030 B_ACQ_Ctrl - pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl - pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl - pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter + pltmp[0] = 0x80002C7C; /* 0x1030 B_ACQ_Ctrl */ + pltmp[1] = 0x00C0D6C5; /* 0x1034 A_TXRX_Ctrl */ + pltmp[2] = 0x5B2C8769; /* 0x1038 B_TXRX_Ctrl */ + pltmp[3] = 0x00000000; /* 0x103c 11a TX LS filter */ reg->BB3C = 0x00000000; - pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter - pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter - pltmp[6] = 0x00332C1B; // 0x1048 11b TX RC filter - pltmp[7] = 0x0A00FEFF; // 0x104c 11b TX RC filter - pltmp[8] = 0x2B107208; // 0x1050 MODE_Ctrl + pltmp[4] = 0x00003F29; /* 0x1040 11a TX LS filter */ + pltmp[5] = 0x0EFEFBFE; /* 0x1044 11a TX LS filter */ + pltmp[6] = 0x00332C1B; /* 0x1048 11b TX RC filter */ + pltmp[7] = 0x0A00FEFF; /* 0x104c 11b TX RC filter */ + pltmp[8] = 0x2B107208; /* 0x1050 MODE_Ctrl */ reg->BB50 = 0x2B107208; - pltmp[9] = 0; // 0x1054 + pltmp[9] = 0; /* 0x1054 */ reg->BB54 = 0x00000000; - pltmp[10] = 0x52524242; // 0x1058 IQ_Alpha + pltmp[10] = 0x52524242; /* 0x1058 IQ_Alpha */ reg->BB58 = 0x52524242; - pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel - Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); - + pltmp[11] = 0xAA0AC000; /* 0x105c DC_Cancel */ + Wb35Reg_BurstWrite(pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT); } -//============================================================================================================= -// BBProcessorPowerupInit -- -// -// Description: -// Initialize the Baseband processor. -// -// Arguments: -// pHwData - Handle of the USB Device. -// -// Return values: -// None. -//============================================================================================================= -void -BBProcessor_initial( struct hw_data * pHwData ) +/* + * =========================================================================== + * BBProcessorPowerupInit -- + * + * Description: + * Initialize the Baseband processor. + * + * Arguments: + * pHwData - Handle of the USB Device. + * + * Return values: + * None. + *============================================================================ + */ +void BBProcessor_initial(struct hw_data *pHwData) { struct wb35_reg *reg = &pHwData->reg; u32 i, pltmp[12]; - switch( pHwData->phy_type ) - { - case RF_MAXIM_V1: // Initializng the Winbond 2nd BB(with Phy board (v1) + Maxim 331) - - pltmp[0] = 0x16F47E77; // 0x1000 AGC_Ctrl1 - pltmp[1] = 0x9AFFAEA4; // 0x1004 AGC_Ctrl2 - pltmp[2] = 0x55D00A04; // 0x1008 AGC_Ctrl3 - pltmp[3] = 0xEFFF1A34; // 0x100c AGC_Ctrl4 - reg->BB0C = 0xEFFF1A34; - pltmp[4] = 0x0FABE0B7; // 0x1010 AGC_Ctrl5 - pltmp[5] = 0x00CAA332; // 0x1014 AGC_Ctrl6 - pltmp[6] = 0xF6632111; // 0x1018 AGC_Ctrl7 - pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 - pltmp[8] = 0x04CC3640; // 0x1020 AGC_Ctrl9 - pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 - pltmp[10] = (pHwData->phy_type==3) ? 0x40000a28 : 0x40000228; // 0x1028 MAXIM_331(b31=0) + WBRF_V1(b11=1) : MAXIM_331(b31=0) + WBRF_V2(b11=0) - pltmp[11] = 0x232FDF30; // 0x102c A_ACQ_Ctrl - reg->BB2C = 0x232FDF30; //Modify for 33's 1.0.95.xxx version, antenna 1 - Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); - - pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl - reg->BB30 = 0x00002C54; - pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl - pltmp[2] = 0x5B6C8769; // 0x1038 B_TXRX_Ctrl - pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter - reg->BB3C = 0x00000000; - pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter - pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter - pltmp[6] = 0x00453B24; // 0x1048 11b TX RC filter - pltmp[7] = 0x0E00FEFF; // 0x104c 11b TX RC filter - pltmp[8] = 0x27106208; // 0x1050 MODE_Ctrl - reg->BB50 = 0x27106208; - pltmp[9] = 0; // 0x1054 - reg->BB54 = 0x00000000; - pltmp[10] = 0x64646464; // 0x1058 IQ_Alpha - reg->BB58 = 0x64646464; - pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel - Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); - - Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); - break; - - //------------------------------------------------------------------ - //[20040722 WK] - //Only for baseband version 2 -// case RF_MAXIM_317: - case RF_MAXIM_2825: - case RF_MAXIM_2827: - case RF_MAXIM_2828: - - pltmp[0] = 0x16b47e77; // 0x1000 AGC_Ctrl1 - pltmp[1] = 0x9affaea4; // 0x1004 AGC_Ctrl2 - pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 - pltmp[3] = 0xefff1a34; // 0x100c AGC_Ctrl4 - reg->BB0C = 0xefff1a34; - pltmp[4] = 0x0fabe0b7; // 0x1010 AGC_Ctrl5 - pltmp[5] = 0x00caa332; // 0x1014 AGC_Ctrl6 - pltmp[6] = 0xf6632111; // 0x1018 AGC_Ctrl7 - pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 - pltmp[8] = 0x04CC3640; // 0x1020 AGC_Ctrl9 - pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 - pltmp[10] = 0x40000528; // 0x40000128; Modify for 33's 1.0.95 - pltmp[11] = 0x232fdf30; // 0x102c A_ACQ_Ctrl - reg->BB2C = 0x232fdf30; //Modify for 33's 1.0.95.xxx version, antenna 1 - Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); - - pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl - reg->BB30 = 0x00002C54; - pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl - pltmp[2] = 0x5B6C8769; // 0x1038 B_TXRX_Ctrl - pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter - reg->BB3C = 0x00000000; - pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter - pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter - pltmp[6] = 0x00453B24; // 0x1048 11b TX RC filter - pltmp[7] = 0x0D00FDFF; // 0x104c 11b TX RC filter - pltmp[8] = 0x27106208; // 0x1050 MODE_Ctrl - reg->BB50 = 0x27106208; - pltmp[9] = 0; // 0x1054 - reg->BB54 = 0x00000000; - pltmp[10] = 0x64646464; // 0x1058 IQ_Alpha - reg->BB58 = 0x64646464; - pltmp[11] = 0xAA28C000; // 0x105c DC_Cancel - Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); - - Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); - break; - - case RF_MAXIM_2829: - - pltmp[0] = 0x16b47e77; // 0x1000 AGC_Ctrl1 - pltmp[1] = 0x9affaea4; // 0x1004 AGC_Ctrl2 - pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 - pltmp[3] = 0xf4ff1632; // 0xefff1a34; // 0x100c AGC_Ctrl4 Modify for 33's 1.0.95 - reg->BB0C = 0xf4ff1632; // 0xefff1a34; Modify for 33's 1.0.95 - pltmp[4] = 0x0fabe0b7; // 0x1010 AGC_Ctrl5 - pltmp[5] = 0x00caa332; // 0x1014 AGC_Ctrl6 - pltmp[6] = 0xf8632112; // 0xf6632111; // 0x1018 AGC_Ctrl7 Modify for 33's 1.0.95 - pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 - pltmp[8] = 0x04CC3640; // 0x1020 AGC_Ctrl9 - pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 - pltmp[10] = 0x40000528; // 0x40000128; modify for 33's 1.0.95 - pltmp[11] = 0x232fdf30; // 0x102c A_ACQ_Ctrl - reg->BB2C = 0x232fdf30; //Modify for 33's 1.0.95.xxx version, antenna 1 - Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); - - pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl - reg->BB30 = 0x00002C54; - pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl - pltmp[2] = 0x5b2c8769; // 0x5B6C8769; // 0x1038 B_TXRX_Ctrl Modify for 33's 1.0.95 - pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter - reg->BB3C = 0x00000000; - pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter - pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter - pltmp[6] = 0x002c2617; // 0x00453B24; // 0x1048 11b TX RC filter Modify for 33's 1.0.95 - pltmp[7] = 0x0800feff; // 0x0D00FDFF; // 0x104c 11b TX RC filter Modify for 33's 1.0.95 - pltmp[8] = 0x27106208; // 0x1050 MODE_Ctrl - reg->BB50 = 0x27106208; - pltmp[9] = 0; // 0x1054 - reg->BB54 = 0x00000000; - pltmp[10] = 0x64644a4a; // 0x64646464; // 0x1058 IQ_Alpha Modify for 33's 1.0.95 - reg->BB58 = 0x64646464; - pltmp[11] = 0xAA28C000; // 0x105c DC_Cancel - Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); - - Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); - break; - - case RF_AIROHA_2230: - - pltmp[0] = 0X16764A77; // 0x1000 AGC_Ctrl1 //0x16765A77 - pltmp[1] = 0x9affafb2; // 0x1004 AGC_Ctrl2 - pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 - pltmp[3] = 0xFFFd203c; // 0xFFFb203a; // 0x100c AGC_Ctrl4 Modify for 33's 1.0.95.xxx version - reg->BB0C = 0xFFFd203c; - pltmp[4] = 0X0FBFDCc5; // 0X0FBFDCA0; // 0x1010 AGC_Ctrl5 //0x0FB2E0B7 Modify for 33's 1.0.95.xxx version - pltmp[5] = 0x00caa332; // 0x00caa333; // 0x1014 AGC_Ctrl6 Modify for 33's 1.0.95.xxx version - pltmp[6] = 0XF6632111; // 0XF1632112; // 0x1018 AGC_Ctrl7 //0xf6632112 Modify for 33's 1.0.95.xxx version - pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 - pltmp[8] = 0x04C43640; // 0x1020 AGC_Ctrl9 - pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 - pltmp[10] = 0X40000528; //0x40000228 - pltmp[11] = 0x232dfF30; // 0x232A9F30; // 0x102c A_ACQ_Ctrl //0x232a9730 - reg->BB2C = 0x232dfF30; //Modify for 33's 1.0.95.xxx version, antenna 1 - Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); - - pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl - reg->BB30 = 0x00002C54; - pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl - pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl //0x5B6C8769 - pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter - reg->BB3C = 0x00000000; - pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter - pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter - pltmp[6] = BB48_DEFAULT_AL2230_11G; // 0x1048 11b TX RC filter 20060613.2 - reg->BB48 = BB48_DEFAULT_AL2230_11G; // 20051221 ch14 20060613.2 - pltmp[7] = BB4C_DEFAULT_AL2230_11G; // 0x104c 11b TX RC filter 20060613.2 - reg->BB4C = BB4C_DEFAULT_AL2230_11G; // 20060613.1 20060613.2 - pltmp[8] = 0x27106200; // 0x1050 MODE_Ctrl - reg->BB50 = 0x27106200; - pltmp[9] = 0; // 0x1054 - reg->BB54 = 0x00000000; - pltmp[10] = 0x52524242; // 0x1058 IQ_Alpha - reg->BB58 = 0x52524242; - pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel - Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); - - Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); - break; + switch (pHwData->phy_type) { + case RF_MAXIM_V1: /* Initializng the Winbond 2nd BB(with Phy board (v1) + Maxim 331) */ + pltmp[0] = 0x16F47E77; /* 0x1000 AGC_Ctrl1 */ + pltmp[1] = 0x9AFFAEA4; /* 0x1004 AGC_Ctrl2 */ + pltmp[2] = 0x55D00A04; /* 0x1008 AGC_Ctrl3 */ + pltmp[3] = 0xEFFF1A34; /* 0x100c AGC_Ctrl4 */ + reg->BB0C = 0xEFFF1A34; + pltmp[4] = 0x0FABE0B7; /* 0x1010 AGC_Ctrl5 */ + pltmp[5] = 0x00CAA332; /* 0x1014 AGC_Ctrl6 */ + pltmp[6] = 0xF6632111; /* 0x1018 AGC_Ctrl7 */ + pltmp[7] = 0x0FA3F0ED; /* 0x101c AGC_Ctrl8 */ + pltmp[8] = 0x04CC3640; /* 0x1020 AGC_Ctrl9 */ + pltmp[9] = 0x00002A79; /* 0x1024 AGC_Ctrl10 */ + pltmp[10] = (pHwData->phy_type == 3) ? 0x40000a28 : 0x40000228; /* 0x1028 MAXIM_331(b31=0) + WBRF_V1(b11=1) : MAXIM_331(b31=0) + WBRF_V2(b11=0) */ + pltmp[11] = 0x232FDF30; /* 0x102c A_ACQ_Ctrl */ + reg->BB2C = 0x232FDF30; /* Modify for 33's 1.0.95.xxx version, antenna 1 */ + Wb35Reg_BurstWrite(pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT); + + pltmp[0] = 0x00002C54; /* 0x1030 B_ACQ_Ctrl */ + reg->BB30 = 0x00002C54; + pltmp[1] = 0x00C0D6C5; /* 0x1034 A_TXRX_Ctrl */ + pltmp[2] = 0x5B6C8769; /* 0x1038 B_TXRX_Ctrl */ + pltmp[3] = 0x00000000; /* 0x103c 11a TX LS filter */ + reg->BB3C = 0x00000000; + pltmp[4] = 0x00003F29; /* 0x1040 11a TX LS filter */ + pltmp[5] = 0x0EFEFBFE; /* 0x1044 11a TX LS filter */ + pltmp[6] = 0x00453B24; /* 0x1048 11b TX RC filter */ + pltmp[7] = 0x0E00FEFF; /* 0x104c 11b TX RC filter */ + pltmp[8] = 0x27106208; /* 0x1050 MODE_Ctrl */ + reg->BB50 = 0x27106208; + pltmp[9] = 0; /* 0x1054 */ + reg->BB54 = 0x00000000; + pltmp[10] = 0x64646464; /* 0x1058 IQ_Alpha */ + reg->BB58 = 0x64646464; + pltmp[11] = 0xAA0AC000; /* 0x105c DC_Cancel */ + Wb35Reg_BurstWrite(pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT); + + Wb35Reg_Write(pHwData, 0x1070, 0x00000045); + break; - case RF_AIROHA_2230S: // 20060420 Add this - - pltmp[0] = 0X16764A77; // 0x1000 AGC_Ctrl1 //0x16765A77 - pltmp[1] = 0x9affafb2; // 0x1004 AGC_Ctrl2 - pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 - pltmp[3] = 0xFFFd203c; // 0xFFFb203a; // 0x100c AGC_Ctrl4 Modify for 33's 1.0.95.xxx version - reg->BB0C = 0xFFFd203c; - pltmp[4] = 0X0FBFDCc5; // 0X0FBFDCA0; // 0x1010 AGC_Ctrl5 //0x0FB2E0B7 Modify for 33's 1.0.95.xxx version - pltmp[5] = 0x00caa332; // 0x00caa333; // 0x1014 AGC_Ctrl6 Modify for 33's 1.0.95.xxx version - pltmp[6] = 0XF6632111; // 0XF1632112; // 0x1018 AGC_Ctrl7 //0xf6632112 Modify for 33's 1.0.95.xxx version - pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 - pltmp[8] = 0x04C43640; // 0x1020 AGC_Ctrl9 - pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 - pltmp[10] = 0X40000528; //0x40000228 - pltmp[11] = 0x232dfF30; // 0x232A9F30; // 0x102c A_ACQ_Ctrl //0x232a9730 - reg->BB2C = 0x232dfF30; //Modify for 33's 1.0.95.xxx version, antenna 1 - Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); - - pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl - reg->BB30 = 0x00002C54; - pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl - pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl //0x5B6C8769 - pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter - reg->BB3C = 0x00000000; - pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter - pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter - pltmp[6] = BB48_DEFAULT_AL2230_11G; // 0x1048 11b TX RC filter 20060613.2 - reg->BB48 = BB48_DEFAULT_AL2230_11G; // 20051221 ch14 20060613.2 - pltmp[7] = BB4C_DEFAULT_AL2230_11G; // 0x104c 11b TX RC filter 20060613.2 - reg->BB4C = BB4C_DEFAULT_AL2230_11G; // 20060613.1 - pltmp[8] = 0x27106200; // 0x1050 MODE_Ctrl - reg->BB50 = 0x27106200; - pltmp[9] = 0; // 0x1054 - reg->BB54 = 0x00000000; - pltmp[10] = 0x52523232; // 20060419 0x52524242; // 0x1058 IQ_Alpha - reg->BB58 = 0x52523232; // 20060419 0x52524242; - pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel - Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); - - Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); - break; + case RF_MAXIM_2825: + case RF_MAXIM_2827: + case RF_MAXIM_2828: + pltmp[0] = 0x16b47e77; /* 0x1000 AGC_Ctrl1 */ + pltmp[1] = 0x9affaea4; /* 0x1004 AGC_Ctrl2 */ + pltmp[2] = 0x55d00a04; /* 0x1008 AGC_Ctrl3 */ + pltmp[3] = 0xefff1a34; /* 0x100c AGC_Ctrl4 */ + reg->BB0C = 0xefff1a34; + pltmp[4] = 0x0fabe0b7; /* 0x1010 AGC_Ctrl5 */ + pltmp[5] = 0x00caa332; /* 0x1014 AGC_Ctrl6 */ + pltmp[6] = 0xf6632111; /* 0x1018 AGC_Ctrl7 */ + pltmp[7] = 0x0FA3F0ED; /* 0x101c AGC_Ctrl8 */ + pltmp[8] = 0x04CC3640; /* 0x1020 AGC_Ctrl9 */ + pltmp[9] = 0x00002A79; /* 0x1024 AGC_Ctrl10 */ + pltmp[10] = 0x40000528; + pltmp[11] = 0x232fdf30; /* 0x102c A_ACQ_Ctrl */ + reg->BB2C = 0x232fdf30; /* antenna 1 */ + Wb35Reg_BurstWrite(pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT); + + pltmp[0] = 0x00002C54; /* 0x1030 B_ACQ_Ctrl */ + reg->BB30 = 0x00002C54; + pltmp[1] = 0x00C0D6C5; /* 0x1034 A_TXRX_Ctrl */ + pltmp[2] = 0x5B6C8769; /* 0x1038 B_TXRX_Ctrl */ + pltmp[3] = 0x00000000; /* 0x103c 11a TX LS filter */ + reg->BB3C = 0x00000000; + pltmp[4] = 0x00003F29; /* 0x1040 11a TX LS filter */ + pltmp[5] = 0x0EFEFBFE; /* 0x1044 11a TX LS filter */ + pltmp[6] = 0x00453B24; /* 0x1048 11b TX RC filter */ + pltmp[7] = 0x0D00FDFF; /* 0x104c 11b TX RC filter */ + pltmp[8] = 0x27106208; /* 0x1050 MODE_Ctrl */ + reg->BB50 = 0x27106208; + pltmp[9] = 0; /* 0x1054 */ + reg->BB54 = 0x00000000; + pltmp[10] = 0x64646464; /* 0x1058 IQ_Alpha */ + reg->BB58 = 0x64646464; + pltmp[11] = 0xAA28C000; /* 0x105c DC_Cancel */ + Wb35Reg_BurstWrite(pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT); + + Wb35Reg_Write(pHwData, 0x1070, 0x00000045); + break; - case RF_AIROHA_7230: -/* - pltmp[0] = 0x16a84a77; // 0x1000 AGC_Ctrl1 - pltmp[1] = 0x9affafb2; // 0x1004 AGC_Ctrl2 - pltmp[2] = 0x55d00a04; // 0x1008 AGC_Ctrl3 - pltmp[3] = 0xFFFb203a; // 0x100c AGC_Ctrl4 - reg->BB0c = 0xFFFb203a; - pltmp[4] = 0x0FBFDCB7; // 0x1010 AGC_Ctrl5 - pltmp[5] = 0x00caa333; // 0x1014 AGC_Ctrl6 - pltmp[6] = 0xf6632112; // 0x1018 AGC_Ctrl7 - pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 - pltmp[8] = 0x04C43640; // 0x1020 AGC_Ctrl9 - pltmp[9] = 0x00002A79; // 0x1024 AGC_Ctrl10 - pltmp[10] = 0x40000228; - pltmp[11] = 0x232A9F30;// 0x102c A_ACQ_Ctrl - reg->BB2c = 0x232A9F30; - Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); - - pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl - reg->BB30 = 0x00002C54; - pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl - pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl - pltmp[3] = 0x00000000; // 0x103c 11a TX LS filter - reg->BB3c = 0x00000000; - pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter - pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter - pltmp[6] = 0x00453B24; // 0x1048 11b TX RC filter - pltmp[7] = 0x0E00FEFF; // 0x104c 11b TX RC filter - pltmp[8] = 0x27106200; // 0x1050 MODE_Ctrl - reg->BB50 = 0x27106200; - pltmp[9] = 0; // 0x1054 - reg->BB54 = 0x00000000; - pltmp[10] = 0x64645252; // 0x1058 IQ_Alpha - reg->BB58 = 0x64645252; - pltmp[11] = 0xAA0AC000; // 0x105c DC_Cancel - Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); -*/ - BBProcessor_AL7230_2400( pHwData ); - - Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); - break; + case RF_MAXIM_2829: + pltmp[0] = 0x16b47e77; /* 0x1000 AGC_Ctrl1 */ + pltmp[1] = 0x9affaea4; /* 0x1004 AGC_Ctrl2 */ + pltmp[2] = 0x55d00a04; /* 0x1008 AGC_Ctrl3 */ + pltmp[3] = 0xf4ff1632; /* 0x100c AGC_Ctrl4 */ + reg->BB0C = 0xf4ff1632; + pltmp[4] = 0x0fabe0b7; /* 0x1010 AGC_Ctrl5 */ + pltmp[5] = 0x00caa332; /* 0x1014 AGC_Ctrl6 */ + pltmp[6] = 0xf8632112; /* 0x1018 AGC_Ctrl7 */ + pltmp[7] = 0x0FA3F0ED; /* 0x101c AGC_Ctrl8 */ + pltmp[8] = 0x04CC3640; /* 0x1020 AGC_Ctrl9 */ + pltmp[9] = 0x00002A79; /* 0x1024 AGC_Ctrl10 */ + pltmp[10] = 0x40000528; + pltmp[11] = 0x232fdf30; /* 0x102c A_ACQ_Ctrl */ + reg->BB2C = 0x232fdf30; /* antenna 1 */ + Wb35Reg_BurstWrite(pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT); + + pltmp[0] = 0x00002C54; /* 0x1030 B_ACQ_Ctrl */ + reg->BB30 = 0x00002C54; + pltmp[1] = 0x00C0D6C5; /* 0x1034 A_TXRX_Ctrl */ + pltmp[2] = 0x5b2c8769; /* 0x1038 B_TXRX_Ctrl */ + pltmp[3] = 0x00000000; /* 0x103c 11a TX LS filter */ + reg->BB3C = 0x00000000; + pltmp[4] = 0x00003F29; /* 0x1040 11a TX LS filter */ + pltmp[5] = 0x0EFEFBFE; /* 0x1044 11a TX LS filter */ + pltmp[6] = 0x002c2617; /* 0x1048 11b TX RC filter */ + pltmp[7] = 0x0800feff; /* 0x104c 11b TX RC filter */ + pltmp[8] = 0x27106208; /* 0x1050 MODE_Ctrl */ + reg->BB50 = 0x27106208; + pltmp[9] = 0; /* 0x1054 */ + reg->BB54 = 0x00000000; + pltmp[10] = 0x64644a4a; /* 0x1058 IQ_Alpha */ + reg->BB58 = 0x64646464; + pltmp[11] = 0xAA28C000; /* 0x105c DC_Cancel */ + Wb35Reg_BurstWrite(pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT); + Wb35Reg_Write(pHwData, 0x1070, 0x00000045); + break; + case RF_AIROHA_2230: + pltmp[0] = 0X16764A77; /* 0x1000 AGC_Ctrl1 */ + pltmp[1] = 0x9affafb2; /* 0x1004 AGC_Ctrl2 */ + pltmp[2] = 0x55d00a04; /* 0x1008 AGC_Ctrl3 */ + pltmp[3] = 0xFFFd203c; /* 0x100c AGC_Ctrl4 */ + reg->BB0C = 0xFFFd203c; + pltmp[4] = 0X0FBFDCc5; /* 0x1010 AGC_Ctrl5 */ + pltmp[5] = 0x00caa332; /* 0x1014 AGC_Ctrl6 */ + pltmp[6] = 0XF6632111; /* 0x1018 AGC_Ctrl7 */ + pltmp[7] = 0x0FA3F0ED; /* 0x101c AGC_Ctrl8 */ + pltmp[8] = 0x04C43640; /* 0x1020 AGC_Ctrl9 */ + pltmp[9] = 0x00002A79; /* 0x1024 AGC_Ctrl10 */ + pltmp[10] = 0X40000528; + pltmp[11] = 0x232dfF30; /* 0x102c A_ACQ_Ctrl */ + reg->BB2C = 0x232dfF30; /* antenna 1 */ + Wb35Reg_BurstWrite(pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT); + + pltmp[0] = 0x00002C54; /* 0x1030 B_ACQ_Ctrl */ + reg->BB30 = 0x00002C54; + pltmp[1] = 0x00C0D6C5; /* 0x1034 A_TXRX_Ctrl */ + pltmp[2] = 0x5B2C8769; /* 0x1038 B_TXRX_Ctrl */ + pltmp[3] = 0x00000000; /* 0x103c 11a TX LS filter */ + reg->BB3C = 0x00000000; + pltmp[4] = 0x00003F29; /* 0x1040 11a TX LS filter */ + pltmp[5] = 0x0EFEFBFE; /* 0x1044 11a TX LS filter */ + pltmp[6] = BB48_DEFAULT_AL2230_11G; /* 0x1048 11b TX RC filter */ + reg->BB48 = BB48_DEFAULT_AL2230_11G; /* 20051221 ch14 */ + pltmp[7] = BB4C_DEFAULT_AL2230_11G; /* 0x104c 11b TX RC filter */ + reg->BB4C = BB4C_DEFAULT_AL2230_11G; + pltmp[8] = 0x27106200; /* 0x1050 MODE_Ctrl */ + reg->BB50 = 0x27106200; + pltmp[9] = 0; /* 0x1054 */ + reg->BB54 = 0x00000000; + pltmp[10] = 0x52524242; /* 0x1058 IQ_Alpha */ + reg->BB58 = 0x52524242; + pltmp[11] = 0xAA0AC000; /* 0x105c DC_Cancel */ + Wb35Reg_BurstWrite(pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT); + + Wb35Reg_Write(pHwData, 0x1070, 0x00000045); + break; + case RF_AIROHA_2230S: + pltmp[0] = 0X16764A77; /* 0x1000 AGC_Ctrl1 */ + pltmp[1] = 0x9affafb2; /* 0x1004 AGC_Ctrl2 */ + pltmp[2] = 0x55d00a04; /* 0x1008 AGC_Ctrl3 */ + pltmp[3] = 0xFFFd203c; /* 0x100c AGC_Ctrl4 */ + reg->BB0C = 0xFFFd203c; + pltmp[4] = 0X0FBFDCc5; /* 0x1010 AGC_Ctrl5 */ + pltmp[5] = 0x00caa332; /* 0x1014 AGC_Ctrl6 */ + pltmp[6] = 0XF6632111; /* 0x1018 AGC_Ctrl7 */ + pltmp[7] = 0x0FA3F0ED; /* 0x101c AGC_Ctrl8 */ + pltmp[8] = 0x04C43640; /* 0x1020 AGC_Ctrl9 */ + pltmp[9] = 0x00002A79; /* 0x1024 AGC_Ctrl10 */ + pltmp[10] = 0X40000528; + pltmp[11] = 0x232dfF30; /* 0x102c A_ACQ_Ctrl */ + reg->BB2C = 0x232dfF30; /* antenna 1 */ + Wb35Reg_BurstWrite(pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT); + + pltmp[0] = 0x00002C54; /* 0x1030 B_ACQ_Ctrl */ + reg->BB30 = 0x00002C54; + pltmp[1] = 0x00C0D6C5; /* 0x1034 A_TXRX_Ctrl */ + pltmp[2] = 0x5B2C8769; /* 0x1038 B_TXRX_Ctrl */ + pltmp[3] = 0x00000000; /* 0x103c 11a TX LS filter */ + reg->BB3C = 0x00000000; + pltmp[4] = 0x00003F29; /* 0x1040 11a TX LS filter */ + pltmp[5] = 0x0EFEFBFE; /* 0x1044 11a TX LS filter */ + pltmp[6] = BB48_DEFAULT_AL2230_11G; /* 0x1048 11b TX RC filter */ + reg->BB48 = BB48_DEFAULT_AL2230_11G; /* ch14 */ + pltmp[7] = BB4C_DEFAULT_AL2230_11G; /* 0x104c 11b TX RC filter */ + reg->BB4C = BB4C_DEFAULT_AL2230_11G; + pltmp[8] = 0x27106200; /* 0x1050 MODE_Ctrl */ + reg->BB50 = 0x27106200; + pltmp[9] = 0; /* 0x1054 */ + reg->BB54 = 0x00000000; + pltmp[10] = 0x52523232; /* 0x1058 IQ_Alpha */ + reg->BB58 = 0x52523232; + pltmp[11] = 0xAA0AC000; /* 0x105c DC_Cancel */ + Wb35Reg_BurstWrite(pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT); + + Wb35Reg_Write(pHwData, 0x1070, 0x00000045); + break; + case RF_AIROHA_7230: + BBProcessor_AL7230_2400(pHwData); - case RF_WB_242: - case RF_WB_242_1: // 20060619.5 Add - - pltmp[0] = 0x16A8525D; // 0x1000 AGC_Ctrl1 - pltmp[1] = 0x9AFF9ABA; // 0x1004 AGC_Ctrl2 - pltmp[2] = 0x55D00A04; // 0x1008 AGC_Ctrl3 - pltmp[3] = 0xEEE91C32; // 0x100c AGC_Ctrl4 - reg->BB0C = 0xEEE91C32; - pltmp[4] = 0x0FACDCC5; // 0x1010 AGC_Ctrl5 - pltmp[5] = 0x000AA344; // 0x1014 AGC_Ctrl6 - pltmp[6] = 0x22222221; // 0x1018 AGC_Ctrl7 - pltmp[7] = 0x0FA3F0ED; // 0x101c AGC_Ctrl8 - pltmp[8] = 0x04CC3440; // 20051018 0x03CB3440; // 0x1020 AGC_Ctrl9 20051014 0x03C33440 - pltmp[9] = 0xA9002A79; // 0x1024 AGC_Ctrl10 - pltmp[10] = 0x40000528; // 0x1028 - pltmp[11] = 0x23457F30; // 0x102c A_ACQ_Ctrl - reg->BB2C = 0x23457F30; - Wb35Reg_BurstWrite( pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT ); - - pltmp[0] = 0x00002C54; // 0x1030 B_ACQ_Ctrl - reg->BB30 = 0x00002C54; - pltmp[1] = 0x00C0D6C5; // 0x1034 A_TXRX_Ctrl - pltmp[2] = 0x5B2C8769; // 0x1038 B_TXRX_Ctrl - pltmp[3] = pHwData->BB3c_cal; // 0x103c 11a TX LS filter - reg->BB3C = pHwData->BB3c_cal; - pltmp[4] = 0x00003F29; // 0x1040 11a TX LS filter - pltmp[5] = 0x0EFEFBFE; // 0x1044 11a TX LS filter - pltmp[6] = BB48_DEFAULT_WB242_11G; // 0x1048 11b TX RC filter 20060613.2 - reg->BB48 = BB48_DEFAULT_WB242_11G; // 20060613.1 20060613.2 - pltmp[7] = BB4C_DEFAULT_WB242_11G; // 0x104c 11b TX RC filter 20060613.2 - reg->BB4C = BB4C_DEFAULT_WB242_11G; // 20060613.1 20060613.2 - pltmp[8] = 0x27106208; // 0x1050 MODE_Ctrl - reg->BB50 = 0x27106208; - pltmp[9] = pHwData->BB54_cal; // 0x1054 - reg->BB54 = pHwData->BB54_cal; - pltmp[10] = 0x52523131; // 0x1058 IQ_Alpha - reg->BB58 = 0x52523131; - pltmp[11] = 0xAA0AC000; // 20060825 0xAA2AC000; // 0x105c DC_Cancel - Wb35Reg_BurstWrite( pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT ); - - Wb35Reg_Write( pHwData, 0x1070, 0x00000045 ); - break; - } + Wb35Reg_Write(pHwData, 0x1070, 0x00000045); + break; + case RF_WB_242: + case RF_WB_242_1: + pltmp[0] = 0x16A8525D; /* 0x1000 AGC_Ctrl1 */ + pltmp[1] = 0x9AFF9ABA; /* 0x1004 AGC_Ctrl2 */ + pltmp[2] = 0x55D00A04; /* 0x1008 AGC_Ctrl3 */ + pltmp[3] = 0xEEE91C32; /* 0x100c AGC_Ctrl4 */ + reg->BB0C = 0xEEE91C32; + pltmp[4] = 0x0FACDCC5; /* 0x1010 AGC_Ctrl5 */ + pltmp[5] = 0x000AA344; /* 0x1014 AGC_Ctrl6 */ + pltmp[6] = 0x22222221; /* 0x1018 AGC_Ctrl7 */ + pltmp[7] = 0x0FA3F0ED; /* 0x101c AGC_Ctrl8 */ + pltmp[8] = 0x04CC3440; /* 0x1020 AGC_Ctrl9 */ + pltmp[9] = 0xA9002A79; /* 0x1024 AGC_Ctrl10 */ + pltmp[10] = 0x40000528; /* 0x1028 */ + pltmp[11] = 0x23457F30; /* 0x102c A_ACQ_Ctrl */ + reg->BB2C = 0x23457F30; + Wb35Reg_BurstWrite(pHwData, 0x1000, pltmp, 12, AUTO_INCREMENT); + + pltmp[0] = 0x00002C54; /* 0x1030 B_ACQ_Ctrl */ + reg->BB30 = 0x00002C54; + pltmp[1] = 0x00C0D6C5; /* 0x1034 A_TXRX_Ctrl */ + pltmp[2] = 0x5B2C8769; /* 0x1038 B_TXRX_Ctrl */ + pltmp[3] = pHwData->BB3c_cal; /* 0x103c 11a TX LS filter */ + reg->BB3C = pHwData->BB3c_cal; + pltmp[4] = 0x00003F29; /* 0x1040 11a TX LS filter */ + pltmp[5] = 0x0EFEFBFE; /* 0x1044 11a TX LS filter */ + pltmp[6] = BB48_DEFAULT_WB242_11G; /* 0x1048 11b TX RC filter */ + reg->BB48 = BB48_DEFAULT_WB242_11G; + pltmp[7] = BB4C_DEFAULT_WB242_11G; /* 0x104c 11b TX RC filter */ + reg->BB4C = BB4C_DEFAULT_WB242_11G; + pltmp[8] = 0x27106208; /* 0x1050 MODE_Ctrl */ + reg->BB50 = 0x27106208; + pltmp[9] = pHwData->BB54_cal; /* 0x1054 */ + reg->BB54 = pHwData->BB54_cal; + pltmp[10] = 0x52523131; /* 0x1058 IQ_Alpha */ + reg->BB58 = 0x52523131; + pltmp[11] = 0xAA0AC000; /* 0x105c DC_Cancel */ + Wb35Reg_BurstWrite(pHwData, 0x1030, pltmp, 12, AUTO_INCREMENT); + + Wb35Reg_Write(pHwData, 0x1070, 0x00000045); + break; + } - // Fill the LNA table - reg->LNAValue[0] = (u8)(reg->BB0C & 0xff); + /* Fill the LNA table */ + reg->LNAValue[0] = (u8) (reg->BB0C & 0xff); reg->LNAValue[1] = 0; - reg->LNAValue[2] = (u8)((reg->BB0C & 0xff00)>>8); + reg->LNAValue[2] = (u8) ((reg->BB0C & 0xff00) >> 8); reg->LNAValue[3] = 0; - // Fill SQ3 table - for( i=0; iSQ3_filter[i] = 0x2f; // half of Bit 0 ~ 6 + /* Fill SQ3 table */ + for (i = 0; i < MAX_SQ3_FILTER_SIZE; i++) + reg->SQ3_filter[i] = 0x2f; /* half of Bit 0 ~ 6 */ } -void set_tx_power_per_channel_max2829( struct hw_data * pHwData, struct chan_info Channel) +void set_tx_power_per_channel_max2829(struct hw_data *pHwData, struct chan_info Channel) { - RFSynthesizer_SetPowerIndex( pHwData, 100 ); // 20060620.1 Modify + RFSynthesizer_SetPowerIndex(pHwData, 100); } -void set_tx_power_per_channel_al2230( struct hw_data * pHwData, struct chan_info Channel ) +void set_tx_power_per_channel_al2230(struct hw_data *pHwData, struct chan_info Channel) { u8 index = 100; - if (pHwData->TxVgaFor24[Channel.ChanNo - 1] != 0xff) // 20060620.1 Add + if (pHwData->TxVgaFor24[Channel.ChanNo - 1] != 0xff) index = pHwData->TxVgaFor24[Channel.ChanNo - 1]; - RFSynthesizer_SetPowerIndex( pHwData, index ); + RFSynthesizer_SetPowerIndex(pHwData, index); } -void set_tx_power_per_channel_al7230( struct hw_data * pHwData, struct chan_info Channel) +void set_tx_power_per_channel_al7230(struct hw_data *pHwData, struct chan_info Channel) { u8 i, index = 100; - switch ( Channel.band ) - { - case BAND_TYPE_DSSS: - case BAND_TYPE_OFDM_24: - { - if (pHwData->TxVgaFor24[Channel.ChanNo - 1] != 0xff) - index = pHwData->TxVgaFor24[Channel.ChanNo - 1]; - } - break; - case BAND_TYPE_OFDM_5: - { - for (i =0; i<35; i++) - { - if (Channel.ChanNo == pHwData->TxVgaFor50[i].ChanNo) - { - if (pHwData->TxVgaFor50[i].TxVgaValue != 0xff) - index = pHwData->TxVgaFor50[i].TxVgaValue; - break; - } - } + switch (Channel.band) { + case BAND_TYPE_DSSS: + case BAND_TYPE_OFDM_24: + if (pHwData->TxVgaFor24[Channel.ChanNo - 1] != 0xff) + index = pHwData->TxVgaFor24[Channel.ChanNo - 1]; + break; + case BAND_TYPE_OFDM_5: + for (i = 0; i < 35; i++) { + if (Channel.ChanNo == pHwData->TxVgaFor50[i].ChanNo) { + if (pHwData->TxVgaFor50[i].TxVgaValue != 0xff) + index = pHwData->TxVgaFor50[i].TxVgaValue; + break; } - break; + } + break; } - RFSynthesizer_SetPowerIndex( pHwData, index ); + RFSynthesizer_SetPowerIndex(pHwData, index); } -void set_tx_power_per_channel_wb242( struct hw_data * pHwData, struct chan_info Channel) +void set_tx_power_per_channel_wb242(struct hw_data *pHwData, struct chan_info Channel) { u8 index = 100; - switch ( Channel.band ) - { - case BAND_TYPE_DSSS: - case BAND_TYPE_OFDM_24: - { - if (pHwData->TxVgaFor24[Channel.ChanNo - 1] != 0xff) - index = pHwData->TxVgaFor24[Channel.ChanNo - 1]; - } - break; - case BAND_TYPE_OFDM_5: - break; + switch (Channel.band) { + case BAND_TYPE_DSSS: + case BAND_TYPE_OFDM_24: + if (pHwData->TxVgaFor24[Channel.ChanNo - 1] != 0xff) + index = pHwData->TxVgaFor24[Channel.ChanNo - 1]; + break; + case BAND_TYPE_OFDM_5: + break; } - RFSynthesizer_SetPowerIndex( pHwData, index ); + RFSynthesizer_SetPowerIndex(pHwData, index); } -//============================================================================================================= -// RFSynthesizer_SwitchingChannel -- -// -// Description: -// Swithch the RF channel. -// -// Arguments: -// pHwData - Handle of the USB Device. -// Channel - The channel no. -// -// Return values: -// None. -//============================================================================================================= -void -RFSynthesizer_SwitchingChannel( struct hw_data * pHwData, struct chan_info Channel ) +/* + * ========================================================================== + * RFSynthesizer_SwitchingChannel -- + * + * Description: + * Swithch the RF channel. + * + * Arguments: + * pHwData - Handle of the USB Device. + * Channel - The channel no. + * + * Return values: + * None. + * =========================================================================== + */ +void RFSynthesizer_SwitchingChannel(struct hw_data *pHwData, struct chan_info Channel) { struct wb35_reg *reg = &pHwData->reg; - u32 pltmp[16]; // The 16 is the maximum capability of hardware + u32 pltmp[16]; /* The 16 is the maximum capability of hardware */ u32 count, ltmp; u8 i, j, number; u8 ChnlTmp; - switch( pHwData->phy_type ) - { - case RF_MAXIM_2825: - case RF_MAXIM_V1: // 11g Winbond 2nd BB(with Phy board (v1) + Maxim 331) - - if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 13 - { - for( i=0; i<3; i++ ) - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2825_channel_data_24[Channel.ChanNo-1][i], 18); - Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); - } - RFSynthesizer_SetPowerIndex( pHwData, 100 ); - break; - - case RF_MAXIM_2827: - - if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 13 - { - for( i=0; i<3; i++ ) - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_channel_data_24[Channel.ChanNo-1][i], 18); - Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); - } - else if( Channel.band == BAND_TYPE_OFDM_5 ) // channel 36 ~ 64 - { - ChnlTmp = (Channel.ChanNo - 36) / 4; - for( i=0; i<3; i++ ) - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_channel_data_50[ChnlTmp][i], 18); - Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); - } - RFSynthesizer_SetPowerIndex( pHwData, 100 ); - break; - - case RF_MAXIM_2828: - - if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 13 - { - for( i=0; i<3; i++ ) - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_channel_data_24[Channel.ChanNo-1][i], 18); - Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); - } - else if( Channel.band == BAND_TYPE_OFDM_5 ) // channel 36 ~ 64 - { - ChnlTmp = (Channel.ChanNo - 36) / 4; - for ( i = 0; i < 3; i++) - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_channel_data_50[ChnlTmp][i], 18); - Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); - } - RFSynthesizer_SetPowerIndex( pHwData, 100 ); - break; - - case RF_MAXIM_2829: + switch (pHwData->phy_type) { + case RF_MAXIM_2825: + case RF_MAXIM_V1: /* 11g Winbond 2nd BB(with Phy board (v1) + Maxim 331) */ - if( Channel.band <= BAND_TYPE_OFDM_24) - { - for( i=0; i<3; i++ ) - pltmp[i] = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2829_channel_data_24[Channel.ChanNo-1][i], 18); - Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 3, NO_INCREMENT ); - } - else if( Channel.band == BAND_TYPE_OFDM_5 ) - { - count = sizeof(max2829_channel_data_50) / sizeof(max2829_channel_data_50[0]); - - for( i=0; iband) { + if (Channel.band <= BAND_TYPE_OFDM_24) { + /* Update BB register */ + BBProcessor_AL7230_2400(pHwData); + + number = sizeof(al7230_rf_data_24) / sizeof(al7230_rf_data_24[0]); + Set_ChanIndep_RfData_al7230_24(pHwData, pltmp, number); + } else { + /* Update BB register */ + BBProcessor_AL7230_5000(pHwData); + + number = sizeof(al7230_rf_data_50) / sizeof(al7230_rf_data_50[0]); + Set_ChanIndep_RfData_al7230_50(pHwData, pltmp, number); } - set_tx_power_per_channel_al2230( pHwData, Channel ); - break; - case RF_AIROHA_7230: - - //Start to fill RF parameters, PLL_ON should be pulled low. - //Wb35Reg_Write( pHwData, 0x03dc, 0x00000000 ); - //printk("* PLL_ON low\n"); - - //Channel independent registers - if( Channel.band != pHwData->band) - { - if (Channel.band <= BAND_TYPE_OFDM_24) - { - //Update BB register - BBProcessor_AL7230_2400(pHwData); - - number = sizeof(al7230_rf_data_24)/sizeof(al7230_rf_data_24[0]); - Set_ChanIndep_RfData_al7230_24(pHwData, pltmp, number); - } - else - { - //Update BB register - BBProcessor_AL7230_5000(pHwData); - - number = sizeof(al7230_rf_data_50)/sizeof(al7230_rf_data_50[0]); - Set_ChanIndep_RfData_al7230_50(pHwData, pltmp, number); - } - - // Write to register. number must less and equal than 16 - Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, number, NO_INCREMENT ); - #ifdef _PE_STATE_DUMP_ - printk("Band changed\n"); - #endif - } + /* Write to register. number must less and equal than 16 */ + Wb35Reg_BurstWrite(pHwData, 0x0864, pltmp, number, NO_INCREMENT); + #ifdef _PE_STATE_DUMP_ + printk("Band changed\n"); + #endif + } - if( Channel.band <= BAND_TYPE_OFDM_24 ) // channel 1 ~ 14 - { - for( i=0; i<2; i++ ) - pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_channel_data_24[Channel.ChanNo-1][i]&0xffffff); - Wb35Reg_BurstWrite( pHwData, 0x0864, pltmp, 2, NO_INCREMENT ); + if (Channel.band <= BAND_TYPE_OFDM_24) { /* channel 1 ~ 14 */ + for (i = 0; i < 2; i++) + pltmp[i] = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_channel_data_24[Channel.ChanNo-1][i]&0xffffff); + Wb35Reg_BurstWrite(pHwData, 0x0864, pltmp, 2, NO_INCREMENT); + } else if (Channel.band == BAND_TYPE_OFDM_5) { + /* Update Reg12 */ + if ((Channel.ChanNo > 64) && (Channel.ChanNo <= 165)) { + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x00143c; + Wb35Reg_Write(pHwData, 0x0864, ltmp); + } else { /* reg12 = 0x00147c at Channel 4920 ~ 5320 */ + ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x00147c; + Wb35Reg_Write(pHwData, 0x0864, ltmp); } - else if( Channel.band == BAND_TYPE_OFDM_5 ) - { - //Update Reg12 - if ((Channel.ChanNo > 64) && (Channel.ChanNo <= 165)) - { - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x00143c; - Wb35Reg_Write( pHwData, 0x0864, ltmp ); - } - else //reg12 = 0x00147c at Channel 4920 ~ 5320 - { - ltmp = (1 << 31) | (0 << 30) | (24 << 24) | 0x00147c; - Wb35Reg_Write( pHwData, 0x0864, ltmp ); - } - count = sizeof(al7230_channel_data_5) / sizeof(al7230_channel_data_5[0]); + count = sizeof(al7230_channel_data_5) / sizeof(al7230_channel_data_5[0]); - for (i=0; iBB50 &= ~(BIT(11)|BIT(12)); - Wb35Reg_Write( pHwData, 0x1050, reg->BB50 ); // MODE_Ctrl - // MAC: select 2.4 GHz, bit[5]=0 + if (Channel.band <= BAND_TYPE_OFDM_24) { + /* BB: select 2.4 GHz, bit[12-11]=00 */ + reg->BB50 &= ~(BIT(11) | BIT(12)); + Wb35Reg_Write(pHwData, 0x1050, reg->BB50); /* MODE_Ctrl */ + /* MAC: select 2.4 GHz, bit[5]=0 */ reg->M78_ERPInformation &= ~BIT(5); - Wb35Reg_Write( pHwData, 0x0878, reg->M78_ERPInformation ); - // enable 11b Baseband + Wb35Reg_Write(pHwData, 0x0878, reg->M78_ERPInformation); + /* enable 11b Baseband */ reg->BB30 &= ~BIT(31); - Wb35Reg_Write( pHwData, 0x1030, reg->BB30 ); - } - else if( (Channel.band == BAND_TYPE_OFDM_5) ) - { - // BB: select 5 GHz - reg->BB50 &= ~(BIT(11)|BIT(12)); - if (Channel.ChanNo <=64 ) - reg->BB50 |= BIT(12); // 10-5.25GHz + Wb35Reg_Write(pHwData, 0x1030, reg->BB30); + } else if (Channel.band == BAND_TYPE_OFDM_5) { + /* BB: select 5 GHz */ + reg->BB50 &= ~(BIT(11) | BIT(12)); + if (Channel.ChanNo <= 64) + reg->BB50 |= BIT(12); /* 10-5.25GHz */ else if ((Channel.ChanNo >= 100) && (Channel.ChanNo <= 124)) - reg->BB50 |= BIT(11); // 01-5.48GHz - else if ((Channel.ChanNo >=128) && (Channel.ChanNo <= 161)) - reg->BB50 |= (BIT(12)|BIT(11)); // 11-5.775GHz - else //Chan 184 ~ 196 will use bit[12-11] = 10 in version sh-src-1.2.25 + reg->BB50 |= BIT(11); /* 01-5.48GHz */ + else if ((Channel.ChanNo >= 128) && (Channel.ChanNo <= 161)) + reg->BB50 |= (BIT(12) | BIT(11)); /* 11-5.775GHz */ + else /* Chan 184 ~ 196 will use bit[12-11] = 10 in version sh-src-1.2.25 */ reg->BB50 |= BIT(12); - Wb35Reg_Write( pHwData, 0x1050, reg->BB50 ); // MODE_Ctrl + Wb35Reg_Write(pHwData, 0x1050, reg->BB50); /* MODE_Ctrl */ - //(1) M78 should alway use 2.4G setting when using RF_AIROHA_7230 - //(2) BB30 has been updated previously. - if (pHwData->phy_type != RF_AIROHA_7230) - { - // MAC: select 5 GHz, bit[5]=1 + /* (1) M78 should alway use 2.4G setting when using RF_AIROHA_7230 */ + /* (2) BB30 has been updated previously. */ + if (pHwData->phy_type != RF_AIROHA_7230) { + /* MAC: select 5 GHz, bit[5]=1 */ reg->M78_ERPInformation |= BIT(5); - Wb35Reg_Write( pHwData, 0x0878, reg->M78_ERPInformation ); + Wb35Reg_Write(pHwData, 0x0878, reg->M78_ERPInformation); - // disable 11b Baseband + /* disable 11b Baseband */ reg->BB30 |= BIT(31); - Wb35Reg_Write( pHwData, 0x1030, reg->BB30 ); + Wb35Reg_Write(pHwData, 0x1030, reg->BB30); } } } -//Set the tx power directly from DUT GUI, not from the EEPROM. Return the current setting -u8 RFSynthesizer_SetPowerIndex( struct hw_data * pHwData, u8 PowerIndex ) +/* + * Set the tx power directly from DUT GUI, not from the EEPROM. + * Return the current setting + */ +u8 RFSynthesizer_SetPowerIndex(struct hw_data *pHwData, u8 PowerIndex) { u32 Band = pHwData->band; - u8 index=0; + u8 index = 0; - if( pHwData->power_index == PowerIndex ) // 20060620.1 Add + if (pHwData->power_index == PowerIndex) return PowerIndex; - if (RF_MAXIM_2825 == pHwData->phy_type) - { - // Channel 1 - 13 - index = RFSynthesizer_SetMaxim2825Power( pHwData, PowerIndex ); - } - else if (RF_MAXIM_2827 == pHwData->phy_type) - { - if( Band <= BAND_TYPE_OFDM_24 ) // Channel 1 - 13 - index = RFSynthesizer_SetMaxim2827_24Power( pHwData, PowerIndex ); - else// if( Band == BAND_TYPE_OFDM_5 ) // Channel 36 - 64 - index = RFSynthesizer_SetMaxim2827_50Power( pHwData, PowerIndex ); - } - else if (RF_MAXIM_2828 == pHwData->phy_type) - { - if( Band <= BAND_TYPE_OFDM_24 ) // Channel 1 - 13 - index = RFSynthesizer_SetMaxim2828_24Power( pHwData, PowerIndex ); - else// if( Band == BAND_TYPE_OFDM_5 ) // Channel 36 - 64 - index = RFSynthesizer_SetMaxim2828_50Power( pHwData, PowerIndex ); - } - else if( RF_AIROHA_2230 == pHwData->phy_type ) - { - //Power index: 0 ~ 63 // Channel 1 - 14 - index = RFSynthesizer_SetAiroha2230Power( pHwData, PowerIndex ); - index = (u8)al2230_txvga_data[index][1]; - } - else if( RF_AIROHA_2230S == pHwData->phy_type ) // 20060420 Add this - { - //Power index: 0 ~ 63 // Channel 1 - 14 - index = RFSynthesizer_SetAiroha2230Power( pHwData, PowerIndex ); - index = (u8)al2230_txvga_data[index][1]; - } - else if( RF_AIROHA_7230 == pHwData->phy_type ) - { - //Power index: 0 ~ 63 - index = RFSynthesizer_SetAiroha7230Power( pHwData, PowerIndex ); + if (RF_MAXIM_2825 == pHwData->phy_type) { + /* Channel 1 - 13 */ + index = RFSynthesizer_SetMaxim2825Power(pHwData, PowerIndex); + } else if (RF_MAXIM_2827 == pHwData->phy_type) { + if (Band <= BAND_TYPE_OFDM_24) /* Channel 1 - 13 */ + index = RFSynthesizer_SetMaxim2827_24Power(pHwData, PowerIndex); + else /* Channel 36 - 64 */ + index = RFSynthesizer_SetMaxim2827_50Power(pHwData, PowerIndex); + } else if (RF_MAXIM_2828 == pHwData->phy_type) { + if (Band <= BAND_TYPE_OFDM_24) /* Channel 1 - 13 */ + index = RFSynthesizer_SetMaxim2828_24Power(pHwData, PowerIndex); + else /* Channel 36 - 64 */ + index = RFSynthesizer_SetMaxim2828_50Power(pHwData, PowerIndex); + } else if (RF_AIROHA_2230 == pHwData->phy_type) { + /* Power index: 0 ~ 63 --- Channel 1 - 14 */ + index = RFSynthesizer_SetAiroha2230Power(pHwData, PowerIndex); + index = (u8) al2230_txvga_data[index][1]; + } else if (RF_AIROHA_2230S == pHwData->phy_type) { + /* Power index: 0 ~ 63 --- Channel 1 - 14 */ + index = RFSynthesizer_SetAiroha2230Power(pHwData, PowerIndex); + index = (u8) al2230_txvga_data[index][1]; + } else if (RF_AIROHA_7230 == pHwData->phy_type) { + /* Power index: 0 ~ 63 */ + index = RFSynthesizer_SetAiroha7230Power(pHwData, PowerIndex); index = (u8)al7230_txvga_data[index][1]; - } - else if( (RF_WB_242 == pHwData->phy_type) || - (RF_WB_242_1 == pHwData->phy_type) ) // 20060619.5 Add - { - //Power index: 0 ~ 19 for original. New range is 0 ~ 33 - index = RFSynthesizer_SetWinbond242Power( pHwData, PowerIndex ); + } else if ((RF_WB_242 == pHwData->phy_type) || + (RF_WB_242_1 == pHwData->phy_type)) { + /* Power index: 0 ~ 19 for original. New range is 0 ~ 33 */ + index = RFSynthesizer_SetWinbond242Power(pHwData, PowerIndex); index = (u8)w89rf242_txvga_data[index][1]; } - pHwData->power_index = index; // Backup current + pHwData->power_index = index; /* Backup current */ return index; } -//-- Sub function -u8 RFSynthesizer_SetMaxim2828_24Power( struct hw_data * pHwData, u8 index ) +/* -- Sub function */ +u8 RFSynthesizer_SetMaxim2828_24Power(struct hw_data *pHwData, u8 index) { - u32 PowerData; - if( index > 1 ) index = 1; - PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_power_data_24[index], 18); - Wb35Reg_Write( pHwData, 0x0864, PowerData ); + u32 PowerData; + if (index > 1) + index = 1; + PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2828_power_data_24[index], 18); + Wb35Reg_Write(pHwData, 0x0864, PowerData); return index; } -//-- -u8 RFSynthesizer_SetMaxim2828_50Power( struct hw_data * pHwData, u8 index ) + +u8 RFSynthesizer_SetMaxim2828_50Power(struct hw_data *pHwData, u8 index) { - u32 PowerData; - if( index > 1 ) index = 1; - PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2828_power_data_50[index], 18); - Wb35Reg_Write( pHwData, 0x0864, PowerData ); + u32 PowerData; + if (index > 1) + index = 1; + PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2828_power_data_50[index], 18); + Wb35Reg_Write(pHwData, 0x0864, PowerData); return index; } -//-- -u8 RFSynthesizer_SetMaxim2827_24Power( struct hw_data * pHwData, u8 index ) + +u8 RFSynthesizer_SetMaxim2827_24Power(struct hw_data *pHwData, u8 index) { - u32 PowerData; - if( index > 1 ) index = 1; - PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_power_data_24[index], 18); - Wb35Reg_Write( pHwData, 0x0864, PowerData ); + u32 PowerData; + if (index > 1) + index = 1; + PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2827_power_data_24[index], 18); + Wb35Reg_Write(pHwData, 0x0864, PowerData); return index; } -//-- -u8 RFSynthesizer_SetMaxim2827_50Power( struct hw_data * pHwData, u8 index ) + +u8 RFSynthesizer_SetMaxim2827_50Power(struct hw_data *pHwData, u8 index) { - u32 PowerData; - if( index > 1 ) index = 1; - PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2827_power_data_50[index], 18); - Wb35Reg_Write( pHwData, 0x0864, PowerData ); + u32 PowerData; + if (index > 1) + index = 1; + PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2827_power_data_50[index], 18); + Wb35Reg_Write(pHwData, 0x0864, PowerData); return index; } -//-- -u8 RFSynthesizer_SetMaxim2825Power( struct hw_data * pHwData, u8 index ) + +u8 RFSynthesizer_SetMaxim2825Power(struct hw_data *pHwData, u8 index) { - u32 PowerData; - if( index > 1 ) index = 1; - PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse( max2825_power_data_24[index], 18); - Wb35Reg_Write( pHwData, 0x0864, PowerData ); + u32 PowerData; + if (index > 1) + index = 1; + PowerData = (1 << 31) | (0 << 30) | (18 << 24) | BitReverse(max2825_power_data_24[index], 18); + Wb35Reg_Write(pHwData, 0x0864, PowerData); return index; } -//-- -u8 RFSynthesizer_SetAiroha2230Power( struct hw_data * pHwData, u8 index ) + +u8 RFSynthesizer_SetAiroha2230Power(struct hw_data *pHwData, u8 index) { - u32 PowerData; - u8 i,count; + u32 PowerData; + u8 i, count; count = sizeof(al2230_txvga_data) / sizeof(al2230_txvga_data[0]); - for (i=0; i= index) break; } if (i == count) i--; - PowerData = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( al2230_txvga_data[i][0], 20); - Wb35Reg_Write( pHwData, 0x0864, PowerData ); + PowerData = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse(al2230_txvga_data[i][0], 20); + Wb35Reg_Write(pHwData, 0x0864, PowerData); return i; } -//-- -u8 RFSynthesizer_SetAiroha7230Power( struct hw_data * pHwData, u8 index ) + +u8 RFSynthesizer_SetAiroha7230Power(struct hw_data *pHwData, u8 index) { - u32 PowerData; - u8 i,count; + u32 PowerData; + u8 i, count; - //PowerData = (1 << 31) | (0 << 30) | (20 << 24) | BitReverse( airoha_power_data_24[index], 20); count = sizeof(al7230_txvga_data) / sizeof(al7230_txvga_data[0]); - for (i=0; i= index) break; } if (i == count) i--; - PowerData = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_txvga_data[i][0]&0xffffff); - Wb35Reg_Write( pHwData, 0x0864, PowerData ); + PowerData = (1 << 31) | (0 << 30) | (24 << 24) | (al7230_txvga_data[i][0] & 0xffffff); + Wb35Reg_Write(pHwData, 0x0864, PowerData); return i; } -u8 RFSynthesizer_SetWinbond242Power( struct hw_data * pHwData, u8 index ) +u8 RFSynthesizer_SetWinbond242Power(struct hw_data *pHwData, u8 index) { - u32 PowerData; - u8 i,count; + u32 PowerData; + u8 i, count; count = sizeof(w89rf242_txvga_data) / sizeof(w89rf242_txvga_data[0]); - for (i=0; i= index) break; } if (i == count) i--; - // Set TxVga into RF - PowerData = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( w89rf242_txvga_data[i][0], 24); - Wb35Reg_Write( pHwData, 0x0864, PowerData ); - - // Update BB48 BB4C BB58 for high precision txvga - Wb35Reg_Write( pHwData, 0x1048, w89rf242_txvga_data[i][2] ); - Wb35Reg_Write( pHwData, 0x104c, w89rf242_txvga_data[i][3] ); - Wb35Reg_Write( pHwData, 0x1058, w89rf242_txvga_data[i][4] ); - -// Rf vga 0 ~ 3 for temperature compensate. It will affect the scan Bss. -// The i value equals to 8 or 7 usually. So It's not necessary to setup this RF register. -// if( i <= 3 ) -// PowerData = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( 0x000024, 24 ); -// else -// PowerData = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse( 0x001824, 24 ); -// Wb35Reg_Write( pHwData, 0x0864, PowerData ); + /* Set TxVga into RF */ + PowerData = (1 << 31) | (0 << 30) | (24 << 24) | BitReverse(w89rf242_txvga_data[i][0], 24); + Wb35Reg_Write(pHwData, 0x0864, PowerData); + + /* Update BB48 BB4C BB58 for high precision txvga */ + Wb35Reg_Write(pHwData, 0x1048, w89rf242_txvga_data[i][2]); + Wb35Reg_Write(pHwData, 0x104c, w89rf242_txvga_data[i][3]); + Wb35Reg_Write(pHwData, 0x1058, w89rf242_txvga_data[i][4]); + return i; } -//=========================================================================================================== -// Dxx_initial -- -// Mxx_initial -- - // -// Routine Description: -// Initial the hardware setting and module variable - // -//=========================================================================================================== -void Dxx_initial( struct hw_data * pHwData ) +/* + * =========================================================================== + * Dxx_initial -- + * Mxx_initial -- + * + * Routine Description: + * Initial the hardware setting and module variable + * =========================================================================== + */ +void Dxx_initial(struct hw_data *pHwData) { struct wb35_reg *reg = &pHwData->reg; - // Old IC:Single mode only. - // New IC: operation decide by Software set bit[4]. 1:multiple 0: single - reg->D00_DmaControl = 0xc0000004; //Txon, Rxon, multiple Rx for new 4k DMA - //Txon, Rxon, single Rx for old 8k ASIC - if( !HAL_USB_MODE_BURST( pHwData ) ) - reg->D00_DmaControl = 0xc0000000;//Txon, Rxon, single Rx for new 4k DMA + /* + * Old IC: Single mode only. + * New IC: operation decide by Software set bit[4]. 1:multiple 0: single + */ + reg->D00_DmaControl = 0xc0000004; /* Txon, Rxon, multiple Rx for new 4k DMA */ + /* Txon, Rxon, single Rx for old 8k ASIC */ + if (!HAL_USB_MODE_BURST(pHwData)) + reg->D00_DmaControl = 0xc0000000; /* Txon, Rxon, single Rx for new 4k DMA */ - Wb35Reg_WriteSync( pHwData, 0x0400, reg->D00_DmaControl ); + Wb35Reg_WriteSync(pHwData, 0x0400, reg->D00_DmaControl); } -void Mxx_initial( struct hw_data * pHwData ) +void Mxx_initial(struct hw_data *pHwData) { struct wb35_reg *reg = &pHwData->reg; - u32 tmp; - u32 pltmp[11]; + u32 tmp; + u32 pltmp[11]; u16 i; - //====================================================== - // Initial Mxx register - //====================================================== + /* + * ====================================================== + * Initial Mxx register + * ====================================================== + */ - // M00 bit set -#ifdef _IBSS_BEACON_SEQ_STICK_ - reg->M00_MacControl = 0; // Solve beacon sequence number stop by software -#else - reg->M00_MacControl = 0x80000000; // Solve beacon sequence number stop by hardware -#endif + /* M00 bit set */ + #ifdef _IBSS_BEACON_SEQ_STICK_ + reg->M00_MacControl = 0; /* Solve beacon sequence number stop by software */ + #else + reg->M00_MacControl = 0x80000000; /* Solve beacon sequence number stop by hardware */ + #endif - // M24 disable enter power save, BB RxOn and enable NAV attack + /* M24 disable enter power save, BB RxOn and enable NAV attack */ reg->M24_MacControl = 0x08040042; pltmp[0] = reg->M24_MacControl; - pltmp[1] = 0; // Skip M28, because no initialize value is required. + pltmp[1] = 0; /* Skip M28, because no initialize value is required. */ - // M2C CWmin and CWmax setting + /* M2C CWmin and CWmax setting */ pHwData->cwmin = DEFAULT_CWMIN; pHwData->cwmax = DEFAULT_CWMAX; reg->M2C_MacControl = DEFAULT_CWMIN << 10; reg->M2C_MacControl |= DEFAULT_CWMAX; pltmp[2] = reg->M2C_MacControl; - // M30 BSSID + /* M30 BSSID */ pltmp[3] = *(u32 *)pHwData->bssid; - // M34 + /* M34 */ pHwData->AID = DEFAULT_AID; - tmp = *(u16 *)(pHwData->bssid+4); + tmp = *(u16 *) (pHwData->bssid + 4); tmp |= DEFAULT_AID << 16; pltmp[4] = tmp; - // M38 - reg->M38_MacControl = (DEFAULT_RATE_RETRY_LIMIT<<8) | (DEFAULT_LONG_RETRY_LIMIT << 4) | DEFAULT_SHORT_RETRY_LIMIT; + /* M38 */ + reg->M38_MacControl = (DEFAULT_RATE_RETRY_LIMIT << 8) | (DEFAULT_LONG_RETRY_LIMIT << 4) | DEFAULT_SHORT_RETRY_LIMIT; pltmp[5] = reg->M38_MacControl; - // M3C + /* M3C */ tmp = (DEFAULT_PIFST << 26) | (DEFAULT_EIFST << 16) | (DEFAULT_DIFST << 8) | (DEFAULT_SIFST << 4) | DEFAULT_OSIFST ; reg->M3C_MacControl = tmp; pltmp[6] = tmp; - // M40 + /* M40 */ pHwData->slot_time_select = DEFAULT_SLOT_TIME; tmp = (DEFAULT_ATIMWD << 16) | DEFAULT_SLOT_TIME; reg->M40_MacControl = tmp; pltmp[7] = tmp; - // M44 - tmp = DEFAULT_MAX_TX_MSDU_LIFE_TIME << 10; // *1024 + /* M44 */ + tmp = DEFAULT_MAX_TX_MSDU_LIFE_TIME << 10; /* *1024 */ reg->M44_MacControl = tmp; pltmp[8] = tmp; - // M48 + /* M48 */ pHwData->BeaconPeriod = DEFAULT_BEACON_INTERVAL; pHwData->ProbeDelay = DEFAULT_PROBE_DELAY_TIME; tmp = (DEFAULT_BEACON_INTERVAL << 16) | DEFAULT_PROBE_DELAY_TIME; reg->M48_MacControl = tmp; pltmp[9] = tmp; - //M4C + /* M4C */ reg->M4C_MacStatus = (DEFAULT_PROTOCOL_VERSION << 30) | (DEFAULT_MAC_POWER_STATE << 28) | (DEFAULT_DTIM_ALERT_TIME << 24); pltmp[10] = reg->M4C_MacStatus; - // Burst write - //Wb35Reg_BurstWrite( pHwData, 0x0824, pltmp, 11, AUTO_INCREMENT ); - for( i=0; i<11; i++ ) - Wb35Reg_WriteSync( pHwData, 0x0824 + i*4, pltmp[i] ); + for (i = 0; i < 11; i++) + Wb35Reg_WriteSync(pHwData, 0x0824 + i * 4, pltmp[i]); - // M60 - Wb35Reg_WriteSync( pHwData, 0x0860, 0x12481248 ); + /* M60 */ + Wb35Reg_WriteSync(pHwData, 0x0860, 0x12481248); reg->M60_MacControl = 0x12481248; - // M68 - Wb35Reg_WriteSync( pHwData, 0x0868, 0x00050900 ); // 20051018 0x000F0F00 ); // 940930 0x00131300 + /* M68 */ + Wb35Reg_WriteSync(pHwData, 0x0868, 0x00050900); reg->M68_MacControl = 0x00050900; - // M98 - Wb35Reg_WriteSync( pHwData, 0x0898, 0xffff8888 ); + /* M98 */ + Wb35Reg_WriteSync(pHwData, 0x0898, 0xffff8888); reg->M98_MacControl = 0xffff8888; } -void Uxx_power_off_procedure( struct hw_data * pHwData ) +void Uxx_power_off_procedure(struct hw_data *pHwData) { - // SW, PMU reset and turn off clock - Wb35Reg_WriteSync( pHwData, 0x03b0, 3 ); - Wb35Reg_WriteSync( pHwData, 0x03f0, 0xf9 ); + /* SW, PMU reset and turn off clock */ + Wb35Reg_WriteSync(pHwData, 0x03b0, 3); + Wb35Reg_WriteSync(pHwData, 0x03f0, 0xf9); } -//Decide the TxVga of every channel -void GetTxVgaFromEEPROM( struct hw_data * pHwData ) +/*Decide the TxVga of every channel */ +void GetTxVgaFromEEPROM(struct hw_data *pHwData) { - u32 i, j, ltmp; - u16 Value[MAX_TXVGA_EEPROM]; - u8 *pctmp; - u8 ctmp=0; - - // Get the entire TxVga setting in EEPROM - for( i=0; iphy_type == RF_WB_242 ) - { - for( i=0; i<4; i++ ) // Only 2412 2437 2462 2484 case must be modified - { - for( j=0; j<(sizeof(w89rf242_txvga_old_mapping)/sizeof(w89rf242_txvga_old_mapping[0])); j++ ) - { - if( pctmp[i] < (u8)w89rf242_txvga_old_mapping[j][1] ) - { - pctmp[i] = (u8)w89rf242_txvga_old_mapping[j][0]; + /* Adjust WB_242 to WB_242_1 TxVga scale */ + if (pHwData->phy_type == RF_WB_242) { + for (i = 0; i < 4; i++) { /* Only 2412 2437 2462 2484 case must be modified */ + for (j = 0; j < (sizeof(w89rf242_txvga_old_mapping) / sizeof(w89rf242_txvga_old_mapping[0])); j++) { + if (pctmp[i] < (u8) w89rf242_txvga_old_mapping[j][1]) { + pctmp[i] = (u8) w89rf242_txvga_old_mapping[j][0]; break; } } - if( j == (sizeof(w89rf242_txvga_old_mapping)/sizeof(w89rf242_txvga_old_mapping[0])) ) + if (j == (sizeof(w89rf242_txvga_old_mapping) / sizeof(w89rf242_txvga_old_mapping[0]))) pctmp[i] = (u8)w89rf242_txvga_old_mapping[j-1][0]; } } - // 20060621 Add - memcpy( pHwData->TxVgaSettingInEEPROM, pctmp, MAX_TXVGA_EEPROM*2 ); //MAX_TXVGA_EEPROM is u16 count - EEPROMTxVgaAdjust( pHwData ); + memcpy(pHwData->TxVgaSettingInEEPROM, pctmp, MAX_TXVGA_EEPROM * 2); /* MAX_TXVGA_EEPROM is u16 count */ + EEPROMTxVgaAdjust(pHwData); } -// This function will affect the TxVga parameter in HAL. If hal_set_current_channel -// or RFSynthesizer_SetPowerIndex be called, new TxVga will take effect. -// TxVgaSettingInEEPROM of sHwData is an u8 array point to EEPROM contain for IS89C35 -// This function will use default TxVgaSettingInEEPROM data to calculate new TxVga. -void EEPROMTxVgaAdjust( struct hw_data * pHwData ) // 20060619.5 Add +/* + * This function will affect the TxVga parameter in HAL. If hal_set_current_channel + * or RFSynthesizer_SetPowerIndex be called, new TxVga will take effect. + * TxVgaSettingInEEPROM of sHwData is an u8 array point to EEPROM contain for IS89C35 + * This function will use default TxVgaSettingInEEPROM data to calculate new TxVga. + */ +void EEPROMTxVgaAdjust(struct hw_data *pHwData) { - u8 * pTxVga = pHwData->TxVgaSettingInEEPROM; - s16 i, stmp; + u8 *pTxVga = pHwData->TxVgaSettingInEEPROM; + s16 i, stmp; - //-- 2.4G -- 20060704.2 Request from Tiger - //channel 1 ~ 5 + /* -- 2.4G -- */ + /* channel 1 ~ 5 */ stmp = pTxVga[1] - pTxVga[0]; - for( i=0; i<5; i++ ) - pHwData->TxVgaFor24[i] = pTxVga[0] + stmp*i/4; - //channel 6 ~ 10 + for (i = 0; i < 5; i++) + pHwData->TxVgaFor24[i] = pTxVga[0] + stmp * i / 4; + /* channel 6 ~ 10 */ stmp = pTxVga[2] - pTxVga[1]; - for( i=5; i<10; i++ ) - pHwData->TxVgaFor24[i] = pTxVga[1] + stmp*(i-5)/4; - //channel 11 ~ 13 + for (i = 5; i < 10; i++) + pHwData->TxVgaFor24[i] = pTxVga[1] + stmp * (i - 5) / 4; + /* channel 11 ~ 13 */ stmp = pTxVga[3] - pTxVga[2]; - for( i=10; i<13; i++ ) - pHwData->TxVgaFor24[i] = pTxVga[2] + stmp*(i-10)/2; - //channel 14 + for (i = 10; i < 13; i++) + pHwData->TxVgaFor24[i] = pTxVga[2] + stmp * (i - 10) / 2; + /* channel 14 */ pHwData->TxVgaFor24[13] = pTxVga[3]; - //-- 5G -- - if( pHwData->phy_type == RF_AIROHA_7230 ) - { - //channel 184 + /* -- 5G -- */ + if (pHwData->phy_type == RF_AIROHA_7230) { + /* channel 184 */ pHwData->TxVgaFor50[0].ChanNo = 184; pHwData->TxVgaFor50[0].TxVgaValue = pTxVga[4]; - //channel 196 + /* channel 196 */ pHwData->TxVgaFor50[3].ChanNo = 196; pHwData->TxVgaFor50[3].TxVgaValue = pTxVga[5]; - //interpolate + /* interpolate */ pHwData->TxVgaFor50[1].ChanNo = 188; pHwData->TxVgaFor50[2].ChanNo = 192; stmp = pTxVga[5] - pTxVga[4]; - pHwData->TxVgaFor50[2].TxVgaValue = pTxVga[5] - stmp/3; - pHwData->TxVgaFor50[1].TxVgaValue = pTxVga[5] - stmp*2/3; + pHwData->TxVgaFor50[2].TxVgaValue = pTxVga[5] - stmp / 3; + pHwData->TxVgaFor50[1].TxVgaValue = pTxVga[5] - stmp * 2 / 3; - //channel 16 + /* channel 16 */ pHwData->TxVgaFor50[6].ChanNo = 16; pHwData->TxVgaFor50[6].TxVgaValue = pTxVga[6]; pHwData->TxVgaFor50[4].ChanNo = 8; @@ -2523,7 +2250,7 @@ void EEPROMTxVgaAdjust( struct hw_data * pHwData ) // 20060619.5 Add pHwData->TxVgaFor50[5].ChanNo = 12; pHwData->TxVgaFor50[5].TxVgaValue = pTxVga[6]; - //channel 36 + /* channel 36 */ pHwData->TxVgaFor50[8].ChanNo = 36; pHwData->TxVgaFor50[8].TxVgaValue = pTxVga[7]; pHwData->TxVgaFor50[7].ChanNo = 34; @@ -2531,153 +2258,135 @@ void EEPROMTxVgaAdjust( struct hw_data * pHwData ) // 20060619.5 Add pHwData->TxVgaFor50[9].ChanNo = 38; pHwData->TxVgaFor50[9].TxVgaValue = pTxVga[7]; - //channel 40 + /* channel 40 */ pHwData->TxVgaFor50[10].ChanNo = 40; pHwData->TxVgaFor50[10].TxVgaValue = pTxVga[8]; - //channel 48 + /* channel 48 */ pHwData->TxVgaFor50[14].ChanNo = 48; pHwData->TxVgaFor50[14].TxVgaValue = pTxVga[9]; - //interpolate + /* interpolate */ pHwData->TxVgaFor50[11].ChanNo = 42; pHwData->TxVgaFor50[12].ChanNo = 44; pHwData->TxVgaFor50[13].ChanNo = 46; stmp = pTxVga[9] - pTxVga[8]; - pHwData->TxVgaFor50[13].TxVgaValue = pTxVga[9] - stmp/4; - pHwData->TxVgaFor50[12].TxVgaValue = pTxVga[9] - stmp*2/4; - pHwData->TxVgaFor50[11].TxVgaValue = pTxVga[9] - stmp*3/4; + pHwData->TxVgaFor50[13].TxVgaValue = pTxVga[9] - stmp / 4; + pHwData->TxVgaFor50[12].TxVgaValue = pTxVga[9] - stmp * 2 / 4; + pHwData->TxVgaFor50[11].TxVgaValue = pTxVga[9] - stmp * 3 / 4; - //channel 52 + /* channel 52 */ pHwData->TxVgaFor50[15].ChanNo = 52; pHwData->TxVgaFor50[15].TxVgaValue = pTxVga[10]; - //channel 64 + /* channel 64 */ pHwData->TxVgaFor50[18].ChanNo = 64; pHwData->TxVgaFor50[18].TxVgaValue = pTxVga[11]; - //interpolate + /* interpolate */ pHwData->TxVgaFor50[16].ChanNo = 56; pHwData->TxVgaFor50[17].ChanNo = 60; stmp = pTxVga[11] - pTxVga[10]; - pHwData->TxVgaFor50[17].TxVgaValue = pTxVga[11] - stmp/3; - pHwData->TxVgaFor50[16].TxVgaValue = pTxVga[11] - stmp*2/3; + pHwData->TxVgaFor50[17].TxVgaValue = pTxVga[11] - stmp / 3; + pHwData->TxVgaFor50[16].TxVgaValue = pTxVga[11] - stmp * 2 / 3; - //channel 100 + /* channel 100 */ pHwData->TxVgaFor50[19].ChanNo = 100; pHwData->TxVgaFor50[19].TxVgaValue = pTxVga[12]; - //channel 112 + /* channel 112 */ pHwData->TxVgaFor50[22].ChanNo = 112; pHwData->TxVgaFor50[22].TxVgaValue = pTxVga[13]; - //interpolate + /* interpolate */ pHwData->TxVgaFor50[20].ChanNo = 104; pHwData->TxVgaFor50[21].ChanNo = 108; stmp = pTxVga[13] - pTxVga[12]; - pHwData->TxVgaFor50[21].TxVgaValue = pTxVga[13] - stmp/3; - pHwData->TxVgaFor50[20].TxVgaValue = pTxVga[13] - stmp*2/3; + pHwData->TxVgaFor50[21].TxVgaValue = pTxVga[13] - stmp / 3; + pHwData->TxVgaFor50[20].TxVgaValue = pTxVga[13] - stmp * 2 / 3; - //channel 128 + /* channel 128 */ pHwData->TxVgaFor50[26].ChanNo = 128; pHwData->TxVgaFor50[26].TxVgaValue = pTxVga[14]; - //interpolate + /* interpolate */ pHwData->TxVgaFor50[23].ChanNo = 116; pHwData->TxVgaFor50[24].ChanNo = 120; pHwData->TxVgaFor50[25].ChanNo = 124; stmp = pTxVga[14] - pTxVga[13]; - pHwData->TxVgaFor50[25].TxVgaValue = pTxVga[14] - stmp/4; - pHwData->TxVgaFor50[24].TxVgaValue = pTxVga[14] - stmp*2/4; - pHwData->TxVgaFor50[23].TxVgaValue = pTxVga[14] - stmp*3/4; + pHwData->TxVgaFor50[25].TxVgaValue = pTxVga[14] - stmp / 4; + pHwData->TxVgaFor50[24].TxVgaValue = pTxVga[14] - stmp * 2 / 4; + pHwData->TxVgaFor50[23].TxVgaValue = pTxVga[14] - stmp * 3 / 4; - //channel 140 + /* channel 140 */ pHwData->TxVgaFor50[29].ChanNo = 140; pHwData->TxVgaFor50[29].TxVgaValue = pTxVga[15]; - //interpolate + /* interpolate */ pHwData->TxVgaFor50[27].ChanNo = 132; pHwData->TxVgaFor50[28].ChanNo = 136; stmp = pTxVga[15] - pTxVga[14]; - pHwData->TxVgaFor50[28].TxVgaValue = pTxVga[15] - stmp/3; - pHwData->TxVgaFor50[27].TxVgaValue = pTxVga[15] - stmp*2/3; + pHwData->TxVgaFor50[28].TxVgaValue = pTxVga[15] - stmp / 3; + pHwData->TxVgaFor50[27].TxVgaValue = pTxVga[15] - stmp * 2 / 3; - //channel 149 + /* channel 149 */ pHwData->TxVgaFor50[30].ChanNo = 149; pHwData->TxVgaFor50[30].TxVgaValue = pTxVga[16]; - //channel 165 + /* channel 165 */ pHwData->TxVgaFor50[34].ChanNo = 165; pHwData->TxVgaFor50[34].TxVgaValue = pTxVga[17]; - //interpolate + /* interpolate */ pHwData->TxVgaFor50[31].ChanNo = 153; pHwData->TxVgaFor50[32].ChanNo = 157; pHwData->TxVgaFor50[33].ChanNo = 161; stmp = pTxVga[17] - pTxVga[16]; - pHwData->TxVgaFor50[33].TxVgaValue = pTxVga[17] - stmp/4; - pHwData->TxVgaFor50[32].TxVgaValue = pTxVga[17] - stmp*2/4; - pHwData->TxVgaFor50[31].TxVgaValue = pTxVga[17] - stmp*3/4; + pHwData->TxVgaFor50[33].TxVgaValue = pTxVga[17] - stmp / 4; + pHwData->TxVgaFor50[32].TxVgaValue = pTxVga[17] - stmp * 2 / 4; + pHwData->TxVgaFor50[31].TxVgaValue = pTxVga[17] - stmp * 3 / 4; } #ifdef _PE_STATE_DUMP_ - printk(" TxVgaFor24 : \n"); - DataDmp((u8 *)pHwData->TxVgaFor24, 14 ,0); - printk(" TxVgaFor50 : \n"); - DataDmp((u8 *)pHwData->TxVgaFor50, 70 ,0); + printk(" TxVgaFor24 :\n"); + DataDmp((u8 *)pHwData->TxVgaFor24, 14 , 0); + printk(" TxVgaFor50 :\n"); + DataDmp((u8 *)pHwData->TxVgaFor50, 70 , 0); #endif } -void BBProcessor_RateChanging( struct hw_data * pHwData, u8 rate ) // 20060613.1 +void BBProcessor_RateChanging(struct hw_data *pHwData, u8 rate) { struct wb35_reg *reg = &pHwData->reg; - unsigned char Is11bRate; + unsigned char Is11bRate; Is11bRate = (rate % 6) ? 1 : 0; - switch( pHwData->phy_type ) - { - case RF_AIROHA_2230: - case RF_AIROHA_2230S: // 20060420 Add this - if( Is11bRate ) - { - if( (reg->BB48 != BB48_DEFAULT_AL2230_11B) && - (reg->BB4C != BB4C_DEFAULT_AL2230_11B) ) - { - Wb35Reg_Write( pHwData, 0x1048, BB48_DEFAULT_AL2230_11B ); - Wb35Reg_Write( pHwData, 0x104c, BB4C_DEFAULT_AL2230_11B ); - } + switch (pHwData->phy_type) { + case RF_AIROHA_2230: + case RF_AIROHA_2230S: + if (Is11bRate) { + if ((reg->BB48 != BB48_DEFAULT_AL2230_11B) && + (reg->BB4C != BB4C_DEFAULT_AL2230_11B)) { + Wb35Reg_Write(pHwData, 0x1048, BB48_DEFAULT_AL2230_11B); + Wb35Reg_Write(pHwData, 0x104c, BB4C_DEFAULT_AL2230_11B); } - else - { - if( (reg->BB48 != BB48_DEFAULT_AL2230_11G) && - (reg->BB4C != BB4C_DEFAULT_AL2230_11G) ) - { - Wb35Reg_Write( pHwData, 0x1048, BB48_DEFAULT_AL2230_11G ); - Wb35Reg_Write( pHwData, 0x104c, BB4C_DEFAULT_AL2230_11G ); - } + } else { + if ((reg->BB48 != BB48_DEFAULT_AL2230_11G) && + (reg->BB4C != BB4C_DEFAULT_AL2230_11G)) { + Wb35Reg_Write(pHwData, 0x1048, BB48_DEFAULT_AL2230_11G); + Wb35Reg_Write(pHwData, 0x104c, BB4C_DEFAULT_AL2230_11G); } - break; - - case RF_WB_242: // 20060623 The fix only for old TxVGA setting - if( Is11bRate ) - { - if( (reg->BB48 != BB48_DEFAULT_WB242_11B) && - (reg->BB4C != BB4C_DEFAULT_WB242_11B) ) - { - reg->BB48 = BB48_DEFAULT_WB242_11B; - reg->BB4C = BB4C_DEFAULT_WB242_11B; - Wb35Reg_Write( pHwData, 0x1048, BB48_DEFAULT_WB242_11B ); - Wb35Reg_Write( pHwData, 0x104c, BB4C_DEFAULT_WB242_11B ); - } + } + break; + case RF_WB_242: + if (Is11bRate) { + if ((reg->BB48 != BB48_DEFAULT_WB242_11B) && + (reg->BB4C != BB4C_DEFAULT_WB242_11B)) { + reg->BB48 = BB48_DEFAULT_WB242_11B; + reg->BB4C = BB4C_DEFAULT_WB242_11B; + Wb35Reg_Write(pHwData, 0x1048, BB48_DEFAULT_WB242_11B); + Wb35Reg_Write(pHwData, 0x104c, BB4C_DEFAULT_WB242_11B); } - else - { - if( (reg->BB48 != BB48_DEFAULT_WB242_11G) && - (reg->BB4C != BB4C_DEFAULT_WB242_11G) ) - { - reg->BB48 = BB48_DEFAULT_WB242_11G; - reg->BB4C = BB4C_DEFAULT_WB242_11G; - Wb35Reg_Write( pHwData, 0x1048, BB48_DEFAULT_WB242_11G ); - Wb35Reg_Write( pHwData, 0x104c, BB4C_DEFAULT_WB242_11G ); - } + } else { + if ((reg->BB48 != BB48_DEFAULT_WB242_11G) && + (reg->BB4C != BB4C_DEFAULT_WB242_11G)) { + reg->BB48 = BB48_DEFAULT_WB242_11G; + reg->BB4C = BB4C_DEFAULT_WB242_11G; + Wb35Reg_Write(pHwData, 0x1048, BB48_DEFAULT_WB242_11G); + Wb35Reg_Write(pHwData, 0x104c, BB4C_DEFAULT_WB242_11G); } - break; + } + break; } } - - - - - - -- cgit v0.10.2 From c64ba207ddcb7ea426032ae7166b5f666ea1d3c5 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 21 Mar 2010 17:55:03 +0100 Subject: Staging: winbond: sme_api.h Coding style fixes. I fixed the things reported by checkpatch.pl except one long line and a __inline. I also removed commented away code and versioning comments. Signed-off-by: Lars Lindley Pavel Machek Acked-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/sme_api.h b/drivers/staging/winbond/sme_api.h index b589829..8f4596c 100644 --- a/drivers/staging/winbond/sme_api.h +++ b/drivers/staging/winbond/sme_api.h @@ -2,12 +2,6 @@ * sme_api.h * * Copyright(C) 2002 Winbond Electronics Corp. - * - * modification history - * --------------------------------------------------------------------------- - * 1.00.001, 2003-04-21, Kevin created - * 1.00.002, 2003-05-14, PD43 & PE20 modified - * */ #ifndef __SME_API_H__ @@ -18,42 +12,42 @@ #include "localpara.h" /****************** CONSTANT AND MACRO SECTION ******************************/ -#define _INLINE __inline +#define _INLINE __inline -#define MEDIA_STATE_DISCONNECTED 0 -#define MEDIA_STATE_CONNECTED 1 +#define MEDIA_STATE_DISCONNECTED 0 +#define MEDIA_STATE_CONNECTED 1 -//ARRAY CHECK -#define MAX_POWER_TO_DB 32 +/* ARRAY CHECK */ +#define MAX_POWER_TO_DB 32 /****************** TYPE DEFINITION SECTION *********************************/ /****************** EXPORTED FUNCTION DECLARATION SECTION *******************/ -// OID_802_11_BSSID +/* OID_802_11_BSSID */ s8 sme_get_bssid(void *pcore_data, u8 *pbssid); -s8 sme_get_desired_bssid(void *pcore_data, u8 *pbssid);//Not use +s8 sme_get_desired_bssid(void *pcore_data, u8 *pbssid); /* Not use */ s8 sme_set_desired_bssid(void *pcore_data, u8 *pbssid); -// OID_802_11_SSID +/* OID_802_11_SSID */ s8 sme_get_ssid(void *pcore_data, u8 *pssid, u8 *pssid_len); -s8 sme_get_desired_ssid(void *pcore_data, u8 *pssid, u8 *pssid_len);// Not use +s8 sme_get_desired_ssid(void *pcore_data, u8 *pssid, u8 *pssid_len);/* Not use */ s8 sme_set_desired_ssid(void *pcore_data, u8 *pssid, u8 ssid_len); -// OID_802_11_INFRASTRUCTURE_MODE +/* OID_802_11_INFRASTRUCTURE_MODE */ s8 sme_get_bss_type(void *pcore_data, u8 *pbss_type); -s8 sme_get_desired_bss_type(void *pcore_data, u8 *pbss_type);//Not use +s8 sme_get_desired_bss_type(void *pcore_data, u8 *pbss_type); /* Not use */ s8 sme_set_desired_bss_type(void *pcore_data, u8 bss_type); -// OID_802_11_FRAGMENTATION_THRESHOLD +/* OID_802_11_FRAGMENTATION_THRESHOLD */ s8 sme_get_fragment_threshold(void *pcore_data, u32 *pthreshold); s8 sme_set_fragment_threshold(void *pcore_data, u32 threshold); -// OID_802_11_RTS_THRESHOLD +/* OID_802_11_RTS_THRESHOLD */ s8 sme_get_rts_threshold(void *pcore_data, u32 *pthreshold); s8 sme_set_rts_threshold(void *pcore_data, u32 threshold); -// OID_802_11_CONFIGURATION +/* OID_802_11_CONFIGURATION */ s8 sme_get_beacon_period(void *pcore_data, u16 *pbeacon_period); s8 sme_set_beacon_period(void *pcore_data, u16 beacon_period); @@ -64,116 +58,69 @@ s8 sme_get_current_channel(void *pcore_data, u8 *pcurrent_channel); s8 sme_get_current_band(void *pcore_data, u8 *pcurrent_band); s8 sme_set_current_channel(void *pcore_data, u8 current_channel); -// OID_802_11_BSSID_LIST +/* OID_802_11_BSSID_LIST */ s8 sme_get_scan_bss_count(void *pcore_data, u8 *pcount); s8 sme_get_scan_bss(void *pcore_data, u8 index, void **ppbss); s8 sme_get_connected_bss(void *pcore_data, void **ppbss_now); -// OID_802_11_AUTHENTICATION_MODE +/* OID_802_11_AUTHENTICATION_MODE */ s8 sme_get_auth_mode(void *pcore_data, u8 *pauth_mode); s8 sme_set_auth_mode(void *pcore_data, u8 auth_mode); -// OID_802_11_WEP_STATUS / OID_802_11_ENCRYPTION_STATUS +/* OID_802_11_WEP_STATUS / OID_802_11_ENCRYPTION_STATUS */ s8 sme_get_wep_mode(void *pcore_data, u8 *pwep_mode); s8 sme_set_wep_mode(void *pcore_data, u8 wep_mode); -//s8 sme_get_encryption_status(void *pcore_data, u8 *pstatus); -//s8 sme_set_encryption_status(void *pcore_data, u8 status); - -// ??????????????????????????????????????? -// OID_GEN_VENDOR_ID -// OID_802_3_PERMANENT_ADDRESS +/* OID_GEN_VENDOR_ID */ +/* OID_802_3_PERMANENT_ADDRESS */ s8 sme_get_permanent_mac_addr(void *pcore_data, u8 *pmac_addr); -// OID_802_3_CURRENT_ADDRESS +/* OID_802_3_CURRENT_ADDRESS */ s8 sme_get_current_mac_addr(void *pcore_data, u8 *pmac_addr); -// OID_802_11_NETWORK_TYPE_IN_USE +/* OID_802_11_NETWORK_TYPE_IN_USE */ s8 sme_get_network_type_in_use(void *pcore_data, u8 *ptype); s8 sme_set_network_type_in_use(void *pcore_data, u8 type); -// OID_802_11_SUPPORTED_RATES +/* OID_802_11_SUPPORTED_RATES */ s8 sme_get_supported_rate(void *pcore_data, u8 *prates); -// OID_802_11_ADD_WEP -//12/29/03' wkchen +/* OID_802_11_ADD_WEP */ s8 sme_set_add_wep(void *pcore_data, u32 key_index, u32 key_len, u8 *Address, u8 *key); -// OID_802_11_REMOVE_WEP +/* OID_802_11_REMOVE_WEP */ s8 sme_set_remove_wep(void *pcre_data, u32 key_index); -// OID_802_11_DISASSOCIATE +/* OID_802_11_DISASSOCIATE */ s8 sme_set_disassociate(void *pcore_data); -// OID_802_11_POWER_MODE +/* OID_802_11_POWER_MODE */ s8 sme_get_power_mode(void *pcore_data, u8 *pmode); s8 sme_set_power_mode(void *pcore_data, u8 mode); -// OID_802_11_BSSID_LIST_SCAN +/* OID_802_11_BSSID_LIST_SCAN */ s8 sme_set_bssid_list_scan(void *pcore_data, void *pscan_para); -// OID_802_11_RELOAD_DEFAULTS +/* OID_802_11_RELOAD_DEFAULTS */ s8 sme_set_reload_defaults(void *pcore_data, u8 reload_type); -// The following SME API functions are used for WPA -// -// Mandatory OIDs for WPA -// - -// OID_802_11_ADD_KEY -//s8 sme_set_add_key(void *pcore_data, NDIS_802_11_KEY *pkey); - -// OID_802_11_REMOVE_KEY -//s8 sme_set_remove_key(void *pcore_data, NDIS_802_11_REMOVE_KEY *pkey); - -// OID_802_11_ASSOCIATION_INFORMATION -//s8 sme_set_association_information(void *pcore_data, -// NDIS_802_11_ASSOCIATION_INFORMATION *pinfo); - -// OID_802_11_TEST -//s8 sme_set_test(void *pcore_data, NDIS_802_11_TEST *ptest_data); - -//--------------------------------------------------------------------------// -/* -// The left OIDs - -// OID_802_11_NETWORK_TYPES_SUPPORTED -// OID_802_11_TX_POWER_LEVEL -// OID_802_11_RSSI_TRIGGER -// OID_802_11_NUMBER_OF_ANTENNAS -// OID_802_11_RX_ANTENNA_SELECTED -// OID_802_11_TX_ANTENNA_SELECTED -// OID_802_11_STATISTICS -// OID_802_11_DESIRED_RATES -// OID_802_11_PRIVACY_FILTER - -*/ - /*------------------------- none-standard ----------------------------------*/ s8 sme_get_connect_status(void *pcore_data, u8 *pstatus); - -/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ -//s8 sme_get_scan_type(void *pcore_data, u8 *pscan_type); -//s8 sme_set_scan_type(void *pcore_data, u8 scan_type); - -//s8 sme_get_scan_channel_list(void *pcore_data, u8 *pscan_type); -//s8 sme_set_scan_channel_list(void *pcore_data, u8 scan_type); - +/*--------------------------------------------------------------------------*/ void sme_get_encryption_status(void *pcore_data, u8 *EncryptStatus); void sme_set_encryption_status(void *pcore_data, u8 EncryptStatus); -s8 sme_add_key(void *pcore_data, - u32 key_index, - u8 key_len, - u8 key_type, - u8 *key_bssid, - //u8 *key_rsc, - u8 *ptx_tsc, - u8 *prx_tsc, - u8 *key_material); +s8 sme_add_key(void *pcore_data, + u32 key_index, + u8 key_len, + u8 key_type, + u8 *key_bssid, + u8 *ptx_tsc, + u8 *prx_tsc, + u8 *key_material); void sme_remove_default_key(void *pcore_data, int index); void sme_remove_mapping_key(void *pcore_data, u8 *pmac_addr); void sme_clear_all_mapping_key(void *pcore_data); @@ -202,60 +149,44 @@ u8 sme_set_rx_antenna(void *pcore_data, u32 RxAntenna); void sme_get_tx_antenna(void *pcore_data, u32 *TxAntenna); s8 sme_set_tx_antenna(void *pcore_data, u32 TxAntenna); s8 sme_set_IBSS_chan(void *pcore_data, struct chan_info chan); - -//20061108 WPS s8 sme_set_IE_append(void *pcore_data, u8 *buffer, u16 buf_len); - - - -//================== Local functions ====================== -//#ifdef _HSINCHU -//void drv_translate_rssi(); // HW RSSI bit -> NDIS RSSI representation -//void drv_translate_bss_description(); // Local bss desc -> NDIS bss desc -//void drv_translate_channel(u8 NetworkType, u8 ChannelNumber, u32 *freq); // channel number -> channel /freq. -//#endif _HSINCHU -// -static const u32 PowerDbToMw[] = -{ - 56, //mW, MAX - 0, 17.5 dbm - 40, //mW, MAX - 1, 16.0 dbm - 30, //mW, MAX - 2, 14.8 dbm - 20, //mW, MAX - 3, 13.0 dbm - 15, //mW, MAX - 4, 11.8 dbm - 12, //mW, MAX - 5, 10.6 dbm - 9, //mW, MAX - 6, 9.4 dbm - 7, //mW, MAX - 7, 8.3 dbm - 5, //mW, MAX - 8, 6.4 dbm - 4, //mW, MAX - 9, 5.3 dbm - 3, //mW, MAX - 10, 4.0 dbm - 2, //mW, MAX - 11, ? dbm - 2, //mW, MAX - 12, ? dbm - 2, //mW, MAX - 13, ? dbm - 2, //mW, MAX - 14, ? dbm - 2, //mW, MAX - 15, ? dbm - 2, //mW, MAX - 16, ? dbm - 2, //mW, MAX - 17, ? dbm - 2, //mW, MAX - 18, ? dbm - 1, //mW, MAX - 19, ? dbm - 1, //mW, MAX - 20, ? dbm - 1, //mW, MAX - 21, ? dbm - 1, //mW, MAX - 22, ? dbm - 1, //mW, MAX - 23, ? dbm - 1, //mW, MAX - 24, ? dbm - 1, //mW, MAX - 25, ? dbm - 1, //mW, MAX - 26, ? dbm - 1, //mW, MAX - 27, ? dbm - 1, //mW, MAX - 28, ? dbm - 1, //mW, MAX - 29, ? dbm - 1, //mW, MAX - 30, ? dbm - 1 //mW, MAX - 31, ? dbm +/* ================== Local functions ====================== */ +static const u32 PowerDbToMw[] = { + 56, /* mW, MAX - 0, 17.5 dbm */ + 40, /* mW, MAX - 1, 16.0 dbm */ + 30, /* mW, MAX - 2, 14.8 dbm */ + 20, /* mW, MAX - 3, 13.0 dbm */ + 15, /* mW, MAX - 4, 11.8 dbm */ + 12, /* mW, MAX - 5, 10.6 dbm */ + 9, /* mW, MAX - 6, 9.4 dbm */ + 7, /* mW, MAX - 7, 8.3 dbm */ + 5, /* mW, MAX - 8, 6.4 dbm */ + 4, /* mW, MAX - 9, 5.3 dbm */ + 3, /* mW, MAX - 10, 4.0 dbm */ + 2, /* mW, MAX - 11, ? dbm */ + 2, /* mW, MAX - 12, ? dbm */ + 2, /* mW, MAX - 13, ? dbm */ + 2, /* mW, MAX - 14, ? dbm */ + 2, /* mW, MAX - 15, ? dbm */ + 2, /* mW, MAX - 16, ? dbm */ + 2, /* mW, MAX - 17, ? dbm */ + 2, /* mW, MAX - 18, ? dbm */ + 1, /* mW, MAX - 19, ? dbm */ + 1, /* mW, MAX - 20, ? dbm */ + 1, /* mW, MAX - 21, ? dbm */ + 1, /* mW, MAX - 22, ? dbm */ + 1, /* mW, MAX - 23, ? dbm */ + 1, /* mW, MAX - 24, ? dbm */ + 1, /* mW, MAX - 25, ? dbm */ + 1, /* mW, MAX - 26, ? dbm */ + 1, /* mW, MAX - 27, ? dbm */ + 1, /* mW, MAX - 28, ? dbm */ + 1, /* mW, MAX - 29, ? dbm */ + 1, /* mW, MAX - 30, ? dbm */ + 1 /* mW, MAX - 31, ? dbm */ }; - - - - #endif /* __SME_API_H__ */ -- cgit v0.10.2 From 89343a0e058c26965696c74321248768a1292f12 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 21 Mar 2010 22:31:30 +0100 Subject: Staging: winbond: sysdef.h Coding style fixes. I fixed the C99 comments and removed commented away code. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Acked-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/sysdef.h b/drivers/staging/winbond/sysdef.h index 251b9c5..9195adf 100644 --- a/drivers/staging/winbond/sysdef.h +++ b/drivers/staging/winbond/sysdef.h @@ -1,31 +1,19 @@ +/* Winbond WLAN System Configuration defines */ - -// -// Winbond WLAN System Configuration defines -// - -//===================================================================== -// Current directory is Linux -// The definition WB_LINUX is a keyword for this OS -//===================================================================== #ifndef SYS_DEF_H #define SYS_DEF_H #define WB_LINUX #define WB_LINUX_WPA_PSK - -//#define _IBSS_BEACON_SEQ_STICK_ #define _USE_FALLBACK_RATE_ -//#define ANTDIV_DEFAULT_ON - -#define _WPA2_ // 20061122 It's needed for current Linux driver +#define _WPA2_ #ifndef _WPA_PSK_DEBUG #undef _WPA_PSK_DEBUG #endif -// debug print options, mark what debug you don't need +/* debug print options, mark what debug you don't need */ #ifdef FULL_DEBUG #define _PE_STATE_DUMP_ -- cgit v0.10.2 From d4279a9f2cfd349b8e308770b826ae09f3f5b86d Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Mon, 22 Mar 2010 11:55:30 +0100 Subject: Staging: winbond: wb35reg_f.h Coding style fixes. I fixed the checkpatch things except a couple of long lines. I also removed hungarian notation and CamelCase from the argument names and some "commented away" code. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Acked-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wb35reg_f.h b/drivers/staging/winbond/wb35reg_f.h index d352bce..bf23c10 100644 --- a/drivers/staging/winbond/wb35reg_f.h +++ b/drivers/staging/winbond/wb35reg_f.h @@ -3,59 +3,63 @@ #include "wbhal_s.h" -//==================================== -// Interface function declare -//==================================== -unsigned char Wb35Reg_initial( struct hw_data * pHwData ); -void Uxx_power_on_procedure( struct hw_data * pHwData ); -void Uxx_power_off_procedure( struct hw_data * pHwData ); -void Uxx_ReadEthernetAddress( struct hw_data * pHwData ); -void Dxx_initial( struct hw_data * pHwData ); -void Mxx_initial( struct hw_data * pHwData ); -void RFSynthesizer_initial( struct hw_data * pHwData ); -//void RFSynthesizer_SwitchingChannel( struct hw_data * pHwData, s8 Channel ); -void RFSynthesizer_SwitchingChannel( struct hw_data * pHwData, struct chan_info Channel ); -void BBProcessor_initial( struct hw_data * pHwData ); -void BBProcessor_RateChanging( struct hw_data * pHwData, u8 rate ); // 20060613.1 -//void RF_RateChanging( struct hw_data * pHwData, u8 rate ); // 20060626.5.c Add -u8 RFSynthesizer_SetPowerIndex( struct hw_data * pHwData, u8 PowerIndex ); -u8 RFSynthesizer_SetMaxim2828_24Power( struct hw_data *, u8 index ); -u8 RFSynthesizer_SetMaxim2828_50Power( struct hw_data *, u8 index ); -u8 RFSynthesizer_SetMaxim2827_24Power( struct hw_data *, u8 index ); -u8 RFSynthesizer_SetMaxim2827_50Power( struct hw_data *, u8 index ); -u8 RFSynthesizer_SetMaxim2825Power( struct hw_data *, u8 index ); -u8 RFSynthesizer_SetAiroha2230Power( struct hw_data *, u8 index ); -u8 RFSynthesizer_SetAiroha7230Power( struct hw_data *, u8 index ); -u8 RFSynthesizer_SetWinbond242Power( struct hw_data *, u8 index ); -void GetTxVgaFromEEPROM( struct hw_data * pHwData ); -void EEPROMTxVgaAdjust( struct hw_data * pHwData ); // 20060619.5 Add - -#define RFWriteControlData( _A, _V ) Wb35Reg_Write( _A, 0x0864, _V ) - -void Wb35Reg_destroy( struct hw_data * pHwData ); - -unsigned char Wb35Reg_Read( struct hw_data * pHwData, u16 RegisterNo, u32 * pRegisterValue ); -unsigned char Wb35Reg_ReadSync( struct hw_data * pHwData, u16 RegisterNo, u32 * pRegisterValue ); -unsigned char Wb35Reg_Write( struct hw_data * pHwData, u16 RegisterNo, u32 RegisterValue ); -unsigned char Wb35Reg_WriteSync( struct hw_data * pHwData, u16 RegisterNo, u32 RegisterValue ); -unsigned char Wb35Reg_WriteWithCallbackValue( struct hw_data * pHwData, - u16 RegisterNo, - u32 RegisterValue, - s8 *pValue, - s8 Len); -unsigned char Wb35Reg_BurstWrite( struct hw_data * pHwData, u16 RegisterNo, u32 * pRegisterData, u8 NumberOfData, u8 Flag ); - -void Wb35Reg_EP0VM( struct hw_data * pHwData ); -void Wb35Reg_EP0VM_start( struct hw_data * pHwData ); +/* + * ==================================== + * Interface function declare + * ==================================== + */ +unsigned char Wb35Reg_initial(struct hw_data *hw_data); +void Uxx_power_on_procedure(struct hw_data *hw_data); +void Uxx_power_off_procedure(struct hw_data *hw_data); +void Uxx_ReadEthernetAddress(struct hw_data *hw_data); +void Dxx_initial(struct hw_data *hw_data); +void Mxx_initial(struct hw_data *hw_data); +void RFSynthesizer_initial(struct hw_data *hw_data); +void RFSynthesizer_SwitchingChannel(struct hw_data *hw_data, struct chan_info channel); +void BBProcessor_initial(struct hw_data *hw_data); +void BBProcessor_RateChanging(struct hw_data *hw_data, u8 rate); +u8 RFSynthesizer_SetPowerIndex(struct hw_data *hw_data, u8 power_index); +u8 RFSynthesizer_SetMaxim2828_24Power(struct hw_data *, u8 index); +u8 RFSynthesizer_SetMaxim2828_50Power(struct hw_data *, u8 index); +u8 RFSynthesizer_SetMaxim2827_24Power(struct hw_data *, u8 index); +u8 RFSynthesizer_SetMaxim2827_50Power(struct hw_data *, u8 index); +u8 RFSynthesizer_SetMaxim2825Power(struct hw_data *, u8 index); +u8 RFSynthesizer_SetAiroha2230Power(struct hw_data *, u8 index); +u8 RFSynthesizer_SetAiroha7230Power(struct hw_data *, u8 index); +u8 RFSynthesizer_SetWinbond242Power(struct hw_data *, u8 index); +void GetTxVgaFromEEPROM(struct hw_data *hw_data); +void EEPROMTxVgaAdjust(struct hw_data *hw_data); + +#define RFWriteControlData(_A, _V) Wb35Reg_Write(_A, 0x0864, _V) + +void Wb35Reg_destroy(struct hw_data *hw_data); + +unsigned char Wb35Reg_Read(struct hw_data *hw_data, u16 register_no, u32 *register_value); +unsigned char Wb35Reg_ReadSync(struct hw_data *hw_data, u16 register_no, u32 *register_value); +unsigned char Wb35Reg_Write(struct hw_data *hw_data, u16 register_no, u32 register_value); +unsigned char Wb35Reg_WriteSync(struct hw_data *hw_data, u16 register_no, u32 register_value); +unsigned char Wb35Reg_WriteWithCallbackValue(struct hw_data *hw_data, + u16 register_no, + u32 register_value, + s8 *value, + s8 len); +unsigned char Wb35Reg_BurstWrite(struct hw_data *hw_data, + u16 register_no, + u32 *register_data, + u8 number_of_data, + u8 flag); + +void Wb35Reg_EP0VM(struct hw_data *hw_data); +void Wb35Reg_EP0VM_start(struct hw_data *hw_data); void Wb35Reg_EP0VM_complete(struct urb *urb); -u32 BitReverse( u32 dwData, u32 DataLength); +u32 BitReverse(u32 data, u32 data_length); -void CardGetMulticastBit( u8 Address[MAC_ADDR_LENGTH], u8 *Byte, u8 *Value ); -u32 CardComputeCrc( u8 * Buffer, u32 Length ); +void CardGetMulticastBit(u8 address[MAC_ADDR_LENGTH], u8 *byte, u8 *value); +u32 CardComputeCrc(u8 *buffer, u32 length); -void Wb35Reg_phy_calibration( struct hw_data * pHwData ); -void Wb35Reg_Update( struct hw_data * pHwData, u16 RegisterNo, u32 RegisterValue ); -unsigned char adjust_TXVGA_for_iq_mag( struct hw_data * pHwData ); +void Wb35Reg_phy_calibration(struct hw_data *hw_data); +void Wb35Reg_Update(struct hw_data *hw_data, u16 register_no, u32 register_value); +unsigned char adjust_TXVGA_for_iq_mag(struct hw_data *hw_data); #endif -- cgit v0.10.2 From 25e47dfc863406a29d7e66c4d673cc712647b50f Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Mon, 22 Mar 2010 18:59:58 +0100 Subject: Staging: winbond: wb35reg_s.h Coding styls fixes. I fixed all problems reported by checkpatch.pl except some long lines. I also removed commented away code and revision comments. Checked for regressions with Dan Carpenters strip_whitespace.pl and diff. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wb35reg_s.h b/drivers/staging/winbond/wb35reg_s.h index 32ef4b8..4eff009 100644 --- a/drivers/staging/winbond/wb35reg_s.h +++ b/drivers/staging/winbond/wb35reg_s.h @@ -5,98 +5,100 @@ #include #include -//======================================================================================= -/* - HAL setting function - - ======================================== - |Uxx| |Dxx| |Mxx| |BB| |RF| - ======================================== - | | - Wb35Reg_Read Wb35Reg_Write - - ---------------------------------------- - WbUsb_CallUSBDASync supplied By WbUsb module -*/ -//======================================================================================= - -#define GetBit( dwData, i) ( dwData & (0x00000001 << i)) -#define SetBit( dwData, i) ( dwData | (0x00000001 << i)) -#define ClearBit( dwData, i) ( dwData & ~(0x00000001 << i)) - -#define IGNORE_INCREMENT 0 -#define AUTO_INCREMENT 0 -#define NO_INCREMENT 1 -#define REG_DIRECTION(_x,_y) ((_y)->DIRECT ==0 ? usb_rcvctrlpipe(_x,0) : usb_sndctrlpipe(_x,0)) -#define REG_BUF_SIZE(_x) ((_x)->bRequest== 0x04 ? cpu_to_le16((_x)->wLength) : 4) - -// 20060613.2 Add the follow definition +/* ========================================================================= + * + * HAL setting function + * + * ======================================== + * |Uxx| |Dxx| |Mxx| |BB| |RF| + * ======================================== + * | | + * Wb35Reg_Read Wb35Reg_Write + * + * ---------------------------------------- + * WbUsb_CallUSBDASync supplied By WbUsb module + * ========================================================================== + */ +#define GetBit(dwData, i) (dwData & (0x00000001 << i)) +#define SetBit(dwData, i) (dwData | (0x00000001 << i)) +#define ClearBit(dwData, i) (dwData & ~(0x00000001 << i)) + +#define IGNORE_INCREMENT 0 +#define AUTO_INCREMENT 0 +#define NO_INCREMENT 1 +#define REG_DIRECTION(_x, _y) ((_y)->DIRECT == 0 ? usb_rcvctrlpipe(_x, 0) : usb_sndctrlpipe(_x, 0)) +#define REG_BUF_SIZE(_x) ((_x)->bRequest == 0x04 ? cpu_to_le16((_x)->wLength) : 4) + #define BB48_DEFAULT_AL2230_11B 0x0033447c #define BB4C_DEFAULT_AL2230_11B 0x0A00FEFF #define BB48_DEFAULT_AL2230_11G 0x00332C1B #define BB4C_DEFAULT_AL2230_11G 0x0A00FEFF -#define BB48_DEFAULT_WB242_11B 0x00292315 //backoff 2dB -#define BB4C_DEFAULT_WB242_11B 0x0800FEFF //backoff 2dB -//#define BB48_DEFAULT_WB242_11B 0x00201B11 //backoff 4dB -//#define BB4C_DEFAULT_WB242_11B 0x0600FF00 //backoff 4dB +#define BB48_DEFAULT_WB242_11B 0x00292315 /* backoff 2dB */ +#define BB4C_DEFAULT_WB242_11B 0x0800FEFF /* backoff 2dB */ #define BB48_DEFAULT_WB242_11G 0x00453B24 #define BB4C_DEFAULT_WB242_11G 0x0E00FEFF -//==================================== -// Default setting for Mxx -//==================================== -#define DEFAULT_CWMIN 31 //(M2C) CWmin. Its value is in the range 0-31. -#define DEFAULT_CWMAX 1023 //(M2C) CWmax. Its value is in the range 0-1023. -#define DEFAULT_AID 1 //(M34) AID. Its value is in the range 1-2007. +/* + * ==================================== + * Default setting for Mxx + * ==================================== + */ +#define DEFAULT_CWMIN 31 /* (M2C) CWmin. Its value is in the range 0-31. */ +#define DEFAULT_CWMAX 1023 /* (M2C) CWmax. Its value is in the range 0-1023. */ +#define DEFAULT_AID 1 /* (M34) AID. Its value is in the range 1-2007. */ #ifdef _USE_FALLBACK_RATE_ -#define DEFAULT_RATE_RETRY_LIMIT 2 //(M38) as named +#define DEFAULT_RATE_RETRY_LIMIT 2 /* (M38) as named */ #else -#define DEFAULT_RATE_RETRY_LIMIT 7 //(M38) as named +#define DEFAULT_RATE_RETRY_LIMIT 7 /* (M38) as named */ #endif -#define DEFAULT_LONG_RETRY_LIMIT 7 //(M38) LongRetryLimit. Its value is in the range 0-15. -#define DEFAULT_SHORT_RETRY_LIMIT 7 //(M38) ShortRetryLimit. Its value is in the range 0-15. -#define DEFAULT_PIFST 25 //(M3C) PIFS Time. Its value is in the range 0-65535. -#define DEFAULT_EIFST 354 //(M3C) EIFS Time. Its value is in the range 0-1048575. -#define DEFAULT_DIFST 45 //(M3C) DIFS Time. Its value is in the range 0-65535. -#define DEFAULT_SIFST 5 //(M3C) SIFS Time. Its value is in the range 0-65535. -#define DEFAULT_OSIFST 10 //(M3C) Original SIFS Time. Its value is in the range 0-15. -#define DEFAULT_ATIMWD 0 //(M40) ATIM Window. Its value is in the range 0-65535. -#define DEFAULT_SLOT_TIME 20 //(M40) ($) SlotTime. Its value is in the range 0-255. -#define DEFAULT_MAX_TX_MSDU_LIFE_TIME 512 //(M44) MaxTxMSDULifeTime. Its value is in the range 0-4294967295. -#define DEFAULT_BEACON_INTERVAL 500 //(M48) Beacon Interval. Its value is in the range 0-65535. -#define DEFAULT_PROBE_DELAY_TIME 200 //(M48) Probe Delay Time. Its value is in the range 0-65535. -#define DEFAULT_PROTOCOL_VERSION 0 //(M4C) -#define DEFAULT_MAC_POWER_STATE 2 //(M4C) 2: MAC at power active -#define DEFAULT_DTIM_ALERT_TIME 0 +#define DEFAULT_LONG_RETRY_LIMIT 7 /* (M38) LongRetryLimit. Its value is in the range 0-15. */ +#define DEFAULT_SHORT_RETRY_LIMIT 7 /* (M38) ShortRetryLimit. Its value is in the range 0-15. */ +#define DEFAULT_PIFST 25 /* (M3C) PIFS Time. Its value is in the range 0-65535. */ +#define DEFAULT_EIFST 354 /* (M3C) EIFS Time. Its value is in the range 0-1048575. */ +#define DEFAULT_DIFST 45 /* (M3C) DIFS Time. Its value is in the range 0-65535. */ +#define DEFAULT_SIFST 5 /* (M3C) SIFS Time. Its value is in the range 0-65535. */ +#define DEFAULT_OSIFST 10 /* (M3C) Original SIFS Time. Its value is in the range 0-15. */ +#define DEFAULT_ATIMWD 0 /* (M40) ATIM Window. Its value is in the range 0-65535. */ +#define DEFAULT_SLOT_TIME 20 /* (M40) ($) SlotTime. Its value is in the range 0-255. */ +#define DEFAULT_MAX_TX_MSDU_LIFE_TIME 512 /* (M44) MaxTxMSDULifeTime. Its value is in the range 0-4294967295. */ +#define DEFAULT_BEACON_INTERVAL 500 /* (M48) Beacon Interval. Its value is in the range 0-65535. */ +#define DEFAULT_PROBE_DELAY_TIME 200 /* (M48) Probe Delay Time. Its value is in the range 0-65535. */ +#define DEFAULT_PROTOCOL_VERSION 0 /* (M4C) */ +#define DEFAULT_MAC_POWER_STATE 2 /* (M4C) 2: MAC at power active */ +#define DEFAULT_DTIM_ALERT_TIME 0 struct wb35_reg_queue { - struct urb *urb; + struct urb *urb; void *pUsbReq; void *Next; union { u32 VALUE; u32 *pBuffer; }; - u8 RESERVED[4]; // space reserved for communication - u16 INDEX; // For storing the register index - u8 RESERVED_VALID; // Indicate whether the RESERVED space is valid at this command. - u8 DIRECT; // 0:In 1:Out + u8 RESERVED[4]; /* space reserved for communication */ + u16 INDEX; /* For storing the register index */ + u8 RESERVED_VALID; /* Indicate whether the RESERVED space is valid at this command. */ + u8 DIRECT; /* 0:In 1:Out */ }; -//==================================== -// Internal variable for module -//==================================== +/* + * ==================================== + * Internal variable for module + * ==================================== + */ #define MAX_SQ3_FILTER_SIZE 5 struct wb35_reg { - //============================ - // Register Bank backup - //============================ - u32 U1B0; //bit16 record the h/w radio on/off status + /* + * ============================ + * Register Bank backup + * ============================ + */ + u32 U1B0; /* bit16 record the h/w radio on/off status */ u32 U1BC_LEDConfigure; u32 D00_DmaControl; u32 M00_MacControl; @@ -105,68 +107,65 @@ struct wb35_reg { u32 M04_MulticastAddress1; u32 M08_MulticastAddress2; }; - u8 Multicast[8]; // contents of card multicast registers + u8 Multicast[8]; /* contents of card multicast registers */ }; u32 M24_MacControl; u32 M28_MacControl; u32 M2C_MacControl; u32 M38_MacControl; - u32 M3C_MacControl; // 20060214 backup only + u32 M3C_MacControl; u32 M40_MacControl; - u32 M44_MacControl; // 20060214 backup only - u32 M48_MacControl; // 20060214 backup only + u32 M44_MacControl; + u32 M48_MacControl; u32 M4C_MacStatus; - u32 M60_MacControl; // 20060214 backup only - u32 M68_MacControl; // 20060214 backup only - u32 M70_MacControl; // 20060214 backup only - u32 M74_MacControl; // 20060214 backup only - u32 M78_ERPInformation;//930206.2.b - u32 M7C_MacControl; // 20060214 backup only - u32 M80_MacControl; // 20060214 backup only - u32 M84_MacControl; // 20060214 backup only - u32 M88_MacControl; // 20060214 backup only - u32 M98_MacControl; // 20060214 backup only - - //[20040722 WK] - //Baseband register - u32 BB0C; // Used for LNA calculation - u32 BB2C; // - u32 BB30; //11b acquisition control register + u32 M60_MacControl; + u32 M68_MacControl; + u32 M70_MacControl; + u32 M74_MacControl; + u32 M78_ERPInformation; + u32 M7C_MacControl; + u32 M80_MacControl; + u32 M84_MacControl; + u32 M88_MacControl; + u32 M98_MacControl; + + /* Baseband register */ + u32 BB0C; /* Used for LNA calculation */ + u32 BB2C; + u32 BB30; /* 11b acquisition control register */ u32 BB3C; - u32 BB48; // 20051221.1.a 20060613.1 Fix OBW issue of 11b/11g rate - u32 BB4C; // 20060613.1 Fix OBW issue of 11b/11g rate - u32 BB50; //mode control register + u32 BB48; + u32 BB4C; + u32 BB50; /* mode control register */ u32 BB54; - u32 BB58; //IQ_ALPHA - u32 BB5C; // For test - u32 BB60; // for WTO read value - - //------------------- - // VM - //------------------- - spinlock_t EP0VM_spin_lock; // 4B - u32 EP0VM_status;//$$ + u32 BB58; /* IQ_ALPHA */ + u32 BB5C; /* For test */ + u32 BB60; /* for WTO read value */ + + /* VM */ + spinlock_t EP0VM_spin_lock; /* 4B */ + u32 EP0VM_status; /* $$ */ struct wb35_reg_queue *reg_first; struct wb35_reg_queue *reg_last; - atomic_t RegFireCount; + atomic_t RegFireCount; - // Hardware status + /* Hardware status */ u8 EP0vm_state; u8 mac_power_save; - u8 EEPROMPhyType; // 0 ~ 15 for Maxim (0 Ä„V MAX2825, 1 Ä„V MAX2827, 2 Ä„V MAX2828, 3 Ä„V MAX2829), - // 16 ~ 31 for Airoha (16 Ä„V AL2230, 11 - AL7230) - // 32 ~ Reserved - // 33 ~ 47 For WB242 ( 33 - WB242, 34 - WB242 with new Txvga 0.5 db step) - // 48 ~ 255 ARE RESERVED. - u8 EEPROMRegion; //Region setting in EEPROM - - u32 SyncIoPause; // If user use the Sync Io to access Hw, then pause the async access - - u8 LNAValue[4]; //Table for speed up running + u8 EEPROMPhyType; /* + * 0 ~ 15 for Maxim (0 Ä„V MAX2825, 1 Ä„V MAX2827, 2 Ä„V MAX2828, 3 Ä„V MAX2829), + * 16 ~ 31 for Airoha (16 Ä„V AL2230, 11 - AL7230) + * 32 ~ Reserved + * 33 ~ 47 For WB242 ( 33 - WB242, 34 - WB242 with new Txvga 0.5 db step) + * 48 ~ 255 ARE RESERVED. + */ + u8 EEPROMRegion; /* Region setting in EEPROM */ + + u32 SyncIoPause; /* If user use the Sync Io to access Hw, then pause the async access */ + + u8 LNAValue[4]; /* Table for speed up running */ u32 SQ3_filter[MAX_SQ3_FILTER_SIZE]; u32 SQ3_index; - }; - #endif -- cgit v0.10.2 From 4095aef6dc485545ebbd96d23eac0b11b729e765 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 22 Mar 2010 20:41:44 +0200 Subject: Staging: winbond: fix brace, comments and space coding style issue in mlmetxrx.c This is a patch to the mlmetxrx.c file that fixed up a brace, comments and space Errors found by the checkpatch.pl tool. Signed-off-by: Ruslan Pisarev Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mlmetxrx.c b/drivers/staging/winbond/mlmetxrx.c index f856b94..dcd8a11 100644 --- a/drivers/staging/winbond/mlmetxrx.c +++ b/drivers/staging/winbond/mlmetxrx.c @@ -1,26 +1,26 @@ -//============================================================================ -// Module Name: -// MLMETxRx.C -// -// Description: -// The interface between MDS (MAC Data Service) and MLME. -// -// Revision History: -// -------------------------------------------------------------------------- -// 200209 UN20 Jennifer Xu -// Initial Release -// 20021108 PD43 Austin Liu -// 20030117 PD43 Austin Liu -// Deleted MLMEReturnPacket and MLMEProcThread() -// -// Copyright (c) 1996-2002 Winbond Electronics Corp. All Rights Reserved. -//============================================================================ +/* ============================================================================ + Module Name: + MLMETxRx.C + + Description: + The interface between MDS (MAC Data Service) and MLME. + + Revision History: + -------------------------------------------------------------------------- + 200209 UN20 Jennifer Xu + Initial Release + 20021108 PD43 Austin Liu + 20030117 PD43 Austin Liu + Deleted MLMEReturnPacket and MLMEProcThread() + + Copyright (c) 1996-2002 Winbond Electronics Corp. All Rights Reserved. +============================================================================ */ #include "sysdef.h" #include "mds_f.h" -//============================================================================= -u8 MLMESendFrame(struct wbsoft_priv * adapter, u8 *pMMPDU, u16 len, u8 DataType) +/* ============================================================================= */ +u8 MLMESendFrame(struct wbsoft_priv *adapter, u8 *pMMPDU, u16 len, u8 DataType) /* DataType : FRAME_TYPE_802_11_MANAGEMENT, FRAME_TYPE_802_11_MANAGEMENT_CHALLENGE, FRAME_TYPE_802_11_DATA */ { @@ -30,17 +30,17 @@ u8 MLMESendFrame(struct wbsoft_priv * adapter, u8 *pMMPDU, u16 len, u8 DataType) } adapter->sMlmeFrame.IsInUsed = PACKET_COME_FROM_MLME; - // Keep information for sending + /* Keep information for sending */ adapter->sMlmeFrame.pMMPDU = pMMPDU; adapter->sMlmeFrame.DataType = DataType; - // len must be the last setting due to QUERY_SIZE_SECOND of Mds + /* len must be the last setting due to QUERY_SIZE_SECOND of Mds */ adapter->sMlmeFrame.len = len; adapter->sMlmeFrame.wNumTxMMPDU++; - // H/W will enter power save by set the register. S/W don't send null frame - //with PWRMgt bit enbled to enter power save now. + /* H/W will enter power save by set the register. S/W don't send null frame + with PWRMgt bit enbled to enter power save now. */ - // Transmit NDIS packet + /* Transmit NDIS packet */ Mds_Tx(adapter); return true; } @@ -60,7 +60,7 @@ static void MLMEfreeMMPDUBuffer(struct wbsoft_priv *adapter, s8 *pData) { int i; - // Reclaim the data buffer + /* Reclaim the data buffer */ for (i = 0; i < MAX_NUM_TX_MMPDU; i++) { if (pData == (s8 *)&(adapter->sMlmeFrame.TxMMPDU[i])) break; @@ -68,24 +68,24 @@ static void MLMEfreeMMPDUBuffer(struct wbsoft_priv *adapter, s8 *pData) if (adapter->sMlmeFrame.TxMMPDUInUse[i]) adapter->sMlmeFrame.TxMMPDUInUse[i] = false; else { - // Something wrong - // PD43 Add debug code here??? + /* Something wrong + PD43 Add debug code here??? */ } } void -MLME_SendComplete(struct wbsoft_priv * adapter, u8 PacketID, unsigned char SendOK) +MLME_SendComplete(struct wbsoft_priv *adapter, u8 PacketID, unsigned char SendOK) { MLME_TXCALLBACK TxCallback; - // Reclaim the data buffer + /* Reclaim the data buffer */ adapter->sMlmeFrame.len = 0; - MLMEfreeMMPDUBuffer( adapter, adapter->sMlmeFrame.pMMPDU ); + MLMEfreeMMPDUBuffer(adapter, adapter->sMlmeFrame.pMMPDU); TxCallback.bResult = MLME_SUCCESS; - // Return resource + /* Return resource */ adapter->sMlmeFrame.IsInUsed = PACKET_FREE_TO_USE; } -- cgit v0.10.2 From b08585fc584f5e090cf94535171be3ffc6549d98 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 22 Mar 2010 20:47:48 +0200 Subject: Staging: winbond: fix comments and space coding style issue in mlmetxrx_f.h This is a patch to the mlmetxrx_f.h file that fixed up a comments and space Errors found by the checkpatch.pl tools. Signed-off-by: Ruslan Pisarev Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mlmetxrx_f.h b/drivers/staging/winbond/mlmetxrx_f.h index 6c04e3e..d1aa261 100644 --- a/drivers/staging/winbond/mlmetxrx_f.h +++ b/drivers/staging/winbond/mlmetxrx_f.h @@ -1,10 +1,10 @@ -//================================================================ +/* ================================================================ // MLMETxRx.H -- // // Functions defined in MLMETxRx.c. // // Copyright (c) 2002 Winbond Electrics Corp. All Rights Reserved. -//================================================================ +//================================================================ */ #ifndef _MLMETXRX_H #define _MLMETXRX_H @@ -12,7 +12,7 @@ void MLME_GetNextPacket(struct wbsoft_priv *adapter, struct wb35_descriptor *pDes); u8 MLMESendFrame(struct wbsoft_priv *adapter, - u8 * pMMPDU, u16 len, u8 DataType); + u8 *pMMPDU, u16 len, u8 DataType); void MLME_SendComplete(struct wbsoft_priv *adapter, u8 PacketID, -- cgit v0.10.2 From fa448c1f41712ac0f6640006582befb6296c19fc Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Thu, 25 Mar 2010 14:44:53 +0100 Subject: Staging: winbond: wb35reg.c Coding style fixes I fixed the problems reported by checkpatch.pl excetp for long lines, a couple of printks and some warnings about usb_free_urb(NULL). I checked for regressions with Dan Carpenters strip_whitespace.pl and diff and everything looks good. Generated .o is identical to master. This is a new patch against master where I fixed up a switch-statement after comments from Pavel Machek. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Acked-by: Dan Carpenter Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wb35reg.c b/drivers/staging/winbond/wb35reg.c index 1b93547..7707223 100644 --- a/drivers/staging/winbond/wb35reg.c +++ b/drivers/staging/winbond/wb35reg.c @@ -6,60 +6,61 @@ extern void phy_calibration_winbond(struct hw_data *phw_data, u32 frequency); -// true : read command process successfully -// false : register not support -// RegisterNo : start base -// pRegisterData : data point -// NumberOfData : number of register data -// Flag : AUTO_INCREMENT - RegisterNo will auto increment 4 -// NO_INCREMENT - Function will write data into the same register -unsigned char -Wb35Reg_BurstWrite(struct hw_data * pHwData, u16 RegisterNo, u32 * pRegisterData, u8 NumberOfData, u8 Flag) +/* + * true : read command process successfully + * false : register not support + * RegisterNo : start base + * pRegisterData : data point + * NumberOfData : number of register data + * Flag : AUTO_INCREMENT - RegisterNo will auto increment 4 + * NO_INCREMENT - Function will write data into the same register + */ +unsigned char Wb35Reg_BurstWrite(struct hw_data *pHwData, u16 RegisterNo, u32 *pRegisterData, u8 NumberOfData, u8 Flag) { - struct wb35_reg *reg = &pHwData->reg; - struct urb *urb = NULL; - struct wb35_reg_queue *reg_queue = NULL; - u16 UrbSize; - struct usb_ctrlrequest *dr; - u16 i, DataSize = NumberOfData*4; - - // Module shutdown + struct wb35_reg *reg = &pHwData->reg; + struct urb *urb = NULL; + struct wb35_reg_queue *reg_queue = NULL; + u16 UrbSize; + struct usb_ctrlrequest *dr; + u16 i, DataSize = NumberOfData * 4; + + /* Module shutdown */ if (pHwData->SurpriseRemove) return false; - // Trying to use burst write function if use new hardware + /* Trying to use burst write function if use new hardware */ UrbSize = sizeof(struct wb35_reg_queue) + DataSize + sizeof(struct usb_ctrlrequest); reg_queue = kzalloc(UrbSize, GFP_ATOMIC); urb = usb_alloc_urb(0, GFP_ATOMIC); - if( urb && reg_queue ) { - reg_queue->DIRECT = 2;// burst write register + if (urb && reg_queue) { + reg_queue->DIRECT = 2; /* burst write register */ reg_queue->INDEX = RegisterNo; reg_queue->pBuffer = (u32 *)((u8 *)reg_queue + sizeof(struct wb35_reg_queue)); - memcpy( reg_queue->pBuffer, pRegisterData, DataSize ); - //the function for reversing register data from little endian to big endian - for( i=0; ipBuffer[i] = cpu_to_le32( reg_queue->pBuffer[i] ); + memcpy(reg_queue->pBuffer, pRegisterData, DataSize); + /* the function for reversing register data from little endian to big endian */ + for (i = 0; i < NumberOfData ; i++) + reg_queue->pBuffer[i] = cpu_to_le32(reg_queue->pBuffer[i]); dr = (struct usb_ctrlrequest *)((u8 *)reg_queue + sizeof(struct wb35_reg_queue) + DataSize); dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE; - dr->bRequest = 0x04; // USB or vendor-defined request code, burst mode - dr->wValue = cpu_to_le16( Flag ); // 0: Register number auto-increment, 1: No auto increment - dr->wIndex = cpu_to_le16( RegisterNo ); - dr->wLength = cpu_to_le16( DataSize ); + dr->bRequest = 0x04; /* USB or vendor-defined request code, burst mode */ + dr->wValue = cpu_to_le16(Flag); /* 0: Register number auto-increment, 1: No auto increment */ + dr->wIndex = cpu_to_le16(RegisterNo); + dr->wLength = cpu_to_le16(DataSize); reg_queue->Next = NULL; reg_queue->pUsbReq = dr; reg_queue->urb = urb; - spin_lock_irq( ®->EP0VM_spin_lock ); + spin_lock_irq(®->EP0VM_spin_lock); if (reg->reg_first == NULL) reg->reg_first = reg_queue; else reg->reg_last->Next = reg_queue; reg->reg_last = reg_queue; - spin_unlock_irq( ®->EP0VM_spin_lock ); + spin_unlock_irq(®->EP0VM_spin_lock); - // Start EP0VM + /* Start EP0VM */ Wb35Reg_EP0VM_start(pHwData); return true; @@ -73,8 +74,7 @@ Wb35Reg_BurstWrite(struct hw_data * pHwData, u16 RegisterNo, u32 * pRegisterData return false; } -void -Wb35Reg_Update(struct hw_data * pHwData, u16 RegisterNo, u32 RegisterValue) +void Wb35Reg_Update(struct hw_data *pHwData, u16 RegisterNo, u32 RegisterValue) { struct wb35_reg *reg = &pHwData->reg; switch (RegisterNo) { @@ -116,97 +116,96 @@ Wb35Reg_Update(struct hw_data * pHwData, u16 RegisterNo, u32 RegisterValue) } } -// true : read command process successfully -// false : register not support -unsigned char -Wb35Reg_WriteSync( struct hw_data * pHwData, u16 RegisterNo, u32 RegisterValue ) +/* + * true : read command process successfully + * false : register not support + */ +unsigned char Wb35Reg_WriteSync(struct hw_data *pHwData, u16 RegisterNo, u32 RegisterValue) { struct wb35_reg *reg = &pHwData->reg; int ret = -1; - // Module shutdown + /* Module shutdown */ if (pHwData->SurpriseRemove) return false; RegisterValue = cpu_to_le32(RegisterValue); - // update the register by send usb message------------------------------------ + /* update the register by send usb message */ reg->SyncIoPause = 1; - // 20060717.5 Wait until EP0VM stop + /* Wait until EP0VM stop */ while (reg->EP0vm_state != VM_STOP) msleep(10); - // Sync IoCallDriver + /* Sync IoCallDriver */ reg->EP0vm_state = VM_RUNNING; - ret = usb_control_msg( pHwData->WbUsb.udev, - usb_sndctrlpipe( pHwData->WbUsb.udev, 0 ), + ret = usb_control_msg(pHwData->WbUsb.udev, + usb_sndctrlpipe(pHwData->WbUsb.udev, 0), 0x03, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_OUT, - 0x0,RegisterNo, &RegisterValue, 4, HZ*100 ); + 0x0, RegisterNo, &RegisterValue, 4, HZ * 100); reg->EP0vm_state = VM_STOP; reg->SyncIoPause = 0; Wb35Reg_EP0VM_start(pHwData); if (ret < 0) { - #ifdef _PE_REG_DUMP_ +#ifdef _PE_REG_DUMP_ printk("EP0 Write register usb message sending error\n"); - #endif - - pHwData->SurpriseRemove = 1; // 20060704.2 +#endif + pHwData->SurpriseRemove = 1; return false; } - return true; } -// true : read command process successfully -// false : register not support -unsigned char -Wb35Reg_Write( struct hw_data * pHwData, u16 RegisterNo, u32 RegisterValue ) +/* + * true : read command process successfully + * false : register not support + */ +unsigned char Wb35Reg_Write(struct hw_data *pHwData, u16 RegisterNo, u32 RegisterValue) { - struct wb35_reg *reg = &pHwData->reg; - struct usb_ctrlrequest *dr; - struct urb *urb = NULL; - struct wb35_reg_queue *reg_queue = NULL; - u16 UrbSize; - + struct wb35_reg *reg = &pHwData->reg; + struct usb_ctrlrequest *dr; + struct urb *urb = NULL; + struct wb35_reg_queue *reg_queue = NULL; + u16 UrbSize; - // Module shutdown + /* Module shutdown */ if (pHwData->SurpriseRemove) return false; - // update the register by send urb request------------------------------------ + /* update the register by send urb request */ UrbSize = sizeof(struct wb35_reg_queue) + sizeof(struct usb_ctrlrequest); reg_queue = kzalloc(UrbSize, GFP_ATOMIC); urb = usb_alloc_urb(0, GFP_ATOMIC); if (urb && reg_queue) { - reg_queue->DIRECT = 1;// burst write register + reg_queue->DIRECT = 1; /* burst write register */ reg_queue->INDEX = RegisterNo; reg_queue->VALUE = cpu_to_le32(RegisterValue); reg_queue->RESERVED_VALID = false; dr = (struct usb_ctrlrequest *)((u8 *)reg_queue + sizeof(struct wb35_reg_queue)); - dr->bRequestType = USB_TYPE_VENDOR|USB_DIR_OUT |USB_RECIP_DEVICE; - dr->bRequest = 0x03; // USB or vendor-defined request code, burst mode + dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE; + dr->bRequest = 0x03; /* USB or vendor-defined request code, burst mode */ dr->wValue = cpu_to_le16(0x0); dr->wIndex = cpu_to_le16(RegisterNo); dr->wLength = cpu_to_le16(4); - // Enter the sending queue + /* Enter the sending queue */ reg_queue->Next = NULL; reg_queue->pUsbReq = dr; reg_queue->urb = urb; - spin_lock_irq(®->EP0VM_spin_lock ); + spin_lock_irq(®->EP0VM_spin_lock); if (reg->reg_first == NULL) reg->reg_first = reg_queue; else reg->reg_last->Next = reg_queue; reg->reg_last = reg_queue; - spin_unlock_irq( ®->EP0VM_spin_lock ); + spin_unlock_irq(®->EP0VM_spin_lock); - // Start EP0VM + /* Start EP0VM */ Wb35Reg_EP0VM_start(pHwData); return true; @@ -218,56 +217,60 @@ Wb35Reg_Write( struct hw_data * pHwData, u16 RegisterNo, u32 RegisterValue ) } } -//This command will be executed with a user defined value. When it completes, -//this value is useful. For example, hal_set_current_channel will use it. -// true : read command process successfully -// false : register not support -unsigned char -Wb35Reg_WriteWithCallbackValue( struct hw_data * pHwData, u16 RegisterNo, u32 RegisterValue, - s8 *pValue, s8 Len) +/* + * This command will be executed with a user defined value. When it completes, + * this value is useful. For example, hal_set_current_channel will use it. + * true : read command process successfully + * false : register not support + */ +unsigned char Wb35Reg_WriteWithCallbackValue(struct hw_data *pHwData, + u16 RegisterNo, + u32 RegisterValue, + s8 *pValue, + s8 Len) { - struct wb35_reg *reg = &pHwData->reg; - struct usb_ctrlrequest *dr; - struct urb *urb = NULL; - struct wb35_reg_queue *reg_queue = NULL; - u16 UrbSize; + struct wb35_reg *reg = &pHwData->reg; + struct usb_ctrlrequest *dr; + struct urb *urb = NULL; + struct wb35_reg_queue *reg_queue = NULL; + u16 UrbSize; - // Module shutdown + /* Module shutdown */ if (pHwData->SurpriseRemove) return false; - // update the register by send urb request------------------------------------ + /* update the register by send urb request */ UrbSize = sizeof(struct wb35_reg_queue) + sizeof(struct usb_ctrlrequest); reg_queue = kzalloc(UrbSize, GFP_ATOMIC); urb = usb_alloc_urb(0, GFP_ATOMIC); if (urb && reg_queue) { - reg_queue->DIRECT = 1;// burst write register + reg_queue->DIRECT = 1; /* burst write register */ reg_queue->INDEX = RegisterNo; reg_queue->VALUE = cpu_to_le32(RegisterValue); - //NOTE : Users must guarantee the size of value will not exceed the buffer size. + /* NOTE : Users must guarantee the size of value will not exceed the buffer size. */ memcpy(reg_queue->RESERVED, pValue, Len); reg_queue->RESERVED_VALID = true; dr = (struct usb_ctrlrequest *)((u8 *)reg_queue + sizeof(struct wb35_reg_queue)); - dr->bRequestType = USB_TYPE_VENDOR|USB_DIR_OUT |USB_RECIP_DEVICE; - dr->bRequest = 0x03; // USB or vendor-defined request code, burst mode + dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_OUT | USB_RECIP_DEVICE; + dr->bRequest = 0x03; /* USB or vendor-defined request code, burst mode */ dr->wValue = cpu_to_le16(0x0); dr->wIndex = cpu_to_le16(RegisterNo); dr->wLength = cpu_to_le16(4); - // Enter the sending queue + /* Enter the sending queue */ reg_queue->Next = NULL; reg_queue->pUsbReq = dr; reg_queue->urb = urb; - spin_lock_irq (®->EP0VM_spin_lock ); - if( reg->reg_first == NULL ) + spin_lock_irq(®->EP0VM_spin_lock); + if (reg->reg_first == NULL) reg->reg_first = reg_queue; else reg->reg_last->Next = reg_queue; reg->reg_last = reg_queue; - spin_unlock_irq ( ®->EP0VM_spin_lock ); + spin_unlock_irq(®->EP0VM_spin_lock); - // Start EP0VM + /* Start EP0VM */ Wb35Reg_EP0VM_start(pHwData); return true; } else { @@ -278,115 +281,114 @@ Wb35Reg_WriteWithCallbackValue( struct hw_data * pHwData, u16 RegisterNo, u32 Re } } -// true : read command process successfully -// false : register not support -// pRegisterValue : It must be a resident buffer due to asynchronous read register. -unsigned char -Wb35Reg_ReadSync( struct hw_data * pHwData, u16 RegisterNo, u32 * pRegisterValue ) +/* + * true : read command process successfully + * false : register not support + * pRegisterValue : It must be a resident buffer due to + * asynchronous read register. + */ +unsigned char Wb35Reg_ReadSync(struct hw_data *pHwData, u16 RegisterNo, u32 *pRegisterValue) { struct wb35_reg *reg = &pHwData->reg; - u32 * pltmp = pRegisterValue; - int ret = -1; + u32 *pltmp = pRegisterValue; + int ret = -1; - // Module shutdown + /* Module shutdown */ if (pHwData->SurpriseRemove) return false; - // Read the register by send usb message------------------------------------ - + /* Read the register by send usb message */ reg->SyncIoPause = 1; - // 20060717.5 Wait until EP0VM stop + /* Wait until EP0VM stop */ while (reg->EP0vm_state != VM_STOP) msleep(10); reg->EP0vm_state = VM_RUNNING; - ret = usb_control_msg( pHwData->WbUsb.udev, + ret = usb_control_msg(pHwData->WbUsb.udev, usb_rcvctrlpipe(pHwData->WbUsb.udev, 0), - 0x01, USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_DIR_IN, - 0x0, RegisterNo, pltmp, 4, HZ*100 ); + 0x01, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN, + 0x0, RegisterNo, pltmp, 4, HZ * 100); *pRegisterValue = cpu_to_le32(*pltmp); reg->EP0vm_state = VM_STOP; - Wb35Reg_Update( pHwData, RegisterNo, *pRegisterValue ); + Wb35Reg_Update(pHwData, RegisterNo, *pRegisterValue); reg->SyncIoPause = 0; - Wb35Reg_EP0VM_start( pHwData ); + Wb35Reg_EP0VM_start(pHwData); if (ret < 0) { - #ifdef _PE_REG_DUMP_ +#ifdef _PE_REG_DUMP_ printk("EP0 Read register usb message sending error\n"); - #endif - - pHwData->SurpriseRemove = 1; // 20060704.2 +#endif + pHwData->SurpriseRemove = 1; return false; } - return true; } -// true : read command process successfully -// false : register not support -// pRegisterValue : It must be a resident buffer due to asynchronous read register. -unsigned char -Wb35Reg_Read(struct hw_data * pHwData, u16 RegisterNo, u32 * pRegisterValue ) +/* + * true : read command process successfully + * false : register not support + * pRegisterValue : It must be a resident buffer due to + * asynchronous read register. + */ +unsigned char Wb35Reg_Read(struct hw_data *pHwData, u16 RegisterNo, u32 *pRegisterValue) { - struct wb35_reg *reg = &pHwData->reg; - struct usb_ctrlrequest * dr; - struct urb *urb; - struct wb35_reg_queue *reg_queue; - u16 UrbSize; + struct wb35_reg *reg = &pHwData->reg; + struct usb_ctrlrequest *dr; + struct urb *urb; + struct wb35_reg_queue *reg_queue; + u16 UrbSize; - // Module shutdown + /* Module shutdown */ if (pHwData->SurpriseRemove) return false; - // update the variable by send Urb to read register ------------------------------------ + /* update the variable by send Urb to read register */ UrbSize = sizeof(struct wb35_reg_queue) + sizeof(struct usb_ctrlrequest); reg_queue = kzalloc(UrbSize, GFP_ATOMIC); urb = usb_alloc_urb(0, GFP_ATOMIC); - if( urb && reg_queue ) - { - reg_queue->DIRECT = 0;// read register + if (urb && reg_queue) { + reg_queue->DIRECT = 0; /* read register */ reg_queue->INDEX = RegisterNo; reg_queue->pBuffer = pRegisterValue; dr = (struct usb_ctrlrequest *)((u8 *)reg_queue + sizeof(struct wb35_reg_queue)); - dr->bRequestType = USB_TYPE_VENDOR|USB_RECIP_DEVICE|USB_DIR_IN; - dr->bRequest = 0x01; // USB or vendor-defined request code, burst mode + dr->bRequestType = USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_DIR_IN; + dr->bRequest = 0x01; /* USB or vendor-defined request code, burst mode */ dr->wValue = cpu_to_le16(0x0); - dr->wIndex = cpu_to_le16 (RegisterNo); - dr->wLength = cpu_to_le16 (4); + dr->wIndex = cpu_to_le16(RegisterNo); + dr->wLength = cpu_to_le16(4); - // Enter the sending queue + /* Enter the sending queue */ reg_queue->Next = NULL; reg_queue->pUsbReq = dr; reg_queue->urb = urb; - spin_lock_irq ( ®->EP0VM_spin_lock ); - if( reg->reg_first == NULL ) + spin_lock_irq(®->EP0VM_spin_lock); + if (reg->reg_first == NULL) reg->reg_first = reg_queue; else reg->reg_last->Next = reg_queue; reg->reg_last = reg_queue; - spin_unlock_irq( ®->EP0VM_spin_lock ); + spin_unlock_irq(®->EP0VM_spin_lock); - // Start EP0VM - Wb35Reg_EP0VM_start( pHwData ); + /* Start EP0VM */ + Wb35Reg_EP0VM_start(pHwData); return true; } else { if (urb) - usb_free_urb( urb ); + usb_free_urb(urb); kfree(reg_queue); return false; } } -void -Wb35Reg_EP0VM_start( struct hw_data * pHwData ) +void Wb35Reg_EP0VM_start(struct hw_data *pHwData) { struct wb35_reg *reg = &pHwData->reg; @@ -397,15 +399,14 @@ Wb35Reg_EP0VM_start( struct hw_data * pHwData ) atomic_dec(®->RegFireCount); } -void -Wb35Reg_EP0VM(struct hw_data * pHwData ) +void Wb35Reg_EP0VM(struct hw_data *pHwData) { - struct wb35_reg *reg = &pHwData->reg; - struct urb *urb; - struct usb_ctrlrequest *dr; - u32 * pBuffer; + struct wb35_reg *reg = &pHwData->reg; + struct urb *urb; + struct usb_ctrlrequest *dr; + u32 *pBuffer; int ret = -1; - struct wb35_reg_queue *reg_queue; + struct wb35_reg_queue *reg_queue; if (reg->SyncIoPause) @@ -414,27 +415,27 @@ Wb35Reg_EP0VM(struct hw_data * pHwData ) if (pHwData->SurpriseRemove) goto cleanup; - // Get the register data and send to USB through Irp - spin_lock_irq( ®->EP0VM_spin_lock ); + /* Get the register data and send to USB through Irp */ + spin_lock_irq(®->EP0VM_spin_lock); reg_queue = reg->reg_first; - spin_unlock_irq( ®->EP0VM_spin_lock ); + spin_unlock_irq(®->EP0VM_spin_lock); if (!reg_queue) goto cleanup; - // Get an Urb, send it + /* Get an Urb, send it */ urb = (struct urb *)reg_queue->urb; dr = reg_queue->pUsbReq; urb = reg_queue->urb; pBuffer = reg_queue->pBuffer; - if (reg_queue->DIRECT == 1) // output + if (reg_queue->DIRECT == 1) /* output */ pBuffer = ®_queue->VALUE; - usb_fill_control_urb( urb, pHwData->WbUsb.udev, - REG_DIRECTION(pHwData->WbUsb.udev,reg_queue), - (u8 *)dr,pBuffer,cpu_to_le16(dr->wLength), - Wb35Reg_EP0VM_complete, (void*)pHwData); + usb_fill_control_urb(urb, pHwData->WbUsb.udev, + REG_DIRECTION(pHwData->WbUsb.udev, reg_queue), + (u8 *)dr, pBuffer, cpu_to_le16(dr->wLength), + Wb35Reg_EP0VM_complete, (void *)pHwData); reg->EP0vm_state = VM_RUNNING; @@ -446,7 +447,6 @@ Wb35Reg_EP0VM(struct hw_data * pHwData ) #endif goto cleanup; } - return; cleanup: @@ -455,29 +455,28 @@ Wb35Reg_EP0VM(struct hw_data * pHwData ) } -void -Wb35Reg_EP0VM_complete(struct urb *urb) +void Wb35Reg_EP0VM_complete(struct urb *urb) { - struct hw_data * pHwData = (struct hw_data *)urb->context; - struct wb35_reg *reg = &pHwData->reg; - struct wb35_reg_queue *reg_queue; + struct hw_data *pHwData = (struct hw_data *)urb->context; + struct wb35_reg *reg = &pHwData->reg; + struct wb35_reg_queue *reg_queue; - // Variable setting + /* Variable setting */ reg->EP0vm_state = VM_COMPLETED; reg->EP0VM_status = urb->status; - if (pHwData->SurpriseRemove) { // Let WbWlanHalt to handle surprise remove + if (pHwData->SurpriseRemove) { /* Let WbWlanHalt to handle surprise remove */ reg->EP0vm_state = VM_STOP; atomic_dec(®->RegFireCount); } else { - // Complete to send, remove the URB from the first - spin_lock_irq( ®->EP0VM_spin_lock ); + /* Complete to send, remove the URB from the first */ + spin_lock_irq(®->EP0VM_spin_lock); reg_queue = reg->reg_first; if (reg_queue == reg->reg_last) reg->reg_last = NULL; reg->reg_first = reg->reg_first->Next; - spin_unlock_irq( ®->EP0VM_spin_lock ); + spin_unlock_irq(®->EP0VM_spin_lock); if (reg->EP0VM_status) { #ifdef _PE_REG_DUMP_ @@ -486,37 +485,35 @@ Wb35Reg_EP0VM_complete(struct urb *urb) reg->EP0vm_state = VM_STOP; pHwData->SurpriseRemove = 1; } else { - // Success. Update the result + /* Success. Update the result */ - // Start the next send + /* Start the next send */ Wb35Reg_EP0VM(pHwData); } - kfree(reg_queue); + kfree(reg_queue); } usb_free_urb(urb); } -void -Wb35Reg_destroy(struct hw_data * pHwData) +void Wb35Reg_destroy(struct hw_data *pHwData) { - struct wb35_reg *reg = &pHwData->reg; - struct urb *urb; - struct wb35_reg_queue *reg_queue; - + struct wb35_reg *reg = &pHwData->reg; + struct urb *urb; + struct wb35_reg_queue *reg_queue; Uxx_power_off_procedure(pHwData); - // Wait for Reg operation completed + /* Wait for Reg operation completed */ do { - msleep(10); // Delay for waiting function enter 940623.1.a + msleep(10); /* Delay for waiting function enter */ } while (reg->EP0vm_state != VM_STOP); - msleep(10); // Delay for waiting function enter 940623.1.b + msleep(10); /* Delay for waiting function enter */ - // Release all the data in RegQueue - spin_lock_irq( ®->EP0VM_spin_lock ); + /* Release all the data in RegQueue */ + spin_lock_irq(®->EP0VM_spin_lock); reg_queue = reg->reg_first; while (reg_queue) { if (reg_queue == reg->reg_last) @@ -524,84 +521,88 @@ Wb35Reg_destroy(struct hw_data * pHwData) reg->reg_first = reg->reg_first->Next; urb = reg_queue->urb; - spin_unlock_irq( ®->EP0VM_spin_lock ); + spin_unlock_irq(®->EP0VM_spin_lock); if (urb) { usb_free_urb(urb); kfree(reg_queue); } else { - #ifdef _PE_REG_DUMP_ +#ifdef _PE_REG_DUMP_ printk("EP0 queue release error\n"); - #endif +#endif } - spin_lock_irq( ®->EP0VM_spin_lock ); + spin_lock_irq(®->EP0VM_spin_lock); reg_queue = reg->reg_first; } - spin_unlock_irq( ®->EP0VM_spin_lock ); + spin_unlock_irq(®->EP0VM_spin_lock); } -//==================================================================================== -// The function can be run in passive-level only. -//==================================================================================== -unsigned char Wb35Reg_initial(struct hw_data * pHwData) +/* + * ======================================================================= + * The function can be run in passive-level only. + * ========================================================================= + */ +unsigned char Wb35Reg_initial(struct hw_data *pHwData) { - struct wb35_reg *reg=&pHwData->reg; + struct wb35_reg *reg = &pHwData->reg; u32 ltmp; u32 SoftwareSet, VCO_trim, TxVga, Region_ScanInterval; - // Spin lock is acquired for read and write IRP command - spin_lock_init( ®->EP0VM_spin_lock ); - - // Getting RF module type from EEPROM ------------------------------------ - Wb35Reg_WriteSync( pHwData, 0x03b4, 0x080d0000 ); // Start EEPROM access + Read + address(0x0d) - Wb35Reg_ReadSync( pHwData, 0x03b4, <mp ); - - //Update RF module type and determine the PHY type by inf or EEPROM - reg->EEPROMPhyType = (u8)( ltmp & 0xff ); - // 0 V MAX2825, 1 V MAX2827, 2 V MAX2828, 3 V MAX2829 - // 16V AL2230, 17 - AL7230, 18 - AL2230S - // 32 Reserved - // 33 - W89RF242(TxVGA 0~19), 34 - W89RF242(TxVGA 0~34) + /* Spin lock is acquired for read and write IRP command */ + spin_lock_init(®->EP0VM_spin_lock); + + /* Getting RF module type from EEPROM */ + Wb35Reg_WriteSync(pHwData, 0x03b4, 0x080d0000); /* Start EEPROM access + Read + address(0x0d) */ + Wb35Reg_ReadSync(pHwData, 0x03b4, <mp); + + /* Update RF module type and determine the PHY type by inf or EEPROM */ + reg->EEPROMPhyType = (u8)(ltmp & 0xff); + /* + * 0 V MAX2825, 1 V MAX2827, 2 V MAX2828, 3 V MAX2829 + * 16V AL2230, 17 - AL7230, 18 - AL2230S + * 32 Reserved + * 33 - W89RF242(TxVGA 0~19), 34 - W89RF242(TxVGA 0~34) + */ if (reg->EEPROMPhyType != RF_DECIDE_BY_INF) { - if( (reg->EEPROMPhyType == RF_MAXIM_2825) || + if ((reg->EEPROMPhyType == RF_MAXIM_2825) || (reg->EEPROMPhyType == RF_MAXIM_2827) || (reg->EEPROMPhyType == RF_MAXIM_2828) || (reg->EEPROMPhyType == RF_MAXIM_2829) || (reg->EEPROMPhyType == RF_MAXIM_V1) || (reg->EEPROMPhyType == RF_AIROHA_2230) || - (reg->EEPROMPhyType == RF_AIROHA_2230S) || + (reg->EEPROMPhyType == RF_AIROHA_2230S) || (reg->EEPROMPhyType == RF_AIROHA_7230) || - (reg->EEPROMPhyType == RF_WB_242) || + (reg->EEPROMPhyType == RF_WB_242) || (reg->EEPROMPhyType == RF_WB_242_1)) pHwData->phy_type = reg->EEPROMPhyType; } - // Power On procedure running. The relative parameter will be set according to phy_type - Uxx_power_on_procedure( pHwData ); + /* Power On procedure running. The relative parameter will be set according to phy_type */ + Uxx_power_on_procedure(pHwData); - // Reading MAC address - Uxx_ReadEthernetAddress( pHwData ); + /* Reading MAC address */ + Uxx_ReadEthernetAddress(pHwData); - // Read VCO trim for RF parameter - Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08200000 ); - Wb35Reg_ReadSync( pHwData, 0x03b4, &VCO_trim ); + /* Read VCO trim for RF parameter */ + Wb35Reg_WriteSync(pHwData, 0x03b4, 0x08200000); + Wb35Reg_ReadSync(pHwData, 0x03b4, &VCO_trim); - // Read Antenna On/Off of software flag - Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08210000 ); - Wb35Reg_ReadSync( pHwData, 0x03b4, &SoftwareSet ); + /* Read Antenna On/Off of software flag */ + Wb35Reg_WriteSync(pHwData, 0x03b4, 0x08210000); + Wb35Reg_ReadSync(pHwData, 0x03b4, &SoftwareSet); - // Read TXVGA - Wb35Reg_WriteSync( pHwData, 0x03b4, 0x08100000 ); - Wb35Reg_ReadSync( pHwData, 0x03b4, &TxVga ); + /* Read TXVGA */ + Wb35Reg_WriteSync(pHwData, 0x03b4, 0x08100000); + Wb35Reg_ReadSync(pHwData, 0x03b4, &TxVga); - // Get Scan interval setting from EEPROM offset 0x1c - Wb35Reg_WriteSync( pHwData, 0x03b4, 0x081d0000 ); - Wb35Reg_ReadSync( pHwData, 0x03b4, &Region_ScanInterval ); + /* Get Scan interval setting from EEPROM offset 0x1c */ + Wb35Reg_WriteSync(pHwData, 0x03b4, 0x081d0000); + Wb35Reg_ReadSync(pHwData, 0x03b4, &Region_ScanInterval); - // Update Ethernet address - memcpy( pHwData->CurrentMacAddress, pHwData->PermanentMacAddress, ETH_ALEN ); + /* Update Ethernet address */ + memcpy(pHwData->CurrentMacAddress, pHwData->PermanentMacAddress, ETH_ALEN); - // Update software variable + /* Update software variable */ pHwData->SoftwareSet = (u16)(SoftwareSet & 0xffff); TxVga &= 0x000000ff; pHwData->PowerIndexFromEEPROM = (u8)TxVga; @@ -609,22 +610,22 @@ unsigned char Wb35Reg_initial(struct hw_data * pHwData) if (pHwData->VCO_trim == 0xff) pHwData->VCO_trim = 0x28; - reg->EEPROMRegion = (u8)(Region_ScanInterval>>8); // 20060720 - if( reg->EEPROMRegion<1 || reg->EEPROMRegion>6 ) + reg->EEPROMRegion = (u8)(Region_ScanInterval >> 8); + if (reg->EEPROMRegion < 1 || reg->EEPROMRegion > 6) reg->EEPROMRegion = REGION_AUTO; - //For Get Tx VGA from EEPROM 20060315.5 move here - GetTxVgaFromEEPROM( pHwData ); + /* For Get Tx VGA from EEPROM */ + GetTxVgaFromEEPROM(pHwData); - // Set Scan Interval + /* Set Scan Interval */ pHwData->Scan_Interval = (u8)(Region_ScanInterval & 0xff) * 10; - if ((pHwData->Scan_Interval == 2550) || (pHwData->Scan_Interval < 10)) // Is default setting 0xff * 10 + if ((pHwData->Scan_Interval == 2550) || (pHwData->Scan_Interval < 10)) /* Is default setting 0xff * 10 */ pHwData->Scan_Interval = SCAN_MAX_CHNL_TIME; - // Initial register + /* Initial register */ RFSynthesizer_initial(pHwData); - BBProcessor_initial(pHwData); // Async write, must wait until complete + BBProcessor_initial(pHwData); /* Async write, must wait until complete */ Wb35Reg_phy_calibration(pHwData); @@ -634,113 +635,104 @@ unsigned char Wb35Reg_initial(struct hw_data * pHwData) if (pHwData->SurpriseRemove) return false; else - return true; // Initial fail + return true; /* Initial fail */ } -//=================================================================================== -// CardComputeCrc -- -// -// Description: -// Runs the AUTODIN II CRC algorithm on buffer Buffer of length, Length. -// -// Arguments: -// Buffer - the input buffer -// Length - the length of Buffer -// -// Return Value: -// The 32-bit CRC value. -// -// Note: -// This is adapted from the comments in the assembly language -// version in _GENREQ.ASM of the DWB NE1000/2000 driver. -//================================================================================== -u32 -CardComputeCrc(u8 * Buffer, u32 Length) +/* + * ================================================================ + * CardComputeCrc -- + * + * Description: + * Runs the AUTODIN II CRC algorithm on buffer Buffer of length, Length. + * + * Arguments: + * Buffer - the input buffer + * Length - the length of Buffer + * + * Return Value: + * The 32-bit CRC value. + * =================================================================== + */ +u32 CardComputeCrc(u8 *Buffer, u32 Length) { - u32 Crc, Carry; - u32 i, j; - u8 CurByte; - - Crc = 0xffffffff; - - for (i = 0; i < Length; i++) { - - CurByte = Buffer[i]; - - for (j = 0; j < 8; j++) { - - Carry = ((Crc & 0x80000000) ? 1 : 0) ^ (CurByte & 0x01); - Crc <<= 1; - CurByte >>= 1; - - if (Carry) { - Crc =(Crc ^ 0x04c11db6) | Carry; - } - } - } - - return Crc; + u32 Crc, Carry; + u32 i, j; + u8 CurByte; + + Crc = 0xffffffff; + + for (i = 0; i < Length; i++) { + CurByte = Buffer[i]; + for (j = 0; j < 8; j++) { + Carry = ((Crc & 0x80000000) ? 1 : 0) ^ (CurByte & 0x01); + Crc <<= 1; + CurByte >>= 1; + if (Carry) + Crc = (Crc ^ 0x04c11db6) | Carry; + } + } + return Crc; } -//================================================================== -// BitReverse -- -// Reverse the bits in the input argument, dwData, which is -// regarded as a string of bits with the length, DataLength. -// -// Arguments: -// dwData : -// DataLength : -// -// Return: -// The converted value. -//================================================================== -u32 BitReverse( u32 dwData, u32 DataLength) +/* + * ================================================================== + * BitReverse -- + * Reverse the bits in the input argument, dwData, which is + * regarded as a string of bits with the length, DataLength. + * + * Arguments: + * dwData : + * DataLength : + * + * Return: + * The converted value. + * ================================================================== + */ +u32 BitReverse(u32 dwData, u32 DataLength) { - u32 HalfLength, i, j; - u32 BitA, BitB; + u32 HalfLength, i, j; + u32 BitA, BitB; - if ( DataLength <= 0) return 0; // No conversion is done. + if (DataLength <= 0) + return 0; /* No conversion is done. */ dwData = dwData & (0xffffffff >> (32 - DataLength)); HalfLength = DataLength / 2; - for ( i = 0, j = DataLength-1 ; i < HalfLength; i++, j--) - { - BitA = GetBit( dwData, i); - BitB = GetBit( dwData, j); + for (i = 0, j = DataLength - 1; i < HalfLength; i++, j--) { + BitA = GetBit(dwData, i); + BitB = GetBit(dwData, j); if (BitA && !BitB) { - dwData = ClearBit( dwData, i); - dwData = SetBit( dwData, j); + dwData = ClearBit(dwData, i); + dwData = SetBit(dwData, j); } else if (!BitA && BitB) { - dwData = SetBit( dwData, i); - dwData = ClearBit( dwData, j); - } else - { - // Do nothing since these two bits are of the save values. + dwData = SetBit(dwData, i); + dwData = ClearBit(dwData, j); + } else { + /* Do nothing since these two bits are of the save values. */ } } - return dwData; } -void Wb35Reg_phy_calibration( struct hw_data * pHwData ) +void Wb35Reg_phy_calibration(struct hw_data *pHwData) { - u32 BB3c, BB54; + u32 BB3c, BB54; if ((pHwData->phy_type == RF_WB_242) || (pHwData->phy_type == RF_WB_242_1)) { - phy_calibration_winbond ( pHwData, 2412 ); // Sync operation - Wb35Reg_ReadSync( pHwData, 0x103c, &BB3c ); - Wb35Reg_ReadSync( pHwData, 0x1054, &BB54 ); + phy_calibration_winbond(pHwData, 2412); /* Sync operation */ + Wb35Reg_ReadSync(pHwData, 0x103c, &BB3c); + Wb35Reg_ReadSync(pHwData, 0x1054, &BB54); pHwData->BB3c_cal = BB3c; pHwData->BB54_cal = BB54; RFSynthesizer_initial(pHwData); - BBProcessor_initial(pHwData); // Async operation + BBProcessor_initial(pHwData); /* Async operation */ - Wb35Reg_WriteSync( pHwData, 0x103c, BB3c ); - Wb35Reg_WriteSync( pHwData, 0x1054, BB54 ); + Wb35Reg_WriteSync(pHwData, 0x103c, BB3c); + Wb35Reg_WriteSync(pHwData, 0x1054, BB54); } } -- cgit v0.10.2 From 42cb2945a9fbfb1602e50c802f6b379244820a6a Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 28 Mar 2010 08:57:55 +0200 Subject: Staging: winbond: wb35tx_f.h Coding style fixes. I fixed the checkpatch.pl problems and converted the function arguments away from CamelCase and hungarian notation. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wb35tx_f.h b/drivers/staging/winbond/wb35tx_f.h index a7af9cb..1d3b515 100644 --- a/drivers/staging/winbond/wb35tx_f.h +++ b/drivers/staging/winbond/wb35tx_f.h @@ -4,18 +4,20 @@ #include "core.h" #include "wbhal_f.h" -//==================================== -// Interface function declare -//==================================== -unsigned char Wb35Tx_initial( struct hw_data * pHwData ); -void Wb35Tx_destroy( struct hw_data * pHwData ); -unsigned char Wb35Tx_get_tx_buffer( struct hw_data * pHwData, u8 **pBuffer ); +/* + * ==================================== + * Interface function declare + * ==================================== + */ +unsigned char Wb35Tx_initial(struct hw_data *hw_data); +void Wb35Tx_destroy(struct hw_data *hw_data); +unsigned char Wb35Tx_get_tx_buffer(struct hw_data *hw_data, u8 **buffer); void Wb35Tx_EP2VM_start(struct wbsoft_priv *adapter); void Wb35Tx_start(struct wbsoft_priv *adapter); -void Wb35Tx_stop( struct hw_data * pHwData ); +void Wb35Tx_stop(struct hw_data *hw_data); -void Wb35Tx_CurrentTime(struct wbsoft_priv *adapter, u32 TimeCount); +void Wb35Tx_CurrentTime(struct wbsoft_priv *adapter, u32 time_count); #endif -- cgit v0.10.2 From 6112fd6ebbdc8901b40b43940908fa09f8af7cc4 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 28 Mar 2010 08:38:57 +0200 Subject: Staging: winbond: wb35rx.c Coding style fixes v2. New patch that fixes an unclear comment too. I fixed checkpatch issues except for long lines and printk:s. I also removed version comments and the () in a return statement. Generated .o is identical to master and i checked the code with Dan Carpenters strip_whitespace.pl and diff. Signed-off-by: Lars Lindley Acked-by: Dan Carpenter Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wb35rx.c b/drivers/staging/winbond/wb35rx.c index d7b57e6..efe82b1 100644 --- a/drivers/staging/winbond/wb35rx.c +++ b/drivers/staging/winbond/wb35rx.c @@ -1,13 +1,15 @@ -//============================================================================ -// Copyright (c) 1996-2002 Winbond Electronic Corporation -// -// Module Name: -// Wb35Rx.c -// -// Abstract: -// Processing the Rx message from down layer -// -//============================================================================ +/* + * ============================================================================ + * Copyright (c) 1996-2002 Winbond Electronic Corporation + * + * Module Name: + * Wb35Rx.c + * + * Abstract: + * Processing the Rx message from down layer + * + * ============================================================================ + */ #include #include @@ -30,16 +32,7 @@ static void packet_came(struct ieee80211_hw *hw, char *pRxBufferAddress, int Pac return; } - memcpy(skb_put(skb, PacketSize), - pRxBufferAddress, - PacketSize); - -/* - rx_status.rate = 10; - rx_status.channel = 1; - rx_status.freq = 12345; - rx_status.phymode = MODE_IEEE80211B; -*/ + memcpy(skb_put(skb, PacketSize), pRxBufferAddress, PacketSize); memcpy(IEEE80211_SKB_RXCB(skb), &rx_status, sizeof(rx_status)); ieee80211_rx_irqsafe(hw, skb); @@ -47,7 +40,7 @@ static void packet_came(struct ieee80211_hw *hw, char *pRxBufferAddress, int Pac static void Wb35Rx_adjust(struct wb35_descriptor *pRxDes) { - u32 * pRxBufferAddress; + u32 *pRxBufferAddress; u32 DecryptionMethod; u32 i; u16 BufferSize; @@ -56,81 +49,80 @@ static void Wb35Rx_adjust(struct wb35_descriptor *pRxDes) pRxBufferAddress = pRxDes->buffer_address[0]; BufferSize = pRxDes->buffer_size[0]; - // Adjust the last part of data. Only data left - BufferSize -= 4; // For CRC-32 + /* Adjust the last part of data. Only data left */ + BufferSize -= 4; /* For CRC-32 */ if (DecryptionMethod) BufferSize -= 4; - if (DecryptionMethod == 3) // For CCMP + if (DecryptionMethod == 3) /* For CCMP */ BufferSize -= 4; - // Adjust the IV field which after 802.11 header and ICV field. - if (DecryptionMethod == 1) // For WEP - { - for( i=6; i>0; i-- ) - pRxBufferAddress[i] = pRxBufferAddress[i-1]; + /* Adjust the IV field which after 802.11 header and ICV field. */ + if (DecryptionMethod == 1) { /* For WEP */ + for (i = 6; i > 0; i--) + pRxBufferAddress[i] = pRxBufferAddress[i - 1]; pRxDes->buffer_address[0] = pRxBufferAddress + 1; - BufferSize -= 4; // 4 byte for IV - } - else if( DecryptionMethod ) // For TKIP and CCMP - { - for (i=7; i>1; i--) - pRxBufferAddress[i] = pRxBufferAddress[i-2]; - pRxDes->buffer_address[0] = pRxBufferAddress + 2;//Update the descriptor, shift 8 byte - BufferSize -= 8; // 8 byte for IV + ICV + BufferSize -= 4; /* 4 byte for IV */ + } else if (DecryptionMethod) { /* For TKIP and CCMP */ + for (i = 7; i > 1; i--) + pRxBufferAddress[i] = pRxBufferAddress[i - 2]; + pRxDes->buffer_address[0] = pRxBufferAddress + 2; /* Update the descriptor, shift 8 byte */ + BufferSize -= 8; /* 8 byte for IV + ICV */ } pRxDes->buffer_size[0] = BufferSize; } static u16 Wb35Rx_indicate(struct ieee80211_hw *hw) { - struct wbsoft_priv *priv = hw->priv; - struct hw_data * pHwData = &priv->sHwData; + struct wbsoft_priv *priv = hw->priv; + struct hw_data *pHwData = &priv->sHwData; struct wb35_descriptor RxDes; - struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - u8 * pRxBufferAddress; - u16 PacketSize; - u16 stmp, BufferSize, stmp2 = 0; - u32 RxBufferId; + struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; + u8 *pRxBufferAddress; + u16 PacketSize; + u16 stmp, BufferSize, stmp2 = 0; + u32 RxBufferId; - // Only one thread be allowed to run into the following + /* Only one thread be allowed to run into the following */ do { RxBufferId = pWb35Rx->RxProcessIndex; - if (pWb35Rx->RxOwner[ RxBufferId ]) //Owner by VM + if (pWb35Rx->RxOwner[RxBufferId]) /* Owner by VM */ break; pWb35Rx->RxProcessIndex++; pWb35Rx->RxProcessIndex %= MAX_USB_RX_BUFFER_NUMBER; pRxBufferAddress = pWb35Rx->pDRx; - BufferSize = pWb35Rx->RxBufferSize[ RxBufferId ]; + BufferSize = pWb35Rx->RxBufferSize[RxBufferId]; - // Parse the bulkin buffer + /* Parse the bulkin buffer */ while (BufferSize >= 4) { - if ((cpu_to_le32(*(u32 *)pRxBufferAddress) & 0x0fffffff) == RX_END_TAG) //Is ending? 921002.9.a + if ((cpu_to_le32(*(u32 *)pRxBufferAddress) & 0x0fffffff) == RX_END_TAG) /* Is ending? */ break; - // Get the R00 R01 first + /* Get the R00 R01 first */ RxDes.R00.value = le32_to_cpu(*(u32 *)pRxBufferAddress); PacketSize = (u16)RxDes.R00.R00_receive_byte_count; - RxDes.R01.value = le32_to_cpu(*((u32 *)(pRxBufferAddress+4))); - // For new DMA 4k + RxDes.R01.value = le32_to_cpu(*((u32 *)(pRxBufferAddress + 4))); + /* For new DMA 4k */ if ((PacketSize & 0x03) > 0) PacketSize -= 4; - // Basic check for Rx length. Is length valid? + /* Basic check for Rx length. Is length valid? */ if (PacketSize > MAX_PACKET_SIZE) { - #ifdef _PE_RX_DUMP_ +#ifdef _PE_RX_DUMP_ printk("Serious ERROR : Rx data size too long, size =%d\n", PacketSize); - #endif +#endif pWb35Rx->EP3vm_state = VM_STOP; pWb35Rx->Ep3ErrorCount2++; break; } - // Start to process Rx buffer -// RxDes.Descriptor_ID = RxBufferId; // Due to synchronous indicate, the field doesn't necessary to use. - BufferSize -= 8; //subtract 8 byte for 35's USB header length + /* + * Wb35Rx_indicate() is called synchronously so it isn't + * necessary to set "RxDes.Desctriptor_ID = RxBufferID;" + */ + BufferSize -= 8; /* subtract 8 byte for 35's USB header length */ pRxBufferAddress += 8; RxDes.buffer_address[0] = pRxBufferAddress; @@ -142,18 +134,17 @@ static u16 Wb35Rx_indicate(struct ieee80211_hw *hw) packet_came(hw, pRxBufferAddress, PacketSize); - // Move RxBuffer point to the next + /* Move RxBuffer point to the next */ stmp = PacketSize + 3; - stmp &= ~0x03; // 4n alignment + stmp &= ~0x03; /* 4n alignment */ pRxBufferAddress += stmp; BufferSize -= stmp; stmp2 += stmp; } - // Reclaim resource - pWb35Rx->RxOwner[ RxBufferId ] = 1; + /* Reclaim resource */ + pWb35Rx->RxOwner[RxBufferId] = 1; } while (true); - return stmp2; } @@ -161,112 +152,110 @@ static void Wb35Rx(struct ieee80211_hw *hw); static void Wb35Rx_Complete(struct urb *urb) { - struct ieee80211_hw *hw = urb->context; - struct wbsoft_priv *priv = hw->priv; - struct hw_data * pHwData = &priv->sHwData; - struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - u8 * pRxBufferAddress; - u32 SizeCheck; - u16 BulkLength; - u32 RxBufferId; - R00_DESCRIPTOR R00; - - // Variable setting + struct ieee80211_hw *hw = urb->context; + struct wbsoft_priv *priv = hw->priv; + struct hw_data *pHwData = &priv->sHwData; + struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; + u8 *pRxBufferAddress; + u32 SizeCheck; + u16 BulkLength; + u32 RxBufferId; + R00_DESCRIPTOR R00; + + /* Variable setting */ pWb35Rx->EP3vm_state = VM_COMPLETED; - pWb35Rx->EP3VM_status = urb->status;//Store the last result of Irp + pWb35Rx->EP3VM_status = urb->status; /* Store the last result of Irp */ RxBufferId = pWb35Rx->CurrentRxBufferId; pRxBufferAddress = pWb35Rx->pDRx; BulkLength = (u16)urb->actual_length; - // The IRP is completed + /* The IRP is completed */ pWb35Rx->EP3vm_state = VM_COMPLETED; - if (pHwData->SurpriseRemove || pHwData->HwStop) // Must be here, or RxBufferId is invalid + if (pHwData->SurpriseRemove || pHwData->HwStop) /* Must be here, or RxBufferId is invalid */ goto error; if (pWb35Rx->rx_halt) goto error; - // Start to process the data only in successful condition - pWb35Rx->RxOwner[ RxBufferId ] = 0; // Set the owner to driver + /* Start to process the data only in successful condition */ + pWb35Rx->RxOwner[RxBufferId] = 0; /* Set the owner to driver */ R00.value = le32_to_cpu(*(u32 *)pRxBufferAddress); - // The URB is completed, check the result + /* The URB is completed, check the result */ if (pWb35Rx->EP3VM_status != 0) { - #ifdef _PE_USB_STATE_DUMP_ +#ifdef _PE_USB_STATE_DUMP_ printk("EP3 IoCompleteRoutine return error\n"); - #endif +#endif pWb35Rx->EP3vm_state = VM_STOP; goto error; } - // 20060220 For recovering. check if operating in single USB mode + /* For recovering. check if operating in single USB mode */ if (!HAL_USB_MODE_BURST(pHwData)) { - SizeCheck = R00.R00_receive_byte_count; //20060926 anson's endian + SizeCheck = R00.R00_receive_byte_count; if ((SizeCheck & 0x03) > 0) SizeCheck -= 4; SizeCheck = (SizeCheck + 3) & ~0x03; - SizeCheck += 12; // 8 + 4 badbeef + SizeCheck += 12; /* 8 + 4 badbeef */ if ((BulkLength > 1600) || (SizeCheck > 1600) || (BulkLength != SizeCheck) || - (BulkLength == 0)) { // Add for fail Urb + (BulkLength == 0)) { /* Add for fail Urb */ pWb35Rx->EP3vm_state = VM_STOP; pWb35Rx->Ep3ErrorCount2++; } } - // Indicating the receiving data + /* Indicating the receiving data */ pWb35Rx->ByteReceived += BulkLength; - pWb35Rx->RxBufferSize[ RxBufferId ] = BulkLength; + pWb35Rx->RxBufferSize[RxBufferId] = BulkLength; - if (!pWb35Rx->RxOwner[ RxBufferId ]) + if (!pWb35Rx->RxOwner[RxBufferId]) Wb35Rx_indicate(hw); kfree(pWb35Rx->pDRx); - // Do the next receive + /* Do the next receive */ Wb35Rx(hw); return; error: - pWb35Rx->RxOwner[ RxBufferId ] = 1; // Set the owner to hardware + pWb35Rx->RxOwner[RxBufferId] = 1; /* Set the owner to hardware */ atomic_dec(&pWb35Rx->RxFireCounter); pWb35Rx->EP3vm_state = VM_STOP; } -// This function cannot reentrain +/* This function cannot reentrain */ static void Wb35Rx(struct ieee80211_hw *hw) { - struct wbsoft_priv *priv = hw->priv; - struct hw_data * pHwData = &priv->sHwData; - struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - u8 * pRxBufferAddress; - struct urb *urb = pWb35Rx->RxUrb; - int retv; - u32 RxBufferId; - - // - // Issuing URB - // + struct wbsoft_priv *priv = hw->priv; + struct hw_data *pHwData = &priv->sHwData; + struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; + u8 *pRxBufferAddress; + struct urb *urb = pWb35Rx->RxUrb; + int retv; + u32 RxBufferId; + + /* Issuing URB */ if (pHwData->SurpriseRemove || pHwData->HwStop) goto error; if (pWb35Rx->rx_halt) goto error; - // Get RxBuffer's ID + /* Get RxBuffer's ID */ RxBufferId = pWb35Rx->RxBufferId; if (!pWb35Rx->RxOwner[RxBufferId]) { - // It's impossible to run here. - #ifdef _PE_RX_DUMP_ + /* It's impossible to run here. */ +#ifdef _PE_RX_DUMP_ printk("Rx driver fifo unavailable\n"); - #endif +#endif goto error; } - // Update buffer point, then start to bulkin the data from USB + /* Update buffer point, then start to bulkin the data from USB */ pWb35Rx->RxBufferId++; pWb35Rx->RxBufferId %= MAX_USB_RX_BUFFER_NUMBER; @@ -295,18 +284,18 @@ static void Wb35Rx(struct ieee80211_hw *hw) return; error: - // VM stop + /* VM stop */ pWb35Rx->EP3vm_state = VM_STOP; atomic_dec(&pWb35Rx->RxFireCounter); } void Wb35Rx_start(struct ieee80211_hw *hw) { - struct wbsoft_priv *priv = hw->priv; - struct hw_data * pHwData = &priv->sHwData; - struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; + struct wbsoft_priv *priv = hw->priv; + struct hw_data *pHwData = &priv->sHwData; + struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - // Allow only one thread to run into the Wb35Rx() function + /* Allow only one thread to run into the Wb35Rx() function */ if (atomic_inc_return(&pWb35Rx->RxFireCounter) == 1) { pWb35Rx->EP3vm_state = VM_RUNNING; Wb35Rx(hw); @@ -314,11 +303,10 @@ void Wb35Rx_start(struct ieee80211_hw *hw) atomic_dec(&pWb35Rx->RxFireCounter); } -//===================================================================================== -static void Wb35Rx_reset_descriptor( struct hw_data * pHwData ) +static void Wb35Rx_reset_descriptor(struct hw_data *pHwData) { - struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - u32 i; + struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; + u32 i; pWb35Rx->ByteReceived = 0; pWb35Rx->RxProcessIndex = 0; @@ -326,49 +314,49 @@ static void Wb35Rx_reset_descriptor( struct hw_data * pHwData ) pWb35Rx->EP3vm_state = VM_STOP; pWb35Rx->rx_halt = 0; - // Initial the Queue. The last buffer is reserved for used if the Rx resource is unavailable. - for( i=0; iRxOwner[i] = 1; } -unsigned char Wb35Rx_initial(struct hw_data * pHwData) +unsigned char Wb35Rx_initial(struct hw_data *pHwData) { struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - // Initial the Buffer Queue - Wb35Rx_reset_descriptor( pHwData ); + /* Initial the Buffer Queue */ + Wb35Rx_reset_descriptor(pHwData); pWb35Rx->RxUrb = usb_alloc_urb(0, GFP_ATOMIC); - return (!!pWb35Rx->RxUrb); + return !!pWb35Rx->RxUrb; } -void Wb35Rx_stop(struct hw_data * pHwData) +void Wb35Rx_stop(struct hw_data *pHwData) { struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; - // Canceling the Irp if already sends it out. + /* Canceling the Irp if already sends it out. */ if (pWb35Rx->EP3vm_state == VM_RUNNING) { - usb_unlink_urb( pWb35Rx->RxUrb ); // Only use unlink, let Wb35Rx_destroy to free them - #ifdef _PE_RX_DUMP_ + usb_unlink_urb(pWb35Rx->RxUrb); /* Only use unlink, let Wb35Rx_destroy to free them */ +#ifdef _PE_RX_DUMP_ printk("EP3 Rx stop\n"); - #endif +#endif } } -// Needs process context -void Wb35Rx_destroy(struct hw_data * pHwData) +/* Needs process context */ +void Wb35Rx_destroy(struct hw_data *pHwData) { struct wb35_rx *pWb35Rx = &pHwData->Wb35Rx; do { - msleep(10); // Delay for waiting function enter 940623.1.a + msleep(10); /* Delay for waiting function enter */ } while (pWb35Rx->EP3vm_state != VM_STOP); - msleep(10); // Delay for waiting function exit 940623.1.b + msleep(10); /* Delay for waiting function exit */ if (pWb35Rx->RxUrb) - usb_free_urb( pWb35Rx->RxUrb ); - #ifdef _PE_RX_DUMP_ + usb_free_urb(pWb35Rx->RxUrb); +#ifdef _PE_RX_DUMP_ printk("Wb35Rx_destroy OK\n"); - #endif +#endif } -- cgit v0.10.2 From b66e65e2fea9392bdccc27b14b00c26b286eb248 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 28 Mar 2010 19:10:59 +0200 Subject: Staging: winbond: wbhal_f.h Coding style fixes. I fixed all checkpatch problems and also converted the function arguments from hungarian notation and CamelCase. Signed-off-by: Lars Lindley Acked-by: Dan Carpenter Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wbhal_f.h b/drivers/staging/winbond/wbhal_f.h index 64a008db..401c024 100644 --- a/drivers/staging/winbond/wbhal_f.h +++ b/drivers/staging/winbond/wbhal_f.h @@ -1,70 +1,91 @@ -//===================================================================== -// Device related include -//===================================================================== +/* + * ===================================================================== + * Device related include + * ===================================================================== +*/ #include "wb35reg_f.h" #include "wb35tx_f.h" #include "wb35rx_f.h" #include "core.h" -//==================================================================================== -// Function declaration -//==================================================================================== -void hal_remove_mapping_key( struct hw_data * pHwData, u8 *pmac_addr ); -void hal_remove_default_key( struct hw_data * pHwData, u32 index ); -unsigned char hal_set_mapping_key( struct hw_data * adapter, u8 *pmac_addr, u8 null_key, u8 wep_on, u8 *ptx_tsc, u8 *prx_tsc, u8 key_type, u8 key_len, u8 *pkey_data ); -unsigned char hal_set_default_key( struct hw_data * adapter, u8 index, u8 null_key, u8 wep_on, u8 *ptx_tsc, u8 *prx_tsc, u8 key_type, u8 key_len, u8 *pkey_data ); -void hal_clear_all_default_key( struct hw_data * pHwData ); -void hal_clear_all_group_key( struct hw_data * pHwData ); -void hal_clear_all_mapping_key( struct hw_data * pHwData ); -void hal_clear_all_key( struct hw_data * pHwData ); -void hal_set_power_save_mode( struct hw_data * pHwData, unsigned char power_save, unsigned char wakeup, unsigned char dtim ); -void hal_get_power_save_mode( struct hw_data * pHwData, u8 *pin_pwr_save ); -void hal_set_slot_time( struct hw_data * pHwData, u8 type ); -#define hal_set_atim_window( _A, _ATM ) -void hal_start_bss( struct hw_data * pHwData, u8 mac_op_mode ); -void hal_join_request( struct hw_data * pHwData, u8 bss_type ); // 0:BSS STA 1:IBSS STA// -void hal_stop_sync_bss( struct hw_data * pHwData ); -void hal_resume_sync_bss( struct hw_data * pHwData); -void hal_set_aid( struct hw_data * pHwData, u16 aid ); -void hal_set_bssid( struct hw_data * pHwData, u8 *pbssid ); -void hal_get_bssid( struct hw_data * pHwData, u8 *pbssid ); -void hal_set_listen_interval( struct hw_data * pHwData, u16 listen_interval ); -void hal_set_cap_info( struct hw_data * pHwData, u16 capability_info ); -void hal_set_ssid( struct hw_data * pHwData, u8 *pssid, u8 ssid_len ); -void hal_start_tx0( struct hw_data * pHwData ); -#define hal_get_cwmin( _A ) ( (_A)->cwmin ) -void hal_set_cwmax( struct hw_data * pHwData, u16 cwin_max ); -#define hal_get_cwmax( _A ) ( (_A)->cwmax ) -void hal_set_rsn_wpa( struct hw_data * pHwData, u32 * RSN_IE_Bitmap , u32 * RSN_OUI_type , unsigned char bDesiredAuthMode); -void hal_set_connect_info( struct hw_data * pHwData, unsigned char boConnect ); -u8 hal_get_est_sq3( struct hw_data * pHwData, u8 Count ); -void hal_descriptor_indicate( struct hw_data * pHwData, struct wb35_descriptor *pDes ); -u8 hal_get_antenna_number( struct hw_data * pHwData ); -u32 hal_get_bss_pk_cnt( struct hw_data * pHwData ); -#define hal_get_region_from_EEPROM( _A ) ( (_A)->reg.EEPROMRegion ) -#define hal_get_tx_buffer( _A, _B ) Wb35Tx_get_tx_buffer( _A, _B ) -#define hal_software_set( _A ) (_A->SoftwareSet) -#define hal_driver_init_OK( _A ) (_A->IsInitOK) -#define hal_rssi_boundary_high( _A ) (_A->RSSI_high) -#define hal_rssi_boundary_low( _A ) (_A->RSSI_low) -#define hal_scan_interval( _A ) (_A->Scan_Interval) - -#define PHY_DEBUG( msg, args... ) - -#define hal_get_time_count( _P ) (_P->time_count/10) // return 100ms count -#define hal_detect_error( _P ) (_P->WbUsb.DetectCount) - -//------------------------------------------------------------------------- -// The follow function is unused for IS89C35 -//------------------------------------------------------------------------- +/* ===================================================================== + * Function declaration + * ===================================================================== + */ +void hal_remove_mapping_key(struct hw_data *hw_data, u8 *mac_addr); +void hal_remove_default_key(struct hw_data *hw_data, u32 index); +unsigned char hal_set_mapping_key(struct hw_data *adapter, u8 *mac_addr, + u8 null_key, u8 wep_on, u8 *tx_tsc, + u8 *rx_tsc, u8 key_type, u8 key_len, + u8 *key_data); +unsigned char hal_set_default_key(struct hw_data *adapter, u8 index, + u8 null_key, u8 wep_on, u8 *tx_tsc, + u8 *rx_tsc, u8 key_type, u8 key_len, + u8 *key_data); +void hal_clear_all_default_key(struct hw_data *hw_data); +void hal_clear_all_group_key(struct hw_data *hw_data); +void hal_clear_all_mapping_key(struct hw_data *hw_data); +void hal_clear_all_key(struct hw_data *hw_data); +void hal_set_power_save_mode(struct hw_data *hw_data, unsigned char power_save, + unsigned char wakeup, unsigned char dtim); +void hal_get_power_save_mode(struct hw_data *hw_data, u8 *in_pwr_save); +void hal_set_slot_time(struct hw_data *hw_data, u8 type); + +#define hal_set_atim_window(_A, _ATM) + +void hal_start_bss(struct hw_data *hw_data, u8 mac_op_mode); + +/* 0:BSS STA 1:IBSS STA */ +void hal_join_request(struct hw_data *hw_data, u8 bss_type); + +void hal_stop_sync_bss(struct hw_data *hw_data); +void hal_resume_sync_bss(struct hw_data *hw_data); +void hal_set_aid(struct hw_data *hw_data, u16 aid); +void hal_set_bssid(struct hw_data *hw_data, u8 *bssid); +void hal_get_bssid(struct hw_data *hw_data, u8 *bssid); +void hal_set_listen_interval(struct hw_data *hw_data, u16 listen_interval); +void hal_set_cap_info(struct hw_data *hw_data, u16 capability_info); +void hal_set_ssid(struct hw_data *hw_data, u8 *ssid, u8 ssid_len); +void hal_start_tx0(struct hw_data *hw_data); + +#define hal_get_cwmin(_A) ((_A)->cwmin) + +void hal_set_cwmax(struct hw_data *hw_data, u16 cwin_max); + +#define hal_get_cwmax(_A) ((_A)->cwmax) + +void hal_set_rsn_wpa(struct hw_data *hw_data, u32 *rsn_ie_bitmap, + u32 *rsn_oui_type , unsigned char desired_auth_mode); +void hal_set_connect_info(struct hw_data *hw_data, unsigned char bo_connect); +u8 hal_get_est_sq3(struct hw_data *hw_data, u8 count); +void hal_descriptor_indicate(struct hw_data *hw_data, + struct wb35_descriptor *des); +u8 hal_get_antenna_number(struct hw_data *hw_data); +u32 hal_get_bss_pk_cnt(struct hw_data *hw_data); + +#define hal_get_region_from_EEPROM(_A) ((_A)->reg.EEPROMRegion) +#define hal_get_tx_buffer(_A, _B) Wb35Tx_get_tx_buffer(_A, _B) +#define hal_software_set(_A) (_A->SoftwareSet) +#define hal_driver_init_OK(_A) (_A->IsInitOK) +#define hal_rssi_boundary_high(_A) (_A->RSSI_high) +#define hal_rssi_boundary_low(_A) (_A->RSSI_low) +#define hal_scan_interval(_A) (_A->Scan_Interval) + +#define PHY_DEBUG(msg, args...) + +/* return 100ms count */ +#define hal_get_time_count(_P) (_P->time_count / 10) +#define hal_detect_error(_P) (_P->WbUsb.DetectCount) + +/* The follow function is unused for IS89C35 */ #define hal_disable_interrupt(_A) #define hal_enable_interrupt(_A) -#define hal_get_interrupt_type( _A) +#define hal_get_interrupt_type(_A) #define hal_get_clear_interrupt(_A) -#define hal_ibss_disconnect(_A) hal_stop_sync_bss(_A) +#define hal_ibss_disconnect(_A) (hal_stop_sync_bss(_A)) #define hal_join_request_stop(_A) -#define hw_get_cxx_reg( _A, _B, _C ) -#define hw_set_cxx_reg( _A, _B, _C ) +#define hw_get_cxx_reg(_A, _B, _C) +#define hw_set_cxx_reg(_A, _B, _C) -- cgit v0.10.2 From 5a7df3c449e7db7cf4b7807862e11f11c47c2331 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 28 Mar 2010 21:52:37 +0200 Subject: Staging: winbond: wbhal_s.h Coding style fixes. I fixed checkpatch warnings except some long lines and typedefs. I also removed versioning comments. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wbhal_s.h b/drivers/staging/winbond/wbhal_s.h index 372a05e..33457c2 100644 --- a/drivers/staging/winbond/wbhal_s.h +++ b/drivers/staging/winbond/wbhal_s.h @@ -4,179 +4,166 @@ #include #include /* for ETH_ALEN */ -//[20040722 WK] -#define HAL_LED_SET_MASK 0x001c //20060901 Extend -#define HAL_LED_SET_SHIFT 2 +#define HAL_LED_SET_MASK 0x001c +#define HAL_LED_SET_SHIFT 2 -//supported RF type +/* supported RF type */ #define RF_MAXIM_2825 0 #define RF_MAXIM_2827 1 #define RF_MAXIM_2828 2 #define RF_MAXIM_2829 3 -#define RF_MAXIM_V1 15 +#define RF_MAXIM_V1 15 #define RF_AIROHA_2230 16 #define RF_AIROHA_7230 17 -#define RF_AIROHA_2230S 18 // 20060420 Add this -// #define RF_RFMD_2959 32 // 20060626 Remove all about RFMD -#define RF_WB_242 33 -#define RF_WB_242_1 34 // 20060619.5 Add +#define RF_AIROHA_2230S 18 +#define RF_WB_242 33 +#define RF_WB_242_1 34 #define RF_DECIDE_BY_INF 255 -//---------------------------------------------------------------- -// The follow define connect to upper layer -// User must modify for connection between HAL and upper layer -//---------------------------------------------------------------- - - - - -///////////////////////////////////////////////////////////////////////////////////////////////////// -//================================================================================================ -// Common define -//================================================================================================ -#define HAL_USB_MODE_BURST( _H ) (_H->SoftwareSet & 0x20 ) // Bit 5 20060901 Modify - -// Scan interval -#define SCAN_MAX_CHNL_TIME (50) - -// For TxL2 Frame typr recognise +/* + * ---------------------------------------------------------------- + * The follow define connect to upper layer + * User must modify for connection between HAL and upper layer + * ---------------------------------------------------------------- + */ + +/* + * ============================== + * Common define + * ============================== + */ +/* Bit 5 */ +#define HAL_USB_MODE_BURST(_H) (_H->SoftwareSet & 0x20) + +/* Scan interval */ +#define SCAN_MAX_CHNL_TIME (50) + +/* For TxL2 Frame typr recognise */ #define FRAME_TYPE_802_3_DATA 0 #define FRAME_TYPE_802_11_MANAGEMENT 1 -#define FRAME_TYPE_802_11_MANAGEMENT_CHALLENGE 2 +#define FRAME_TYPE_802_11_MANAGEMENT_CHALLENGE 2 #define FRAME_TYPE_802_11_CONTROL 3 #define FRAME_TYPE_802_11_DATA 4 #define FRAME_TYPE_PROMISCUOUS 5 -// The follow definition is used for convert the frame-------------------- -#define DOT_11_SEQUENCE_OFFSET 22 //Sequence control offset +/* The follow definition is used for convert the frame------------ */ +#define DOT_11_SEQUENCE_OFFSET 22 /* Sequence control offset */ #define DOT_3_TYPE_OFFSET 12 -#define DOT_11_MAC_HEADER_SIZE 24 +#define DOT_11_MAC_HEADER_SIZE 24 #define DOT_11_SNAP_SIZE 6 -#define DOT_11_TYPE_OFFSET 30 //The start offset of 802.11 Frame. Type encapsulatuin. +#define DOT_11_TYPE_OFFSET 30 /* The start offset of 802.11 Frame. Type encapsulation. */ #define DEFAULT_SIFSTIME 10 -#define DEFAULT_FRAGMENT_THRESHOLD 2346 // No fragment +#define DEFAULT_FRAGMENT_THRESHOLD 2346 /* No fragment */ #define DEFAULT_MSDU_LIFE_TIME 0xffff -#define LONG_PREAMBLE_PLUS_PLCPHEADER_TIME (144+48) -#define SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME (72+24) -#define PREAMBLE_PLUS_SIGNAL_PLUS_SIGNALEXTENSION (16+4+6) -#define Tsym 4 +#define LONG_PREAMBLE_PLUS_PLCPHEADER_TIME (144 + 48) +#define SHORT_PREAMBLE_PLUS_PLCPHEADER_TIME (72 + 24) +#define PREAMBLE_PLUS_SIGNAL_PLUS_SIGNALEXTENSION (16 + 4 + 6) +#define Tsym 4 -// Frame Type of Bits (2, 3)--------------------------------------------- +/* Frame Type of Bits (2, 3)----------------------------------- */ #define MAC_TYPE_MANAGEMENT 0x00 #define MAC_TYPE_CONTROL 0x04 #define MAC_TYPE_DATA 0x08 -#define MASK_FRAGMENT_NUMBER 0x000F -#define SEQUENCE_NUMBER_SHIFT 4 +#define MASK_FRAGMENT_NUMBER 0x000F +#define SEQUENCE_NUMBER_SHIFT 4 #define HAL_WOL_TYPE_WAKEUP_FRAME 0x01 #define HAL_WOL_TYPE_MAGIC_PACKET 0x02 -// 20040106 ADDED -#define HAL_KEYTYPE_WEP40 0 -#define HAL_KEYTYPE_WEP104 1 -#define HAL_KEYTYPE_TKIP 2 // 128 bit key -#define HAL_KEYTYPE_AES_CCMP 3 // 128 bit key +#define HAL_KEYTYPE_WEP40 0 +#define HAL_KEYTYPE_WEP104 1 +#define HAL_KEYTYPE_TKIP 2 /* 128 bit key */ +#define HAL_KEYTYPE_AES_CCMP 3 /* 128 bit key */ -// For VM state +/* For VM state */ enum { VM_STOP = 0, VM_RUNNING, VM_COMPLETED }; -//----------------------------------------------------- -// Normal Key table format -//----------------------------------------------------- -// The order of KEY index is MAPPING_KEY_START_INDEX > GROUP_KEY_START_INDEX -#define MAX_KEY_TABLE 24 // 24 entry for storing key data +/* + * ================================ + * Normal Key table format + * ================================ + */ + +/* The order of KEY index is MAPPING_KEY_START_INDEX > GROUP_KEY_START_INDEX */ +#define MAX_KEY_TABLE 24 /* 24 entry for storing key data */ #define GROUP_KEY_START_INDEX 4 #define MAPPING_KEY_START_INDEX 8 -//-------------------------------------------------------- -// Descriptor -//-------------------------------------------------------- -#define MAX_DESCRIPTOR_BUFFER_INDEX 8 // Have to multiple of 2 -//#define FLAG_ERROR_TX_MASK cpu_to_le32(0x000000bf) //20061009 marked by anson's endian -#define FLAG_ERROR_TX_MASK 0x000000bf //20061009 anson's endian -//#define FLAG_ERROR_RX_MASK 0x00000c3f -//#define FLAG_ERROR_RX_MASK cpu_to_le32(0x0000083f) //20061009 marked by anson's endian - //Don't care replay error, - //it is handled by S/W -#define FLAG_ERROR_RX_MASK 0x0000083f //20060926 anson's endian - -#define FLAG_BAND_RX_MASK 0x10000000 //Bit 28 - -typedef struct _R00_DESCRIPTOR -{ - union - { +/* + * ========================================= + * Descriptor + * ========================================= + */ +#define MAX_DESCRIPTOR_BUFFER_INDEX 8 /* Have to multiple of 2 */ +#define FLAG_ERROR_TX_MASK 0x000000bf +#define FLAG_ERROR_RX_MASK 0x0000083f + +#define FLAG_BAND_RX_MASK 0x10000000 /* Bit 28 */ + +typedef struct _R00_DESCRIPTOR { + union { u32 value; - #ifdef _BIG_ENDIAN_ //20060926 anson's endian - struct - { +#ifdef _BIG_ENDIAN_ + struct { u32 R00_packet_or_buffer_status:1; u32 R00_packet_in_fifo:1; u32 R00_RESERVED:2; u32 R00_receive_byte_count:12; u32 R00_receive_time_index:16; }; - #else - struct - { +#else + struct { u32 R00_receive_time_index:16; u32 R00_receive_byte_count:12; u32 R00_RESERVED:2; u32 R00_packet_in_fifo:1; u32 R00_packet_or_buffer_status:1; }; - #endif +#endif }; } R00_DESCRIPTOR, *PR00_DESCRIPTOR; -typedef struct _T00_DESCRIPTOR -{ - union - { +typedef struct _T00_DESCRIPTOR { + union { u32 value; - #ifdef _BIG_ENDIAN_ //20061009 anson's endian - struct - { - u32 T00_first_mpdu:1; // for hardware use - u32 T00_last_mpdu:1; // for hardware use - u32 T00_IsLastMpdu:1;// 0: not 1:Yes for software used - u32 T00_IgnoreResult:1;// The same mechanism with T00 setting. 050111 Modify for TS - u32 T00_RESERVED_ID:2;//3 bit ID reserved - u32 T00_tx_packet_id:4;//930519.4.e 930810.3.c +#ifdef _BIG_ENDIAN_ + struct { + u32 T00_first_mpdu:1; /* for hardware use */ + u32 T00_last_mpdu:1; /* for hardware use */ + u32 T00_IsLastMpdu:1;/* 0:not 1:Yes for software used */ + u32 T00_IgnoreResult:1;/* The same mechanism with T00 setting. */ + u32 T00_RESERVED_ID:2;/* 3 bit ID reserved */ + u32 T00_tx_packet_id:4; u32 T00_RESERVED:4; u32 T00_header_length:6; u32 T00_frame_length:12; }; - #else - struct - { +#else + struct { u32 T00_frame_length:12; u32 T00_header_length:6; u32 T00_RESERVED:4; - u32 T00_tx_packet_id:4;//930519.4.e 930810.3.c - u32 T00_RESERVED_ID:2;//3 bit ID reserved - u32 T00_IgnoreResult:1;// The same mechanism with T00 setting. 050111 Modify for TS - u32 T00_IsLastMpdu:1;// 0: not 1:Yes for software used - u32 T00_last_mpdu:1; // for hardware use - u32 T00_first_mpdu:1; // for hardware use + u32 T00_tx_packet_id:4; + u32 T00_RESERVED_ID:2; /* 3 bit ID reserved */ + u32 T00_IgnoreResult:1; /* The same mechanism with T00 setting. */ + u32 T00_IsLastMpdu:1; /* 0:not 1:Yes for software used */ + u32 T00_last_mpdu:1; /* for hardware use */ + u32 T00_first_mpdu:1; /* for hardware use */ }; - #endif +#endif }; } T00_DESCRIPTOR, *PT00_DESCRIPTOR; -typedef struct _R01_DESCRIPTOR -{ - union - { +typedef struct _R01_DESCRIPTOR { + union { u32 value; - #ifdef _BIG_ENDIAN_ //20060926 add by anson's endian - struct - { +#ifdef _BIG_ENDIAN_ + struct { u32 R01_RESERVED:3; u32 R01_mod_type:1; u32 R01_pre_type:1; @@ -197,9 +184,8 @@ typedef struct _R01_DESCRIPTOR u32 R01_icv_error:1; u32 R01_crc_error:1; }; - #else - struct - { +#else + struct { u32 R01_crc_error:1; u32 R01_icv_error:1; u32 R01_null_key_to_authentication_frame:1; @@ -220,18 +206,15 @@ typedef struct _R01_DESCRIPTOR u32 R01_mod_type:1; u32 R01_RESERVED:3; }; - #endif +#endif }; } R01_DESCRIPTOR, *PR01_DESCRIPTOR; -typedef struct _T01_DESCRIPTOR -{ - union - { +typedef struct _T01_DESCRIPTOR { + union { u32 value; - #ifdef _BIG_ENDIAN_ //20061009 anson's endian - struct - { +#ifdef _BIG_ENDIAN_ + struct { u32 T01_rts_cts_duration:16; u32 T01_fall_back_rate:3; u32 T01_add_rts:1; @@ -245,9 +228,8 @@ typedef struct _T01_DESCRIPTOR u32 T01_loop_back_wep_mode:1; u32 T01_retry_abort_ebable:1; }; - #else - struct - { +#else + struct { u32 T01_retry_abort_ebable:1; u32 T01_loop_back_wep_mode:1; u32 T01_inhibit_crc:1; @@ -261,21 +243,18 @@ typedef struct _T01_DESCRIPTOR u32 T01_fall_back_rate:3; u32 T01_rts_cts_duration:16; }; - #endif +#endif }; } T01_DESCRIPTOR, *PT01_DESCRIPTOR; -typedef struct _T02_DESCRIPTOR -{ - union - { +typedef struct _T02_DESCRIPTOR { + union { u32 value; - #ifdef _BIG_ENDIAN_ //20061009 add by anson's endian - struct - { - u32 T02_IsLastMpdu:1;// The same mechanism with T00 setting - u32 T02_IgnoreResult:1;// The same mechanism with T00 setting. 050111 Modify for TS - u32 T02_RESERVED_ID:2;// The same mechanism with T00 setting +#ifdef _BIG_ENDIAN_ + struct { + u32 T02_IsLastMpdu:1; /* The same mechanism with T00 setting */ + u32 T02_IgnoreResult:1; /* The same mechanism with T00 setting. */ + u32 T02_RESERVED_ID:2; /* The same mechanism with T00 setting */ u32 T02_Tx_PktID:4; u32 T02_MPDU_Cnt:4; u32 T02_RTS_Cnt:4; @@ -290,9 +269,8 @@ typedef struct _T02_DESCRIPTOR u32 T02_transmit_abort:1; u32 T02_transmit_fail:1; }; - #else - struct - { +#else + struct { u32 T02_transmit_fail:1; u32 T02_transmit_abort:1; u32 T02_out_of_MaxTxMSDULiftTime:1; @@ -306,122 +284,120 @@ typedef struct _T02_DESCRIPTOR u32 T02_RTS_Cnt:4; u32 T02_MPDU_Cnt:4; u32 T02_Tx_PktID:4; - u32 T02_RESERVED_ID:2;// The same mechanism with T00 setting - u32 T02_IgnoreResult:1;// The same mechanism with T00 setting. 050111 Modify for TS - u32 T02_IsLastMpdu:1;// The same mechanism with T00 setting + u32 T02_RESERVED_ID:2; /* The same mechanism with T00 setting */ + u32 T02_IgnoreResult:1; /* The same mechanism with T00 setting. */ + u32 T02_IsLastMpdu:1; /* The same mechanism with T00 setting */ }; - #endif +#endif }; } T02_DESCRIPTOR, *PT02_DESCRIPTOR; -struct wb35_descriptor { // Skip length = 8 DWORD - // ID for descriptor ---, The field doesn't be cleard in the operation of Descriptor definition +struct wb35_descriptor { /* Skip length = 8 DWORD */ + /* ID for descriptor ---, The field doesn't be cleard in the operation of Descriptor definition */ u8 Descriptor_ID; - //----------------------The above region doesn't be cleared by DESCRIPTOR_RESET------ + /* ----------------------The above region doesn't be cleared by DESCRIPTOR_RESET------ */ u8 RESERVED[3]; u16 FragmentThreshold; - u8 InternalUsed;//Only can be used by operation of descriptor definition - u8 Type;// 0: 802.3 1:802.11 data frame 2:802.11 management frame + u8 InternalUsed; /* Only can be used by operation of descriptor definition */ + u8 Type; /* 0: 802.3 1:802.11 data frame 2:802.11 management frame */ - u8 PreambleMode;// 0: short 1:long + u8 PreambleMode;/* 0: short 1:long */ u8 TxRate; u8 FragmentCount; - u8 EapFix; // For speed up key install + u8 EapFix; /* For speed up key install */ - // For R00 and T00 ---------------------------------------------- - union - { + /* For R00 and T00 ------------------------------ */ + union { R00_DESCRIPTOR R00; T00_DESCRIPTOR T00; }; - // For R01 and T01 ---------------------------------------------- - union - { + /* For R01 and T01 ------------------------------ */ + union { R01_DESCRIPTOR R01; T01_DESCRIPTOR T01; }; - // For R02 and T02 ---------------------------------------------- - union - { - u32 R02; + /* For R02 and T02 ------------------------------ */ + union { + u32 R02; T02_DESCRIPTOR T02; }; - // For R03 and T03 ---------------------------------------------- - // For software used - union - { + /* For R03 and T03 ------------------------------ */ + /* For software used */ + union { u32 R03; u32 T03; - struct - { + struct { u8 buffer_number; u8 buffer_start_index; u16 buffer_total_size; }; }; - // For storing the buffer - u16 buffer_size[ MAX_DESCRIPTOR_BUFFER_INDEX ]; - void* buffer_address[ MAX_DESCRIPTOR_BUFFER_INDEX ];//931130.4.q - + /* For storing the buffer */ + u16 buffer_size[MAX_DESCRIPTOR_BUFFER_INDEX]; + void *buffer_address[MAX_DESCRIPTOR_BUFFER_INDEX]; }; -#define DEFAULT_NULL_PACKET_COUNT 180000 //20060828.1 Add. 180 seconds +#define DEFAULT_NULL_PACKET_COUNT 180000 /* 180 seconds */ -#define MAX_TXVGA_EEPROM 9 //How many word(u16) of EEPROM will be used for TxVGA -#define MAX_RF_PARAMETER 32 +#define MAX_TXVGA_EEPROM 9 /* How many word(u16) of EEPROM will be used for TxVGA */ +#define MAX_RF_PARAMETER 32 typedef struct _TXVGA_FOR_50 { - u8 ChanNo; - u8 TxVgaValue; + u8 ChanNo; + u8 TxVgaValue; } TXVGA_FOR_50; -//===================================================================== -// Device related include -//===================================================================== +/* + * ============================================== + * Device related include + * ============================================== + */ #include "wbusb_s.h" #include "wb35reg_s.h" #include "wb35tx_s.h" #include "wb35rx_s.h" -// For Hal using ================================================================== +/* For Hal using ============================================ */ struct hw_data { - // For compatible with 33 + /* For compatible with 33 */ u32 revision; - u32 BB3c_cal; // The value for Tx calibration comes from EEPROM - u32 BB54_cal; // The value for Rx calibration comes from EEPROM + u32 BB3c_cal; /* The value for Tx calibration comes from EEPROM */ + u32 BB54_cal; /* The value for Rx calibration comes from EEPROM */ - - // For surprise remove - u32 SurpriseRemove; // 0: Normal 1: Surprise remove + /* For surprise remove */ + u32 SurpriseRemove; /* 0: Normal 1: Surprise remove */ u8 IsKeyPreSet; - u8 CalOneTime; // 20060630.1 + u8 CalOneTime; u8 VCO_trim; - // For Fix 1'st DMA bug u32 FragCount; - u32 DMAFix; //V1_DMA_FIX The variable can be removed if driver want to save mem space for V2. - - //=============================================== - // Definition for MAC address - //=============================================== - u8 PermanentMacAddress[ETH_ALEN + 2]; // The Enthernet addr that are stored in EEPROM. + 2 to 8-byte alignment - u8 CurrentMacAddress[ETH_ALEN + 2]; // The Enthernet addr that are in used. + 2 to 8-byte alignment - - //===================================================================== - // Definition for 802.11 - //===================================================================== - u8 *bssid_pointer; // Used by hal_get_bssid for return value - u8 bssid[8];// Only 6 byte will be used. 8 byte is required for read buffer - u8 ssid[32];// maximum ssid length is 32 byte + u32 DMAFix; /* V1_DMA_FIX The variable can be removed if driver want to save mem space for V2. */ + + /* + * =============================================== + * Definition for MAC address + * =============================================== + */ + u8 PermanentMacAddress[ETH_ALEN + 2]; /* The Ethernet addr that are stored in EEPROM. + 2 to 8-byte alignment */ + u8 CurrentMacAddress[ETH_ALEN + 2]; /* The Enthernet addr that are in used. + 2 to 8-byte alignment */ + + /* + * ========================================= + * Definition for 802.11 + * ========================================= + */ + u8 *bssid_pointer; /* Used by hal_get_bssid for return value */ + u8 bssid[8]; /* Only 6 byte will be used. 8 byte is required for read buffer */ + u8 ssid[32]; /* maximum ssid length is 32 byte */ u16 AID; u8 ssid_length; @@ -433,112 +409,118 @@ struct hw_data { u16 BeaconPeriod; u16 ProbeDelay; - u8 bss_type;// 0: IBSS_NET or 1:ESS_NET - u8 preamble;// 0: short preamble, 1: long preamble - u8 slot_time_select;// 9 or 20 value - u8 phy_type;// Phy select + u8 bss_type;/* 0: IBSS_NET or 1:ESS_NET */ + u8 preamble;/* 0: short preamble, 1: long preamble */ + u8 slot_time_select; /* 9 or 20 value */ + u8 phy_type; /* Phy select */ u32 phy_para[MAX_RF_PARAMETER]; u32 phy_number; - u32 CurrentRadioSw; // 20060320.2 0:On 1:Off - u32 CurrentRadioHw; // 20060825 0:On 1:Off + u32 CurrentRadioSw; /* 0:On 1:Off */ + u32 CurrentRadioHw; /* 0:On 1:Off */ - u8 *power_save_point; // Used by hal_get_power_save_mode for return value + u8 *power_save_point; /* Used by hal_get_power_save_mode for return value */ u8 cwmin; u8 desired_power_save; - u8 dtim;// Is running dtim - u8 mapping_key_replace_index;//In Key table, the next index be replaced 931130.4.r + u8 dtim; /* Is running dtim */ + u8 mapping_key_replace_index; /* In Key table, the next index be replaced */ u16 MaxReceiveLifeTime; u16 FragmentThreshold; u16 FragmentThreshold_tmp; u16 cwmax; - u8 Key_slot[MAX_KEY_TABLE][8]; //Ownership record for key slot. For Alignment - u32 Key_content[MAX_KEY_TABLE][12]; // 10DW for each entry + 2 for burst command( Off and On valid bit) + u8 Key_slot[MAX_KEY_TABLE][8]; /* Ownership record for key slot. For Alignment */ + u32 Key_content[MAX_KEY_TABLE][12]; /* 10DW for each entry + 2 for burst command (Off and On valid bit) */ u8 CurrentDefaultKeyIndex; u32 CurrentDefaultKeyLength; - //======================================================================== - // Variable for each module - //======================================================================== - struct wb_usb WbUsb; // Need WbUsb.h - struct wb35_reg reg; // Need Wb35Reg.h - struct wb35_tx Wb35Tx; // Need Wb35Tx.h - struct wb35_rx Wb35Rx; // Need Wb35Rx.h + /* + * ================================================== + * Variable for each module + * ================================================== + */ + struct wb_usb WbUsb; /* Need WbUsb.h */ + struct wb35_reg reg; /* Need Wb35Reg.h */ + struct wb35_tx Wb35Tx; /* Need Wb35Tx.h */ + struct wb35_rx Wb35Rx; /* Need Wb35Rx.h */ - struct timer_list LEDTimer;// For LED + struct timer_list LEDTimer; /* For LED */ - u32 LEDpoint;// For LED + u32 LEDpoint; /* For LED */ - u32 dto_tx_retry_count; // LA20040210_DTO kevin - u32 dto_tx_frag_count; // LA20040210_DTO kevin - u32 rx_ok_count[13]; // index=0: total rx ok - //u32 rx_ok_bytes[13]; // index=0, total rx ok bytes - u32 rx_err_count[13]; // index=0: total rx err + u32 dto_tx_retry_count; + u32 dto_tx_frag_count; + u32 rx_ok_count[13]; /* index=0: total rx ok */ + u32 rx_err_count[13]; /* index=0: total rx err */ - //for Tx debug + /* for Tx debug */ u32 tx_TBTT_start_count; u32 tx_ETR_count; u32 tx_WepOn_false_count; u32 tx_Null_key_count; u32 tx_retry_count[8]; - u8 PowerIndexFromEEPROM; // For 2412MHz - u8 power_index; - u8 IsWaitJoinComplete; // TRUE: set join request - u8 band; + u8 PowerIndexFromEEPROM; /* For 2412MHz */ + u8 power_index; + u8 IsWaitJoinComplete; /* TRUE: set join request */ + u8 band; - u16 SoftwareSet; - u16 Reserved_s; + u16 SoftwareSet; + u16 Reserved_s; - u32 IsInitOK; // 0: Driver starting 1: Driver init OK + u32 IsInitOK; /* 0: Driver starting 1: Driver init OK */ - // For Phy calibration - s32 iq_rsdl_gain_tx_d2; - s32 iq_rsdl_phase_tx_d2; - u32 txvga_setting_for_cal; // 20060703.1 Add + /* For Phy calibration */ + s32 iq_rsdl_gain_tx_d2; + s32 iq_rsdl_phase_tx_d2; + u32 txvga_setting_for_cal; - u8 TxVgaSettingInEEPROM[ (((MAX_TXVGA_EEPROM*2)+3) & ~0x03) ]; // 20060621 For backup EEPROM value - u8 TxVgaFor24[16]; // Max is 14, 2 for alignment - TXVGA_FOR_50 TxVgaFor50[36]; // 35 channels in 5G. 35x2 = 70 byte. 2 for alignments + u8 TxVgaSettingInEEPROM[(((MAX_TXVGA_EEPROM * 2) + 3) & ~0x03)]; /* For EEPROM value */ + u8 TxVgaFor24[16]; /* Max is 14, 2 for alignment */ + TXVGA_FOR_50 TxVgaFor50[36]; /* 35 channels in 5G. 35x2 = 70 byte. 2 for alignments */ - u16 Scan_Interval; - u16 RESERVED6; + u16 Scan_Interval; + u16 RESERVED6; - // LED control + /* LED control */ u32 LED_control; - // LED_control 4 byte: Gray_Led_1[3] Gray_Led_0[2] Led[1] Led[0] - // Gray_Led - // For Led gray setting - // Led - // 0: normal control, LED behavior will decide by EEPROM setting - // 1: Turn off specific LED - // 2: Always on specific LED - // 3: slow blinking specific LED - // 4: fast blinking specific LED - // 5: WPS led control is set. Led0 is Red, Led1 id Green - // Led[1] is parameter for WPS LED mode - // // 1:InProgress 2: Error 3: Session overlap 4: Success 20061108 control - - u32 LED_LinkOn; //Turn LED on control - u32 LED_Scanning; // Let LED in scan process control - u32 LED_Blinking; // Temp variable for shining + /* + * LED_control 4 byte: Gray_Led_1[3] Gray_Led_0[2] Led[1] Led[0] + * Gray_Led + * For Led gray setting + * Led + * 0: normal control, + * LED behavior will decide by EEPROM setting + * 1: Turn off specific LED + * 2: Always on specific LED + * 3: slow blinking specific LED + * 4: fast blinking specific LED + * 5: WPS led control is set. Led0 is Red, Led1 id Green + * + * Led[1] is parameter for WPS LED mode + * 1:InProgress + * 2: Error + * 3: Session overlap + * 4: Success control + */ + u32 LED_LinkOn; /* Turn LED on control */ + u32 LED_Scanning; /* Let LED in scan process control */ + u32 LED_Blinking; /* Temp variable for shining */ u32 RxByteCountLast; u32 TxByteCountLast; atomic_t SurpriseRemoveCount; - // For global timer - u32 time_count;//TICK_TIME_100ms 1 = 100ms + /* For global timer */ + u32 time_count; /* TICK_TIME_100ms 1 = 100ms */ - // For error recover + /* For error recover */ u32 HwStop; - // 20060828.1 for avoid AP disconnect + /* For avoid AP disconnect */ u32 NullPacketCount; - }; #endif -- cgit v0.10.2 From 83ad993d65738b6058a019b9c20ee65a57b0eecf Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 28 Mar 2010 22:00:13 +0200 Subject: Staging: winbond: wblinux_f.h Coding style fixes v2. I fixed whitespace and comments. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wblinux_f.h b/drivers/staging/winbond/wblinux_f.h index 868e877..0a9d214 100644 --- a/drivers/staging/winbond/wblinux_f.h +++ b/drivers/staging/winbond/wblinux_f.h @@ -4,13 +4,14 @@ #include "core.h" #include "mds_s.h" -//========================================================================= -// Copyright (c) 1996-2004 Winbond Electronic Corporation -// -// wblinux_f.h -// -int wb35_start_xmit(struct sk_buff *skb, struct net_device *netdev ); -void wb35_set_multicast( struct net_device *netdev ); -struct net_device_stats * wb35_netdev_stats( struct net_device *netdev ); - +/* + * ==================================================================== + * Copyright (c) 1996-2004 Winbond Electronic Corporation + * + * wblinux_f.h + * ==================================================================== + */ +int wb35_start_xmit(struct sk_buff *skb, struct net_device *netdev); +void wb35_set_multicast(struct net_device *netdev); +struct net_device_stats *wb35_netdev_stats(struct net_device *netdev); #endif -- cgit v0.10.2 From 912457fa4f63d69625653c6ca8d92c564907d14b Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 28 Mar 2010 22:05:32 +0200 Subject: Staging: winbond: wbusb_s.h Coding style fixes. I fixed comments and some spacing. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wbusb_s.h b/drivers/staging/winbond/wbusb_s.h index 0c7e6a3..8961ae5 100644 --- a/drivers/staging/winbond/wbusb_s.h +++ b/drivers/staging/winbond/wbusb_s.h @@ -1,16 +1,10 @@ -//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -// Copyright (c) 1996-2004 Winbond Electronic Corporation -// -// Module Name: -// wbusb_s.h -// -// Abstract: -// Linux driver. -// -// Author: -// -//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - +/* ========================================================= + * Copyright (c) 1996-2004 Winbond Electronic Corporation + * + * Module Name: + * wbusb_s.h + * ========================================================= + */ #ifndef __WINBOND_WBUSB_S_H #define __WINBOND_WBUSB_S_H @@ -18,8 +12,7 @@ struct wb_usb { u32 IsUsb20; - struct usb_device *udev; + struct usb_device *udev; u32 DetectCount; }; - #endif -- cgit v0.10.2 From e5851c205d7d1920389ab4368f6f374d3594b93d Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Fri, 2 Apr 2010 10:57:35 +0200 Subject: Staging: winbond: wbusb.c Coding style fixes. I fixed the reported checkpatch.pl problems except for a bunch of long lines and some printk:s. I also removed versioning comments. Signed-off-by: Lars Lindley Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/wbusb.c b/drivers/staging/winbond/wbusb.c index 3482eec..d7694e6 100644 --- a/drivers/staging/winbond/wbusb.c +++ b/drivers/staging/winbond/wbusb.c @@ -142,19 +142,17 @@ static void hal_set_radio_mode(struct hw_data *pHwData, unsigned char radio_off) if (pHwData->SurpriseRemove) return; - if (radio_off) //disable Baseband receive off - { - pHwData->CurrentRadioSw = 1; // off + if (radio_off) { /* disable Baseband receive off */ + pHwData->CurrentRadioSw = 1; /* off */ reg->M24_MacControl &= 0xffffffbf; } else { - pHwData->CurrentRadioSw = 0; // on + pHwData->CurrentRadioSw = 0; /* on */ reg->M24_MacControl |= 0x00000040; } Wb35Reg_Write(pHwData, 0x0824, reg->M24_MacControl); } -static void -hal_set_current_channel_ex(struct hw_data *pHwData, struct chan_info channel) +static void hal_set_current_channel_ex(struct hw_data *pHwData, struct chan_info channel) { struct wb35_reg *reg = &pHwData->reg; @@ -163,17 +161,18 @@ hal_set_current_channel_ex(struct hw_data *pHwData, struct chan_info channel) printk("Going to channel: %d/%d\n", channel.band, channel.ChanNo); - RFSynthesizer_SwitchingChannel(pHwData, channel); // Switch channel + RFSynthesizer_SwitchingChannel(pHwData, channel); /* Switch channel */ pHwData->Channel = channel.ChanNo; pHwData->band = channel.band; #ifdef _PE_STATE_DUMP_ printk("Set channel is %d, band =%d\n", pHwData->Channel, pHwData->band); #endif - reg->M28_MacControl &= ~0xff; // Clean channel information field + reg->M28_MacControl &= ~0xff; /* Clean channel information field */ reg->M28_MacControl |= channel.ChanNo; Wb35Reg_WriteWithCallbackValue(pHwData, 0x0828, reg->M28_MacControl, - (s8 *) & channel, sizeof(struct chan_info)); + (s8 *) &channel, + sizeof(struct chan_info)); } static void hal_set_current_channel(struct hw_data *pHwData, struct chan_info channel) @@ -188,21 +187,22 @@ static void hal_set_accept_broadcast(struct hw_data *pHwData, u8 enable) if (pHwData->SurpriseRemove) return; - reg->M00_MacControl &= ~0x02000000; //The HW value + reg->M00_MacControl &= ~0x02000000; /* The HW value */ if (enable) - reg->M00_MacControl |= 0x02000000; //The HW value + reg->M00_MacControl |= 0x02000000; /* The HW value */ Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl); } -//for wep key error detection, we need to accept broadcast packets to be received temporary. +/* For wep key error detection, we need to accept broadcast packets to be received temporary. */ static void hal_set_accept_promiscuous(struct hw_data *pHwData, u8 enable) { struct wb35_reg *reg = &pHwData->reg; if (pHwData->SurpriseRemove) return; + if (enable) { reg->M00_MacControl |= 0x00400000; Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl); @@ -219,9 +219,9 @@ static void hal_set_accept_multicast(struct hw_data *pHwData, u8 enable) if (pHwData->SurpriseRemove) return; - reg->M00_MacControl &= ~0x01000000; //The HW value + reg->M00_MacControl &= ~0x01000000; /* The HW value */ if (enable) - reg->M00_MacControl |= 0x01000000; //The HW value + reg->M00_MacControl |= 0x01000000; /* The HW value */ Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl); } @@ -232,13 +232,12 @@ static void hal_set_accept_beacon(struct hw_data *pHwData, u8 enable) if (pHwData->SurpriseRemove) return; - // 20040108 debug - if (!enable) //Due to SME and MLME are not suitable for 35 + if (!enable) /* Due to SME and MLME are not suitable for 35 */ return; - reg->M00_MacControl &= ~0x04000000; //The HW value + reg->M00_MacControl &= ~0x04000000; /* The HW value */ if (enable) - reg->M00_MacControl |= 0x04000000; //The HW value + reg->M00_MacControl |= 0x04000000; /* The HW value */ Wb35Reg_Write(pHwData, 0x0800, reg->M00_MacControl); } @@ -283,8 +282,7 @@ static const struct ieee80211_ops wbsoft_ops = { .get_tsf = wbsoft_get_tsf, }; -static void -hal_set_ethernet_address(struct hw_data *pHwData, u8 * current_address) +static void hal_set_ethernet_address(struct hw_data *pHwData, u8 *current_address) { u32 ltmp[2]; @@ -294,14 +292,12 @@ hal_set_ethernet_address(struct hw_data *pHwData, u8 * current_address) memcpy(pHwData->CurrentMacAddress, current_address, ETH_ALEN); ltmp[0] = cpu_to_le32(*(u32 *) pHwData->CurrentMacAddress); - ltmp[1] = - cpu_to_le32(*(u32 *) (pHwData->CurrentMacAddress + 4)) & 0xffff; + ltmp[1] = cpu_to_le32(*(u32 *) (pHwData->CurrentMacAddress + 4)) & 0xffff; Wb35Reg_BurstWrite(pHwData, 0x03e8, ltmp, 2, AUTO_INCREMENT); } -static void -hal_get_permanent_address(struct hw_data *pHwData, u8 * pethernet_address) +static void hal_get_permanent_address(struct hw_data *pHwData, u8 *pethernet_address) { if (pHwData->SurpriseRemove) return; @@ -319,7 +315,7 @@ static void hal_stop(struct hw_data *pHwData) pHwData->Wb35Tx.tx_halt = 1; Wb35Tx_stop(pHwData); - reg->D00_DmaControl &= ~0xc0000000; //Tx Off, Rx Off + reg->D00_DmaControl &= ~0xc0000000; /* Tx Off, Rx Off */ Wb35Reg_Write(pHwData, 0x0400, reg->D00_DmaControl); } @@ -346,14 +342,14 @@ u8 hal_get_antenna_number(struct hw_data *pHwData) } /* 0 : radio on; 1: radio off */ -static u8 hal_get_hw_radio_off(struct hw_data * pHwData) +static u8 hal_get_hw_radio_off(struct hw_data *pHwData) { struct wb35_reg *reg = &pHwData->reg; if (pHwData->SurpriseRemove) return 1; - //read the bit16 of register U1B0 + /* read the bit16 of register U1B0 */ Wb35Reg_Read(pHwData, 0x3b0, ®->U1B0); if ((reg->U1B0 & 0x00010000)) { pHwData->CurrentRadioHw = 1; @@ -387,104 +383,98 @@ static void hal_led_control(unsigned long data) if (pHwData->LED_control) { ltmp2 = pHwData->LED_control & 0xff; - if (ltmp2 == 5) // 5 is WPS mode - { + if (ltmp2 == 5) { /* 5 is WPS mode */ TimeInterval = 100; ltmp2 = (pHwData->LED_control >> 8) & 0xff; switch (ltmp2) { - case 1: // [0.2 On][0.1 Off]... + case 1: /* [0.2 On][0.1 Off]... */ pHwData->LED_Blinking %= 3; - ltmp = 0x1010; // Led 1 & 0 Green and Red - if (pHwData->LED_Blinking == 2) // Turn off + ltmp = 0x1010; /* Led 1 & 0 Green and Red */ + if (pHwData->LED_Blinking == 2) /* Turn off */ ltmp = 0; break; - case 2: // [0.1 On][0.1 Off]... + case 2: /* [0.1 On][0.1 Off]... */ pHwData->LED_Blinking %= 2; - ltmp = 0x0010; // Led 0 red color - if (pHwData->LED_Blinking) // Turn off + ltmp = 0x0010; /* Led 0 red color */ + if (pHwData->LED_Blinking) /* Turn off */ ltmp = 0; break; - case 3: // [0.1 On][0.1 Off][0.1 On][0.1 Off][0.1 On][0.1 Off][0.1 On][0.1 Off][0.1 On][0.1 Off][0.5 Off]... + case 3: /* [0.1 On][0.1 Off][0.1 On][0.1 Off][0.1 On][0.1 Off][0.1 On][0.1 Off][0.1 On][0.1 Off][0.5 Off]... */ pHwData->LED_Blinking %= 15; - ltmp = 0x0010; // Led 0 red color - if ((pHwData->LED_Blinking >= 9) || (pHwData->LED_Blinking % 2)) // Turn off 0.6 sec + ltmp = 0x0010; /* Led 0 red color */ + if ((pHwData->LED_Blinking >= 9) || (pHwData->LED_Blinking % 2)) /* Turn off 0.6 sec */ ltmp = 0; break; - case 4: // [300 On][ off ] - ltmp = 0x1000; // Led 1 Green color + case 4: /* [300 On][ off ] */ + ltmp = 0x1000; /* Led 1 Green color */ if (pHwData->LED_Blinking >= 3000) - ltmp = 0; // led maybe on after 300sec * 32bit counter overlap. + ltmp = 0; /* led maybe on after 300sec * 32bit counter overlap. */ break; } pHwData->LED_Blinking++; reg->U1BC_LEDConfigure = ltmp; - if (LEDSet != 7) // Only 111 mode has 2 LEDs on PCB. - { - reg->U1BC_LEDConfigure |= (ltmp & 0xff) << 8; // Copy LED result to each LED control register + if (LEDSet != 7) { /* Only 111 mode has 2 LEDs on PCB. */ + reg->U1BC_LEDConfigure |= (ltmp & 0xff) << 8; /* Copy LED result to each LED control register */ reg->U1BC_LEDConfigure |= (ltmp & 0xff00) >> 8; } Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); } - } else if (pHwData->CurrentRadioSw || pHwData->CurrentRadioHw) // If radio off - { + } else if (pHwData->CurrentRadioSw || pHwData->CurrentRadioHw) { /* If radio off */ if (reg->U1BC_LEDConfigure & 0x1010) { reg->U1BC_LEDConfigure &= ~0x1010; Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); } } else { switch (LEDSet) { - case 4: // [100] Only 1 Led be placed on PCB and use pin 21 of IC. Use LED_0 for showing - if (!pHwData->LED_LinkOn) // Blink only if not Link On - { - // Blinking if scanning is on progress + case 4: /* [100] Only 1 Led be placed on PCB and use pin 21 of IC. Use LED_0 for showing */ + if (!pHwData->LED_LinkOn) { /* Blink only if not Link On */ + /* Blinking if scanning is on progress */ if (pHwData->LED_Scanning) { if (pHwData->LED_Blinking == 0) { reg->U1BC_LEDConfigure |= 0x10; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_0 On + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 On */ pHwData->LED_Blinking = 1; TimeInterval = 300; } else { reg->U1BC_LEDConfigure &= ~0x10; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_0 Off + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 Off */ pHwData->LED_Blinking = 0; TimeInterval = 300; } } else { - //Turn Off LED_0 + /* Turn Off LED_0 */ if (reg->U1BC_LEDConfigure & 0x10) { reg->U1BC_LEDConfigure &= ~0x10; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_0 Off + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 Off */ } } } else { - // Turn On LED_0 + /* Turn On LED_0 */ if ((reg->U1BC_LEDConfigure & 0x10) == 0) { reg->U1BC_LEDConfigure |= 0x10; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_0 Off + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 Off */ } } break; - - case 6: // [110] Only 1 Led be placed on PCB and use pin 21 of IC. Use LED_0 for showing - if (!pHwData->LED_LinkOn) // Blink only if not Link On - { - // Blinking if scanning is on progress + case 6: /* [110] Only 1 Led be placed on PCB and use pin 21 of IC. Use LED_0 for showing */ + if (!pHwData->LED_LinkOn) { /* Blink only if not Link On */ + /* Blinking if scanning is on progress */ if (pHwData->LED_Scanning) { if (pHwData->LED_Blinking == 0) { reg->U1BC_LEDConfigure &= ~0xf; reg->U1BC_LEDConfigure |= 0x10; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_0 On + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 On */ pHwData->LED_Blinking = 1; TimeInterval = 300; } else { reg->U1BC_LEDConfigure &= ~0x1f; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_0 Off + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 Off */ pHwData->LED_Blinking = 0; TimeInterval = 300; } } else { - // 20060901 Gray blinking if in disconnect state and not scanning + /* Gray blinking if in disconnect state and not scanning */ ltmp = reg->U1BC_LEDConfigure; reg->U1BC_LEDConfigure &= ~0x1f; if (LED_GRAY2[(pHwData->LED_Blinking % 30)]) { @@ -494,85 +484,78 @@ static void hal_led_control(unsigned long data) } pHwData->LED_Blinking++; if (reg->U1BC_LEDConfigure != ltmp) - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_0 Off + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 Off */ TimeInterval = 100; } } else { - // Turn On LED_0 + /* Turn On LED_0 */ if ((reg->U1BC_LEDConfigure & 0x10) == 0) { reg->U1BC_LEDConfigure |= 0x10; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_0 Off + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_0 Off */ } } break; - - case 5: // [101] Only 1 Led be placed on PCB and use LED_1 for showing - if (!pHwData->LED_LinkOn) // Blink only if not Link On - { - // Blinking if scanning is on progress + case 5: /* [101] Only 1 Led be placed on PCB and use LED_1 for showing */ + if (!pHwData->LED_LinkOn) { /* Blink only if not Link On */ + /* Blinking if scanning is on progress */ if (pHwData->LED_Scanning) { if (pHwData->LED_Blinking == 0) { - reg->U1BC_LEDConfigure |= - 0x1000; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_1 On + reg->U1BC_LEDConfigure |= 0x1000; + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_1 On */ pHwData->LED_Blinking = 1; TimeInterval = 300; } else { - reg->U1BC_LEDConfigure &= - ~0x1000; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_1 Off + reg->U1BC_LEDConfigure &= ~0x1000; + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_1 Off */ pHwData->LED_Blinking = 0; TimeInterval = 300; } } else { - //Turn Off LED_1 + /* Turn Off LED_1 */ if (reg->U1BC_LEDConfigure & 0x1000) { - reg->U1BC_LEDConfigure &= - ~0x1000; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_1 Off + reg->U1BC_LEDConfigure &= ~0x1000; + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_1 Off */ } } } else { - // Is transmitting/receiving ?? + /* Is transmitting/receiving ?? */ if ((adapter->RxByteCount != pHwData->RxByteCountLast) || (adapter->TxByteCount != pHwData->TxByteCountLast)) { if ((reg->U1BC_LEDConfigure & 0x3000) != 0x3000) { - reg->U1BC_LEDConfigure |= - 0x3000; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_1 On + reg->U1BC_LEDConfigure |= 0x3000; + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_1 On */ } - // Update variable + /* Update variable */ pHwData->RxByteCountLast = adapter->RxByteCount; pHwData->TxByteCountLast = adapter->TxByteCount; TimeInterval = 200; } else { - // Turn On LED_1 and blinking if transmitting/receiving + /* Turn On LED_1 and blinking if transmitting/receiving */ if ((reg->U1BC_LEDConfigure & 0x3000) != 0x1000) { reg->U1BC_LEDConfigure &= ~0x3000; reg->U1BC_LEDConfigure |= 0x1000; - Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); // LED_1 On + Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); /* LED_1 On */ } } } break; - - default: // Default setting. 2 LED be placed on PCB. LED_0: Link On LED_1 Active + default: /* Default setting. 2 LED be placed on PCB. LED_0: Link On LED_1 Active */ if ((reg->U1BC_LEDConfigure & 0x3000) != 0x3000) { - reg->U1BC_LEDConfigure |= 0x3000; // LED_1 is always on and event enable + reg->U1BC_LEDConfigure |= 0x3000; /* LED_1 is always on and event enable */ Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); } if (pHwData->LED_Blinking) { - // Gray blinking + /* Gray blinking */ reg->U1BC_LEDConfigure &= ~0x0f; reg->U1BC_LEDConfigure |= 0x10; reg->U1BC_LEDConfigure |= @@ -584,7 +567,7 @@ static void hal_led_control(unsigned long data) if (pHwData->LED_Blinking < 40) TimeInterval = 100; else { - pHwData->LED_Blinking = 0; // Stop blinking + pHwData->LED_Blinking = 0; /* Stop blinking */ reg->U1BC_LEDConfigure &= ~0x0f; Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); @@ -593,16 +576,14 @@ static void hal_led_control(unsigned long data) } if (pHwData->LED_LinkOn) { - if (!(reg->U1BC_LEDConfigure & 0x10)) // Check the LED_0 - { - //Try to turn ON LED_0 after gray blinking + if (!(reg->U1BC_LEDConfigure & 0x10)) { /* Check the LED_0 */ + /* Try to turn ON LED_0 after gray blinking */ reg->U1BC_LEDConfigure |= 0x10; - pHwData->LED_Blinking = 1; //Start blinking + pHwData->LED_Blinking = 1; /* Start blinking */ TimeInterval = 50; } } else { - if (reg->U1BC_LEDConfigure & 0x10) // Check the LED_0 - { + if (reg->U1BC_LEDConfigure & 0x10) { /* Check the LED_0 */ reg->U1BC_LEDConfigure &= ~0x10; Wb35Reg_Write(pHwData, 0x03bc, reg->U1BC_LEDConfigure); @@ -611,7 +592,7 @@ static void hal_led_control(unsigned long data) break; } - //20060828.1 Active send null packet to avoid AP disconnect + /* Active send null packet to avoid AP disconnect */ if (pHwData->LED_LinkOn) { pHwData->NullPacketCount += TimeInterval; if (pHwData->NullPacketCount >= @@ -622,7 +603,7 @@ static void hal_led_control(unsigned long data) } pHwData->time_count += TimeInterval; - Wb35Tx_CurrentTime(adapter, pHwData->time_count); // 20060928 add + Wb35Tx_CurrentTime(adapter, pHwData->time_count); pHwData->LEDTimer.expires = jiffies + msecs_to_jiffies(TimeInterval); add_timer(&pHwData->LEDTimer); } @@ -654,7 +635,7 @@ static int hal_init_hardware(struct ieee80211_hw *hw) SoftwareSet = hal_software_set(pHwData); #ifdef Vendor2 - // Try to make sure the EEPROM contain + /* Try to make sure the EEPROM contain */ SoftwareSet >>= 8; if (SoftwareSet != 0x82) return false; -- cgit v0.10.2 From 5813b6243cf02b89c6e6a6a8debc10477e5ce3a8 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 21:27:42 +0200 Subject: Staging: wlan-ng: fix spaces coding style issue in p80211conv.c This is a patch to the p80211conv.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like spaces required around that '&' (ctx:VxV) Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/p80211conv.c b/drivers/staging/wlan-ng/p80211conv.c index a1605fb..71c3595 100644 --- a/drivers/staging/wlan-ng/p80211conv.c +++ b/drivers/staging/wlan-ng/p80211conv.c @@ -208,7 +208,7 @@ int skb_ether_to_p80211(wlandevice_t *wlandev, u32 ethconv, p80211_wep->data = kmalloc(skb->len, GFP_ATOMIC); foo = wep_encrypt(wlandev, skb->data, p80211_wep->data, skb->len, - (wlandev->hostwep &HOSTWEP_DEFAULTKEY_MASK), + (wlandev->hostwep & HOSTWEP_DEFAULTKEY_MASK), p80211_wep->iv, p80211_wep->icv); if (foo) { printk(KERN_WARNING -- cgit v0.10.2 From 4ffab688827361bcdaca6ac83bbda195c53bd098 Mon Sep 17 00:00:00 2001 From: Edgardo Hames Date: Mon, 15 Mar 2010 23:00:40 -0300 Subject: Staging: wlan-ng: rework code style after feedback This patch includes the feedback received from Richard Kennedy. Signed-off-by: Edgardo Hames Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/hfa384x_usb.c b/drivers/staging/wlan-ng/hfa384x_usb.c index 2400242..a41db5d 100644 --- a/drivers/staging/wlan-ng/hfa384x_usb.c +++ b/drivers/staging/wlan-ng/hfa384x_usb.c @@ -2612,19 +2612,18 @@ int hfa384x_drvr_start(hfa384x_t *hw) if (result1 != 0) { if (result2 != 0) { printk(KERN_ERR - "cmd_initialize() failed on two attempts," - " results %d and %d\n", result1, result2); + "cmd_initialize() failed on two attempts, results %d and %d\n", + result1, result2); usb_kill_urb(&hw->rx_urb); goto done; } else { pr_debug("First cmd_initialize() failed (result %d),\n", result1); - pr_debug("but second attempt succeeded." - " All should be ok\n"); + pr_debug("but second attempt succeeded. All should be ok\n"); } } else if (result2 != 0) { - printk(KERN_WARNING "First cmd_initialize() succeeded," - " but second attempt failed (result=%d)\n", result2); + printk(KERN_WARNING "First cmd_initialize() succeeded, but second attempt failed (result=%d)\n", + result2); printk(KERN_WARNING "Most likely the card will be functional\n"); goto done; @@ -3382,9 +3381,7 @@ retry: * our request has been acknowledged. Odd, * but our OUT URB is still alive... */ - pr_debug("Causality violation: " - "please reboot Universe, or email " - "linux-wlan-devel@lists.linux-wlan.com\n"); + pr_debug("Causality violation: please reboot Universe\n"); ctlx->state = CTLX_RESP_COMPLETE; break; @@ -3848,8 +3845,8 @@ retry: default: /* This is NOT a valid CTLX "success" state! */ - printk(KERN_ERR "Illegal CTLX[%d]" - " success state(%s, %d) in OUT URB\n", + printk(KERN_ERR + "Illegal CTLX[%d] success state(%s, %d) in OUT URB\n", le16_to_cpu(ctlx->outbuf.type), ctlxstr(ctlx->state), urb->status); break; -- cgit v0.10.2 From 9d3b3bb0b5807b9305e8c9e2688603f785ead0cd Mon Sep 17 00:00:00 2001 From: Richard Kennedy Date: Wed, 17 Mar 2010 14:40:55 +0000 Subject: Staging: wlan-ng: tidy up iw_handler Use array initialisation technique copied from ipw2200.c. This should always get the function pointers in the correct place, without the needed for endless counting, skipping blanks etc. Signed-off-by: Richard Kennedy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/p80211wext.c b/drivers/staging/wlan-ng/p80211wext.c index dc72661..936be55 100644 --- a/drivers/staging/wlan-ng/p80211wext.c +++ b/drivers/staging/wlan-ng/p80211wext.c @@ -1680,64 +1680,50 @@ static int p80211_wext_get_iwauth(struct net_device *dev, return result; } +#define IW_IOCTL(x) [(x)-SIOCSIWCOMMIT] + static iw_handler p80211wext_handlers[] = { - (iw_handler) p80211wext_siwcommit, /* SIOCSIWCOMMIT */ - (iw_handler) p80211wext_giwname, /* SIOCGIWNAME */ - (iw_handler) NULL, /* SIOCSIWNWID */ - (iw_handler) NULL, /* SIOCGIWNWID */ - (iw_handler) p80211wext_siwfreq, /* SIOCSIWFREQ */ - (iw_handler) p80211wext_giwfreq, /* SIOCGIWFREQ */ - (iw_handler) p80211wext_siwmode, /* SIOCSIWMODE */ - (iw_handler) p80211wext_giwmode, /* SIOCGIWMODE */ - (iw_handler) NULL, /* SIOCSIWSENS */ - (iw_handler) NULL, /* SIOCGIWSENS */ - (iw_handler) NULL, /* not used *//* SIOCSIWRANGE */ - (iw_handler) p80211wext_giwrange, /* SIOCGIWRANGE */ - (iw_handler) NULL, /* not used *//* SIOCSIWPRIV */ - (iw_handler) NULL, /* kernel code *//* SIOCGIWPRIV */ - (iw_handler) NULL, /* not used *//* SIOCSIWSTATS */ - (iw_handler) NULL, /* kernel code *//* SIOCGIWSTATS */ - (iw_handler) p80211wext_siwspy, /* SIOCSIWSPY */ - (iw_handler) p80211wext_giwspy, /* SIOCGIWSPY */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) NULL, /* SIOCSIWAP */ - (iw_handler) p80211wext_giwap, /* SIOCGIWAP */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) NULL, /* SIOCGIWAPLIST */ - (iw_handler) p80211wext_siwscan, /* SIOCSIWSCAN */ - (iw_handler) p80211wext_giwscan, /* SIOCGIWSCAN */ - (iw_handler) p80211wext_siwessid, /* SIOCSIWESSID */ - (iw_handler) p80211wext_giwessid, /* SIOCGIWESSID */ - (iw_handler) NULL, /* SIOCSIWNICKN */ - (iw_handler) p80211wext_giwessid, /* SIOCGIWNICKN */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) NULL, /* SIOCSIWRATE */ - (iw_handler) p80211wext_giwrate, /* SIOCGIWRATE */ - (iw_handler) p80211wext_siwrts, /* SIOCSIWRTS */ - (iw_handler) p80211wext_giwrts, /* SIOCGIWRTS */ - (iw_handler) p80211wext_siwfrag, /* SIOCSIWFRAG */ - (iw_handler) p80211wext_giwfrag, /* SIOCGIWFRAG */ - (iw_handler) p80211wext_siwtxpow, /* SIOCSIWTXPOW */ - (iw_handler) p80211wext_giwtxpow, /* SIOCGIWTXPOW */ - (iw_handler) p80211wext_siwretry, /* SIOCSIWRETRY */ - (iw_handler) p80211wext_giwretry, /* SIOCGIWRETRY */ - (iw_handler) p80211wext_siwencode, /* SIOCSIWENCODE */ - (iw_handler) p80211wext_giwencode, /* SIOCGIWENCODE */ - (iw_handler) NULL, /* SIOCSIWPOWER */ - (iw_handler) NULL, /* SIOCGIWPOWER */ + IW_IOCTL(SIOCSIWCOMMIT) = (iw_handler) p80211wext_siwcommit, + IW_IOCTL(SIOCGIWNAME) = (iw_handler) p80211wext_giwname, +/* SIOCSIWNWID,SIOCGIWNWID */ + IW_IOCTL(SIOCSIWFREQ) = (iw_handler) p80211wext_siwfreq, + IW_IOCTL(SIOCGIWFREQ) = (iw_handler) p80211wext_giwfreq, + IW_IOCTL(SIOCSIWMODE) = (iw_handler) p80211wext_siwmode, + IW_IOCTL(SIOCGIWMODE) = (iw_handler) p80211wext_giwmode, +/* SIOCSIWSENS,SIOCGIWSENS,SIOCSIWRANGE */ + IW_IOCTL(SIOCGIWRANGE) = (iw_handler) p80211wext_giwrange, +/* SIOCSIWPRIV,SIOCGIWPRIV,SIOCSIWSTATS,SIOCGIWSTATS */ + IW_IOCTL(SIOCSIWSPY) = (iw_handler) p80211wext_siwspy, + IW_IOCTL(SIOCGIWSPY) = (iw_handler) p80211wext_giwspy, +/* SIOCSIWAP */ + IW_IOCTL(SIOCGIWAP) = (iw_handler) p80211wext_giwap, +/* SIOCGIWAPLIST */ + IW_IOCTL(SIOCSIWSCAN) = (iw_handler) p80211wext_siwscan, + IW_IOCTL(SIOCGIWSCAN) = (iw_handler) p80211wext_giwscan, + IW_IOCTL(SIOCSIWESSID) = (iw_handler) p80211wext_siwessid, + IW_IOCTL(SIOCGIWESSID) = (iw_handler) p80211wext_giwessid, +/* SIOCSIWNICKN */ + IW_IOCTL(SIOCGIWNICKN) = (iw_handler) p80211wext_giwessid, +/* SIOCSIWRATE */ + IW_IOCTL(SIOCGIWRATE) = (iw_handler) p80211wext_giwrate, + IW_IOCTL(SIOCSIWRTS) = (iw_handler) p80211wext_siwrts, + IW_IOCTL(SIOCGIWRTS) = (iw_handler) p80211wext_giwrts, + IW_IOCTL(SIOCSIWFRAG) = (iw_handler) p80211wext_siwfrag, + IW_IOCTL(SIOCGIWFRAG) = (iw_handler) p80211wext_giwfrag, + IW_IOCTL(SIOCSIWTXPOW) = (iw_handler) p80211wext_siwtxpow, + IW_IOCTL(SIOCGIWTXPOW) = (iw_handler) p80211wext_giwtxpow, + IW_IOCTL(SIOCSIWRETRY) = (iw_handler) p80211wext_siwretry, + IW_IOCTL(SIOCGIWRETRY) = (iw_handler) p80211wext_giwretry, + IW_IOCTL(SIOCSIWENCODE) = (iw_handler) p80211wext_siwencode, + IW_IOCTL(SIOCGIWENCODE) = (iw_handler) p80211wext_giwencode, +/* SIOCSIWPOWER,SIOCGIWPOWER */ /* WPA operations */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) NULL, /* -- hole -- */ - (iw_handler) NULL, /* SIOCSIWGENIE set generic IE */ - (iw_handler) NULL, /* SIOCGIWGENIE get generic IE */ - (iw_handler) p80211_wext_set_iwauth, /* SIOCSIWAUTH set authentication mode params */ - (iw_handler) p80211_wext_get_iwauth, /* SIOCGIWAUTH get authentication mode params */ - - (iw_handler) p80211wext_set_encodeext, /* SIOCSIWENCODEEXT set encoding token & mode */ - (iw_handler) p80211wext_get_encodeext, /* SIOCGIWENCODEEXT get encoding token & mode */ - (iw_handler) NULL, /* SIOCSIWPMKSA PMKSA cache operation */ +/* SIOCSIWGENIE,SIOCGIWGENIE generic IE */ + IW_IOCTL(SIOCSIWAUTH) = (iw_handler) p80211_wext_set_iwauth, /*set authentication mode params */ + IW_IOCTL(SIOCGIWAUTH) = (iw_handler) p80211_wext_get_iwauth, /*get authentication mode params */ + IW_IOCTL(SIOCSIWENCODEEXT) = (iw_handler) p80211wext_set_encodeext, /*set encoding token & mode */ + IW_IOCTL(SIOCGIWENCODEEXT) = (iw_handler) p80211wext_get_encodeext, /*get encoding token & mode */ +/* SIOCSIWPMKSA PMKSA cache operation */ }; struct iw_handler_def p80211wext_handler_def = { -- cgit v0.10.2 From 044bc96bef5e78d4bb9b5c7ad12814afafb901cf Mon Sep 17 00:00:00 2001 From: Richard Kennedy Date: Wed, 17 Mar 2010 14:40:56 +0000 Subject: Staging: wlan-ng: fix p80211wext_mhz_to_channel for channel 14 Channel 14 is 2484 Mhz (cf p80211wext_channel_to_mhz) so this patch corrects what seems to be just a typo. Signed-off-by: Richard Kennedy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/p80211wext.c b/drivers/staging/wlan-ng/p80211wext.c index 936be55..e1b5409 100644 --- a/drivers/staging/wlan-ng/p80211wext.c +++ b/drivers/staging/wlan-ng/p80211wext.c @@ -73,7 +73,7 @@ static u8 p80211_mhz_to_channel(u16 mhz) if (mhz >= 5000) return (mhz - 5000) / 5; - if (mhz == 2482) + if (mhz == 2484) return 14; if (mhz >= 2407) -- cgit v0.10.2 From 51b2a028699c5a1f05e130d2e4d0773332f0f45e Mon Sep 17 00:00:00 2001 From: Richard Kennedy Date: Wed, 17 Mar 2010 14:40:57 +0000 Subject: Staging: wlan-ng: refactor p80211wext.c to reduce text size. Refactor the wext interface to reduce lines of code & module text size. - add a helper function p80211wext_getmib - rename p80211wext_dorequest to p80211wext_setmib - refactor wext to call the get/set mib helpers and so reduce repeated code. size reported text reduction :- text data bss dec hex filename 8343 720 0 9063 2367 p80211wext.o.patch 9907 720 0 10631 2987 p80211wext.o.orig Tested on x86_32 laptop, everything works correctly using NetworkManager, and iwconfig & iwlist return sensible results when reading from the card. Signed-off-by: Richard Kennedy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/p80211wext.c b/drivers/staging/wlan-ng/p80211wext.c index e1b5409..387194d 100644 --- a/drivers/staging/wlan-ng/p80211wext.c +++ b/drivers/staging/wlan-ng/p80211wext.c @@ -125,18 +125,38 @@ static int qual_as_percent(int snr) return 100; } -static int p80211wext_dorequest(wlandevice_t *wlandev, u32 did, u32 data) +static int p80211wext_setmib(wlandevice_t *wlandev, u32 did, u32 data) { p80211msg_dot11req_mibset_t msg; - p80211item_uint32_t mibitem; + p80211item_uint32_t *mibitem = + (p80211item_uint32_t *)&msg.mibattribute.data; int result; msg.msgcode = DIDmsg_dot11req_mibset; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = did; - mibitem.data = data; - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); + memset(mibitem, 0, sizeof(*mibitem)); + mibitem->did = did; + mibitem->data = data; + result = p80211req_dorequest(wlandev, (u8 *) &msg); + + return result; +} + +/* + * get a 32 bit mib value + */ +static int p80211wext_getmib(wlandevice_t *wlandev, u32 did, u32 *data) +{ + p80211msg_dot11req_mibset_t msg; + p80211item_uint32_t *mibitem = + (p80211item_uint32_t *)&msg.mibattribute.data; + int result; + + msg.msgcode = DIDmsg_dot11req_mibget; + memset(mibitem, 0, sizeof(*mibitem)); + mibitem->did = did; result = p80211req_dorequest(wlandev, (u8 *) &msg); + if (!result) + *data = mibitem->data; return result; } @@ -262,32 +282,26 @@ static int p80211wext_giwfreq(netdevice_t *dev, struct iw_freq *freq, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; + unsigned int value; - msg.msgcode = DIDmsg_dot11req_mibget; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel; - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); - + result = p80211wext_getmib(wlandev, + DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel, + &value); if (result) { err = -EFAULT; goto exit; } - memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); - - if (mibitem.data > NUM_CHANNELS) { + if (value > NUM_CHANNELS) { err = -EFAULT; goto exit; } /* convert into frequency instead of a channel */ freq->e = 1; - freq->m = p80211_channel_to_mhz(mibitem.data, 0) * 100000; + freq->m = p80211_channel_to_mhz(value, 0) * 100000; exit: return err; @@ -298,28 +312,23 @@ static int p80211wext_siwfreq(netdevice_t *dev, struct iw_freq *freq, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; + unsigned int value; if (!wlan_wext_write) { - err = (-EOPNOTSUPP); + err = -EOPNOTSUPP; goto exit; } - msg.msgcode = DIDmsg_dot11req_mibset; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel; - mibitem.status = P80211ENUM_msgitem_status_data_ok; - if ((freq->e == 0) && (freq->m <= 1000)) - mibitem.data = freq->m; + value = freq->m; else - mibitem.data = p80211_mhz_to_channel(freq->m); + value = p80211_mhz_to_channel(freq->m); - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + result = p80211wext_setmib(wlandev, + DIDmib_dot11phy_dot11PhyDSSSTable_dot11CurrentChannel, + value); if (result) { err = -EFAULT; @@ -359,13 +368,11 @@ static int p80211wext_siwmode(netdevice_t *dev, __u32 *mode, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; if (!wlan_wext_write) { - err = (-EOPNOTSUPP); + err = -EOPNOTSUPP; goto exit; } @@ -396,16 +403,11 @@ static int p80211wext_siwmode(netdevice_t *dev, } /* Set Operation mode to the PORT TYPE RID */ - msg.msgcode = DIDmsg_dot11req_mibset; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = DIDmib_p2_p2Static_p2CnfPortType; - mibitem.data = (*mode == IW_MODE_ADHOC) ? 0 : 1; - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); - + result = p80211wext_setmib(wlandev, + DIDmib_p2_p2Static_p2CnfPortType, + (*mode == IW_MODE_ADHOC) ? 0 : 1); if (result) err = -EFAULT; - exit: return err; } @@ -562,9 +564,9 @@ static int p80211wext_siwencode(netdevice_t *dev, /* Set current key number only if no keys are given */ if (erq->flags & IW_ENCODE_NOKEY) { result = - p80211wext_dorequest(wlandev, - DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID, - i); + p80211wext_setmib(wlandev, + DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID, + i); if (result) { err = -EFAULT; @@ -586,7 +588,6 @@ static int p80211wext_siwencode(netdevice_t *dev, -------------------------------------------------------------*/ if (erq->length > 0) { - /* copy the key from the driver cache as the keys are read-only MIBs */ wlandev->wep_keylens[i] = erq->length; memcpy(wlandev->wep_keys[i], key, erq->length); @@ -636,12 +637,12 @@ static int p80211wext_siwencode(netdevice_t *dev, /* Check the PrivacyInvoked flag */ if (erq->flags & IW_ENCODE_DISABLED) { result = - p80211wext_dorequest(wlandev, + p80211wext_setmib(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, P80211ENUM_truth_false); } else { result = - p80211wext_dorequest(wlandev, + p80211wext_setmib(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, P80211ENUM_truth_true); } @@ -660,12 +661,12 @@ static int p80211wext_siwencode(netdevice_t *dev, */ if (erq->flags & IW_ENCODE_RESTRICTED) { result = - p80211wext_dorequest(wlandev, + p80211wext_setmib(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, P80211ENUM_truth_true); } else if (erq->flags & IW_ENCODE_OPEN) { result = - p80211wext_dorequest(wlandev, + p80211wext_setmib(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, P80211ENUM_truth_false); } @@ -767,24 +768,16 @@ static int p80211wext_giwrate(netdevice_t *dev, struct iw_param *rrq, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; + unsigned int value; - msg.msgcode = DIDmsg_dot11req_mibget; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = DIDmib_p2_p2MAC_p2CurrentTxRate; - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); - + result = p80211wext_getmib(wlandev, DIDmib_p2_p2MAC_p2CurrentTxRate, &value); if (result) { err = -EFAULT; goto exit; } - memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); - rrq->fixed = 0; /* can it change? */ rrq->disabled = 0; rrq->value = 0; @@ -794,7 +787,7 @@ static int p80211wext_giwrate(netdevice_t *dev, #define HFA384x_RATEBIT_5dot5 ((u16)4) #define HFA384x_RATEBIT_11 ((u16)8) - switch (mibitem.data) { + switch (value) { case HFA384x_RATEBIT_1: rrq->value = 1000000; break; @@ -819,25 +812,19 @@ static int p80211wext_giwrts(netdevice_t *dev, struct iw_param *rts, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; + unsigned int value; - msg.msgcode = DIDmsg_dot11req_mibget; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold; - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); - + result = p80211wext_getmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold, + &value); if (result) { err = -EFAULT; goto exit; } - memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); - - rts->value = mibitem.data; + rts->value = value; rts->disabled = (rts->value == 2347); rts->fixed = 1; @@ -850,27 +837,23 @@ static int p80211wext_siwrts(netdevice_t *dev, struct iw_param *rts, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; + unsigned int value; if (!wlan_wext_write) { - err = (-EOPNOTSUPP); + err = -EOPNOTSUPP; goto exit; } - msg.msgcode = DIDmsg_dot11req_mibget; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold; if (rts->disabled) - mibitem.data = 2347; + value = 2347; else - mibitem.data = rts->value; - - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + value = rts->value; + result = p80211wext_setmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11RTSThreshold, + value); if (result) { err = -EFAULT; goto exit; @@ -885,26 +868,19 @@ static int p80211wext_giwfrag(netdevice_t *dev, struct iw_param *frag, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; + unsigned int value; - msg.msgcode = DIDmsg_dot11req_mibget; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = - DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold; - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); - + result = p80211wext_getmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold, + &value); if (result) { err = -EFAULT; goto exit; } - memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); - - frag->value = mibitem.data; + frag->value = value; frag->disabled = (frag->value == 2346); frag->fixed = 1; @@ -917,28 +893,23 @@ static int p80211wext_siwfrag(netdevice_t *dev, struct iw_param *frag, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; + int value; if (!wlan_wext_write) { err = (-EOPNOTSUPP); goto exit; } - msg.msgcode = DIDmsg_dot11req_mibset; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = - DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold; - if (frag->disabled) - mibitem.data = 2346; + value = 2346; else - mibitem.data = frag->value; + value = frag->value; - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + result = p80211wext_setmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11FragmentationThreshold, + value); if (result) { err = -EFAULT; @@ -962,56 +933,40 @@ static int p80211wext_giwretry(netdevice_t *dev, struct iw_param *rrq, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; u16 shortretry, longretry, lifetime; + unsigned int value; - msg.msgcode = DIDmsg_dot11req_mibget; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit; - - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); - + result = p80211wext_getmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit, + &value); if (result) { err = -EFAULT; goto exit; } - memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); - - shortretry = mibitem.data; - - mibitem.did = DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit; - - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + shortretry = value; + result = p80211wext_getmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit, + &value); if (result) { err = -EFAULT; goto exit; } - memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); - - longretry = mibitem.data; - - mibitem.did = - DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime; - - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + longretry = value; + result = p80211wext_getmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime, + &value); if (result) { err = -EFAULT; goto exit; } - memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); - - lifetime = mibitem.data; + lifetime = value; rrq->disabled = 0; @@ -1044,8 +999,7 @@ static int p80211wext_siwretry(netdevice_t *dev, p80211msg_dot11req_mibset_t msg; int result; int err = 0; - - memset(&mibitem, 0, sizeof(mibitem)); + unsigned int value; if (!wlan_wext_write) { err = (-EOPNOTSUPP); @@ -1060,26 +1014,20 @@ static int p80211wext_siwretry(netdevice_t *dev, msg.msgcode = DIDmsg_dot11req_mibset; if ((rrq->flags & IW_RETRY_TYPE) == IW_RETRY_LIFETIME) { - mibitem.did = - DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime; - mibitem.data = rrq->value /= 1024; - - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + value = rrq->value /= 1024; + result = p80211wext_setmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11MaxTransmitMSDULifetime, + value); if (result) { err = -EFAULT; goto exit; } } else { if (rrq->flags & IW_RETRY_LONG) { - mibitem.did = - DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit; - mibitem.data = rrq->value; - - memcpy(&msg.mibattribute.data, &mibitem, - sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + result = p80211wext_setmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11LongRetryLimit, + rrq->value); if (result) { err = -EFAULT; @@ -1088,13 +1036,9 @@ static int p80211wext_siwretry(netdevice_t *dev, } if (rrq->flags & IW_RETRY_SHORT) { - mibitem.did = - DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit; - mibitem.data = rrq->value; - - memcpy(&msg.mibattribute.data, &mibitem, - sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + result = p80211wext_setmib(wlandev, + DIDmib_dot11mac_dot11OperationTable_dot11ShortRetryLimit, + rrq->value); if (result) { err = -EFAULT; @@ -1117,22 +1061,20 @@ static int p80211wext_siwtxpow(netdevice_t *dev, p80211msg_dot11req_mibset_t msg; int result; int err = 0; + unsigned int value; if (!wlan_wext_write) { err = (-EOPNOTSUPP); goto exit; } - msg.msgcode = DIDmsg_dot11req_mibset; - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = - DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel; if (rrq->fixed == 0) - mibitem.data = 30; + value = 30; else - mibitem.data = rrq->value; - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + value = rrq->value; + result = p80211wext_setmib(wlandev, + DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel, + value); if (result) { err = -EFAULT; @@ -1148,33 +1090,25 @@ static int p80211wext_giwtxpow(netdevice_t *dev, struct iw_param *rrq, char *extra) { wlandevice_t *wlandev = dev->ml_priv; - p80211item_uint32_t mibitem; - p80211msg_dot11req_mibset_t msg; int result; int err = 0; + unsigned int value; - msg.msgcode = DIDmsg_dot11req_mibget; - - memset(&mibitem, 0, sizeof(mibitem)); - mibitem.did = - DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel; - - memcpy(&msg.mibattribute.data, &mibitem, sizeof(mibitem)); - result = p80211req_dorequest(wlandev, (u8 *) &msg); + result = p80211wext_getmib(wlandev, + DIDmib_dot11phy_dot11PhyTxPowerTable_dot11CurrentTxPowerLevel, + &value); if (result) { err = -EFAULT; goto exit; } - memcpy(&mibitem, &msg.mibattribute.data, sizeof(mibitem)); - /* XXX handle OFF by setting disabled = 1; */ rrq->flags = 0; /* IW_TXPOW_DBM; */ rrq->disabled = 0; rrq->fixed = 0; - rrq->value = mibitem.data; + rrq->value = value; exit: return err; @@ -1479,7 +1413,7 @@ static int p80211wext_set_encodeext(struct net_device *dev, } pr_debug("setting default key (%d)\n", idx); result = - p80211wext_dorequest(wlandev, + p80211wext_setmib(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11WEPDefaultKeyID, idx); if (result) @@ -1599,12 +1533,12 @@ static int p80211_wext_set_iwauth(struct net_device *dev, pr_debug("drop_unencrypted %d\n", param->value); if (param->value) result = - p80211wext_dorequest(wlandev, + p80211wext_setmib(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, P80211ENUM_truth_true); else result = - p80211wext_dorequest(wlandev, + p80211wext_setmib(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11ExcludeUnencrypted, P80211ENUM_truth_false); break; @@ -1613,12 +1547,12 @@ static int p80211_wext_set_iwauth(struct net_device *dev, pr_debug("privacy invoked %d\n", param->value); if (param->value) result = - p80211wext_dorequest(wlandev, + p80211wext_setmib(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, P80211ENUM_truth_true); else result = - p80211wext_dorequest(wlandev, + p80211wext_setmib(wlandev, DIDmib_dot11smt_dot11PrivacyTable_dot11PrivacyInvoked, P80211ENUM_truth_false); -- cgit v0.10.2 From b93634c4e38e3fbe476b53b1e68ec391ad0ecc86 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 22:46:24 +0200 Subject: Staging: wlags49_h2: fix spaces, macros and comments coding style issue in debug.h This is a patch to the debug.h file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like spaces required around that '&' (ctx:VxV) and ERROR: Invalid UTF-8, patch and commit message should be encoded in UTF-8 and do not use C99 // comments and Macros with complex values should be enclosed in parenthesis Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/debug.h b/drivers/staging/wlags49_h2/debug.h index 0b52e17..2c3dd14 100644 --- a/drivers/staging/wlags49_h2/debug.h +++ b/drivers/staging/wlags49_h2/debug.h @@ -22,7 +22,7 @@ * software indicates your acceptance of these terms and conditions. If you do * not agree with these terms and conditions, do not use the software. * - * Copyright © 2003 Agere Systems Inc. + * Copyright (c) 2003 Agere Systems Inc. * All rights reserved. * * Redistribution and use in source or binary forms, with or without @@ -70,7 +70,7 @@ #else #undef DBG #define DBG 1 -#endif //DBG +#endif /* DBG */ @@ -84,7 +84,7 @@ #ifndef DBG_LVL #define DBG_LVL 5 /* yields nothing via init_module, original value of 5 yields DBG_TRACE_ON and DBG_VERBOSE_ON */ -#endif // DBG_LVL +#endif /* DBG_LVL*/ #define DBG_ERROR_ON 0x00000001L @@ -100,80 +100,94 @@ #define DBG_DEFAULTS (DBG_ERROR_ON | DBG_WARNING_ON | DBG_BREAK_ON) -#define DBG_FLAGS(A) (A)->DebugFlag -#define DBG_NAME(A) (A)->dbgName -#define DBG_LEVEL(A) (A)->dbgLevel +#define DBG_FLAGS(A) ((A)->DebugFlag) +#define DBG_NAME(A) ((A)->dbgName) +#define DBG_LEVEL(A) ((A)->dbgLevel) #ifndef PRINTK # define PRINTK(S...) printk(S) -#endif // PRINTK +#endif /* PRINTK */ #ifndef DBG_PRINT # define DBG_PRINT(S...) PRINTK(KERN_DEBUG S) -#endif // DBG_PRINT +#endif /* DBG_PRINT */ #ifndef DBG_PRINTC # define DBG_PRINTC(S...) PRINTK(S) -#endif // DBG_PRINTC +#endif /* DBG_PRINTC */ #ifndef DBG_TRAP # define DBG_TRAP {} -#endif // DBG_TRAP +#endif /* DBG_TRAP */ #define _ENTER_STR ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" #define _LEAVE_STR "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" -#define _DBG_ENTER(A) DBG_PRINT("%s:%.*s:%s\n",DBG_NAME(A),++DBG_LEVEL(A),_ENTER_STR,__FUNC__) -#define _DBG_LEAVE(A) DBG_PRINT("%s:%.*s:%s\n",DBG_NAME(A),DBG_LEVEL(A)--,_LEAVE_STR,__FUNC__) +#define _DBG_ENTER(A) DBG_PRINT("%s:%.*s:%s\n", DBG_NAME(A), ++DBG_LEVEL(A), _ENTER_STR, __FUNC__) +#define _DBG_LEAVE(A) DBG_PRINT("%s:%.*s:%s\n", DBG_NAME(A), DBG_LEVEL(A)--, _LEAVE_STR, __FUNC__) #define DBG_FUNC(F) static const char *__FUNC__ = F; -#define DBG_ENTER(A) {if (DBG_FLAGS(A) & DBG_TRACE_ON) _DBG_ENTER(A);} +#define DBG_ENTER(A) {if (DBG_FLAGS(A) & DBG_TRACE_ON) \ + _DBG_ENTER(A); } -#define DBG_LEAVE(A) {if (DBG_FLAGS(A) & DBG_TRACE_ON) _DBG_LEAVE(A);} +#define DBG_LEAVE(A) {if (DBG_FLAGS(A) & DBG_TRACE_ON) \ + _DBG_LEAVE(A); } -#define DBG_PARAM(A,N,F,S...) {if (DBG_FLAGS(A) & DBG_PARAM_ON) \ - DBG_PRINT(" %s -- "F"\n",N,S);} +#define DBG_PARAM(A, N, F, S...) {if (DBG_FLAGS(A) & DBG_PARAM_ON) \ + DBG_PRINT(" %s -- "F"\n", N, S); } -#define DBG_ERROR(A,S...) {if (DBG_FLAGS(A) & DBG_ERROR_ON) \ - {DBG_PRINT("%s:ERROR:%s ",DBG_NAME(A),__FUNC__);DBG_PRINTC(S);DBG_TRAP;}} +#define DBG_ERROR(A, S...) {if (DBG_FLAGS(A) & DBG_ERROR_ON) {\ + DBG_PRINT("%s:ERROR:%s ", DBG_NAME(A), __FUNC__);\ + DBG_PRINTC(S); \ + DBG_TRAP; \ + } \ + } -#define DBG_WARNING(A,S...) {if (DBG_FLAGS(A) & DBG_WARNING_ON) \ - {DBG_PRINT("%s:WARNING:%s ",DBG_NAME(A),__FUNC__);DBG_PRINTC(S);}} +#define DBG_WARNING(A, S...) {if (DBG_FLAGS(A) & DBG_WARNING_ON) {\ + DBG_PRINT("%s:WARNING:%s ", DBG_NAME(A), __FUNC__);\ + DBG_PRINTC(S); } } -#define DBG_NOTICE(A,S...) {if (DBG_FLAGS(A) & DBG_NOTICE_ON) \ - {DBG_PRINT("%s:NOTICE:%s ",DBG_NAME(A),__FUNC__);DBG_PRINTC(S);}} +#define DBG_NOTICE(A, S...) {if (DBG_FLAGS(A) & DBG_NOTICE_ON) {\ + DBG_PRINT("%s:NOTICE:%s ", DBG_NAME(A), __FUNC__);\ + DBG_PRINTC(S); \ + } \ + } -#define DBG_TRACE(A,S...) do {if (DBG_FLAGS(A) & DBG_TRACE_ON) \ - {DBG_PRINT("%s:%s ",DBG_NAME(A),__FUNC__);DBG_PRINTC(S);}} while (0) +#define DBG_TRACE(A, S...) do {if (DBG_FLAGS(A) & DBG_TRACE_ON) {\ + DBG_PRINT("%s:%s ", DBG_NAME(A), __FUNC__);\ + DBG_PRINTC(S); } } while (0) -#define DBG_RX(A,S...) {if (DBG_FLAGS(A) & DBG_RX_ON) \ - {DBG_PRINT(S);}} +#define DBG_RX(A, S...) {if (DBG_FLAGS(A) & DBG_RX_ON) {\ + DBG_PRINT(S); } } -#define DBG_TX(A,S...) {if (DBG_FLAGS(A) & DBG_TX_ON) \ - {DBG_PRINT(S);}} +#define DBG_TX(A, S...) {if (DBG_FLAGS(A) & DBG_TX_ON) {\ + DBG_PRINT(S); } } -#define DBG_DS(A,S...) {if (DBG_FLAGS(A) & DBG_DS_ON) \ - {DBG_PRINT(S);}} +#define DBG_DS(A, S...) {if (DBG_FLAGS(A) & DBG_DS_ON) {\ + DBG_PRINT(S); } } -#define DBG_ASSERT(C) {if (!(C)) \ - {DBG_PRINT("ASSERT(%s) -- %s#%d (%s)\n", \ - #C,__FILE__,__LINE__,__FUNC__); \ - DBG_TRAP;}} +#define DBG_ASSERT(C) { \ + if (!(C)) {\ + DBG_PRINT("ASSERT(%s) -- %s#%d (%s)\n", \ + #C, __FILE__, __LINE__, __FUNC__); \ + DBG_TRAP; \ + } \ + } typedef struct { char *dbgName; @@ -183,7 +197,7 @@ typedef struct { /****************************************************************************/ -#else // DBG +#else /* DBG */ /****************************************************************************/ #define DBG_DEFN @@ -192,21 +206,21 @@ typedef struct { #define DBG_PRINT(S...) #define DBG_ENTER(A) #define DBG_LEAVE(A) -#define DBG_PARAM(A,N,F,S...) -#define DBG_ERROR(A,S...) -#define DBG_WARNING(A,S...) -#define DBG_NOTICE(A,S...) -#define DBG_TRACE(A,S...) -#define DBG_RX(A,S...) -#define DBG_TX(A,S...) -#define DBG_DS(A,S...) +#define DBG_PARAM(A, N, F, S...) +#define DBG_ERROR(A, S...) +#define DBG_WARNING(A, S...) +#define DBG_NOTICE(A, S...) +#define DBG_TRACE(A, S...) +#define DBG_RX(A, S...) +#define DBG_TX(A, S...) +#define DBG_DS(A, S...) #define DBG_ASSERT(C) -#endif // DBG +#endif /* DBG */ /****************************************************************************/ -#endif // _DEBUG_H +#endif /* _DEBUG_H */ -- cgit v0.10.2 From 0a13dfdffcef1e72cd4edf9bb9b03d8a3f5fea70 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Mon, 15 Mar 2010 23:29:02 +0200 Subject: Staging: wlags49_h2: fix comments coding style issue in ap_h2.c This is a patch to the ap_h2.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like do not use C99 // comments Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/ap_h2.c b/drivers/staging/wlags49_h2/ap_h2.c index f5123d2..e311498 100644 --- a/drivers/staging/wlags49_h2/ap_h2.c +++ b/drivers/staging/wlags49_h2/ap_h2.c @@ -25,10 +25,10 @@ */ -#include "hcfcfg.h" // to get hcf_16 etc defined as well as - // possible settings which inluence mdd.h or dhf.h -#include "mdd.h" //to get COMP_ID_STA etc defined -#include "dhf.h" //used to be "fhfmem.h", to get memblock,plugrecord, +#include "hcfcfg.h" /* to get hcf_16 etc defined as well as */ + /* possible settings which inluence mdd.h or dhf.h */ +#include "mdd.h" /* to get COMP_ID_STA etc defined */ +#include "dhf.h" /* used to be "fhfmem.h", to get memblock,plugrecord, */ static const hcf_8 fw_image_1_data[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -3241,56 +3241,56 @@ static const CFG_IDENTITY_STRCT fw_image_infoidentity[] = { sizeof( CFG_IDENTITY_STRCT ) / sizeof(hcf_16) - 1, CFG_FW_IDENTITY, COMP_ID_FW_AP, - 2, //Variant - 2, //Major - 36 //Minor + 2, /* Variant / + 2, /* Major */ + 36 /* Minor */ }, - { 0000, 0000, 0000, 0000, 0000, 0000 } //endsentinel + { 0000, 0000, 0000, 0000, 0000, 0000 } /* endsentinel */ }; static const CFG_PROG_STRCT fw_image_code[] = { { 8, CFG_PROG, - CFG_PROG_VOLATILE, // mode - 0x0146, // sizeof(fw_image_1_data), - 0x00000060, // Target address in NIC Memory - 0x0000, // CRC: yes/no TYPE: primary/station/tertiary + CFG_PROG_VOLATILE, /* mode */ + 0x0146, /* sizeof(fw_image_1_data), */ + 0x00000060, /* Target address in NIC Memory */ + 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ (hcf_8 FAR *) fw_image_1_data }, { 8, CFG_PROG, - CFG_PROG_VOLATILE, // mode - 0x1918, // sizeof(fw_image_2_data), - 0x00000C16, // Target address in NIC Memory - 0x0000, // CRC: yes/no TYPE: primary/station/tertiary + CFG_PROG_VOLATILE, /* mode */ + 0x1918, /* sizeof(fw_image_2_data), */ + 0x00000C16, /* Target address in NIC Memory */ + 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ (hcf_8 FAR *) fw_image_2_data }, { 8, CFG_PROG, - CFG_PROG_VOLATILE, // mode - 0x01bc, // sizeof(fw_image_3_data), - 0x001E252E, // Target address in NIC Memory - 0x0000, // CRC: yes/no TYPE: primary/station/tertiary + CFG_PROG_VOLATILE, /* mode */ + 0x01bc, /* sizeof(fw_image_3_data), */ + 0x001E252E, /* Target address in NIC Memory */ + 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ (hcf_8 FAR *) fw_image_3_data }, { 8, CFG_PROG, - CFG_PROG_VOLATILE, // mode - 0xab28, // sizeof(fw_image_4_data), - 0x001F4000, // Target address in NIC Memory - 0x0000, // CRC: yes/no TYPE: primary/station/tertiary + CFG_PROG_VOLATILE, /* mode */ + 0xab28, /* sizeof(fw_image_4_data), */ + 0x001F4000, /* Target address in NIC Memory */ + 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ (hcf_8 FAR *) fw_image_4_data }, { 5, CFG_PROG, - CFG_PROG_STOP, // mode + CFG_PROG_STOP, /* mode*/ 0000, - 0x000F1297, // Start execution address + 0x000F1297, /* Start execution address */ }, { 0000, 0000, 0000, 0000, 00000000, 0000, 00000000} }; @@ -3301,7 +3301,7 @@ static const CFG_RANGE20_STRCT fw_image_infocompat[] = { COMP_ROLE_SUPL, COMP_ID_APF, { - { 2, 2, 4 } //variant, bottom, top + { 2, 2, 4 } /* variant, bottom, top */ } }, { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), @@ -3309,9 +3309,9 @@ static const CFG_RANGE20_STRCT fw_image_infocompat[] = { COMP_ROLE_ACT, COMP_ID_MFI, { - { 4, 6, 7 }, //variant, bottom, top - { 5, 6, 7 }, //variant, bottom, top - { 6, 6, 7 } //variant, bottom, top + { 4, 6, 7 }, /* variant, bottom, top */ + { 5, 6, 7 }, /* variant, bottom, top */ + { 6, 6, 7 } /* variant, bottom, top */ } }, { 3 + ((20 * sizeof(CFG_RANGE_SPEC_STRCT)) / sizeof(hcf_16)), @@ -3319,18 +3319,18 @@ static const CFG_RANGE20_STRCT fw_image_infocompat[] = { COMP_ROLE_ACT, COMP_ID_CFI, { - { 2, 1, 2 } //variant, bottom, top + { 2, 1, 2 } /* variant, bottom, top */ } }, - { 0000, 0000, 0000, 0000, { { 0000, 0000, 0000 } } } //endsentinel + { 0000, 0000, 0000, 0000, { { 0000, 0000, 0000 } } } /* endsentinel */ }; memimage fw_image = { - "FUPU7D37dhfwci\001C", //signature, , C/Bin type + "FUPU7D37dhfwci\001C", /* signature, , C/Bin type */ (CFG_PROG_STRCT *) fw_image_code, 0x000F1297, - 00000000, //(dummy) pdaplug - 00000000, //(dummy) priplug + 00000000, /* (dummy) pdaplug */ + 00000000, /* (dummy) priplug */ (CFG_RANGE20_STRCT *) fw_image_infocompat, (CFG_IDENTITY_STRCT *) fw_image_infoidentity, }; -- cgit v0.10.2 From 01ce33545f2ef939ef73a93974b89c92a27e5522 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Tue, 16 Mar 2010 00:05:34 +0200 Subject: Staging: wlags49_h2: fix TAB and space coding style issue in ap_h2.c This is a patch to the p80211conv.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/ap_h2.c b/drivers/staging/wlags49_h2/ap_h2.c index e311498..eb8244c 100644 --- a/drivers/staging/wlags49_h2/ap_h2.c +++ b/drivers/staging/wlags49_h2/ap_h2.c @@ -26,7 +26,7 @@ #include "hcfcfg.h" /* to get hcf_16 etc defined as well as */ - /* possible settings which inluence mdd.h or dhf.h */ + /* possible settings which inluence mdd.h or dhf.h */ #include "mdd.h" /* to get COMP_ID_STA etc defined */ #include "dhf.h" /* used to be "fhfmem.h", to get memblock,plugrecord, */ @@ -3238,7 +3238,7 @@ static const hcf_8 fw_image_4_data[] = { static const CFG_IDENTITY_STRCT fw_image_infoidentity[] = { { - sizeof( CFG_IDENTITY_STRCT ) / sizeof(hcf_16) - 1, + sizeof(CFG_IDENTITY_STRCT) / sizeof(hcf_16) - 1, CFG_FW_IDENTITY, COMP_ID_FW_AP, 2, /* Variant / @@ -3256,7 +3256,7 @@ static const CFG_PROG_STRCT fw_image_code[] = { 0x0146, /* sizeof(fw_image_1_data), */ 0x00000060, /* Target address in NIC Memory */ 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 FAR *) fw_image_1_data + (hcf_8 FAR *) fw_image_1_data }, { 8, @@ -3265,7 +3265,7 @@ static const CFG_PROG_STRCT fw_image_code[] = { 0x1918, /* sizeof(fw_image_2_data), */ 0x00000C16, /* Target address in NIC Memory */ 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 FAR *) fw_image_2_data + (hcf_8 FAR *) fw_image_2_data }, { 8, @@ -3274,7 +3274,7 @@ static const CFG_PROG_STRCT fw_image_code[] = { 0x01bc, /* sizeof(fw_image_3_data), */ 0x001E252E, /* Target address in NIC Memory */ 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 FAR *) fw_image_3_data + (hcf_8 FAR *) fw_image_3_data }, { 8, @@ -3283,14 +3283,14 @@ static const CFG_PROG_STRCT fw_image_code[] = { 0xab28, /* sizeof(fw_image_4_data), */ 0x001F4000, /* Target address in NIC Memory */ 0x0000, /* CRC: yes/no TYPE: primary/station/tertiary */ - (hcf_8 FAR *) fw_image_4_data + (hcf_8 FAR *) fw_image_4_data }, { 5, CFG_PROG, CFG_PROG_STOP, /* mode*/ 0000, - 0x000F1297, /* Start execution address */ + 0x000F1297, /* Start execution address */ }, { 0000, 0000, 0000, 0000, 00000000, 0000, 00000000} }; -- cgit v0.10.2 From fd547f1fead33e55190a1c670575fea467ee24ee Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Tue, 16 Mar 2010 21:48:11 +0200 Subject: Staging: wlags49_h2: fix comments coding style issue in dhf.c This is a patch to the dhf.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools, like do not use C99 // comments Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/dhf.c b/drivers/staging/wlags49_h2/dhf.c index b6f5834..8997980 100644 --- a/drivers/staging/wlags49_h2/dhf.c +++ b/drivers/staging/wlags49_h2/dhf.c @@ -1,5 +1,5 @@ -// vim:tw=110:ts=4: +/* vim:tw=110:ts=4: */ /************************************************************************************************************** * * FILE : DHF.C @@ -97,7 +97,7 @@ #include "dhf.h" #include "mmd.h" -//to distinguish MMD from HCF asserts by means of line number +/* to distinguish MMD from HCF asserts by means of line number */ #undef FILE_NAME_OFFSET #define FILE_NAME_OFFSET MMD_FILE_NAME_OFFSET /*----------------------------------------------------------------------------- @@ -106,18 +106,18 @@ * *---------------------------------------------------------------------------*/ -// 12345678901234 +/* 12345678901234 */ char signature[14] = "FUPU7D37dhfwci"; -//The binary download function "relocates" the image using constructions like: -// fw->identity = (CFG_IDENTITY_STRCT FAR *)((char FAR *)fw->identity + (hcf_32)fw ); -//under some of the memory models under MSVC 1.52 these constructions degrade to 16-bits pointer arithmetic. -//fw->identity is limited, such that adding it to fw, does not need to carry over from offset to segment. -//However the segment is not set at all. -//As a workaround the PSEUDO_CHARP macro is introduced which is a char pointer except for MSVC 1.52, in -//which case we know that a 32-bit quantity is adequate as a pointer. -//Note that other platforms may experience comparable problems when using the binary download feature. -#if defined(_MSC_VER) && _MSC_VER == 800 // Visual C++ 1.5 +/* The binary download function "relocates" the image using constructions like: + fw->identity = (CFG_IDENTITY_STRCT FAR *)((char FAR *)fw->identity + (hcf_32)fw ); + under some of the memory models under MSVC 1.52 these constructions degrade to 16-bits pointer arithmetic. + fw->identity is limited, such that adding it to fw, does not need to carry over from offset to segment. + However the segment is not set at all. + As a workaround the PSEUDO_CHARP macro is introduced which is a char pointer except for MSVC 1.52, in + which case we know that a 32-bit quantity is adequate as a pointer. + Note that other platforms may experience comparable problems when using the binary download feature. */ +#if defined(_MSC_VER) && _MSC_VER == 800 /* Visual C++ 1.5 */ #define PSEUDO_CHARP hcf_32 #else #define PSEUDO_CHARP hcf_8* @@ -132,12 +132,12 @@ char signature[14] = "FUPU7D37dhfwci"; * *---------------------------------------------------------------------------*/ -// for USB/H1 we needed a smaller value than the CFG_DL_BUF_STRCT reported 8192 -// for the time being it seems simpler to always use 2000 for USB/H1 as well as all other cases rather than -// using the "fixed anyway" CFG_DL_BUF_STRCT. +/* for USB/H1 we needed a smaller value than the CFG_DL_BUF_STRCT reported 8192 + for the time being it seems simpler to always use 2000 for USB/H1 as well as all other cases rather than + using the "fixed anyway" CFG_DL_BUF_STRCT. */ #define DL_SIZE 2000 -//CFG_IDENTITY_STRCT pri_identity = { LOF(CFG_IDENTITY_STRCT), CFG_PRI_IDENTITY }; +/* CFG_IDENTITY_STRCT pri_identity = { LOF(CFG_IDENTITY_STRCT), CFG_PRI_IDENTITY }; */ CFG_SUP_RANGE_STRCT mfi_sup = { LOF(CFG_SUP_RANGE_STRCT), CFG_NIC_MFI_SUP_RANGE }; CFG_SUP_RANGE_STRCT cfi_sup = { LOF(CFG_SUP_RANGE_STRCT), CFG_NIC_CFI_SUP_RANGE }; /* Note: could be used rather than the above explained and defined DL_SIZE if need arises @@ -192,41 +192,41 @@ int rc = HCF_SUCCESS; CFG_RANGE_SPEC_STRCT* i; switch( fw->identity->typ ) { - case CFG_FW_IDENTITY: //Station F/W - case COMP_ID_FW_AP_FAKE: //;?is this useful (used to be: CFG_AP_IDENTITY) + case CFG_FW_IDENTITY: /* Station F/W */ + case COMP_ID_FW_AP_FAKE: /* ;?is this useful (used to be: CFG_AP_IDENTITY) */ break; default: - MMDASSERT( DO_ASSERT, fw->identity->typ ) //unknown/unsupported firmware_type: + MMDASSERT( DO_ASSERT, fw->identity->typ ) /* unknown/unsupported firmware_type: */ rc = DHF_ERR_INCOMP_FW; - return rc; /* ;? how useful is this anyway, + return rc; /* ;? how useful is this anyway, * till that is sorted out might as well violate my own single exit principle */ } p = fw->compat; i = NULL; - while( p->len && i == NULL ) { // check the MFI ranges + while( p->len && i == NULL ) { /* check the MFI ranges */ if ( p->typ == CFG_MFI_ACT_RANGES_STA ) { i = mmd_check_comp( (void*)p, &mfi_sup ); } p++; } - MMDASSERT( i, 0 ) //MFI: NIC Supplier not compatible with F/W image Actor + MMDASSERT( i, 0 ) /* MFI: NIC Supplier not compatible with F/W image Actor */ if ( i ) { p = fw->compat; i = NULL; - while ( p->len && i == NULL ) { // check the CFI ranges + while ( p->len && i == NULL ) { /* check the CFI ranges */ if ( p->typ == CFG_CFI_ACT_RANGES_STA ) { i = mmd_check_comp( (void*)p, &cfi_sup ); } p++; } - MMDASSERT( i, 0 ) //CFI: NIC Supplier not compatible with F/W image Actor + MMDASSERT( i, 0 ) /* CFI: NIC Supplier not compatible with F/W image Actor */ } if ( i == NULL ) { rc = DHF_ERR_INCOMP_FW; } return rc; -} // check_comp_fw +} /* check_comp_fw */ @@ -277,13 +277,13 @@ int rc = HCF_SUCCESS; CFG_PROG_STRCT *p; int i; - //validate the image - for ( i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++ ) /*NOP*/; + /* validate the image */ + for ( i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++ ) /* NOP */; if ( i != sizeof(signature) || fw->signature[i] != 0x01 || - //test for Little/Big Endian Binary flag - fw->signature[i+1] != ( /*HCF_BIG_ENDIAN ? 'B' : */ 'L' ) ) rc = DHF_ERR_INCOMP_FW; - else { //Little Endian Binary format + /* test for Little/Big Endian Binary flag */ + fw->signature[i+1] != ( /* HCF_BIG_ENDIAN ? 'B' : */ 'L' ) ) rc = DHF_ERR_INCOMP_FW; + else { /* Little Endian Binary format */ fw->codep = (CFG_PROG_STRCT FAR *)((PSEUDO_CHARP)fw->codep + (hcf_32)fw ); fw->identity = (CFG_IDENTITY_STRCT FAR *)((PSEUDO_CHARP)fw->identity + (hcf_32)fw ); fw->compat = (CFG_RANGE20_STRCT FAR *)((PSEUDO_CHARP)fw->compat + (hcf_32)fw ); @@ -295,7 +295,7 @@ int i; } } return rc; -} // dhf_download_binary +} /* dhf_download_binary */ /************************************************************************************************************* @@ -360,17 +360,17 @@ LTVP ltvp; int i; MMDASSERT( fw != NULL, 0 ) - //validate the image - for ( i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++ ) /*NOP*/; + /* validate the image */ + for ( i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++ ) /* NOP */; if ( i != sizeof(signature) || fw->signature[i] != 0x01 || - //check for binary image + /* check for binary image */ ( fw->signature[i+1] != 'C' && fw->signature[i+1] != ( /*HCF_BIG_ENDIAN ? 'B' : */ 'L' ) ) ) rc = DHF_ERR_INCOMP_FW; -// Retrieve all information needed for download from the NIC +/* Retrieve all information needed for download from the NIC */ while ( ( rc == HCF_SUCCESS ) && ( ( ltvp = pp->ltvp) != NULL ) ) { - ltvp->len = pp++->len; // Set len to original len. This len is changed to real len by GET_INFO() + ltvp->len = pp++->len; /* Set len to original len. This len is changed to real len by GET_INFO() */ rc = GET_INFO( ltvp ); MMDASSERT( rc == HCF_SUCCESS, rc ) MMDASSERT( rc == HCF_SUCCESS, ltvp->typ ) @@ -385,6 +385,6 @@ int i; } MMDASSERT( rc == HCF_SUCCESS, rc ) return rc; -} // dhf_download_fw +} /* dhf_download_fw */ -- cgit v0.10.2 From ccc75a583d993c4d51e2b62ae340cebb23ae886f Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Tue, 16 Mar 2010 21:59:22 +0200 Subject: Staging: wlags49_h2: fix copyright style issue in dhf.c This is a patch to the dhf.c file that fixed up a copyright style Errors found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/dhf.c b/drivers/staging/wlags49_h2/dhf.c index 8997980..3690364 100644 --- a/drivers/staging/wlags49_h2/dhf.c +++ b/drivers/staging/wlags49_h2/dhf.c @@ -54,8 +54,8 @@ * software indicates your acceptance of these terms and conditions. If you do * not agree with these terms and conditions, do not use the software. * -* COPYRIGHT © 1999 - 2000 by Lucent Technologies. All Rights Reserved -* COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved +* COPYRIGHT (C) 1999 - 2000 by Lucent Technologies. All Rights Reserved +* COPYRIGHT (C) 2001 - 2004 by Agere Systems Inc. All Rights Reserved * All rights reserved. * * Redistribution and use in source or binary forms, with or without -- cgit v0.10.2 From 068b561c3c96e7a52a4974da457fb8591064d40b Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Wed, 17 Mar 2010 10:14:34 +0200 Subject: Staging: wlags49_h2: fix TAB and space coding style issue dhf.c This is a patch to the dhf.c file that fixed up a TAB and spaces Errors found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/dhf.c b/drivers/staging/wlags49_h2/dhf.c index 3690364..3af4398 100644 --- a/drivers/staging/wlags49_h2/dhf.c +++ b/drivers/staging/wlags49_h2/dhf.c @@ -120,7 +120,7 @@ char signature[14] = "FUPU7D37dhfwci"; #if defined(_MSC_VER) && _MSC_VER == 800 /* Visual C++ 1.5 */ #define PSEUDO_CHARP hcf_32 #else -#define PSEUDO_CHARP hcf_8* +#define PSEUDO_CHARP (hcf_8 *) #endif /*----------------------------------------------------------------------------- @@ -164,7 +164,7 @@ LTV_INFO_STRUCT ltv_info[] = { /***********************************************************************************************************/ /*************************************** PROTOTYPES ******************************************************/ /***********************************************************************************************************/ -static int check_comp_fw( memimage *fw ); +static int check_comp_fw(memimage *fw); /************************************************************************************************************ @@ -185,44 +185,44 @@ static int check_comp_fw( memimage *fw ); *.ENDDOC END DOCUMENTATION *************************************************************************************************************/ int -check_comp_fw( memimage *fw ) +check_comp_fw(memimage *fw) { CFG_RANGE20_STRCT *p; int rc = HCF_SUCCESS; -CFG_RANGE_SPEC_STRCT* i; +CFG_RANGE_SPEC_STRCT *i; - switch( fw->identity->typ ) { - case CFG_FW_IDENTITY: /* Station F/W */ - case COMP_ID_FW_AP_FAKE: /* ;?is this useful (used to be: CFG_AP_IDENTITY) */ + switch (fw->identity->typ) { + case CFG_FW_IDENTITY: /* Station F/W */ + case COMP_ID_FW_AP_FAKE: /* ;?is this useful (used to be: CFG_AP_IDENTITY) */ break; - default: - MMDASSERT( DO_ASSERT, fw->identity->typ ) /* unknown/unsupported firmware_type: */ + default: + MMDASSERT(DO_ASSERT, fw->identity->typ) /* unknown/unsupported firmware_type: */ rc = DHF_ERR_INCOMP_FW; - return rc; /* ;? how useful is this anyway, + return rc; /* ;? how useful is this anyway, * till that is sorted out might as well violate my own single exit principle */ } p = fw->compat; i = NULL; - while( p->len && i == NULL ) { /* check the MFI ranges */ - if ( p->typ == CFG_MFI_ACT_RANGES_STA ) { - i = mmd_check_comp( (void*)p, &mfi_sup ); + while (p->len && i == NULL) { /* check the MFI ranges */ + if (p->typ == CFG_MFI_ACT_RANGES_STA) { + i = mmd_check_comp((void *)p, &mfi_sup); } p++; } - MMDASSERT( i, 0 ) /* MFI: NIC Supplier not compatible with F/W image Actor */ - if ( i ) { + MMDASSERT(i, 0) /* MFI: NIC Supplier not compatible with F/W image Actor */ + if (i) { p = fw->compat; i = NULL; - while ( p->len && i == NULL ) { /* check the CFI ranges */ - if ( p->typ == CFG_CFI_ACT_RANGES_STA ) { - i = mmd_check_comp( (void*)p, &cfi_sup ); + while (p->len && i == NULL) { /* check the CFI ranges */ + if (p->typ == CFG_CFI_ACT_RANGES_STA) { + i = mmd_check_comp((void *)p, &cfi_sup); } p++; } - MMDASSERT( i, 0 ) /* CFI: NIC Supplier not compatible with F/W image Actor */ + MMDASSERT(i, 0) /* CFI: NIC Supplier not compatible with F/W image Actor */ } - if ( i == NULL ) { + if (i == NULL) { rc = DHF_ERR_INCOMP_FW; } return rc; @@ -271,25 +271,25 @@ CFG_RANGE_SPEC_STRCT* i; *.ENDDOC END DOCUMENTATION *************************************************************************************************************/ int -dhf_download_binary( memimage *fw ) +dhf_download_binary(memimage *fw) { int rc = HCF_SUCCESS; CFG_PROG_STRCT *p; int i; /* validate the image */ - for ( i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++ ) /* NOP */; - if ( i != sizeof(signature) || + for (i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++); /* NOP */ + if (i != sizeof(signature) || fw->signature[i] != 0x01 || /* test for Little/Big Endian Binary flag */ - fw->signature[i+1] != ( /* HCF_BIG_ENDIAN ? 'B' : */ 'L' ) ) rc = DHF_ERR_INCOMP_FW; + fw->signature[i+1] != (/* HCF_BIG_ENDIAN ? 'B' : */ 'L')) rc = DHF_ERR_INCOMP_FW; else { /* Little Endian Binary format */ - fw->codep = (CFG_PROG_STRCT FAR *)((PSEUDO_CHARP)fw->codep + (hcf_32)fw ); - fw->identity = (CFG_IDENTITY_STRCT FAR *)((PSEUDO_CHARP)fw->identity + (hcf_32)fw ); - fw->compat = (CFG_RANGE20_STRCT FAR *)((PSEUDO_CHARP)fw->compat + (hcf_32)fw ); - for ( i = 0; fw->p[i]; i++ ) fw->p[i] = ((PSEUDO_CHARP)fw->p[i] + (hcf_32)fw ); + fw->codep = (CFG_PROG_STRCT FAR*)((PSEUDO_CHARP)fw->codep + (hcf_32)fw); + fw->identity = (CFG_IDENTITY_STRCT FAR*)((PSEUDO_CHARP)fw->identity + (hcf_32)fw); + fw->compat = (CFG_RANGE20_STRCT FAR*)((PSEUDO_CHARP)fw->compat + (hcf_32)fw); + for (i = 0; fw->p[i]; i++) fw->p[i] = ((PSEUDO_CHARP)fw->p[i] + (hcf_32)fw); p = fw->codep; - while ( p->len ) { + while (p->len) { p->host_addr = (PSEUDO_CHARP)p->host_addr + (hcf_32)fw; p++; } @@ -351,7 +351,7 @@ int i; *.ENDDOC END DOCUMENTATION *************************************************************************************************************/ int -dhf_download_fw( void *ifbp, memimage *fw ) +dhf_download_fw(void *ifbp, memimage *fw) { int rc = HCF_SUCCESS; LTV_INFO_STRUCT_PTR pp = ltv_info; @@ -359,31 +359,31 @@ CFG_PROG_STRCT *p = fw->codep; LTVP ltvp; int i; - MMDASSERT( fw != NULL, 0 ) + MMDASSERT(fw != NULL, 0) /* validate the image */ - for ( i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++ ) /* NOP */; - if ( i != sizeof(signature) || + for (i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++) /* NOP */; + if (i != sizeof(signature) || fw->signature[i] != 0x01 || /* check for binary image */ - ( fw->signature[i+1] != 'C' && fw->signature[i+1] != ( /*HCF_BIG_ENDIAN ? 'B' : */ 'L' ) ) ) + (fw->signature[i+1] != 'C' && fw->signature[i+1] != (/*HCF_BIG_ENDIAN ? 'B' : */ 'L'))) rc = DHF_ERR_INCOMP_FW; /* Retrieve all information needed for download from the NIC */ - while ( ( rc == HCF_SUCCESS ) && ( ( ltvp = pp->ltvp) != NULL ) ) { + while ((rc == HCF_SUCCESS) && ((ltvp = pp->ltvp) != NULL)) { ltvp->len = pp++->len; /* Set len to original len. This len is changed to real len by GET_INFO() */ - rc = GET_INFO( ltvp ); - MMDASSERT( rc == HCF_SUCCESS, rc ) - MMDASSERT( rc == HCF_SUCCESS, ltvp->typ ) - MMDASSERT( rc == HCF_SUCCESS, ltvp->len ) + rc = GET_INFO(ltvp); + MMDASSERT(rc == HCF_SUCCESS, rc) + MMDASSERT(rc == HCF_SUCCESS, ltvp->typ) + MMDASSERT(rc == HCF_SUCCESS, ltvp->len) } - if ( rc == HCF_SUCCESS ) rc = check_comp_fw( fw ); - if ( rc == HCF_SUCCESS ) { - while ( rc == HCF_SUCCESS && p->len ) { - rc = PUT_INFO( p ); + if (rc == HCF_SUCCESS) rc = check_comp_fw(fw); + if (rc == HCF_SUCCESS) { + while (rc == HCF_SUCCESS && p->len) { + rc = PUT_INFO(p); p++; } } - MMDASSERT( rc == HCF_SUCCESS, rc ) + MMDASSERT(rc == HCF_SUCCESS, rc) return rc; } /* dhf_download_fw */ -- cgit v0.10.2 From 437de951eca9c831dc69a47b58603b1d8d9cbf82 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Wed, 17 Mar 2010 11:02:49 +0200 Subject: Staging: wlags49_h2: fix trailing statements coding style issue in dhf.c This is a patch to the dhf.c file that fixed up a trailing statements Errors found by the checkpatch.pl tools, like trailing statements should be on next line Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/dhf.c b/drivers/staging/wlags49_h2/dhf.c index 3af4398..d5fb1a9 100644 --- a/drivers/staging/wlags49_h2/dhf.c +++ b/drivers/staging/wlags49_h2/dhf.c @@ -278,16 +278,19 @@ CFG_PROG_STRCT *p; int i; /* validate the image */ - for (i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++); /* NOP */ + for (i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++) + ; /* NOP */ if (i != sizeof(signature) || fw->signature[i] != 0x01 || /* test for Little/Big Endian Binary flag */ - fw->signature[i+1] != (/* HCF_BIG_ENDIAN ? 'B' : */ 'L')) rc = DHF_ERR_INCOMP_FW; + fw->signature[i+1] != (/* HCF_BIG_ENDIAN ? 'B' : */ 'L')) + rc = DHF_ERR_INCOMP_FW; else { /* Little Endian Binary format */ fw->codep = (CFG_PROG_STRCT FAR*)((PSEUDO_CHARP)fw->codep + (hcf_32)fw); fw->identity = (CFG_IDENTITY_STRCT FAR*)((PSEUDO_CHARP)fw->identity + (hcf_32)fw); fw->compat = (CFG_RANGE20_STRCT FAR*)((PSEUDO_CHARP)fw->compat + (hcf_32)fw); - for (i = 0; fw->p[i]; i++) fw->p[i] = ((PSEUDO_CHARP)fw->p[i] + (hcf_32)fw); + for (i = 0; fw->p[i]; i++) + fw->p[i] = ((PSEUDO_CHARP)fw->p[i] + (hcf_32)fw); p = fw->codep; while (p->len) { p->host_addr = (PSEUDO_CHARP)p->host_addr + (hcf_32)fw; @@ -361,7 +364,8 @@ int i; MMDASSERT(fw != NULL, 0) /* validate the image */ - for (i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++) /* NOP */; + for (i = 0; i < sizeof(signature) && fw->signature[i] == signature[i]; i++) + ; /* NOP */ if (i != sizeof(signature) || fw->signature[i] != 0x01 || /* check for binary image */ @@ -376,7 +380,8 @@ int i; MMDASSERT(rc == HCF_SUCCESS, ltvp->typ) MMDASSERT(rc == HCF_SUCCESS, ltvp->len) } - if (rc == HCF_SUCCESS) rc = check_comp_fw(fw); + if (rc == HCF_SUCCESS) + rc = check_comp_fw(fw); if (rc == HCF_SUCCESS) { while (rc == HCF_SUCCESS && p->len) { rc = PUT_INFO(p); -- cgit v0.10.2 From 7adea182f1fcaac3c0f37007a15d27f80ef56b85 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sat, 20 Mar 2010 09:24:44 +0200 Subject: Staging: wlags49_h2: fix copyright and space style issue in dhf.h This is a patch to the dhf.h file that fixed up a copyright anf space style Errors found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/dhf.h b/drivers/staging/wlags49_h2/dhf.h index c071f34..13abcdd 100644 --- a/drivers/staging/wlags49_h2/dhf.h +++ b/drivers/staging/wlags49_h2/dhf.h @@ -38,9 +38,9 @@ * software indicates your acceptance of these terms and conditions. If you do * not agree with these terms and conditions, do not use the software. * -* COPYRIGHT © 1994 - 1995 by AT&T. All Rights Reserved -* COPYRIGHT © 1999 - 2000 by Lucent Technologies. All Rights Reserved -* COPYRIGHT © 2001 - 2004 by Agere Systems Inc. All Rights Reserved +* COPYRIGHT (C) 1994 - 1995 by AT&T. All Rights Reserved +* COPYRIGHT (C) 1999 - 2000 by Lucent Technologies. All Rights Reserved +* COPYRIGHT (C) 2001 - 2004 by Agere Systems Inc. All Rights Reserved * All rights reserved. * * Redistribution and use in source or binary forms, with or without @@ -85,11 +85,11 @@ #include "hcf.h" // includes HCFCFG.H too #ifdef DHF_UIL -#define GET_INFO( pp ) uil_get_info( (LTVP)pp ) -#define PUT_INFO( pp ) uil_put_info( (LTVP)pp ) +#define GET_INFO(pp) uil_get_info((LTVP)pp) +#define PUT_INFO(pp) uil_put_info((LTVP)pp) #else -#define GET_INFO( pp ) hcf_get_info( ifbp, (LTVP)pp ) -#define PUT_INFO( pp ) hcf_put_info( ifbp, (LTVP)pp ) +#define GET_INFO(pp) hcf_get_info(ifbp, (LTVP)pp) +#define PUT_INFO(pp) hcf_put_info(ifbp, (LTVP)pp) #endif @@ -189,9 +189,9 @@ typedef struct { */ typedef struct { char signature[14+1+1]; // signature (see DHF.C) + C/LE-Bin/BE-Bin-flag + format version - CFG_PROG_STRCT FAR *codep; // + CFG_PROG_STRCT FAR * codep; // hcf_32 execution; // Execution address of the firmware - void FAR *place_holder_1; + void FAR * place_holder_1; void FAR *place_holder_2; CFG_RANGE20_STRCT FAR *compat; // Pointer to the compatibility info records CFG_IDENTITY_STRCT FAR *identity; // Pointer to the identity info records @@ -209,8 +209,8 @@ typedef struct { * *---------------------------------------------------------------------------*/ -EXTERN_C int dhf_download_fw( void *ifbp, memimage *fw ); // ifbp, ignored when using the UIL -EXTERN_C int dhf_download_binary( memimage *fw ); +EXTERN_C int dhf_download_fw(void *ifbp, memimage *fw); // ifbp, ignored when using the UIL +EXTERN_C int dhf_download_binary(memimage *fw); /*----------------------------------------------------------------------------- @@ -220,7 +220,7 @@ EXTERN_C int dhf_download_binary( memimage *fw ); *---------------------------------------------------------------------------*/ // defined in DHF.C; see there for comments -EXTERN_C hcf_16 *find_record_in_pda( hcf_16 *pdap, hcf_16 code ); +EXTERN_C hcf_16 *find_record_in_pda(hcf_16 *pdap, hcf_16 code); #endif // DHF_H -- cgit v0.10.2 From 1ef61183ceaf2ebb59df817834c0cc755d99c634 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sat, 20 Mar 2010 09:24:57 +0200 Subject: Staging: wlags49_h2: fix space and comments style issue in dhf.h This is a patch to the dhf.c file that fixed up a space and comments style Errors found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/dhf.h b/drivers/staging/wlags49_h2/dhf.h index 13abcdd..dbe0611 100644 --- a/drivers/staging/wlags49_h2/dhf.h +++ b/drivers/staging/wlags49_h2/dhf.h @@ -1,5 +1,5 @@ -// vim:tw=110:ts=4: +/* vim:tw=110:ts=4: */ #ifndef DHF_H #define DHF_H @@ -82,7 +82,7 @@ #include #endif -#include "hcf.h" // includes HCFCFG.H too +#include "hcf.h" /* includes HCFCFG.H too */ #ifdef DHF_UIL #define GET_INFO(pp) uil_get_info((LTVP)pp) @@ -94,15 +94,15 @@ /*---- Defines --------------------------------------------------------------*/ -#define CODEMASK 0x0000FFFFL // Codemask for plug records +#define CODEMASK 0x0000FFFFL /* Codemask for plug records */ /*---- Error numbers --------------------------------------------------------*/ -#define DHF_ERR_INCOMP_FW 0x40 //Image not compatible with NIC +#define DHF_ERR_INCOMP_FW 0x40 /* Image not compatible with NIC */ /*---- Type definitions -----------------------------------------------------*/ -//* needed by dhf_wrap.c -// +/* needed by dhf_wrap.c */ + typedef struct { LTVP ltvp; hcf_16 len; @@ -119,9 +119,9 @@ typedef struct { */ typedef struct { - hcf_32 code; // Code to plug - hcf_32 addr; // Address within the memory image to plug it in - hcf_32 len; // The # of bytes which are available to store it + hcf_32 code; /* Code to plug */ + hcf_32 addr; /* Address within the memory image to plug it in */ + hcf_32 len; /* The # of bytes which are available to store it */ } plugrecord; /* @@ -159,7 +159,7 @@ typedef struct { char str[MAX_DEBUGEXPORT_LEN]; } exportrecord; -// Offsets in memimage array p[] +/* Offsets in memimage array p[] */ #define FWSTRINGS_FUNCTION 0 #define FWEXPORTS_FUNCTION 1 @@ -188,13 +188,13 @@ typedef struct { * The end of the array is indicated by a plug record of which all fields are zero. */ typedef struct { - char signature[14+1+1]; // signature (see DHF.C) + C/LE-Bin/BE-Bin-flag + format version - CFG_PROG_STRCT FAR * codep; // - hcf_32 execution; // Execution address of the firmware - void FAR * place_holder_1; + char signature[14+1+1]; /* signature (see DHF.C) + C/LE-Bin/BE-Bin-flag + format version */ + CFG_PROG_STRCT FAR *codep; /* */ + hcf_32 execution; /* Execution address of the firmware */ + void FAR *place_holder_1; void FAR *place_holder_2; - CFG_RANGE20_STRCT FAR *compat; // Pointer to the compatibility info records - CFG_IDENTITY_STRCT FAR *identity; // Pointer to the identity info records + CFG_RANGE20_STRCT FAR *compat; /* Pointer to the compatibility info records */ + CFG_IDENTITY_STRCT FAR *identity; /* Pointer to the identity info records */ void FAR *p[2]; /* (Up to 9) pointers for (future) expansion * currently in use: * - F/W printf information @@ -209,7 +209,7 @@ typedef struct { * *---------------------------------------------------------------------------*/ -EXTERN_C int dhf_download_fw(void *ifbp, memimage *fw); // ifbp, ignored when using the UIL +EXTERN_C int dhf_download_fw(void *ifbp, memimage *fw); /* ifbp, ignored when using the UIL */ EXTERN_C int dhf_download_binary(memimage *fw); @@ -219,8 +219,8 @@ EXTERN_C int dhf_download_binary(memimage *fw); * *---------------------------------------------------------------------------*/ -// defined in DHF.C; see there for comments +/* defined in DHF.C; see there for comments */ EXTERN_C hcf_16 *find_record_in_pda(hcf_16 *pdap, hcf_16 code); -#endif // DHF_H +#endif /* DHF_H */ -- cgit v0.10.2 From fa51929f66ce7953714df1193b13750c39871065 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sat, 20 Mar 2010 09:36:15 +0200 Subject: Staging: wlags49_h2: fix copyright and comments style issue in dhfcfg.h This is a patch to the dhfcfg.h file that fixed up a copyright and commets style Errors found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/dhfcfg.h b/drivers/staging/wlags49_h2/dhfcfg.h index a0c26c6..75c279f 100644 --- a/drivers/staging/wlags49_h2/dhfcfg.h +++ b/drivers/staging/wlags49_h2/dhfcfg.h @@ -22,7 +22,7 @@ * software indicates your acceptance of these terms and conditions. If you do * not agree with these terms and conditions, do not use the software. * - * Copyright © 2003 Agere Systems Inc. + * Copyright (c) 2003 Agere Systems Inc. * All rights reserved. * * Redistribution and use in source or binary forms, with or without @@ -77,82 +77,82 @@ *---------------------------------------------------------------------------*/ -// Define DHF_WCI if you want to use the WCI to access the ORiNOCO card. -// Define DHF_UIL if you want to use the UIL to access the ORiNOCO card. -// You must define either DHF_WCI or DHF_UIL. If neither of the two is defined -// or both a compile error is generated. +/* Define DHF_WCI if you want to use the WCI to access the ORiNOCO card. + Define DHF_UIL if you want to use the UIL to access the ORiNOCO card. + You must define either DHF_WCI or DHF_UIL. If neither of the two is defined + or both a compile error is generated. */ #define DHF_WCI -//!!!#define DHF_UIL +/* !!!#define DHF_UIL */ -// Define DHF_BIG_ENDIAN if you are working on a big endian platform. -// Define DHF_LITTLE_ENDIAN if you are working on a little endian platform. -// You must define either DHF_BIG_ENDIAN or DHF_LITTLE_ENDIAN. If neither of -// the two is defined or both a compile error is generated. +/* Define DHF_BIG_ENDIAN if you are working on a big endian platform. + Define DHF_LITTLE_ENDIAN if you are working on a little endian platform. + You must define either DHF_BIG_ENDIAN or DHF_LITTLE_ENDIAN. If neither of + the two is defined or both a compile error is generated. */ #ifdef USE_BIG_ENDIAN #define DHF_BIG_ENDIAN #else #define DHF_LITTLE_ENDIAN #endif /* USE_BIG_ENDIAN */ -// Define DHF_WIN if you are working on Windows platform. -// Define DHF_DOS if you are working on DOS. -// You must define either DHF_WIN or DHF_DOS. If neither of -// the two is defined or both a compile error is generated. -//!!!#define DHF_WIN -//!!!#define DHF_DOS +/* Define DHF_WIN if you are working on Windows platform. + Define DHF_DOS if you are working on DOS. + You must define either DHF_WIN or DHF_DOS. If neither of + the two is defined or both a compile error is generated. + !!!#define DHF_WIN + !!!#define DHF_DOS */ -// Define if you want the DHF to users. Not defining DHF_GET_RES_MSG -// leads to a decrease in code size as message strings are not included. -//!!!#define DHF_GET_RES_MSG +/* Define if you want the DHF to users. Not defining DHF_GET_RES_MSG + leads to a decrease in code size as message strings are not included. + !!!#define DHF_GET_RES_MSG */ -// Linux driver specific -// Prevent inclusion of stdlib.h and string.h +/* Linux driver specific + Prevent inclusion of stdlib.h and string.h */ #define _INC_STDLIB #define _INC_STRING -//----------------------------------------------------------------------------- -// Define one or more of the following DSF #defines if you want to implement -// the related DSF-function. Function dsf_callback must allways be implemented. -// See file DHF.H for prototypes of the functions. - -// Define DSF_ALLOC if you want to manage memory allocation and de-allocation -// for the DHF. If DSF_ALLOC is defined you must implement dsf_alloc and dsf_free. -//!!!#define DSF_ALLOC - -// Define DSF_CONFIRM if you want the DHF to ask the user for confirmation in a -// number of situations. If DSF_CONFIRM is defined you must implement dsf_confirm. -// Not defining DSF_CONFIRM leads to a decrease in code size as confirmation -// strings are not included. -//!!!#define DSF_CONFIRM - -// Define DSF_DEBUG_MESSAGE if you want debug messages added to your output. -// If you define DSF_DEBUG_MESSAGE then you must implement function -// dsf_debug_message. -//#define DSF_DEBUG_MESSAGE - -// Define DSF_ASSERT if you want asserts to be activated. -// If you define DSF_ASSERT then you must implement function dsf_assert. -//#define DBG 1 -//#define DSF_ASSERT - -// Define DSF_DBWIN if you want asserts and debug messages to be send to a debug -// window like SOFTICE or DebugView from SysInternals. -//!!!#define DSF_DBWIN -//!!! Not implemented yet! - -// Define DSF_VOLATILE_ONLY if you only wants to use valatile functions -// This is a typical setting for a AP and a driver. +/*----------------------------------------------------------------------------- + Define one or more of the following DSF #defines if you want to implement + the related DSF-function. Function dsf_callback must allways be implemented. + See file DHF.H for prototypes of the functions. */ + +/* Define DSF_ALLOC if you want to manage memory allocation and de-allocation + for the DHF. If DSF_ALLOC is defined you must implement dsf_alloc and dsf_free. + !!!#define DSF_ALLOC */ + +/* Define DSF_CONFIRM if you want the DHF to ask the user for confirmation in a + number of situations. If DSF_CONFIRM is defined you must implement dsf_confirm. + Not defining DSF_CONFIRM leads to a decrease in code size as confirmation + strings are not included. + !!!#define DSF_CONFIRM */ + +/* Define DSF_DEBUG_MESSAGE if you want debug messages added to your output. + If you define DSF_DEBUG_MESSAGE then you must implement function + dsf_debug_message. + #define DSF_DEBUG_MESSAGE */ + +/* Define DSF_ASSERT if you want asserts to be activated. + If you define DSF_ASSERT then you must implement function dsf_assert. + #define DBG 1 + #define DSF_ASSERT */ + +/* Define DSF_DBWIN if you want asserts and debug messages to be send to a debug + window like SOFTICE or DebugView from SysInternals. + !!!#define DSF_DBWIN + !!! Not implemented yet! */ + +/* Define DSF_VOLATILE_ONLY if you only wants to use valatile functions + This is a typical setting for a AP and a driver. */ #define DSF_VOLATILE_ONLY -// Define DSF_HERMESII if you want to use the DHF for the Hermes-II +/* Define DSF_HERMESII if you want to use the DHF for the Hermes-II */ #ifdef HERMES2 #define DSF_HERMESII #else #undef DSF_HERMESII -#endif // HERMES2 +#endif /* HERMES2 */ -// Define DSF_BINARY_FILE if you want to use the DHF in combination with -// reading the Firmware from a separate binary file. -//!!!#define DSF_BINARY_FILE +/* Define DSF_BINARY_FILE if you want to use the DHF in combination with + reading the Firmware from a separate binary file. + !!!#define DSF_BINARY_FILE */ -#endif // DHFCFG_H +#endif /* DHFCFG_H */ -- cgit v0.10.2 From 33f84a8f2110afbb819c8336cb73d517fc0b2891 Mon Sep 17 00:00:00 2001 From: Jonas Lundqvist Date: Tue, 16 Mar 2010 15:41:09 +0100 Subject: Staging: phison: fix incorrect tabs in phison.c This patch fixes two incorrect tab warnings found by the checkpatch.pl tool Signed-off-by: Jonas Lundqvist Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/phison/phison.c b/drivers/staging/phison/phison.c index 0c495ea..42783d7 100644 --- a/drivers/staging/phison/phison.c +++ b/drivers/staging/phison/phison.c @@ -23,7 +23,7 @@ #define PHISON_DEBUG #define DRV_NAME "phison_e-box" /* #0003 */ -#define DRV_VERSION "0.91" /* #0003 */ +#define DRV_VERSION "0.91" /* #0003 */ #define PCI_VENDOR_ID_PHISON 0x1987 #define PCI_DEVICE_ID_PS5000 0x5000 @@ -56,7 +56,7 @@ static int phison_init_one(struct pci_dev *pdev, const struct pci_device_id *id) .pio_mask = 0x1f, .mwdma_mask = 0x07, - .udma_mask = ATA_UDMA5, + .udma_mask = ATA_UDMA5, .port_ops = &phison_ops, }; -- cgit v0.10.2 From 8dbe821edfbce4ad3cad2076b32745f0aa08a77e Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Thu, 18 Mar 2010 15:16:47 +0100 Subject: Staging: rtl8192su: refactored EnableHWSecurityConfig8192 and setKey refactored EnableHWSecurityConfig8192 and setKey a bit by replacing if...else if... else with switch...case plus cosmetics Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index 7fe1ced..ca3524c 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -7612,96 +7612,113 @@ void rtl8192_try_wake_queue(struct net_device *dev, int pri) void EnableHWSecurityConfig8192(struct net_device *dev) { - u8 SECR_value = 0x0; + u8 SECR_value = 0x0; struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); - struct ieee80211_device* ieee = priv->ieee80211; + struct ieee80211_device *ieee = priv->ieee80211; SECR_value = SCR_TxEncEnable | SCR_RxDecEnable; -#if 1 - if (((KEY_TYPE_WEP40 == ieee->pairwise_key_type) || (KEY_TYPE_WEP104 == ieee->pairwise_key_type)) && (priv->ieee80211->auth_mode != 2)) - { - SECR_value |= SCR_RxUseDK; - SECR_value |= SCR_TxUseDK; - } - else if ((ieee->iw_mode == IW_MODE_ADHOC) && (ieee->pairwise_key_type & (KEY_TYPE_CCMP | KEY_TYPE_TKIP))) - { - SECR_value |= SCR_RxUseDK; - SECR_value |= SCR_TxUseDK; + switch (ieee->pairwise_key_type) { + case KEY_TYPE_WEP40: + case KEY_TYPE_WEP104: + if (priv->ieee80211->auth_mode != 2) { + SECR_value |= SCR_RxUseDK; + SECR_value |= SCR_TxUseDK; + } + break; + case KEY_TYPE_TKIP: + case KEY_TYPE_CCMP: + if (ieee->iw_mode == IW_MODE_ADHOC) { + SECR_value |= SCR_RxUseDK; + SECR_value |= SCR_TxUseDK; + } + break; + default: + break; } -#endif - //add HWSec active enable here. -//default using hwsec. when peer AP is in N mode only and pairwise_key_type is none_aes(which HT_IOT_ACT_PURE_N_MODE indicates it), use software security. when peer AP is in b,g,n mode mixed and pairwise_key_type is none_aes, use g mode hw security. WB on 2008.7.4 + /* + * add HWSec active enable here. + * default using hwsec. + * when peer AP is in N mode only and pairwise_key_type is none_aes + * (which HT_IOT_ACT_PURE_N_MODE indicates it), + * use software security. + * when peer AP is in b,g,n mode mixed and pairwise_key_type is none_aes + * use g mode hw security. + */ ieee->hwsec_active = 1; - if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep)//!ieee->hwsec_support) //add hwsec_support flag to totol control hw_sec on/off - { + /* add hwsec_support flag to totol control hw_sec on/off */ + if ((ieee->pHTInfo->IOTAction&HT_IOT_ACT_PURE_N_MODE) || !hwwep) { ieee->hwsec_active = 0; SECR_value &= ~SCR_RxDecEnable; } - RT_TRACE(COMP_SEC,"%s:, hwsec:%d, pairwise_key:%d, SECR_value:%x\n", __FUNCTION__, \ - ieee->hwsec_active, ieee->pairwise_key_type, SECR_value); - { - write_nic_byte(dev, SECR, SECR_value);//SECR_value | SCR_UseDK ); - } + RT_TRACE(COMP_SEC, "%s(): hwsec: %d, pairwise_key: %d, " + "SECR_value: %x", + __func__, ieee->hwsec_active, + ieee->pairwise_key_type, SECR_value); + + write_nic_byte(dev, SECR, SECR_value); /* SECR_value | SCR_UseDK ); */ } -void setKey( struct net_device *dev, +void setKey(struct net_device *dev, u8 EntryNo, u8 KeyIndex, u16 KeyType, u8 *MacAddr, u8 DefaultKey, - u32 *KeyContent ) + u32 *KeyContent) { u32 TargetCommand = 0; u32 TargetContent = 0; u16 usConfig = 0; u8 i; + if (EntryNo >= TOTAL_CAM_ENTRY) - RT_TRACE(COMP_ERR, "cam entry exceeds in setKey()\n"); + RT_TRACE(COMP_ERR, "%s(): cam entry exceeds TOTAL_CAM_ENTRY", + __func__); - RT_TRACE(COMP_SEC, "====>to setKey(), dev:%p, EntryNo:%d, KeyIndex:%d, KeyType:%d, MacAddr%pM\n", dev,EntryNo, KeyIndex, KeyType, MacAddr); + RT_TRACE(COMP_SEC, "%s(): dev: %p, EntryNo: %d, " + "KeyIndex: %d, KeyType: %d, MacAddr: %pM", + __func__, dev, EntryNo, + KeyIndex, KeyType, MacAddr); if (DefaultKey) - usConfig |= BIT15 | (KeyType<<2); + usConfig |= BIT15 | (KeyType << 2); else - usConfig |= BIT15 | (KeyType<<2) | KeyIndex; -// usConfig |= BIT15 | (KeyType<<2) | (DefaultKey<<5) | KeyIndex; - + usConfig |= BIT15 | (KeyType << 2) | KeyIndex; - for(i=0 ; i Date: Thu, 18 Mar 2010 15:17:29 +0100 Subject: Staging: rtl8192su: refactored FirmwareDownload92S added a new function: FirmwareRequest92S This function(instead of FirmwareDownload92S) is now responsible for requesting the firmware. FirmwareDownload92S is now easier to read, smaller and follows kernel coding style. plus cosmetics. Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192S_firmware.c b/drivers/staging/rtl8192su/r8192S_firmware.c index 752a3f1..b6ae854 100644 --- a/drivers/staging/rtl8192su/r8192S_firmware.c +++ b/drivers/staging/rtl8192su/r8192S_firmware.c @@ -338,143 +338,159 @@ void FirmwareHeaderPriveUpdate(struct net_device *dev, PRT_8192S_FIRMWARE_PRIV pFwPriv->rf_config = FirmwareHeaderMapRfType(dev); } +bool FirmwareRequest92S(struct net_device *dev, rt_firmware *pFirmware) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + bool rtStatus = true; + const char *pFwImageFileName[1] = {"RTL8192SU/rtl8192sfw.bin"}; + u8 *pucMappedFile = NULL; + u32 ulInitStep = 0; + u8 FwHdrSize = RT_8192S_FIRMWARE_HDR_SIZE; + PRT_8192S_FIRMWARE_HDR pFwHdr = NULL; + u32 file_length = 0; + int rc; + const struct firmware *fw_entry; + + rc = request_firmware(&fw_entry, + pFwImageFileName[ulInitStep], + &priv->udev->dev); + if (rc < 0) + goto RequestFirmware_Fail; + + if (fw_entry->size > sizeof(pFirmware->szFwTmpBuffer)) { + RT_TRACE(COMP_ERR, "%s(): image file too large" + "for container buffer", __func__); + release_firmware(fw_entry); + goto RequestFirmware_Fail; + } + + memcpy(pFirmware->szFwTmpBuffer, fw_entry->data, fw_entry->size); + pFirmware->szFwTmpBufferLen = fw_entry->size; + release_firmware(fw_entry); + + pucMappedFile = pFirmware->szFwTmpBuffer; + file_length = pFirmware->szFwTmpBufferLen; + + /* Retrieve FW header. */ + pFirmware->pFwHeader = (PRT_8192S_FIRMWARE_HDR) pucMappedFile; + pFwHdr = pFirmware->pFwHeader; + + RT_TRACE(COMP_FIRMWARE, "%s(): signature: %x, version: %x, " + "size: %x, imemsize: %x, sram size: %x", + __func__, pFwHdr->Signature, pFwHdr->Version, + pFwHdr->DMEMSize, pFwHdr->IMG_IMEM_SIZE, + pFwHdr->IMG_SRAM_SIZE); + + pFirmware->FirmwareVersion = byte(pFwHdr->Version , 0); + + if ((pFwHdr->IMG_IMEM_SIZE == 0) || + (pFwHdr->IMG_IMEM_SIZE > sizeof(pFirmware->FwIMEM))) { + RT_TRACE(COMP_ERR, "%s(): memory for data image is less than" + " IMEM requires", __func__); + goto RequestFirmware_Fail; + } else { + pucMappedFile += FwHdrSize; + /* Retrieve IMEM image. */ + memcpy(pFirmware->FwIMEM, pucMappedFile, pFwHdr->IMG_IMEM_SIZE); + pFirmware->FwIMEMLen = pFwHdr->IMG_IMEM_SIZE; + } + + if (pFwHdr->IMG_SRAM_SIZE > sizeof(pFirmware->FwEMEM)) { + RT_TRACE(COMP_ERR, "%s(): memory for data image is less than" + " EMEM requires", __func__); + goto RequestFirmware_Fail; + } else { + pucMappedFile += pFirmware->FwIMEMLen; + /* Retriecve EMEM image */ + memcpy(pFirmware->FwEMEM, pucMappedFile, pFwHdr->IMG_SRAM_SIZE); + pFirmware->FwEMEMLen = pFwHdr->IMG_SRAM_SIZE; + } + return rtStatus; +RequestFirmware_Fail: + RT_TRACE(COMP_ERR, "%s(): failed with TCR-Status: %x\n", + __func__, read_nic_word(dev, TCR)); + rtStatus = false; + return rtStatus; +} bool FirmwareDownload92S(struct net_device *dev) { - struct r8192_priv *priv = ieee80211_priv(dev); - bool rtStatus = true; - const char *pFwImageFileName[1] = {"RTL8192SU/rtl8192sfw.bin"}; - u8 *pucMappedFile = NULL; - u32 ulFileLength, ulInitStep = 0; - u8 FwHdrSize = RT_8192S_FIRMWARE_HDR_SIZE; - rt_firmware *pFirmware = priv->pFirmware; - u8 FwStatus = FW_STATUS_INIT; - PRT_8192S_FIRMWARE_HDR pFwHdr = NULL; - PRT_8192S_FIRMWARE_PRIV pFwPriv = NULL; - int rc; - const struct firmware *fw_entry; - u32 file_length = 0; + struct r8192_priv *priv = ieee80211_priv(dev); + bool rtStatus = true; + u8 *pucMappedFile = NULL; + u32 ulFileLength; + u8 FwHdrSize = RT_8192S_FIRMWARE_HDR_SIZE; + rt_firmware *pFirmware = priv->pFirmware; + u8 FwStatus = FW_STATUS_INIT; + PRT_8192S_FIRMWARE_HDR pFwHdr = NULL; + PRT_8192S_FIRMWARE_PRIV pFwPriv = NULL; pFirmware->FWStatus = FW_STATUS_INIT; - - RT_TRACE(COMP_FIRMWARE, " --->FirmwareDownload92S()\n"); - -/* -* Load the firmware from RTL8192SU/rtl8192sfw.bin -*/ - if(pFirmware->szFwTmpBufferLen == 0) - { - rc = request_firmware(&fw_entry, pFwImageFileName[ulInitStep],&priv->udev->dev); - if(rc < 0 ) { - RT_TRACE(COMP_ERR, "request firmware fail!\n"); - goto DownloadFirmware_Fail; - } - - if(fw_entry->size > sizeof(pFirmware->szFwTmpBuffer)) { - RT_TRACE(COMP_ERR, "img file size exceed the container buffer fail!\n"); - release_firmware(fw_entry); - goto DownloadFirmware_Fail; - } - - memcpy(pFirmware->szFwTmpBuffer,fw_entry->data,fw_entry->size); - pFirmware->szFwTmpBufferLen = fw_entry->size; - release_firmware(fw_entry); - - pucMappedFile = pFirmware->szFwTmpBuffer; - file_length = pFirmware->szFwTmpBufferLen; - - /* Retrieve FW header. */ - pFirmware->pFwHeader = (PRT_8192S_FIRMWARE_HDR) pucMappedFile; - pFwHdr = pFirmware->pFwHeader; - RT_TRACE(COMP_FIRMWARE,"signature:%x, version:%x, size:%x, imemsize:%x, sram size:%x\n", \ - pFwHdr->Signature, pFwHdr->Version, pFwHdr->DMEMSize, \ - pFwHdr->IMG_IMEM_SIZE, pFwHdr->IMG_SRAM_SIZE); - pFirmware->FirmwareVersion = byte(pFwHdr->Version ,0); - if ((pFwHdr->IMG_IMEM_SIZE==0) || (pFwHdr->IMG_IMEM_SIZE > sizeof(pFirmware->FwIMEM))) { - RT_TRACE(COMP_ERR, "%s: memory for data image is less than IMEM required\n",\ - __FUNCTION__); - goto DownloadFirmware_Fail; - } else { - pucMappedFile+=FwHdrSize; - /* Retrieve IMEM image. */ - memcpy(pFirmware->FwIMEM, pucMappedFile, pFwHdr->IMG_IMEM_SIZE); - pFirmware->FwIMEMLen = pFwHdr->IMG_IMEM_SIZE; - } - - if (pFwHdr->IMG_SRAM_SIZE > sizeof(pFirmware->FwEMEM)) { - RT_TRACE(COMP_ERR, "%s: memory for data image is less than EMEM required\n",\ - __FUNCTION__); - goto DownloadFirmware_Fail; - } else { - pucMappedFile += pFirmware->FwIMEMLen; - /* Retriecve EMEM image */ - memcpy(pFirmware->FwEMEM, pucMappedFile, pFwHdr->IMG_SRAM_SIZE);//===>6 - pFirmware->FwEMEMLen = pFwHdr->IMG_SRAM_SIZE; - } + /* + * Load the firmware from RTL8192SU/rtl8192sfw.bin if necessary + */ + if (pFirmware->szFwTmpBufferLen == 0) { + if (FirmwareRequest92S(dev, pFirmware) != true) + goto DownloadFirmware_Fail; } - FwStatus = FirmwareGetNextStatus(pFirmware->FWStatus); - while(FwStatus!= FW_STATUS_READY) - { - // Image buffer redirection. - switch(FwStatus) - { - case FW_STATUS_LOAD_IMEM: - pucMappedFile = pFirmware->FwIMEM; - ulFileLength = pFirmware->FwIMEMLen; - break; + while (FwStatus != FW_STATUS_READY) { + /* Image buffer redirection. */ + switch (FwStatus) { + case FW_STATUS_LOAD_IMEM: + pucMappedFile = pFirmware->FwIMEM; + ulFileLength = pFirmware->FwIMEMLen; + break; - case FW_STATUS_LOAD_EMEM: - pucMappedFile = pFirmware->FwEMEM; - ulFileLength = pFirmware->FwEMEMLen; - break; + case FW_STATUS_LOAD_EMEM: + pucMappedFile = pFirmware->FwEMEM; + ulFileLength = pFirmware->FwEMEMLen; + break; - case FW_STATUS_LOAD_DMEM: - /* Partial update the content of header private. 2008.12.18 */ - pFwHdr = pFirmware->pFwHeader; - pFwPriv = (PRT_8192S_FIRMWARE_PRIV)&pFwHdr->FWPriv; - FirmwareHeaderPriveUpdate(dev, pFwPriv); - pucMappedFile = (u8*)(pFirmware->pFwHeader)+RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE; - ulFileLength = FwHdrSize-RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE; - break; + case FW_STATUS_LOAD_DMEM: + /* Partial update the content of private header */ + pFwHdr = pFirmware->pFwHeader; + pFwPriv = (PRT_8192S_FIRMWARE_PRIV)&pFwHdr->FWPriv; + FirmwareHeaderPriveUpdate(dev, pFwPriv); + pucMappedFile = (u8 *)(pFirmware->pFwHeader) + + RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE; - default: - RT_TRACE(COMP_ERR, "Unexpected Download step!!\n"); - goto DownloadFirmware_Fail; - break; + ulFileLength = FwHdrSize - + RT_8192S_FIRMWARE_HDR_EXCLUDE_PRI_SIZE; + break; + + default: + RT_TRACE(COMP_ERR, "Unexpected Download step!!\n"); + goto DownloadFirmware_Fail; + break; } - //3// - //3// <2> Download image file - //3 // - rtStatus = FirmwareDownloadCode(dev, pucMappedFile, ulFileLength); + /* <2> Download image file */ + + rtStatus = FirmwareDownloadCode(dev, + pucMappedFile, + ulFileLength); if(rtStatus != true) - { - RT_TRACE(COMP_ERR, "FirmwareDownloadCode() fail ! \n" ); goto DownloadFirmware_Fail; - } - //3// - //3// <3> Check whether load FW process is ready - //3 // + /* <3> Check whether load FW process is ready */ + rtStatus = FirmwareCheckReady(dev, FwStatus); if(rtStatus != true) - { - RT_TRACE(COMP_ERR, "FirmwareDownloadCode() fail ! \n"); goto DownloadFirmware_Fail; - } FwStatus = FirmwareGetNextStatus(pFirmware->FWStatus); } - RT_TRACE(COMP_FIRMWARE, "Firmware Download Success!!\n"); + RT_TRACE(COMP_FIRMWARE, "%s(): Firmware Download Success", __func__); return rtStatus; - DownloadFirmware_Fail: - RT_TRACE(COMP_ERR, "Firmware Download Fail!!%x\n",read_nic_word(dev, TCR)); +DownloadFirmware_Fail: + RT_TRACE(COMP_ERR, "%s(): failed with TCR-Status: %x\n", + __func__, read_nic_word(dev, TCR)); rtStatus = false; return rtStatus; } -- cgit v0.10.2 From 8e399b0332374bb18ff8b899b1288397b52f9394 Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Thu, 18 Mar 2010 15:18:12 +0100 Subject: Staging: rtl8192su: removed 2 printks in rtl8192SU_link_change Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index ca3524c..09b9edd 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -2595,30 +2595,20 @@ void rtl8192SU_update_ratr_table(struct net_device* dev) void rtl8192SU_link_change(struct net_device *dev) { struct r8192_priv *priv = ieee80211_priv(dev); - struct ieee80211_device* ieee = priv->ieee80211; - //unsigned long flags; + struct ieee80211_device *ieee = priv->ieee80211; u32 reg = 0; - printk("=====>%s 1\n", __func__); reg = read_nic_dword(dev, RCR); - - if (ieee->state == IEEE80211_LINKED) - { - + if (ieee->state == IEEE80211_LINKED) { rtl8192SU_net_update(dev); rtl8192SU_update_ratr_table(dev); ieee->SetFwCmdHandler(dev, FW_CMD_HIGH_PWR_ENABLE); priv->ReceiveConfig = reg |= RCR_CBSSID; - }else{ + } else priv->ReceiveConfig = reg &= ~RCR_CBSSID; - - } - write_nic_dword(dev, RCR, reg); rtl8192_update_msr(dev); - - printk("<=====%s 2\n", __func__); } static struct ieee80211_qos_parameters def_qos_parameters = { -- cgit v0.10.2 From df35bf66eef8bf7237c12190a131a656b0b5af7d Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Thu, 18 Mar 2010 15:18:34 +0100 Subject: Staging: rtl8192su: some work on SetBWModeCallback8192SUsbWorkItem mostly cosmetics. Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192S_phy.c b/drivers/staging/rtl8192su/r8192S_phy.c index 63d4e5f..83c8aaa 100644 --- a/drivers/staging/rtl8192su/r8192S_phy.c +++ b/drivers/staging/rtl8192su/r8192S_phy.c @@ -3607,128 +3607,103 @@ void SetBWModeCallback8192SUsb(struct net_device *dev) RT_TRACE(COMP_SCAN, "<==SetBWMode8190Pci()" ); } -// -// Callback routine of the work item for set bandwidth mode. -// -// use in phy only (in win it's work) +/* + * Callback routine of the work item for set bandwidth mode. + * + * use in phy only (in win it's work) + */ void SetBWModeCallback8192SUsbWorkItem(struct net_device *dev) { - struct r8192_priv *priv = ieee80211_priv(dev); - u8 regBwOpMode; - - // Added it for 20/40 mhz switch time evaluation by guangan 070531 - //u32 NowL, NowH; - //u8Byte BeginTime, EndTime; - u8 regRRSR_RSC; + struct r8192_priv *priv = ieee80211_priv(dev); + u8 regBwOpMode; + u8 regRRSR_RSC; - RT_TRACE(COMP_SCAN, "==>SetBWModeCallback8192SUsbWorkItem() Switch to %s bandwidth\n", \ - priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20?"20MHz":"40MHz"); + RT_TRACE(COMP_SCAN, "%s(): Switch to %s bandwidth", __func__, + priv->CurrentChannelBW == HT_CHANNEL_WIDTH_20 ? "20MHz" : "40MHz"); - if(priv->rf_chip == RF_PSEUDO_11N) - { + if (priv->rf_chip == RF_PSEUDO_11N) { priv->SetBWModeInProgress= FALSE; return; } - if(!priv->up) return; - - // Added it for 20/40 mhz switch time evaluation by guangan 070531 - //NowL = read_nic_dword(dev, TSFR); - //NowH = read_nic_dword(dev, TSFR+4); - //BeginTime = ((u8Byte)NowH << 32) + NowL; - - //3<1>Set MAC register + /* Set MAC register */ regBwOpMode = read_nic_byte(dev, BW_OPMODE); regRRSR_RSC = read_nic_byte(dev, RRSR+2); - - switch(priv->CurrentChannelBW) - { - case HT_CHANNEL_WIDTH_20: - regBwOpMode |= BW_OPMODE_20MHZ; - // 2007/02/07 Mark by Emily becasue we have not verify whether this register works - write_nic_byte(dev, BW_OPMODE, regBwOpMode); - break; - - case HT_CHANNEL_WIDTH_20_40: - regBwOpMode &= ~BW_OPMODE_20MHZ; - // 2007/02/07 Mark by Emily becasue we have not verify whether this register works - write_nic_byte(dev, BW_OPMODE, regBwOpMode); - regRRSR_RSC = (regRRSR_RSC&0x90) |(priv->nCur40MhzPrimeSC<<5); - write_nic_byte(dev, RRSR+2, regRRSR_RSC); - - break; - - default: - RT_TRACE(COMP_DBG, "SetBWModeCallback8192SUsbWorkItem(): unknown Bandwidth: %#X\n", - priv->CurrentChannelBW); - break; + switch (priv->CurrentChannelBW) { + case HT_CHANNEL_WIDTH_20: + regBwOpMode |= BW_OPMODE_20MHZ; + /* we have not verified whether this register works */ + write_nic_byte(dev, BW_OPMODE, regBwOpMode); + break; + case HT_CHANNEL_WIDTH_20_40: + regBwOpMode &= ~BW_OPMODE_20MHZ; + /* we have not verified whether this register works */ + write_nic_byte(dev, BW_OPMODE, regBwOpMode); + regRRSR_RSC = (regRRSR_RSC&0x90) | (priv->nCur40MhzPrimeSC<<5); + write_nic_byte(dev, RRSR+2, regRRSR_RSC); + break; + default: + RT_TRACE(COMP_DBG, "%s(): unknown Bandwidth: %#X", __func__, + priv->CurrentChannelBW); + break; } - - //3 <2>Set PHY related register - switch(priv->CurrentChannelBW) - { - case HT_CHANNEL_WIDTH_20: - rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x0); - rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x0); - - rtl8192_setBBreg(dev, rFPGA0_AnalogParameter2, 0xff, 0x58); - - break; - case HT_CHANNEL_WIDTH_20_40: - rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x1); - rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x1); - - // Set Control channel to upper or lower. These settings are required only for 40MHz - rtl8192_setBBreg(dev, rCCK0_System, bCCKSideBand, (priv->nCur40MhzPrimeSC>>1)); - rtl8192_setBBreg(dev, rOFDM1_LSTF, 0xC00, priv->nCur40MhzPrimeSC); - - rtl8192_setBBreg(dev, rFPGA0_AnalogParameter2, 0xff, 0x18); - - break; - - - default: - RT_TRACE(COMP_DBG, "SetBWModeCallback8192SUsbWorkItem(): unknown Bandwidth: %#X\n"\ - ,priv->CurrentChannelBW); - break; + /* Set PHY related register */ + switch (priv->CurrentChannelBW) { + case HT_CHANNEL_WIDTH_20: + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x0); + rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x0); + rtl8192_setBBreg(dev, rFPGA0_AnalogParameter2, 0xff, 0x58); + break; + case HT_CHANNEL_WIDTH_20_40: + rtl8192_setBBreg(dev, rFPGA0_RFMOD, bRFMOD, 0x1); + rtl8192_setBBreg(dev, rFPGA1_RFMOD, bRFMOD, 0x1); + /* + * Set Control channel to upper or lower. + * These settings are required only for 40MHz + */ + rtl8192_setBBreg(dev, rCCK0_System, bCCKSideBand, + (priv->nCur40MhzPrimeSC>>1)); + rtl8192_setBBreg(dev, rOFDM1_LSTF, 0xC00, + priv->nCur40MhzPrimeSC); + rtl8192_setBBreg(dev, rFPGA0_AnalogParameter2, 0xff, 0x18); + break; + default: + RT_TRACE(COMP_DBG, "%s(): unknown Bandwidth: %#X", __func__, + priv->CurrentChannelBW); + break; } - //Skip over setting of J-mode in BB register here. Default value is "None J mode". Emily 20070315 - - //3<3>Set RF related register - switch( priv->rf_chip ) - { - case RF_8225: - PHY_SetRF8225Bandwidth(dev, priv->CurrentChannelBW); - break; - - case RF_8256: - // Please implement this function in Hal8190PciPhy8256.c - //PHY_SetRF8256Bandwidth(dev, priv->CurrentChannelBW); - break; - - case RF_6052: - PHY_RF6052SetBandwidth(dev, priv->CurrentChannelBW); - break; - - case RF_8258: - // Please implement this function in Hal8190PciPhy8258.c - // PHY_SetRF8258Bandwidth(); - break; - - case RF_PSEUDO_11N: - // Do Nothing - break; + /* + * Skip over setting of J-mode in BB register here. + * Default value is "None J mode". + */ - default: - //RT_ASSERT(FALSE, ("Unknown rf_chip: %d\n", priv->rf_chip)); - break; + /* Set RF related register */ + switch (priv->rf_chip) { + case RF_8225: + PHY_SetRF8225Bandwidth(dev, priv->CurrentChannelBW); + break; + case RF_8256: + /* Please implement this function in Hal8190PciPhy8256.c */ + /* PHY_SetRF8256Bandwidth(dev, priv->CurrentChannelBW); */ + break; + case RF_6052: + PHY_RF6052SetBandwidth(dev, priv->CurrentChannelBW); + break; + case RF_8258: + /* Please implement this function in Hal8190PciPhy8258.c */ + /* PHY_SetRF8258Bandwidth(); */ + break; + case RF_PSEUDO_11N: + /* Do Nothing */ + break; + default: + RT_TRACE(COMP_DBG, "%s(): unknown rf_chip: %d", __func__, + priv->rf_chip); + break; } - priv->SetBWModeInProgress= FALSE; - - RT_TRACE(COMP_SCAN, "<==SetBWModeCallback8192SUsbWorkItem()" ); } //--------------------------Move to oter DIR later-------------------------------*/ -- cgit v0.10.2 From ebbfda1e656b9dd69bd606b1dbba28cd53dd227e Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Thu, 18 Mar 2010 15:18:56 +0100 Subject: Staging: rtl8192su: changed check_reset_cnt to be static again variable check_reset_cnt in rtl819x_watchdog_wqcallback is now static again. also, little cosmetics. Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index 09b9edd..efba608 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -5525,13 +5525,14 @@ void rtl819x_watchdog_wqcallback(struct work_struct *work) struct net_device *dev = priv->ieee80211->dev; struct ieee80211_device* ieee = priv->ieee80211; RESET_TYPE ResetType = RESET_TYPE_NORESET; - u8 check_reset_cnt = 0; + static u8 check_reset_cnt; + u32 TotalRxBcnNum = 0; + u32 TotalRxDataNum = 0; bool bBusyTraffic = false; if(!priv->up) return; hal_dm_watchdog(dev); - /* to get busy traffic condition */ if (ieee->state == IEEE80211_LINKED) { if (ieee->LinkDetectInfo.NumRxOkInPeriod > 666 || @@ -5545,23 +5546,15 @@ void rtl819x_watchdog_wqcallback(struct work_struct *work) if (priv->ieee80211->state == IEEE80211_LINKED && priv->ieee80211->iw_mode == IW_MODE_INFRA) { - u32 TotalRxBcnNum = 0; - u32 TotalRxDataNum = 0; rtl819x_update_rxcounts(priv, &TotalRxBcnNum, &TotalRxDataNum); if ((TotalRxBcnNum + TotalRxDataNum) == 0) { - #ifdef TODO - if (rfState == eRfOff) - RT_TRACE(COMP_ERR, "========>%s()\n", - __func__); - #endif - RT_TRACE(COMP_ERR, "=>%s(): AP is power off," + RT_TRACE(COMP_ERR, "%s(): AP is powered off," "connect another one\n", __func__); /* Dot11d_Reset(dev); */ priv->ieee80211->state = IEEE80211_ASSOCIATING; notify_wx_assoc_event(priv->ieee80211); RemovePeerTS(priv->ieee80211, priv->ieee80211->current_network.bssid); - ieee->is_roaming = true; priv->ieee80211->link_change(dev); queue_work(priv->ieee80211->wq, @@ -5584,11 +5577,11 @@ void rtl819x_watchdog_wqcallback(struct work_struct *work) (!priv->bDisableNormalResetCheck && /* This is control by OID set in Pomelo */ ResetType == RESET_TYPE_SILENT)))) { - RT_TRACE(COMP_RESET, "%s():priv->force_reset is %d," + RT_TRACE(COMP_RESET, "%s(): priv->force_reset is %d," "priv->ResetProgress is %d, " "priv->bForcedSilentReset is %d, " "priv->bDisableNormalResetCheck is %d, " - "ResetType is %d\n", + "ResetType is %d", __func__, priv->force_reset, priv->ResetProgress, @@ -5600,7 +5593,6 @@ void rtl819x_watchdog_wqcallback(struct work_struct *work) priv->force_reset = false; priv->bForcedSilentReset = false; priv->bResetInProgress = false; - RT_TRACE(COMP_TRACE, " <==RtUsbCheckForHangWorkItemCallback()\n"); } void watch_dog_timer_callback(unsigned long data) -- cgit v0.10.2 From 48d9356e7750d3efa3156eb3a76e7a4439774b12 Mon Sep 17 00:00:00 2001 From: Martyn Welch Date: Mon, 22 Mar 2010 14:58:50 +0000 Subject: Staging: vme: Use dev_err rather than printk Replace instances of printk with dev_err where possible. Signed-off-by: Martyn Welch Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vme/bridges/vme_ca91cx42.c b/drivers/staging/vme/bridges/vme_ca91cx42.c index b159ea5..589664c 100644 --- a/drivers/staging/vme/bridges/vme_ca91cx42.c +++ b/drivers/staging/vme/bridges/vme_ca91cx42.c @@ -94,31 +94,35 @@ static u32 ca91cx42_IACK_irqhandler(struct ca91cx42_driver *bridge) return CA91CX42_LINT_SW_IACK; } -static u32 ca91cx42_VERR_irqhandler(struct ca91cx42_driver *bridge) +static u32 ca91cx42_VERR_irqhandler(struct vme_bridge *ca91cx42_bridge) { int val; + struct ca91cx42_driver *bridge; + + bridge = ca91cx42_bridge->driver_priv; val = ioread32(bridge->base + DGCS); if (!(val & 0x00000800)) { - printk(KERN_ERR "ca91c042: ca91cx42_VERR_irqhandler DMA Read " - "Error DGCS=%08X\n", val); + dev_err(ca91cx42_bridge->parent, "ca91cx42_VERR_irqhandler DMA " + "Read Error DGCS=%08X\n", val); } return CA91CX42_LINT_VERR; } -static u32 ca91cx42_LERR_irqhandler(struct ca91cx42_driver *bridge) +static u32 ca91cx42_LERR_irqhandler(struct vme_bridge *ca91cx42_bridge) { int val; + struct ca91cx42_driver *bridge; - val = ioread32(bridge->base + DGCS); + bridge = ca91cx42_bridge->driver_priv; - if (!(val & 0x00000800)) { - printk(KERN_ERR "ca91c042: ca91cx42_LERR_irqhandler DMA Read " - "Error DGCS=%08X\n", val); + val = ioread32(bridge->base + DGCS); - } + if (!(val & 0x00000800)) + dev_err(ca91cx42_bridge->parent, "ca91cx42_LERR_irqhandler DMA " + "Read Error DGCS=%08X\n", val); return CA91CX42_LINT_LERR; } @@ -176,9 +180,9 @@ static irqreturn_t ca91cx42_irqhandler(int irq, void *ptr) if (stat & CA91CX42_LINT_SW_IACK) serviced |= ca91cx42_IACK_irqhandler(bridge); if (stat & CA91CX42_LINT_VERR) - serviced |= ca91cx42_VERR_irqhandler(bridge); + serviced |= ca91cx42_VERR_irqhandler(ca91cx42_bridge); if (stat & CA91CX42_LINT_LERR) - serviced |= ca91cx42_LERR_irqhandler(bridge); + serviced |= ca91cx42_LERR_irqhandler(ca91cx42_bridge); if (stat & (CA91CX42_LINT_VIRQ1 | CA91CX42_LINT_VIRQ2 | CA91CX42_LINT_VIRQ3 | CA91CX42_LINT_VIRQ4 | CA91CX42_LINT_VIRQ5 | CA91CX42_LINT_VIRQ6 | @@ -326,9 +330,12 @@ int ca91cx42_slave_set(struct vme_slave_resource *image, int enabled, unsigned int i, addr = 0, granularity; unsigned int temp_ctl = 0; unsigned int vme_bound, pci_offset; + struct vme_bridge *ca91cx42_bridge; struct ca91cx42_driver *bridge; - bridge = image->parent->driver_priv; + ca91cx42_bridge = image->parent; + + bridge = ca91cx42_bridge->driver_priv; i = image->number; @@ -353,7 +360,7 @@ int ca91cx42_slave_set(struct vme_slave_resource *image, int enabled, case VME_USER3: case VME_USER4: default: - printk(KERN_ERR "Invalid address space\n"); + dev_err(ca91cx42_bridge->parent, "Invalid address space\n"); return -EINVAL; break; } @@ -371,15 +378,18 @@ int ca91cx42_slave_set(struct vme_slave_resource *image, int enabled, granularity = 0x10000; if (vme_base & (granularity - 1)) { - printk(KERN_ERR "Invalid VME base alignment\n"); + dev_err(ca91cx42_bridge->parent, "Invalid VME base " + "alignment\n"); return -EINVAL; } if (vme_bound & (granularity - 1)) { - printk(KERN_ERR "Invalid VME bound alignment\n"); + dev_err(ca91cx42_bridge->parent, "Invalid VME bound " + "alignment\n"); return -EINVAL; } if (pci_offset & (granularity - 1)) { - printk(KERN_ERR "Invalid PCI Offset alignment\n"); + dev_err(ca91cx42_bridge->parent, "Invalid PCI Offset " + "alignment\n"); return -EINVAL; } @@ -491,7 +501,7 @@ static int ca91cx42_alloc_resource(struct vme_master_resource *image, /* Find pci_dev container of dev */ if (ca91cx42_bridge->parent == NULL) { - printk(KERN_ERR "Dev entry NULL\n"); + dev_err(ca91cx42_bridge->parent, "Dev entry NULL\n"); return -EINVAL; } pdev = container_of(ca91cx42_bridge->parent, struct pci_dev, dev); @@ -515,8 +525,8 @@ static int ca91cx42_alloc_resource(struct vme_master_resource *image, if (image->bus_resource.name == NULL) { image->bus_resource.name = kmalloc(VMENAMSIZ+3, GFP_KERNEL); if (image->bus_resource.name == NULL) { - printk(KERN_ERR "Unable to allocate memory for resource" - " name\n"); + dev_err(ca91cx42_bridge->parent, "Unable to allocate " + "memory for resource name\n"); retval = -ENOMEM; goto err_name; } @@ -533,8 +543,8 @@ static int ca91cx42_alloc_resource(struct vme_master_resource *image, &(image->bus_resource), size, size, PCIBIOS_MIN_MEM, 0, NULL, NULL); if (retval) { - printk(KERN_ERR "Failed to allocate mem resource for " - "window %d size 0x%lx start 0x%lx\n", + dev_err(ca91cx42_bridge->parent, "Failed to allocate mem " + "resource for window %d size 0x%lx start 0x%lx\n", image->number, (unsigned long)size, (unsigned long)image->bus_resource.start); goto err_resource; @@ -543,7 +553,7 @@ static int ca91cx42_alloc_resource(struct vme_master_resource *image, image->kern_base = ioremap_nocache( image->bus_resource.start, size); if (image->kern_base == NULL) { - printk(KERN_ERR "Failed to remap resource\n"); + dev_err(ca91cx42_bridge->parent, "Failed to remap resource\n"); retval = -ENOMEM; goto err_remap; } @@ -582,9 +592,12 @@ int ca91cx42_master_set(struct vme_master_resource *image, int enabled, unsigned int i, granularity = 0; unsigned int temp_ctl = 0; unsigned long long pci_bound, vme_offset, pci_base; + struct vme_bridge *ca91cx42_bridge; struct ca91cx42_driver *bridge; - bridge = image->parent->driver_priv; + ca91cx42_bridge = image->parent; + + bridge = ca91cx42_bridge->driver_priv; i = image->number; @@ -595,12 +608,14 @@ int ca91cx42_master_set(struct vme_master_resource *image, int enabled, /* Verify input data */ if (vme_base & (granularity - 1)) { - printk(KERN_ERR "Invalid VME Window alignment\n"); + dev_err(ca91cx42_bridge->parent, "Invalid VME Window " + "alignment\n"); retval = -EINVAL; goto err_window; } if (size & (granularity - 1)) { - printk(KERN_ERR "Invalid VME Window alignment\n"); + dev_err(ca91cx42_bridge->parent, "Invalid VME Window " + "alignment\n"); retval = -EINVAL; goto err_window; } @@ -614,8 +629,8 @@ int ca91cx42_master_set(struct vme_master_resource *image, int enabled, retval = ca91cx42_alloc_resource(image, size); if (retval) { spin_unlock(&(image->lock)); - printk(KERN_ERR "Unable to allocate memory for resource " - "name\n"); + dev_err(ca91cx42_bridge->parent, "Unable to allocate memory " + "for resource name\n"); retval = -ENOMEM; goto err_res; } @@ -658,7 +673,7 @@ int ca91cx42_master_set(struct vme_master_resource *image, int enabled, break; default: spin_unlock(&(image->lock)); - printk(KERN_ERR "Invalid data width\n"); + dev_err(ca91cx42_bridge->parent, "Invalid data width\n"); retval = -EINVAL; goto err_dwidth; break; @@ -690,7 +705,7 @@ int ca91cx42_master_set(struct vme_master_resource *image, int enabled, case VME_USER4: default: spin_unlock(&(image->lock)); - printk(KERN_ERR "Invalid address space\n"); + dev_err(ca91cx42_bridge->parent, "Invalid address space\n"); retval = -EINVAL; goto err_aspace; break; @@ -921,12 +936,15 @@ int ca91cx42_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, struct vme_dma_vme *vme_attr; dma_addr_t desc_ptr; int retval = 0; + struct device *dev; + + dev = list->parent->parent->parent; /* XXX descriptor must be aligned on 64-bit boundaries */ entry = (struct ca91cx42_dma_entry *) kmalloc(sizeof(struct ca91cx42_dma_entry), GFP_KERNEL); if (entry == NULL) { - printk(KERN_ERR "Failed to allocate memory for dma resource " + dev_err(dev, "Failed to allocate memory for dma resource " "structure\n"); retval = -ENOMEM; goto err_mem; @@ -934,7 +952,7 @@ int ca91cx42_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, /* Test descriptor alignment */ if ((unsigned long)&(entry->descriptor) & CA91CX42_DCPP_M) { - printk("Descriptor not aligned to 16 byte boundary as " + dev_err(dev, "Descriptor not aligned to 16 byte boundary as " "required: %p\n", &(entry->descriptor)); retval = -EINVAL; goto err_align; @@ -955,7 +973,7 @@ int ca91cx42_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, if ((vme_attr->aspace & ~(VME_A16 | VME_A24 | VME_A32 | VME_USER1 | VME_USER2)) != 0) { - printk(KERN_ERR "Unsupported cycle type\n"); + dev_err(dev, "Unsupported cycle type\n"); retval = -EINVAL; goto err_aspace; } @@ -963,7 +981,7 @@ int ca91cx42_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, if ((vme_attr->cycle & ~(VME_SCT | VME_BLT | VME_SUPER | VME_USER | VME_PROG | VME_DATA)) != 0) { - printk(KERN_ERR "Unsupported cycle type\n"); + dev_err(dev, "Unsupported cycle type\n"); retval = -EINVAL; goto err_cycle; } @@ -972,7 +990,7 @@ int ca91cx42_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, if (!(((src->type == VME_DMA_PCI) && (dest->type == VME_DMA_VME)) || ((src->type == VME_DMA_VME) && (dest->type == VME_DMA_PCI)))) { - printk(KERN_ERR "Cannot perform transfer with this " + dev_err(dev, "Cannot perform transfer with this " "source-destination combination\n"); retval = -EINVAL; goto err_direct; @@ -997,7 +1015,7 @@ int ca91cx42_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, entry->descriptor.dctl |= CA91CX42_DCTL_VDW_D64; break; default: - printk(KERN_ERR "Invalid data width\n"); + dev_err(dev, "Invalid data width\n"); return -EINVAL; } @@ -1019,7 +1037,7 @@ int ca91cx42_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, entry->descriptor.dctl |= CA91CX42_DCTL_VAS_USER2; break; default: - printk(KERN_ERR "Invalid address space\n"); + dev_err(dev, "Invalid address space\n"); return -EINVAL; break; } @@ -1079,12 +1097,13 @@ int ca91cx42_dma_list_exec(struct vme_dma_list *list) int retval = 0; dma_addr_t bus_addr; u32 val; - + struct device *dev; struct ca91cx42_driver *bridge; ctrlr = list->parent; bridge = ctrlr->parent->driver_priv; + dev = ctrlr->parent->parent; mutex_lock(&(ctrlr->mtx)); @@ -1140,7 +1159,7 @@ int ca91cx42_dma_list_exec(struct vme_dma_list *list) if (val & (CA91CX42_DGCS_LERR | CA91CX42_DGCS_VERR | CA91CX42_DGCS_PERR)) { - printk(KERN_ERR "ca91c042: DMA Error. DGCS=%08X\n", val); + dev_err(dev, "ca91c042: DMA Error. DGCS=%08X\n", val); val = ioread32(bridge->base + DCTL); } diff --git a/drivers/staging/vme/bridges/vme_tsi148.c b/drivers/staging/vme/bridges/vme_tsi148.c index 68f2442..fa0dc4a 100644 --- a/drivers/staging/vme/bridges/vme_tsi148.c +++ b/drivers/staging/vme/bridges/vme_tsi148.c @@ -137,16 +137,20 @@ static u32 tsi148_LM_irqhandler(struct tsi148_driver *bridge, u32 stat) * * XXX This functionality is not exposed up though API. */ -static u32 tsi148_MB_irqhandler(struct tsi148_driver *bridge, u32 stat) +static u32 tsi148_MB_irqhandler(struct vme_bridge *tsi148_bridge, u32 stat) { int i; u32 val; u32 serviced = 0; + struct tsi148_driver *bridge; + + bridge = tsi148_bridge->driver_priv; for (i = 0; i < 4; i++) { if(stat & TSI148_LCSR_INTS_MBS[i]) { val = ioread32be(bridge->base + TSI148_GCSR_MBOX[i]); - printk("VME Mailbox %d received: 0x%x\n", i, val); + dev_err(tsi148_bridge->parent, "VME Mailbox %d received" + ": 0x%x\n", i, val); serviced |= TSI148_LCSR_INTC_MBC[i]; } } @@ -157,19 +161,22 @@ static u32 tsi148_MB_irqhandler(struct tsi148_driver *bridge, u32 stat) /* * Display error & status message when PERR (PCI) exception interrupt occurs. */ -static u32 tsi148_PERR_irqhandler(struct tsi148_driver *bridge) +static u32 tsi148_PERR_irqhandler(struct vme_bridge *tsi148_bridge) { - printk(KERN_ERR - "PCI Exception at address: 0x%08x:%08x, attributes: %08x\n", + struct tsi148_driver *bridge; + + bridge = tsi148_bridge->driver_priv; + + dev_err(tsi148_bridge->parent, "PCI Exception at address: 0x%08x:%08x, " + "attributes: %08x\n", ioread32be(bridge->base + TSI148_LCSR_EDPAU), ioread32be(bridge->base + TSI148_LCSR_EDPAL), - ioread32be(bridge->base + TSI148_LCSR_EDPAT) - ); - printk(KERN_ERR - "PCI-X attribute reg: %08x, PCI-X split completion reg: %08x\n", + ioread32be(bridge->base + TSI148_LCSR_EDPAT)); + + dev_err(tsi148_bridge->parent, "PCI-X attribute reg: %08x, PCI-X split " + "completion reg: %08x\n", ioread32be(bridge->base + TSI148_LCSR_EDPXA), - ioread32be(bridge->base + TSI148_LCSR_EDPXS) - ); + ioread32be(bridge->base + TSI148_LCSR_EDPXS)); iowrite32be(TSI148_LCSR_EDPAT_EDPCL, bridge->base + TSI148_LCSR_EDPAT); @@ -197,7 +204,8 @@ static u32 tsi148_VERR_irqhandler(struct vme_bridge *tsi148_bridge) /* Check for exception register overflow (we have lost error data) */ if(error_attrib & TSI148_LCSR_VEAT_VEOF) { - printk(KERN_ERR "VME Bus Exception Overflow Occurred\n"); + dev_err(tsi148_bridge->parent, "VME Bus Exception Overflow " + "Occurred\n"); } error = (struct vme_bus_error *)kmalloc(sizeof (struct vme_bus_error), @@ -207,11 +215,10 @@ static u32 tsi148_VERR_irqhandler(struct vme_bridge *tsi148_bridge) error->attributes = error_attrib; list_add_tail(&(error->list), &(tsi148_bridge->vme_errors)); } else { - printk(KERN_ERR - "Unable to alloc memory for VMEbus Error reporting\n"); - printk(KERN_ERR - "VME Bus Error at address: 0x%llx, attributes: %08x\n", - error_addr, error_attrib); + dev_err(tsi148_bridge->parent, "Unable to alloc memory for " + "VMEbus Error reporting\n"); + dev_err(tsi148_bridge->parent, "VME Bus Error at address: " + "0x%llx, attributes: %08x\n", error_addr, error_attrib); } /* Clear Status */ @@ -298,11 +305,11 @@ static irqreturn_t tsi148_irqhandler(int irq, void *ptr) /* Mail box irqs */ if (stat & (TSI148_LCSR_INTS_MB3S | TSI148_LCSR_INTS_MB2S | TSI148_LCSR_INTS_MB1S | TSI148_LCSR_INTS_MB0S)) - serviced |= tsi148_MB_irqhandler(bridge, stat); + serviced |= tsi148_MB_irqhandler(tsi148_bridge, stat); /* PCI bus error */ if (stat & TSI148_LCSR_INTS_PERRS) - serviced |= tsi148_PERR_irqhandler(bridge); + serviced |= tsi148_PERR_irqhandler(tsi148_bridge); /* VME bus error */ if (stat & TSI148_LCSR_INTS_VERRS) @@ -346,8 +353,8 @@ static int tsi148_irq_init(struct vme_bridge *tsi148_bridge) IRQF_SHARED, driver_name, tsi148_bridge); if (result) { - dev_err(&pdev->dev, "Can't get assigned pci irq vector %02X\n", - pdev->irq); + dev_err(tsi148_bridge->parent, "Can't get assigned pci irq " + "vector %02X\n", pdev->irq); return result; } @@ -568,9 +575,11 @@ int tsi148_slave_set(struct vme_slave_resource *image, int enabled, unsigned int vme_bound_low, vme_bound_high; unsigned int pci_offset_low, pci_offset_high; unsigned long long vme_bound, pci_offset; + struct vme_bridge *tsi148_bridge; struct tsi148_driver *bridge; - bridge = image->parent->driver_priv; + tsi148_bridge = image->parent; + bridge = tsi148_bridge->driver_priv; i = image->number; @@ -597,7 +606,7 @@ int tsi148_slave_set(struct vme_slave_resource *image, int enabled, case VME_USER3: case VME_USER4: default: - printk("Invalid address space\n"); + dev_err(tsi148_bridge->parent, "Invalid address space\n"); return -EINVAL; break; } @@ -615,15 +624,16 @@ int tsi148_slave_set(struct vme_slave_resource *image, int enabled, reg_split(pci_offset, &pci_offset_high, &pci_offset_low); if (vme_base_low & (granularity - 1)) { - printk("Invalid VME base alignment\n"); + dev_err(tsi148_bridge->parent, "Invalid VME base alignment\n"); return -EINVAL; } if (vme_bound_low & (granularity - 1)) { - printk("Invalid VME bound alignment\n"); + dev_err(tsi148_bridge->parent, "Invalid VME bound alignment\n"); return -EINVAL; } if (pci_offset_low & (granularity - 1)) { - printk("Invalid PCI Offset alignment\n"); + dev_err(tsi148_bridge->parent, "Invalid PCI Offset " + "alignment\n"); return -EINVAL; } @@ -815,12 +825,7 @@ static int tsi148_alloc_resource(struct vme_master_resource *image, tsi148_bridge = image->parent; - /* Find pci_dev container of dev */ - if (tsi148_bridge->parent == NULL) { - printk("Dev entry NULL\n"); - return -EINVAL; - } - pdev = container_of(tsi148_bridge->parent, struct pci_dev, dev); + pdev = container_of(tsi148_bridge->parent, struct pci_dev, dev); existing_size = (unsigned long long)(image->bus_resource.end - image->bus_resource.start); @@ -846,8 +851,8 @@ static int tsi148_alloc_resource(struct vme_master_resource *image, if (image->bus_resource.name == NULL) { image->bus_resource.name = kmalloc(VMENAMSIZ+3, GFP_KERNEL); if (image->bus_resource.name == NULL) { - printk(KERN_ERR "Unable to allocate memory for resource" - " name\n"); + dev_err(tsi148_bridge->parent, "Unable to allocate " + "memory for resource name\n"); retval = -ENOMEM; goto err_name; } @@ -864,8 +869,8 @@ static int tsi148_alloc_resource(struct vme_master_resource *image, &(image->bus_resource), size, size, PCIBIOS_MIN_MEM, 0, NULL, NULL); if (retval) { - printk(KERN_ERR "Failed to allocate mem resource for " - "window %d size 0x%lx start 0x%lx\n", + dev_err(tsi148_bridge->parent, "Failed to allocate mem " + "resource for window %d size 0x%lx start 0x%lx\n", image->number, (unsigned long)size, (unsigned long)image->bus_resource.start); goto err_resource; @@ -874,7 +879,7 @@ static int tsi148_alloc_resource(struct vme_master_resource *image, image->kern_base = ioremap_nocache( image->bus_resource.start, size); if (image->kern_base == NULL) { - printk(KERN_ERR "Failed to remap resource\n"); + dev_err(tsi148_bridge->parent, "Failed to remap resource\n"); retval = -ENOMEM; goto err_remap; } @@ -918,19 +923,24 @@ int tsi148_master_set( struct vme_master_resource *image, int enabled, unsigned int pci_bound_low, pci_bound_high; unsigned int vme_offset_low, vme_offset_high; unsigned long long pci_bound, vme_offset, pci_base; + struct vme_bridge *tsi148_bridge; struct tsi148_driver *bridge; - bridge = image->parent->driver_priv; + tsi148_bridge = image->parent; + + bridge = tsi148_bridge->driver_priv; /* Verify input data */ if (vme_base & 0xFFFF) { - printk(KERN_ERR "Invalid VME Window alignment\n"); + dev_err(tsi148_bridge->parent, "Invalid VME Window " + "alignment\n"); retval = -EINVAL; goto err_window; } if ((size == 0) && (enabled != 0)) { - printk(KERN_ERR "Size must be non-zero for enabled windows\n"); + dev_err(tsi148_bridge->parent, "Size must be non-zero for " + "enabled windows\n"); retval = -EINVAL; goto err_window; } @@ -944,7 +954,7 @@ int tsi148_master_set( struct vme_master_resource *image, int enabled, retval = tsi148_alloc_resource(image, size); if (retval) { spin_unlock(&(image->lock)); - printk(KERN_ERR "Unable to allocate memory for " + dev_err(tsi148_bridge->parent, "Unable to allocate memory for " "resource\n"); goto err_res; } @@ -971,19 +981,20 @@ int tsi148_master_set( struct vme_master_resource *image, int enabled, if (pci_base_low & 0xFFFF) { spin_unlock(&(image->lock)); - printk(KERN_ERR "Invalid PCI base alignment\n"); + dev_err(tsi148_bridge->parent, "Invalid PCI base alignment\n"); retval = -EINVAL; goto err_gran; } if (pci_bound_low & 0xFFFF) { spin_unlock(&(image->lock)); - printk(KERN_ERR "Invalid PCI bound alignment\n"); + dev_err(tsi148_bridge->parent, "Invalid PCI bound alignment\n"); retval = -EINVAL; goto err_gran; } if (vme_offset_low & 0xFFFF) { spin_unlock(&(image->lock)); - printk(KERN_ERR "Invalid VME Offset alignment\n"); + dev_err(tsi148_bridge->parent, "Invalid VME Offset " + "alignment\n"); retval = -EINVAL; goto err_gran; } @@ -1029,8 +1040,8 @@ int tsi148_master_set( struct vme_master_resource *image, int enabled, temp_ctl |= TSI148_LCSR_OTAT_TM_2eSST; } if (cycle & VME_2eSSTB) { - printk(KERN_WARNING "Currently not setting Broadcast Select " - "Registers\n"); + dev_warn(tsi148_bridge->parent, "Currently not setting " + "Broadcast Select Registers\n"); temp_ctl &= ~TSI148_LCSR_OTAT_TM_M; temp_ctl |= TSI148_LCSR_OTAT_TM_2eSSTB; } @@ -1046,7 +1057,7 @@ int tsi148_master_set( struct vme_master_resource *image, int enabled, break; default: spin_unlock(&(image->lock)); - printk(KERN_ERR "Invalid data width\n"); + dev_err(tsi148_bridge->parent, "Invalid data width\n"); retval = -EINVAL; goto err_dwidth; } @@ -1083,7 +1094,7 @@ int tsi148_master_set( struct vme_master_resource *image, int enabled, break; default: spin_unlock(&(image->lock)); - printk(KERN_ERR "Invalid address space\n"); + dev_err(tsi148_bridge->parent, "Invalid address space\n"); retval = -EINVAL; goto err_aspace; break; @@ -1353,8 +1364,8 @@ ssize_t tsi148_master_write(struct vme_master_resource *image, void *buf, vme_err = tsi148_find_error(tsi148_bridge, aspace, vme_base + offset, count); if(vme_err != NULL) { - printk("First VME write error detected an at address 0x%llx\n", - vme_err->address); + dev_warn(tsi148_bridge->parent, "First VME write error detected" + " an at address 0x%llx\n", vme_err->address); retval = vme_err->address - (vme_base + offset); /* Clear down save errors in this address range */ tsi148_clear_errors(tsi148_bridge, aspace, vme_base + offset, @@ -1428,8 +1439,8 @@ unsigned int tsi148_master_rmw(struct vme_master_resource *image, return result; } -static int tsi148_dma_set_vme_src_attributes (u32 *attr, vme_address_t aspace, - vme_cycle_t cycle, vme_width_t dwidth) +static int tsi148_dma_set_vme_src_attributes(struct device *dev, u32 *attr, + vme_address_t aspace, vme_cycle_t cycle, vme_width_t dwidth) { /* Setup 2eSST speeds */ switch (cycle & (VME_2eSST160 | VME_2eSST267 | VME_2eSST320)) { @@ -1461,7 +1472,8 @@ static int tsi148_dma_set_vme_src_attributes (u32 *attr, vme_address_t aspace, *attr |= TSI148_LCSR_DSAT_TM_2eSST; } if (cycle & VME_2eSSTB) { - printk("Currently not setting Broadcast Select Registers\n"); + dev_err(dev, "Currently not setting Broadcast Select " + "Registers\n"); *attr |= TSI148_LCSR_DSAT_TM_2eSSTB; } @@ -1474,7 +1486,7 @@ static int tsi148_dma_set_vme_src_attributes (u32 *attr, vme_address_t aspace, *attr |= TSI148_LCSR_DSAT_DBW_32; break; default: - printk("Invalid data width\n"); + dev_err(dev, "Invalid data width\n"); return -EINVAL; } @@ -1508,7 +1520,7 @@ static int tsi148_dma_set_vme_src_attributes (u32 *attr, vme_address_t aspace, *attr |= TSI148_LCSR_DSAT_AMODE_USER4; break; default: - printk("Invalid address space\n"); + dev_err(dev, "Invalid address space\n"); return -EINVAL; break; } @@ -1521,8 +1533,8 @@ static int tsi148_dma_set_vme_src_attributes (u32 *attr, vme_address_t aspace, return 0; } -static int tsi148_dma_set_vme_dest_attributes(u32 *attr, vme_address_t aspace, - vme_cycle_t cycle, vme_width_t dwidth) +static int tsi148_dma_set_vme_dest_attributes(struct device *dev, u32 *attr, + vme_address_t aspace, vme_cycle_t cycle, vme_width_t dwidth) { /* Setup 2eSST speeds */ switch (cycle & (VME_2eSST160 | VME_2eSST267 | VME_2eSST320)) { @@ -1554,7 +1566,8 @@ static int tsi148_dma_set_vme_dest_attributes(u32 *attr, vme_address_t aspace, *attr |= TSI148_LCSR_DDAT_TM_2eSST; } if (cycle & VME_2eSSTB) { - printk("Currently not setting Broadcast Select Registers\n"); + dev_err(dev, "Currently not setting Broadcast Select " + "Registers\n"); *attr |= TSI148_LCSR_DDAT_TM_2eSSTB; } @@ -1567,7 +1580,7 @@ static int tsi148_dma_set_vme_dest_attributes(u32 *attr, vme_address_t aspace, *attr |= TSI148_LCSR_DDAT_DBW_32; break; default: - printk("Invalid data width\n"); + dev_err(dev, "Invalid data width\n"); return -EINVAL; } @@ -1601,7 +1614,7 @@ static int tsi148_dma_set_vme_dest_attributes(u32 *attr, vme_address_t aspace, *attr |= TSI148_LCSR_DDAT_AMODE_USER4; break; default: - printk("Invalid address space\n"); + dev_err(dev, "Invalid address space\n"); return -EINVAL; break; } @@ -1627,21 +1640,25 @@ int tsi148_dma_list_add (struct vme_dma_list *list, struct vme_dma_attr *src, struct vme_dma_vme *vme_attr; dma_addr_t desc_ptr; int retval = 0; + struct vme_bridge *tsi148_bridge; + + tsi148_bridge = list->parent->parent; /* Descriptor must be aligned on 64-bit boundaries */ entry = (struct tsi148_dma_entry *)kmalloc( sizeof(struct tsi148_dma_entry), GFP_KERNEL); if (entry == NULL) { - printk("Failed to allocate memory for dma resource " - "structure\n"); + dev_err(tsi148_bridge->parent, "Failed to allocate memory for " + "dma resource structure\n"); retval = -ENOMEM; goto err_mem; } /* Test descriptor alignment */ if ((unsigned long)&(entry->descriptor) & 0x7) { - printk("Descriptor not aligned to 8 byte boundary as " - "required: %p\n", &(entry->descriptor)); + dev_err(tsi148_bridge->parent, "Descriptor not aligned to 8 " + "byte boundary as required: %p\n", + &(entry->descriptor)); retval = -EINVAL; goto err_align; } @@ -1686,13 +1703,13 @@ int tsi148_dma_list_add (struct vme_dma_list *list, struct vme_dma_attr *src, entry->descriptor.dsat = TSI148_LCSR_DSAT_TYP_VME; retval = tsi148_dma_set_vme_src_attributes( - &(entry->descriptor.dsat), vme_attr->aspace, - vme_attr->cycle, vme_attr->dwidth); + tsi148_bridge->parent, &(entry->descriptor.dsat), + vme_attr->aspace, vme_attr->cycle, vme_attr->dwidth); if(retval < 0 ) goto err_source; break; default: - printk("Invalid source type\n"); + dev_err(tsi148_bridge->parent, "Invalid source type\n"); retval = -EINVAL; goto err_source; break; @@ -1724,13 +1741,13 @@ int tsi148_dma_list_add (struct vme_dma_list *list, struct vme_dma_attr *src, entry->descriptor.ddat = TSI148_LCSR_DDAT_TYP_VME; retval = tsi148_dma_set_vme_dest_attributes( - &(entry->descriptor.ddat), vme_attr->aspace, - vme_attr->cycle, vme_attr->dwidth); + tsi148_bridge->parent, &(entry->descriptor.ddat), + vme_attr->aspace, vme_attr->cycle, vme_attr->dwidth); if(retval < 0 ) goto err_dest; break; default: - printk("Invalid destination type\n"); + dev_err(tsi148_bridge->parent, "Invalid destination type\n"); retval = -EINVAL; goto err_dest; break; @@ -1795,11 +1812,14 @@ int tsi148_dma_list_exec(struct vme_dma_list *list) dma_addr_t bus_addr; u32 bus_addr_high, bus_addr_low; u32 val, dctlreg = 0; + struct vme_bridge *tsi148_bridge; struct tsi148_driver *bridge; ctrlr = list->parent; - bridge = ctrlr->parent->driver_priv; + tsi148_bridge = ctrlr->parent; + + bridge = tsi148_bridge->driver_priv; mutex_lock(&(ctrlr->mtx)); @@ -1847,7 +1867,7 @@ int tsi148_dma_list_exec(struct vme_dma_list *list) TSI148_LCSR_OFFSET_DSTA); if (val & TSI148_LCSR_DSTA_VBE) { - printk(KERN_ERR "tsi148: DMA Error. DSTA=%08X\n", val); + dev_err(tsi148_bridge->parent, "DMA Error. DSTA=%08X\n", val); retval = -EIO; } @@ -1891,9 +1911,12 @@ int tsi148_lm_set(struct vme_lm_resource *lm, unsigned long long lm_base, { u32 lm_base_high, lm_base_low, lm_ctl = 0; int i; + struct vme_bridge *tsi148_bridge; struct tsi148_driver *bridge; - bridge = lm->parent->driver_priv; + tsi148_bridge = lm->parent; + + bridge = tsi148_bridge->driver_priv; mutex_lock(&(lm->mtx)); @@ -1901,8 +1924,8 @@ int tsi148_lm_set(struct vme_lm_resource *lm, unsigned long long lm_base, for (i = 0; i < lm->monitors; i++) { if (bridge->lm_callback[i] != NULL) { mutex_unlock(&(lm->mtx)); - printk("Location monitor callback attached, can't " - "reset\n"); + dev_err(tsi148_bridge->parent, "Location monitor " + "callback attached, can't reset\n"); return -EBUSY; } } @@ -1922,7 +1945,7 @@ int tsi148_lm_set(struct vme_lm_resource *lm, unsigned long long lm_base, break; default: mutex_unlock(&(lm->mtx)); - printk("Invalid address space\n"); + dev_err(tsi148_bridge->parent, "Invalid address space\n"); return -EINVAL; break; } @@ -2005,9 +2028,12 @@ int tsi148_lm_attach(struct vme_lm_resource *lm, int monitor, void (*callback)(int)) { u32 lm_ctl, tmp; + struct vme_bridge *tsi148_bridge; struct tsi148_driver *bridge; - bridge = lm->parent->driver_priv; + tsi148_bridge = lm->parent; + + bridge = tsi148_bridge->driver_priv; mutex_lock(&(lm->mtx)); @@ -2015,14 +2041,15 @@ int tsi148_lm_attach(struct vme_lm_resource *lm, int monitor, lm_ctl = ioread32be(bridge->base + TSI148_LCSR_LMAT); if ((lm_ctl & (TSI148_LCSR_LMAT_PGM | TSI148_LCSR_LMAT_DATA)) == 0) { mutex_unlock(&(lm->mtx)); - printk("Location monitor not properly configured\n"); + dev_err(tsi148_bridge->parent, "Location monitor not properly " + "configured\n"); return -EINVAL; } /* Check that a callback isn't already attached */ if (bridge->lm_callback[monitor] != NULL) { mutex_unlock(&(lm->mtx)); - printk("Existing callback attached\n"); + dev_err(tsi148_bridge->parent, "Existing callback attached\n"); return -EBUSY; } @@ -2139,8 +2166,8 @@ static int tsi148_crcsr_init(struct vme_bridge *tsi148_bridge, bridge->crcsr_kernel = pci_alloc_consistent(pdev, VME_CRCSR_BUF_SIZE, &(bridge->crcsr_bus)); if (bridge->crcsr_kernel == NULL) { - dev_err(&pdev->dev, "Failed to allocate memory for CR/CSR " - "image\n"); + dev_err(tsi148_bridge->parent, "Failed to allocate memory for " + "CR/CSR image\n"); return -ENOMEM; } @@ -2159,18 +2186,18 @@ static int tsi148_crcsr_init(struct vme_bridge *tsi148_bridge, if (cbar != vstat) { cbar = vstat; - dev_info(&pdev->dev, "Setting CR/CSR offset\n"); + dev_info(tsi148_bridge->parent, "Setting CR/CSR offset\n"); iowrite32be(cbar<<3, bridge->base + TSI148_CBAR); } - dev_info(&pdev->dev, "CR/CSR Offset: %d\n", cbar); + dev_info(tsi148_bridge->parent, "CR/CSR Offset: %d\n", cbar); crat = ioread32be(bridge->base + TSI148_LCSR_CRAT); if (crat & TSI148_LCSR_CRAT_EN) { - dev_info(&pdev->dev, "Enabling CR/CSR space\n"); + dev_info(tsi148_bridge->parent, "Enabling CR/CSR space\n"); iowrite32be(crat | TSI148_LCSR_CRAT_EN, bridge->base + TSI148_LCSR_CRAT); } else - dev_info(&pdev->dev, "CR/CSR already enabled\n"); + dev_info(tsi148_bridge->parent, "CR/CSR already enabled\n"); /* If we want flushed, error-checked writes, set up a window * over the CR/CSR registers. We read from here to safely flush @@ -2181,7 +2208,8 @@ static int tsi148_crcsr_init(struct vme_bridge *tsi148_bridge, (vstat * 0x80000), 0x80000, VME_CRCSR, VME_SCT, VME_D16); if (retval) - dev_err(&pdev->dev, "Configuring flush image failed\n"); + dev_err(tsi148_bridge->parent, "Configuring flush image" + " failed\n"); } return 0; @@ -2623,8 +2651,6 @@ static void tsi148_remove(struct pci_dev *pdev) static void __exit tsi148_exit(void) { pci_unregister_driver(&tsi148_driver); - - printk(KERN_DEBUG "Driver removed.\n"); } MODULE_PARM_DESC(err_chk, "Check for VME errors on reads and writes"); -- cgit v0.10.2 From 7946328faf1dca9bfadf98f4579f95aafffaba0f Mon Sep 17 00:00:00 2001 From: Martyn Welch Date: Mon, 22 Mar 2010 14:58:57 +0000 Subject: Staging: vme: Correct checkpatch errors Correct numerous checkpatch errors in the vme driver. Signed-off-by: Martyn Welch Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vme/bridges/vme_ca91cx42.c b/drivers/staging/vme/bridges/vme_ca91cx42.c index 589664c..b9f986b 100644 --- a/drivers/staging/vme/bridges/vme_ca91cx42.c +++ b/drivers/staging/vme/bridges/vme_ca91cx42.c @@ -26,9 +26,9 @@ #include #include #include -#include -#include -#include +#include +#include +#include #include "../vme.h" #include "../vme_bridge.h" @@ -1684,9 +1684,8 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id) dev_info(&pdev->dev, "Slot ID is %d\n", ca91cx42_slot_get(ca91cx42_bridge)); - if (ca91cx42_crcsr_init(ca91cx42_bridge, pdev)) { + if (ca91cx42_crcsr_init(ca91cx42_bridge, pdev)) dev_err(&pdev->dev, "CR/CSR configuration failed.\n"); - } /* Need to save ca91cx42_bridge pointer locally in link list for use in * ca91cx42_remove() diff --git a/drivers/staging/vme/bridges/vme_tsi148.c b/drivers/staging/vme/bridges/vme_tsi148.c index fa0dc4a..25987d4 100644 --- a/drivers/staging/vme/bridges/vme_tsi148.c +++ b/drivers/staging/vme/bridges/vme_tsi148.c @@ -26,9 +26,9 @@ #include #include #include -#include -#include -#include +#include +#include +#include #include "../vme.h" #include "../vme_bridge.h" @@ -40,27 +40,6 @@ static void tsi148_remove(struct pci_dev *); static void __exit tsi148_exit(void); -int tsi148_slave_set(struct vme_slave_resource *, int, unsigned long long, - unsigned long long, dma_addr_t, vme_address_t, vme_cycle_t); -int tsi148_slave_get(struct vme_slave_resource *, int *, unsigned long long *, - unsigned long long *, dma_addr_t *, vme_address_t *, vme_cycle_t *); - -int tsi148_master_get(struct vme_master_resource *, int *, unsigned long long *, - unsigned long long *, vme_address_t *, vme_cycle_t *, vme_width_t *); -int tsi148_master_set(struct vme_master_resource *, int, unsigned long long, - unsigned long long, vme_address_t, vme_cycle_t, vme_width_t); -ssize_t tsi148_master_read(struct vme_master_resource *, void *, size_t, - loff_t); -ssize_t tsi148_master_write(struct vme_master_resource *, void *, size_t, - loff_t); -unsigned int tsi148_master_rmw(struct vme_master_resource *, unsigned int, - unsigned int, unsigned int, loff_t); -int tsi148_dma_list_add (struct vme_dma_list *, struct vme_dma_attr *, - struct vme_dma_attr *, size_t); -int tsi148_dma_list_exec(struct vme_dma_list *); -int tsi148_dma_list_empty(struct vme_dma_list *); -int tsi148_generate_irq(int, int); - /* Module parameter */ static int err_chk; static int geoid; @@ -122,7 +101,7 @@ static u32 tsi148_LM_irqhandler(struct tsi148_driver *bridge, u32 stat) u32 serviced = 0; for (i = 0; i < 4; i++) { - if(stat & TSI148_LCSR_INTS_LMS[i]) { + if (stat & TSI148_LCSR_INTS_LMS[i]) { /* We only enable interrupts if the callback is set */ bridge->lm_callback[i](i); serviced |= TSI148_LCSR_INTC_LMC[i]; @@ -147,7 +126,7 @@ static u32 tsi148_MB_irqhandler(struct vme_bridge *tsi148_bridge, u32 stat) bridge = tsi148_bridge->driver_priv; for (i = 0; i < 4; i++) { - if(stat & TSI148_LCSR_INTS_MBS[i]) { + if (stat & TSI148_LCSR_INTS_MBS[i]) { val = ioread32be(bridge->base + TSI148_GCSR_MBOX[i]); dev_err(tsi148_bridge->parent, "VME Mailbox %d received" ": 0x%x\n", i, val); @@ -203,13 +182,12 @@ static u32 tsi148_VERR_irqhandler(struct vme_bridge *tsi148_bridge) reg_join(error_addr_high, error_addr_low, &error_addr); /* Check for exception register overflow (we have lost error data) */ - if(error_attrib & TSI148_LCSR_VEAT_VEOF) { + if (error_attrib & TSI148_LCSR_VEAT_VEOF) { dev_err(tsi148_bridge->parent, "VME Bus Exception Overflow " "Occurred\n"); } - error = (struct vme_bus_error *)kmalloc(sizeof (struct vme_bus_error), - GFP_ATOMIC); + error = kmalloc(sizeof(struct vme_bus_error), GFP_ATOMIC); if (error) { error->address = error_addr; error->attributes = error_attrib; @@ -251,10 +229,9 @@ static u32 tsi148_VIRQ_irqhandler(struct vme_bridge *tsi148_bridge, for (i = 7; i > 0; i--) { if (stat & (1 << i)) { /* - * Note: Even though the registers are defined - * as 32-bits in the spec, we only want to issue - * 8-bit IACK cycles on the bus, read from offset - * 3. + * Note: Even though the registers are defined as + * 32-bits in the spec, we only want to issue 8-bit + * IACK cycles on the bus, read from offset 3. */ vec = ioread8(bridge->base + TSI148_LCSR_VIACK[i] + 3); @@ -288,9 +265,8 @@ static irqreturn_t tsi148_irqhandler(int irq, void *ptr) /* Only look at unmasked interrupts */ stat &= enable; - if (unlikely(!stat)) { + if (unlikely(!stat)) return IRQ_NONE; - } /* Call subhandlers as appropriate */ /* DMA irqs */ @@ -522,7 +498,9 @@ static struct vme_bus_error *tsi148_find_error(struct vme_bridge *tsi148_bridge, /* Iterate through errors */ list_for_each(err_pos, &(tsi148_bridge->vme_errors)) { vme_err = list_entry(err_pos, struct vme_bus_error, list); - if((vme_err->address >= address) && (vme_err->address < bound)){ + if ((vme_err->address >= address) && + (vme_err->address < bound)) { + valid = vme_err; break; } @@ -555,7 +533,9 @@ static void tsi148_clear_errors(struct vme_bridge *tsi148_bridge, list_for_each_safe(err_pos, temp, &(tsi148_bridge->vme_errors)) { vme_err = list_entry(err_pos, struct vme_bus_error, list); - if((vme_err->address >= address) && (vme_err->address < bound)){ + if ((vme_err->address >= address) && + (vme_err->address < bound)) { + list_del(err_pos); kfree(vme_err); } @@ -844,9 +824,8 @@ static int tsi148_alloc_resource(struct vme_master_resource *image, } /* Exit here if size is zero */ - if (size == 0) { + if (size == 0) return 0; - } if (image->bus_resource.name == NULL) { image->bus_resource.name = kmalloc(VMENAMSIZ+3, GFP_KERNEL); @@ -912,7 +891,7 @@ static void tsi148_free_resource(struct vme_master_resource *image) /* * Set the attributes of an outbound window. */ -int tsi148_master_set( struct vme_master_resource *image, int enabled, +int tsi148_master_set(struct vme_master_resource *image, int enabled, unsigned long long vme_base, unsigned long long size, vme_address_t aspace, vme_cycle_t cycle, vme_width_t dwidth) { @@ -1148,7 +1127,7 @@ err_window: * * XXX Not parsing prefetch information. */ -int __tsi148_master_get( struct vme_master_resource *image, int *enabled, +int __tsi148_master_get(struct vme_master_resource *image, int *enabled, unsigned long long *vme_base, unsigned long long *size, vme_address_t *aspace, vme_cycle_t *cycle, vme_width_t *dwidth) { @@ -1225,17 +1204,17 @@ int __tsi148_master_get( struct vme_master_resource *image, int *enabled, *cycle |= VME_2eSST320; /* Setup cycle types */ - if ((ctl & TSI148_LCSR_OTAT_TM_M ) == TSI148_LCSR_OTAT_TM_SCT) + if ((ctl & TSI148_LCSR_OTAT_TM_M) == TSI148_LCSR_OTAT_TM_SCT) *cycle |= VME_SCT; - if ((ctl & TSI148_LCSR_OTAT_TM_M ) == TSI148_LCSR_OTAT_TM_BLT) + if ((ctl & TSI148_LCSR_OTAT_TM_M) == TSI148_LCSR_OTAT_TM_BLT) *cycle |= VME_BLT; - if ((ctl & TSI148_LCSR_OTAT_TM_M ) == TSI148_LCSR_OTAT_TM_MBLT) + if ((ctl & TSI148_LCSR_OTAT_TM_M) == TSI148_LCSR_OTAT_TM_MBLT) *cycle |= VME_MBLT; - if ((ctl & TSI148_LCSR_OTAT_TM_M ) == TSI148_LCSR_OTAT_TM_2eVME) + if ((ctl & TSI148_LCSR_OTAT_TM_M) == TSI148_LCSR_OTAT_TM_2eVME) *cycle |= VME_2eVME; - if ((ctl & TSI148_LCSR_OTAT_TM_M ) == TSI148_LCSR_OTAT_TM_2eSST) + if ((ctl & TSI148_LCSR_OTAT_TM_M) == TSI148_LCSR_OTAT_TM_2eSST) *cycle |= VME_2eSST; - if ((ctl & TSI148_LCSR_OTAT_TM_M ) == TSI148_LCSR_OTAT_TM_2eSSTB) + if ((ctl & TSI148_LCSR_OTAT_TM_M) == TSI148_LCSR_OTAT_TM_2eSSTB) *cycle |= VME_2eSSTB; if (ctl & TSI148_LCSR_OTAT_SUP) @@ -1258,7 +1237,7 @@ int __tsi148_master_get( struct vme_master_resource *image, int *enabled, } -int tsi148_master_get( struct vme_master_resource *image, int *enabled, +int tsi148_master_get(struct vme_master_resource *image, int *enabled, unsigned long long *vme_base, unsigned long long *size, vme_address_t *aspace, vme_cycle_t *cycle, vme_width_t *dwidth) { @@ -1300,7 +1279,7 @@ ssize_t tsi148_master_read(struct vme_master_resource *image, void *buf, vme_err = tsi148_find_error(tsi148_bridge, aspace, vme_base + offset, count); - if(vme_err != NULL) { + if (vme_err != NULL) { dev_err(image->parent->parent, "First VME read error detected " "an at address 0x%llx\n", vme_err->address); retval = vme_err->address - (vme_base + offset); @@ -1363,7 +1342,7 @@ ssize_t tsi148_master_write(struct vme_master_resource *image, void *buf, vme_err = tsi148_find_error(tsi148_bridge, aspace, vme_base + offset, count); - if(vme_err != NULL) { + if (vme_err != NULL) { dev_warn(tsi148_bridge->parent, "First VME write error detected" " an at address 0x%llx\n", vme_err->address); retval = vme_err->address - (vme_base + offset); @@ -1456,21 +1435,21 @@ static int tsi148_dma_set_vme_src_attributes(struct device *dev, u32 *attr, } /* Setup cycle types */ - if (cycle & VME_SCT) { + if (cycle & VME_SCT) *attr |= TSI148_LCSR_DSAT_TM_SCT; - } - if (cycle & VME_BLT) { + + if (cycle & VME_BLT) *attr |= TSI148_LCSR_DSAT_TM_BLT; - } - if (cycle & VME_MBLT) { + + if (cycle & VME_MBLT) *attr |= TSI148_LCSR_DSAT_TM_MBLT; - } - if (cycle & VME_2eVME) { + + if (cycle & VME_2eVME) *attr |= TSI148_LCSR_DSAT_TM_2eVME; - } - if (cycle & VME_2eSST) { + + if (cycle & VME_2eSST) *attr |= TSI148_LCSR_DSAT_TM_2eSST; - } + if (cycle & VME_2eSSTB) { dev_err(dev, "Currently not setting Broadcast Select " "Registers\n"); @@ -1550,21 +1529,21 @@ static int tsi148_dma_set_vme_dest_attributes(struct device *dev, u32 *attr, } /* Setup cycle types */ - if (cycle & VME_SCT) { + if (cycle & VME_SCT) *attr |= TSI148_LCSR_DDAT_TM_SCT; - } - if (cycle & VME_BLT) { + + if (cycle & VME_BLT) *attr |= TSI148_LCSR_DDAT_TM_BLT; - } - if (cycle & VME_MBLT) { + + if (cycle & VME_MBLT) *attr |= TSI148_LCSR_DDAT_TM_MBLT; - } - if (cycle & VME_2eVME) { + + if (cycle & VME_2eVME) *attr |= TSI148_LCSR_DDAT_TM_2eVME; - } - if (cycle & VME_2eSST) { + + if (cycle & VME_2eSST) *attr |= TSI148_LCSR_DDAT_TM_2eSST; - } + if (cycle & VME_2eSSTB) { dev_err(dev, "Currently not setting Broadcast Select " "Registers\n"); @@ -1630,7 +1609,7 @@ static int tsi148_dma_set_vme_dest_attributes(struct device *dev, u32 *attr, /* * Add a link list descriptor to the list */ -int tsi148_dma_list_add (struct vme_dma_list *list, struct vme_dma_attr *src, +int tsi148_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, struct vme_dma_attr *dest, size_t count) { struct tsi148_dma_entry *entry, *prev; @@ -1645,8 +1624,7 @@ int tsi148_dma_list_add (struct vme_dma_list *list, struct vme_dma_attr *src, tsi148_bridge = list->parent->parent; /* Descriptor must be aligned on 64-bit boundaries */ - entry = (struct tsi148_dma_entry *)kmalloc( - sizeof(struct tsi148_dma_entry), GFP_KERNEL); + entry = kmalloc(sizeof(struct tsi148_dma_entry), GFP_KERNEL); if (entry == NULL) { dev_err(tsi148_bridge->parent, "Failed to allocate memory for " "dma resource structure\n"); @@ -1676,13 +1654,13 @@ int tsi148_dma_list_add (struct vme_dma_list *list, struct vme_dma_attr *src, entry->descriptor.dsal = pattern_attr->pattern; entry->descriptor.dsat = TSI148_LCSR_DSAT_TYP_PAT; /* Default behaviour is 32 bit pattern */ - if (pattern_attr->type & VME_DMA_PATTERN_BYTE) { + if (pattern_attr->type & VME_DMA_PATTERN_BYTE) entry->descriptor.dsat |= TSI148_LCSR_DSAT_PSZ; - } + /* It seems that the default behaviour is to increment */ - if ((pattern_attr->type & VME_DMA_PATTERN_INCREMENT) == 0) { + if ((pattern_attr->type & VME_DMA_PATTERN_INCREMENT) == 0) entry->descriptor.dsat |= TSI148_LCSR_DSAT_NIN; - } + break; case VME_DMA_PCI: pci_attr = (struct vme_dma_pci *)src->private; @@ -1705,7 +1683,7 @@ int tsi148_dma_list_add (struct vme_dma_list *list, struct vme_dma_attr *src, retval = tsi148_dma_set_vme_src_attributes( tsi148_bridge->parent, &(entry->descriptor.dsat), vme_attr->aspace, vme_attr->cycle, vme_attr->dwidth); - if(retval < 0 ) + if (retval < 0) goto err_source; break; default: @@ -1743,7 +1721,7 @@ int tsi148_dma_list_add (struct vme_dma_list *list, struct vme_dma_attr *src, retval = tsi148_dma_set_vme_dest_attributes( tsi148_bridge->parent, &(entry->descriptor.ddat), vme_attr->aspace, vme_attr->cycle, vme_attr->dwidth); - if(retval < 0 ) + if (retval < 0) goto err_dest; break; default: @@ -1760,7 +1738,7 @@ int tsi148_dma_list_add (struct vme_dma_list *list, struct vme_dma_attr *src, list_add_tail(&(entry->list), &(list->entries)); /* Fill out previous descriptors "Next Address" */ - if(entry->list.prev != &(list->entries)){ + if (entry->list.prev != &(list->entries)) { prev = list_entry(entry->list.prev, struct tsi148_dma_entry, list); /* We need the bus address for the pointer */ @@ -1825,7 +1803,7 @@ int tsi148_dma_list_exec(struct vme_dma_list *list) channel = ctrlr->number; - if (! list_empty(&(ctrlr->running))) { + if (!list_empty(&(ctrlr->running))) { /* * XXX We have an active DMA transfer and currently haven't * sorted out the mechanism for "pending" DMA transfers. @@ -1887,7 +1865,7 @@ int tsi148_dma_list_exec(struct vme_dma_list *list) int tsi148_dma_list_empty(struct vme_dma_list *list) { struct list_head *pos, *temp; - struct tsi148_dma_entry *entry; + struct tsi148_dma_entry *entry; /* detach and free each entry */ list_for_each_safe(pos, temp, &(list->entries)) { @@ -1896,7 +1874,7 @@ int tsi148_dma_list_empty(struct vme_dma_list *list) kfree(entry); } - return (0); + return 0; } /* @@ -1992,18 +1970,18 @@ int tsi148_lm_get(struct vme_lm_resource *lm, unsigned long long *lm_base, if (lm_ctl & TSI148_LCSR_LMAT_EN) enabled = 1; - if ((lm_ctl & TSI148_LCSR_LMAT_AS_M) == TSI148_LCSR_LMAT_AS_A16) { + if ((lm_ctl & TSI148_LCSR_LMAT_AS_M) == TSI148_LCSR_LMAT_AS_A16) *aspace |= VME_A16; - } - if ((lm_ctl & TSI148_LCSR_LMAT_AS_M) == TSI148_LCSR_LMAT_AS_A24) { + + if ((lm_ctl & TSI148_LCSR_LMAT_AS_M) == TSI148_LCSR_LMAT_AS_A24) *aspace |= VME_A24; - } - if ((lm_ctl & TSI148_LCSR_LMAT_AS_M) == TSI148_LCSR_LMAT_AS_A32) { + + if ((lm_ctl & TSI148_LCSR_LMAT_AS_M) == TSI148_LCSR_LMAT_AS_A32) *aspace |= VME_A32; - } - if ((lm_ctl & TSI148_LCSR_LMAT_AS_M) == TSI148_LCSR_LMAT_AS_A64) { + + if ((lm_ctl & TSI148_LCSR_LMAT_AS_M) == TSI148_LCSR_LMAT_AS_A64) *aspace |= VME_A64; - } + if (lm_ctl & TSI148_LCSR_LMAT_SUPR) *cycle |= VME_SUPER; @@ -2121,7 +2099,7 @@ int tsi148_lm_detach(struct vme_lm_resource *lm, int monitor) */ int tsi148_slot_get(struct vme_bridge *tsi148_bridge) { - u32 slot = 0; + u32 slot = 0; struct tsi148_driver *bridge; bridge = tsi148_bridge->driver_priv; @@ -2203,7 +2181,7 @@ static int tsi148_crcsr_init(struct vme_bridge *tsi148_bridge, * over the CR/CSR registers. We read from here to safely flush * through VME writes. */ - if(err_chk) { + if (err_chk) { retval = tsi148_master_set(bridge->flush_image, 1, (vstat * 0x80000), 0x80000, VME_CRCSR, VME_SCT, VME_D16); @@ -2252,8 +2230,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) /* If we want to support more than one of each bridge, we need to * dynamically generate this so we get one per device */ - tsi148_bridge = (struct vme_bridge *)kmalloc(sizeof(struct vme_bridge), - GFP_KERNEL); + tsi148_bridge = kmalloc(sizeof(struct vme_bridge), GFP_KERNEL); if (tsi148_bridge == NULL) { dev_err(&pdev->dev, "Failed to allocate memory for device " "structure\n"); @@ -2329,7 +2306,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) * hence have one less master window resource available. */ master_num = TSI148_MAX_MASTER; - if(err_chk){ + if (err_chk) { master_num--; tsi148_device->flush_image = (struct vme_master_resource *) @@ -2359,8 +2336,8 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) /* Add master windows to list */ INIT_LIST_HEAD(&(tsi148_bridge->master_resources)); for (i = 0; i < master_num; i++) { - master_image = (struct vme_master_resource *)kmalloc( - sizeof(struct vme_master_resource), GFP_KERNEL); + master_image = kmalloc(sizeof(struct vme_master_resource), + GFP_KERNEL); if (master_image == NULL) { dev_err(&pdev->dev, "Failed to allocate memory for " "master resource structure\n"); @@ -2388,8 +2365,8 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) /* Add slave windows to list */ INIT_LIST_HEAD(&(tsi148_bridge->slave_resources)); for (i = 0; i < TSI148_MAX_SLAVE; i++) { - slave_image = (struct vme_slave_resource *)kmalloc( - sizeof(struct vme_slave_resource), GFP_KERNEL); + slave_image = kmalloc(sizeof(struct vme_slave_resource), + GFP_KERNEL); if (slave_image == NULL) { dev_err(&pdev->dev, "Failed to allocate memory for " "slave resource structure\n"); @@ -2414,8 +2391,8 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) /* Add dma engines to list */ INIT_LIST_HEAD(&(tsi148_bridge->dma_resources)); for (i = 0; i < TSI148_MAX_DMA; i++) { - dma_ctrlr = (struct vme_dma_resource *)kmalloc( - sizeof(struct vme_dma_resource), GFP_KERNEL); + dma_ctrlr = kmalloc(sizeof(struct vme_dma_resource), + GFP_KERNEL); if (dma_ctrlr == NULL) { dev_err(&pdev->dev, "Failed to allocate memory for " "dma resource structure\n"); @@ -2472,7 +2449,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) data = ioread32be(tsi148_device->base + TSI148_LCSR_VSTAT); dev_info(&pdev->dev, "Board is%s the VME system controller\n", - (data & TSI148_LCSR_VSTAT_SCONS)? "" : " not"); + (data & TSI148_LCSR_VSTAT_SCONS) ? "" : " not"); if (!geoid) dev_info(&pdev->dev, "VME geographical address is %d\n", data & TSI148_LCSR_VSTAT_GA_M); @@ -2531,7 +2508,8 @@ err_slave: err_master: /* resources are stored in link list */ list_for_each(pos, &(tsi148_bridge->master_resources)) { - master_image = list_entry(pos, struct vme_master_resource, list); + master_image = list_entry(pos, struct vme_master_resource, + list); list_del(pos); kfree(master_image); } diff --git a/drivers/staging/vme/bridges/vme_tsi148.h b/drivers/staging/vme/bridges/vme_tsi148.h index 9e5f7fa..bda64ef 100644 --- a/drivers/staging/vme/bridges/vme_tsi148.h +++ b/drivers/staging/vme/bridges/vme_tsi148.h @@ -579,7 +579,7 @@ static const int TSI148_GCSR_MBOX[4] = { TSI148_GCSR_MBOX0, /* * Memory Base Address Lower Reg (CRG + $010) */ -#define TSI148_PCFS_MBARL_BASEL_M (0xFFFFF<<12) /* Base Addr Lower Mask */ +#define TSI148_PCFS_MBARL_BASEL_M (0xFFFFF<<12) /* Base Addr Lower Mask */ #define TSI148_PCFS_MBARL_PRE (1<<3) /* Prefetch */ #define TSI148_PCFS_MBARL_MTYPE_M (3<<1) /* Memory Type Mask */ #define TSI148_PCFS_MBARL_IOMEM (1<<0) /* I/O Space Indicator */ @@ -615,7 +615,8 @@ static const int TSI148_GCSR_MBOX[4] = { TSI148_GCSR_MBOX0, */ #define TSI148_PCFS_PCIXSTAT_RSCEM (1<<29) /* Recieved Split Comp Error */ #define TSI148_PCFS_PCIXSTAT_DMCRS_M (7<<26) /* max Cumulative Read Size */ -#define TSI148_PCFS_PCIXSTAT_DMOST_M (7<<23) /* max outstanding Split Trans */ +#define TSI148_PCFS_PCIXSTAT_DMOST_M (7<<23) /* max outstanding Split Trans + */ #define TSI148_PCFS_PCIXSTAT_DMMRC_M (3<<21) /* max mem read byte count */ #define TSI148_PCFS_PCIXSTAT_DC (1<<20) /* Device Complexity */ #define TSI148_PCFS_PCIXSTAT_USC (1<<19) /* Unexpected Split comp */ @@ -703,7 +704,8 @@ static const int TSI148_GCSR_MBOX[4] = { TSI148_GCSR_MBOX0, #define TSI148_LCSR_VMCTRL_RMWEN (1<<20) /* RMW Enable */ -#define TSI148_LCSR_VMCTRL_ATO_M (7<<16) /* Master Access Time-out Mask */ +#define TSI148_LCSR_VMCTRL_ATO_M (7<<16) /* Master Access Time-out Mask + */ #define TSI148_LCSR_VMCTRL_ATO_32 (0<<16) /* 32 us */ #define TSI148_LCSR_VMCTRL_ATO_128 (1<<16) /* 128 us */ #define TSI148_LCSR_VMCTRL_ATO_512 (2<<16) /* 512 us */ @@ -733,14 +735,16 @@ static const int TSI148_GCSR_MBOX[4] = { TSI148_GCSR_MBOX0, #define TSI148_LCSR_VMCTRL_VTON_256 (6<<8) /* 256us */ #define TSI148_LCSR_VMCTRL_VTON_512 (7<<8) /* 512us */ -#define TSI148_LCSR_VMCTRL_VREL_M (3<<3) /* VMEbus Master Rel Mode Mask */ +#define TSI148_LCSR_VMCTRL_VREL_M (3<<3) /* VMEbus Master Rel Mode Mask + */ #define TSI148_LCSR_VMCTRL_VREL_T_D (0<<3) /* Time on or Done */ #define TSI148_LCSR_VMCTRL_VREL_T_R_D (1<<3) /* Time on and REQ or Done */ #define TSI148_LCSR_VMCTRL_VREL_T_B_D (2<<3) /* Time on and BCLR or Done */ #define TSI148_LCSR_VMCTRL_VREL_T_D_R (3<<3) /* Time on or Done and REQ */ #define TSI148_LCSR_VMCTRL_VFAIR (1<<2) /* VMEbus Master Fair Mode */ -#define TSI148_LCSR_VMCTRL_VREQL_M (3<<0) /* VMEbus Master Req Level Mask */ +#define TSI148_LCSR_VMCTRL_VREQL_M (3<<0) /* VMEbus Master Req Level Mask + */ /* * VMEbus Control Register CRG+$238 @@ -762,7 +766,8 @@ static const int TSI148_GCSR_MBOX[4] = { TSI148_GCSR_MBOX0, #define TSI148_LCSR_VCTRL_DLT_16384 (0xB<<24) /* 16384 VCLKS */ #define TSI148_LCSR_VCTRL_DLT_32768 (0xC<<24) /* 32768 VCLKS */ -#define TSI148_LCSR_VCTRL_NERBB (1<<20) /* No Early Release of Bus Busy */ +#define TSI148_LCSR_VCTRL_NERBB (1<<20) /* No Early Release of Bus Busy + */ #define TSI148_LCSR_VCTRL_SRESET (1<<17) /* System Reset */ #define TSI148_LCSR_VCTRL_LRESET (1<<16) /* Local Reset */ @@ -773,7 +778,8 @@ static const int TSI148_GCSR_MBOX[4] = { TSI148_GCSR_MBOX0, #define TSI148_LCSR_VCTRL_ATOEN (1<<7) /* Arbiter Time-out Enable */ #define TSI148_LCSR_VCTRL_ROBIN (1<<6) /* VMEbus Round Robin */ -#define TSI148_LCSR_VCTRL_GTO_M (7<<0) /* VMEbus Global Time-out Mask */ +#define TSI148_LCSR_VCTRL_GTO_M (7<<0) /* VMEbus Global Time-out Mask + */ #define TSI148_LCSR_VCTRL_GTO_8 (0<<0) /* 8 us */ #define TSI148_LCSR_VCTRL_GTO_16 (1<<0) /* 16 us */ #define TSI148_LCSR_VCTRL_GTO_32 (2<<0) /* 32 us */ @@ -794,7 +800,7 @@ static const int TSI148_GCSR_MBOX[4] = { TSI148_GCSR_MBOX0, #define TSI148_LCSR_VSTAT_ACFAILS (1<<9) /* AC fail status */ #define TSI148_LCSR_VSTAT_SCONS (1<<8) /* System Cont Status */ #define TSI148_LCSR_VSTAT_GAP (1<<5) /* Geographic Addr Parity */ -#define TSI148_LCSR_VSTAT_GA_M (0x1F<<0) /* Geographic Addr Mask */ +#define TSI148_LCSR_VSTAT_GA_M (0x1F<<0) /* Geographic Addr Mask */ /* * PCI Configuration Status Register CRG+$240 @@ -1341,7 +1347,7 @@ static const int TSI148_LCSR_INTC_MBC[4] = { TSI148_LCSR_INTC_MB0C, * DMA Next Link Address Lower */ #define TSI148_LCSR_DNLAL_DNLAL_M (0x3FFFFFF<<6) /* Address Mask */ -#define TSI148_LCSR_DNLAL_LLA (1<<0) /* Last Link Address Indicator */ +#define TSI148_LCSR_DNLAL_LLA (1<<0) /* Last Link Address Indicator */ /* * DMA 2eSST Broadcast Select @@ -1371,7 +1377,7 @@ static const int TSI148_LCSR_INTC_MBC[4] = { TSI148_LCSR_INTC_MB0C, #define TSI148_GCSR_GCTRL_MBI0S (1<<0) /* Mail box 0 Int Status */ #define TSI148_GCSR_GAP (1<<5) /* Geographic Addr Parity */ -#define TSI148_GCSR_GA_M (0x1F<<0) /* Geographic Address Mask */ +#define TSI148_GCSR_GA_M (0x1F<<0) /* Geographic Address Mask */ /* * CR/CSR Register Group -- cgit v0.10.2 From 1fe923ec740ad8d87e616afc50f5b00d88a75ed2 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 28 Apr 2010 16:40:10 -0400 Subject: Staging: vme: declare vme_bus_num_mtx static Signed-off-by: Bill Pemberton Cc: Martyn Welch Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vme/vme.c b/drivers/staging/vme/vme.c index 934283a..58aa276 100644 --- a/drivers/staging/vme/vme.c +++ b/drivers/staging/vme/vme.c @@ -36,7 +36,7 @@ /* Bitmask and mutex to keep track of bridge numbers */ static unsigned int vme_bus_numbers; -DEFINE_MUTEX(vme_bus_num_mtx); +static DEFINE_MUTEX(vme_bus_num_mtx); static void __exit vme_exit(void); static int __init vme_init(void); -- cgit v0.10.2 From b1a5fad4c36117b1399ed65899088fcb907e2cbd Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 28 Apr 2010 16:40:11 -0400 Subject: Staging: vme: declare vme_calc_slot() as static vme_calc_slot() is not used anywhere other than vme.c so it should be declared as static. Signed-off-by: Bill Pemberton Cc: Martyn Welch Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vme/vme.c b/drivers/staging/vme/vme.c index 58aa276..093fbff 100644 --- a/drivers/staging/vme/vme.c +++ b/drivers/staging/vme/vme.c @@ -1408,7 +1408,7 @@ EXPORT_SYMBOL(vme_unregister_driver); /* - Bus Registration ------------------------------------------------------ */ -int vme_calc_slot(struct device *dev) +static int vme_calc_slot(struct device *dev) { struct vme_bridge *bridge; int num; -- cgit v0.10.2 From c98aaf85550e314228781ba134c68bb5ca33ab6a Mon Sep 17 00:00:00 2001 From: Johan Meiring Date: Sun, 28 Mar 2010 21:36:09 +0200 Subject: Staging: line6: rewrote inline comments in control.h This is a patch to control.h that presents certain inline comments in a neater way, and which eliminates the 80 character error found by the checkpatch.pl tool. Signed-off-by: Johan Meiring Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/line6/control.h b/drivers/staging/line6/control.h index 2f19665..47e18ab 100644 --- a/drivers/staging/line6/control.h +++ b/drivers/staging/line6/control.h @@ -22,24 +22,44 @@ enum { POD_tweak = 1, POD_wah_position = 4, - POD_compression_gain = 5, /* device: LINE6_BITS_PODXTALL */ + + /* device: LINE6_BITS_PODXTALL */ + POD_compression_gain = 5, + POD_vol_pedal_position = 7, POD_compression_threshold = 9, POD_pan = 10, POD_amp_model_setup = 11, - POD_amp_model = 12, /* firmware: 2.0 */ + POD_amp_model = 12, /* firmware: 2.0 */ POD_drive = 13, POD_bass = 14, - POD_mid = 15, /* device: LINE6_BITS_PODXTALL */ - POD_lowmid = 15, /* device: LINE6_BITS_BASSPODXTALL */ - POD_treble = 16, /* device: LINE6_BITS_PODXTALL */ - POD_highmid = 16, /* device: LINE6_BITS_BASSPODXTALL */ + + /* device: LINE6_BITS_PODXTALL */ + POD_mid = 15, + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_lowmid = 15, + + /* device: LINE6_BITS_PODXTALL */ + POD_treble = 16, + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_highmid = 16, + POD_chan_vol = 17, - POD_reverb_mix = 18, /* device: LINE6_BITS_PODXTALL */ + + /* device: LINE6_BITS_PODXTALL */ + POD_reverb_mix = 18, + POD_effect_setup = 19, POD_band_1_frequency = 20, /* firmware: 2.0 */ - POD_presence = 21, /* device: LINE6_BITS_PODXTALL */ - POD_treble__bass = 21, /* device: LINE6_BITS_BASSPODXTALL */ + + /* device: LINE6_BITS_PODXTALL */ + POD_presence = 21, + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_treble__bass = 21, + POD_noise_gate_enable = 22, POD_gate_threshold = 23, POD_gate_decay_time = 24, @@ -50,78 +70,137 @@ enum { POD_mod_param_1 = 29, POD_delay_param_1 = 30, POD_delay_param_1_note_value = 31, - POD_band_2_frequency__bass = 32, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_band_2_frequency__bass = 32, /* firmware: 2.0 */ + POD_delay_param_2 = 33, POD_delay_volume_mix = 34, POD_delay_param_3 = 35, - POD_reverb_enable = 36, /* device: LINE6_BITS_PODXTALL */ - POD_reverb_type = 37, /* device: LINE6_BITS_PODXTALL */ - POD_reverb_decay = 38, /* device: LINE6_BITS_PODXTALL */ - POD_reverb_tone = 39, /* device: LINE6_BITS_PODXTALL */ - POD_reverb_pre_delay = 40, /* device: LINE6_BITS_PODXTALL */ - POD_reverb_pre_post = 41, /* device: LINE6_BITS_PODXTALL */ - POD_band_2_frequency = 42, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ - POD_band_3_frequency__bass = 42, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ + + /* device: LINE6_BITS_PODXTALL */ + POD_reverb_enable = 36, + POD_reverb_type = 37, + POD_reverb_decay = 38, + POD_reverb_tone = 39, + POD_reverb_pre_delay = 40, + POD_reverb_pre_post = 41, + POD_band_2_frequency = 42, + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_band_3_frequency__bass = 42, /* firmware: 2.0 */ + POD_wah_enable = 43, - POD_modulation_lo_cut = 44, /* device: LINE6_BITS_BASSPODXTALL */ - POD_delay_reverb_lo_cut = 45, /* device: LINE6_BITS_BASSPODXTALL */ - POD_volume_pedal_minimum = 46, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ - POD_eq_pre_post = 46, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_modulation_lo_cut = 44, + POD_delay_reverb_lo_cut = 45, + + /* device: LINE6_BITS_PODXTALL */ + POD_volume_pedal_minimum = 46, /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_eq_pre_post = 46, /* firmware: 2.0 */ + POD_volume_pre_post = 47, - POD_di_model = 48, /* device: LINE6_BITS_BASSPODXTALL */ - POD_di_delay = 49, /* device: LINE6_BITS_BASSPODXTALL */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_di_model = 48, + POD_di_delay = 49, + POD_mod_enable = 50, POD_mod_param_1_note_value = 51, POD_mod_param_2 = 52, POD_mod_param_3 = 53, POD_mod_param_4 = 54, - POD_mod_param_5 = 55, /* device: LINE6_BITS_BASSPODXTALL */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_mod_param_5 = 55, + POD_mod_volume_mix = 56, POD_mod_pre_post = 57, POD_modulation_model = 58, - POD_band_3_frequency = 60, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ - POD_band_4_frequency__bass = 60, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ + + /* device: LINE6_BITS_PODXTALL */ + POD_band_3_frequency = 60, /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_band_4_frequency__bass = 60, /* firmware: 2.0 */ + POD_mod_param_1_double_precision = 61, POD_delay_param_1_double_precision = 62, POD_eq_enable = 63, /* firmware: 2.0 */ POD_tap = 64, POD_volume_tweak_pedal_assign = 65, - POD_band_5_frequency = 68, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_band_5_frequency = 68, /* firmware: 2.0 */ + POD_tuner = 69, POD_mic_selection = 70, POD_cabinet_model = 71, POD_stomp_model = 75, POD_roomlevel = 76, - POD_band_4_frequency = 77, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ - POD_band_6_frequency = 77, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ + + /* device: LINE6_BITS_PODXTALL */ + POD_band_4_frequency = 77, /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_band_6_frequency = 77, /* firmware: 2.0 */ + POD_stomp_param_1_note_value = 78, POD_stomp_param_2 = 79, POD_stomp_param_3 = 80, POD_stomp_param_4 = 81, POD_stomp_param_5 = 82, POD_stomp_param_6 = 83, - POD_amp_switch_select = 84, /* device: LINE6_BITS_LIVE */ + + /* device: LINE6_BITS_LIVE */ + POD_amp_switch_select = 84, + POD_delay_param_4 = 85, POD_delay_param_5 = 86, POD_delay_pre_post = 87, - POD_delay_model = 88, /* device: LINE6_BITS_PODXTALL */ - POD_delay_verb_model = 88, /* device: LINE6_BITS_BASSPODXTALL */ + + /* device: LINE6_BITS_PODXTALL */ + POD_delay_model = 88, + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_delay_verb_model = 88, + POD_tempo_msb = 89, POD_tempo_lsb = 90, POD_wah_model = 91, /* firmware: 3.0 */ POD_bypass_volume = 105, /* firmware: 2.14 */ - POD_fx_loop_on_off = 107, /* device: LINE6_BITS_PRO */ + + /* device: LINE6_BITS_PRO */ + POD_fx_loop_on_off = 107, + POD_tweak_param_select = 108, POD_amp1_engage = 111, POD_band_1_gain = 114, /* firmware: 2.0 */ - POD_band_2_gain__bass = 115, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ - POD_band_2_gain = 116, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ - POD_band_3_gain__bass = 116, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ - POD_band_3_gain = 117, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ - POD_band_4_gain__bass = 117, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ - POD_band_5_gain__bass = 118, /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ - POD_band_4_gain = 119, /* device: LINE6_BITS_PODXTALL */ /* firmware: 2.0 */ - POD_band_6_gain__bass = 119 /* device: LINE6_BITS_BASSPODXTALL */ /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_band_2_gain__bass = 115, /* firmware: 2.0 */ + + /* device: LINE6_BITS_PODXTALL */ + POD_band_2_gain = 116, /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_band_3_gain__bass = 116, /* firmware: 2.0 */ + + /* device: LINE6_BITS_PODXTALL */ + POD_band_3_gain = 117, /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_band_4_gain__bass = 117, /* firmware: 2.0 */ + POD_band_5_gain__bass = 118, /* firmware: 2.0 */ + + /* device: LINE6_BITS_PODXTALL */ + POD_band_4_gain = 119, /* firmware: 2.0 */ + + /* device: LINE6_BITS_BASSPODXTALL */ + POD_band_6_gain__bass = 119 /* firmware: 2.0 */ }; /** @@ -139,7 +218,8 @@ enum { VARIAX_pickup2_position = 23, /* type: 24 bit float */ VARIAX_pickup2_angle = 26, /* type: 24 bit float */ VARIAX_pickup2_level = 29, /* type: 24 bit float */ - VARIAX_pickup_phase = 32, /* 0: in phase, 1: out of phase */ + VARIAX_pickup_phase = 32, /* 0: in phase, + 1: out of phase */ VARIAX_capacitance = 33, /* type: 24 bit float */ VARIAX_tone_resistance = 36, /* type: 24 bit float */ VARIAX_volume_resistance = 39, /* type: 24 bit float */ -- cgit v0.10.2 From 69d5b4919f53900860e91a89599d2347827dc805 Mon Sep 17 00:00:00 2001 From: Daniel Kenji Toyama Date: Mon, 29 Mar 2010 22:26:46 +1100 Subject: Staging: vt6656: rc4.c: Fixed coding style issues Replaced all indentation by spaces by tabs. Signed-off-by: Daniel Kenji Toyama Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/rc4.c b/drivers/staging/vt6656/rc4.c index e6c6131..64c419d 100644 --- a/drivers/staging/vt6656/rc4.c +++ b/drivers/staging/vt6656/rc4.c @@ -34,54 +34,54 @@ VOID rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len) { - UINT ust1, ust2; - UINT keyindex; - UINT stateindex; - PBYTE pbyst; - UINT idx; + UINT ust1, ust2; + UINT keyindex; + UINT stateindex; + PBYTE pbyst; + UINT idx; - pbyst = pRC4->abystate; - pRC4->ux = 0; - pRC4->uy = 0; - for (idx = 0; idx < 256; idx++) - pbyst[idx] = (BYTE)idx; - keyindex = 0; - stateindex = 0; - for (idx = 0; idx < 256; idx++) { - ust1 = pbyst[idx]; - stateindex = (stateindex + pbyKey[keyindex] + ust1) & 0xff; - ust2 = pbyst[stateindex]; - pbyst[stateindex] = (BYTE)ust1; - pbyst[idx] = (BYTE)ust2; - if (++keyindex >= cbKey_len) - keyindex = 0; - } + pbyst = pRC4->abystate; + pRC4->ux = 0; + pRC4->uy = 0; + for (idx = 0; idx < 256; idx++) + pbyst[idx] = (BYTE)idx; + keyindex = 0; + stateindex = 0; + for (idx = 0; idx < 256; idx++) { + ust1 = pbyst[idx]; + stateindex = (stateindex + pbyKey[keyindex] + ust1) & 0xff; + ust2 = pbyst[stateindex]; + pbyst[stateindex] = (BYTE)ust1; + pbyst[idx] = (BYTE)ust2; + if (++keyindex >= cbKey_len) + keyindex = 0; + } } UINT rc4_byte(PRC4Ext pRC4) { - UINT ux; - UINT uy; - UINT ustx, usty; - PBYTE pbyst; + UINT ux; + UINT uy; + UINT ustx, usty; + PBYTE pbyst; - pbyst = pRC4->abystate; - ux = (pRC4->ux + 1) & 0xff; - ustx = pbyst[ux]; - uy = (ustx + pRC4->uy) & 0xff; - usty = pbyst[uy]; - pRC4->ux = ux; - pRC4->uy = uy; - pbyst[uy] = (BYTE)ustx; - pbyst[ux] = (BYTE)usty; + pbyst = pRC4->abystate; + ux = (pRC4->ux + 1) & 0xff; + ustx = pbyst[ux]; + uy = (ustx + pRC4->uy) & 0xff; + usty = pbyst[uy]; + pRC4->ux = ux; + pRC4->uy = uy; + pbyst[uy] = (BYTE)ustx; + pbyst[ux] = (BYTE)usty; - return pbyst[(ustx + usty) & 0xff]; + return pbyst[(ustx + usty) & 0xff]; } VOID rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, - PBYTE pbySrc, UINT cbData_len) + PBYTE pbySrc, UINT cbData_len) { - UINT ii; - for (ii = 0; ii < cbData_len; ii++) - pbyDest[ii] = (BYTE)(pbySrc[ii] ^ rc4_byte(pRC4)); + UINT ii; + for (ii = 0; ii < cbData_len; ii++) + pbyDest[ii] = (BYTE)(pbySrc[ii] ^ rc4_byte(pRC4)); } -- cgit v0.10.2 From f9ea02af482727d79e241dc28d69522f56f2c1a3 Mon Sep 17 00:00:00 2001 From: Daniel Kenji Toyama Date: Mon, 29 Mar 2010 22:40:54 +1100 Subject: Staging: vt6656: control.c: Fixed coding style issues Replaced lots of spaces by real tabs and fixed some 80+ lines. Signed-off-by: Daniel Kenji Toyama Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/control.c b/drivers/staging/vt6656/control.c index 7dba771..8aab671 100644 --- a/drivers/staging/vt6656/control.c +++ b/drivers/staging/vt6656/control.c @@ -30,11 +30,13 @@ * CONTROLnsRequestIn - Read variable length bytes from MEM/BB/MAC/EEPROM * ControlvWriteByte - Write one byte to MEM/BB/MAC/EEPROM * ControlvReadByte - Read one byte from MEM/BB/MAC/EEPROM - * ControlvMaskByte - Read one byte from MEM/BB/MAC/EEPROM and clear/set some bits in the same address + * ControlvMaskByte - Read one byte from MEM/BB/MAC/EEPROM and clear/set + * some bits in the same address * * Revision History: * 04-05-2004 Jerry Chen: Initial release - * 11-24-2004 Warren Hsu: Add ControlvWriteByte,ControlvReadByte,ControlvMaskByte + * 11-24-2004 Warren Hsu: Add ControlvWriteByte, ControlvReadByte, + * ControlvMaskByte * */ @@ -42,8 +44,8 @@ #include "rndis.h" /*--------------------- Static Definitions -------------------------*/ -//static int msglevel =MSG_LEVEL_INFO; -//static int msglevel =MSG_LEVEL_DEBUG; +/* static int msglevel =MSG_LEVEL_INFO; */ +/* static int msglevel =MSG_LEVEL_DEBUG; */ /*--------------------- Static Classes ----------------------------*/ /*--------------------- Static Variables --------------------------*/ @@ -54,56 +56,43 @@ /*--------------------- Export Functions --------------------------*/ - -void ControlvWriteByte(PSDevice pDevice, BYTE byRegType, BYTE byRegOfs, BYTE byData) +void ControlvWriteByte(PSDevice pDevice, BYTE byRegType, BYTE byRegOfs, + BYTE byData) { -BYTE byData1; - - byData1 = byData; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE, - byRegOfs, - byRegType, - 1, - &byData1 - ); - + BYTE byData1; + byData1 = byData; + CONTROLnsRequestOut(pDevice, + MESSAGE_TYPE_WRITE, + byRegOfs, + byRegType, + 1, + &byData1); } - -void ControlvReadByte(PSDevice pDevice, BYTE byRegType, BYTE byRegOfs, PBYTE pbyData) +void ControlvReadByte(PSDevice pDevice, BYTE byRegType, BYTE byRegOfs, + PBYTE pbyData) { -NTSTATUS ntStatus; -BYTE byData1; - - - ntStatus = CONTROLnsRequestIn(pDevice, - MESSAGE_TYPE_READ, - byRegOfs, - byRegType, - 1, - &byData1); - - *pbyData = byData1; - + NTSTATUS ntStatus; + BYTE byData1; + ntStatus = CONTROLnsRequestIn(pDevice, + MESSAGE_TYPE_READ, + byRegOfs, + byRegType, + 1, + &byData1); + *pbyData = byData1; } - - -void ControlvMaskByte(PSDevice pDevice, BYTE byRegType, BYTE byRegOfs, BYTE byMask, BYTE byData) +void ControlvMaskByte(PSDevice pDevice, BYTE byRegType, BYTE byRegOfs, + BYTE byMask, BYTE byData) { -BYTE pbyData[2]; - - pbyData[0] = byData; - pbyData[1] = byMask; - - CONTROLnsRequestOut(pDevice, - MESSAGE_TYPE_WRITE_MASK, - byRegOfs, - byRegType, - 2, - pbyData - ); - + BYTE pbyData[2]; + pbyData[0] = byData; + pbyData[1] = byMask; + CONTROLnsRequestOut(pDevice, + MESSAGE_TYPE_WRITE_MASK, + byRegOfs, + byRegType, + 2, + pbyData); } -- cgit v0.10.2 From 183cd2956225ea6f83d2c46574df4607adeb3b91 Mon Sep 17 00:00:00 2001 From: Daniel Kenji Toyama Date: Mon, 29 Mar 2010 23:20:36 +1100 Subject: Staging: vt6656: michael.c: Fixed coding style issues Replaced lots of spaces by real tabs and resolved other minor issues. Signed-off-by: Daniel Kenji Toyama Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/michael.c b/drivers/staging/vt6656/michael.c index c930e0cd..d4c0820 100644 --- a/drivers/staging/vt6656/michael.c +++ b/drivers/staging/vt6656/michael.c @@ -48,20 +48,23 @@ /*--------------------- Static Functions --------------------------*/ /* -static DWORD s_dwGetUINT32(BYTE * p); // Get DWORD from 4 bytes LSByte first -static VOID s_vPutUINT32(BYTE* p, DWORD val); // Put DWORD into 4 bytes LSByte first -*/ -static VOID s_vClear(void); // Clear the internal message, - // resets the object to the state just after construction. + * static DWORD s_dwGetUINT32(BYTE * p); Get DWORD from + * 4 bytes LSByte first + * static VOID s_vPutUINT32(BYTE* p, DWORD val); Put DWORD into + * 4 bytes LSByte first + */ +static VOID s_vClear(void); /* Clear the internal message, + * resets the object to the + * state just after construction. */ static VOID s_vSetKey(DWORD dwK0, DWORD dwK1); -static VOID s_vAppendByte(BYTE b); // Add a single byte to the internal message +static VOID s_vAppendByte(BYTE b); /* Add a single byte to the internal + * message */ /*--------------------- Export Variables --------------------------*/ -static DWORD L, R; // Current state - -static DWORD K0, K1; // Key -static DWORD M; // Message accumulator (single word) -static UINT nBytesInM; // # bytes in M +static DWORD L, R; /* Current state */ +static DWORD K0, K1; /* Key */ +static DWORD M; /* Message accumulator (single word) */ +static UINT nBytesInM; /* # bytes in M */ /*--------------------- Export Functions --------------------------*/ @@ -69,113 +72,105 @@ static UINT nBytesInM; // # bytes in M static DWORD s_dwGetUINT32 (BYTE * p) // Convert from BYTE[] to DWORD in a portable way { - DWORD res = 0; - UINT i; - for(i=0; i<4; i++ ) - { - res |= (*p++) << (8*i); - } - return res; + DWORD res = 0; + UINT i; + for(i=0; i<4; i++ ) + res |= (*p++) << (8*i); + return res; } static VOID s_vPutUINT32 (BYTE* p, DWORD val) // Convert from DWORD to BYTE[] in a portable way { - UINT i; - for(i=0; i<4; i++ ) - { - *p++ = (BYTE) (val & 0xff); - val >>= 8; - } + UINT i; + for(i=0; i<4; i++ ) { + *p++ = (BYTE) (val & 0xff); + val >>= 8; + } } */ -static VOID s_vClear (void) +static VOID s_vClear(void) { - // Reset the state to the empty message. - L = K0; - R = K1; - nBytesInM = 0; - M = 0; + /* Reset the state to the empty message. */ + L = K0; + R = K1; + nBytesInM = 0; + M = 0; } -static VOID s_vSetKey (DWORD dwK0, DWORD dwK1) +static VOID s_vSetKey(DWORD dwK0, DWORD dwK1) { - // Set the key - K0 = dwK0; - K1 = dwK1; - // and reset the message - s_vClear(); + /* Set the key */ + K0 = dwK0; + K1 = dwK1; + /* and reset the message */ + s_vClear(); } -static VOID s_vAppendByte (BYTE b) +static VOID s_vAppendByte(BYTE b) { - // Append the byte to our word-sized buffer - M |= b << (8*nBytesInM); - nBytesInM++; - // Process the word if it is full. - if( nBytesInM >= 4 ) - { - L ^= M; - R ^= ROL32( L, 17 ); - L += R; - R ^= ((L & 0xff00ff00) >> 8) | ((L & 0x00ff00ff) << 8); - L += R; - R ^= ROL32( L, 3 ); - L += R; - R ^= ROR32( L, 2 ); - L += R; - // Clear the buffer - M = 0; - nBytesInM = 0; - } + /* Append the byte to our word-sized buffer */ + M |= b << (8*nBytesInM); + nBytesInM++; + /* Process the word if it is full. */ + if (nBytesInM >= 4) { + L ^= M; + R ^= ROL32(L, 17); + L += R; + R ^= ((L & 0xff00ff00) >> 8) | ((L & 0x00ff00ff) << 8); + L += R; + R ^= ROL32(L, 3); + L += R; + R ^= ROR32(L, 2); + L += R; + /* Clear the buffer */ + M = 0; + nBytesInM = 0; + } } -VOID MIC_vInit (DWORD dwK0, DWORD dwK1) +VOID MIC_vInit(DWORD dwK0, DWORD dwK1) { - // Set the key - s_vSetKey(dwK0, dwK1); + /* Set the key */ + s_vSetKey(dwK0, dwK1); } -VOID MIC_vUnInit (void) +VOID MIC_vUnInit(void) { - // Wipe the key material - K0 = 0; - K1 = 0; + /* Wipe the key material */ + K0 = 0; + K1 = 0; - // And the other fields as well. - //Note that this sets (L,R) to (K0,K1) which is just fine. - s_vClear(); + /* And the other fields as well. */ + /* Note that this sets (L,R) to (K0,K1) which is just fine. */ + s_vClear(); } -VOID MIC_vAppend (PBYTE src, UINT nBytes) +VOID MIC_vAppend(PBYTE src, UINT nBytes) { - // This is simple - while (nBytes > 0) - { - s_vAppendByte(*src++); - nBytes--; - } + /* This is simple */ + while (nBytes > 0) { + s_vAppendByte(*src++); + nBytes--; + } } -VOID MIC_vGetMIC (PDWORD pdwL, PDWORD pdwR) +VOID MIC_vGetMIC(PDWORD pdwL, PDWORD pdwR) { - // Append the minimum padding - s_vAppendByte(0x5a); - s_vAppendByte(0); - s_vAppendByte(0); - s_vAppendByte(0); - s_vAppendByte(0); - // and then zeroes until the length is a multiple of 4 - while( nBytesInM != 0 ) - { - s_vAppendByte(0); - } - // The s_vAppendByte function has already computed the result. - *pdwL = L; - *pdwR = R; - // Reset to the empty message. - s_vClear(); + /* Append the minimum padding */ + s_vAppendByte(0x5a); + s_vAppendByte(0); + s_vAppendByte(0); + s_vAppendByte(0); + s_vAppendByte(0); + /* and then zeroes until the length is a multiple of 4 */ + while (nBytesInM != 0) + s_vAppendByte(0); + /* The s_vAppendByte function has already computed the result. */ + *pdwL = L; + *pdwR = R; + /* Reset to the empty message. */ + s_vClear(); } - -- cgit v0.10.2 From b77694be7547d371c2f2e1be077bffcdbfcf7b82 Mon Sep 17 00:00:00 2001 From: Daniel Kenji Toyama Date: Mon, 29 Mar 2010 23:28:33 +1100 Subject: Staging: vt6656: tether.c: Fixed coding style issues Fixed some indentation and spacing issues. Signed-off-by: Daniel Kenji Toyama Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/tether.c b/drivers/staging/vt6656/tether.c index c90b469..ab1368a 100644 --- a/drivers/staging/vt6656/tether.c +++ b/drivers/staging/vt6656/tether.c @@ -61,25 +61,25 @@ * Return Value: Hash value * */ -BYTE ETHbyGetHashIndexByCrc32 (PBYTE pbyMultiAddr) +BYTE ETHbyGetHashIndexByCrc32(PBYTE pbyMultiAddr) { - int ii; - BYTE byTmpHash; - BYTE byHash = 0; + int ii; + BYTE byTmpHash; + BYTE byHash = 0; - // get the least 6-bits from CRC generator - byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, U_ETHER_ADDR_LEN, - 0xFFFFFFFFL) & 0x3F); - // reverse most bit to least bit - for (ii = 0; ii < (sizeof(byTmpHash) * 8); ii++) { - byHash <<= 1; - if (byTmpHash & 0x01) - byHash |= 1; - byTmpHash >>= 1; - } + /* get the least 6-bits from CRC generator */ + byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, U_ETHER_ADDR_LEN, + 0xFFFFFFFFL) & 0x3F); + /* reverse most bit to least bit */ + for (ii = 0; ii < (sizeof(byTmpHash) * 8); ii++) { + byHash <<= 1; + if (byTmpHash & 0x01) + byHash |= 1; + byTmpHash >>= 1; + } - // adjust 6-bits to the right most - return (byHash >> 2); + /* adjust 6-bits to the right most */ + return byHash >> 2; } @@ -96,14 +96,13 @@ BYTE ETHbyGetHashIndexByCrc32 (PBYTE pbyMultiAddr) * Return Value: TRUE if ok; FALSE if error. * */ -BOOL ETHbIsBufferCrc32Ok (PBYTE pbyBuffer, UINT cbFrameLength) +BOOL ETHbIsBufferCrc32Ok(PBYTE pbyBuffer, UINT cbFrameLength) { - DWORD dwCRC; + DWORD dwCRC; - dwCRC = CRCdwGetCrc32(pbyBuffer, cbFrameLength - 4); - if (cpu_to_le32(*((PDWORD)(pbyBuffer + cbFrameLength - 4))) != dwCRC) { - return FALSE; - } - return TRUE; + dwCRC = CRCdwGetCrc32(pbyBuffer, cbFrameLength - 4); + if (cpu_to_le32(*((PDWORD)(pbyBuffer + cbFrameLength - 4))) != dwCRC) + return FALSE; + return TRUE; } -- cgit v0.10.2 From 6dde1c6c8e2bcc8e97210d0b6388340a7cbd2afe Mon Sep 17 00:00:00 2001 From: Daniel Kenji Toyama Date: Mon, 29 Mar 2010 23:19:20 +1100 Subject: Staging: vt6656: tcrc.c: Fixed coding style issues Fixed minor problems with indentation. Signed-off-by: Daniel Kenji Toyama Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/tcrc.c b/drivers/staging/vt6656/tcrc.c index 5f0c747..3464801 100644 --- a/drivers/staging/vt6656/tcrc.c +++ b/drivers/staging/vt6656/tcrc.c @@ -41,7 +41,7 @@ /*--------------------- Static Variables --------------------------*/ -// 32-bit CRC table +/* 32-bit CRC table */ static const DWORD s_adwCrc32Table[256] = { 0x00000000L, 0x77073096L, 0xEE0E612CL, 0x990951BAL, 0x076DC419L, 0x706AF48FL, 0xE963A535L, 0x9E6495A3L, @@ -132,17 +132,18 @@ static const DWORD s_adwCrc32Table[256] = { * Return Value: CRC-32 * -*/ -DWORD CRCdwCrc32 (PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed) +DWORD CRCdwCrc32(PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed) { - DWORD dwCrc; + DWORD dwCrc; - dwCrc = dwCrcSeed; - while (cbByte--) { - dwCrc = s_adwCrc32Table[(BYTE)((dwCrc ^ (*pbyData)) & 0xFF)] ^ (dwCrc >> 8); - pbyData++; - } + dwCrc = dwCrcSeed; + while (cbByte--) { + dwCrc = s_adwCrc32Table[(BYTE)((dwCrc ^ (*pbyData)) & 0xFF)] ^ + (dwCrc >> 8); + pbyData++; + } - return dwCrc; + return dwCrc; } @@ -164,7 +165,7 @@ DWORD CRCdwCrc32 (PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed) * Return Value: CRC-32 * -*/ -DWORD CRCdwGetCrc32 (PBYTE pbyData, UINT cbByte) +DWORD CRCdwGetCrc32(PBYTE pbyData, UINT cbByte) { return ~CRCdwCrc32(pbyData, cbByte, 0xFFFFFFFFL); } -- cgit v0.10.2 From ff8041bb7ca15bc5c6048e8598a896819cbec417 Mon Sep 17 00:00:00 2001 From: Daniel Kenji Toyama Date: Tue, 30 Mar 2010 00:28:19 +1100 Subject: Staging: vt6656: int.c: Fixed Coding Style issues Fixed almost all the issues given by checkpatch.pl except for one warning about an 81 character line, which cannot really be decomposed (the code is a bit too nested there). Signed-off-by: Daniel Kenji Toyama Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 35053be..824c67d 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -41,8 +41,8 @@ #include "usbpipe.h" /*--------------------- Static Definitions -------------------------*/ -//static int msglevel =MSG_LEVEL_DEBUG; -static int msglevel =MSG_LEVEL_INFO; +/* static int msglevel = MSG_LEVEL_DEBUG; */ +static int msglevel = MSG_LEVEL_INFO; /*--------------------- Static Classes ----------------------------*/ @@ -74,120 +74,152 @@ static int msglevel =MSG_LEVEL_INFO; * * Notes: * - * USB reads are by nature 'Blocking', and when in a read, the device looks like it's - * in a 'stall' condition, so we deliberately time out every second if we've gotten no data + * USB reads are by nature 'Blocking', and when in a read, the device looks + * like it's in a 'stall' condition, so we deliberately time out every second + * if we've gotten no data * -*/ VOID -INTvWorkItem( - PVOID Context - ) +INTvWorkItem(PVOID Context) { - PSDevice pDevice = (PSDevice) Context; - NTSTATUS ntStatus; + PSDevice pDevice = (PSDevice) Context; + NTSTATUS ntStatus; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Interrupt Polling Thread\n"); - - spin_lock_irq(&pDevice->lock); - if (pDevice->fKillEventPollingThread != TRUE) { - ntStatus = PIPEnsInterruptRead(pDevice); - } - spin_unlock_irq(&pDevice->lock); - - } + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->Interrupt Polling Thread\n"); + spin_lock_irq(&pDevice->lock); + if (pDevice->fKillEventPollingThread != TRUE) + ntStatus = PIPEnsInterruptRead(pDevice); + spin_unlock_irq(&pDevice->lock); +} NTSTATUS -INTnsProcessData( - IN PSDevice pDevice - ) +INTnsProcessData(IN PSDevice pDevice) { - NTSTATUS status = STATUS_SUCCESS; - PSINTData pINTData; - PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - struct net_device_stats* pStats = &pDevice->stats; - - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptProcessData\n"); - - pINTData = (PSINTData) pDevice->intBuf.pDataBuf; - if (pINTData->byTSR0 & TSR_VALID) { - STAvUpdateTDStatCounter (&(pDevice->scStatistic), (BYTE) (pINTData->byPkt0 & 0x0F), (BYTE) (pINTData->byPkt0>>4), pINTData->byTSR0); - BSSvUpdateNodeTxCounter (pDevice, &(pDevice->scStatistic), pINTData->byTSR0, pINTData->byPkt0); - //DBG_PRN_GRP01(("TSR0 %02x\n", pINTData->byTSR0)); - } - if (pINTData->byTSR1 & TSR_VALID) { - STAvUpdateTDStatCounter (&(pDevice->scStatistic), (BYTE) (pINTData->byPkt1 & 0x0F), (BYTE) (pINTData->byPkt1>>4), pINTData->byTSR1); - BSSvUpdateNodeTxCounter (pDevice, &(pDevice->scStatistic), pINTData->byTSR1, pINTData->byPkt1); - //DBG_PRN_GRP01(("TSR1 %02x\n", pINTData->byTSR1)); - } - if (pINTData->byTSR2 & TSR_VALID) { - STAvUpdateTDStatCounter (&(pDevice->scStatistic), (BYTE) (pINTData->byPkt2 & 0x0F), (BYTE) (pINTData->byPkt2>>4), pINTData->byTSR2); - BSSvUpdateNodeTxCounter (pDevice, &(pDevice->scStatistic), pINTData->byTSR2, pINTData->byPkt2); - //DBG_PRN_GRP01(("TSR2 %02x\n", pINTData->byTSR2)); - } - if (pINTData->byTSR3 & TSR_VALID) { - STAvUpdateTDStatCounter (&(pDevice->scStatistic), (BYTE) (pINTData->byPkt3 & 0x0F), (BYTE) (pINTData->byPkt3>>4), pINTData->byTSR3); - BSSvUpdateNodeTxCounter (pDevice, &(pDevice->scStatistic), pINTData->byTSR3, pINTData->byPkt3); - //DBG_PRN_GRP01(("TSR3 %02x\n", pINTData->byTSR3)); - } - if ( pINTData->byISR0 != 0 ) { - if (pINTData->byISR0 & ISR_BNTX) { - - if (pDevice->eOPMode == OP_MODE_AP) { - if(pMgmt->byDTIMCount > 0) { - pMgmt->byDTIMCount --; - pMgmt->sNodeDBTable[0].bRxPSPoll = FALSE; - } else if(pMgmt->byDTIMCount == 0) { - // check if mutltcast tx bufferring - pMgmt->byDTIMCount = pMgmt->byDTIMPeriod - 1; - pMgmt->sNodeDBTable[0].bRxPSPoll = TRUE; - if (pMgmt->sNodeDBTable[0].bPSEnable) { - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RX_PSPOLL, NULL); - } - } - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_BECON_SEND, NULL); - } // if (pDevice->eOPMode == OP_MODE_AP) - - pDevice->bBeaconSent = TRUE; - } else { - pDevice->bBeaconSent = FALSE; - } - if (pINTData->byISR0 & ISR_TBTT) { - if ( pDevice->bEnablePSMode ) { - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_TBTT_WAKEUP, NULL); - } - if ( pDevice->bChannelSwitch ) { - pDevice->byChannelSwitchCount--; - if ( pDevice->byChannelSwitchCount == 0 ) { - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_11H_CHSW, NULL); - } - } - } - LODWORD(pDevice->qwCurrTSF) = pINTData->dwLoTSF; - HIDWORD(pDevice->qwCurrTSF) = pINTData->dwHiTSF; - //DBG_PRN_GRP01(("ISR0 = %02x ,LoTsf = %08x,HiTsf = %08x\n", pINTData->byISR0, pINTData->dwLoTSF,pINTData->dwHiTSF)); - - STAvUpdate802_11Counter(&pDevice->s802_11Counter, &pDevice->scStatistic, pINTData->byRTSSuccess, - pINTData->byRTSFail, pINTData->byACKFail, pINTData->byFCSErr ); - STAvUpdateIsrStatCounter(&pDevice->scStatistic, pINTData->byISR0, pINTData->byISR1); - - } - - if ( pINTData->byISR1 != 0 ) { - if (pINTData->byISR1 & ISR_GPIO3) { - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_RADIO, NULL); - } - } - pDevice->intBuf.uDataLen = 0; - pDevice->intBuf.bInUse = FALSE; - - pStats->tx_packets = pDevice->scStatistic.ullTsrOK; - pStats->tx_bytes = pDevice->scStatistic.ullTxDirectedBytes + - pDevice->scStatistic.ullTxMulticastBytes + - pDevice->scStatistic.ullTxBroadcastBytes; - pStats->tx_errors = pDevice->scStatistic.dwTsrErr; - pStats->tx_dropped = pDevice->scStatistic.dwTsrErr; - - return status; + NTSTATUS status = STATUS_SUCCESS; + PSINTData pINTData; + PSMgmtObject pMgmt = &(pDevice->sMgmtObj); + struct net_device_stats *pStats = &pDevice->stats; + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"---->s_nsInterruptProcessData\n"); + + pINTData = (PSINTData) pDevice->intBuf.pDataBuf; + if (pINTData->byTSR0 & TSR_VALID) { + STAvUpdateTDStatCounter(&(pDevice->scStatistic), + (BYTE) (pINTData->byPkt0 & 0x0F), + (BYTE) (pINTData->byPkt0>>4), + pINTData->byTSR0); + BSSvUpdateNodeTxCounter(pDevice, + &(pDevice->scStatistic), + pINTData->byTSR0, + pINTData->byPkt0); + /*DBG_PRN_GRP01(("TSR0 %02x\n", pINTData->byTSR0));*/ + } + if (pINTData->byTSR1 & TSR_VALID) { + STAvUpdateTDStatCounter(&(pDevice->scStatistic), + (BYTE) (pINTData->byPkt1 & 0x0F), + (BYTE) (pINTData->byPkt1>>4), + pINTData->byTSR1); + BSSvUpdateNodeTxCounter(pDevice, + &(pDevice->scStatistic), + pINTData->byTSR1, + pINTData->byPkt1); + /*DBG_PRN_GRP01(("TSR1 %02x\n", pINTData->byTSR1));*/ + } + if (pINTData->byTSR2 & TSR_VALID) { + STAvUpdateTDStatCounter(&(pDevice->scStatistic), + (BYTE) (pINTData->byPkt2 & 0x0F), + (BYTE) (pINTData->byPkt2>>4), + pINTData->byTSR2); + BSSvUpdateNodeTxCounter(pDevice, + &(pDevice->scStatistic), + pINTData->byTSR2, + pINTData->byPkt2); + /*DBG_PRN_GRP01(("TSR2 %02x\n", pINTData->byTSR2));*/ + } + if (pINTData->byTSR3 & TSR_VALID) { + STAvUpdateTDStatCounter(&(pDevice->scStatistic), + (BYTE) (pINTData->byPkt3 & 0x0F), + (BYTE) (pINTData->byPkt3>>4), + pINTData->byTSR3); + BSSvUpdateNodeTxCounter(pDevice, + &(pDevice->scStatistic), + pINTData->byTSR3, + pINTData->byPkt3); + /*DBG_PRN_GRP01(("TSR3 %02x\n", pINTData->byTSR3));*/ + } + if (pINTData->byISR0 != 0) { + if (pINTData->byISR0 & ISR_BNTX) { + if (pDevice->eOPMode == OP_MODE_AP) { + if (pMgmt->byDTIMCount > 0) { + pMgmt->byDTIMCount--; + pMgmt->sNodeDBTable[0].bRxPSPoll = + FALSE; + } else if (pMgmt->byDTIMCount == 0) { + /* check if mutltcast tx bufferring */ + pMgmt->byDTIMCount = + pMgmt->byDTIMPeriod-1; + pMgmt->sNodeDBTable[0].bRxPSPoll = TRUE; + if (pMgmt->sNodeDBTable[0].bPSEnable) + bScheduleCommand((HANDLE)pDevice, + WLAN_CMD_RX_PSPOLL, + NULL); + } + bScheduleCommand((HANDLE)pDevice, + WLAN_CMD_BECON_SEND, + NULL); + } /* if (pDevice->eOPMode == OP_MODE_AP) */ + pDevice->bBeaconSent = TRUE; + } else { + pDevice->bBeaconSent = FALSE; + } + if (pINTData->byISR0 & ISR_TBTT) { + if (pDevice->bEnablePSMode) + bScheduleCommand((HANDLE) pDevice, + WLAN_CMD_TBTT_WAKEUP, + NULL); + if (pDevice->bChannelSwitch) { + pDevice->byChannelSwitchCount--; + if (pDevice->byChannelSwitchCount == 0) + bScheduleCommand((HANDLE) pDevice, + WLAN_CMD_11H_CHSW, + NULL); + } + } + LODWORD(pDevice->qwCurrTSF) = pINTData->dwLoTSF; + HIDWORD(pDevice->qwCurrTSF) = pINTData->dwHiTSF; + /*DBG_PRN_GRP01(("ISR0 = %02x , + LoTsf = %08x, + HiTsf = %08x\n", + pINTData->byISR0, + pINTData->dwLoTSF, + pINTData->dwHiTSF)); */ + + STAvUpdate802_11Counter(&pDevice->s802_11Counter, + &pDevice->scStatistic, + pINTData->byRTSSuccess, + pINTData->byRTSFail, + pINTData->byACKFail, + pINTData->byFCSErr); + STAvUpdateIsrStatCounter(&pDevice->scStatistic, + pINTData->byISR0, + pINTData->byISR1); + } + + if (pINTData->byISR1 != 0) + if (pINTData->byISR1 & ISR_GPIO3) + bScheduleCommand((HANDLE) pDevice, + WLAN_CMD_RADIO, + NULL); + pDevice->intBuf.uDataLen = 0; + pDevice->intBuf.bInUse = FALSE; + + pStats->tx_packets = pDevice->scStatistic.ullTsrOK; + pStats->tx_bytes = pDevice->scStatistic.ullTxDirectedBytes + + pDevice->scStatistic.ullTxMulticastBytes + + pDevice->scStatistic.ullTxBroadcastBytes; + pStats->tx_errors = pDevice->scStatistic.dwTsrErr; + pStats->tx_dropped = pDevice->scStatistic.dwTsrErr; + + return status; } -- cgit v0.10.2 From d82f139b5865f26b005852cd38119681fe70b0dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javier=20Mu=C3=B1oz=20Mellid?= Date: Mon, 29 Mar 2010 19:35:24 +0200 Subject: Staging: sm7xx: Fixed coding style issue MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed a format issue Signed-off-by: Javier Muñoz Mellid Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/sm7xx/smtcfb.h b/drivers/staging/sm7xx/smtcfb.h index 7ee565c..0c11383 100644 --- a/drivers/staging/sm7xx/smtcfb.h +++ b/drivers/staging/sm7xx/smtcfb.h @@ -3,7 +3,7 @@ * * Copyright (C) 2006 Silicon Motion Technology Corp. * Authors: Ge Wang, gewang@siliconmotion.com - * Boyod boyod.yang@siliconmotion.com.cn + * Boyod boyod.yang@siliconmotion.com.cn * * Copyright (C) 2009 Lemote, Inc. * Author: Wu Zhangjin, wuzhangjin@gmail.com -- cgit v0.10.2 From 933025b60836a80f415bb458f3880519fc24606e Mon Sep 17 00:00:00 2001 From: Ossama Othman Date: Fri, 26 Mar 2010 15:11:11 -0700 Subject: Staging: add initial memrar ABI document Signed-off-by: Ossama Othman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/memrar/memrar-abi b/drivers/staging/memrar/memrar-abi new file mode 100644 index 0000000..98a6bb1 --- /dev/null +++ b/drivers/staging/memrar/memrar-abi @@ -0,0 +1,89 @@ +What: /dev/memrar +Date: March 2010 +KernelVersion: Kernel version this feature first showed up in. +Contact: Ossama Othman +Description: The Intel Moorestown Restricted Access Region (RAR) + Handler driver exposes an ioctl() based interface that + allows a user to reserve and release blocks of RAR + memory. + + Note: A sysfs based one was not appropriate for the + RAR handler's usage model. + + ========================================================= + ioctl() Requests + ========================================================= + RAR_HANDLER_RESERVE + ------------------- + Description: Reserve RAR block. + Type: struct RAR_block_info + Direction: in/out + Errors: EINVAL (invalid RAR type or size) + ENOMEM (not enough RAR memory) + + RAR_HANDLER_STAT + ---------------- + Description: Get RAR statistics. + Type: struct RAR_stat + Direction: in/out + Errors: EINVAL (invalid RAR type) + + RAR_HANDLER_RELEASE + ------------------- + Description: Release previously reserved RAR block. + Type: 32 bit unsigned integer + (e.g. uint32_t), i.e the RAR "handle". + Direction: in + Errors: EINVAL (invalid RAR handle) + + + ========================================================= + ioctl() Request Parameter Types + ========================================================= + The structures referred to above are defined as + follows: + + /** + * struct RAR_block_info - user space struct that + * describes RAR buffer + * @type: Type of RAR memory (e.g., + * RAR_TYPE_VIDEO or RAR_TYPE_AUDIO) [in] + * @size: Requested size of a block in bytes to + * be reserved in RAR. [in] + * @handle: Handle that can be used to refer to + * reserved block. [out] + * + * This is the basic structure exposed to the user + * space that describes a given RAR buffer. It used + * as the parameter for the RAR_HANDLER_RESERVE ioctl. + * The buffer's underlying bus address is not exposed + * to the user. User space code refers to the buffer + * entirely by "handle". + */ + struct RAR_block_info { + __u32 type; + __u32 size; + __u32 handle; + }; + + /** + * struct RAR_stat - RAR statistics structure + * @type: Type of RAR memory (e.g., + * RAR_TYPE_VIDEO or + * RAR_TYPE_AUDIO) [in] + * @capacity: Total size of RAR memory + * region. [out] + * @largest_block_size: Size of the largest reservable + * block. [out] + * + * This structure is used for RAR_HANDLER_STAT ioctl. + */ + struct RAR_stat { + __u32 type; + __u32 capacity; + __u32 largest_block_size; + }; + + Lastly, the RAR_HANDLER_RELEASE ioctl expects a + "handle" to the RAR block of memory. It is a 32 bit + unsigned integer. -- cgit v0.10.2 From 08db6c59a2d4d8162d7544ffaa9aa7d27ce9e50a Mon Sep 17 00:00:00 2001 From: Soeren Moeller Date: Tue, 30 Mar 2010 20:11:12 +0000 Subject: Staging: quatech_usb2: fix coding style issues This is a patch to the file quatech_usb2.c that fixes two space before tabular and one line of more than 80 characters warnings found by checkpatch.pl Signed-off-by: Soeren Moeller Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/quatech_usb2/quatech_usb2.c b/drivers/staging/quatech_usb2/quatech_usb2.c index 1561f74..ecd7313 100644 --- a/drivers/staging/quatech_usb2/quatech_usb2.c +++ b/drivers/staging/quatech_usb2/quatech_usb2.c @@ -57,7 +57,7 @@ static int debug; #define QT2_HW_FLOW_CONTROL_MASK 0xc5 #define QT2_SW_FLOW_CONTROL_MASK 0xc6 #define QT2_SW_FLOW_CONTROL_DISABLE 0xc7 -#define QT2_BREAK_CONTROL 0xc8 +#define QT2_BREAK_CONTROL 0xc8 #define QT2_STOP_RECEIVE 0xe0 #define QT2_FLUSH_DEVICE 0xc4 #define QT2_GET_SET_QMCR 0xe1 @@ -207,7 +207,7 @@ struct quatech2_dev { bool ReadBulkStopped; char open_ports; struct usb_serial_port *current_port; - int buffer_size; + int buffer_size; }; /* structure which holds line and modem status flags */ @@ -1648,10 +1648,10 @@ __func__); } /*endif*/ if (tty_st && urb->actual_length) { tty_buffer_request_room(tty_st, 1); - tty_insert_flip_string(tty_st, - &((unsigned char *)(urb->transfer_buffer) - )[i], - 1); + tty_insert_flip_string(tty_st, &( + (unsigned char *) + (urb->transfer_buffer) + )[i], 1); } } /*endfor*/ tty_flip_buffer_push(tty_st); -- cgit v0.10.2 From 593ef41c95c82a7c8d09c28db4893f4dd2ff0134 Mon Sep 17 00:00:00 2001 From: Olimpiu Pascariu Date: Thu, 1 Apr 2010 23:48:14 +0300 Subject: Staging: rtl8187se: fixed checkpatch.pl warnings and errors in r8180_rtl8225z2.c This is a patch to the r8180_rtl8225z2.c file that fixes up errors and warnings found by the checkpatch.pl tool Signed-off-by: Olimpiu Pascariu Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8187se/r8180_rtl8225z2.c b/drivers/staging/rtl8187se/r8180_rtl8225z2.c index 6edf5a4..2a2afd5 100644 --- a/drivers/staging/rtl8187se/r8180_rtl8225z2.c +++ b/drivers/staging/rtl8187se/r8180_rtl8225z2.c @@ -1,14 +1,13 @@ /* - This is part of the rtl8180-sa2400 driver - released under the GPL (See file COPYING for details). - Copyright (c) 2005 Andrea Merello - - This files contains programming code for the rtl8225 - radio frontend. - - *Many* thanks to Realtek Corp. for their great support! - -*/ + * This is part of the rtl8180-sa2400 driver + * released under the GPL (See file COPYING for details). + * Copyright (c) 2005 Andrea Merello + * + * This files contains programming code for the rtl8225 + * radio frontend. + * + * *Many* thanks to Realtek Corp. for their great support! + */ #include "r8180_hw.h" #include "r8180_rtl8225.h" @@ -225,7 +224,7 @@ static void rtl8225_SetTXPowerLevel(struct net_device *dev, short ch) } static const u8 rtl8225z2_threshold[] = { - 0x8d, 0x8d, 0x8d, 0x8d, 0x9d, 0xad, 0xbd, + 0x8d, 0x8d, 0x8d, 0x8d, 0x9d, 0xad, 0xbd, }; static const u8 rtl8225z2_gain_bg[] = { @@ -307,7 +306,7 @@ static u32 read_rtl8225(struct net_device *dev, u8 adr) u32 data2Write = ((u32)(adr & 0x1f)) << 27; u32 dataRead; u32 mask; - u16 oval,oval2,oval3,tmp; + u16 oval, oval2, oval3, tmp; int i; short bit, rw; u8 wLength = 6; @@ -325,9 +324,11 @@ static u32 read_rtl8225(struct net_device *dev, u8 adr) oval &= ~0xf; - write_nic_word(dev, RFPinsOutput, oval | BB_HOST_BANG_EN ); udelay(4); + write_nic_word(dev, RFPinsOutput, oval | BB_HOST_BANG_EN); + udelay(4); - write_nic_word(dev, RFPinsOutput, oval ); udelay(5); + write_nic_word(dev, RFPinsOutput, oval); + udelay(5); rw = 0; @@ -335,31 +336,45 @@ static u32 read_rtl8225(struct net_device *dev, u8 adr) for (i = 0; i < wLength/2; i++) { bit = ((data2Write&mask) != 0) ? 1 : 0; - write_nic_word(dev, RFPinsOutput, bit|oval | rw); udelay(1); + write_nic_word(dev, RFPinsOutput, bit | oval | rw); + udelay(1); - write_nic_word(dev, RFPinsOutput, bit|oval | BB_HOST_BANG_CLK | rw); udelay(2); - write_nic_word(dev, RFPinsOutput, bit|oval | BB_HOST_BANG_CLK | rw); udelay(2); + write_nic_word(dev, RFPinsOutput, + bit | oval | BB_HOST_BANG_CLK | rw); + udelay(2); + write_nic_word(dev, RFPinsOutput, + bit | oval | BB_HOST_BANG_CLK | rw); + udelay(2); - mask = (low2high) ? (mask<<1): (mask>>1); + mask = (low2high) ? (mask<<1) : (mask>>1); if (i == 2) { rw = BB_HOST_BANG_RW; - write_nic_word(dev, RFPinsOutput, bit|oval | BB_HOST_BANG_CLK | rw); udelay(2); - write_nic_word(dev, RFPinsOutput, bit|oval | rw); udelay(2); + write_nic_word(dev, RFPinsOutput, + bit | oval | BB_HOST_BANG_CLK | rw); + udelay(2); + write_nic_word(dev, RFPinsOutput, bit | oval | rw); + udelay(2); break; } - bit = ((data2Write&mask) != 0) ? 1: 0; + bit = ((data2Write&mask) != 0) ? 1 : 0; - write_nic_word(dev, RFPinsOutput, oval|bit|rw| BB_HOST_BANG_CLK); udelay(2); - write_nic_word(dev, RFPinsOutput, oval|bit|rw| BB_HOST_BANG_CLK); udelay(2); + write_nic_word(dev, RFPinsOutput, + oval | bit | rw | BB_HOST_BANG_CLK); + udelay(2); + write_nic_word(dev, RFPinsOutput, + oval | bit | rw | BB_HOST_BANG_CLK); + udelay(2); - write_nic_word(dev, RFPinsOutput, oval| bit |rw); udelay(1); + write_nic_word(dev, RFPinsOutput, oval | bit | rw); + udelay(1); mask = (low2high) ? (mask<<1) : (mask>>1); } - write_nic_word(dev, RFPinsOutput, rw|oval); udelay(2); + write_nic_word(dev, RFPinsOutput, rw|oval); + udelay(2); mask = (low2high) ? 0x01 : (((u32)0x01) << (12-1)); /* @@ -371,9 +386,12 @@ static u32 read_rtl8225(struct net_device *dev, u8 adr) for (i = 0; i < rLength; i++) { write_nic_word(dev, RFPinsOutput, rw|oval); udelay(1); - write_nic_word(dev, RFPinsOutput, rw|oval|BB_HOST_BANG_CLK); udelay(2); - write_nic_word(dev, RFPinsOutput, rw|oval|BB_HOST_BANG_CLK); udelay(2); - write_nic_word(dev, RFPinsOutput, rw|oval|BB_HOST_BANG_CLK); udelay(2); + write_nic_word(dev, RFPinsOutput, rw|oval|BB_HOST_BANG_CLK); + udelay(2); + write_nic_word(dev, RFPinsOutput, rw|oval|BB_HOST_BANG_CLK); + udelay(2); + write_nic_word(dev, RFPinsOutput, rw|oval|BB_HOST_BANG_CLK); + udelay(2); tmp = read_nic_word(dev, RFPinsInput); dataRead |= (tmp & BB_HOST_BANG_CLK ? mask : 0); @@ -383,7 +401,9 @@ static u32 read_rtl8225(struct net_device *dev, u8 adr) mask = (low2high) ? (mask<<1) : (mask>>1); } - write_nic_word(dev, RFPinsOutput, BB_HOST_BANG_EN|BB_HOST_BANG_RW|oval); udelay(2); + write_nic_word(dev, RFPinsOutput, + BB_HOST_BANG_EN | BB_HOST_BANG_RW | oval); + udelay(2); write_nic_word(dev, RFPinsEnable, oval2); write_nic_word(dev, RFPinsSelect, oval3); /* Set To SW Switch */ @@ -426,7 +446,7 @@ void rtl8225z2_rf_close(struct net_device *dev) s8 DbmToTxPwrIdx(struct r8180_priv *priv, WIRELESS_MODE WirelessMode, s32 PowerInDbm) { - bool bUseDefault = true; + bool bUseDefault = true; s8 TxPwrIdx = 0; /* @@ -486,8 +506,10 @@ void rtl8225z2_SetTXPowerLevel(struct net_device *dev, short ch) if (IS_DOT11D_ENABLE(priv->ieee80211) && IS_DOT11D_STATE_DONE(priv->ieee80211)) { u8 MaxTxPwrInDbm = DOT11D_GetMaxTxPwrInDbm(priv->ieee80211, ch); - u8 CckMaxPwrIdx = DbmToTxPwrIdx(priv, WIRELESS_MODE_B, MaxTxPwrInDbm); - u8 OfdmMaxPwrIdx = DbmToTxPwrIdx(priv, WIRELESS_MODE_G, MaxTxPwrInDbm); + u8 CckMaxPwrIdx = DbmToTxPwrIdx(priv, WIRELESS_MODE_B, + MaxTxPwrInDbm); + u8 OfdmMaxPwrIdx = DbmToTxPwrIdx(priv, WIRELESS_MODE_G, + MaxTxPwrInDbm); if (cck_power_level > CckMaxPwrIdx) cck_power_level = CckMaxPwrIdx; @@ -524,7 +546,7 @@ void rtl8225z2_SetTXPowerLevel(struct net_device *dev, short ch) if (ofdm_power_level <= 11) { write_phy_ofdm(dev, 0x07, 0x5c); write_phy_ofdm(dev, 0x09, 0x5c); - } + } if (ofdm_power_level <= 17) { write_phy_ofdm(dev, 0x07, 0x54); @@ -613,7 +635,7 @@ void rtl8225z2_rf_init(struct net_device *dev) int i; short channel = 1; u16 brsr; - u32 data,addr; + u32 data, addr; priv->chan = channel; @@ -740,7 +762,7 @@ void rtl8225z2_rf_init(struct net_device *dev) write_phy_ofdm(dev, 0x26, 0x90); mdelay(1); write_phy_ofdm(dev, 0x27, 0x88); mdelay(1); - rtl8225z2_set_gain(dev,4); + rtl8225z2_set_gain(dev, 4); write_phy_cck(dev, 0x0, 0x98); mdelay(1); write_phy_cck(dev, 0x3, 0x20); mdelay(1); @@ -803,12 +825,12 @@ void rtl8225z2_rf_set_mode(struct net_device *dev) write_phy_ofdm(dev, 0xf, 0x20); write_phy_ofdm(dev, 0x11, 0x7); - rtl8225z2_set_gain(dev,4); + rtl8225z2_set_gain(dev, 4); - write_phy_ofdm(dev,0x15, 0x40); - write_phy_ofdm(dev,0x17, 0x40); + write_phy_ofdm(dev, 0x15, 0x40); + write_phy_ofdm(dev, 0x17, 0x40); - write_nic_dword(dev, 0x94,0x10000000); + write_nic_dword(dev, 0x94, 0x10000000); } else { write_rtl8225(dev, 0x5, 0x1864); write_nic_dword(dev, RF_PARA, 0x10044); @@ -819,18 +841,18 @@ void rtl8225z2_rf_set_mode(struct net_device *dev) write_phy_ofdm(dev, 0xf, 0x20); write_phy_ofdm(dev, 0x11, 0x7); - rtl8225z2_set_gain(dev,4); + rtl8225z2_set_gain(dev, 4); - write_phy_ofdm(dev,0x15, 0x40); - write_phy_ofdm(dev,0x17, 0x40); + write_phy_ofdm(dev, 0x15, 0x40); + write_phy_ofdm(dev, 0x17, 0x40); - write_nic_dword(dev, 0x94,0x04000002); + write_nic_dword(dev, 0x94, 0x04000002); } } -#define MAX_DOZE_WAITING_TIMES_85B 20 -#define MAX_POLLING_24F_TIMES_87SE 10 -#define LPS_MAX_SLEEP_WAITING_TIMES_87SE 5 +#define MAX_DOZE_WAITING_TIMES_85B 20 +#define MAX_POLLING_24F_TIMES_87SE 10 +#define LPS_MAX_SLEEP_WAITING_TIMES_87SE 5 bool SetZebraRFPowerState8185(struct net_device *dev, RT_RF_POWER_STATE eRFPowerState) @@ -882,12 +904,14 @@ bool SetZebraRFPowerState8185(struct net_device *dev, break; case eRfSleep: for (QueueID = 0, i = 0; QueueID < 6;) { - if (get_curr_tx_free_desc(dev, QueueID) == priv->txringcount) { + if (get_curr_tx_free_desc(dev, QueueID) == + priv->txringcount) { QueueID++; continue; } else { priv->TxPollingTimes++; - if (priv->TxPollingTimes >= LPS_MAX_SLEEP_WAITING_TIMES_87SE) { + if (priv->TxPollingTimes >= + LPS_MAX_SLEEP_WAITING_TIMES_87SE) { bActionAllowed = false; break; } else @@ -915,7 +939,8 @@ bool SetZebraRFPowerState8185(struct net_device *dev, while (true) { u8 tmp24F = read_nic_byte(dev, 0x24f); - if ((tmp24F == 0x01) || (tmp24F == 0x09)) { + if ((tmp24F == 0x01) || + (tmp24F == 0x09)) { bTurnOffBB = true; break; } else { @@ -935,7 +960,8 @@ bool SetZebraRFPowerState8185(struct net_device *dev, if (bTurnOffBB) { /* turn off BB */ u1bTmp = read_nic_byte(dev, 0x24E); - write_nic_byte(dev, 0x24E, (u1bTmp | BIT5 | BIT6)); + write_nic_byte(dev, 0x24E, + (u1bTmp | BIT5 | BIT6)); /* turn off AFE PLL */ write_nic_byte(dev, 0x54, 0xFC); @@ -945,7 +971,8 @@ bool SetZebraRFPowerState8185(struct net_device *dev, break; case eRfOff: for (QueueID = 0, i = 0; QueueID < 6;) { - if (get_curr_tx_free_desc(dev, QueueID) == priv->txringcount) { + if (get_curr_tx_free_desc(dev, QueueID) == + priv->txringcount) { QueueID++; continue; } else { -- cgit v0.10.2 From 3b7b31fa7df01576cc401dff512a6a84cb3753ed Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Sat, 3 Apr 2010 07:00:37 +0200 Subject: Staging: udlfb: minor cleanups This cleans up udlfb a tiny bit. Signed-off-by: Pavel Machek Cc: Bernie Thompson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/udlfb/udlfb.c b/drivers/staging/udlfb/udlfb.c index a78ade0..12444f2 100644 --- a/drivers/staging/udlfb/udlfb.c +++ b/drivers/staging/udlfb/udlfb.c @@ -58,17 +58,17 @@ static struct usb_device_id id_table[] = { MODULE_DEVICE_TABLE(usb, id_table); #ifndef CONFIG_FB_DEFERRED_IO -#warning message "kernel FB_DEFFERRED_IO option to support generic fbdev apps" +#warning Please set CONFIG_FB_DEFFERRED_IO option to support generic fbdev apps #endif #ifndef CONFIG_FB_SYS_IMAGEBLIT #ifndef CONFIG_FB_SYS_IMAGEBLIT_MODULE -#warning message "FB_SYS_* in kernel or module option to support fb console" +#warning Please set CONFIG_FB_SYS_IMAGEBLIT option to support fb console #endif #endif #ifndef CONFIG_FB_MODE_HELPERS -#warning message "kernel FB_MODE_HELPERS required. Expect build break" +#warning CONFIG_FB_MODE_HELPERS required. Expect build break #endif /* dlfb keeps a list of urbs for efficient bulk transfers */ @@ -366,32 +366,32 @@ static int dlfb_trim_hline(const u8 *bback, const u8 **bfront, int *width_bytes) } /* -Render a command stream for an encoded horizontal line segment of pixels. - -A command buffer holds several commands. -It always begins with a fresh command header -(the protocol doesn't require this, but we enforce it to allow -multiple buffers to be potentially encoded and sent in parallel). -A single command encodes one contiguous horizontal line of pixels - -The function relies on the client to do all allocation, so that -rendering can be done directly to output buffers (e.g. USB URBs). -The function fills the supplied command buffer, providing information -on where it left off, so the client may call in again with additional -buffers if the line will take several buffers to complete. - -A single command can transmit a maximum of 256 pixels, -regardless of the compression ratio (protocol design limit). -To the hardware, 0 for a size byte means 256 - -Rather than 256 pixel commands which are either rl or raw encoded, -the rlx command simply assumes alternating raw and rl spans within one cmd. -This has a slightly larger header overhead, but produces more even results. -It also processes all data (read and write) in a single pass. -Performance benchmarks of common cases show it having just slightly better -compression than 256 pixel raw -or- rle commands, with similar CPU consumpion. -But for very rl friendly data, will compress not quite as well. -*/ + * Render a command stream for an encoded horizontal line segment of pixels. + * + * A command buffer holds several commands. + * It always begins with a fresh command header + * (the protocol doesn't require this, but we enforce it to allow + * multiple buffers to be potentially encoded and sent in parallel). + * A single command encodes one contiguous horizontal line of pixels + * + * The function relies on the client to do all allocation, so that + * rendering can be done directly to output buffers (e.g. USB URBs). + * The function fills the supplied command buffer, providing information + * on where it left off, so the client may call in again with additional + * buffers if the line will take several buffers to complete. + * + * A single command can transmit a maximum of 256 pixels, + * regardless of the compression ratio (protocol design limit). + * To the hardware, 0 for a size byte means 256 + * + * Rather than 256 pixel commands which are either rl or raw encoded, + * the rlx command simply assumes alternating raw and rl spans within one cmd. + * This has a slightly larger header overhead, but produces more even results. + * It also processes all data (read and write) in a single pass. + * Performance benchmarks of common cases show it having just slightly better + * compression than 256 pixel raw -or- rle commands, with similar CPU consumpion. + * But for very rl friendly data, will compress not quite as well. + */ static void dlfb_compress_hline( const uint16_t **pixel_start_ptr, const uint16_t *const pixel_end, -- cgit v0.10.2 From b46966ee8f7c75fcff9e7390d29b1f62650b0784 Mon Sep 17 00:00:00 2001 From: Ng Kian Yong Date: Sat, 3 Apr 2010 17:09:34 +0800 Subject: Staging: vt6655: fix brace coding style issue in ioctl.c This is a patch to the ioctl.c file that fixes up a brace warning found by the checkpatch.pl tool Signed-off-by: Ng Kian Yong Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/ioctl.c b/drivers/staging/vt6655/ioctl.c index d9a5fd2..38577ca 100644 --- a/drivers/staging/vt6655/ioctl.c +++ b/drivers/staging/vt6655/ioctl.c @@ -83,7 +83,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { pReq->wResult = 0; - switch(pReq->wCmdCode) { + switch (pReq->wCmdCode) { case WLAN_CMD_BSS_SCAN: -- cgit v0.10.2 From 3eec314fb26fc0e75c6f5d20f9b3d528ebf342d7 Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Sat, 10 Apr 2010 00:33:17 +0200 Subject: Staging: rtl8187se: Do not autoconnect based on probe response Getting a probe response after sending a probe request to a specific SSID doesnt mean we're trying to associate with this SSID. wpa_supplicant should be the only one deciding when to join an SSID, not the kernel. Signed-off-by: Samuel Ortiz Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c index 2b7080c..3a72449 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_rx.c @@ -1489,8 +1489,6 @@ inline void ieee80211_process_probe_response( memcpy(target, &network, sizeof(*target)); list_add_tail(&target->list, &ieee->network_list); - if(ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) - ieee80211_softmac_new_net(ieee,&network); } else { IEEE80211_DEBUG_SCAN("Updating '%s' (%pM) via %s.\n", escape_essid(target->ssid, @@ -1516,8 +1514,6 @@ inline void ieee80211_process_probe_response( renew = 1; //YJ,add,080819,for hidden ap,end update_network(target, &network); - if(renew && (ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE)) - ieee80211_softmac_new_net(ieee,&network); } spin_unlock_irqrestore(&ieee->lock, flags); -- cgit v0.10.2 From 592010bb71901d991cd758f6294db2db47e8efa1 Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Sat, 10 Apr 2010 00:33:19 +0200 Subject: Staging: rtl8187se: Do not send NULL BSSID events when not associated If we're not associated, we should not send wireless events to let userspace know that we just left an ESSID, simply because we havent yet joined it. If we keep on doing that, wpa_supplicant could receive such events while actually trying to join an ESSID, and thus decide to stop trying. This leads to a lot of connection failures as this driver seems to be sending GIWAP events quite a lot. Signed-off-by: Samuel Ortiz Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c index 5fdb8f3..e099a5f 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c @@ -2322,9 +2322,11 @@ void ieee80211_disassociate(struct ieee80211_device *ieee) if(IS_DOT11D_ENABLE(ieee)) Dot11d_Reset(ieee); - ieee->state = IEEE80211_NOLINK; + ieee->link_change(ieee->dev); - notify_wx_assoc_event(ieee); + if (ieee->state == IEEE80211_LINKED) + notify_wx_assoc_event(ieee); + ieee->state = IEEE80211_NOLINK; } void ieee80211_associate_retry_wq(struct work_struct *work) -- cgit v0.10.2 From a5e135b1f510e2d65f01190d7f292c298f337fc9 Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Sat, 10 Apr 2010 00:33:18 +0200 Subject: Staging: rtl8187se: Do not mess with carrier settings while scanning Toggling the link carrier is a non sense and is the grossest locking I can think of. Moreover, it's giving a completely inaccurate status to userspace who could for example decide to turn the interface down on carrier off detection. Signed-off-by: Samuel Ortiz Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac_wx.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac_wx.c index ad42bcd..e46ff2f 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac_wx.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac_wx.c @@ -277,8 +277,6 @@ void ieee80211_wx_sync_scan_wq(struct work_struct *work) chan = ieee->current_network.channel; - netif_carrier_off(ieee->dev); - if (ieee->data_hard_stop) ieee->data_hard_stop(ieee->dev); @@ -300,8 +298,6 @@ void ieee80211_wx_sync_scan_wq(struct work_struct *work) if(ieee->iw_mode == IW_MODE_ADHOC || ieee->iw_mode == IW_MODE_MASTER) ieee80211_start_send_beacons(ieee); - netif_carrier_on(ieee->dev); - //YJ,add,080828, In prevent of lossing ping packet during scanning //ieee80211_sta_ps_send_null_frame(ieee, false); //YJ,add,080828,end -- cgit v0.10.2 From cb73da2524df912ddec4aed0b6df1c0374f4ffc1 Mon Sep 17 00:00:00 2001 From: John Church Date: Thu, 8 Apr 2010 16:04:17 -0500 Subject: Staging: rtl8187se: fix coding style issues in r8180_core.c Signed-off-by: Larry Finger Signed-off-by: John Church Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8187se/r8180_core.c b/drivers/staging/rtl8187se/r8180_core.c index 88fe623..84a745b 100644 --- a/drivers/staging/rtl8187se/r8180_core.c +++ b/drivers/staging/rtl8187se/r8180_core.c @@ -44,24 +44,24 @@ #include "ieee80211/dot11d.h" static struct pci_device_id rtl8180_pci_id_tbl[] __devinitdata = { - { - .vendor = PCI_VENDOR_ID_REALTEK, - .device = 0x8199, - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - .driver_data = 0, - }, - { - .vendor = 0, - .device = 0, - .subvendor = 0, - .subdevice = 0, - .driver_data = 0, - } + { + .vendor = PCI_VENDOR_ID_REALTEK, + .device = 0x8199, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = 0, + }, + { + .vendor = 0, + .device = 0, + .subvendor = 0, + .subdevice = 0, + .driver_data = 0, + } }; -static char* ifname = "wlan%d"; +static char *ifname = "wlan%d"; static int hwseqnum = 0; static int hwwep = 0; static int channels = 0x3fff; @@ -168,34 +168,34 @@ static struct pci_driver rtl8180_pci_driver = { u8 read_nic_byte(struct net_device *dev, int x) { - return 0xff&readb((u8*)dev->mem_start +x); + return 0xff&readb((u8 *)dev->mem_start + x); } u32 read_nic_dword(struct net_device *dev, int x) { - return readl((u8*)dev->mem_start +x); + return readl((u8 *)dev->mem_start + x); } u16 read_nic_word(struct net_device *dev, int x) { - return readw((u8*)dev->mem_start +x); + return readw((u8 *)dev->mem_start + x); } void write_nic_byte(struct net_device *dev, int x,u8 y) { - writeb(y,(u8*)dev->mem_start +x); + writeb(y, (u8 *)dev->mem_start + x); udelay(20); } void write_nic_dword(struct net_device *dev, int x,u32 y) { - writel(y,(u8*)dev->mem_start +x); + writel(y, (u8 *)dev->mem_start + x); udelay(20); } void write_nic_word(struct net_device *dev, int x,u16 y) { - writew(y,(u8*)dev->mem_start +x); + writew(y, (u8 *)dev->mem_start + x); udelay(20); } @@ -313,7 +313,7 @@ void rtl8180_proc_module_init(void) void rtl8180_proc_module_remove(void) { - remove_proc_entry(RTL8180_MODULE_NAME, init_net.proc_net); + remove_proc_entry(RTL8180_MODULE_NAME, init_net.proc_net); } void rtl8180_proc_remove_one(struct net_device *dev) @@ -383,7 +383,7 @@ void rtl8180_proc_init_one(struct net_device *dev) short buffer_add(struct buffer **buffer, u32 *buf, dma_addr_t dma, struct buffer **bufferhead) { - struct buffer *tmp; + struct buffer *tmp; if(! *buffer){ @@ -1429,7 +1429,7 @@ void rtl8180_rx(struct net_device *dev) u32 RXAGC = 0; long RxAGC_dBm = 0; u8 LNA=0, BB=0; - u8 LNA_gain[4]={02, 17, 29, 39}; + u8 LNA_gain[4] = {02, 17, 29, 39}; u8 Antenna = 0; struct ieee80211_hdr_4addr *hdr; u16 fc,type; @@ -1531,7 +1531,7 @@ void rtl8180_rx(struct net_device *dev) }else { padding = 0; } - padding = 0; + padding = 0; priv->rx_prevlen+=len; if(priv->rx_prevlen > MAX_FRAG_THRESHOLD + 100){ @@ -1624,7 +1624,7 @@ void rtl8180_rx(struct net_device *dev) bICV = ((*(priv->rxringtail)) & (0x00001000)) >> 12; hdr = (struct ieee80211_hdr_4addr *)priv->rxbuffer->buf; fc = le16_to_cpu(hdr->frame_ctl); - type = WLAN_FC_GET_TYPE(fc); + type = WLAN_FC_GET_TYPE(fc); if((IEEE80211_FTYPE_CTL != type) && (eqMacAddr(priv->ieee80211->current_network.bssid, (fc & IEEE80211_FCTL_TODS)? hdr->addr1 : (fc & IEEE80211_FCTL_FROMDS )? hdr->addr2 : hdr->addr3)) @@ -1948,11 +1948,11 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, u8 bUseShortPreamble = 0; u8 bCTSEnable = 0; u8 bRTSEnable = 0; - u16 Duration = 0; + u16 Duration = 0; u16 RtsDur = 0; u16 ThisFrameTime = 0; u16 TxDescDuration = 0; - u8 ownbit_flag = false; + u8 ownbit_flag = false; switch(priority) { case MANAGE_PRIORITY: @@ -2000,7 +2000,7 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, default: return -1; break; - } + } memcpy(&dest, frag_hdr->addr1, ETH_ALEN); if (is_multicast_ether_addr(dest) || @@ -2151,8 +2151,8 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, if(morefrag) *tail = (*tail) | (1<<17); // more fragment if(!remain) *tail = (*tail) | (1<<28); // last segment of frame - *(tail+5) = *(tail+5)|(2<<27); - *(tail+7) = *(tail+7)|(1<<4); + *(tail+5) = *(tail+5)|(2<<27); + *(tail+7) = *(tail+7)|(1<<4); wmb(); if(ownbit_flag) @@ -2289,13 +2289,13 @@ void rtl8180_hw_wakeup(struct net_device *dev) void rtl8180_hw_sleep_down(struct net_device *dev) { - unsigned long flags; - struct r8180_priv *priv = ieee80211_priv(dev); + unsigned long flags; + struct r8180_priv *priv = ieee80211_priv(dev); - spin_lock_irqsave(&priv->ps_lock,flags); - if(priv->rf_sleep) - priv->rf_sleep(dev); - spin_unlock_irqrestore(&priv->ps_lock,flags); + spin_lock_irqsave(&priv->ps_lock, flags); + if (priv->rf_sleep) + priv->rf_sleep(dev); + spin_unlock_irqrestore(&priv->ps_lock, flags); } void rtl8180_hw_sleep(struct net_device *dev, u32 th, u32 tl) @@ -2786,7 +2786,7 @@ short rtl8180_init(struct net_device *dev) priv->ieee80211->data_hard_stop = rtl8180_data_hard_stop; priv->ieee80211->data_hard_resume = rtl8180_data_hard_resume; - priv->ieee80211->init_wmmparam_flag = 0; + priv->ieee80211->init_wmmparam_flag = 0; priv->ieee80211->start_send_beacons = rtl8180_start_tx_beacon; priv->ieee80211->stop_send_beacons = rtl8180_beacon_tx_disable; @@ -2956,8 +2956,8 @@ short rtl8180_init(struct net_device *dev) return -ENOMEM; if(request_irq(dev->irq, (void *)rtl8180_interrupt, IRQF_SHARED, dev->name, dev)){ - DMESGE("Error allocating IRQ %d",dev->irq); - return -1; + DMESGE("Error allocating IRQ %d", dev->irq); + return -1; }else{ priv->irq=dev->irq; DMESG("IRQ %d",dev->irq); @@ -3102,7 +3102,7 @@ void rtl8185_set_rate(struct net_device *dev) void rtl8180_adapter_start(struct net_device *dev) { - struct r8180_priv *priv = ieee80211_priv(dev); + struct r8180_priv *priv = ieee80211_priv(dev); rtl8180_rtx_disable(dev); rtl8180_reset(dev); @@ -3196,7 +3196,7 @@ void rtl8180_start_tx_beacon(struct net_device *dev) rtl8180_set_mode(dev, EPROM_CMD_NORMAL); - rtl8185b_irq_enable(dev); + rtl8185b_irq_enable(dev); } static struct net_device_stats *rtl8180_stats(struct net_device *dev) @@ -3252,9 +3252,9 @@ void rtl8180_hw_sleep_wq (struct work_struct *work) { struct delayed_work *dwork = to_delayed_work(work); struct ieee80211_device *ieee = container_of(dwork,struct ieee80211_device,hw_sleep_wq); - struct net_device *dev = ieee->dev; + struct net_device *dev = ieee->dev; - rtl8180_hw_sleep_down(dev); + rtl8180_hw_sleep_down(dev); } static void MgntLinkKeepAlive(struct r8180_priv *priv ) @@ -3373,7 +3373,7 @@ int _rtl8180_up(struct net_device *dev) } timer_rate_adaptive((unsigned long)dev); watch_dog_adaptive((unsigned long)dev); - if(priv->bSwAntennaDiverity) + if (priv->bSwAntennaDiverity) SwAntennaDiversityTimerCallback(dev); ieee80211_softmac_start_protocol(priv->ieee80211); return 0; @@ -3614,10 +3614,10 @@ static int __devinit rtl8180_pci_probe(struct pci_dev *pdev, dev->watchdog_timeo = HZ*3; if (dev_alloc_name(dev, ifname) < 0){ - DMESG("Oops: devname already taken! Trying wlan%%d...\n"); + DMESG("Oops: devname already taken! Trying wlan%%d...\n"); ifname = "wlan%d"; dev_alloc_name(dev, ifname); - } + } if(rtl8180_init(dev)!=0){ DMESG("Initialization failed"); @@ -4091,10 +4091,10 @@ void GPIOChangeRFWorkItemCallBack(struct work_struct *work) u8 btPSR; u8 btConfig0; RT_RF_POWER_STATE eRfPowerStateToSet; - bool bActuallySet=false; + bool bActuallySet = false; char *argv[3]; - static char *RadioPowerPath = "/etc/acpi/events/RadioPower.sh"; + static char *RadioPowerPath = "/etc/acpi/events/RadioPower.sh"; static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL}; static int readf_count = 0; -- cgit v0.10.2 From 1695eb36bf4616c6ec062d2dc2c3abe54d3aa313 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 11 Apr 2010 13:22:53 +0300 Subject: Staging: serqt_usb2: fix space coding style issue in serqt_usb2.c This is a patch to the serqt_usb2.c files that fixed space error and warning found by the checkpatch.pl tools. Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/serqt_usb2/serqt_usb2.c b/drivers/staging/serqt_usb2/serqt_usb2.c index 44f2d4e..27841ef 100644 --- a/drivers/staging/serqt_usb2/serqt_usb2.c +++ b/drivers/staging/serqt_usb2/serqt_usb2.c @@ -413,7 +413,7 @@ static void qt_read_bulk_callback(struct urb *urb) case 0x01: /* Modem status status change 4th byte must follow */ - dbg("Modem status status. \n"); + dbg("Modem status status.\n"); if (i > (RxCount - 4)) { dbg("Illegal escape sequences in received data\n"); break; @@ -424,7 +424,7 @@ static void qt_read_bulk_callback(struct urb *urb) flag = 1; break; case 0xff: - dbg("No status sequence. \n"); + dbg("No status sequence.\n"); if (tty) { ProcessRxChar(tty, port, data[i]); @@ -738,7 +738,7 @@ static int qt_startup(struct usb_serial *serial) if (!qt_port) { dbg("%s: kmalloc for quatech_port (%d) failed!.", __func__, i); - for(--i; i >= 0; i--) { + for (--i; i >= 0; i--) { port = serial->port[i]; kfree(usb_get_serial_port_data(port)); usb_set_serial_port_data(port, NULL); @@ -963,11 +963,11 @@ static int qt_open(struct tty_struct *tty, } - dbg("port number is %d \n", port->number); - dbg("serial number is %d \n", port->serial->minor); - dbg("Bulkin endpoint is %d \n", port->bulk_in_endpointAddress); - dbg("BulkOut endpoint is %d \n", port->bulk_out_endpointAddress); - dbg("Interrupt endpoint is %d \n", port->interrupt_in_endpointAddress); + dbg("port number is %d\n", port->number); + dbg("serial number is %d\n", port->serial->minor); + dbg("Bulkin endpoint is %d\n", port->bulk_in_endpointAddress); + dbg("BulkOut endpoint is %d\n", port->bulk_out_endpointAddress); + dbg("Interrupt endpoint is %d\n", port->interrupt_in_endpointAddress); dbg("port's number in the device is %d\n", quatech_port->port_num); quatech_port->read_urb = port->read_urb; @@ -1470,7 +1470,7 @@ static int qt_tiocmget(struct tty_struct *tty, struct file *file) int retval = -ENODEV; unsigned long flags; - dbg("In %s \n", __func__); + dbg("In %s\n", __func__); if (!serial) return -ENODEV; @@ -1496,14 +1496,14 @@ static int qt_tiocmset(struct tty_struct *tty, struct file *file, unsigned long flags; int retval = -ENODEV; - dbg("In %s \n", __func__); + dbg("In %s\n", __func__); if (!serial) return -ENODEV; spin_lock_irqsave(&qt_port->lock, flags); - dbg("%s - port %d \n", __func__, port->number); + dbg("%s - port %d\n", __func__, port->number); dbg("%s - qt_port->RxHolding = %d\n", __func__, qt_port->RxHolding); retval = qt_real_tiocmset(tty, port, file, serial, set); @@ -1584,9 +1584,9 @@ static int qt_calc_num_ports(struct usb_serial *serial) { int num_ports; - dbg("numberofendpoints: %d \n", + dbg("numberofendpoints: %d\n", (int)serial->interface->cur_altsetting->desc.bNumEndpoints); - dbg("numberofendpoints: %d \n", + dbg("numberofendpoints: %d\n", (int)serial->interface->altsetting->desc.bNumEndpoints); num_ports = -- cgit v0.10.2 From 1fc5af161f09da027d442a691de67644b66fd012 Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 11 Apr 2010 13:39:47 +0300 Subject: Staging: rtl8192u: fix comments and space coding style issue in dot11d.h This is a patch to the dot11d.h file that fixed up a comments and space Errors found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192u/dot11d.h b/drivers/staging/rtl8192u/dot11d.h index 15b7a4b..0851b9d 100644 --- a/drivers/staging/rtl8192u/dot11d.h +++ b/drivers/staging/rtl8192u/dot11d.h @@ -4,44 +4,44 @@ #ifdef ENABLE_DOT11D #include "ieee80211.h" -//#define ENABLE_DOT11D - -//#define DOT11D_MAX_CHNL_NUM 83 typedef struct _CHNL_TXPOWER_TRIPLE { u8 FirstChnl; u8 NumChnls; u8 MaxTxPowerInDbm; -}CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE; +} CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE; typedef enum _DOT11D_STATE { DOT11D_STATE_NONE = 0, DOT11D_STATE_LEARNED, DOT11D_STATE_DONE, -}DOT11D_STATE; +} DOT11D_STATE; typedef struct _RT_DOT11D_INFO { - //DECLARE_RT_OBJECT(RT_DOT11D_INFO); + /* DECLARE_RT_OBJECT(RT_DOT11D_INFO); */ - bool bEnabled; // dot11MultiDomainCapabilityEnabled + bool bEnabled; /* dot11MultiDomainCapabilityEnabled */ - u16 CountryIeLen; // > 0 if CountryIeBuf[] contains valid country information element. + u16 CountryIeLen; /* > 0 if CountryIeBuf[] contains valid country information element. */ u8 CountryIeBuf[MAX_IE_LEN]; - u8 CountryIeSrcAddr[6]; // Source AP of the country IE. + u8 CountryIeSrcAddr[6]; /* Source AP of the country IE. */ u8 CountryIeWatchdog; - u8 channel_map[MAX_CHANNEL_NUMBER+1]; //!!!Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan) - //u8 ChnlListLen; // #Bytes valid in ChnlList[]. - //u8 ChnlList[DOT11D_MAX_CHNL_NUM]; + u8 channel_map[MAX_CHANNEL_NUMBER+1]; /* !Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan) */ u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1]; DOT11D_STATE State; -}RT_DOT11D_INFO, *PRT_DOT11D_INFO; -#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 ) -#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5]) +} RT_DOT11D_INFO, *PRT_DOT11D_INFO; +#define eqMacAddr(a, b) (((a)[0] == (b)[0] && \ + (a)[1] == (b)[1] && (a)[2] == (b)[2] && (a)[3] == (b)[3] && \ + (a)[4] == (b)[4] && (a)[5] == (b)[5]) ? 1 : 0) +#define cpMacAddr(des, src) ((des)[0] = (src)[0], \ + (des)[1] = (src)[1], (des)[2] = (src)[2], \ + (des)[3] = (src)[3], (des)[4] = (src)[4], \ + (des)[5] = (src)[5]) #define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo)) -#define IS_DOT11D_ENABLE(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->bEnabled +#define IS_DOT11D_ENABLE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->bEnabled) #define IS_COUNTRY_IE_VALID(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0) #define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa) @@ -53,9 +53,9 @@ typedef struct _RT_DOT11D_INFO { (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, (__Ie).Octet, (__Ie).Length))) #define CIE_WATCHDOG_TH 1 -#define GET_CIE_WATCHDOG(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog +#define GET_CIE_WATCHDOG(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog) #define RESET_CIE_WATCHDOG(__pIeeeDev) GET_CIE_WATCHDOG(__pIeeeDev) = 0 -#define UPDATE_CIE_WATCHDOG(__pIeeeDev) ++GET_CIE_WATCHDOG(__pIeeeDev) +#define UPDATE_CIE_WATCHDOG(__pIeeeDev) (++GET_CIE_WATCHDOG(__pIeeeDev)) #define IS_DOT11D_STATE_DONE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE) @@ -73,9 +73,9 @@ Dot11d_Reset( void Dot11d_UpdateCountryIe( struct ieee80211_device *dev, - u8 * pTaddr, - u16 CoutryIeLen, - u8 * pCoutryIe + u8 *pTaddr, + u16 CoutryIeLen, + u8 *pCoutryIe ); u8 @@ -86,17 +86,17 @@ DOT11D_GetMaxTxPwrInDbm( void DOT11D_ScanComplete( - struct ieee80211_device * dev + struct ieee80211_device *dev ); int IsLegalChannel( - struct ieee80211_device * dev, + struct ieee80211_device *dev, u8 channel ); int ToLegalChannel( - struct ieee80211_device * dev, + struct ieee80211_device *dev, u8 channel ); -#endif //ENABLE_DOT11D -#endif // #ifndef __INC_DOT11D_H +#endif /* ENABLE_DOT11D */ +#endif /* #ifndef __INC_DOT11D_H */ -- cgit v0.10.2 From 9271ff10480023953bebe2f897af8128b5334f7a Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 11 Apr 2010 15:05:39 +0300 Subject: Staging: rtl8192u: ix brace, comments and space coding style issue in ieee80211.h This is a patch to the ieee80211.h file that fixed up a brace, comments and space Errors found by the checkpatch.pl tools. Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192u/ieee80211.h b/drivers/staging/rtl8192u/ieee80211.h index 9d05ed6..ef9e941 100644 --- a/drivers/staging/rtl8192u/ieee80211.h +++ b/drivers/staging/rtl8192u/ieee80211.h @@ -58,12 +58,12 @@ * */ #define container_of(ptr, type, member) ({ \ - const typeof( ((type *)0)->member ) *__mptr = (ptr); \ - (type *)( (char *)__mptr - offsetof(type,member) );}) + const typeof(((type *)0)->member) (*__mptr = (ptr)); \ + (type *)((char *)__mptr - offsetof(type, member)); }) #endif #define KEY_TYPE_NA 0x0 -#define KEY_TYPE_WEP40 0x1 +#define KEY_TYPE_WEP40 0x1 #define KEY_TYPE_TKIP 0x2 #define KEY_TYPE_CCMP 0x4 #define KEY_TYPE_WEP104 0x5 @@ -71,9 +71,9 @@ /* added for rtl819x tx procedure */ #define MAX_QUEUE_SIZE 0x10 -// -// 8190 queue mapping -// +/* + * 8190 queue mapping + */ #define BK_QUEUE 0 #define BE_QUEUE 1 #define VI_QUEUE 2 @@ -87,13 +87,13 @@ #define LOW_QUEUE BE_QUEUE #define NORMAL_QUEUE MGNT_QUEUE -//added by amy for ps +/* added by amy for ps */ #define SWRF_TIMEOUT 50 -//added by amy for LEAP related -#define IE_CISCO_FLAG_POSITION 0x08 // Flag byte: byte 8, numbered from 0. -#define SUPPORT_CKIP_MIC 0x08 // bit3 -#define SUPPORT_CKIP_PK 0x10 // bit4 +/* added by amy for LEAP related */ +#define IE_CISCO_FLAG_POSITION 0x08 /* Flag byte: byte 8, numbered from 0. */ +#define SUPPORT_CKIP_MIC 0x08 /* bit3 */ +#define SUPPORT_CKIP_PK 0x10 /* bit4 */ /* defined for skb cb field */ /* At most 28 byte */ typedef struct cb_desc { @@ -105,7 +105,7 @@ typedef struct cb_desc { u8 bEncrypt:1; u8 bTxDisableRateFallBack:1; u8 bTxUseDriverAssingedRate:1; - u8 bHwSec:1; //indicate whether use Hw security. WB + u8 bHwSec:1; /* indicate whether use Hw security. WB */ u8 reserved1; @@ -125,17 +125,13 @@ typedef struct cb_desc { u8 bRTSUseShortGI:1; u8 bMulticast:1; u8 bBroadcast:1; - //u8 reserved2:2; u8 drv_agg_enable:1; u8 reserved2:1; /* Tx Desc related element(12-19) */ u8 rata_index; u8 queue_index; - //u8 reserved3; - //u8 reserved4; u16 txbuf_size; - //u8 reserved5; u8 RATRIndex; u8 reserved6; u8 reserved7; @@ -146,13 +142,10 @@ typedef struct cb_desc { u8 rts_rate; u8 ampdu_factor; u8 ampdu_density; - //u8 reserved9; - //u8 reserved10; - //u8 reserved11; u8 DrvAggrNum; u16 pkt_size; u8 reserved12; -}cb_desc, *pcb_desc; +} cb_desc, *pcb_desc; /*--------------------------Define -------------------------------------------*/ #define MGN_1M 0x02 @@ -186,9 +179,9 @@ typedef struct cb_desc { #define MGN_MCS14 0x8e #define MGN_MCS15 0x8f -//---------------------------------------------------------------------------- -// 802.11 Management frame Reason Code field -//---------------------------------------------------------------------------- +/* + * 802.11 Management frame Reason Code field + */ enum _ReasonCode{ unspec_reason = 0x1, auth_not_valid = 0x2, @@ -200,11 +193,11 @@ enum _ReasonCode{ disas_lv_ss = 0x8, asoc_not_auth = 0x9, - //----MIC_CHECK + /* ----MIC_CHECK */ mic_failure = 0xe, - //----END MIC_CHECK + /* ----END MIC_CHECK */ - // Reason code defined in 802.11i D10.0 p.28. + /* Reason code defined in 802.11i D10.0 p.28. */ invalid_IE = 0x0d, four_way_tmout = 0x0f, two_way_tmout = 0x10, @@ -214,27 +207,29 @@ enum _ReasonCode{ invalid_AKMP = 0x14, unsup_RSNIEver = 0x15, invalid_RSNIE = 0x16, - auth_802_1x_fail= 0x17, + auth_802_1x_fail = 0x17, ciper_reject = 0x18, - // Reason code defined in 7.3.1.7, 802.1e D13.0, p.42. Added by Annie, 2005-11-15. - QoS_unspec = 0x20, // 32 - QAP_bandwidth = 0x21, // 33 - poor_condition = 0x22, // 34 - no_facility = 0x23, // 35 - // Where is 36??? - req_declined = 0x25, // 37 - invalid_param = 0x26, // 38 - req_not_honored= 0x27, // 39 - TS_not_created = 0x2F, // 47 - DL_not_allowed = 0x30, // 48 - dest_not_exist = 0x31, // 49 - dest_not_QSTA = 0x32, // 50 + /* Reason code defined in 7.3.1.7, 802.1e D13.0, p.42. */ + QoS_unspec = 0x20, /* 32 */ + QAP_bandwidth = 0x21, /* 33 */ + poor_condition = 0x22, /* 34 */ + no_facility = 0x23, /* 35 */ + /* Where is 36??? */ + req_declined = 0x25, /* 37 */ + invalid_param = 0x26, /* 38 */ + req_not_honored = 0x27, /* 39 */ + TS_not_created = 0x2F, /* 47 */ + DL_not_allowed = 0x30, /* 48 */ + dest_not_exist = 0x31, /* 49 */ + dest_not_QSTA = 0x32, /* 50 */ }; -#define aSifsTime ((priv->ieee80211->current_network.mode == IEEE_A)||(priv->ieee80211->current_network.mode == IEEE_N_24G)||(priv->ieee80211->current_network.mode == IEEE_N_5G))? 16 : 10 +#define aSifsTime ((priv->ieee80211->current_network.mode == IEEE_A) || \ + (priv->ieee80211->current_network.mode == IEEE_N_24G) || \ + (priv->ieee80211->current_network.mode == IEEE_N_5G)) ? 16 : 10 #define MGMT_QUEUE_NUM 5 @@ -249,15 +244,12 @@ enum _ReasonCode{ #define IEEE_PARAM_PRIVACY_INVOKED 4 #define IEEE_PARAM_AUTH_ALGS 5 #define IEEE_PARAM_IEEE_802_1X 6 -//It should consistent with the driver_XXX.c -// David, 2006.9.26 +/* It should consistent with the driver_XXX.c */ #define IEEE_PARAM_WPAX_SELECT 7 -//Added for notify the encryption type selection -// David, 2006.9.26 +/* Added for notify the encryption type selection */ #define IEEE_PROTO_WPA 1 #define IEEE_PROTO_RSN 2 -//Added for notify the encryption type selection -// David, 2006.9.26 +/* Added for notify the encryption type selection */ #define IEEE_WPAX_USEGROUP 0 #define IEEE_WPAX_WEP40 1 #define IEEE_WPAX_TKIP 2 @@ -284,7 +276,7 @@ enum _ReasonCode{ #define MAX_IE_LEN 0xff -// added for kernel conflict +/* added for kernel conflict */ #define ieee80211_crypt_deinit_entries ieee80211_crypt_deinit_entries_rsl #define ieee80211_crypt_deinit_handler ieee80211_crypt_deinit_handler_rsl #define ieee80211_crypt_delayed_deinit ieee80211_crypt_delayed_deinit_rsl @@ -385,7 +377,7 @@ typedef struct ieee_param { u8 key[0]; } crypt; } u; -}ieee_param; +} ieee_param; #if WIRELESS_EXT < 17 @@ -398,7 +390,7 @@ typedef struct ieee_param { #endif -// linux under 2.6.9 release may not support it, so modify it for common use +/* linux under 2.6.9 release may not support it, so modify it for common use */ #define MSECS(t) msecs_to_jiffies(t) #define msleep_interruptible_rsl msleep_interruptible @@ -432,7 +424,7 @@ typedef struct ieee_param { #define IEEE80211_FCTL_FRAMETYPE 0x00fc #define IEEE80211_FCTL_TODS 0x0100 #define IEEE80211_FCTL_FROMDS 0x0200 -#define IEEE80211_FCTL_DSTODS 0x0300 //added by david +#define IEEE80211_FCTL_DSTODS 0x0300 #define IEEE80211_FCTL_MOREFRAGS 0x0400 #define IEEE80211_FCTL_RETRY 0x0800 #define IEEE80211_FCTL_PM 0x1000 @@ -476,7 +468,7 @@ typedef struct ieee_param { #define IEEE80211_STYPE_CFACK 0x0050 #define IEEE80211_STYPE_CFPOLL 0x0060 #define IEEE80211_STYPE_CFACKPOLL 0x0070 -#define IEEE80211_STYPE_QOS_DATA 0x0080 //added for WMM 2006/8/2 +#define IEEE80211_STYPE_QOS_DATA 0x0080 #define IEEE80211_STYPE_QOS_NULL 0x00C0 #define IEEE80211_SCTL_FRAG 0x000F @@ -486,12 +478,12 @@ typedef struct ieee_param { #define IEEE80211_QCTL_TID 0x000F #define FC_QOS_BIT BIT7 -#define IsDataFrame(pdu) ( ((pdu[0] & 0x0C)==0x08) ? true : false ) -#define IsLegacyDataFrame(pdu) (IsDataFrame(pdu) && (!(pdu[0]&FC_QOS_BIT)) ) -//added by wb. Is this right? -#define IsQoSDataFrame(pframe) ((*(u16*)pframe&(IEEE80211_STYPE_QOS_DATA|IEEE80211_FTYPE_DATA)) == (IEEE80211_STYPE_QOS_DATA|IEEE80211_FTYPE_DATA)) -#define Frame_Order(pframe) (*(u16*)pframe&IEEE80211_FCTL_ORDER) -#define SN_LESS(a, b) (((a-b)&0x800)!=0) +#define IsDataFrame(pdu) (((pdu[0] & 0x0C) == 0x08) ? true : false) +#define IsLegacyDataFrame(pdu) (IsDataFrame(pdu) && (!(pdu[0]&FC_QOS_BIT))) + +#define IsQoSDataFrame(pframe) ((*(u16 *)pframe&(IEEE80211_STYPE_QOS_DATA|IEEE80211_FTYPE_DATA)) == (IEEE80211_STYPE_QOS_DATA|IEEE80211_FTYPE_DATA)) +#define Frame_Order(pframe) (*(u16 *)pframe&IEEE80211_FCTL_ORDER) +#define SN_LESS(a, b) (((a-b)&0x800) != 0) #define SN_EQUAL(a, b) (a == b) #define MAX_DEV_ADDR_SIZE 8 typedef enum _ACT_CATEGORY{ @@ -516,10 +508,10 @@ typedef enum _BA_ACTION{ } BA_ACTION, *PBA_ACTION; typedef enum _InitialGainOpType{ - IG_Backup=0, + IG_Backup = 0, IG_Restore, IG_Max -}InitialGainOpType; +} InitialGainOpType; /* debug macros */ #define CONFIG_IEEE80211_DEBUG @@ -528,25 +520,26 @@ extern u32 ieee80211_debug_level; #define IEEE80211_DEBUG(level, fmt, args...) \ do { if (ieee80211_debug_level & (level)) \ printk(KERN_DEBUG "ieee80211: " fmt, ## args); } while (0) -//wb added to debug out data buf -//if you want print DATA buffer related BA, please set ieee80211_debug_level to DATA|BA +/* wb added to debug out data buf + * if you want print DATA buffer related BA, please set ieee80211_debug_level + * to DATA|BA + */ #define IEEE80211_DEBUG_DATA(level, data, datalen) \ - do{ if ((ieee80211_debug_level & (level)) == (level)) \ - { \ + do { if ((ieee80211_debug_level & (level)) == (level)) { \ int i; \ - u8* pdata = (u8*) data; \ + u8* pdata = (u8 *) data; \ printk(KERN_DEBUG "ieee80211: %s()\n", __FUNCTION__); \ - for(i=0; i<(int)(datalen); i++) \ - { \ + for (i = 0; i < (int)(datalen); i++) { \ printk("%2x ", pdata[i]); \ - if ((i+1)%16 == 0) printk("\n"); \ - } \ + if ((i+1)%16 == 0) \ + printk("\n"); \ + } \ printk("\n"); \ } \ } while (0) #else #define IEEE80211_DEBUG(level, fmt, args...) do {} while (0) -#define IEEE80211_DEBUG_DATA(level, data, datalen) do {} while(0) +#define IEEE80211_DEBUG_DATA(level, data, datalen) do {} while (0) #endif /* CONFIG_IEEE80211_DEBUG */ /* debug macros not dependent on CONFIG_IEEE80211_DEBUG */ @@ -589,16 +582,16 @@ do { if (ieee80211_debug_level & (level)) \ #define IEEE80211_DL_TX (1<<8) #define IEEE80211_DL_RX (1<<9) -#define IEEE80211_DL_HT (1<<10) //HT -#define IEEE80211_DL_BA (1<<11) //ba -#define IEEE80211_DL_TS (1<<12) //TS +#define IEEE80211_DL_HT (1<<10) /* HT */ +#define IEEE80211_DL_BA (1<<11) /* ba */ +#define IEEE80211_DL_TS (1<<12) /* TS */ #define IEEE80211_DL_QOS (1<<13) #define IEEE80211_DL_REORDER (1<<14) #define IEEE80211_DL_IOT (1<<15) #define IEEE80211_DL_IPS (1<<16) -#define IEEE80211_DL_TRACE (1<<29) //trace function, need to user net_ratelimit() together in order not to print too much to the screen -#define IEEE80211_DL_DATA (1<<30) //use this flag to control whether print data buf out. -#define IEEE80211_DL_ERR (1<<31) //always open +#define IEEE80211_DL_TRACE (1<<29) /* trace function, need to user net_ratelimit() together in order not to print too much to the screen */ +#define IEEE80211_DL_DATA (1<<30) /* use this flag to control whether print data buf out. */ +#define IEEE80211_DL_ERR (1<<31) /* always open */ #define IEEE80211_ERROR(f, a...) printk(KERN_ERR "ieee80211: " f, ## a) #define IEEE80211_WARNING(f, a...) printk(KERN_WARNING "ieee80211: " f, ## a) #define IEEE80211_DEBUG_INFO(f, a...) IEEE80211_DEBUG(IEEE80211_DL_INFO, f, ## a) @@ -618,18 +611,17 @@ do { if (ieee80211_debug_level & (level)) \ /* Added by Annie, 2005-11-22. */ #define MAX_STR_LEN 64 /* I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22.*/ -#define PRINTABLE(_ch) (_ch>'!' && _ch<'~') +#define PRINTABLE(_ch) (_ch > '!' && _ch < '~') #define IEEE80211_PRINT_STR(_Comp, _TitleString, _Ptr, _Len) \ - if((_Comp) & level) \ - { \ + if ((_Comp) & level) { \ int __i; \ u8 buffer[MAX_STR_LEN]; \ - int length = (_Len /* ARPHRD_ETHER */ #ifndef WIRELESS_SPY -#define WIRELESS_SPY // enable iwspy support +#define WIRELESS_SPY /* enable iwspy support */ #endif -#include // new driver API +#include /* new driver API */ #ifndef ETH_P_PAE #define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ @@ -873,29 +865,28 @@ struct ieee80211_rx_stats { u32 beacon_time; u8 nic_type; u16 Length; - // u8 DataRate; // In 0.5 Mbps - u8 SignalQuality; // in 0-100 index. - s32 RecvSignalPower; // Real power in dBm for this packet, no beautification and aggregation. - s8 RxPower; // in dBm Translate from PWdB - u8 SignalStrength; // in 0-100 index. + u8 SignalQuality; /* in 0-100 index. */ + s32 RecvSignalPower; /* Real power in dBm for this packet, no beautification and aggregation. */ + s8 RxPower; /* in dBm Translate from PWdB */ + u8 SignalStrength; /* in 0-100 index. */ u16 bHwError:1; u16 bCRC:1; u16 bICV:1; u16 bShortPreamble:1; - u16 Antenna:1; //for rtl8185 - u16 Decrypted:1; //for rtl8185, rtl8187 - u16 Wakeup:1; //for rtl8185 - u16 Reserved0:1; //for rtl8185 + u16 Antenna:1; /* for rtl8185 */ + u16 Decrypted:1; /* for rtl8185, rtl8187 */ + u16 Wakeup:1; /* for rtl8185 */ + u16 Reserved0:1; /* for rtl8185 */ u8 AGC; u32 TimeStampLow; u32 TimeStampHigh; bool bShift; - bool bIsQosData; // Added by Annie, 2005-12-22. + bool bIsQosData; u8 UserPriority; - //1!!!!!!!!!!!!!!!!!!!!!!!!!!! - //1Attention Please!!!<11n or 8190 specific code should be put below this line> - //1!!!!!!!!!!!!!!!!!!!!!!!!!!! + /* + * 1Attention Please!!!<11n or 8190 specific code should be put below this line> + */ u8 RxDrvInfoSize; u8 RxBufShift; @@ -904,21 +895,20 @@ struct ieee80211_rx_stats { bool bContainHTC; bool RxIs40MHzPacket; u32 RxPWDBAll; - u8 RxMIMOSignalStrength[4]; // in 0~100 index + u8 RxMIMOSignalStrength[4]; /* in 0~100 index */ s8 RxMIMOSignalQuality[2]; bool bPacketMatchBSSID; bool bIsCCK; bool bPacketToSelf; - //added by amy - u8* virtual_address; - u16 packetlength; // Total packet length: Must equal to sum of all FragLength - u16 fraglength; // FragLength should equal to PacketLength in non-fragment case - u16 fragoffset; // Data offset for this fragment + u8 *virtual_address; + u16 packetlength; /* Total packet length: Must equal to sum of all FragLength */ + u16 fraglength; /* FragLength should equal to PacketLength in non-fragment case */ + u16 fragoffset; /* Data offset for this fragment */ u16 ntotalfrag; bool bisrxaggrsubframe; - bool bPacketBeacon; //cosa add for rssi - bool bToSelfBA; //cosa add for rssi - char cck_adc_pwdb[4]; //cosa add for rx path selection + bool bPacketBeacon; /* cosa add for rssi */ + bool bToSelfBA; /* cosa add for rssi */ + char cck_adc_pwdb[4]; /* cosa add for rx path selection */ u16 Seq_Num; }; @@ -1045,9 +1035,9 @@ enum ieee80211_mfie { MFIE_TYPE_ERP = 42, MFIE_TYPE_RSN = 48, MFIE_TYPE_RATES_EX = 50, - MFIE_TYPE_HT_CAP= 45, - MFIE_TYPE_HT_INFO= 61, - MFIE_TYPE_AIRONET=133, + MFIE_TYPE_HT_CAP = 45, + MFIE_TYPE_HT_INFO = 61, + MFIE_TYPE_AIRONET = 133, MFIE_TYPE_GENERIC = 221, MFIE_TYPE_QOS_PARAMETER = 222, }; @@ -1199,7 +1189,7 @@ struct ieee80211_txb { struct ieee80211_drv_agg_txb { u8 nr_drv_agg_frames; struct sk_buff *tx_agg_frames[MAX_TX_AGG_COUNT]; -}__attribute__((packed)); +} __attribute__((packed)); #define MAX_SUBFRAME_COUNT 64 struct ieee80211_rxb { @@ -1207,7 +1197,7 @@ struct ieee80211_rxb { struct sk_buff *subframes[MAX_SUBFRAME_COUNT]; u8 dst[ETH_ALEN]; u8 src[ETH_ALEN]; -}__attribute__((packed)); +} __attribute__((packed)); typedef union _frameqos { u16 shortdata; @@ -1218,8 +1208,8 @@ typedef union _frameqos { u16 ack_policy:2; u16 reserved:1; u16 txop:8; - }field; -}frameqos,*pframeqos; + } field; +} frameqos, *pframeqos; /* SWEEP TABLE ENTRIES NUMBER*/ #define MAX_SWEEP_TAB_ENTRIES 42 @@ -1234,7 +1224,7 @@ typedef union _frameqos { #define MAX_CHANNEL_NUMBER 161 #define IEEE80211_SOFTMAC_SCAN_TIME 100 -//(HZ / 2) +/* (HZ / 2) */ #define IEEE80211_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2) #define CRC_LENGTH 4U @@ -1310,7 +1300,6 @@ struct ieee80211_tim_parameters { u8 tim_period; } __attribute__ ((packed)); -//#else struct ieee80211_wmm_ac_param { u8 ac_aci_acm_aifsn; u8 ac_ecwmin_ecwmax; @@ -1340,7 +1329,7 @@ struct ieee80211_wmm_tspec_elem { u32 min_phy_rate; u16 surp_band_allow; u16 medium_time; -}__attribute__((packed)); +} __attribute__((packed)); enum eap_type { EAP_PACKET = 0, EAPOL_START, @@ -1361,17 +1350,15 @@ static inline const char *eap_get_type(int type) { return ((u32)type >= ARRAY_SIZE(eap_types)) ? "Unknown" : eap_types[type]; } -//added by amy for reorder -static inline u8 Frame_QoSTID(u8* buf) +static inline u8 Frame_QoSTID(u8 *buf) { struct ieee80211_hdr_3addr *hdr; u16 fc; hdr = (struct ieee80211_hdr_3addr *)buf; fc = le16_to_cpu(hdr->frame_ctl); - return (u8)((frameqos*)(buf + (((fc & IEEE80211_FCTL_TODS)&&(fc & IEEE80211_FCTL_FROMDS))? 30 : 24)))->field.tid; + return (u8)((frameqos *)(buf + (((fc & IEEE80211_FCTL_TODS) && (fc & IEEE80211_FCTL_FROMDS)) ? 30 : 24)))->field.tid; } -//added by amy for reorder struct eapol { u8 snap[6]; @@ -1429,7 +1416,7 @@ struct ieee80211_info_element_hdr { */ #define IEEE80211_DEFAULT_TX_ESSID "Penguin" -#define IEEE80211_DEFAULT_BASIC_RATE 2 //1Mbps +#define IEEE80211_DEFAULT_BASIC_RATE 2 /* 1Mbps */ enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame}; #define MAX_SP_Len (WMM_all_frame << 4) @@ -1445,8 +1432,7 @@ enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame}; #define IEEE80211_PS_UNICAST IEEE80211_DTIM_UCAST #define IEEE80211_PS_MBCAST IEEE80211_DTIM_MBCAST -//added by David for QoS 2006/6/30 -//#define WMM_Hang_8187 + #ifdef WMM_Hang_8187 #undef WMM_Hang_8187 #endif @@ -1461,15 +1447,14 @@ enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame}; #define MAX_RECEIVE_BUFFER_SIZE 9100 -//UP Mapping to AC, using in MgntQuery_SequenceNumber() and maybe for DSCP -//#define UP2AC(up) ((up<3) ? ((up==0)?1:0) : (up>>1)) +/* UP Mapping to AC, using in MgntQuery_SequenceNumber() and maybe for DSCP */ #define UP2AC(up) ( \ ((up) < 1) ? WME_AC_BE : \ ((up) < 3) ? WME_AC_BK : \ ((up) < 4) ? WME_AC_BE : \ ((up) < 6) ? WME_AC_VI : \ WME_AC_VO) -//AC Mapping to UP, using in Tx part for selecting the corresponding TX queue +/* AC Mapping to UP, using in Tx part for selecting the corresponding TX queue */ #define AC2UP(_ac) ( \ ((_ac) == WME_AC_VO) ? 6 : \ ((_ac) == WME_AC_VI) ? 5 : \ @@ -1496,19 +1481,19 @@ typedef struct _bss_ht{ bool support_ht; - // HT related elements + /* HT related elements */ u8 ht_cap_buf[32]; u16 ht_cap_len; u8 ht_info_buf[32]; u16 ht_info_len; HT_SPEC_VER ht_spec_ver; - //HT_CAPABILITY_ELE bdHTCapEle; - //HT_INFORMATION_ELE bdHTInfoEle; + /* HT_CAPABILITY_ELE bdHTCapEle; */ + /* HT_INFORMATION_ELE bdHTInfoEle; */ bool aggregation; bool long_slot_time; -}bss_ht, *pbss_ht; +} bss_ht, *pbss_ht; typedef enum _erp_t{ ERP_NonERPpresent = 0x01, @@ -1525,16 +1510,15 @@ struct ieee80211_network { u8 ssid[IW_ESSID_MAX_SIZE + 1]; u8 ssid_len; struct ieee80211_qos_data qos_data; - //added by amy for LEAP bool bWithAironetIE; bool bCkipSupported; bool bCcxRmEnable; u16 CcxRmState[2]; - // CCXv4 S59, MBSSID. + /* CCXv4 S59, MBSSID. */ bool bMBssidValid; u8 MBssidMask; u8 MBssid[6]; - // CCX 2 S38, WLAN Device Version Number element. Annie, 2006-08-20. + /* CCX 2 S38, WLAN Device Version Number element. */ bool bWithCcxVerNum; u8 BssCcxVerNumber; /* These are network statistics */ @@ -1563,29 +1547,28 @@ struct ieee80211_network { u8 dtim_data; u32 last_dtim_sta_time[2]; - //appeded for QoS + /* appeded for QoS */ u8 wmm_info; struct ieee80211_wmm_ac_param wmm_param[4]; u8 QoS_Enable; #ifdef THOMAS_TURBO - u8 Turbo_Enable;//enable turbo mode, added by thomas + u8 Turbo_Enable;/* enable turbo mode, added by thomas */ #endif #ifdef ENABLE_DOT11D u16 CountryIeLen; u8 CountryIeBuf[MAX_IE_LEN]; #endif - // HT Related, by amy, 2008.04.29 + /* HT Related */ BSS_HT bssht; - // Add to handle broadcom AP management frame CCK rate. + /* Add to handle broadcom AP management frame CCK rate. */ bool broadcom_cap_exist; bool ralink_cap_exist; bool atheros_cap_exist; bool cisco_cap_exist; bool unknown_cap_exist; -// u8 berp_info; bool berp_info_valid; bool buseprotection; - //put at the end of the structure. + /* put at the end of the structure. */ struct list_head list; }; @@ -1650,75 +1633,66 @@ enum ieee80211_state { typedef struct tx_pending_t{ int frag; struct ieee80211_txb *txb; -}tx_pending_t; +} tx_pending_t; -typedef struct _bandwidth_autoswitch -{ +typedef struct _bandwidth_autoswitch { long threshold_20Mhzto40Mhz; long threshold_40Mhzto20Mhz; bool bforced_tx20Mhz; bool bautoswitch_enable; -}bandwidth_autoswitch,*pbandwidth_autoswitch; +} bandwidth_autoswitch, *pbandwidth_autoswitch; -//added by amy for order #define REORDER_WIN_SIZE 128 #define REORDER_ENTRY_NUM 128 -typedef struct _RX_REORDER_ENTRY -{ +typedef struct _RX_REORDER_ENTRY { struct list_head List; u16 SeqNum; - struct ieee80211_rxb* prxb; + struct ieee80211_rxb *prxb; } RX_REORDER_ENTRY, *PRX_REORDER_ENTRY; -//added by amy for order -typedef enum _Fsync_State{ + +typedef enum _Fsync_State { Default_Fsync, HW_Fsync, SW_Fsync -}Fsync_State; +} Fsync_State; -// Power save mode configured. -typedef enum _RT_PS_MODE -{ - eActive, // Active/Continuous access. - eMaxPs, // Max power save mode. - eFastPs // Fast power save mode. -}RT_PS_MODE; +/* Power save mode configured. */ +typedef enum _RT_PS_MODE { + eActive, /* Active/Continuous access. */ + eMaxPs, /* Max power save mode. */ + eFastPs /* Fast power save mode. */ +} RT_PS_MODE; -typedef enum _IPS_CALLBACK_FUNCION -{ +typedef enum _IPS_CALLBACK_FUNCION { IPS_CALLBACK_NONE = 0, IPS_CALLBACK_MGNT_LINK_REQUEST = 1, IPS_CALLBACK_JOIN_REQUEST = 2, -}IPS_CALLBACK_FUNCION; +} IPS_CALLBACK_FUNCION; -typedef enum _RT_JOIN_ACTION{ +typedef enum _RT_JOIN_ACTION { RT_JOIN_INFRA = 1, RT_JOIN_IBSS = 2, RT_START_IBSS = 3, RT_NO_ACTION = 4, -}RT_JOIN_ACTION; +} RT_JOIN_ACTION; -typedef struct _IbssParms{ +typedef struct _IbssParms { u16 atimWin; -}IbssParms, *PIbssParms; -#define MAX_NUM_RATES 264 // Max num of support rates element: 8, Max num of ext. support rate: 255. 061122, by rcnjko. +} IbssParms, *PIbssParms; +#define MAX_NUM_RATES 264 /* Max num of support rates element: 8, Max num of ext. support rate: 255. 061122, by rcnjko. */ -// RF state. -typedef enum _RT_RF_POWER_STATE -{ +/* RF state. */ +typedef enum _RT_RF_POWER_STATE { eRfOn, eRfSleep, eRfOff -}RT_RF_POWER_STATE; +} RT_RF_POWER_STATE; -typedef struct _RT_POWER_SAVE_CONTROL -{ +typedef struct _RT_POWER_SAVE_CONTROL { - // - // Inactive Power Save(IPS) : Disable RF when disconnected - // + /* Inactive Power Save(IPS) : Disable RF when disconnected */ bool bInactivePs; bool bIPSModeBackup; bool bSwRfProcessing; @@ -1726,15 +1700,15 @@ typedef struct _RT_POWER_SAVE_CONTROL struct work_struct InactivePsWorkItem; struct timer_list InactivePsTimer; - // Return point for join action + /* Return point for join action */ IPS_CALLBACK_FUNCION ReturnPoint; - // Recored Parameters for rescheduled JoinRequest + /* Recored Parameters for rescheduled JoinRequest */ bool bTmpBssDesc; RT_JOIN_ACTION tmpJoinAction; struct ieee80211_network tmpBssDesc; - // Recored Parameters for rescheduled MgntLinkRequest + /* Recored Parameters for rescheduled MgntLinkRequest */ bool bTmpScanOnly; bool bTmpActiveScan; bool bTmpFilterHiddenAP; @@ -1753,23 +1727,20 @@ typedef struct _RT_POWER_SAVE_CONTROL IbssParms tmpIbpm; bool bTmpIbpm; - // - // Leisre Poswer Save : Disable RF if connected but traffic is not busy - // + /* Leisre Poswer Save : Disable RF if connected but traffic is not busy */ bool bLeisurePs; -}RT_POWER_SAVE_CONTROL,*PRT_POWER_SAVE_CONTROL; +} RT_POWER_SAVE_CONTROL, *PRT_POWER_SAVE_CONTROL; typedef u32 RT_RF_CHANGE_SOURCE; #define RF_CHANGE_BY_SW BIT31 #define RF_CHANGE_BY_HW BIT30 #define RF_CHANGE_BY_PS BIT29 #define RF_CHANGE_BY_IPS BIT28 -#define RF_CHANGE_BY_INIT 0 // Do not change the RFOff reason. Defined by Bruce, 2008-01-17. +#define RF_CHANGE_BY_INIT 0 /* Do not change the RFOff reason. */ #ifdef ENABLE_DOT11D -typedef enum -{ +typedef enum { COUNTRY_CODE_FCC = 0, COUNTRY_CODE_IC = 1, COUNTRY_CODE_ETSI = 2, @@ -1781,84 +1752,78 @@ typedef enum COUNTRY_CODE_TELEC, COUNTRY_CODE_MIC, COUNTRY_CODE_GLOBAL_DOMAIN -}country_code_type_t; +} country_code_type_t; #endif #define RT_MAX_LD_SLOT_NUM 10 -typedef struct _RT_LINK_DETECT_T{ +typedef struct _RT_LINK_DETECT_T { u32 NumRecvBcnInPeriod; u32 NumRecvDataInPeriod; - u32 RxBcnNum[RT_MAX_LD_SLOT_NUM]; // number of Rx beacon / CheckForHang_period to determine link status - u32 RxDataNum[RT_MAX_LD_SLOT_NUM]; // number of Rx data / CheckForHang_period to determine link status - u16 SlotNum; // number of CheckForHang period to determine link status + u32 RxBcnNum[RT_MAX_LD_SLOT_NUM]; /* number of Rx beacon / CheckForHang_period to determine link status */ + u32 RxDataNum[RT_MAX_LD_SLOT_NUM]; /* number of Rx data / CheckForHang_period to determine link status */ + u16 SlotNum; /* number of CheckForHang period to determine link status */ u16 SlotIndex; u32 NumTxOkInPeriod; u32 NumRxOkInPeriod; bool bBusyTraffic; -}RT_LINK_DETECT_T, *PRT_LINK_DETECT_T; +} RT_LINK_DETECT_T, *PRT_LINK_DETECT_T; struct ieee80211_device { struct net_device *dev; struct ieee80211_security sec; - //hw security related -// u8 hwsec_support; //support? - u8 hwsec_active; //hw security active. + /* hw security related */ + u8 hwsec_active; /* hw security active. */ bool is_silent_reset; bool ieee_up; - //added by amy bool bSupportRemoteWakeUp; - RT_PS_MODE dot11PowerSaveMode; // Power save mode configured. + RT_PS_MODE dot11PowerSaveMode; /* Power save mode configured. */ bool actscanning; bool beinretry; RT_RF_POWER_STATE eRFPowerState; RT_RF_CHANGE_SOURCE RfOffReason; bool is_set_key; - //11n spec related I wonder if These info structure need to be moved out of ieee80211_device + /* 11n spec related I wonder if These info structure need to be moved out of ieee80211_device */ - //11n HT below + /* 11n HT below */ PRT_HIGH_THROUGHPUT pHTInfo; - //struct timer_list SwBwTimer; -// spinlock_t chnlop_spinlock; spinlock_t bw_spinlock; spinlock_t reorder_spinlock; - // for HT operation rate set. we use this one for HT data rate to seperate different descriptors - //the way fill this is the same as in the IE - u8 Regdot11HTOperationalRateSet[16]; //use RATR format - u8 dot11HTOperationalRateSet[16]; //use RATR format + /* for HT operation rate set. we use this one for HT data rate to + * seperate different descriptors + * the way fill this is the same as in the IE + */ + u8 Regdot11HTOperationalRateSet[16]; /* use RATR format */ + u8 dot11HTOperationalRateSet[16]; /* use RATR format */ u8 RegHTSuppRateSet[16]; u8 HTCurrentOperaRate; u8 HTHighestOperaRate; - //wb added for rate operation mode to firmware + /* wb added for rate operation mode to firmware */ u8 bTxDisableRateFallBack; u8 bTxUseDriverAssingedRate; atomic_t atm_chnlop; atomic_t atm_swbw; -// u8 HTHighestOperaRate; -// u8 HTCurrentOperaRate; - // 802.11e and WMM Traffic Stream Info (TX) + /* 802.11e and WMM Traffic Stream Info (TX) */ struct list_head Tx_TS_Admit_List; struct list_head Tx_TS_Pending_List; struct list_head Tx_TS_Unused_List; TX_TS_RECORD TxTsRecord[TOTAL_TS_NUM]; - // 802.11e and WMM Traffic Stream Info (RX) + /* 802.11e and WMM Traffic Stream Info (RX) */ struct list_head Rx_TS_Admit_List; struct list_head Rx_TS_Pending_List; struct list_head Rx_TS_Unused_List; RX_TS_RECORD RxTsRecord[TOTAL_TS_NUM]; -//#ifdef TO_DO_LIST RX_REORDER_ENTRY RxReorderEntry[128]; struct list_head RxReorder_Unused_List; -//#endif - // Qos related. Added by Annie, 2005-11-01. -// PSTA_QOS pStaQos; - u8 ForcedPriority; // Force per-packet priority 1~7. (default: 0, not to force it.) + /* Qos related. */ +/* PSTA_QOS pStaQos; */ + u8 ForcedPriority; /* Force per-packet priority 1~7. (default: 0, not to force it.) */ /* Bookkeeping structures */ @@ -1925,7 +1890,7 @@ struct ieee80211_device { * with RX of broad/multicast frames */ /* Fragmentation structures */ - // each streaming contain a entry + /* each streaming contain a entry */ struct ieee80211_frag_entry frag_cache[17][IEEE80211_FRAG_CACHE_LEN]; unsigned int frag_next_idx[17]; u16 fts; /* Fragmentation Threshold */ @@ -1967,16 +1932,16 @@ struct ieee80211_device { u16 prev_seq_ctl; /* used to drop duplicate frames */ /* map of allowed channels. 0 is dummy */ - // FIXME: remeber to default to a basic channel plan depending of the PHY type + /* FIXME: remeber to default to a basic channel plan depending of the PHY type */ #ifdef ENABLE_DOT11D - void* pDot11dInfo; + void *pDot11dInfo; bool bGlobalDomain; #else int channel_map[MAX_CHANNEL_NUMBER+1]; #endif int rate; /* current rate */ int basic_rate; - //FIXME: pleace callback, see if redundant with softmac_features + /* FIXME: pleace callback, see if redundant with softmac_features */ short active_scan; /* this contains flags for selectively enable softmac support */ @@ -2017,8 +1982,8 @@ struct ieee80211_device { short wap_set; short ssid_set; - u8 wpax_type_set; //{added by David, 2006.9.28} - u32 wpax_type_notify; //{added by David, 2006.9.26} + u8 wpax_type_set; + u32 wpax_type_notify; /* QoS related flag */ char init_wmmparam_flag; @@ -2040,7 +2005,7 @@ struct ieee80211_device { struct sk_buff *mgmt_queue_ring[MGMT_QUEUE_NUM]; int mgmt_queue_head; int mgmt_queue_tail; -//{ added for rtl819x +/* added for rtl819x */ #define IEEE80211_QUEUE_LIMIT 128 u8 AsocRetryCount; unsigned int hw_header; @@ -2049,12 +2014,12 @@ struct ieee80211_device { struct sk_buff_head skb_drv_aggQ[MAX_QUEUE_SIZE]; u32 sta_edca_param[4]; bool aggregation; - // Enable/Disable Rx immediate BA capability. + /* Enable/Disable Rx immediate BA capability. */ bool enable_rx_imm_BA; bool bibsscoordinator; - //+by amy for DM ,080515 - //Dynamic Tx power for near/far range enable/Disable , by amy , 2008-05-15 + /*+by amy for DM ,080515 */ + /* Dynamic Tx power for near/far range enable/Disable */ bool bdynamic_txpower_enable; bool bCTSToSelfEnable; @@ -2065,21 +2030,20 @@ struct ieee80211_device { u8 fsync_rssi_threshold; bool bfsync_enable; - u8 fsync_multiple_timeinterval; // FsyncMultipleTimeInterval * FsyncTimeInterval - u32 fsync_firstdiff_ratethreshold; // low threshold - u32 fsync_seconddiff_ratethreshold; // decrease threshold + u8 fsync_multiple_timeinterval; /* FsyncMultipleTimeInterval * FsyncTimeInterval */ + u32 fsync_firstdiff_ratethreshold; /* low threshold */ + u32 fsync_seconddiff_ratethreshold; /* decrease threshold */ Fsync_State fsync_state; bool bis_any_nonbepkts; - //20Mhz 40Mhz AutoSwitch Threshold + /* 20Mhz 40Mhz AutoSwitch Threshold */ bandwidth_autoswitch bandwidth_auto_switch; - //for txpower tracking + /* for txpower tracking */ bool FwRWRF; - //added by amy for AP roaming + /* added by amy for AP roaming */ RT_LINK_DETECT_T LinkDetectInfo; - //added by amy for ps + /* added by amy for ps */ RT_POWER_SAVE_CONTROL PowerSaveControl; -//} /* used if IEEE_SOFTMAC_TX_QUEUE is set */ struct tx_pending_t tx_pending; @@ -2095,11 +2059,8 @@ struct ieee80211_device { struct delayed_work start_ibss_wq; struct work_struct wx_sync_scan_wq; struct workqueue_struct *wq; - // Qos related. Added by Annie, 2005-11-01. - //STA_QOS StaQos; - - //u32 STA_EDCA_PARAM[4]; - //CHANNEL_ACCESS_SETTING ChannelAccessSetting; + /* Qos related. Added by Annie, 2005-11-01. */ + /* STA_QOS StaQos; */ /* Callback functions */ @@ -2114,10 +2075,10 @@ struct ieee80211_device { struct net_device *dev); int (*reset_port)(struct net_device *dev); - int (*is_queue_full) (struct net_device * dev, int pri); + int (*is_queue_full) (struct net_device *dev, int pri); - int (*handle_management) (struct net_device * dev, - struct ieee80211_network * network, u16 type); + int (*handle_management) (struct net_device *dev, + struct ieee80211_network *network, u16 type); int (*is_qos_active) (struct net_device *dev, struct sk_buff *skb); /* Softmac-generated frames (mamagement) are TXed via this @@ -2137,7 +2098,7 @@ struct ieee80211_device { * This function can't sleep. */ void (*softmac_data_hard_start_xmit)(struct sk_buff *skb, - struct net_device *dev,int rate); + struct net_device *dev, int rate); /* stops the HW queue for DATA frames. Useful to avoid * waste time to TX data frame when we are reassociating @@ -2152,7 +2113,7 @@ struct ieee80211_device { * This function can sleep. the driver should ensure * the radio has been swithced before return. */ - void (*set_chan)(struct net_device *dev,short ch); + void (*set_chan)(struct net_device *dev, short ch); /* These are not used if the ieee stack takes care of * scanning (IEEE_SOFTMAC_SCAN feature set). @@ -2186,7 +2147,7 @@ struct ieee80211_device { * stop_send_bacons is NOT guaranteed to be called only * after start_send_beacons. */ - void (*start_send_beacons) (struct net_device *dev,u16 tx_rate); + void (*start_send_beacons) (struct net_device *dev, u16 tx_rate); void (*stop_send_beacons) (struct net_device *dev); /* power save mode related */ @@ -2194,19 +2155,17 @@ struct ieee80211_device { void (*ps_request_tx_ack) (struct net_device *dev); void (*enter_sleep_state) (struct net_device *dev, u32 th, u32 tl); short (*ps_is_queue_empty) (struct net_device *dev); - int (*handle_beacon) (struct net_device * dev, struct ieee80211_beacon * beacon, struct ieee80211_network * network); - int (*handle_assoc_response) (struct net_device * dev, struct ieee80211_assoc_response_frame * resp, struct ieee80211_network * network); + int (*handle_beacon) (struct net_device *dev, struct ieee80211_beacon *beacon, struct ieee80211_network *network); + int (*handle_assoc_response) (struct net_device *dev, struct ieee80211_assoc_response_frame *resp, struct ieee80211_network *network); /* check whether Tx hw resouce available */ short (*check_nic_enough_desc)(struct net_device *dev, int queue_index); - //added by wb for HT related -// void (*SwChnlByTimerHandler)(struct net_device *dev, int channel); + /* added by wb for HT related */ void (*SetBWModeHandler)(struct net_device *dev, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset); -// void (*UpdateHalRATRTableHandler)(struct net_device* dev, u8* pMcsRate); - bool (*GetNmodeSupportBySecCfg)(struct net_device* dev); - void (*SetWirelessMode)(struct net_device* dev, u8 wireless_mode); - bool (*GetHalfNmodeSupportByAPsHandler)(struct net_device* dev); + bool (*GetNmodeSupportBySecCfg)(struct net_device *dev); + void (*SetWirelessMode)(struct net_device *dev, u8 wireless_mode); + bool (*GetHalfNmodeSupportByAPsHandler)(struct net_device *dev); void (*InitialGainHandler)(struct net_device *dev, u8 Operation); /* This must be the last item so that it points to the data @@ -2307,7 +2266,7 @@ extern inline int ieee80211_get_hdrlen(u16 fc) case IEEE80211_FTYPE_DATA: if ((fc & IEEE80211_FCTL_FROMDS) && (fc & IEEE80211_FCTL_TODS)) hdrlen = IEEE80211_4ADDR_LEN; /* Addr4 */ - if(IEEE80211_QOS_HAS_SEQ(fc)) + if (IEEE80211_QOS_HAS_SEQ(fc)) hdrlen += 2; /* QOS ctrl*/ break; case IEEE80211_FTYPE_CTL: @@ -2408,10 +2367,10 @@ extern int ieee80211_wx_get_encode(struct ieee80211_device *ieee, #if WIRELESS_EXT >= 18 extern int ieee80211_wx_get_encode_ext(struct ieee80211_device *ieee, struct iw_request_info *info, - union iwreq_data* wrqu, char *extra); + union iwreq_data *wrqu, char *extra); extern int ieee80211_wx_set_encode_ext(struct ieee80211_device *ieee, struct iw_request_info *info, - union iwreq_data* wrqu, char *extra); + union iwreq_data *wrqu, char *extra); extern int ieee80211_wx_set_auth(struct ieee80211_device *ieee, struct iw_request_info *info, struct iw_param *data, char *extra); @@ -2477,7 +2436,9 @@ extern int ieee80211_wx_set_wap(struct ieee80211_device *ieee, union iwreq_data *awrq, char *extra); -extern int ieee80211_wx_get_essid(struct ieee80211_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b); +extern int ieee80211_wx_get_essid(struct ieee80211_device *ieee, + struct iw_request_info *a, + union iwreq_data *wrqu, char *b); extern int ieee80211_wx_set_rate(struct ieee80211_device *ieee, struct iw_request_info *info, @@ -2506,7 +2467,6 @@ extern int ieee80211_wx_set_freq(struct ieee80211_device *ieee, struct iw_reques extern int ieee80211_wx_get_freq(struct ieee80211_device *ieee, struct iw_request_info *a, union iwreq_data *wrqu, char *b); -//extern void ieee80211_wx_sync_scan_wq(struct ieee80211_device *ieee); extern void ieee80211_wx_sync_scan_wq(struct work_struct *work); @@ -2533,54 +2493,53 @@ extern int ieee80211_wx_set_rts(struct ieee80211_device *ieee, extern int ieee80211_wx_get_rts(struct ieee80211_device *ieee, struct iw_request_info *info, union iwreq_data *wrqu, char *extra); -//HT -#define MAX_RECEIVE_BUFFER_SIZE 9100 // -extern void HTDebugHTCapability(u8* CapIE, u8* TitleString ); -extern void HTDebugHTInfo(u8* InfoIE, u8* TitleString); - -void HTSetConnectBwMode(struct ieee80211_device* ieee, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset); -extern void HTUpdateDefaultSetting(struct ieee80211_device* ieee); -extern void HTConstructCapabilityElement(struct ieee80211_device* ieee, u8* posHTCap, u8* len, u8 isEncrypt); -extern void HTConstructInfoElement(struct ieee80211_device* ieee, u8* posHTInfo, u8* len, u8 isEncrypt); -extern void HTConstructRT2RTAggElement(struct ieee80211_device* ieee, u8* posRT2RTAgg, u8* len); +/* HT */ +#define MAX_RECEIVE_BUFFER_SIZE 9100 +extern void HTDebugHTCapability(u8 *CapIE, u8 *TitleString); +extern void HTDebugHTInfo(u8 *InfoIE, u8 *TitleString); + +void HTSetConnectBwMode(struct ieee80211_device *ieee, HT_CHANNEL_WIDTH Bandwidth, HT_EXTCHNL_OFFSET Offset); +extern void HTUpdateDefaultSetting(struct ieee80211_device *ieee); +extern void HTConstructCapabilityElement(struct ieee80211_device *ieee, u8 *posHTCap, u8 *len, u8 isEncrypt); +extern void HTConstructInfoElement(struct ieee80211_device *ieee, u8 *posHTInfo, u8 *len, u8 isEncrypt); +extern void HTConstructRT2RTAggElement(struct ieee80211_device *ieee, u8 *posRT2RTAgg, u8 *len); extern void HTOnAssocRsp(struct ieee80211_device *ieee); -extern void HTInitializeHTInfo(struct ieee80211_device* ieee); +extern void HTInitializeHTInfo(struct ieee80211_device *ieee); extern void HTInitializeBssDesc(PBSS_HT pBssHT); -extern void HTResetSelfAndSavePeerSetting(struct ieee80211_device* ieee, struct ieee80211_network * pNetwork); -extern void HTUpdateSelfAndPeerSetting(struct ieee80211_device* ieee, struct ieee80211_network * pNetwork); -extern u8 HTGetHighestMCSRate(struct ieee80211_device* ieee, u8* pMCSRateSet, u8* pMCSFilter); +extern void HTResetSelfAndSavePeerSetting(struct ieee80211_device *ieee, struct ieee80211_network *pNetwork); +extern void HTUpdateSelfAndPeerSetting(struct ieee80211_device *ieee, struct ieee80211_network *pNetwork); +extern u8 HTGetHighestMCSRate(struct ieee80211_device *ieee, u8 *pMCSRateSet, u8 *pMCSFilter); extern u8 MCS_FILTER_ALL[]; extern u16 MCS_DATA_RATE[2][2][77] ; -extern u8 HTCCheck(struct ieee80211_device* ieee, u8* pFrame); -//extern void HTSetConnectBwModeCallback(unsigned long data); +extern u8 HTCCheck(struct ieee80211_device *ieee, u8 *pFrame); extern void HTResetIOTSetting(PRT_HIGH_THROUGHPUT pHTInfo); -extern bool IsHTHalfNmodeAPs(struct ieee80211_device* ieee); -extern u16 HTHalfMcsToDataRate(struct ieee80211_device* ieee, u8 nMcsRate); -extern u16 HTMcsToDataRate( struct ieee80211_device* ieee, u8 nMcsRate); -extern u16 TxCountToDataRate( struct ieee80211_device* ieee, u8 nDataRate); -//function in BAPROC.c -extern int ieee80211_rx_ADDBAReq( struct ieee80211_device* ieee, struct sk_buff *skb); -extern int ieee80211_rx_ADDBARsp( struct ieee80211_device* ieee, struct sk_buff *skb); -extern int ieee80211_rx_DELBA(struct ieee80211_device* ieee,struct sk_buff *skb); -extern void TsInitAddBA( struct ieee80211_device* ieee, PTX_TS_RECORD pTS, u8 Policy, u8 bOverwritePending); -extern void TsInitDelBA( struct ieee80211_device* ieee, PTS_COMMON_INFO pTsCommonInfo, TR_SELECT TxRxSelect); +extern bool IsHTHalfNmodeAPs(struct ieee80211_device *ieee); +extern u16 HTHalfMcsToDataRate(struct ieee80211_device *ieee, u8 nMcsRate); +extern u16 HTMcsToDataRate(struct ieee80211_device *ieee, u8 nMcsRate); +extern u16 TxCountToDataRate(struct ieee80211_device *ieee, u8 nDataRate); +/* function in BAPROC.c */ +extern int ieee80211_rx_ADDBAReq(struct ieee80211_device *ieee, struct sk_buff *skb); +extern int ieee80211_rx_ADDBARsp(struct ieee80211_device *ieee, struct sk_buff *skb); +extern int ieee80211_rx_DELBA(struct ieee80211_device *ieee, struct sk_buff *skb); +extern void TsInitAddBA(struct ieee80211_device *ieee, PTX_TS_RECORD pTS, u8 Policy, u8 bOverwritePending); +extern void TsInitDelBA(struct ieee80211_device *ieee, PTS_COMMON_INFO pTsCommonInfo, TR_SELECT TxRxSelect); extern void BaSetupTimeOut(unsigned long data); extern void TxBaInactTimeout(unsigned long data); extern void RxBaInactTimeout(unsigned long data); -extern void ResetBaEntry( PBA_RECORD pBA); -//function in TS.c +extern void ResetBaEntry(PBA_RECORD pBA); +/* function in TS.c */ extern bool GetTs( - struct ieee80211_device* ieee, - PTS_COMMON_INFO *ppTS, - u8* Addr, + struct ieee80211_device *ieee, + PTS_COMMON_INFO *ppTS, + u8 *Addr, u8 TID, - TR_SELECT TxRxSelect, //Rx:1, Tx:0 + TR_SELECT TxRxSelect, /* Rx:1, Tx:0 */ bool bAddNewTs ); extern void TSInitialize(struct ieee80211_device *ieee); -extern void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD pTxTS); -extern void RemovePeerTS(struct ieee80211_device* ieee, u8* Addr); -extern void RemoveAllTS(struct ieee80211_device* ieee); +extern void TsStartAddBaProcess(struct ieee80211_device *ieee, PTX_TS_RECORD pTxTS); +extern void RemovePeerTS(struct ieee80211_device *ieee, u8 *Addr); +extern void RemoveAllTS(struct ieee80211_device *ieee); void ieee80211_softmac_scan_syncro(struct ieee80211_device *ieee); extern const long ieee80211_wlan_frequencies[]; @@ -2595,7 +2554,8 @@ extern inline int ieee80211_get_scans(struct ieee80211_device *ieee) return ieee->scans; } -static inline const char *escape_essid(const char *essid, u8 essid_len) { +static inline const char *escape_essid(const char *essid, u8 essid_len) +{ static char escaped[IW_ESSID_MAX_SIZE * 2 + 1]; const char *s = essid; char *d = escaped; @@ -2630,6 +2590,6 @@ extern int ieee80211_parse_info_param(struct ieee80211_device *ieee, struct ieee80211_network *network, struct ieee80211_rx_stats *stats); -void ieee80211_indicate_packets(struct ieee80211_device *ieee, struct ieee80211_rxb** prxbIndicateArray,u8 index); +void ieee80211_indicate_packets(struct ieee80211_device *ieee, struct ieee80211_rxb **prxbIndicateArray, u8 index); #define RT_ASOC_RETRY_LIMIT 5 #endif /* IEEE80211_H */ -- cgit v0.10.2 From 3dc1536b217182b6aeaca815d26cf0dfb71fb80c Mon Sep 17 00:00:00 2001 From: Ruslan Pisarev Date: Sun, 11 Apr 2010 15:05:51 +0300 Subject: Staging: rtl8192u: fix space coding style issue in ieee80211_crypt.h This is a patch to the ieee80211_crypt.h file that fixed up a space Errors found by the checkpatch.pl tools Signed-off-by: Ruslan Pisarev Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192u/ieee80211_crypt.h b/drivers/staging/rtl8192u/ieee80211_crypt.h index b58a3bc..0b4ea43 100644 --- a/drivers/staging/rtl8192u/ieee80211_crypt.h +++ b/drivers/staging/rtl8192u/ieee80211_crypt.h @@ -77,7 +77,7 @@ struct ieee80211_crypt_data { int ieee80211_register_crypto_ops(struct ieee80211_crypto_ops *ops); int ieee80211_unregister_crypto_ops(struct ieee80211_crypto_ops *ops); -struct ieee80211_crypto_ops * ieee80211_get_crypto_ops(const char *name); +struct ieee80211_crypto_ops *ieee80211_get_crypto_ops(const char *name); void ieee80211_crypt_deinit_entries(struct ieee80211_device *, int); void ieee80211_crypt_deinit_handler(unsigned long); void ieee80211_crypt_delayed_deinit(struct ieee80211_device *ieee, -- cgit v0.10.2 From bd2de3585e919cbee635f4cc317b8cca864daf24 Mon Sep 17 00:00:00 2001 From: Andres More Date: Sun, 11 Apr 2010 15:59:01 -0300 Subject: staging: vt6656: cleared checkpatch.pl findings in 80211hdr.h Code cleanup in: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git Findings were: do not use C99 // comments space required after that close brace '}' line over 80 characters Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/80211hdr.h b/drivers/staging/vt6656/80211hdr.h index e5cee6f..15c6ef1 100644 --- a/drivers/staging/vt6656/80211hdr.h +++ b/drivers/staging/vt6656/80211hdr.h @@ -16,16 +16,13 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * * File: 80211hdr.h * * Purpose: 802.11 MAC headers related pre-defines and macros. * - * * Author: Lyndon Chen * * Date: Apr 8, 2002 - * */ #ifndef __80211HDR_H__ @@ -34,7 +31,8 @@ #include "ttype.h" /*--------------------- Export Definitions -------------------------*/ -// bit type + +/* bit type */ #define BIT0 0x00000001 #define BIT1 0x00000002 #define BIT2 0x00000004 @@ -68,7 +66,7 @@ #define BIT30 0x40000000 #define BIT31 0x80000000 -// 802.11 frame related, defined as 802.11 spec +/* 802.11 frame related, defined as 802.11 spec */ #define WLAN_ADDR_LEN 6 #define WLAN_CRC_LEN 4 #define WLAN_CRC32_LEN 4 @@ -80,13 +78,14 @@ #define WLAN_HDR_ADDR4_LEN 30 #define WLAN_IEHDR_LEN 2 #define WLAN_SSID_MAXLEN 32 -//#define WLAN_RATES_MAXLEN 255 +/* #define WLAN_RATES_MAXLEN 255 */ #define WLAN_RATES_MAXLEN 16 #define WLAN_RATES_MAXLEN_11B 4 #define WLAN_RSN_MAXLEN 32 #define WLAN_DATA_MAXLEN 2312 -#define WLAN_A3FR_MAXLEN (WLAN_HDR_ADDR3_LEN + WLAN_DATA_MAXLEN + WLAN_CRC_LEN) - +#define WLAN_A3FR_MAXLEN (WLAN_HDR_ADDR3_LEN \ + + WLAN_DATA_MAXLEN \ + + WLAN_CRC_LEN) #define WLAN_BEACON_FR_MAXLEN WLAN_A3FR_MAXLEN #define WLAN_ATIM_FR_MAXLEN (WLAN_HDR_ADDR3_LEN + 0) @@ -101,12 +100,11 @@ #define WLAN_AUTHEN_FR_MAXLEN WLAN_A3FR_MAXLEN #define WLAN_DEAUTHEN_FR_MAXLEN (WLAN_HDR_ADDR3_LEN + 2) - #define WLAN_WEP_NKEYS 4 #define WLAN_WEP40_KEYLEN 5 #define WLAN_WEP104_KEYLEN 13 #define WLAN_WEP232_KEYLEN 29 -//#define WLAN_WEPMAX_KEYLEN 29 +/* #define WLAN_WEPMAX_KEYLEN 29 */ #define WLAN_WEPMAX_KEYLEN 32 #define WLAN_CHALLENGE_IE_MAXLEN 255 #define WLAN_CHALLENGE_IE_LEN 130 @@ -115,7 +113,7 @@ #define WLAN_WEP_ICV_LEN 4 #define WLAN_FRAGS_MAX 16 -// Frame Type +/* Frame Type */ #define WLAN_TYPE_MGR 0x00 #define WLAN_TYPE_CTL 0x01 #define WLAN_TYPE_DATA 0x02 @@ -124,8 +122,7 @@ #define WLAN_FTYPE_CTL 0x01 #define WLAN_FTYPE_DATA 0x02 - -// Frame Subtypes +/* Frame Subtypes */ #define WLAN_FSTYPE_ASSOCREQ 0x00 #define WLAN_FSTYPE_ASSOCRESP 0x01 #define WLAN_FSTYPE_REASSOCREQ 0x02 @@ -139,7 +136,7 @@ #define WLAN_FSTYPE_DEAUTHEN 0x0c #define WLAN_FSTYPE_ACTION 0x0d -// Control +/* Control */ #define WLAN_FSTYPE_PSPOLL 0x0a #define WLAN_FSTYPE_RTS 0x0b #define WLAN_FSTYPE_CTS 0x0c @@ -147,7 +144,7 @@ #define WLAN_FSTYPE_CFEND 0x0e #define WLAN_FSTYPE_CFENDCFACK 0x0f -// Data +/* Data */ #define WLAN_FSTYPE_DATAONLY 0x00 #define WLAN_FSTYPE_DATA_CFACK 0x01 #define WLAN_FSTYPE_DATA_CFPOLL 0x02 @@ -157,13 +154,13 @@ #define WLAN_FSTYPE_CFPOLL 0x06 #define WLAN_FSTYPE_CFACK_CFPOLL 0x07 - #ifdef __BIG_ENDIAN -// GET & SET Frame Control bit +/* GET & SET Frame Control bit */ #define WLAN_GET_FC_PRVER(n) ((((WORD)(n) >> 8) & (BIT0 | BIT1)) #define WLAN_GET_FC_FTYPE(n) ((((WORD)(n) >> 8) & (BIT2 | BIT3)) >> 2) -#define WLAN_GET_FC_FSTYPE(n) ((((WORD)(n) >> 8) & (BIT4|BIT5|BIT6|BIT7)) >> 4) +#define WLAN_GET_FC_FSTYPE(n) ((((WORD)(n) >> 8) \ + & (BIT4|BIT5|BIT6|BIT7)) >> 4) #define WLAN_GET_FC_TODS(n) ((((WORD)(n) << 8) & (BIT8)) >> 8) #define WLAN_GET_FC_FROMDS(n) ((((WORD)(n) << 8) & (BIT9)) >> 9) #define WLAN_GET_FC_MOREFRAG(n) ((((WORD)(n) << 8) & (BIT10)) >> 10) @@ -173,12 +170,12 @@ #define WLAN_GET_FC_ISWEP(n) ((((WORD)(n) << 8) & (BIT14)) >> 14) #define WLAN_GET_FC_ORDER(n) ((((WORD)(n) << 8) & (BIT15)) >> 15) -// Sequence Field bit +/* Sequence Field bit */ #define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n) >> 8) & (BIT0|BIT1|BIT2|BIT3)) -#define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n) >> 8) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4) - +#define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n) >> 8) \ + & (~(BIT0|BIT1|BIT2|BIT3))) >> 4) -// Capability Field bit +/* Capability Field bit */ #define WLAN_GET_CAP_INFO_ESS(n) (((n) >> 8) & BIT0) #define WLAN_GET_CAP_INFO_IBSS(n) ((((n) >> 8) & BIT1) >> 1) #define WLAN_GET_CAP_INFO_CFPOLLABLE(n) ((((n) >> 8) & BIT2) >> 2) @@ -192,10 +189,9 @@ #define WLAN_GET_CAP_INFO_DSSSOFDM(n) ((((n)) & BIT13) >> 13) #define WLAN_GET_CAP_INFO_GRPACK(n) ((((n)) & BIT14) >> 14) - #else -// GET & SET Frame Control bit +/* GET & SET Frame Control bit */ #define WLAN_GET_FC_PRVER(n) (((WORD)(n)) & (BIT0 | BIT1)) #define WLAN_GET_FC_FTYPE(n) ((((WORD)(n)) & (BIT2 | BIT3)) >> 2) #define WLAN_GET_FC_FSTYPE(n) ((((WORD)(n)) & (BIT4|BIT5|BIT6|BIT7)) >> 4) @@ -208,13 +204,11 @@ #define WLAN_GET_FC_ISWEP(n) ((((WORD)(n)) & (BIT14)) >> 14) #define WLAN_GET_FC_ORDER(n) ((((WORD)(n)) & (BIT15)) >> 15) - -// Sequence Field bit +/* Sequence Field bit */ #define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n)) & (BIT0|BIT1|BIT2|BIT3)) #define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n)) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4) - -// Capability Field bit +/* Capability Field bit */ #define WLAN_GET_CAP_INFO_ESS(n) ((n) & BIT0) #define WLAN_GET_CAP_INFO_IBSS(n) (((n) & BIT1) >> 1) #define WLAN_GET_CAP_INFO_CFPOLLABLE(n) (((n) & BIT2) >> 2) @@ -228,9 +222,7 @@ #define WLAN_GET_CAP_INFO_DSSSOFDM(n) (((n) & BIT13) >> 13) #define WLAN_GET_CAP_INFO_GRPACK(n) (((n) & BIT14) >> 14) - -#endif //#ifdef __BIG_ENDIAN - +#endif /* #ifdef __BIG_ENDIAN */ #define WLAN_SET_CAP_INFO_ESS(n) (n) #define WLAN_SET_CAP_INFO_IBSS(n) ((n) << 1) @@ -245,7 +237,6 @@ #define WLAN_SET_CAP_INFO_DSSSOFDM(n) ((n) << 13) #define WLAN_SET_CAP_INFO_GRPACK(n) ((n) << 14) - #define WLAN_SET_FC_PRVER(n) ((WORD)(n)) #define WLAN_SET_FC_FTYPE(n) (((WORD)(n)) << 2) #define WLAN_SET_FC_FSTYPE(n) (((WORD)(n)) << 4) @@ -261,7 +252,7 @@ #define WLAN_SET_SEQ_FRGNUM(n) ((WORD)(n)) #define WLAN_SET_SEQ_SEQNUM(n) (((WORD)(n)) << 4) -// ERP Field bit +/* ERP Field bit */ #define WLAN_GET_ERP_NONERP_PRESENT(n) ((n) & BIT0) #define WLAN_GET_ERP_USE_PROTECTION(n) (((n) & BIT1) >> 1) @@ -271,21 +262,19 @@ #define WLAN_SET_ERP_USE_PROTECTION(n) ((n) << 1) #define WLAN_SET_ERP_BARKER_MODE(n) ((n) << 2) - - -// Support & Basic Rates field +/* Support & Basic Rates field */ #define WLAN_MGMT_IS_BASICRATE(b) ((b) & BIT7) #define WLAN_MGMT_GET_RATE(b) ((b) & ~BIT7) -// TIM field +/* TIM field */ #define WLAN_MGMT_IS_MULTICAST_TIM(b) ((b) & BIT0) #define WLAN_MGMT_GET_TIM_OFFSET(b) (((b) & ~BIT0) >> 1) -// 3-Addr & 4-Addr +/* 3-Addr & 4-Addr */ #define WLAN_HDR_A3_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR3_LEN) #define WLAN_HDR_A4_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR4_LEN) -// IEEE ADDR +/* IEEE ADDR */ #define IEEE_ADDR_UNIVERSAL 0x02 #define IEEE_ADDR_GROUP 0x01 @@ -293,7 +282,7 @@ typedef struct { BYTE abyAddr[6]; } IEEE_ADDR, *PIEEE_ADDR; -// 802.11 Header Format +/* 802.11 Header Format */ typedef struct tagWLAN_80211HDR_A2 { @@ -302,7 +291,7 @@ typedef struct tagWLAN_80211HDR_A2 { BYTE abyAddr1[WLAN_ADDR_LEN]; BYTE abyAddr2[WLAN_ADDR_LEN]; -}__attribute__ ((__packed__)) +} __attribute__ ((__packed__)) WLAN_80211HDR_A2, *PWLAN_80211HDR_A2; typedef struct tagWLAN_80211HDR_A3 { @@ -314,7 +303,7 @@ typedef struct tagWLAN_80211HDR_A3 { BYTE abyAddr3[WLAN_ADDR_LEN]; WORD wSeqCtl; -}__attribute__ ((__packed__)) +} __attribute__ ((__packed__)) WLAN_80211HDR_A3, *PWLAN_80211HDR_A3; typedef struct tagWLAN_80211HDR_A4 { @@ -327,10 +316,9 @@ typedef struct tagWLAN_80211HDR_A4 { WORD wSeqCtl; BYTE abyAddr4[WLAN_ADDR_LEN]; -}__attribute__ ((__packed__)) +} __attribute__ ((__packed__)) WLAN_80211HDR_A4, *PWLAN_80211HDR_A4; - typedef union tagUWLAN_80211HDR { WLAN_80211HDR_A2 sA2; @@ -339,15 +327,10 @@ typedef union tagUWLAN_80211HDR { } UWLAN_80211HDR, *PUWLAN_80211HDR; - /*--------------------- Export Classes ----------------------------*/ /*--------------------- Export Variables --------------------------*/ /*--------------------- Export Functions --------------------------*/ - - -#endif // __80211HDR_H__ - - +#endif /* __80211HDR_H__ */ -- cgit v0.10.2 From fb2a8c88bf87b47169218f15ab21f1c089f7fe17 Mon Sep 17 00:00:00 2001 From: Howard Chu Date: Sun, 11 Apr 2010 22:27:13 -0700 Subject: Staging: rt2870: Allow building on ARM Signed-off-by: Howard Chu Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2870/Kconfig b/drivers/staging/rt2870/Kconfig index 6ea172b..e988680 100644 --- a/drivers/staging/rt2870/Kconfig +++ b/drivers/staging/rt2870/Kconfig @@ -1,6 +1,6 @@ config RT2870 tristate "Ralink 2870/3070 wireless support" - depends on USB && X86 && WLAN + depends on USB && (X86 || ARM) && WLAN select WIRELESS_EXT select WEXT_PRIV select CRC_CCITT -- cgit v0.10.2 From 53618cc1e51e1f406a467eca9d1dd2675f3ad88e Mon Sep 17 00:00:00 2001 From: Pavan Savoy Date: Thu, 8 Apr 2010 13:16:53 -0500 Subject: Staging: sources for ST core Texas Instruments BT, FM and GPS combo chips/drivers make use of a single TTY to communicate with the chip. This module constitutes the core logic, TTY ldisc driver and the exported symbols for registering/unregistering of the protocol drivers such as BT/FM/GPS. Signed-off-by: Pavan Savoy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/ti-st/st_core.c b/drivers/staging/ti-st/st_core.c new file mode 100644 index 0000000..4e93694 --- /dev/null +++ b/drivers/staging/ti-st/st_core.c @@ -0,0 +1,1062 @@ +/* + * Shared Transport Line discipline driver Core + * This hooks up ST KIM driver and ST LL driver + * Copyright (C) 2009 Texas Instruments + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#define pr_fmt(fmt) "(stc): " fmt +#include +#include +#include +#include + +/* understand BT, FM and GPS for now */ +#include +#include +#include +#include "fm.h" +/* + * packet formats for fm and gps + * #include "gps.h" + */ +#include "st_core.h" +#include "st_kim.h" +#include "st_ll.h" +#include "st.h" + +#ifdef DEBUG +/* strings to be used for rfkill entries and by + * ST Core to be used for sysfs debug entry + */ +#define PROTO_ENTRY(type, name) name +const unsigned char *protocol_strngs[] = { + PROTO_ENTRY(ST_BT, "Bluetooth"), + PROTO_ENTRY(ST_FM, "FM"), + PROTO_ENTRY(ST_GPS, "GPS"), +}; +#endif +/* function pointer pointing to either, + * st_kim_recv during registration to receive fw download responses + * st_int_recv after registration to receive proto stack responses + */ +void (*st_recv) (void*, const unsigned char*, long); + +/********************************************************************/ +#if 0 +/* internal misc functions */ +bool is_protocol_list_empty(void) +{ + unsigned char i = 0; + pr_info(" %s ", __func__); + for (i = 0; i < ST_MAX; i++) { + if (st_gdata->list[i] != NULL) + return ST_NOTEMPTY; + /* not empty */ + } + /* list empty */ + return ST_EMPTY; +} +#endif +/* can be called in from + * -- KIM (during fw download) + * -- ST Core (during st_write) + * + * This is the internal write function - a wrapper + * to tty->ops->write + */ +int st_int_write(struct st_data_s *st_gdata, + const unsigned char *data, int count) +{ +#ifdef VERBOSE /* for debug */ + int i; +#endif + struct tty_struct *tty; + if (unlikely(st_gdata == NULL || st_gdata->tty == NULL)) { + pr_err("tty unavailable to perform write"); + return ST_ERR_FAILURE; + } + tty = st_gdata->tty; +#ifdef VERBOSE + printk(KERN_ERR "start data..\n"); + for (i = 0; i < count; i++) /* no newlines for each datum */ + printk(" %x", data[i]); + printk(KERN_ERR "\n ..end data\n"); +#endif + return tty->ops->write(tty, data, count); + +} + +/* + * push the skb received to relevant + * protocol stacks + */ +void st_send_frame(enum proto_type protoid, struct st_data_s *st_gdata) +{ + pr_info(" %s(prot:%d) ", __func__, protoid); + + if (unlikely + (st_gdata == NULL || st_gdata->rx_skb == NULL + || st_gdata->list[protoid] == NULL)) { + pr_err("protocol %d not registered, no data to send?", + protoid); + kfree_skb(st_gdata->rx_skb); + return; + } + /* this cannot fail + * this shouldn't take long + * - should be just skb_queue_tail for the + * protocol stack driver + */ + if (likely(st_gdata->list[protoid]->recv != NULL)) { + if (unlikely(st_gdata->list[protoid]->recv(st_gdata->rx_skb) + != ST_SUCCESS)) { + pr_err(" proto stack %d's ->recv failed", protoid); + kfree_skb(st_gdata->rx_skb); + return; + } + } else { + pr_err(" proto stack %d's ->recv null", protoid); + kfree_skb(st_gdata->rx_skb); + } + pr_info(" done %s", __func__); + return; +} + +/* + * to call registration complete callbacks + * of all protocol stack drivers + */ +void st_reg_complete(struct st_data_s *st_gdata, char err) +{ + unsigned char i = 0; + pr_info(" %s ", __func__); + for (i = 0; i < ST_MAX; i++) { + if (likely(st_gdata != NULL && st_gdata->list[i] != NULL && + st_gdata->list[i]->reg_complete_cb != NULL)) + st_gdata->list[i]->reg_complete_cb(err); + } +} + +static inline int st_check_data_len(struct st_data_s *st_gdata, + int protoid, int len) +{ + register int room = skb_tailroom(st_gdata->rx_skb); + + pr_info("len %d room %d", len, room); + + if (!len) { + /* Received packet has only packet header and + * has zero length payload. So, ask ST CORE to + * forward the packet to protocol driver (BT/FM/GPS) + */ + st_send_frame(protoid, st_gdata); + + } else if (len > room) { + /* Received packet's payload length is larger. + * We can't accommodate it in created skb. + */ + pr_err("Data length is too large len %d room %d", len, + room); + kfree_skb(st_gdata->rx_skb); + } else { + /* Packet header has non-zero payload length and + * we have enough space in created skb. Lets read + * payload data */ + st_gdata->rx_state = ST_BT_W4_DATA; + st_gdata->rx_count = len; + return len; + } + + /* Change ST state to continue to process next + * packet */ + st_gdata->rx_state = ST_W4_PACKET_TYPE; + st_gdata->rx_skb = NULL; + st_gdata->rx_count = 0; + + return 0; +} + +/* internal function for action when wake-up ack + * received + */ +static inline void st_wakeup_ack(struct st_data_s *st_gdata, + unsigned char cmd) +{ + register struct sk_buff *waiting_skb; + unsigned long flags = 0; + + spin_lock_irqsave(&st_gdata->lock, flags); + /* de-Q from waitQ and Q in txQ now that the + * chip is awake + */ + while ((waiting_skb = skb_dequeue(&st_gdata->tx_waitq))) + skb_queue_tail(&st_gdata->txq, waiting_skb); + + /* state forwarded to ST LL */ + st_ll_sleep_state(st_gdata, (unsigned long)cmd); + spin_unlock_irqrestore(&st_gdata->lock, flags); + + /* wake up to send the recently copied skbs from waitQ */ + st_tx_wakeup(st_gdata); +} + +/* Decodes received RAW data and forwards to corresponding + * client drivers (Bluetooth,FM,GPS..etc). + * + */ +void st_int_recv(void *disc_data, + const unsigned char *data, long count) +{ + register char *ptr; + struct hci_event_hdr *eh; + struct hci_acl_hdr *ah; + struct hci_sco_hdr *sh; + struct fm_event_hdr *fm; + struct gps_event_hdr *gps; + register int len = 0, type = 0, dlen = 0; + static enum proto_type protoid = ST_MAX; + struct st_data_s *st_gdata = (struct st_data_s *)disc_data; + + ptr = (char *)data; + /* tty_receive sent null ? */ + if (unlikely(ptr == NULL) || (st_gdata == NULL)) { + pr_err(" received null from TTY "); + return; + } + + pr_info("count %ld rx_state %ld" + "rx_count %ld", count, st_gdata->rx_state, + st_gdata->rx_count); + + /* Decode received bytes here */ + while (count) { + if (st_gdata->rx_count) { + len = min_t(unsigned int, st_gdata->rx_count, count); + memcpy(skb_put(st_gdata->rx_skb, len), ptr, len); + st_gdata->rx_count -= len; + count -= len; + ptr += len; + + if (st_gdata->rx_count) + continue; + + /* Check ST RX state machine , where are we? */ + switch (st_gdata->rx_state) { + + /* Waiting for complete packet ? */ + case ST_BT_W4_DATA: + pr_info("Complete pkt received"); + + /* Ask ST CORE to forward + * the packet to protocol driver */ + st_send_frame(protoid, st_gdata); + + st_gdata->rx_state = ST_W4_PACKET_TYPE; + st_gdata->rx_skb = NULL; + protoid = ST_MAX; /* is this required ? */ + continue; + + /* Waiting for Bluetooth event header ? */ + case ST_BT_W4_EVENT_HDR: + eh = (struct hci_event_hdr *)st_gdata->rx_skb-> + data; + + pr_info("Event header: evt 0x%2.2x" + "plen %d", eh->evt, eh->plen); + + st_check_data_len(st_gdata, protoid, eh->plen); + continue; + + /* Waiting for Bluetooth acl header ? */ + case ST_BT_W4_ACL_HDR: + ah = (struct hci_acl_hdr *)st_gdata->rx_skb-> + data; + dlen = __le16_to_cpu(ah->dlen); + + pr_info("ACL header: dlen %d", dlen); + + st_check_data_len(st_gdata, protoid, dlen); + continue; + + /* Waiting for Bluetooth sco header ? */ + case ST_BT_W4_SCO_HDR: + sh = (struct hci_sco_hdr *)st_gdata->rx_skb-> + data; + + pr_info("SCO header: dlen %d", sh->dlen); + + st_check_data_len(st_gdata, protoid, sh->dlen); + continue; + case ST_FM_W4_EVENT_HDR: + fm = (struct fm_event_hdr *)st_gdata->rx_skb-> + data; + pr_info("FM Header: "); + st_check_data_len(st_gdata, ST_FM, fm->plen); + continue; + /* TODO : Add GPS packet machine logic here */ + case ST_GPS_W4_EVENT_HDR: + /* [0x09 pkt hdr][R/W byte][2 byte len] */ + gps = (struct gps_event_hdr *)st_gdata->rx_skb-> + data; + pr_info("GPS Header: "); + st_check_data_len(st_gdata, ST_GPS, gps->plen); + continue; + } /* end of switch rx_state */ + } + + /* end of if rx_count */ + /* Check first byte of packet and identify module + * owner (BT/FM/GPS) */ + switch (*ptr) { + + /* Bluetooth event packet? */ + case HCI_EVENT_PKT: + pr_info("Event packet"); + st_gdata->rx_state = ST_BT_W4_EVENT_HDR; + st_gdata->rx_count = HCI_EVENT_HDR_SIZE; + type = HCI_EVENT_PKT; + protoid = ST_BT; + break; + + /* Bluetooth acl packet? */ + case HCI_ACLDATA_PKT: + pr_info("ACL packet"); + st_gdata->rx_state = ST_BT_W4_ACL_HDR; + st_gdata->rx_count = HCI_ACL_HDR_SIZE; + type = HCI_ACLDATA_PKT; + protoid = ST_BT; + break; + + /* Bluetooth sco packet? */ + case HCI_SCODATA_PKT: + pr_info("SCO packet"); + st_gdata->rx_state = ST_BT_W4_SCO_HDR; + st_gdata->rx_count = HCI_SCO_HDR_SIZE; + type = HCI_SCODATA_PKT; + protoid = ST_BT; + break; + + /* Channel 8(FM) packet? */ + case ST_FM_CH8_PKT: + pr_info("FM CH8 packet"); + type = ST_FM_CH8_PKT; + st_gdata->rx_state = ST_FM_W4_EVENT_HDR; + st_gdata->rx_count = FM_EVENT_HDR_SIZE; + protoid = ST_FM; + break; + + /* Channel 9(GPS) packet? */ + case 0x9: /*ST_LL_GPS_CH9_PKT */ + pr_info("GPS CH9 packet"); + type = 0x9; /* ST_LL_GPS_CH9_PKT; */ + protoid = ST_GPS; + st_gdata->rx_state = ST_GPS_W4_EVENT_HDR; + st_gdata->rx_count = 3; /* GPS_EVENT_HDR_SIZE -1*/ + break; + case LL_SLEEP_IND: + case LL_SLEEP_ACK: + case LL_WAKE_UP_IND: + pr_info("PM packet"); + /* this takes appropriate action based on + * sleep state received -- + */ + st_ll_sleep_state(st_gdata, *ptr); + ptr++; + count--; + continue; + case LL_WAKE_UP_ACK: + pr_info("PM packet"); + /* wake up ack received */ + st_wakeup_ack(st_gdata, *ptr); + ptr++; + count--; + continue; + /* Unknow packet? */ + default: + pr_err("Unknown packet type %2.2x", (__u8) *ptr); + ptr++; + count--; + continue; + }; + ptr++; + count--; + + switch (protoid) { + case ST_BT: + /* Allocate new packet to hold received data */ + st_gdata->rx_skb = + bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); + if (!st_gdata->rx_skb) { + pr_err("Can't allocate mem for new packet"); + st_gdata->rx_state = ST_W4_PACKET_TYPE; + st_gdata->rx_count = 0; + return; + } + bt_cb(st_gdata->rx_skb)->pkt_type = type; + break; + case ST_FM: /* for FM */ + st_gdata->rx_skb = + alloc_skb(FM_MAX_FRAME_SIZE, GFP_ATOMIC); + if (!st_gdata->rx_skb) { + pr_err("Can't allocate mem for new packet"); + st_gdata->rx_state = ST_W4_PACKET_TYPE; + st_gdata->rx_count = 0; + return; + } + /* place holder 0x08 */ + skb_reserve(st_gdata->rx_skb, 1); + st_gdata->rx_skb->cb[0] = ST_FM_CH8_PKT; + break; + case ST_GPS: + /* for GPS */ + st_gdata->rx_skb = + alloc_skb(100 /*GPS_MAX_FRAME_SIZE */ , GFP_ATOMIC); + if (!st_gdata->rx_skb) { + pr_err("Can't allocate mem for new packet"); + st_gdata->rx_state = ST_W4_PACKET_TYPE; + st_gdata->rx_count = 0; + return; + } + /* place holder 0x09 */ + skb_reserve(st_gdata->rx_skb, 1); + st_gdata->rx_skb->cb[0] = 0x09; /*ST_GPS_CH9_PKT; */ + break; + case ST_MAX: + break; + } + } + pr_info("done %s", __func__); + return; +} + +/* internal de-Q function + * -- return previous in-completely written skb + * or return the skb in the txQ + */ +struct sk_buff *st_int_dequeue(struct st_data_s *st_gdata) +{ + struct sk_buff *returning_skb; + + pr_info("%s", __func__); + /* if the previous skb wasn't written completely + */ + if (st_gdata->tx_skb != NULL) { + returning_skb = st_gdata->tx_skb; + st_gdata->tx_skb = NULL; + return returning_skb; + } + + /* de-Q from the txQ always if previous write is complete */ + return skb_dequeue(&st_gdata->txq); +} + +/* internal Q-ing function + * will either Q the skb to txq or the tx_waitq + * depending on the ST LL state + * + * lock the whole func - since ll_getstate and Q-ing should happen + * in one-shot + */ +void st_int_enqueue(struct st_data_s *st_gdata, struct sk_buff *skb) +{ + unsigned long flags = 0; + + pr_info("%s", __func__); + /* this function can be invoked in more then one context. + * so have a lock */ + spin_lock_irqsave(&st_gdata->lock, flags); + + switch (st_ll_getstate(st_gdata)) { + case ST_LL_AWAKE: + pr_info("ST LL is AWAKE, sending normally"); + skb_queue_tail(&st_gdata->txq, skb); + break; + case ST_LL_ASLEEP_TO_AWAKE: + skb_queue_tail(&st_gdata->tx_waitq, skb); + break; + case ST_LL_AWAKE_TO_ASLEEP: /* host cannot be in this state */ + pr_err("ST LL is illegal state(%ld)," + "purging received skb.", st_ll_getstate(st_gdata)); + kfree_skb(skb); + break; + + case ST_LL_ASLEEP: + /* call a function of ST LL to put data + * in tx_waitQ and wake_ind in txQ + */ + skb_queue_tail(&st_gdata->tx_waitq, skb); + st_ll_wakeup(st_gdata); + break; + default: + pr_err("ST LL is illegal state(%ld)," + "purging received skb.", st_ll_getstate(st_gdata)); + kfree_skb(skb); + break; + } + spin_unlock_irqrestore(&st_gdata->lock, flags); + pr_info("done %s", __func__); + return; +} + +/* + * internal wakeup function + * called from either + * - TTY layer when write's finished + * - st_write (in context of the protocol stack) + */ +void st_tx_wakeup(struct st_data_s *st_data) +{ + struct sk_buff *skb; + unsigned long flags; /* for irq save flags */ + pr_info("%s", __func__); + /* check for sending & set flag sending here */ + if (test_and_set_bit(ST_TX_SENDING, &st_data->tx_state)) { + pr_info("ST already sending"); + /* keep sending */ + set_bit(ST_TX_WAKEUP, &st_data->tx_state); + return; + /* TX_WAKEUP will be checked in another + * context + */ + } + do { /* come back if st_tx_wakeup is set */ + /* woke-up to write */ + clear_bit(ST_TX_WAKEUP, &st_data->tx_state); + while ((skb = st_int_dequeue(st_data))) { + int len; + spin_lock_irqsave(&st_data->lock, flags); + /* enable wake-up from TTY */ + set_bit(TTY_DO_WRITE_WAKEUP, &st_data->tty->flags); + len = st_int_write(st_data, skb->data, skb->len); + skb_pull(skb, len); + /* if skb->len = len as expected, skb->len=0 */ + if (skb->len) { + /* would be the next skb to be sent */ + st_data->tx_skb = skb; + spin_unlock_irqrestore(&st_data->lock, flags); + break; + } + kfree_skb(skb); + spin_unlock_irqrestore(&st_data->lock, flags); + } + /* if wake-up is set in another context- restart sending */ + } while (test_bit(ST_TX_WAKEUP, &st_data->tx_state)); + + /* clear flag sending */ + clear_bit(ST_TX_SENDING, &st_data->tx_state); +} + +/********************************************************************/ +/* functions called from ST KIM +*/ +void kim_st_list_protocols(struct st_data_s *st_gdata, char *buf) +{ + unsigned long flags = 0; +#ifdef DEBUG + unsigned char i = ST_MAX; +#endif + spin_lock_irqsave(&st_gdata->lock, flags); +#ifdef DEBUG /* more detailed log */ + for (i = 0; i < ST_MAX; i++) { + if (i == 0) { + sprintf(buf, "%s is %s", protocol_strngs[i], + st_gdata->list[i] != + NULL ? "Registered" : "Unregistered"); + } else { + sprintf(buf, "%s\n%s is %s", buf, protocol_strngs[i], + st_gdata->list[i] != + NULL ? "Registered" : "Unregistered"); + } + } + sprintf(buf, "%s\n", buf); +#else /* limited info */ + sprintf(buf, "BT=%c\nFM=%c\nGPS=%c\n", + st_gdata->list[ST_BT] != NULL ? 'R' : 'U', + st_gdata->list[ST_FM] != NULL ? 'R' : 'U', + st_gdata->list[ST_GPS] != NULL ? 'R' : 'U'); +#endif + spin_unlock_irqrestore(&st_gdata->lock, flags); +} + +/********************************************************************/ +/* + * functions called from protocol stack drivers + * to be EXPORT-ed + */ +long st_register(struct st_proto_s *new_proto) +{ + struct st_data_s *st_gdata; + long err = ST_SUCCESS; + unsigned long flags = 0; + + st_kim_ref(&st_gdata); + pr_info("%s(%d) ", __func__, new_proto->type); + if (st_gdata == NULL || new_proto == NULL || new_proto->recv == NULL + || new_proto->reg_complete_cb == NULL) { + pr_err("gdata/new_proto/recv or reg_complete_cb not ready"); + return ST_ERR_FAILURE; + } + + if (new_proto->type < ST_BT || new_proto->type >= ST_MAX) { + pr_err("protocol %d not supported", new_proto->type); + return ST_ERR_NOPROTO; + } + + if (st_gdata->list[new_proto->type] != NULL) { + pr_err("protocol %d already registered", new_proto->type); + return ST_ERR_ALREADY; + } + + /* can be from process context only */ + spin_lock_irqsave(&st_gdata->lock, flags); + + if (test_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state)) { + pr_info(" ST_REG_IN_PROGRESS:%d ", new_proto->type); + /* fw download in progress */ + st_kim_chip_toggle(new_proto->type, KIM_GPIO_ACTIVE); + + st_gdata->list[new_proto->type] = new_proto; + new_proto->write = st_write; + + set_bit(ST_REG_PENDING, &st_gdata->st_state); + spin_unlock_irqrestore(&st_gdata->lock, flags); + return ST_ERR_PENDING; + } else if (st_gdata->protos_registered == ST_EMPTY) { + pr_info(" protocol list empty :%d ", new_proto->type); + set_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state); + st_recv = st_kim_recv; + + /* release lock previously held - re-locked below */ + spin_unlock_irqrestore(&st_gdata->lock, flags); + + /* enable the ST LL - to set default chip state */ + st_ll_enable(st_gdata); + /* this may take a while to complete + * since it involves BT fw download + */ + err = st_kim_start(); + if (err != ST_SUCCESS) { + clear_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state); + if ((st_gdata->protos_registered != ST_EMPTY) && + (test_bit(ST_REG_PENDING, &st_gdata->st_state))) { + pr_err(" KIM failure complete callback "); + st_reg_complete(st_gdata, ST_ERR_FAILURE); + } + + return ST_ERR_FAILURE; + } + + /* the protocol might require other gpios to be toggled + */ + st_kim_chip_toggle(new_proto->type, KIM_GPIO_ACTIVE); + + clear_bit(ST_REG_IN_PROGRESS, &st_gdata->st_state); + st_recv = st_int_recv; + + /* this is where all pending registration + * are signalled to be complete by calling callback functions + */ + if ((st_gdata->protos_registered != ST_EMPTY) && + (test_bit(ST_REG_PENDING, &st_gdata->st_state))) { + pr_info(" call reg complete callback "); + st_gdata->protos_registered++; + st_reg_complete(st_gdata, ST_SUCCESS); + } + clear_bit(ST_REG_PENDING, &st_gdata->st_state); + + /* check for already registered once more, + * since the above check is old + */ + if (st_gdata->list[new_proto->type] != NULL) { + pr_err(" proto %d already registered ", + new_proto->type); + return ST_ERR_ALREADY; + } + + spin_lock_irqsave(&st_gdata->lock, flags); + st_gdata->list[new_proto->type] = new_proto; + new_proto->write = st_write; + spin_unlock_irqrestore(&st_gdata->lock, flags); + return err; + } + /* if fw is already downloaded & new stack registers protocol */ + else { + switch (new_proto->type) { + case ST_BT: + /* do nothing */ + break; + case ST_FM: + case ST_GPS: + st_kim_chip_toggle(new_proto->type, KIM_GPIO_ACTIVE); + break; + case ST_MAX: + default: + pr_err("%d protocol not supported", + new_proto->type); + err = ST_ERR_NOPROTO; + /* something wrong */ + break; + } + st_gdata->list[new_proto->type] = new_proto; + new_proto->write = st_write; + + /* lock already held before entering else */ + spin_unlock_irqrestore(&st_gdata->lock, flags); + return err; + } + pr_info("done %s(%d) ", __func__, new_proto->type); +} +EXPORT_SYMBOL_GPL(st_register); + +/* to unregister a protocol - + * to be called from protocol stack driver + */ +long st_unregister(enum proto_type type) +{ + long err = ST_SUCCESS; + unsigned long flags = 0; + struct st_data_s *st_gdata; + + pr_info("%s: %d ", __func__, type); + + st_kim_ref(&st_gdata); + if (type < ST_BT || type >= ST_MAX) { + pr_err(" protocol %d not supported", type); + return ST_ERR_NOPROTO; + } + + spin_lock_irqsave(&st_gdata->lock, flags); + + if (st_gdata->list[type] == NULL) { + pr_err(" protocol %d not registered", type); + spin_unlock_irqrestore(&st_gdata->lock, flags); + return ST_ERR_NOPROTO; + } + + st_gdata->protos_registered--; + st_gdata->list[type] = NULL; + + /* kim ignores BT in the below function + * and handles the rest, BT is toggled + * only in kim_start and kim_stop + */ + st_kim_chip_toggle(type, KIM_GPIO_INACTIVE); + spin_unlock_irqrestore(&st_gdata->lock, flags); + + if ((st_gdata->protos_registered == ST_EMPTY) && + (!test_bit(ST_REG_PENDING, &st_gdata->st_state))) { + pr_info(" all protocols unregistered "); + + /* stop traffic on tty */ + if (st_gdata->tty) { + tty_ldisc_flush(st_gdata->tty); + stop_tty(st_gdata->tty); + } + + /* all protocols now unregistered */ + st_kim_stop(); + /* disable ST LL */ + st_ll_disable(st_gdata); + } + return err; +} + +/* + * called in protocol stack drivers + * via the write function pointer + */ +long st_write(struct sk_buff *skb) +{ + struct st_data_s *st_gdata; +#ifdef DEBUG + enum proto_type protoid = ST_MAX; +#endif + long len; + + st_kim_ref(&st_gdata); + if (unlikely(skb == NULL || st_gdata == NULL + || st_gdata->tty == NULL)) { + pr_err("data/tty unavailable to perform write"); + return ST_ERR_FAILURE; + } +#ifdef DEBUG /* open-up skb to read the 1st byte */ + switch (skb->data[0]) { + case HCI_COMMAND_PKT: + case HCI_ACLDATA_PKT: + case HCI_SCODATA_PKT: + protoid = ST_BT; + break; + case ST_FM_CH8_PKT: + protoid = ST_FM; + break; + case 0x09: + protoid = ST_GPS; + break; + } + if (unlikely(st_gdata->list[protoid] == NULL)) { + pr_err(" protocol %d not registered, and writing? ", + protoid); + return ST_ERR_FAILURE; + } +#endif + pr_info("%d to be written", skb->len); + len = skb->len; + + /* st_ll to decide where to enqueue the skb */ + st_int_enqueue(st_gdata, skb); + /* wake up */ + st_tx_wakeup(st_gdata); + + /* return number of bytes written */ + return len; +} + +/* for protocols making use of shared transport */ +EXPORT_SYMBOL_GPL(st_unregister); + +/********************************************************************/ +/* + * functions called from TTY layer + */ +static int st_tty_open(struct tty_struct *tty) +{ + int err = ST_SUCCESS; + struct st_data_s *st_gdata; + pr_info("%s ", __func__); + + st_kim_ref(&st_gdata); + st_gdata->tty = tty; + tty->disc_data = st_gdata; + + /* don't do an wakeup for now */ + clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); + + /* mem already allocated + */ + tty->receive_room = 65536; + /* Flush any pending characters in the driver and discipline. */ + tty_ldisc_flush(tty); + tty_driver_flush_buffer(tty); + /* + * signal to UIM via KIM that - + * installation of N_TI_WL ldisc is complete + */ + st_kim_complete(); + pr_info("done %s", __func__); + return err; +} + +static void st_tty_close(struct tty_struct *tty) +{ + unsigned char i = ST_MAX; + unsigned long flags = 0; + struct st_data_s *st_gdata = tty->disc_data; + + pr_info("%s ", __func__); + + /* TODO: + * if a protocol has been registered & line discipline + * un-installed for some reason - what should be done ? + */ + spin_lock_irqsave(&st_gdata->lock, flags); + for (i = ST_BT; i < ST_MAX; i++) { + if (st_gdata->list[i] != NULL) + pr_err("%d not un-registered", i); + st_gdata->list[i] = NULL; + } + spin_unlock_irqrestore(&st_gdata->lock, flags); + /* + * signal to UIM via KIM that - + * N_TI_WL ldisc is un-installed + */ + st_kim_complete(); + st_gdata->tty = NULL; + /* Flush any pending characters in the driver and discipline. */ + tty_ldisc_flush(tty); + tty_driver_flush_buffer(tty); + + spin_lock_irqsave(&st_gdata->lock, flags); + /* empty out txq and tx_waitq */ + skb_queue_purge(&st_gdata->txq); + skb_queue_purge(&st_gdata->tx_waitq); + /* reset the TTY Rx states of ST */ + st_gdata->rx_count = 0; + st_gdata->rx_state = ST_W4_PACKET_TYPE; + kfree_skb(st_gdata->rx_skb); + st_gdata->rx_skb = NULL; + spin_unlock_irqrestore(&st_gdata->lock, flags); + + pr_info("%s: done ", __func__); +} + +static void st_tty_receive(struct tty_struct *tty, const unsigned char *data, + char *tty_flags, int count) +{ + +#ifdef VERBOSE + long i; + printk(KERN_ERR "incoming data...\n"); + for (i = 0; i < count; i++) + printk(" %x", data[i]); + printk(KERN_ERR "\n.. data end\n"); +#endif + + /* + * if fw download is in progress then route incoming data + * to KIM for validation + */ + st_recv(tty->disc_data, data, count); + pr_info("done %s", __func__); +} + +/* wake-up function called in from the TTY layer + * inside the internal wakeup function will be called + */ +static void st_tty_wakeup(struct tty_struct *tty) +{ + struct st_data_s *st_gdata = tty->disc_data; + pr_info("%s ", __func__); + /* don't do an wakeup for now */ + clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); + + /* call our internal wakeup */ + st_tx_wakeup((void *)st_gdata); +} + +static void st_tty_flush_buffer(struct tty_struct *tty) +{ + struct st_data_s *st_gdata = tty->disc_data; + pr_info("%s ", __func__); + + kfree_skb(st_gdata->tx_skb); + st_gdata->tx_skb = NULL; + + tty->ops->flush_buffer(tty); + return; +} + +/********************************************************************/ +int st_core_init(struct st_data_s **core_data) +{ + struct st_data_s *st_gdata; + long err; + static struct tty_ldisc_ops *st_ldisc_ops; + + /* populate and register to TTY line discipline */ + st_ldisc_ops = kzalloc(sizeof(*st_ldisc_ops), GFP_KERNEL); + if (!st_ldisc_ops) { + pr_err("no mem to allocate"); + return -ENOMEM; + } + + st_ldisc_ops->magic = TTY_LDISC_MAGIC; + st_ldisc_ops->name = "n_st"; /*"n_hci"; */ + st_ldisc_ops->open = st_tty_open; + st_ldisc_ops->close = st_tty_close; + st_ldisc_ops->receive_buf = st_tty_receive; + st_ldisc_ops->write_wakeup = st_tty_wakeup; + st_ldisc_ops->flush_buffer = st_tty_flush_buffer; + st_ldisc_ops->owner = THIS_MODULE; + + err = tty_register_ldisc(N_TI_WL, st_ldisc_ops); + if (err) { + pr_err("error registering %d line discipline %ld", + N_TI_WL, err); + kfree(st_ldisc_ops); + return err; + } + pr_info("registered n_shared line discipline"); + + st_gdata = kzalloc(sizeof(struct st_data_s), GFP_KERNEL); + if (!st_gdata) { + pr_err("memory allocation failed"); + err = tty_unregister_ldisc(N_TI_WL); + if (err) + pr_err("unable to un-register ldisc %ld", err); + kfree(st_ldisc_ops); + err = -ENOMEM; + return err; + } + + /* Initialize ST TxQ and Tx waitQ queue head. All BT/FM/GPS module skb's + * will be pushed in this queue for actual transmission. + */ + skb_queue_head_init(&st_gdata->txq); + skb_queue_head_init(&st_gdata->tx_waitq); + + /* Locking used in st_int_enqueue() to avoid multiple execution */ + spin_lock_init(&st_gdata->lock); + + /* ldisc_ops ref to be only used in __exit of module */ + st_gdata->ldisc_ops = st_ldisc_ops; + +#if 0 + err = st_kim_init(); + if (err) { + pr_err("error during kim initialization(%ld)", err); + kfree(st_gdata); + err = tty_unregister_ldisc(N_TI_WL); + if (err) + pr_err("unable to un-register ldisc"); + kfree(st_ldisc_ops); + return -1; + } +#endif + + err = st_ll_init(st_gdata); + if (err) { + pr_err("error during st_ll initialization(%ld)", err); + kfree(st_gdata); + err = tty_unregister_ldisc(N_TI_WL); + if (err) + pr_err("unable to un-register ldisc"); + kfree(st_ldisc_ops); + return -1; + } + *core_data = st_gdata; + return 0; +} + +void st_core_exit(struct st_data_s *st_gdata) +{ + long err; + /* internal module cleanup */ + err = st_ll_deinit(st_gdata); + if (err) + pr_err("error during deinit of ST LL %ld", err); +#if 0 + err = st_kim_deinit(); + if (err) + pr_err("error during deinit of ST KIM %ld", err); +#endif + if (st_gdata != NULL) { + /* Free ST Tx Qs and skbs */ + skb_queue_purge(&st_gdata->txq); + skb_queue_purge(&st_gdata->tx_waitq); + kfree_skb(st_gdata->rx_skb); + kfree_skb(st_gdata->tx_skb); + /* TTY ldisc cleanup */ + err = tty_unregister_ldisc(N_TI_WL); + if (err) + pr_err("unable to un-register ldisc %ld", err); + kfree(st_gdata->ldisc_ops); + /* free the global data pointer */ + kfree(st_gdata); + } +} + + diff --git a/drivers/staging/ti-st/st_core.h b/drivers/staging/ti-st/st_core.h new file mode 100644 index 0000000..f271c88 --- /dev/null +++ b/drivers/staging/ti-st/st_core.h @@ -0,0 +1,98 @@ +/* + * Shared Transport Core header file + * + * Copyright (C) 2009 Texas Instruments + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef ST_CORE_H +#define ST_CORE_H + +#include +#include "st.h" + +/* states of protocol list */ +#define ST_NOTEMPTY 1 +#define ST_EMPTY 0 + +/* + * possible st_states + */ +#define ST_INITIALIZING 1 +#define ST_REG_IN_PROGRESS 2 +#define ST_REG_PENDING 3 +#define ST_WAITING_FOR_RESP 4 + +/* + * local data required for ST/KIM/ST-HCI-LL + */ +struct st_data_s { + unsigned long st_state; +/* + * an instance of tty_struct & ldisc ops to move around + */ + struct tty_struct *tty; + struct tty_ldisc_ops *ldisc_ops; +/* + * the tx skb - + * if the skb is already dequeued and the tty failed to write the same + * maintain the skb to write in the next transaction + */ + struct sk_buff *tx_skb; +#define ST_TX_SENDING 1 +#define ST_TX_WAKEUP 2 + unsigned long tx_state; +/* + * list of protocol registered + */ + struct st_proto_s *list[ST_MAX]; +/* + * lock + */ + unsigned long rx_state; + unsigned long rx_count; + struct sk_buff *rx_skb; + struct sk_buff_head txq, tx_waitq; + spinlock_t lock; /* ST LL state lock */ + unsigned char protos_registered; + unsigned long ll_state; /* ST LL power state */ +}; + +/* point this to tty->driver->write or tty->ops->write + * depending upon the kernel version + */ +int st_int_write(struct st_data_s*, const unsigned char*, int); +/* internal write function, passed onto protocol drivers + * via the write function ptr of protocol struct + */ +long st_write(struct sk_buff *); +/* function to be called from ST-LL + */ +void st_ll_send_frame(enum proto_type, struct sk_buff *); +/* internal wake up function */ +void st_tx_wakeup(struct st_data_s *st_data); + +int st_core_init(struct st_data_s **); +void st_core_exit(struct st_data_s *); +void st_kim_ref(struct st_data_s **); + +#define GPS_STUB_TEST +#ifdef GPS_STUB_TEST +int gps_chrdrv_stub_write(const unsigned char*, int); +void gps_chrdrv_stub_init(void); +#endif + +#endif /*ST_CORE_H */ -- cgit v0.10.2 From d0088ce183ad111b203adc94dcc7dde2a590a198 Mon Sep 17 00:00:00 2001 From: Pavan Savoy Date: Thu, 8 Apr 2010 13:16:54 -0500 Subject: Staging: sources for Init manager module Kernel Space Init-Manager works along with User-Mode Init Manager daemon running to maintain the UART state. Communication between user-space daemon and this module can be 1. Via the pid written onto sysfs entry 2. Via the rfkill subsystem It also is a platform driver with a relevant platform device in the board-*.c along with the list of BT/FM/GPS chip enable gpio configuration Signed-off-by: Pavan Savoy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/ti-st/st_kim.c b/drivers/staging/ti-st/st_kim.c new file mode 100644 index 0000000..98cbabb --- /dev/null +++ b/drivers/staging/ti-st/st_kim.c @@ -0,0 +1,754 @@ +/* + * Shared Transport Line discipline driver Core + * Init Manager module responsible for GPIO control + * and firmware download + * Copyright (C) 2009 Texas Instruments + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#define pr_fmt(fmt) "(stk) :" fmt +#include +#include +#include +#include +#include +#include + +#include + +#include "st_kim.h" +/* understand BT events for fw response */ +#include +#include +#include + + +static int kim_probe(struct platform_device *pdev); +static int kim_remove(struct platform_device *pdev); + +/* KIM platform device driver structure */ +static struct platform_driver kim_platform_driver = { + .probe = kim_probe, + .remove = kim_remove, + /* TODO: ST driver power management during suspend/resume ? + */ +#if 0 + .suspend = kim_suspend, + .resume = kim_resume, +#endif + .driver = { + .name = "kim", + .owner = THIS_MODULE, + }, +}; + +#ifndef LEGACY_RFKILL_SUPPORT +static ssize_t show_pid(struct device *dev, struct device_attribute + *attr, char *buf); +static ssize_t store_pid(struct device *dev, struct device_attribute + *devattr, char *buf, size_t count); +static ssize_t show_list(struct device *dev, struct device_attribute + *attr, char *buf); + +/* structures specific for sysfs entries */ +static struct kobj_attribute pid_attr = +__ATTR(pid, 0644, (void *)show_pid, (void *)store_pid); + +static struct kobj_attribute list_protocols = +__ATTR(protocols, 0444, (void *)show_list, NULL); + +static struct attribute *uim_attrs[] = { + &pid_attr.attr, + /* add more debug sysfs entries */ + &list_protocols.attr, + NULL, +}; + +static struct attribute_group uim_attr_grp = { + .attrs = uim_attrs, +}; +#else +static int kim_toggle_radio(void*, bool); +static const struct rfkill_ops kim_rfkill_ops = { + .set_block = kim_toggle_radio, +}; +#endif /* LEGACY_RFKILL_SUPPORT */ + +/* strings to be used for rfkill entries and by + * ST Core to be used for sysfs debug entry + */ +#define PROTO_ENTRY(type, name) name +const unsigned char *protocol_names[] = { + PROTO_ENTRY(ST_BT, "Bluetooth"), + PROTO_ENTRY(ST_FM, "FM"), + PROTO_ENTRY(ST_GPS, "GPS"), +}; + +struct kim_data_s *kim_gdata; + +/**********************************************************************/ +/* internal functions */ + +/* + * function to return whether the firmware response was proper + * in case of error don't complete so that waiting for proper + * response times out + */ +void validate_firmware_response(struct sk_buff *skb) +{ + if (unlikely(skb->data[5] != 0)) { + pr_err("no proper response during fw download"); + pr_err("data6 %x", skb->data[5]); + return; /* keep waiting for the proper response */ + } + /* becos of all the script being downloaded */ + complete_all(&kim_gdata->kim_rcvd); + kfree_skb(skb); +} + +/* check for data len received inside kim_int_recv + * most often hit the last case to update state to waiting for data + */ +static inline int kim_check_data_len(int len) +{ + register int room = skb_tailroom(kim_gdata->rx_skb); + + pr_info("len %d room %d", len, room); + + if (!len) { + validate_firmware_response(kim_gdata->rx_skb); + } else if (len > room) { + /* Received packet's payload length is larger. + * We can't accommodate it in created skb. + */ + pr_err("Data length is too large len %d room %d", len, + room); + kfree_skb(kim_gdata->rx_skb); + } else { + /* Packet header has non-zero payload length and + * we have enough space in created skb. Lets read + * payload data */ + kim_gdata->rx_state = ST_BT_W4_DATA; + kim_gdata->rx_count = len; + return len; + } + + /* Change ST LL state to continue to process next + * packet */ + kim_gdata->rx_state = ST_W4_PACKET_TYPE; + kim_gdata->rx_skb = NULL; + kim_gdata->rx_count = 0; + + return 0; +} + +/* receive function called during firmware download + * - firmware download responses on different UART drivers + * have been observed to come in bursts of different + * tty_receive and hence the logic + */ +void kim_int_recv(const unsigned char *data, long count) +{ + register char *ptr; + struct hci_event_hdr *eh; + register int len = 0, type = 0; + + pr_info("%s", __func__); + /* Decode received bytes here */ + ptr = (char *)data; + if (unlikely(ptr == NULL)) { + pr_err(" received null from TTY "); + return; + } + while (count) { + if (kim_gdata->rx_count) { + len = min_t(unsigned int, kim_gdata->rx_count, count); + memcpy(skb_put(kim_gdata->rx_skb, len), ptr, len); + kim_gdata->rx_count -= len; + count -= len; + ptr += len; + + if (kim_gdata->rx_count) + continue; + + /* Check ST RX state machine , where are we? */ + switch (kim_gdata->rx_state) { + /* Waiting for complete packet ? */ + case ST_BT_W4_DATA: + pr_info("Complete pkt received"); + validate_firmware_response(kim_gdata->rx_skb); + kim_gdata->rx_state = ST_W4_PACKET_TYPE; + kim_gdata->rx_skb = NULL; + continue; + /* Waiting for Bluetooth event header ? */ + case ST_BT_W4_EVENT_HDR: + eh = (struct hci_event_hdr *)kim_gdata-> + rx_skb->data; + pr_info("Event header: evt 0x%2.2x" + "plen %d", eh->evt, eh->plen); + kim_check_data_len(eh->plen); + continue; + } /* end of switch */ + } /* end of if rx_state */ + switch (*ptr) { + /* Bluetooth event packet? */ + case HCI_EVENT_PKT: + pr_info("Event packet"); + kim_gdata->rx_state = ST_BT_W4_EVENT_HDR; + kim_gdata->rx_count = HCI_EVENT_HDR_SIZE; + type = HCI_EVENT_PKT; + break; + default: + pr_info("unknown packet"); + ptr++; + count--; + continue; + } /* end of switch *ptr */ + ptr++; + count--; + kim_gdata->rx_skb = + bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC); + if (!kim_gdata->rx_skb) { + pr_err("can't allocate mem for new packet"); + kim_gdata->rx_state = ST_W4_PACKET_TYPE; + kim_gdata->rx_count = 0; + return; + } /* not necessary in this case */ + bt_cb(kim_gdata->rx_skb)->pkt_type = type; + } /* end of while count */ + pr_info("done %s", __func__); + return; +} + +static long read_local_version(char *bts_scr_name) +{ + unsigned short version = 0, chip = 0, min_ver = 0, maj_ver = 0; + char read_ver_cmd[] = { 0x01, 0x01, 0x10, 0x00 }; + + pr_info("%s", __func__); + + INIT_COMPLETION(kim_gdata->kim_rcvd); + if (4 != st_int_write(kim_gdata->core_data, read_ver_cmd, 4)) { + pr_err("kim: couldn't write 4 bytes"); + return ST_ERR_FAILURE; + } + + if (!wait_for_completion_timeout + (&kim_gdata->kim_rcvd, msecs_to_jiffies(CMD_RESP_TIME))) { + pr_err(" waiting for ver info- timed out "); + return ST_ERR_FAILURE; + } + + version = + MAKEWORD(kim_gdata->resp_buffer[13], kim_gdata->resp_buffer[14]); + chip = (version & 0x7C00) >> 10; + min_ver = (version & 0x007F); + maj_ver = (version & 0x0380) >> 7; + + if (version & 0x8000) + maj_ver |= 0x0008; + + sprintf(bts_scr_name, "TIInit_%d.%d.%d.bts", chip, maj_ver, min_ver); + pr_info("%s", bts_scr_name); + return ST_SUCCESS; +} + +/* internal function which parses through the .bts firmware script file + * intreprets SEND, DELAY actions only as of now + */ +static long download_firmware(void) +{ + long err = ST_SUCCESS; + long len = 0; + register unsigned char *ptr = NULL; + register unsigned char *action_ptr = NULL; + unsigned char bts_scr_name[30] = { 0 }; /* 30 char long bts scr name? */ + + pr_info("%s", __func__); + + err = read_local_version(bts_scr_name); + if (err != ST_SUCCESS) { + pr_err("kim: failed to read local ver"); + return err; + } + err = + request_firmware(&kim_gdata->fw_entry, bts_scr_name, + &kim_gdata->kim_pdev->dev); + if (unlikely((err != 0) || (kim_gdata->fw_entry->data == NULL) || + (kim_gdata->fw_entry->size == 0))) { + pr_err(" request_firmware failed(errno %ld) for %s", err, + bts_scr_name); + return ST_ERR_FAILURE; + } + ptr = (void *)kim_gdata->fw_entry->data; + len = kim_gdata->fw_entry->size; + /* bts_header to remove out magic number and + * version + */ + ptr += sizeof(struct bts_header); + len -= sizeof(struct bts_header); + + while (len > 0 && ptr) { + pr_info(" action size %d, type %d ", + ((struct bts_action *)ptr)->size, + ((struct bts_action *)ptr)->type); + + switch (((struct bts_action *)ptr)->type) { + case ACTION_SEND_COMMAND: /* action send */ + action_ptr = &(((struct bts_action *)ptr)->data[0]); + if (unlikely + (((struct hci_command *)action_ptr)->opcode == + 0xFF36)) { + /* ignore remote change + * baud rate HCI VS command */ + pr_err + (" change remote baud\ + rate command in firmware"); + break; + } + + INIT_COMPLETION(kim_gdata->kim_rcvd); + err = st_int_write(kim_gdata->core_data, + ((struct bts_action_send *)action_ptr)->data, + ((struct bts_action *)ptr)->size); + if (unlikely(err < 0)) { + release_firmware(kim_gdata->fw_entry); + return ST_ERR_FAILURE; + } + if (!wait_for_completion_timeout + (&kim_gdata->kim_rcvd, + msecs_to_jiffies(CMD_RESP_TIME))) { + pr_err + (" response timeout during fw download "); + /* timed out */ + release_firmware(kim_gdata->fw_entry); + return ST_ERR_FAILURE; + } + break; + case ACTION_DELAY: /* sleep */ + pr_info("sleep command in scr"); + action_ptr = &(((struct bts_action *)ptr)->data[0]); + mdelay(((struct bts_action_delay *)action_ptr)->msec); + break; + } + len = + len - (sizeof(struct bts_action) + + ((struct bts_action *)ptr)->size); + ptr = + ptr + sizeof(struct bts_action) + + ((struct bts_action *)ptr)->size; + } + /* fw download complete */ + release_firmware(kim_gdata->fw_entry); + return ST_SUCCESS; +} + +/**********************************************************************/ +/* functions called from ST core */ + +/* function to toggle the GPIO + * needs to know whether the GPIO is active high or active low + */ +void st_kim_chip_toggle(enum proto_type type, enum kim_gpio_state state) +{ + pr_info(" %s ", __func__); + + if (kim_gdata->gpios[type] == -1) { + pr_info(" gpio not requested for protocol %s", + protocol_names[type]); + return; + } + switch (type) { + case ST_BT: + /*Do Nothing */ + break; + + case ST_FM: + if (state == KIM_GPIO_ACTIVE) + gpio_set_value(kim_gdata->gpios[ST_FM], GPIO_LOW); + else + gpio_set_value(kim_gdata->gpios[ST_FM], GPIO_HIGH); + break; + + case ST_GPS: + if (state == KIM_GPIO_ACTIVE) + gpio_set_value(kim_gdata->gpios[ST_GPS], GPIO_HIGH); + else + gpio_set_value(kim_gdata->gpios[ST_GPS], GPIO_LOW); + break; + + case ST_MAX: + default: + break; + } + + return; +} + +/* called from ST Core, when REG_IN_PROGRESS (registration in progress) + * can be because of + * 1. response to read local version + * 2. during send/recv's of firmware download + */ +void st_kim_recv(void *disc_data, const unsigned char *data, long count) +{ + pr_info(" %s ", __func__); + /* copy to local buffer */ + if (unlikely(data[4] == 0x01 && data[5] == 0x10 && data[0] == 0x04)) { + /* must be the read_ver_cmd */ + memcpy(kim_gdata->resp_buffer, data, count); + complete_all(&kim_gdata->kim_rcvd); + return; + } else { + kim_int_recv(data, count); + /* either completes or times out */ + } + return; +} + +/* to signal completion of line discipline installation + * called from ST Core, upon tty_open + */ +void st_kim_complete(void) +{ + complete(&kim_gdata->ldisc_installed); +} + +/* called from ST Core upon 1st registration +*/ +long st_kim_start(void) +{ + long err = ST_SUCCESS; + long retry = POR_RETRY_COUNT; + pr_info(" %s", __func__); + + do { +#ifdef LEGACY_RFKILL_SUPPORT + /* TODO: this is only because rfkill sub-system + * doesn't send events to user-space if the state + * isn't changed + */ + rfkill_set_hw_state(kim_gdata->rfkill[ST_BT], 1); +#endif + /* Configure BT nShutdown to HIGH state */ + gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_LOW); + mdelay(5); /* FIXME: a proper toggle */ + gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_HIGH); + mdelay(100); + /* re-initialize the completion */ + INIT_COMPLETION(kim_gdata->ldisc_installed); +#ifndef LEGACY_RFKILL_SUPPORT + /* send signal to UIM */ + err = kill_pid(find_get_pid(kim_gdata->uim_pid), SIGUSR2, 0); + if (err != 0) { + pr_info(" sending SIGUSR2 to uim failed %ld", err); + err = ST_ERR_FAILURE; + continue; + } +#else + /* unblock and send event to UIM via /dev/rfkill */ + rfkill_set_hw_state(kim_gdata->rfkill[ST_BT], 0); +#endif + /* wait for ldisc to be installed */ + err = wait_for_completion_timeout(&kim_gdata->ldisc_installed, + msecs_to_jiffies(LDISC_TIME)); + if (!err) { /* timeout */ + pr_err("line disc installation timed out "); + err = ST_ERR_FAILURE; + continue; + } else { + /* ldisc installed now */ + pr_info(" line discipline installed "); + err = download_firmware(); + if (err != ST_SUCCESS) { + pr_err("download firmware failed"); + continue; + } else { /* on success don't retry */ + break; + } + } + } while (retry--); + return err; +} + +/* called from ST Core, on the last un-registration +*/ +long st_kim_stop(void) +{ + long err = ST_SUCCESS; + + INIT_COMPLETION(kim_gdata->ldisc_installed); +#ifndef LEGACY_RFKILL_SUPPORT + /* send signal to UIM */ + err = kill_pid(find_get_pid(kim_gdata->uim_pid), SIGUSR2, 1); + if (err != 0) { + pr_err("sending SIGUSR2 to uim failed %ld", err); + return ST_ERR_FAILURE; + } +#else + /* set BT rfkill to be blocked */ + err = rfkill_set_hw_state(kim_gdata->rfkill[ST_BT], 1); +#endif + + /* wait for ldisc to be un-installed */ + err = wait_for_completion_timeout(&kim_gdata->ldisc_installed, + msecs_to_jiffies(LDISC_TIME)); + if (!err) { /* timeout */ + pr_err(" timed out waiting for ldisc to be un-installed"); + return ST_ERR_FAILURE; + } + + /* By default configure BT nShutdown to LOW state */ + gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_LOW); + mdelay(1); + gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_HIGH); + mdelay(1); + gpio_set_value(kim_gdata->gpios[ST_BT], GPIO_LOW); + return err; +} + +/**********************************************************************/ +/* functions called from subsystems */ + +#ifndef LEGACY_RFKILL_SUPPORT +/* called when sysfs entry is written to */ +static ssize_t store_pid(struct device *dev, struct device_attribute + *devattr, char *buf, size_t count) +{ + pr_info("%s: pid %s ", __func__, buf); + sscanf(buf, "%ld", &kim_gdata->uim_pid); + /* to be made use by kim_start to signal SIGUSR2 + */ + return strlen(buf); +} + +/* called when sysfs entry is read from */ +static ssize_t show_pid(struct device *dev, struct device_attribute + *attr, char *buf) +{ + sprintf(buf, "%ld", kim_gdata->uim_pid); + return strlen(buf); +} + +/* called when sysfs entry is read from */ +static ssize_t show_list(struct device *dev, struct device_attribute + *attr, char *buf) +{ + kim_st_list_protocols(kim_gdata->core_data, buf); + return strlen(buf); +} + +#else /* LEGACY_RFKILL_SUPPORT */ + +/* function called from rfkill subsystem, when someone from + * user space would write 0/1 on the sysfs entry + * /sys/class/rfkill/rfkill0,1,3/state + */ +static int kim_toggle_radio(void *data, bool blocked) +{ + enum proto_type type = *((enum proto_type *)data); + pr_info(" %s: %d ", __func__, type); + + switch (type) { + case ST_BT: + /* do nothing */ + break; + case ST_FM: + case ST_GPS: + if (blocked) + st_kim_chip_toggle(type, KIM_GPIO_INACTIVE); + else + st_kim_chip_toggle(type, KIM_GPIO_ACTIVE); + break; + case ST_MAX: + pr_err(" wrong proto type "); + break; + } + return ST_SUCCESS; +} + +#endif /* LEGACY_RFKILL_SUPPORT */ + +void st_kim_ref(struct st_data_s **core_data) +{ + *core_data = kim_gdata->core_data; +} + +/**********************************************************************/ +/* functions called from platform device driver subsystem + * need to have a relevant platform device entry in the platform's + * board-*.c file + */ + +static int kim_probe(struct platform_device *pdev) +{ + long status; + long proto; + long *gpios = pdev->dev.platform_data; + + status = st_core_init(&kim_gdata->core_data); + if (status != 0) { + pr_err(" ST core init failed"); + return ST_ERR_FAILURE; + } + + for (proto = 0; proto < ST_MAX; proto++) { + kim_gdata->gpios[proto] = gpios[proto]; + pr_info(" %ld gpio to be requested", gpios[proto]); + } + + for (proto = 0; (proto < ST_MAX) && (gpios[proto] != -1); proto++) { + /* Claim the Bluetooth/FM/GPIO + * nShutdown gpio from the system + */ + status = gpio_request(gpios[proto], "kim"); + if (unlikely(status)) { + pr_err(" gpio %ld request failed ", gpios[proto]); + proto -= 1; + while (proto >= 0) { + if (gpios[proto] != -1) + gpio_free(gpios[proto]); + } + return status; + } + + /* Configure nShutdown GPIO as output=0 */ + status = + gpio_direction_output(gpios[proto], 0); + if (unlikely(status)) { + pr_err(" unable to configure gpio %ld", + gpios[proto]); + proto -= 1; + while (proto >= 0) { + if (gpios[proto] != -1) + gpio_free(gpios[proto]); + } + return status; + } + } +#ifndef LEGACY_RFKILL_SUPPORT + /* pdev to contain BT, FM and GPS enable/N-Shutdown GPIOs + * execute request_gpio, set output direction + */ + kim_gdata->kim_kobj = kobject_create_and_add("uim", NULL); + /* create the sysfs entry for UIM to put in pid */ + if (sysfs_create_group(kim_gdata->kim_kobj, &uim_attr_grp)) { + pr_err(" sysfs entry creation failed"); + kobject_put(kim_gdata->kim_kobj); + /* free requested GPIOs and fail probe */ + for (proto = ST_BT; proto < ST_MAX; proto++) { + if (gpios[proto] != -1) + gpio_free(gpios[proto]); + } + return -1; /* fail insmod */ + } + pr_info(" sysfs entry created "); +#endif + /* get reference of pdev for request_firmware + */ + kim_gdata->kim_pdev = pdev; + init_completion(&kim_gdata->kim_rcvd); + init_completion(&kim_gdata->ldisc_installed); +#ifdef LEGACY_RFKILL_SUPPORT + for (proto = 0; (proto < ST_MAX) && (gpios[proto] != -1); proto++) { + /* TODO: should all types be rfkill_type_bt ? */ + kim_gdata->rf_protos[proto] = proto; + kim_gdata->rfkill[proto] = rfkill_alloc(protocol_names[proto], + &pdev->dev, RFKILL_TYPE_BLUETOOTH, + &kim_rfkill_ops, &kim_gdata->rf_protos[proto]); + if (kim_gdata->rfkill[proto] == NULL) { + pr_err("cannot create rfkill entry for gpio %ld", + gpios[proto]); + continue; + } + /* block upon creation */ + rfkill_init_sw_state(kim_gdata->rfkill[proto], 1); + status = rfkill_register(kim_gdata->rfkill[proto]); + if (unlikely(status)) { + pr_err("rfkill registration failed for gpio %ld", + gpios[proto]); + rfkill_unregister(kim_gdata->rfkill[proto]); + continue; + } + pr_info("rfkill entry created for %ld", gpios[proto]); + } +#endif + return ST_SUCCESS; +} + +static int kim_remove(struct platform_device *pdev) +{ + /* free the GPIOs requested + */ + long *gpios = pdev->dev.platform_data; + long proto; + + for (proto = 0; (proto < ST_MAX) && (gpios[proto] != -1); proto++) { + /* Claim the Bluetooth/FM/GPIO + * nShutdown gpio from the system + */ + gpio_free(gpios[proto]); +#ifdef LEGACY_RFKILL_SUPPORT + rfkill_unregister(kim_gdata->rfkill[proto]); + rfkill_destroy(kim_gdata->rfkill[proto]); + kim_gdata->rfkill[proto] = NULL; +#endif + } + pr_info("kim: GPIO Freed"); +#ifndef LEGACY_RFKILL_SUPPORT + /* delete the sysfs entries */ + sysfs_remove_group(kim_gdata->kim_kobj, &uim_attr_grp); + kobject_put(kim_gdata->kim_kobj); +#endif + kim_gdata->kim_pdev = NULL; + st_core_exit(kim_gdata->core_data); + return ST_SUCCESS; +} + +/**********************************************************************/ +/* entry point for ST KIM module, called in from ST Core */ + +static int __init st_kim_init(void) +{ + long ret = ST_SUCCESS; + kim_gdata = kzalloc(sizeof(struct kim_data_s), GFP_ATOMIC); + if (!kim_gdata) { + pr_err("no mem to allocate"); + return -ENOMEM; + } + + ret = platform_driver_register(&kim_platform_driver); + if (ret != 0) { + pr_err("platform drv registration failed"); + return ST_ERR_FAILURE; + } + return ST_SUCCESS; +} + +static void __exit st_kim_deinit(void) +{ + /* the following returns void */ + platform_driver_unregister(&kim_platform_driver); + kfree(kim_gdata); + kim_gdata = NULL; +} + + +module_init(st_kim_init); +module_exit(st_kim_deinit); +MODULE_AUTHOR("Pavan Savoy "); +MODULE_DESCRIPTION("Shared Transport Driver for TI BT/FM/GPS combo chips "); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/ti-st/st_kim.h b/drivers/staging/ti-st/st_kim.h new file mode 100644 index 0000000..ff3270e --- /dev/null +++ b/drivers/staging/ti-st/st_kim.h @@ -0,0 +1,150 @@ +/* + * Shared Transport Line discipline driver Core + * Init Manager Module header file + * Copyright (C) 2009 Texas Instruments + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef ST_KIM_H +#define ST_KIM_H + +#include +#include "st.h" +#include "st_core.h" +#include "st_ll.h" +#include + +/* time in msec to wait for + * line discipline to be installed + */ +#define LDISC_TIME 500 +#define CMD_RESP_TIME 500 +#define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) \ + | ((unsigned short)((unsigned char)(b))) << 8)) + +#define GPIO_HIGH 1 +#define GPIO_LOW 0 + +/* the Power-On-Reset logic, requires to attempt + * to download firmware onto chip more than once + * since the self-test for chip takes a while + */ +#define POR_RETRY_COUNT 5 +/* + * legacy rfkill support where-in 3 rfkill + * devices are created for the 3 gpios + * that ST has requested + */ +#define LEGACY_RFKILL_SUPPORT +/* + * header file for ST provided by KIM + */ +struct kim_data_s { + long uim_pid; + struct platform_device *kim_pdev; + struct completion kim_rcvd, ldisc_installed; + /* MAX len of the .bts firmware script name */ + char resp_buffer[30]; + const struct firmware *fw_entry; + long gpios[ST_MAX]; + struct kobject *kim_kobj; +/* used by kim_int_recv to validate fw response */ + unsigned long rx_state; + unsigned long rx_count; + struct sk_buff *rx_skb; +#ifdef LEGACY_RFKILL_SUPPORT + struct rfkill *rfkill[ST_MAX]; + enum proto_type rf_protos[ST_MAX]; +#endif + struct st_data_s *core_data; +}; + +long st_kim_start(void); +long st_kim_stop(void); +/* + * called from st_tty_receive to authenticate fw_download + */ +void st_kim_recv(void *, const unsigned char *, long count); + +void st_kim_chip_toggle(enum proto_type, enum kim_gpio_state); + +void st_kim_complete(void); + +/* function called from ST KIM to ST Core, to + * list out the protocols registered + */ +void kim_st_list_protocols(struct st_data_s *, char *); + +/* + * BTS headers + */ +#define ACTION_SEND_COMMAND 1 +#define ACTION_WAIT_EVENT 2 +#define ACTION_SERIAL 3 +#define ACTION_DELAY 4 +#define ACTION_RUN_SCRIPT 5 +#define ACTION_REMARKS 6 + +/* + * * BRF Firmware header + * */ +struct bts_header { + uint32_t magic; + uint32_t version; + uint8_t future[24]; + uint8_t actions[0]; +} __attribute__ ((packed)); + +/* + * * BRF Actions structure + * */ +struct bts_action { + uint16_t type; + uint16_t size; + uint8_t data[0]; +} __attribute__ ((packed)); + +struct bts_action_send { + uint8_t data[0]; +} __attribute__ ((packed)); + +struct bts_action_wait { + uint32_t msec; + uint32_t size; + uint8_t data[0]; +} __attribute__ ((packed)); + +struct bts_action_delay { + uint32_t msec; +} __attribute__ ((packed)); + +struct bts_action_serial { + uint32_t baud; + uint32_t flow_control; +} __attribute__ ((packed)); + +/* for identifying the change speed HCI VS + * command + */ +struct hci_command { + uint8_t prefix; + uint16_t opcode; + uint8_t plen; + uint32_t speed; +} __attribute__ ((packed)); + + +#endif /* ST_KIM_H */ -- cgit v0.10.2 From 1d065ab683f954d864a9366927d83bfc88b2f585 Mon Sep 17 00:00:00 2001 From: Pavan Savoy Date: Thu, 8 Apr 2010 13:16:55 -0500 Subject: Staging: sources for HCI LL PM protocol Texas Instruments BT, FM and GPS combo chips/drivers make use of a single TTY to communicate with the chip. This module constitutes the proprietary power management protocol from TI for the BT/FM/GPS combo chips Signed-off-by: Pavan Savoy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/ti-st/st_ll.c b/drivers/staging/ti-st/st_ll.c new file mode 100644 index 0000000..0685a10 --- /dev/null +++ b/drivers/staging/ti-st/st_ll.c @@ -0,0 +1,147 @@ +/* + * Shared Transport driver + * HCI-LL module responsible for TI proprietary HCI_LL protocol + * Copyright (C) 2009 Texas Instruments + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#define pr_fmt(fmt) "(stll) :" fmt +#include "st_ll.h" + +/**********************************************************************/ +/* internal functions */ +static void send_ll_cmd(struct st_data_s *st_data, + unsigned char cmd) +{ + + pr_info("%s: writing %x", __func__, cmd); + st_int_write(st_data, &cmd, 1); + return; +} + +static void ll_device_want_to_sleep(struct st_data_s *st_data) +{ + pr_info("%s", __func__); + /* sanity check */ + if (st_data->ll_state != ST_LL_AWAKE) + pr_err("ERR hcill: ST_LL_GO_TO_SLEEP_IND" + "in state %ld", st_data->ll_state); + + send_ll_cmd(st_data, LL_SLEEP_ACK); + /* update state */ + st_data->ll_state = ST_LL_ASLEEP; +} + +static void ll_device_want_to_wakeup(struct st_data_s *st_data) +{ + /* diff actions in diff states */ + switch (st_data->ll_state) { + case ST_LL_ASLEEP: + send_ll_cmd(st_data, LL_WAKE_UP_ACK); /* send wake_ack */ + break; + case ST_LL_ASLEEP_TO_AWAKE: + /* duplicate wake_ind */ + pr_err("duplicate wake_ind while waiting for Wake ack"); + break; + case ST_LL_AWAKE: + /* duplicate wake_ind */ + pr_err("duplicate wake_ind already AWAKE"); + break; + case ST_LL_AWAKE_TO_ASLEEP: + /* duplicate wake_ind */ + pr_err("duplicate wake_ind"); + break; + } + /* update state */ + st_data->ll_state = ST_LL_AWAKE; +} + +/**********************************************************************/ +/* functions invoked by ST Core */ + +/* called when ST Core wants to + * enable ST LL */ +void st_ll_enable(struct st_data_s *ll) +{ + ll->ll_state = ST_LL_AWAKE; +} + +/* called when ST Core /local module wants to + * disable ST LL */ +void st_ll_disable(struct st_data_s *ll) +{ + ll->ll_state = ST_LL_INVALID; +} + +/* called when ST Core wants to update the state */ +void st_ll_wakeup(struct st_data_s *ll) +{ + if (likely(ll->ll_state != ST_LL_AWAKE)) { + send_ll_cmd(ll, LL_WAKE_UP_IND); /* WAKE_IND */ + ll->ll_state = ST_LL_ASLEEP_TO_AWAKE; + } else { + /* don't send the duplicate wake_indication */ + pr_err(" Chip already AWAKE "); + } +} + +/* called when ST Core wants the state */ +unsigned long st_ll_getstate(struct st_data_s *ll) +{ + pr_info(" returning state %ld", ll->ll_state); + return ll->ll_state; +} + +/* called from ST Core, when a PM related packet arrives */ +unsigned long st_ll_sleep_state(struct st_data_s *st_data, + unsigned char cmd) +{ + switch (cmd) { + case LL_SLEEP_IND: /* sleep ind */ + pr_info("sleep indication recvd"); + ll_device_want_to_sleep(st_data); + break; + case LL_SLEEP_ACK: /* sleep ack */ + pr_err("sleep ack rcvd: host shouldn't"); + break; + case LL_WAKE_UP_IND: /* wake ind */ + pr_info("wake indication recvd"); + ll_device_want_to_wakeup(st_data); + break; + case LL_WAKE_UP_ACK: /* wake ack */ + pr_info("wake ack rcvd"); + st_data->ll_state = ST_LL_AWAKE; + break; + default: + pr_err(" unknown input/state "); + return ST_ERR_FAILURE; + } + return ST_SUCCESS; +} + +/* Called from ST CORE to initialize ST LL */ +long st_ll_init(struct st_data_s *ll) +{ + /* set state to invalid */ + ll->ll_state = ST_LL_INVALID; + return 0; +} + +/* Called from ST CORE to de-initialize ST LL */ +long st_ll_deinit(struct st_data_s *ll) +{ + return 0; +} diff --git a/drivers/staging/ti-st/st_ll.h b/drivers/staging/ti-st/st_ll.h new file mode 100644 index 0000000..77dfbf0 --- /dev/null +++ b/drivers/staging/ti-st/st_ll.h @@ -0,0 +1,62 @@ +/* + * Shared Transport Low Level (ST LL) + * + * Copyright (C) 2009 Texas Instruments + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef ST_LL_H +#define ST_LL_H + +#include +#include "st.h" +#include "st_core.h" + +/* ST LL receiver states */ +#define ST_W4_PACKET_TYPE 0 +#define ST_BT_W4_EVENT_HDR 1 +#define ST_BT_W4_ACL_HDR 2 +#define ST_BT_W4_SCO_HDR 3 +#define ST_BT_W4_DATA 4 +#define ST_FM_W4_EVENT_HDR 5 +#define ST_GPS_W4_EVENT_HDR 6 + +/* ST LL state machines */ +#define ST_LL_ASLEEP 0 +#define ST_LL_ASLEEP_TO_AWAKE 1 +#define ST_LL_AWAKE 2 +#define ST_LL_AWAKE_TO_ASLEEP 3 +#define ST_LL_INVALID 4 + +#define LL_SLEEP_IND 0x30 +#define LL_SLEEP_ACK 0x31 +#define LL_WAKE_UP_IND 0x32 +#define LL_WAKE_UP_ACK 0x33 + +/* initialize and de-init ST LL */ +long st_ll_init(struct st_data_s *); +long st_ll_deinit(struct st_data_s *); + +/* enable/disable ST LL along with KIM start/stop + * called by ST Core + */ +void st_ll_enable(struct st_data_s *); +void st_ll_disable(struct st_data_s *); + +unsigned long st_ll_getstate(struct st_data_s *); +unsigned long st_ll_sleep_state(struct st_data_s *, unsigned char); +void st_ll_wakeup(struct st_data_s *); +#endif /* ST_LL_H */ -- cgit v0.10.2 From 69f6e06db92dd7e2e87be58a4e2ab3a8104f8ce6 Mon Sep 17 00:00:00 2001 From: Pavan Savoy Date: Thu, 8 Apr 2010 13:16:56 -0500 Subject: Staging: sources for ST header file Texas Instruments BT, FM and GPS combo chips/drivers make use of a single TTY to communicate with the chip. This is the common header file for both the ST driver and the protocol drivers which intend to use ST as their mode of transport. Signed-off-by: Pavan Savoy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/ti-st/fm.h b/drivers/staging/ti-st/fm.h new file mode 100644 index 0000000..be41453 --- /dev/null +++ b/drivers/staging/ti-st/fm.h @@ -0,0 +1,13 @@ +struct fm_event_hdr { + unsigned char plen; +} __attribute__ ((packed)); + +#define FM_MAX_FRAME_SIZE 0xFF /* TODO: */ +#define FM_EVENT_HDR_SIZE 1 /* size of fm_event_hdr */ +#define ST_FM_CH8_PKT 0x8 + +/* gps stuff */ +struct gps_event_hdr { +unsigned char opcode; +unsigned short plen; +} __attribute__ ((packed)); diff --git a/drivers/staging/ti-st/st.h b/drivers/staging/ti-st/st.h new file mode 100644 index 0000000..e8fc97e --- /dev/null +++ b/drivers/staging/ti-st/st.h @@ -0,0 +1,90 @@ +/* + * Shared Transport Header file + * To be included by the protocol stack drivers for + * Texas Instruments BT,FM and GPS combo chip drivers + * + * Copyright (C) 2009 Texas Instruments + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef ST_H +#define ST_H + +#include +/* + * st.h + */ + +/* TODO: + * Move the following to tty.h upon acceptance + */ +#define N_TI_WL 20 /* Ldisc for TI's WL BT, FM, GPS combo chips */ + +/* some gpios have active high, others like fm have + * active low + */ +enum kim_gpio_state { + KIM_GPIO_INACTIVE, + KIM_GPIO_ACTIVE, +}; +/* + * the list of protocols on chip + */ +enum proto_type { + ST_BT, + ST_FM, + ST_GPS, + ST_MAX, +}; + +enum { + ST_ERR_FAILURE = -1, /* check struct */ + ST_SUCCESS, + ST_ERR_PENDING = -5, /* to call reg_complete_cb */ + ST_ERR_ALREADY, /* already registered */ + ST_ERR_INPROGRESS, + ST_ERR_NOPROTO, /* protocol not supported */ +}; + +/* per protocol structure + * for BT/FM and GPS + */ +struct st_proto_s { + enum proto_type type; +/* + * to be called by ST when data arrives + */ + long (*recv) (struct sk_buff *); +/* + * for future use, logic now to be in ST + */ + unsigned char (*match_packet) (const unsigned char *data); +/* + * subsequent registration return PENDING, + * signalled complete by this callback function + */ + void (*reg_complete_cb) (char data); +/* + * write function, sent in as NULL and to be returned to + * protocol drivers + */ + long (*write) (struct sk_buff *skb); +}; + +extern long st_register(struct st_proto_s *new_proto); +extern long st_unregister(enum proto_type type); + +#endif /* ST_H */ -- cgit v0.10.2 From dfcbb616e8dd98a0121fba4c9f9aa65f40f6f268 Mon Sep 17 00:00:00 2001 From: Pavan Savoy Date: Thu, 8 Apr 2010 13:16:58 -0500 Subject: Staging: add TODO and ABI to ti-st A TODO file and a ABI to list the things to be done, and user-space/kernel-space interface for this ldisc. Signed-off-by: Pavan Savoy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/ti-st/TODO b/drivers/staging/ti-st/TODO new file mode 100644 index 0000000..2c4fe58 --- /dev/null +++ b/drivers/staging/ti-st/TODO @@ -0,0 +1,19 @@ +TODO: + +1. A per-device/tty port context required to support multiple devices +on same platform. + +2. REMOVE the sysfs entry PID passing mechanism, since there should +be a better way to request user-space to install line discipline. + +3. Re-view/Re-work on the locking. + +4. Re-structure to make the ldisc driver more generic for chipsets which mux +multiple connectivity (BT, FM, GPS) upon 1 TTY port. + +5. Step up and maintain this driver to ensure that it continues +to work. Having the hardware for this is pretty much a +requirement. If this does not happen, the will be removed in +the 2.6.35 kernel release. + +Please send patches to Greg Kroah-Hartman . diff --git a/drivers/staging/ti-st/sysfs-uim b/drivers/staging/ti-st/sysfs-uim new file mode 100644 index 0000000..10311af --- /dev/null +++ b/drivers/staging/ti-st/sysfs-uim @@ -0,0 +1,16 @@ +What: /sys/class/rfkill/rfkill%d/ +Date: March 22 +Contact: Pavan Savoy +Description: + Creates the rfkill entries for Radio apps like + BT app, FM app or GPS app to toggle corresponding + cores of the chip + +What: /dev/rfkill +Date: March 22 +Contact: Pavan Savoy +Description: + A daemon which maintains the ldisc installation and + uninstallation would be ppolling on this device and listening + on events which would suggest either to install or un-install + line discipline -- cgit v0.10.2 From 70ddf80ac4a32fa1d5e3faba52385a9ab691b16b Mon Sep 17 00:00:00 2001 From: Pavan Savoy Date: Thu, 8 Apr 2010 13:16:59 -0500 Subject: Staging: bluetooth: BT driver using ST for TI combo devices This is BlueZ driver making use of Shared Transport line discipline to communicate with the chip. Signed-off-by: Pavan Savoy Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/ti-st/bt_drv.c b/drivers/staging/ti-st/bt_drv.c new file mode 100644 index 0000000..d8420b5 --- /dev/null +++ b/drivers/staging/ti-st/bt_drv.c @@ -0,0 +1,502 @@ +/* + * Texas Instrument's Bluetooth Driver For Shared Transport. + * + * Bluetooth Driver acts as interface between HCI CORE and + * TI Shared Transport Layer. + * + * Copyright (C) 2009 Texas Instruments + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include + +#include "st.h" +#include "bt_drv.h" + +/* Define this macro to get debug msg */ +#undef DEBUG + +#ifdef DEBUG +#define BT_DRV_DBG(fmt, arg...) printk(KERN_INFO "(btdrv):"fmt"\n" , ## arg) +#define BTDRV_API_START() printk(KERN_INFO "(btdrv): %s Start\n", \ + __func__) +#define BTDRV_API_EXIT(errno) printk(KERN_INFO "(btdrv): %s Exit(%d)\n", \ + __func__, errno) +#else +#define BT_DRV_DBG(fmt, arg...) +#define BTDRV_API_START() +#define BTDRV_API_EXIT(errno) +#endif + +#define BT_DRV_ERR(fmt, arg...) printk(KERN_ERR "(btdrv):"fmt"\n" , ## arg) + +static int reset; +static struct hci_st *hst; + +/* Increments HCI counters based on pocket ID (cmd,acl,sco) */ +static inline void hci_st_tx_complete(struct hci_st *hst, int pkt_type) +{ + struct hci_dev *hdev; + + BTDRV_API_START(); + + hdev = hst->hdev; + + /* Update HCI stat counters */ + switch (pkt_type) { + case HCI_COMMAND_PKT: + hdev->stat.cmd_tx++; + break; + + case HCI_ACLDATA_PKT: + hdev->stat.acl_tx++; + break; + + case HCI_SCODATA_PKT: + hdev->stat.cmd_tx++; + break; + } + + BTDRV_API_EXIT(0); +} + +/* ------- Interfaces to Shared Transport ------ */ + +/* Called by ST layer to indicate protocol registration completion + * status.hci_st_open() function will wait for signal from this + * API when st_register() function returns ST_PENDING. + */ +static void hci_st_registration_completion_cb(char data) +{ + BTDRV_API_START(); + + /* hci_st_open() function needs value of 'data' to know + * the registration status(success/fail),So have a back + * up of it. + */ + hst->streg_cbdata = data; + + /* Got a feedback from ST for BT driver registration + * request.Wackup hci_st_open() function to continue + * it's open operation. + */ + complete(&hst->wait_for_btdrv_reg_completion); + + BTDRV_API_EXIT(0); +} + +/* Called by Shared Transport layer when receive data is + * available */ +static long hci_st_receive(struct sk_buff *skb) +{ + int err; + int len; + + BTDRV_API_START(); + + err = 0; + len = 0; + + if (skb == NULL) { + BT_DRV_ERR("Invalid SKB received from ST"); + BTDRV_API_EXIT(-EFAULT); + return -EFAULT; + } + if (!hst) { + kfree_skb(skb); + BT_DRV_ERR("Invalid hci_st memory,freeing SKB"); + BTDRV_API_EXIT(-EFAULT); + return -EFAULT; + } + if (!test_bit(BT_DRV_RUNNING, &hst->flags)) { + kfree_skb(skb); + BT_DRV_ERR("Device is not running,freeing SKB"); + BTDRV_API_EXIT(-EINVAL); + return -EINVAL; + } + + len = skb->len; + skb->dev = (struct net_device *)hst->hdev; + + /* Forward skb to HCI CORE layer */ + err = hci_recv_frame(skb); + if (err) { + kfree_skb(skb); + BT_DRV_ERR("Unable to push skb to HCI CORE(%d),freeing SKB", + err); + BTDRV_API_EXIT(err); + return err; + } + hst->hdev->stat.byte_rx += len; + + BTDRV_API_EXIT(0); + return 0; +} + +/* ------- Interfaces to HCI layer ------ */ + +/* Called from HCI core to initialize the device */ +static int hci_st_open(struct hci_dev *hdev) +{ + static struct st_proto_s hci_st_proto; + unsigned long timeleft; + int err; + + BTDRV_API_START(); + + err = 0; + + BT_DRV_DBG("%s %p", hdev->name, hdev); + + /* Already registered with ST ? */ + if (test_bit(BT_ST_REGISTERED, &hst->flags)) { + BT_DRV_ERR("Registered with ST already,open called again?"); + BTDRV_API_EXIT(0); + return 0; + } + + /* Populate BT driver info required by ST */ + memset(&hci_st_proto, 0, sizeof(hci_st_proto)); + + /* BT driver ID */ + hci_st_proto.type = ST_BT; + + /* Receive function which called from ST */ + hci_st_proto.recv = hci_st_receive; + + /* Packet match function may used in future */ + hci_st_proto.match_packet = NULL; + + /* Callback to be called when registration is pending */ + hci_st_proto.reg_complete_cb = hci_st_registration_completion_cb; + + /* This is write function pointer of ST. BT driver will make use of this + * for sending any packets to chip. ST will assign and give to us, so + * make it as NULL */ + hci_st_proto.write = NULL; + + /* Register with ST layer */ + err = st_register(&hci_st_proto); + if (err == ST_ERR_PENDING) { + /* Prepare wait-for-completion handler data structures. + * Needed to syncronize this and st_registration_completion_cb() + * functions. + */ + init_completion(&hst->wait_for_btdrv_reg_completion); + + /* Reset ST registration callback status flag , this value + * will be updated in hci_st_registration_completion_cb() + * function whenever it called from ST driver. + */ + hst->streg_cbdata = -EINPROGRESS; + + /* ST is busy with other protocol registration(may be busy with + * firmware download).So,Wait till the registration callback + * (passed as a argument to st_register() function) getting + * called from ST. + */ + BT_DRV_DBG(" %s waiting for reg completion signal from ST", + __func__); + + timeleft = + wait_for_completion_timeout + (&hst->wait_for_btdrv_reg_completion, + msecs_to_jiffies(BT_REGISTER_TIMEOUT)); + if (!timeleft) { + BT_DRV_ERR("Timeout(%ld sec),didn't get reg" + "completion signal from ST", + BT_REGISTER_TIMEOUT / 1000); + BTDRV_API_EXIT(-ETIMEDOUT); + return -ETIMEDOUT; + } + + /* Is ST registration callback called with ERROR value? */ + if (hst->streg_cbdata != 0) { + BT_DRV_ERR("ST reg completion CB called with invalid" + "status %d", hst->streg_cbdata); + BTDRV_API_EXIT(-EAGAIN); + return -EAGAIN; + } + err = 0; + } else if (err == ST_ERR_FAILURE) { + BT_DRV_ERR("st_register failed %d", err); + BTDRV_API_EXIT(-EAGAIN); + return -EAGAIN; + } + + /* Do we have proper ST write function? */ + if (hci_st_proto.write != NULL) { + /* We need this pointer for sending any Bluetooth pkts */ + hst->st_write = hci_st_proto.write; + } else { + BT_DRV_ERR("failed to get ST write func pointer"); + + /* Undo registration with ST */ + err = st_unregister(ST_BT); + if (err < 0) + BT_DRV_ERR("st_unregister failed %d", err); + + hst->st_write = NULL; + BTDRV_API_EXIT(-EAGAIN); + return -EAGAIN; + } + + /* Registration with ST layer is completed successfully, + * now chip is ready to accept commands from HCI CORE. + * Mark HCI Device flag as RUNNING + */ + set_bit(HCI_RUNNING, &hdev->flags); + + /* Registration with ST successful */ + set_bit(BT_ST_REGISTERED, &hst->flags); + + BTDRV_API_EXIT(err); + return err; +} + +/* Close device */ +static int hci_st_close(struct hci_dev *hdev) +{ + int err; + + BTDRV_API_START(); + + err = 0; + + /* Unregister from ST layer */ + if (test_and_clear_bit(BT_ST_REGISTERED, &hst->flags)) { + err = st_unregister(ST_BT); + if (err != ST_SUCCESS) { + BT_DRV_ERR("st_unregister failed %d", err); + BTDRV_API_EXIT(-EBUSY); + return -EBUSY; + } + } + + hst->st_write = NULL; + + /* ST layer would have moved chip to inactive state. + * So,clear HCI device RUNNING flag. + */ + if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags)) { + BTDRV_API_EXIT(0); + return 0; + } + + BTDRV_API_EXIT(err); + return err; +} + +/* Called from HCI CORE , Sends frames to Shared Transport */ +static int hci_st_send_frame(struct sk_buff *skb) +{ + struct hci_dev *hdev; + struct hci_st *hst; + long len; + + BTDRV_API_START(); + + if (skb == NULL) { + BT_DRV_ERR("Invalid skb received from HCI CORE"); + BTDRV_API_EXIT(-ENOMEM); + return -ENOMEM; + } + hdev = (struct hci_dev *)skb->dev; + if (!hdev) { + BT_DRV_ERR("SKB received for invalid HCI Device (hdev=NULL)"); + BTDRV_API_EXIT(-ENODEV); + return -ENODEV; + } + if (!test_bit(HCI_RUNNING, &hdev->flags)) { + BT_DRV_ERR("Device is not running"); + BTDRV_API_EXIT(-EBUSY); + return -EBUSY; + } + + hst = (struct hci_st *)hdev->driver_data; + + /* Prepend skb with frame type */ + memcpy(skb_push(skb, 1), &bt_cb(skb)->pkt_type, 1); + + BT_DRV_DBG(" %s: type %d len %d", hdev->name, bt_cb(skb)->pkt_type, + skb->len); + + /* Insert skb to shared transport layer's transmit queue. + * Freeing skb memory is taken care in shared transport layer, + * so don't free skb memory here. + */ + if (!hst->st_write) { + kfree_skb(skb); + BT_DRV_ERR(" Can't write to ST, st_write null?"); + BTDRV_API_EXIT(-EAGAIN); + return -EAGAIN; + } + len = hst->st_write(skb); + if (len < 0) { + /* Something went wrong in st write , free skb memory */ + kfree_skb(skb); + BT_DRV_ERR(" ST write failed (%ld)", len); + BTDRV_API_EXIT(-EAGAIN); + return -EAGAIN; + } + + /* ST accepted our skb. So, Go ahead and do rest */ + hdev->stat.byte_tx += len; + hci_st_tx_complete(hst, bt_cb(skb)->pkt_type); + + BTDRV_API_EXIT(0); + return 0; +} + +static void hci_st_destruct(struct hci_dev *hdev) +{ + BTDRV_API_START(); + + if (!hdev) { + BT_DRV_ERR("Destruct called with invalid HCI Device" + "(hdev=NULL)"); + BTDRV_API_EXIT(0); + return; + } + + BT_DRV_DBG("%s", hdev->name); + + /* free hci_st memory */ + if (hdev->driver_data != NULL) + kfree(hdev->driver_data); + + BTDRV_API_EXIT(0); + return; +} + +/* Creates new HCI device */ +static int hci_st_register_dev(struct hci_st *hst) +{ + struct hci_dev *hdev; + + BTDRV_API_START(); + + /* Initialize and register HCI device */ + hdev = hci_alloc_dev(); + if (!hdev) { + BT_DRV_ERR("Can't allocate HCI device"); + BTDRV_API_EXIT(-ENOMEM); + return -ENOMEM; + } + BT_DRV_DBG(" HCI device allocated. hdev= %p", hdev); + + hst->hdev = hdev; + hdev->bus = HCI_UART; + hdev->driver_data = hst; + hdev->open = hci_st_open; + hdev->close = hci_st_close; + hdev->flush = NULL; + hdev->send = hci_st_send_frame; + hdev->destruct = hci_st_destruct; + hdev->owner = THIS_MODULE; + + if (reset) + set_bit(HCI_QUIRK_NO_RESET, &hdev->quirks); + + if (hci_register_dev(hdev) < 0) { + BT_DRV_ERR("Can't register HCI device"); + hci_free_dev(hdev); + BTDRV_API_EXIT(-ENODEV); + return -ENODEV; + } + + BT_DRV_DBG(" HCI device registered. hdev= %p", hdev); + BTDRV_API_EXIT(0); + return 0; +} + +/* ------- Module Init interface ------ */ + +static int __init bt_drv_init(void) +{ + int err; + + BTDRV_API_START(); + + err = 0; + + BT_DRV_DBG(" Bluetooth Driver Version %s", VERSION); + + /* Allocate local resource memory */ + hst = kzalloc(sizeof(struct hci_st), GFP_KERNEL); + if (!hst) { + BT_DRV_ERR("Can't allocate control structure"); + BTDRV_API_EXIT(-ENFILE); + return -ENFILE; + } + + /* Expose "hciX" device to user space */ + err = hci_st_register_dev(hst); + if (err) { + /* Release local resource memory */ + kfree(hst); + + BT_DRV_ERR("Unable to expose hci0 device(%d)", err); + BTDRV_API_EXIT(err); + return err; + } + set_bit(BT_DRV_RUNNING, &hst->flags); + + BTDRV_API_EXIT(err); + return err; +} + +/* ------- Module Exit interface ------ */ + +static void __exit bt_drv_exit(void) +{ + BTDRV_API_START(); + + /* Deallocate local resource's memory */ + if (hst) { + struct hci_dev *hdev = hst->hdev; + + if (hdev == NULL) { + BT_DRV_ERR("Invalid hdev memory"); + kfree(hst); + } else { + hci_st_close(hdev); + if (test_and_clear_bit(BT_DRV_RUNNING, &hst->flags)) { + /* Remove HCI device (hciX) created + * in module init. + */ + hci_unregister_dev(hdev); + + /* Free HCI device memory */ + hci_free_dev(hdev); + } + } + } + BTDRV_API_EXIT(0); +} + +module_init(bt_drv_init); +module_exit(bt_drv_exit); + +/* ------ Module Info ------ */ + +module_param(reset, bool, 0644); +MODULE_PARM_DESC(reset, "Send HCI reset command on initialization"); +MODULE_AUTHOR("Raja Mani "); +MODULE_DESCRIPTION("Bluetooth Driver for TI Shared Transport" VERSION); +MODULE_VERSION(VERSION); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/ti-st/bt_drv.h b/drivers/staging/ti-st/bt_drv.h new file mode 100644 index 0000000..a0beebe --- /dev/null +++ b/drivers/staging/ti-st/bt_drv.h @@ -0,0 +1,61 @@ +/* + * Texas Instrument's Bluetooth Driver For Shared Transport. + * + * Bluetooth Driver acts as interface between HCI CORE and + * TI Shared Transport Layer. + * + * Copyright (C) 2009 Texas Instruments + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef _BT_DRV_H +#define _BT_DRV_H + +/* Bluetooth Driver Version */ +#define VERSION "1.0" + +/* Defines number of seconds to wait for reg completion + * callback getting called from ST (in case,registration + * with ST returns PENDING status) + */ +#define BT_REGISTER_TIMEOUT msecs_to_jiffies(6000) /* 6 sec */ + +/* BT driver's local status */ +#define BT_DRV_RUNNING 0 +#define BT_ST_REGISTERED 1 + +/* BT driver operation structure */ +struct hci_st { + + /* hci device pointer which binds to bt driver */ + struct hci_dev *hdev; + + /* used locally,to maintain various BT driver status */ + unsigned long flags; + + /* to hold ST registration callback status */ + char streg_cbdata; + + /* write function pointer of ST driver */ + long (*st_write) (struct sk_buff *); + + /* Wait on comepletion handler needed to synchronize + * hci_st_open() and hci_st_registration_completion_cb() + * functions.*/ + struct completion wait_for_btdrv_reg_completion; +}; + +#endif -- cgit v0.10.2 From 2f6aee5646f4f0ac2a83b0e95eff055364142a24 Mon Sep 17 00:00:00 2001 From: Pavan Savoy Date: Thu, 8 Apr 2010 13:16:57 -0500 Subject: Staging: Kconfig, Makefile for TI's ST ldisc This change adds the Kconfig and Make file for TI's ST line discipline driver and the BlueZ driver for BT core of the TI BT/FM/GPS combo chip. Signed-off-by: Pavan Savoy diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 597e109..d97e46e 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -141,5 +141,7 @@ source "drivers/staging/crystalhd/Kconfig" source "drivers/staging/cxt1e1/Kconfig" +source "drivers/staging/ti-st/Kconfig" + endif # !STAGING_EXCLUDE_BUILD endif # STAGING diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 6edd9b0..23e353a 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -52,3 +52,4 @@ obj-$(CONFIG_FB_SM7XX) += sm7xx/ obj-$(CONFIG_DT3155) += dt3155/ obj-$(CONFIG_CRYSTALHD) += crystalhd/ obj-$(CONFIG_CXT1E1) += cxt1e1/ +obj-$(CONFIG_TI_ST) += ti-st/ diff --git a/drivers/staging/ti-st/Kconfig b/drivers/staging/ti-st/Kconfig new file mode 100644 index 0000000..120e8db --- /dev/null +++ b/drivers/staging/ti-st/Kconfig @@ -0,0 +1,24 @@ +# +# TI's shared transport line discipline and the protocol +# drivers (BT, FM and GPS) +# +menu "Texas Instruments shared transport line discipline" +config TI_ST + tristate "shared transport core driver" + select FW_LOADER + help + This enables the shared transport core driver for TI + BT / FM and GPS combo chips. This enables protocol drivers + to register themselves with core and send data, the responses + are returned to relevant protocol drivers based on their + packet types. + +config ST_BT + tristate "BlueZ bluetooth driver for ST" + depends on BT + select TI_ST + help + This enables the Bluetooth driver for TI BT/FM/GPS combo devices. + This makes use of shared transport line discipline core driver to + communicate with the BT core of the combo chip. +endmenu diff --git a/drivers/staging/ti-st/Makefile b/drivers/staging/ti-st/Makefile new file mode 100644 index 0000000..0167d1d --- /dev/null +++ b/drivers/staging/ti-st/Makefile @@ -0,0 +1,7 @@ +# +# Makefile for TI's shared transport line discipline +# and its protocol drivers (BT, FM, GPS) +# +obj-$(CONFIG_TI_ST) += st_drv.o +st_drv-objs := st_core.o st_kim.o st_ll.o +obj-$(CONFIG_ST_BT) += bt_drv.o -- cgit v0.10.2 From 26e5b65b0794a1970ab09b65ef39beb9058ec952 Mon Sep 17 00:00:00 2001 From: Andres More Date: Tue, 13 Apr 2010 19:43:07 -0300 Subject: Staging: vt6656: struct usb_driver cleanup Code cleanup following other USB drivers: - Renamed driver struct and callbacks to vt6656_* - Added __init/__exit like directives - Resolved checkpatch.pl findings on those lines Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index f15e7b4..ea6c94d 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -26,7 +26,7 @@ * * Functions: * - * vntwusb_found1 - module initial (insmod) driver entry + * vt6656_probe - module initial (insmod) driver entry * device_remove1 - module remove entry * device_open - allocate dma/descripter resource & initial mac/bbp function * device_xmit - asynchrous data tx function @@ -222,15 +222,11 @@ DEVICE_PARAM(b80211hEnable, "802.11h mode"); // Static vars definitions // - - -static struct usb_device_id vntwusb_table[] = { +static struct usb_device_id vt6656_table[] __devinitdata = { {USB_DEVICE(VNT_USB_VENDOR_ID, VNT_USB_PRODUCT_ID)}, {} }; - - // Frequency list (map channels to frequencies) /* static const long frequency_list[] = { @@ -250,15 +246,17 @@ static const long frequency_list[] = { static const struct iw_handler_def iwctl_handler_def; */ +/*--------------------- Static Functions --------------------------*/ +static int vt6656_probe(struct usb_interface *intf, + const struct usb_device_id *id); +static void vt6656_disconnect(struct usb_interface *intf); -/*--------------------- Static Functions --------------------------*/ -static int vntwusb_found1(struct usb_interface *intf, const struct usb_device_id *id); -static void vntwusb_disconnect(struct usb_interface *intf); #ifdef CONFIG_PM /* Minimal support for suspend and resume */ -static int vntwusb_suspend(struct usb_interface *intf, pm_message_t message); -static int vntwusb_resume(struct usb_interface *intf); -#endif +static int vt6656_suspend(struct usb_interface *intf, pm_message_t message); +static int vt6656_resume(struct usb_interface *intf); +#endif /* CONFIG_PM */ + static struct net_device_stats *device_get_stats(struct net_device *dev); static int device_open(struct net_device *dev); static int device_xmit(struct sk_buff *skb, struct net_device *dev); @@ -712,7 +710,8 @@ static BOOL device_release_WPADEV(PSDevice pDevice) } #ifdef CONFIG_PM /* Minimal support for suspend and resume */ -static int vntwusb_suspend(struct usb_interface *intf, pm_message_t message) + +static int vt6656_suspend(struct usb_interface *intf, pm_message_t message) { PSDevice pDevice = usb_get_intfdata(intf); struct net_device *dev = pDevice->dev; @@ -727,7 +726,7 @@ if(dev != NULL) { return 0; } -static int vntwusb_resume(struct usb_interface *intf) +static int vt6656_resume(struct usb_interface *intf) { PSDevice pDevice = usb_get_intfdata(intf); struct net_device *dev = pDevice->dev; @@ -742,8 +741,8 @@ static int vntwusb_resume(struct usb_interface *intf) } return 0; } -#endif +#endif /* CONFIG_PM */ static const struct net_device_ops device_netdev_ops = { .ndo_open = device_open, @@ -755,8 +754,8 @@ static const struct net_device_ops device_netdev_ops = { }; -static int -vntwusb_found1(struct usb_interface *intf, const struct usb_device_id *id) +static int __devinit +vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) { BYTE fake_mac[U_ETHER_ADDR_LEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x01};//fake MAC address struct usb_device *udev = interface_to_usbdev(intf); @@ -1285,8 +1284,7 @@ device_release_WPADEV(pDevice); } -static void vntwusb_disconnect(struct usb_interface *intf) - +static void __devexit vt6656_disconnect(struct usb_interface *intf) { PSDevice pDevice = usb_get_intfdata(intf); @@ -2157,35 +2155,29 @@ static int ethtool_ioctl(struct net_device *dev, void *useraddr) /*------------------------------------------------------------------*/ +MODULE_DEVICE_TABLE(usb, vt6656_table); -MODULE_DEVICE_TABLE(usb, vntwusb_table); - - -static struct usb_driver vntwusb_driver = { - .name = DEVICE_NAME, - .probe = vntwusb_found1, - .disconnect = vntwusb_disconnect, - .id_table = vntwusb_table, - -//2008-0920-01by MikeLiu -//for supporting S3 & S4 function +static struct usb_driver vt6656_driver = { + .name = DEVICE_NAME, + .probe = vt6656_probe, + .disconnect = vt6656_disconnect, + .id_table = vt6656_table, #ifdef CONFIG_PM - .suspend = vntwusb_suspend, - .resume = vntwusb_resume, -#endif + .suspend = vt6656_suspend, + .resume = vt6656_resume, +#endif /* CONFIG_PM */ }; -static int __init vntwusb_init_module(void) +static int __init vt6656_init_module(void) { printk(KERN_NOTICE DEVICE_FULL_DRV_NAM " " DEVICE_VERSION); - return usb_register(&vntwusb_driver); + return usb_register(&vt6656_driver); } -static void __exit vntwusb_cleanup_module(void) +static void __exit vt6656_cleanup_module(void) { - usb_deregister(&vntwusb_driver); + usb_deregister(&vt6656_driver); } -module_init(vntwusb_init_module); -module_exit(vntwusb_cleanup_module); - +module_init(vt6656_init_module); +module_exit(vt6656_cleanup_module); -- cgit v0.10.2 From 9a0e756c5280750c23bd44d2b855a1f5442ea7b4 Mon Sep 17 00:00:00 2001 From: Andres More Date: Tue, 13 Apr 2010 21:54:48 -0300 Subject: Staging: vt6656: incorporated ETH_ALEN macro instead of custom one Replaced custom U_ETHER_ADDR_LEN by ETH_ALEN from . Resolved checkpatch findings on the changed lines, mostly indentation. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/aes_ccmp.c b/drivers/staging/vt6656/aes_ccmp.c index 401a7d2..a1beaa9 100644 --- a/drivers/staging/vt6656/aes_ccmp.c +++ b/drivers/staging/vt6656/aes_ccmp.c @@ -277,7 +277,7 @@ int ii,jj,kk; pbyPayload = pbyIV + 8; //IV-length abyNonce[0] = 0x00; //now is 0, if Qos here will be priority - memcpy(&(abyNonce[1]), pMACHeader->abyAddr2, U_ETHER_ADDR_LEN); + memcpy(&(abyNonce[1]), pMACHeader->abyAddr2, ETH_ALEN); abyNonce[7] = pbyIV[7]; abyNonce[8] = pbyIV[6]; abyNonce[9] = pbyIV[5]; @@ -299,16 +299,17 @@ int ii,jj,kk; byTmp = (BYTE)(pMACHeader->wFrameCtl >> 8); byTmp &= 0x87; MIC_HDR1[3] = byTmp | 0x40; - memcpy(&(MIC_HDR1[4]), pMACHeader->abyAddr1, U_ETHER_ADDR_LEN); - memcpy(&(MIC_HDR1[10]), pMACHeader->abyAddr2, U_ETHER_ADDR_LEN); + memcpy(&(MIC_HDR1[4]), pMACHeader->abyAddr1, ETH_ALEN); + memcpy(&(MIC_HDR1[10]), pMACHeader->abyAddr2, ETH_ALEN); //MIC_HDR2 - memcpy(&(MIC_HDR2[0]), pMACHeader->abyAddr3, U_ETHER_ADDR_LEN); + memcpy(&(MIC_HDR2[0]), pMACHeader->abyAddr3, ETH_ALEN); byTmp = (BYTE)(pMACHeader->wSeqCtl & 0xff); MIC_HDR2[6] = byTmp & 0x0f; MIC_HDR2[7] = 0; + if ( bA4 ) { - memcpy(&(MIC_HDR2[8]), pMACHeader->abyAddr4, U_ETHER_ADDR_LEN); + memcpy(&(MIC_HDR2[8]), pMACHeader->abyAddr4, ETH_ALEN); } else { MIC_HDR2[8] = 0x00; MIC_HDR2[9] = 0x00; diff --git a/drivers/staging/vt6656/desc.h b/drivers/staging/vt6656/desc.h index f10530f..c87ea6b 100644 --- a/drivers/staging/vt6656/desc.h +++ b/drivers/staging/vt6656/desc.h @@ -206,8 +206,8 @@ typedef const SRrvTime_atim *PCSRrvTime_atim; typedef struct tagSRTSData { WORD wFrameControl; WORD wDurationID; - BYTE abyRA[U_ETHER_ADDR_LEN]; - BYTE abyTA[U_ETHER_ADDR_LEN]; + BYTE abyRA[ETH_ALEN]; + BYTE abyTA[ETH_ALEN]; }__attribute__ ((__packed__)) SRTSData, *PSRTSData; typedef const SRTSData *PCSRTSData; @@ -282,7 +282,7 @@ typedef const SRTS_a_FB *PCSRTS_a_FB; typedef struct tagSCTSData { WORD wFrameControl; WORD wDurationID; - BYTE abyRA[U_ETHER_ADDR_LEN]; + BYTE abyRA[ETH_ALEN]; WORD wReserved; }__attribute__ ((__packed__)) SCTSData, *PSCTSData; diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 8b541d1..29bb597 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -107,7 +107,7 @@ #define MAC_MAX_CONTEXT_REG (256+128) #define MAX_MULTICAST_ADDRESS_NUM 32 -#define MULTICAST_ADDRESS_LIST_SIZE (MAX_MULTICAST_ADDRESS_NUM * U_ETHER_ADDR_LEN) +#define MULTICAST_ADDRESS_LIST_SIZE (MAX_MULTICAST_ADDRESS_NUM * ETH_ALEN) //#define OP_MODE_INFRASTRUCTURE 0 @@ -369,7 +369,7 @@ typedef struct tagSQuietControl { // The receive duplicate detection cache entry typedef struct tagSCacheEntry{ WORD wFmSequence; - BYTE abyAddr2[U_ETHER_ADDR_LEN]; + BYTE abyAddr2[ETH_ALEN]; WORD wFrameCtl; } SCacheEntry, *PSCacheEntry; @@ -387,7 +387,7 @@ typedef struct tagSDeFragControlBlock { WORD wSequence; WORD wFragNum; - BYTE abyAddr2[U_ETHER_ADDR_LEN]; + BYTE abyAddr2[ETH_ALEN]; UINT uLifetime; struct sk_buff* skb; PBYTE pbyRxBuffer; @@ -547,10 +547,10 @@ typedef struct __device_info { BYTE byOriginalZonetype; BOOL bLinkPass; // link status: OK or fail - BYTE abyCurrentNetAddr[U_ETHER_ADDR_LEN]; - BYTE abyPermanentNetAddr[U_ETHER_ADDR_LEN]; + BYTE abyCurrentNetAddr[ETH_ALEN]; + BYTE abyPermanentNetAddr[ETH_ALEN]; // SW network address -// BYTE abySoftwareNetAddr[U_ETHER_ADDR_LEN]; + /* u8 abySoftwareNetAddr[ETH_ALEN]; */ BOOL bExistSWNetAddr; // Adapter statistics @@ -671,8 +671,8 @@ typedef struct __device_info { CARD_OP_MODE eOPMode; BOOL bBSSIDFilter; WORD wMaxTransmitMSDULifetime; - BYTE abyBSSID[U_ETHER_ADDR_LEN]; - BYTE abyDesireBSSID[U_ETHER_ADDR_LEN]; + BYTE abyBSSID[ETH_ALEN]; + BYTE abyDesireBSSID[ETH_ALEN]; WORD wCTSDuration; // update while speed change WORD wACKDuration; // update while speed change WORD wRTSTransmitLen; // update while speed change @@ -826,9 +826,9 @@ typedef struct __device_info { SEthernetHeader sTxEthHeader; SEthernetHeader sRxEthHeader; - BYTE abyBroadcastAddr[U_ETHER_ADDR_LEN]; - BYTE abySNAP_RFC1042[U_ETHER_ADDR_LEN]; - BYTE abySNAP_Bridgetunnel[U_ETHER_ADDR_LEN]; + BYTE abyBroadcastAddr[ETH_ALEN]; + BYTE abySNAP_RFC1042[ETH_ALEN]; + BYTE abySNAP_Bridgetunnel[ETH_ALEN]; // Pre-Authentication & PMK cache SPMKID gsPMKID; diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 835c6d6..9e833bb 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -234,11 +234,11 @@ s_vProcessRxMACHeader ( } } - cbHeaderSize -= (U_ETHER_ADDR_LEN * 2); + cbHeaderSize -= (ETH_ALEN * 2); pbyRxBuffer = (PBYTE) (pbyRxBufferAddr + cbHeaderSize); - for(ii=0;iisRxEthHeader.abyDstAddr[ii]; - for(ii=0;iisRxEthHeader.abySrcAddr[ii]; *pcbHeadSize = cbHeaderSize; @@ -267,43 +267,48 @@ s_vGetDASA ( OUT PSEthernetHeader psEthHeader ) { - UINT cbHeaderSize = 0; - PS802_11Header pMACHeader; - int ii; - - pMACHeader = (PS802_11Header) (pbyRxBufferAddr + cbHeaderSize); - - if ((pMACHeader->wFrameCtl & FC_TODS) == 0) { - if (pMACHeader->wFrameCtl & FC_FROMDS) { - for(ii=0;iiabyDstAddr[ii] = pMACHeader->abyAddr1[ii]; - psEthHeader->abySrcAddr[ii] = pMACHeader->abyAddr3[ii]; - } - } - else { - // IBSS mode - for(ii=0;iiabyDstAddr[ii] = pMACHeader->abyAddr1[ii]; - psEthHeader->abySrcAddr[ii] = pMACHeader->abyAddr2[ii]; - } - } - } - else { - // Is AP mode.. - if (pMACHeader->wFrameCtl & FC_FROMDS) { - for(ii=0;iiabyDstAddr[ii] = pMACHeader->abyAddr3[ii]; - psEthHeader->abySrcAddr[ii] = pMACHeader->abyAddr4[ii]; - cbHeaderSize += 6; - } - } - else { - for(ii=0;iiabyDstAddr[ii] = pMACHeader->abyAddr3[ii]; - psEthHeader->abySrcAddr[ii] = pMACHeader->abyAddr2[ii]; - } - } - }; + UINT cbHeaderSize = 0; + PS802_11Header pMACHeader; + int ii; + + pMACHeader = (PS802_11Header) (pbyRxBufferAddr + cbHeaderSize); + + if ((pMACHeader->wFrameCtl & FC_TODS) == 0) { + if (pMACHeader->wFrameCtl & FC_FROMDS) { + for (ii = 0; ii < ETH_ALEN; ii++) { + psEthHeader->abyDstAddr[ii] = + pMACHeader->abyAddr1[ii]; + psEthHeader->abySrcAddr[ii] = + pMACHeader->abyAddr3[ii]; + } + } else { + /* IBSS mode */ + for (ii = 0; ii < ETH_ALEN; ii++) { + psEthHeader->abyDstAddr[ii] = + pMACHeader->abyAddr1[ii]; + psEthHeader->abySrcAddr[ii] = + pMACHeader->abyAddr2[ii]; + } + } + } else { + /* Is AP mode.. */ + if (pMACHeader->wFrameCtl & FC_FROMDS) { + for (ii = 0; ii < ETH_ALEN; ii++) { + psEthHeader->abyDstAddr[ii] = + pMACHeader->abyAddr3[ii]; + psEthHeader->abySrcAddr[ii] = + pMACHeader->abyAddr4[ii]; + cbHeaderSize += 6; + } + } else { + for (ii = 0; ii < ETH_ALEN; ii++) { + psEthHeader->abyDstAddr[ii] = + pMACHeader->abyAddr3[ii]; + psEthHeader->abySrcAddr[ii] = + pMACHeader->abyAddr2[ii]; + } + } + }; *pcbHeaderSize = cbHeaderSize; } diff --git a/drivers/staging/vt6656/ioctl.c b/drivers/staging/vt6656/ioctl.c index 6f33005..d7a78f2 100644 --- a/drivers/staging/vt6656/ioctl.c +++ b/drivers/staging/vt6656/ioctl.c @@ -480,7 +480,9 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { }; if (sValue.dwValue == 1) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "up wpadev\n"); - memcpy(pDevice->wpadev->dev_addr, pDevice->dev->dev_addr, U_ETHER_ADDR_LEN); + memcpy(pDevice->wpadev->dev_addr, + pDevice->dev->dev_addr, + ETH_ALEN); pDevice->bWPADEVUp = TRUE; } else { diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 13fc69a..0cd2751 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -312,7 +312,7 @@ BOOL KeybSetKey ( } } if (j < (MAX_KEY_TABLE-1)) { - memcpy(pTable->KeyTable[j].abyBSSID,pbyBSSID,U_ETHER_ADDR_LEN); + memcpy(pTable->KeyTable[j].abyBSSID, pbyBSSID, ETH_ALEN); pTable->KeyTable[j].bInUse = TRUE; if ((dwKeyIndex & PAIRWISE_KEY) != 0) { // Pairwise key @@ -700,7 +700,7 @@ BOOL KeybSetDefaultKey ( } pTable->KeyTable[MAX_KEY_TABLE-1].bInUse = TRUE; - for(ii=0;iiKeyTable[MAX_KEY_TABLE-1].abyBSSID[ii] = 0xFF; // Group key diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index b15a64c..da8dfe0 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -71,7 +71,7 @@ typedef struct tagSKeyItem typedef struct tagSKeyTable { - BYTE abyBSSID[U_ETHER_ADDR_LEN]; //6 + BYTE abyBSSID[ETH_ALEN]; /* 6 */ BYTE byReserved0[2]; //8 SKeyItem PairwiseKey; SKeyItem GroupKey[MAX_GROUP_KEY]; //64*5 = 320, 320+8=328 diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ea6c94d..c0bad4f 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -295,14 +295,13 @@ static void usb_device_reset(PSDevice pDevice); static void device_set_options(PSDevice pDevice) { - BYTE abyBroadcastAddr[U_ETHER_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - BYTE abySNAP_RFC1042[U_ETHER_ADDR_LEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; - BYTE abySNAP_Bridgetunnel[U_ETHER_ADDR_LEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; + BYTE abyBroadcastAddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + BYTE abySNAP_RFC1042[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; + u8 abySNAP_Bridgetunnel[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; - - memcpy(pDevice->abyBroadcastAddr, abyBroadcastAddr, U_ETHER_ADDR_LEN); - memcpy(pDevice->abySNAP_RFC1042, abySNAP_RFC1042, U_ETHER_ADDR_LEN); - memcpy(pDevice->abySNAP_Bridgetunnel, abySNAP_Bridgetunnel, U_ETHER_ADDR_LEN); + memcpy(pDevice->abyBroadcastAddr, abyBroadcastAddr, ETH_ALEN); + memcpy(pDevice->abySNAP_RFC1042, abySNAP_RFC1042, ETH_ALEN); + memcpy(pDevice->abySNAP_Bridgetunnel, abySNAP_Bridgetunnel, ETH_ALEN); pDevice->cbTD = TX_DESC_DEF0; pDevice->cbRD = RX_DESC_DEF0; @@ -359,9 +358,9 @@ static VOID device_init_diversity_timer(PSDevice pDevice) { static BOOL device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) { - BYTE abyBroadcastAddr[U_ETHER_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - BYTE abySNAP_RFC1042[U_ETHER_ADDR_LEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; - BYTE abySNAP_Bridgetunnel[U_ETHER_ADDR_LEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; + u8 abyBroadcastAddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + u8 abySNAP_RFC1042[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; + u8 abySNAP_Bridgetunnel[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; BYTE byAntenna; UINT ii; CMD_CARD_INIT sInitCmd; @@ -375,10 +374,12 @@ static BOOL device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "---->INIbInitAdapter. [%d][%d]\n", InitType, pDevice->byPacketType); spin_lock_irq(&pDevice->lock); - if (InitType == DEVICE_INIT_COLD) { - memcpy(pDevice->abyBroadcastAddr, abyBroadcastAddr, U_ETHER_ADDR_LEN); - memcpy(pDevice->abySNAP_RFC1042, abySNAP_RFC1042, U_ETHER_ADDR_LEN); - memcpy(pDevice->abySNAP_Bridgetunnel, abySNAP_Bridgetunnel, U_ETHER_ADDR_LEN); + if (InitType == DEVICE_INIT_COLD) { + memcpy(pDevice->abyBroadcastAddr, abyBroadcastAddr, ETH_ALEN); + memcpy(pDevice->abySNAP_RFC1042, abySNAP_RFC1042, ETH_ALEN); + memcpy(pDevice->abySNAP_Bridgetunnel, + abySNAP_Bridgetunnel, + ETH_ALEN); if ( !FIRMWAREbCheckVersion(pDevice) ) { if (FIRMWAREbDownload(pDevice) == TRUE) { @@ -603,7 +604,9 @@ static BOOL device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) // get Permanent network address memcpy(pDevice->abyPermanentNetAddr,&(sInitRsp.byNetAddr[0]),6); - memcpy(pDevice->abyCurrentNetAddr, pDevice->abyPermanentNetAddr, U_ETHER_ADDR_LEN); + memcpy(pDevice->abyCurrentNetAddr, + pDevice->abyPermanentNetAddr, + ETH_ALEN); // if exist SW network address, use SW network address. @@ -757,7 +760,7 @@ static const struct net_device_ops device_netdev_ops = { static int __devinit vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) { - BYTE fake_mac[U_ETHER_ADDR_LEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x01};//fake MAC address + u8 fake_mac[ETH_ALEN] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}; struct usb_device *udev = interface_to_usbdev(intf); int rc = 0; struct net_device *netdev = NULL; @@ -798,7 +801,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) //2007-0821-01by MikeLiu usb_set_intfdata(intf, pDevice); SET_NETDEV_DEV(netdev, &intf->dev); - memcpy(pDevice->dev->dev_addr, fake_mac, U_ETHER_ADDR_LEN); //use fake mac address + memcpy(pDevice->dev->dev_addr, fake_mac, ETH_ALEN); rc = register_netdev(netdev); if (rc != 0) { printk(KERN_ERR DEVICE_NAME " Failed to register netdev\n"); @@ -1101,8 +1104,8 @@ static int device_open(struct net_device *dev) { // Init for Key Management KeyvInitTable(pDevice,&pDevice->sKey); - memcpy(pDevice->sMgmtObj.abyMACAddr, pDevice->abyCurrentNetAddr, U_ETHER_ADDR_LEN); - memcpy(pDevice->dev->dev_addr, pDevice->abyCurrentNetAddr, U_ETHER_ADDR_LEN); + memcpy(pDevice->sMgmtObj.abyMACAddr, pDevice->abyCurrentNetAddr, ETH_ALEN); + memcpy(pDevice->dev->dev_addr, pDevice->abyCurrentNetAddr, ETH_ALEN); pDevice->bStopTx0Pkt = FALSE; pDevice->bStopDataPkt = FALSE; pDevice->bRoaming = FALSE; //DavidWang diff --git a/drivers/staging/vt6656/mib.c b/drivers/staging/vt6656/mib.c index 910e610..b6f138e 100644 --- a/drivers/staging/vt6656/mib.c +++ b/drivers/staging/vt6656/mib.c @@ -156,18 +156,17 @@ void STAvUpdateRDStatCounter (PSStatCounter pStatistic, BYTE byRSR, BYTE byNewRSR, BYTE byRxSts, BYTE byRxRate, PBYTE pbyBuffer, UINT cbFrameLength) { - //need change - PS802_11Header pHeader = (PS802_11Header)pbyBuffer; + /* need change */ + PS802_11Header pHeader = (PS802_11Header)pbyBuffer; - if (byRSR & RSR_ADDROK) - pStatistic->dwRsrADDROk++; - if (byRSR & RSR_CRCOK) { - pStatistic->dwRsrCRCOk++; + if (byRSR & RSR_ADDROK) + pStatistic->dwRsrADDROk++; + if (byRSR & RSR_CRCOK) { + pStatistic->dwRsrCRCOk++; + pStatistic->ullRsrOK++; - pStatistic->ullRsrOK++; - - if (cbFrameLength >= U_ETHER_ADDR_LEN) { - // update counters in case that successful transmit + if (cbFrameLength >= ETH_ALEN) { + /* update counters in case of successful transmission */ if (byRSR & RSR_ADDRBROAD) { pStatistic->ullRxBroadcastFrames++; pStatistic->ullRxBroadcastBytes += (ULONGLONG)cbFrameLength; diff --git a/drivers/staging/vt6656/mib.h b/drivers/staging/vt6656/mib.h index ac996d2..d1d7817 100644 --- a/drivers/staging/vt6656/mib.h +++ b/drivers/staging/vt6656/mib.h @@ -91,7 +91,7 @@ typedef struct tagSMib2Counter { LONG ifType; LONG ifMtu; DWORD ifSpeed; - BYTE ifPhysAddress[U_ETHER_ADDR_LEN]; + BYTE ifPhysAddress[ETH_ALEN]; LONG ifAdminStatus; LONG ifOperStatus; DWORD ifLastChange; @@ -231,7 +231,7 @@ typedef struct tagSTxPktInfo { BYTE byBroadMultiUni; WORD wLength; WORD wFIFOCtl; - BYTE abyDestAddr[U_ETHER_ADDR_LEN]; + BYTE abyDestAddr[ETH_ALEN]; } STxPktInfo, *PSTxPktInfo; diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index d9fa36c..03b8b4d 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -322,7 +322,9 @@ s_vSaveTxPktInfo(PSDevice pDevice, BYTE byPktNum, PBYTE pbyDestAddr, WORD wPktLe pStatistic->abyTxPktInfo[byPktNum].wLength = wPktLength; pStatistic->abyTxPktInfo[byPktNum].wFIFOCtl = wFIFOCtl; - memcpy(pStatistic->abyTxPktInfo[byPktNum].abyDestAddr, pbyDestAddr, U_ETHER_ADDR_LEN); + memcpy(pStatistic->abyTxPktInfo[byPktNum].abyDestAddr, + pbyDestAddr, + ETH_ALEN); } @@ -1026,18 +1028,27 @@ s_vFillRTSHead ( pBuf->Data.wDurationID = pBuf->wDuration_aa; //Get RTS Frame body pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4 - if ((pDevice->eOPMode == OP_MODE_ADHOC) || - (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - } + + if ((pDevice->eOPMode == OP_MODE_ADHOC) || + (pDevice->eOPMode == OP_MODE_AP)) { + memcpy(&(pBuf->Data.abyRA[0]), + &(psEthHeader->abyDstAddr[0]), + ETH_ALEN); + } else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - } - if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - } + memcpy(&(pBuf->Data.abyRA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); + } + if (pDevice->eOPMode == OP_MODE_AP) { + memcpy(&(pBuf->Data.abyTA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); + } else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), + &(psEthHeader->abySrcAddr[0]), + ETH_ALEN); } } else { @@ -1063,19 +1074,27 @@ s_vFillRTSHead ( //Get RTS Frame body pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4 - if ((pDevice->eOPMode == OP_MODE_ADHOC) || - (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - } + if ((pDevice->eOPMode == OP_MODE_ADHOC) || + (pDevice->eOPMode == OP_MODE_AP)) { + memcpy(&(pBuf->Data.abyRA[0]), + &(psEthHeader->abyDstAddr[0]), + ETH_ALEN); + } else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); } - if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - } + if (pDevice->eOPMode == OP_MODE_AP) { + memcpy(&(pBuf->Data.abyTA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); + } else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), + &(psEthHeader->abySrcAddr[0]), + ETH_ALEN); } } // if (byFBOption == AUTO_FB_NONE) @@ -1094,20 +1113,26 @@ s_vFillRTSHead ( //Get RTS Frame body pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4 - if ((pDevice->eOPMode == OP_MODE_ADHOC) || - (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - } - else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - } - - if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - } - else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); - } + if ((pDevice->eOPMode == OP_MODE_ADHOC) || + (pDevice->eOPMode == OP_MODE_AP)) { + memcpy(&(pBuf->Data.abyRA[0]), + &(psEthHeader->abyDstAddr[0]), + ETH_ALEN); + } else { + memcpy(&(pBuf->Data.abyRA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); + } + + if (pDevice->eOPMode == OP_MODE_AP) { + memcpy(&(pBuf->Data.abyTA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); + } else { + memcpy(&(pBuf->Data.abyTA[0]), + &(psEthHeader->abySrcAddr[0]), + ETH_ALEN); + } } else { @@ -1125,19 +1150,25 @@ s_vFillRTSHead ( //Get RTS Frame body pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4 - if ((pDevice->eOPMode == OP_MODE_ADHOC) || - (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - } - else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - } - if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - } - else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); - } + if ((pDevice->eOPMode == OP_MODE_ADHOC) || + (pDevice->eOPMode == OP_MODE_AP)) { + memcpy(&(pBuf->Data.abyRA[0]), + &(psEthHeader->abyDstAddr[0]), + ETH_ALEN); + } else { + memcpy(&(pBuf->Data.abyRA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); + } + if (pDevice->eOPMode == OP_MODE_AP) { + memcpy(&(pBuf->Data.abyTA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); + } else { + memcpy(&(pBuf->Data.abyTA[0]), + &(psEthHeader->abySrcAddr[0]), + ETH_ALEN); + } } } else if (byPktType == PK_TYPE_11B) { @@ -1153,20 +1184,26 @@ s_vFillRTSHead ( //Get RTS Frame body pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4 - - if ((pDevice->eOPMode == OP_MODE_ADHOC) || + if ((pDevice->eOPMode == OP_MODE_ADHOC) || (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), + &(psEthHeader->abyDstAddr[0]), + ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); } if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - } - else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); + } else { + memcpy(&(pBuf->Data.abyTA[0]), + &(psEthHeader->abySrcAddr[0]), + ETH_ALEN); } } } @@ -1222,7 +1259,9 @@ s_vFillCTSHead ( pBuf->Data.wDurationID = pBuf->wDuration_ba; pBuf->Data.wFrameControl = TYPE_CTL_CTS;//0x00C4 pBuf->Data.wReserved = 0x0000; - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyCurrentNetAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), + &(pDevice->abyCurrentNetAddr[0]), + ETH_ALEN); } else { //if (byFBOption != AUTO_FB_NONE && uDMAIdx != TYPE_ATIMDMA && uDMAIdx != TYPE_BEACONDMA) PSCTS pBuf = (PSCTS)pvCTS; //Get SignalField,ServiceField,Length @@ -1239,16 +1278,13 @@ s_vFillCTSHead ( pBuf->Data.wDurationID = pBuf->wDuration_ba; pBuf->Data.wFrameControl = TYPE_CTL_CTS;//0x00C4 pBuf->Data.wReserved = 0x0000; - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyCurrentNetAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), + &(pDevice->abyCurrentNetAddr[0]), + ETH_ALEN); } } } - - - - - /*+ * * Description: @@ -1843,21 +1879,35 @@ s_vGenerateMACHeader ( } if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pMACHeader->abyAddr1[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr2[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr3[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pMACHeader->abyAddr1[0]), + &(psEthHeader->abyDstAddr[0]), + ETH_ALEN); + memcpy(&(pMACHeader->abyAddr2[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); + memcpy(&(pMACHeader->abyAddr3[0]), + &(psEthHeader->abySrcAddr[0]), + ETH_ALEN); pMACHeader->wFrameCtl |= FC_FROMDS; - } - else { - if (pDevice->eOPMode == OP_MODE_ADHOC) { - memcpy(&(pMACHeader->abyAddr1[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr2[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr3[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - } - else { - memcpy(&(pMACHeader->abyAddr3[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr2[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr1[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + } else { + if (pDevice->eOPMode == OP_MODE_ADHOC) { + memcpy(&(pMACHeader->abyAddr1[0]), + &(psEthHeader->abyDstAddr[0]), + ETH_ALEN); + memcpy(&(pMACHeader->abyAddr2[0]), + &(psEthHeader->abySrcAddr[0]), + ETH_ALEN); + memcpy(&(pMACHeader->abyAddr3[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); + } else { + memcpy(&(pMACHeader->abyAddr3[0]), + &(psEthHeader->abyDstAddr[0]), + ETH_ALEN); + memcpy(&(pMACHeader->abyAddr2[0]), + &(psEthHeader->abySrcAddr[0]), + ETH_ALEN); + memcpy(&(pMACHeader->abyAddr1[0]), + &(pDevice->abyBSSID[0]), + ETH_ALEN); pMACHeader->wFrameCtl |= FC_TODS; } } @@ -2089,8 +2139,12 @@ CMD_STATUS csMgmt_xmit( memset((PVOID)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); - memcpy(&(sEthHeader.abyDstAddr[0]), &(pPacket->p80211Header->sA3.abyAddr1[0]), U_ETHER_ADDR_LEN); - memcpy(&(sEthHeader.abySrcAddr[0]), &(pPacket->p80211Header->sA3.abyAddr2[0]), U_ETHER_ADDR_LEN); + memcpy(&(sEthHeader.abyDstAddr[0]), + &(pPacket->p80211Header->sA3.abyAddr1[0]), + ETH_ALEN); + memcpy(&(sEthHeader.abySrcAddr[0]), + &(pPacket->p80211Header->sA3.abyAddr2[0]), + ETH_ALEN); //========================= // No Fragmentation //========================= @@ -2521,8 +2575,12 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb) { cbHeaderSize = wTxBufSize + sizeof(SRrvTime_ab) + cbMICHDR + sizeof(STxDataHead_ab); } memset((PVOID)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); - memcpy(&(sEthHeader.abyDstAddr[0]), &(p80211Header->sA3.abyAddr1[0]), U_ETHER_ADDR_LEN); - memcpy(&(sEthHeader.abySrcAddr[0]), &(p80211Header->sA3.abyAddr2[0]), U_ETHER_ADDR_LEN); + memcpy(&(sEthHeader.abyDstAddr[0]), + &(p80211Header->sA3.abyAddr1[0]), + ETH_ALEN); + memcpy(&(sEthHeader.abySrcAddr[0]), + &(p80211Header->sA3.abyAddr2[0]), + ETH_ALEN); //========================= // No Fragmentation //========================= diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 6bc22d3..133f475 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -43,8 +43,8 @@ typedef struct tagSRTSDataF { WORD wFrameControl; WORD wDurationID; - BYTE abyRA[U_ETHER_ADDR_LEN]; - BYTE abyTA[U_ETHER_ADDR_LEN]; + BYTE abyRA[ETH_ALEN]; + BYTE abyTA[ETH_ALEN]; } SRTSDataF, *PSRTSDataF; // @@ -53,7 +53,7 @@ typedef struct tagSRTSDataF { typedef struct tagSCTSDataF { WORD wFrameControl; WORD wDurationID; - BYTE abyRA[U_ETHER_ADDR_LEN]; + BYTE abyRA[ETH_ALEN]; WORD wReserved; } SCTSDataF, *PSCTSDataF; diff --git a/drivers/staging/vt6656/tether.c b/drivers/staging/vt6656/tether.c index ab1368a..a7c716f 100644 --- a/drivers/staging/vt6656/tether.c +++ b/drivers/staging/vt6656/tether.c @@ -68,7 +68,7 @@ BYTE ETHbyGetHashIndexByCrc32(PBYTE pbyMultiAddr) BYTE byHash = 0; /* get the least 6-bits from CRC generator */ - byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, U_ETHER_ADDR_LEN, + byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, ETH_ALEN, 0xFFFFFFFFL) & 0x3F); /* reverse most bit to least bit */ for (ii = 0; ii < (sizeof(byTmpHash) * 8); ii++) { diff --git a/drivers/staging/vt6656/tether.h b/drivers/staging/vt6656/tether.h index 5a3c326..af119dd 100644 --- a/drivers/staging/vt6656/tether.h +++ b/drivers/staging/vt6656/tether.h @@ -29,17 +29,17 @@ #ifndef __TETHER_H__ #define __TETHER_H__ +#include #include "ttype.h" /*--------------------- Export Definitions -------------------------*/ // // constants // -#define U_ETHER_ADDR_LEN 6 // Ethernet address length #define U_TYPE_LEN 2 // #define U_CRC_LEN 4 // -#define U_HEADER_LEN (U_ETHER_ADDR_LEN * 2 + U_TYPE_LEN) -#define U_ETHER_ADDR_STR_LEN (U_ETHER_ADDR_LEN * 2 + 1) +#define U_HEADER_LEN (ETH_ALEN * 2 + U_TYPE_LEN) +#define U_ETHER_ADDR_STR_LEN (ETH_ALEN * 2 + 1) // Ethernet address string length #define MIN_DATA_LEN 46 // min data length @@ -167,8 +167,8 @@ // Ethernet packet // typedef struct tagSEthernetHeader { - BYTE abyDstAddr[U_ETHER_ADDR_LEN]; - BYTE abySrcAddr[U_ETHER_ADDR_LEN]; + BYTE abyDstAddr[ETH_ALEN]; + BYTE abySrcAddr[ETH_ALEN]; WORD wType; }__attribute__ ((__packed__)) SEthernetHeader, *PSEthernetHeader; @@ -178,8 +178,8 @@ SEthernetHeader, *PSEthernetHeader; // 802_3 packet // typedef struct tagS802_3Header { - BYTE abyDstAddr[U_ETHER_ADDR_LEN]; - BYTE abySrcAddr[U_ETHER_ADDR_LEN]; + BYTE abyDstAddr[ETH_ALEN]; + BYTE abySrcAddr[ETH_ALEN]; WORD wLen; }__attribute__ ((__packed__)) S802_3Header, *PS802_3Header; @@ -190,11 +190,11 @@ S802_3Header, *PS802_3Header; typedef struct tagS802_11Header { WORD wFrameCtl; WORD wDurationID; - BYTE abyAddr1[U_ETHER_ADDR_LEN]; - BYTE abyAddr2[U_ETHER_ADDR_LEN]; - BYTE abyAddr3[U_ETHER_ADDR_LEN]; + BYTE abyAddr1[ETH_ALEN]; + BYTE abyAddr2[ETH_ALEN]; + BYTE abyAddr3[ETH_ALEN]; WORD wSeqCtl; - BYTE abyAddr4[U_ETHER_ADDR_LEN]; + BYTE abyAddr4[ETH_ALEN]; }__attribute__ ((__packed__)) S802_11Header, *PS802_11Header; diff --git a/drivers/staging/vt6656/wctl.c b/drivers/staging/vt6656/wctl.c index 40986da..956add6 100644 --- a/drivers/staging/vt6656/wctl.c +++ b/drivers/staging/vt6656/wctl.c @@ -91,7 +91,7 @@ BOOL WCTLbIsDuplicate (PSCache pCache, PS802_11Header pMACHeader) /* Not fount in cache - insert */ pCacheEntry = &pCache->asCacheEntry[pCache->uInPtr]; pCacheEntry->wFmSequence = pMACHeader->wSeqCtl; - memcpy(&(pCacheEntry->abyAddr2[0]), &(pMACHeader->abyAddr2[0]), U_ETHER_ADDR_LEN); + memcpy(&(pCacheEntry->abyAddr2[0]), &(pMACHeader->abyAddr2[0]), ETH_ALEN); pCacheEntry->wFrameCtl = pMACHeader->wFrameCtl; ADD_ONE_WITH_WRAP_AROUND(pCache->uInPtr, DUPLICATE_RX_CACHE_LENGTH); return FALSE; @@ -154,7 +154,9 @@ UINT ii; pDevice->sRxDFCB[ii].bInUse = TRUE; pDevice->sRxDFCB[ii].wSequence = (pMACHeader->wSeqCtl >> 4); pDevice->sRxDFCB[ii].wFragNum = (pMACHeader->wSeqCtl & 0x000F); - memcpy(&(pDevice->sRxDFCB[ii].abyAddr2[0]), &(pMACHeader->abyAddr2[0]), U_ETHER_ADDR_LEN); + memcpy(&(pDevice->sRxDFCB[ii].abyAddr2[0]), + &(pMACHeader->abyAddr2[0]), + ETH_ALEN); return(ii); } } diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 330aea6..9b4ff79 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -3773,13 +3773,17 @@ s_MgrMakeAssocRequest( pwPMKID = (PWORD)pbyRSN; // Point to PMKID count *pwPMKID = 0; // Initialize PMKID count pbyRSN += 2; // Point to PMKID list - for (ii = 0; ii < pDevice->gsPMKID.BSSIDInfoCount; ii++) { - if ( !memcmp(&pDevice->gsPMKID.BSSIDInfo[ii].BSSID[0], pMgmt->abyCurrBSSID, U_ETHER_ADDR_LEN)) { - (*pwPMKID) ++; - memcpy(pbyRSN, pDevice->gsPMKID.BSSIDInfo[ii].PMKID, 16); - pbyRSN += 16; - } - } + for (ii = 0; ii < pDevice->gsPMKID.BSSIDInfoCount; ii++) { + if (!memcmp(&pDevice->gsPMKID.BSSIDInfo[ii].BSSID[0], + pMgmt->abyCurrBSSID, + ETH_ALEN)) { + (*pwPMKID)++; + memcpy(pbyRSN, + pDevice->gsPMKID.BSSIDInfo[ii].PMKID, + 16); + pbyRSN += 16; + } + } if (*pwPMKID != 0) { sFrame.pRSN->len += (2 + (*pwPMKID)*16); } @@ -4030,10 +4034,14 @@ s_MgrMakeReAssocRequest( *pwPMKID = 0; // Initialize PMKID count pbyRSN += 2; // Point to PMKID list for (ii = 0; ii < pDevice->gsPMKID.BSSIDInfoCount; ii++) { - if ( !memcmp(&pDevice->gsPMKID.BSSIDInfo[ii].BSSID[0], pMgmt->abyCurrBSSID, U_ETHER_ADDR_LEN)) { - (*pwPMKID) ++; - memcpy(pbyRSN, pDevice->gsPMKID.BSSIDInfo[ii].PMKID, 16); - pbyRSN += 16; + if (!memcmp(&pDevice->gsPMKID.BSSIDInfo[ii].BSSID[0], + pMgmt->abyCurrBSSID, + ETH_ALEN)) { + (*pwPMKID)++; + memcpy(pbyRSN, + pDevice->gsPMKID.BSSIDInfo[ii].PMKID, + 16); + pbyRSN += 16; } } if (*pwPMKID != 0) { @@ -4057,8 +4065,6 @@ s_MgrMakeReAssocRequest( return pTxPacket; } - - /*+ * * Routine Description: @@ -4070,7 +4076,6 @@ s_MgrMakeReAssocRequest( * -*/ - PSTxMgmtPacket s_MgrMakeAssocResponse( IN PSDevice pDevice, @@ -4745,13 +4750,16 @@ bAdd_PMKID_Candidate ( // Update Old Candidate for (ii = 0; ii < pDevice->gsPMKIDCandidate.NumCandidates; ii++) { - pCandidateList = &pDevice->gsPMKIDCandidate.CandidateList[ii]; - if ( !memcmp(pCandidateList->BSSID, pbyBSSID, U_ETHER_ADDR_LEN)) { - if ((psRSNCapObj->bRSNCapExist == TRUE) && (psRSNCapObj->wRSNCap & BIT0)) { - pCandidateList->Flags |= NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED; - } else { - pCandidateList->Flags &= ~(NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED); - } + pCandidateList = &pDevice->gsPMKIDCandidate.CandidateList[ii]; + if (!memcmp(pCandidateList->BSSID, pbyBSSID, ETH_ALEN)) { + if ((psRSNCapObj->bRSNCapExist == TRUE) + && (psRSNCapObj->wRSNCap & BIT0)) { + pCandidateList->Flags |= + NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED; + } else { + pCandidateList->Flags &= + ~(NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED); + } return TRUE; } } @@ -4763,7 +4771,7 @@ bAdd_PMKID_Candidate ( } else { pCandidateList->Flags &= ~(NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED); } - memcpy(pCandidateList->BSSID, pbyBSSID, U_ETHER_ADDR_LEN); + memcpy(pCandidateList->BSSID, pbyBSSID, ETH_ALEN); pDevice->gsPMKIDCandidate.NumCandidates++; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"NumCandidates:%d\n", (int)pDevice->gsPMKIDCandidate.NumCandidates); return TRUE; diff --git a/drivers/staging/vt6656/wpa2.c b/drivers/staging/vt6656/wpa2.c index fa3aeed..f8be30d 100644 --- a/drivers/staging/vt6656/wpa2.c +++ b/drivers/staging/vt6656/wpa2.c @@ -337,20 +337,25 @@ WPA2uSetIEs( } pRSNIEs->len +=2; - if ((pMgmt->gsPMKIDCache.BSSIDInfoCount > 0) && - (pMgmt->bRoaming == TRUE) && + if ((pMgmt->gsPMKIDCache.BSSIDInfoCount > 0) && + (pMgmt->bRoaming == TRUE) && (pMgmt->eAuthenMode == WMAC_AUTH_WPA2)) { - // RSN PMKID - pwPMKID = (PWORD)(&pRSNIEs->abyRSN[18]); // Point to PMKID count - *pwPMKID = 0; // Initialize PMKID count - pbyBuffer = &pRSNIEs->abyRSN[20]; // Point to PMKID list - for (ii = 0; ii < pMgmt->gsPMKIDCache.BSSIDInfoCount; ii++) { - if ( !memcmp(&pMgmt->gsPMKIDCache.BSSIDInfo[ii].abyBSSID[0], pMgmt->abyCurrBSSID, U_ETHER_ADDR_LEN)) { - (*pwPMKID) ++; - memcpy(pbyBuffer, pMgmt->gsPMKIDCache.BSSIDInfo[ii].abyPMKID, 16); - pbyBuffer += 16; - } - } + /* RSN PMKID, pointer to PMKID count */ + pwPMKID = (PWORD)(&pRSNIEs->abyRSN[18]); + *pwPMKID = 0; /* Initialize PMKID count */ + pbyBuffer = &pRSNIEs->abyRSN[20]; /* Point to PMKID list */ + for (ii = 0; ii < pMgmt->gsPMKIDCache.BSSIDInfoCount; ii++) { + if (!memcmp(&pMgmt-> + gsPMKIDCache.BSSIDInfo[ii].abyBSSID[0], + pMgmt->abyCurrBSSID, + ETH_ALEN)) { + (*pwPMKID)++; + memcpy(pbyBuffer, + pMgmt->gsPMKIDCache.BSSIDInfo[ii].abyPMKID, + 16); + pbyBuffer += 16; + } + } if (*pwPMKID != 0) { pRSNIEs->len += (2 + (*pwPMKID)*16); } else { diff --git a/drivers/staging/vt6656/wpactl.c b/drivers/staging/vt6656/wpactl.c index 4555bc0..25b784c 100644 --- a/drivers/staging/vt6656/wpactl.c +++ b/drivers/staging/vt6656/wpactl.c @@ -103,7 +103,7 @@ static int wpa_init_wpadev(PSDevice pDevice) wpadev_priv = netdev_priv(pDevice->wpadev); *wpadev_priv = *pDevice; - memcpy(pDevice->wpadev->dev_addr, dev->dev_addr, U_ETHER_ADDR_LEN); + memcpy(pDevice->wpadev->dev_addr, dev->dev_addr, ETH_ALEN); pDevice->wpadev->base_addr = dev->base_addr; pDevice->wpadev->irq = dev->irq; pDevice->wpadev->mem_start = dev->mem_start; -- cgit v0.10.2 From c30d7973f22ea3f8b3e5d1d7215b3f2ff8f5e934 Mon Sep 17 00:00:00 2001 From: Forest Bond Date: Sat, 17 Apr 2010 11:03:38 -0400 Subject: Staging: vt6656: Rename hostap_set_hostapd, hostap_iotctl. The functions hostap_set_hostapd, hostap_iotctl clashed with functions of the same name with CONFIG_HOSTAP=y and/or CONFIG_VT6655=y. Signed-off-by: Forest Bond Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/hostap.c b/drivers/staging/vt6656/hostap.c index 1078d61..ca007c3 100644 --- a/drivers/staging/vt6656/hostap.c +++ b/drivers/staging/vt6656/hostap.c @@ -178,7 +178,7 @@ static int hostap_disable_hostapd(PSDevice pDevice, int rtnl_locked) * */ -int hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked) +int vt6656_hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked) { if (val < 0 || val > 1) return -EINVAL; @@ -744,7 +744,7 @@ static int hostap_get_encryption(PSDevice pDevice, /* * Description: - * hostap_ioctl main function supported for hostap deamon. + * vt6656_hostap_ioctl main function supported for hostap deamon. * * Parameters: * In: @@ -756,7 +756,7 @@ static int hostap_get_encryption(PSDevice pDevice, * */ -int hostap_ioctl(PSDevice pDevice, struct iw_point *p) +int vt6656_hostap_ioctl(PSDevice pDevice, struct iw_point *p) { struct viawget_hostapd_param *param; int ret = 0; @@ -844,7 +844,7 @@ int hostap_ioctl(PSDevice pDevice, struct iw_point *p) return -EOPNOTSUPP; default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "hostap_ioctl: unknown cmd=%d\n", + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "vt6656_hostap_ioctl: unknown cmd=%d\n", (int)param->cmd); return -EOPNOTSUPP; break; diff --git a/drivers/staging/vt6656/hostap.h b/drivers/staging/vt6656/hostap.h index 8fd667b..9e366dc 100644 --- a/drivers/staging/vt6656/hostap.h +++ b/drivers/staging/vt6656/hostap.h @@ -61,8 +61,8 @@ #define ARPHRD_IEEE80211 801 #endif -int hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked); -int hostap_ioctl(PSDevice pDevice, struct iw_point *p); +int vt6656_hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked); +int vt6656_hostap_ioctl(PSDevice pDevice, struct iw_point *p); #endif // __HOSTAP_H__ diff --git a/drivers/staging/vt6656/ioctl.c b/drivers/staging/vt6656/ioctl.c index d7a78f2..08d5429 100644 --- a/drivers/staging/vt6656/ioctl.c +++ b/drivers/staging/vt6656/ioctl.c @@ -412,7 +412,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { break; }; if (sValue.dwValue == 1) { - if (hostap_set_hostapd(pDevice, 1, 1) == 0){ + if (vt6656_hostap_set_hostapd(pDevice, 1, 1) == 0){ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable HOSTAP\n"); } else { @@ -421,7 +421,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { } } else { - hostap_set_hostapd(pDevice, 0, 1); + vt6656_hostap_set_hostapd(pDevice, 0, 1); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disable HOSTAP\n"); } diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index c0bad4f..ebd7a1e 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -2069,7 +2069,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { rc = 0; } - rc = hostap_ioctl(pDevice, &wrq->u.data); + rc = vt6656_hostap_ioctl(pDevice, &wrq->u.data); break; case IOCTL_CMD_WPA: -- cgit v0.10.2 From ecf739e695d5aa404326100c0ba93c211e87a0fe Mon Sep 17 00:00:00 2001 From: Forest Bond Date: Sat, 17 Apr 2010 11:03:47 -0400 Subject: Staging: vt6655: Rename hostap_set_hostapd, hostap_iotctl. The functions hostap_set_hostapd, hostap_iotctl clashed with functions of the same name with CONFIG_HOSTAP=y and/or CONFIG_VT6656=y. Signed-off-by: Forest Bond Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 50f02ee..f1d70e1 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -1243,7 +1243,7 @@ device_release_WPADEV(pDevice); } #ifdef HOSTAP if (dev) - hostap_set_hostapd(pDevice, 0, 0); + vt6655_hostap_set_hostapd(pDevice, 0, 0); #endif if (dev) unregister_netdev(dev); @@ -3524,7 +3524,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { case IOCTL_CMD_HOSTAPD: - rc = hostap_ioctl(pDevice, &wrq->u.data); + rc = vt6655_hostap_ioctl(pDevice, &wrq->u.data); break; case IOCTL_CMD_WPA: diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c index 58abf44..9e07a40 100644 --- a/drivers/staging/vt6655/hostap.c +++ b/drivers/staging/vt6655/hostap.c @@ -183,7 +183,7 @@ KeyvInitTable(&pDevice->sKey,pDevice->PortOffset); * */ -int hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked) +int vt6655_hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked) { if (val < 0 || val > 1) return -EINVAL; @@ -746,7 +746,7 @@ static int hostap_get_encryption(PSDevice pDevice, /* * Description: - * hostap_ioctl main function supported for hostap deamon. + * vt6655_hostap_ioctl main function supported for hostap deamon. * * Parameters: * In: @@ -758,7 +758,7 @@ static int hostap_get_encryption(PSDevice pDevice, * */ -int hostap_ioctl(PSDevice pDevice, struct iw_point *p) +int vt6655_hostap_ioctl(PSDevice pDevice, struct iw_point *p) { struct viawget_hostapd_param *param; int ret = 0; @@ -846,7 +846,7 @@ int hostap_ioctl(PSDevice pDevice, struct iw_point *p) return -EOPNOTSUPP; default: - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "hostap_ioctl: unknown cmd=%d\n", + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "vt6655_hostap_ioctl: unknown cmd=%d\n", (int)param->cmd); return -EOPNOTSUPP; break; diff --git a/drivers/staging/vt6655/hostap.h b/drivers/staging/vt6655/hostap.h index 8fd667b..55db555 100644 --- a/drivers/staging/vt6655/hostap.h +++ b/drivers/staging/vt6655/hostap.h @@ -61,8 +61,8 @@ #define ARPHRD_IEEE80211 801 #endif -int hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked); -int hostap_ioctl(PSDevice pDevice, struct iw_point *p); +int vt6655_hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked); +int vt6655_hostap_ioctl(PSDevice pDevice, struct iw_point *p); #endif // __HOSTAP_H__ diff --git a/drivers/staging/vt6655/ioctl.c b/drivers/staging/vt6655/ioctl.c index 38577ca..37928e8 100644 --- a/drivers/staging/vt6655/ioctl.c +++ b/drivers/staging/vt6655/ioctl.c @@ -429,7 +429,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { break; }; if (sValue.dwValue == 1) { - if (hostap_set_hostapd(pDevice, 1, 1) == 0){ + if (vt6655_hostap_set_hostapd(pDevice, 1, 1) == 0){ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enable HOSTAP\n"); } else { @@ -438,7 +438,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { } } else { - hostap_set_hostapd(pDevice, 0, 1); + vt6655_hostap_set_hostapd(pDevice, 0, 1); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Disable HOSTAP\n"); } -- cgit v0.10.2 From 592ccfebb3d7ae6d2fa367b97f080790befa3c6c Mon Sep 17 00:00:00 2001 From: Andres More Date: Sat, 17 Apr 2010 12:07:42 -0300 Subject: Staging: vt6656: Removed IN definition Code cleanup, removed empty IN definition used to denote input parameters. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/80211mgr.c b/drivers/staging/vt6656/80211mgr.c index 8fa1a8e..b9dc7b1 100644 --- a/drivers/staging/vt6656/80211mgr.c +++ b/drivers/staging/vt6656/80211mgr.c @@ -91,7 +91,7 @@ static int msglevel =MSG_LEVEL_INFO; VOID vMgrEncodeBeacon( - IN PWLAN_FR_BEACON pFrame + PWLAN_FR_BEACON pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -123,7 +123,7 @@ vMgrEncodeBeacon( VOID vMgrDecodeBeacon( - IN PWLAN_FR_BEACON pFrame + PWLAN_FR_BEACON pFrame ) { PWLAN_IE pItem; @@ -244,7 +244,7 @@ vMgrDecodeBeacon( VOID vMgrEncodeIBSSATIM( - IN PWLAN_FR_IBSSATIM pFrame + PWLAN_FR_IBSSATIM pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -267,7 +267,7 @@ vMgrEncodeIBSSATIM( VOID vMgrDecodeIBSSATIM( - IN PWLAN_FR_IBSSATIM pFrame + PWLAN_FR_IBSSATIM pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -289,7 +289,7 @@ vMgrDecodeIBSSATIM( VOID vMgrEncodeDisassociation( - IN PWLAN_FR_DISASSOC pFrame + PWLAN_FR_DISASSOC pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -317,7 +317,7 @@ vMgrEncodeDisassociation( VOID vMgrDecodeDisassociation( - IN PWLAN_FR_DISASSOC pFrame + PWLAN_FR_DISASSOC pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -343,7 +343,7 @@ vMgrDecodeDisassociation( VOID vMgrEncodeAssocRequest( - IN PWLAN_FR_ASSOCREQ pFrame + PWLAN_FR_ASSOCREQ pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -370,7 +370,7 @@ vMgrEncodeAssocRequest( VOID vMgrDecodeAssocRequest( - IN PWLAN_FR_ASSOCREQ pFrame + PWLAN_FR_ASSOCREQ pFrame ) { PWLAN_IE pItem; @@ -436,7 +436,7 @@ vMgrDecodeAssocRequest( VOID vMgrEncodeAssocResponse( - IN PWLAN_FR_ASSOCRESP pFrame + PWLAN_FR_ASSOCRESP pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -468,7 +468,7 @@ vMgrEncodeAssocResponse( VOID vMgrDecodeAssocResponse( - IN PWLAN_FR_ASSOCRESP pFrame + PWLAN_FR_ASSOCRESP pFrame ) { PWLAN_IE pItem; @@ -514,7 +514,7 @@ vMgrDecodeAssocResponse( VOID vMgrEncodeReassocRequest( - IN PWLAN_FR_REASSOCREQ pFrame + PWLAN_FR_REASSOCREQ pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -546,7 +546,7 @@ vMgrEncodeReassocRequest( VOID vMgrDecodeReassocRequest( - IN PWLAN_FR_REASSOCREQ pFrame + PWLAN_FR_REASSOCREQ pFrame ) { PWLAN_IE pItem; @@ -618,7 +618,7 @@ vMgrDecodeReassocRequest( VOID vMgrEncodeProbeRequest( - IN PWLAN_FR_PROBEREQ pFrame + PWLAN_FR_PROBEREQ pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -639,7 +639,7 @@ vMgrEncodeProbeRequest( VOID vMgrDecodeProbeRequest( - IN PWLAN_FR_PROBEREQ pFrame + PWLAN_FR_PROBEREQ pFrame ) { PWLAN_IE pItem; @@ -692,7 +692,7 @@ vMgrDecodeProbeRequest( VOID vMgrEncodeProbeResponse( - IN PWLAN_FR_PROBERESP pFrame + PWLAN_FR_PROBERESP pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -726,7 +726,7 @@ vMgrEncodeProbeResponse( VOID vMgrDecodeProbeResponse( - IN PWLAN_FR_PROBERESP pFrame + PWLAN_FR_PROBERESP pFrame ) { PWLAN_IE pItem; @@ -840,7 +840,7 @@ vMgrDecodeProbeResponse( VOID vMgrEncodeAuthen( - IN PWLAN_FR_AUTHEN pFrame + PWLAN_FR_AUTHEN pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -871,7 +871,7 @@ vMgrEncodeAuthen( VOID vMgrDecodeAuthen( - IN PWLAN_FR_AUTHEN pFrame + PWLAN_FR_AUTHEN pFrame ) { PWLAN_IE pItem; @@ -911,7 +911,7 @@ vMgrDecodeAuthen( VOID vMgrEncodeDeauthen( - IN PWLAN_FR_DEAUTHEN pFrame + PWLAN_FR_DEAUTHEN pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -938,7 +938,7 @@ vMgrEncodeDeauthen( VOID vMgrDecodeDeauthen( - IN PWLAN_FR_DEAUTHEN pFrame + PWLAN_FR_DEAUTHEN pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -964,7 +964,7 @@ vMgrDecodeDeauthen( VOID vMgrEncodeReassocResponse( - IN PWLAN_FR_REASSOCRESP pFrame + PWLAN_FR_REASSOCRESP pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -997,7 +997,7 @@ vMgrEncodeReassocResponse( VOID vMgrDecodeReassocResponse( - IN PWLAN_FR_REASSOCRESP pFrame + PWLAN_FR_REASSOCRESP pFrame ) { PWLAN_IE pItem; diff --git a/drivers/staging/vt6656/80211mgr.h b/drivers/staging/vt6656/80211mgr.h index a4ea824..f7160cd 100644 --- a/drivers/staging/vt6656/80211mgr.h +++ b/drivers/staging/vt6656/80211mgr.h @@ -750,112 +750,112 @@ typedef struct tagWLAN_FR_DEAUTHEN { /*--------------------- Export Functions --------------------------*/ VOID vMgrEncodeBeacon( - IN PWLAN_FR_BEACON pFrame + PWLAN_FR_BEACON pFrame ); VOID vMgrDecodeBeacon( - IN PWLAN_FR_BEACON pFrame + PWLAN_FR_BEACON pFrame ); VOID vMgrEncodeIBSSATIM( - IN PWLAN_FR_IBSSATIM pFrame + PWLAN_FR_IBSSATIM pFrame ); VOID vMgrDecodeIBSSATIM( - IN PWLAN_FR_IBSSATIM pFrame + PWLAN_FR_IBSSATIM pFrame ); VOID vMgrEncodeDisassociation( - IN PWLAN_FR_DISASSOC pFrame + PWLAN_FR_DISASSOC pFrame ); VOID vMgrDecodeDisassociation( - IN PWLAN_FR_DISASSOC pFrame + PWLAN_FR_DISASSOC pFrame ); VOID vMgrEncodeAssocRequest( - IN PWLAN_FR_ASSOCREQ pFrame + PWLAN_FR_ASSOCREQ pFrame ); VOID vMgrDecodeAssocRequest( - IN PWLAN_FR_ASSOCREQ pFrame + PWLAN_FR_ASSOCREQ pFrame ); VOID vMgrEncodeAssocResponse( - IN PWLAN_FR_ASSOCRESP pFrame + PWLAN_FR_ASSOCRESP pFrame ); VOID vMgrDecodeAssocResponse( - IN PWLAN_FR_ASSOCRESP pFrame + PWLAN_FR_ASSOCRESP pFrame ); VOID vMgrEncodeReassocRequest( - IN PWLAN_FR_REASSOCREQ pFrame + PWLAN_FR_REASSOCREQ pFrame ); VOID vMgrDecodeReassocRequest( - IN PWLAN_FR_REASSOCREQ pFrame + PWLAN_FR_REASSOCREQ pFrame ); VOID vMgrEncodeProbeRequest( - IN PWLAN_FR_PROBEREQ pFrame + PWLAN_FR_PROBEREQ pFrame ); VOID vMgrDecodeProbeRequest( - IN PWLAN_FR_PROBEREQ pFrame + PWLAN_FR_PROBEREQ pFrame ); VOID vMgrEncodeProbeResponse( - IN PWLAN_FR_PROBERESP pFrame + PWLAN_FR_PROBERESP pFrame ); VOID vMgrDecodeProbeResponse( - IN PWLAN_FR_PROBERESP pFrame + PWLAN_FR_PROBERESP pFrame ); VOID vMgrEncodeAuthen( - IN PWLAN_FR_AUTHEN pFrame + PWLAN_FR_AUTHEN pFrame ); VOID vMgrDecodeAuthen( - IN PWLAN_FR_AUTHEN pFrame + PWLAN_FR_AUTHEN pFrame ); VOID vMgrEncodeDeauthen( - IN PWLAN_FR_DEAUTHEN pFrame + PWLAN_FR_DEAUTHEN pFrame ); VOID vMgrDecodeDeauthen( - IN PWLAN_FR_DEAUTHEN pFrame + PWLAN_FR_DEAUTHEN pFrame ); VOID vMgrEncodeReassocResponse( - IN PWLAN_FR_REASSOCRESP pFrame + PWLAN_FR_REASSOCRESP pFrame ); VOID vMgrDecodeReassocResponse( - IN PWLAN_FR_REASSOCRESP pFrame + PWLAN_FR_REASSOCRESP pFrame ); #endif// __80211MGR_H__ diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 7dc01db..9063249 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -691,10 +691,10 @@ s_vClearSQ3Value(PSDevice pDevice); */ UINT BBuGetFrameTime ( - IN BYTE byPreambleType, - IN BYTE byPktType, - IN UINT cbFrameLength, - IN WORD wRate + BYTE byPreambleType, + BYTE byPktType, + UINT cbFrameLength, + WORD wRate ) { UINT uFrameTime; @@ -758,10 +758,10 @@ BBuGetFrameTime ( */ VOID BBvCaculateParameter ( - IN PSDevice pDevice, - IN UINT cbFrameLength, - IN WORD wRate, - IN BYTE byPacketType, + PSDevice pDevice, + UINT cbFrameLength, + WORD wRate, + BYTE byPacketType, OUT PWORD pwPhyLen, OUT PBYTE pbyPhySrv, OUT PBYTE pbyPhySgn @@ -1578,7 +1578,7 @@ BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) VOID TimerSQ3CallBack ( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1620,7 +1620,7 @@ TimerSQ3CallBack ( VOID TimerSQ3Tmax3CallBack ( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1652,8 +1652,8 @@ TimerSQ3Tmax3CallBack ( VOID BBvUpdatePreEDThreshold( - IN PSDevice pDevice, - IN BOOL bScanning) + PSDevice pDevice, + BOOL bScanning) { diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index e991a7e..10eea90 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -98,18 +98,18 @@ UINT BBuGetFrameTime( - IN BYTE byPreambleType, - IN BYTE byFreqType, - IN UINT cbFrameLength, - IN WORD wRate + BYTE byPreambleType, + BYTE byFreqType, + UINT cbFrameLength, + WORD wRate ); VOID BBvCaculateParameter ( - IN PSDevice pDevice, - IN UINT cbFrameLength, - IN WORD wRate, - IN BYTE byPacketType, + PSDevice pDevice, + UINT cbFrameLength, + WORD wRate, + BYTE byPacketType, OUT PWORD pwPhyLen, OUT PBYTE pbyPhySrv, OUT PBYTE pbyPhySgn @@ -119,12 +119,12 @@ BBvCaculateParameter ( VOID TimerSQ3CallBack ( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); VOID TimerSQ3Tmax3CallBack ( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); VOID BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3); @@ -139,8 +139,8 @@ BOOL BBbVT3184Init (PSDevice pDevice); VOID BBvSetDeepSleep (PSDevice pDevice); VOID BBvExitDeepSleep (PSDevice pDevice); VOID BBvUpdatePreEDThreshold( - IN PSDevice pDevice, - IN BOOL bScanning + PSDevice pDevice, + BOOL bScanning ); #endif // __BASEBAND_H__ diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index 6b1678b..fa1ca79 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -92,16 +92,16 @@ const WORD awHWRetry1[5][5] = { /*--------------------- Static Functions --------------------------*/ VOID s_vCheckSensitivity( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); VOID s_vCheckPreEDThreshold( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); #ifdef Calcu_LinkQual VOID s_uCalculateLinkQual( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); #endif /*--------------------- Export Variables --------------------------*/ @@ -125,10 +125,10 @@ VOID s_uCalculateLinkQual( PKnownBSS BSSpSearchBSSList( - IN HANDLE hDeviceContext, - IN PBYTE pbyDesireBSSID, - IN PBYTE pbyDesireSSID, - IN CARD_PHY_TYPE ePhyType + HANDLE hDeviceContext, + PBYTE pbyDesireBSSID, + PBYTE pbyDesireSSID, + CARD_PHY_TYPE ePhyType ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -298,8 +298,8 @@ pDevice->bSameBSSMaxNum = jj; VOID BSSvClearBSSList( - IN HANDLE hDeviceContext, - IN BOOL bKeepCurrBSSID + HANDLE hDeviceContext, + BOOL bKeepCurrBSSID ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -344,9 +344,9 @@ BSSvClearBSSList( -*/ PKnownBSS BSSpAddrIsInBSSList( - IN HANDLE hDeviceContext, - IN PBYTE abyBSSID, - IN PWLAN_IE_SSID pSSID + HANDLE hDeviceContext, + PBYTE abyBSSID, + PWLAN_IE_SSID pSSID ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -385,23 +385,23 @@ BSSpAddrIsInBSSList( BOOL BSSbInsertToBSSList ( - IN HANDLE hDeviceContext, - IN PBYTE abyBSSIDAddr, - IN QWORD qwTimestamp, - IN WORD wBeaconInterval, - IN WORD wCapInfo, - IN BYTE byCurrChannel, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates, - IN PERPObject psERP, - IN PWLAN_IE_RSN pRSN, - IN PWLAN_IE_RSN_EXT pRSNWPA, - IN PWLAN_IE_COUNTRY pIE_Country, - IN PWLAN_IE_QUIET pIE_Quiet, - IN UINT uIELength, - IN PBYTE pbyIEs, - IN HANDLE pRxPacketContext + HANDLE hDeviceContext, + PBYTE abyBSSIDAddr, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + UINT uIELength, + PBYTE pbyIEs, + HANDLE pRxPacketContext ) { @@ -604,24 +604,24 @@ BSSbInsertToBSSList ( BOOL BSSbUpdateToBSSList ( - IN HANDLE hDeviceContext, - IN QWORD qwTimestamp, - IN WORD wBeaconInterval, - IN WORD wCapInfo, - IN BYTE byCurrChannel, - IN BOOL bChannelHit, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates, - IN PERPObject psERP, - IN PWLAN_IE_RSN pRSN, - IN PWLAN_IE_RSN_EXT pRSNWPA, - IN PWLAN_IE_COUNTRY pIE_Country, - IN PWLAN_IE_QUIET pIE_Quiet, - IN PKnownBSS pBSSList, - IN UINT uIELength, - IN PBYTE pbyIEs, - IN HANDLE pRxPacketContext + HANDLE hDeviceContext, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + BOOL bChannelHit, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + PKnownBSS pBSSList, + UINT uIELength, + PBYTE pbyIEs, + HANDLE pRxPacketContext ) { int ii, jj; @@ -770,8 +770,8 @@ BSSbUpdateToBSSList ( BOOL BSSbIsSTAInNodeDB( - IN HANDLE hDeviceContext, - IN PBYTE abyDstAddr, + HANDLE hDeviceContext, + PBYTE abyDstAddr, OUT PUINT puNodeIndex ) { @@ -806,7 +806,7 @@ BSSbIsSTAInNodeDB( -*/ VOID BSSvCreateOneNode( - IN HANDLE hDeviceContext, + HANDLE hDeviceContext, OUT PUINT puNodeIndex ) { @@ -871,8 +871,8 @@ BSSvCreateOneNode( -*/ VOID BSSvRemoveOneNode( - IN HANDLE hDeviceContext, - IN UINT uNodeIndex + HANDLE hDeviceContext, + UINT uNodeIndex ) { @@ -904,10 +904,10 @@ BSSvRemoveOneNode( VOID BSSvUpdateAPNode( - IN HANDLE hDeviceContext, - IN PWORD pwCapInfo, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates + HANDLE hDeviceContext, + PWORD pwCapInfo, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -964,7 +964,7 @@ BSSvUpdateAPNode( VOID BSSvAddMulticastNode( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1011,7 +1011,7 @@ BSSvAddMulticastNode( VOID BSSvSecondCallBack( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1397,10 +1397,10 @@ else { VOID BSSvUpdateNodeTxCounter( - IN HANDLE hDeviceContext, - IN PSStatCounter pStatistic, - IN BYTE byTSR, - IN BYTE byPktNO + HANDLE hDeviceContext, + PSStatCounter pStatistic, + BYTE byTSR, + BYTE byPktNO ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1566,8 +1566,8 @@ BSSvUpdateNodeTxCounter( VOID BSSvClearNodeDBTable( - IN HANDLE hDeviceContext, - IN UINT uStartIndex + HANDLE hDeviceContext, + UINT uStartIndex ) { @@ -1594,7 +1594,7 @@ BSSvClearNodeDBTable( VOID s_vCheckSensitivity( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1638,7 +1638,7 @@ VOID s_vCheckSensitivity( #ifdef Calcu_LinkQual VOID s_uCalculateLinkQual( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1687,7 +1687,7 @@ else VOID BSSvClearAnyBSSJoinRecord ( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1701,7 +1701,7 @@ BSSvClearAnyBSSJoinRecord ( } VOID s_vCheckPreEDThreshold( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h index f365b6b..eec6cea 100644 --- a/drivers/staging/vt6656/bssdb.h +++ b/drivers/staging/vt6656/bssdb.h @@ -233,127 +233,127 @@ typedef struct tagKnownNodeDB { PKnownBSS BSSpSearchBSSList( - IN HANDLE hDeviceContext, - IN PBYTE pbyDesireBSSID, - IN PBYTE pbyDesireSSID, - IN CARD_PHY_TYPE ePhyType + HANDLE hDeviceContext, + PBYTE pbyDesireBSSID, + PBYTE pbyDesireSSID, + CARD_PHY_TYPE ePhyType ); PKnownBSS BSSpAddrIsInBSSList( - IN HANDLE hDeviceContext, - IN PBYTE abyBSSID, - IN PWLAN_IE_SSID pSSID + HANDLE hDeviceContext, + PBYTE abyBSSID, + PWLAN_IE_SSID pSSID ); VOID BSSvClearBSSList( - IN HANDLE hDeviceContext, - IN BOOL bKeepCurrBSSID + HANDLE hDeviceContext, + BOOL bKeepCurrBSSID ); BOOL BSSbInsertToBSSList( - IN HANDLE hDeviceContext, - IN PBYTE abyBSSIDAddr, - IN QWORD qwTimestamp, - IN WORD wBeaconInterval, - IN WORD wCapInfo, - IN BYTE byCurrChannel, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates, - IN PERPObject psERP, - IN PWLAN_IE_RSN pRSN, - IN PWLAN_IE_RSN_EXT pRSNWPA, - IN PWLAN_IE_COUNTRY pIE_Country, - IN PWLAN_IE_QUIET pIE_Quiet, - IN UINT uIELength, - IN PBYTE pbyIEs, - IN HANDLE pRxPacketContext + HANDLE hDeviceContext, + PBYTE abyBSSIDAddr, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + UINT uIELength, + PBYTE pbyIEs, + HANDLE pRxPacketContext ); BOOL BSSbUpdateToBSSList( - IN HANDLE hDeviceContext, - IN QWORD qwTimestamp, - IN WORD wBeaconInterval, - IN WORD wCapInfo, - IN BYTE byCurrChannel, - IN BOOL bChannelHit, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates, - IN PERPObject psERP, - IN PWLAN_IE_RSN pRSN, - IN PWLAN_IE_RSN_EXT pRSNWPA, - IN PWLAN_IE_COUNTRY pIE_Country, - IN PWLAN_IE_QUIET pIE_Quiet, - IN PKnownBSS pBSSList, - IN UINT uIELength, - IN PBYTE pbyIEs, - IN HANDLE pRxPacketContext + HANDLE hDeviceContext, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + BOOL bChannelHit, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + PKnownBSS pBSSList, + UINT uIELength, + PBYTE pbyIEs, + HANDLE pRxPacketContext ); BOOL BSSbIsSTAInNodeDB( - IN HANDLE hDeviceContext, - IN PBYTE abyDstAddr, + HANDLE hDeviceContext, + PBYTE abyDstAddr, OUT PUINT puNodeIndex ); VOID BSSvCreateOneNode( - IN HANDLE hDeviceContext, + HANDLE hDeviceContext, OUT PUINT puNodeIndex ); VOID BSSvUpdateAPNode( - IN HANDLE hDeviceContext, - IN PWORD pwCapInfo, - IN PWLAN_IE_SUPP_RATES pItemRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates + HANDLE hDeviceContext, + PWORD pwCapInfo, + PWLAN_IE_SUPP_RATES pItemRates, + PWLAN_IE_SUPP_RATES pExtSuppRates ); VOID BSSvSecondCallBack( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); VOID BSSvUpdateNodeTxCounter( - IN HANDLE hDeviceContext, - IN PSStatCounter pStatistic, - IN BYTE byTSR, - IN BYTE byPktNO + HANDLE hDeviceContext, + PSStatCounter pStatistic, + BYTE byTSR, + BYTE byPktNO ); VOID BSSvRemoveOneNode( - IN HANDLE hDeviceContext, - IN UINT uNodeIndex + HANDLE hDeviceContext, + UINT uNodeIndex ); VOID BSSvAddMulticastNode( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); VOID BSSvClearNodeDBTable( - IN HANDLE hDeviceContext, - IN UINT uStartIndex + HANDLE hDeviceContext, + UINT uStartIndex ); VOID BSSvClearAnyBSSJoinRecord( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); #endif //__BSSDB_H__ diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index d73efee..4ad1e94 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -224,8 +224,8 @@ WORD swGetOFDMControlRate (PVOID pDeviceHandler, WORD wRateIdx) */ VOID CARDvCaculateOFDMRParameter ( - IN WORD wRate, - IN BYTE byBBType, + WORD wRate, + BYTE byBBType, OUT PBYTE pbyTxRate, OUT PBYTE pbyRsvTime ) @@ -1080,10 +1080,10 @@ void CARDvSetBSSMode (PVOID pDeviceHandler) -*/ BOOL CARDbChannelSwitch ( - IN PVOID pDeviceHandler, - IN BYTE byMode, - IN BYTE byNewChannel, - IN BYTE byCount + PVOID pDeviceHandler, + BYTE byMode, + BYTE byNewChannel, + BYTE byCount ) { PSDevice pDevice = (PSDevice) pDeviceHandler; diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index aa90c2c..16beb71 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -83,10 +83,10 @@ void CARDvSetBSSMode(PVOID pDeviceHandler); BOOL CARDbChannelSwitch ( - IN PVOID pDeviceHandler, - IN BYTE byMode, - IN BYTE byNewChannel, - IN BYTE byCount + PVOID pDeviceHandler, + BYTE byMode, + BYTE byNewChannel, + BYTE byCount ); #endif // __CARD_H__ diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index f7136b0..32500af 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -425,7 +425,7 @@ exit: ************************************************************************/ BOOL CHvChannelGetList ( - IN UINT uCountryCodeIdx, + UINT uCountryCodeIdx, OUT PBYTE pbyChannelTable ) { diff --git a/drivers/staging/vt6656/channel.h b/drivers/staging/vt6656/channel.h index 2306b20..c965d6a 100644 --- a/drivers/staging/vt6656/channel.h +++ b/drivers/staging/vt6656/channel.h @@ -50,7 +50,7 @@ BYTE CHbyGetChannelMapping(BYTE byChannelNumber); BOOL CHvChannelGetList ( - IN UINT uCountryCodeIdx, + UINT uCountryCodeIdx, OUT PBYTE pbyChannelTable ); diff --git a/drivers/staging/vt6656/control.h b/drivers/staging/vt6656/control.h index 4d9a777..106c9e9 100644 --- a/drivers/staging/vt6656/control.h +++ b/drivers/staging/vt6656/control.h @@ -54,27 +54,27 @@ /*--------------------- Export Functions --------------------------*/ void ControlvWriteByte( - IN PSDevice pDevice, - IN BYTE byRegType, - IN BYTE byRegOfs, - IN BYTE byData + PSDevice pDevice, + BYTE byRegType, + BYTE byRegOfs, + BYTE byData ); void ControlvReadByte( - IN PSDevice pDevice, - IN BYTE byRegType, - IN BYTE byRegOfs, - IN PBYTE pbyData + PSDevice pDevice, + BYTE byRegType, + BYTE byRegOfs, + PBYTE pbyData ); void ControlvMaskByte( - IN PSDevice pDevice, - IN BYTE byRegType, - IN BYTE byRegOfs, - IN BYTE byMask, - IN BYTE byData + PSDevice pDevice, + BYTE byRegType, + BYTE byRegOfs, + BYTE byMask, + BYTE byData ); #endif // __RCV_H__ diff --git a/drivers/staging/vt6656/datarate.c b/drivers/staging/vt6656/datarate.c index 968feb4..e487af5 100644 --- a/drivers/staging/vt6656/datarate.c +++ b/drivers/staging/vt6656/datarate.c @@ -66,14 +66,14 @@ const BYTE acbyIERate[MAX_RATE] = /*--------------------- Static Functions --------------------------*/ VOID s_vResetCounter ( - IN PKnownNodeDB psNodeDBTable + PKnownNodeDB psNodeDBTable ); VOID s_vResetCounter ( - IN PKnownNodeDB psNodeDBTable + PKnownNodeDB psNodeDBTable ) { BYTE ii; @@ -107,7 +107,7 @@ s_vResetCounter ( -*/ BYTE DATARATEbyGetRateIdx ( - IN BYTE byRate + BYTE byRate ) { BYTE ii; @@ -161,7 +161,7 @@ DATARATEbyGetRateIdx ( -*/ WORD RATEwGetRateIdx( - IN BYTE byRate + BYTE byRate ) { WORD ii; @@ -197,10 +197,10 @@ RATEwGetRateIdx( -*/ VOID RATEvParseMaxRate ( - IN PVOID pDeviceHandler, - IN PWLAN_IE_SUPP_RATES pItemRates, - IN PWLAN_IE_SUPP_RATES pItemExtRates, - IN BOOL bUpdateBasicRate, + PVOID pDeviceHandler, + PWLAN_IE_SUPP_RATES pItemRates, + PWLAN_IE_SUPP_RATES pItemExtRates, + BOOL bUpdateBasicRate, OUT PWORD pwMaxBasicRate, OUT PWORD pwMaxSuppRate, OUT PWORD pwSuppRate, @@ -310,8 +310,8 @@ UINT uRateLen; VOID RATEvTxRateFallBack ( - IN PVOID pDeviceHandler, - IN PKnownNodeDB psNodeDBTable + PVOID pDeviceHandler, + PKnownNodeDB psNodeDBTable ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -473,9 +473,9 @@ if (wIdxUpRate == RATE_54M ) { //11a/g -*/ BYTE RATEuSetIE ( - IN PWLAN_IE_SUPP_RATES pSrcRates, - IN PWLAN_IE_SUPP_RATES pDstRates, - IN UINT uRateLen + PWLAN_IE_SUPP_RATES pSrcRates, + PWLAN_IE_SUPP_RATES pDstRates, + UINT uRateLen ) { UINT ii, uu, uRateCnt = 0; diff --git a/drivers/staging/vt6656/datarate.h b/drivers/staging/vt6656/datarate.h index 68f206e..5024f71 100644 --- a/drivers/staging/vt6656/datarate.h +++ b/drivers/staging/vt6656/datarate.h @@ -71,10 +71,10 @@ VOID RATEvParseMaxRate( - IN PVOID pDeviceHandler, - IN PWLAN_IE_SUPP_RATES pItemRates, - IN PWLAN_IE_SUPP_RATES pItemExtRates, - IN BOOL bUpdateBasicRate, + PVOID pDeviceHandler, + PWLAN_IE_SUPP_RATES pItemRates, + PWLAN_IE_SUPP_RATES pItemExtRates, + BOOL bUpdateBasicRate, OUT PWORD pwMaxBasicRate, OUT PWORD pwMaxSuppRate, OUT PWORD pwSuppRate, @@ -84,26 +84,26 @@ RATEvParseMaxRate( VOID RATEvTxRateFallBack( - IN PVOID pDeviceHandler, - IN PKnownNodeDB psNodeDBTable + PVOID pDeviceHandler, + PKnownNodeDB psNodeDBTable ); BYTE RATEuSetIE( - IN PWLAN_IE_SUPP_RATES pSrcRates, - IN PWLAN_IE_SUPP_RATES pDstRates, - IN UINT uRateLen + PWLAN_IE_SUPP_RATES pSrcRates, + PWLAN_IE_SUPP_RATES pDstRates, + UINT uRateLen ); WORD RATEwGetRateIdx( - IN BYTE byRate + BYTE byRate ); BYTE DATARATEbyGetRateIdx( - IN BYTE byRate + BYTE byRate ); diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 9e833bb..957b762 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -74,13 +74,12 @@ const BYTE acbyRxRate[MAX_RATE] = /*--------------------- Static Functions --------------------------*/ -static BYTE s_byGetRateIdx(IN BYTE byRate); - +static BYTE s_byGetRateIdx(BYTE byRate); static VOID s_vGetDASA( - IN PBYTE pbyRxBufferAddr, + PBYTE pbyRxBufferAddr, OUT PUINT pcbHeaderSize, OUT PSEthernetHeader psEthHeader ); @@ -88,37 +87,37 @@ s_vGetDASA( static VOID s_vProcessRxMACHeader ( - IN PSDevice pDevice, - IN PBYTE pbyRxBufferAddr, - IN UINT cbPacketSize, - IN BOOL bIsWEP, - IN BOOL bExtIV, + PSDevice pDevice, + PBYTE pbyRxBufferAddr, + UINT cbPacketSize, + BOOL bIsWEP, + BOOL bExtIV, OUT PUINT pcbHeadSize ); static BOOL s_bAPModeRxCtl( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN INT iSANodeIndex + PSDevice pDevice, + PBYTE pbyFrame, + INT iSANodeIndex ); static BOOL s_bAPModeRxData ( - IN PSDevice pDevice, - IN struct sk_buff* skb, - IN UINT FrameSize, - IN UINT cbHeaderOffset, - IN INT iSANodeIndex, - IN INT iDANodeIndex + PSDevice pDevice, + struct sk_buff *skb, + UINT FrameSize, + UINT cbHeaderOffset, + INT iSANodeIndex, + INT iDANodeIndex ); static BOOL s_bHandleRxEncryption( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN UINT FrameSize, - IN PBYTE pbyRsr, + PSDevice pDevice, + PBYTE pbyFrame, + UINT FrameSize, + PBYTE pbyRsr, OUT PBYTE pbyNewRsr, OUT PSKeyItem *pKeyOut, int * pbExtIV, @@ -128,12 +127,12 @@ static BOOL s_bHandleRxEncryption( static BOOL s_bHostWepRxEncryption( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN UINT FrameSize, - IN PBYTE pbyRsr, - IN BOOL bOnFly, - IN PSKeyItem pKey, + PSDevice pDevice, + PBYTE pbyFrame, + UINT FrameSize, + PBYTE pbyRsr, + BOOL bOnFly, + PSKeyItem pKey, OUT PBYTE pbyNewRsr, int * pbExtIV, OUT PWORD pwRxTSC15_0, @@ -163,11 +162,11 @@ static BOOL s_bHostWepRxEncryption( static VOID s_vProcessRxMACHeader ( - IN PSDevice pDevice, - IN PBYTE pbyRxBufferAddr, - IN UINT cbPacketSize, - IN BOOL bIsWEP, - IN BOOL bExtIV, + PSDevice pDevice, + PBYTE pbyRxBufferAddr, + UINT cbPacketSize, + BOOL bIsWEP, + BOOL bExtIV, OUT PUINT pcbHeadSize ) { @@ -247,7 +246,7 @@ s_vProcessRxMACHeader ( -static BYTE s_byGetRateIdx (IN BYTE byRate) +static BYTE s_byGetRateIdx(BYTE byRate) { BYTE byRateIdx; @@ -262,7 +261,7 @@ static BYTE s_byGetRateIdx (IN BYTE byRate) static VOID s_vGetDASA ( - IN PBYTE pbyRxBufferAddr, + PBYTE pbyRxBufferAddr, OUT PUINT pcbHeaderSize, OUT PSEthernetHeader psEthHeader ) @@ -317,9 +316,9 @@ s_vGetDASA ( BOOL RXbBulkInProcessData ( - IN PSDevice pDevice, - IN PRCB pRCB, - IN ULONG BytesToIndicate + PSDevice pDevice, + PRCB pRCB, + ULONG BytesToIndicate ) { @@ -1022,9 +1021,9 @@ RXbBulkInProcessData ( static BOOL s_bAPModeRxCtl ( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN INT iSANodeIndex + PSDevice pDevice, + PBYTE pbyFrame, + INT iSANodeIndex ) { PS802_11Header p802_11Header; @@ -1144,10 +1143,10 @@ static BOOL s_bAPModeRxCtl ( } static BOOL s_bHandleRxEncryption ( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN UINT FrameSize, - IN PBYTE pbyRsr, + PSDevice pDevice, + PBYTE pbyFrame, + UINT FrameSize, + PBYTE pbyRsr, OUT PBYTE pbyNewRsr, OUT PSKeyItem *pKeyOut, int * pbExtIV, @@ -1290,12 +1289,12 @@ static BOOL s_bHandleRxEncryption ( static BOOL s_bHostWepRxEncryption ( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN UINT FrameSize, - IN PBYTE pbyRsr, - IN BOOL bOnFly, - IN PSKeyItem pKey, + PSDevice pDevice, + PBYTE pbyFrame, + UINT FrameSize, + PBYTE pbyRsr, + BOOL bOnFly, + PSKeyItem pKey, OUT PBYTE pbyNewRsr, int * pbExtIV, OUT PWORD pwRxTSC15_0, @@ -1422,12 +1421,12 @@ static BOOL s_bHostWepRxEncryption ( static BOOL s_bAPModeRxData ( - IN PSDevice pDevice, - IN struct sk_buff* skb, - IN UINT FrameSize, - IN UINT cbHeaderOffset, - IN INT iSANodeIndex, - IN INT iDANodeIndex + PSDevice pDevice, + struct sk_buff *skb, + UINT FrameSize, + UINT cbHeaderOffset, + INT iSANodeIndex, + INT iDANodeIndex ) { @@ -1542,8 +1541,8 @@ RXvWorkItem( VOID RXvFreeRCB( - IN PRCB pRCB, - IN BOOL bReAllocSkb + PRCB pRCB, + BOOL bReAllocSkb ) { PSDevice pDevice = (PSDevice)pRCB->pDevice; diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h index df148b4..8e6dcee 100644 --- a/drivers/staging/vt6656/dpc.h +++ b/drivers/staging/vt6656/dpc.h @@ -53,15 +53,15 @@ RXvMngWorkItem( VOID RXvFreeRCB( - IN PRCB pRCB, - IN BOOL bReAllocSkb + PRCB pRCB, + BOOL bReAllocSkb ); BOOL RXbBulkInProcessData( - IN PSDevice pDevice, - IN PRCB pRCB, - IN ULONG BytesToIndicate + PSDevice pDevice, + PRCB pRCB, + ULONG BytesToIndicate ); #endif // __RXTX_H__ diff --git a/drivers/staging/vt6656/firmware.c b/drivers/staging/vt6656/firmware.c index 585b6b1..e1f96d7 100644 --- a/drivers/staging/vt6656/firmware.c +++ b/drivers/staging/vt6656/firmware.c @@ -770,7 +770,7 @@ const BYTE abyFirmware[] = { BOOL FIRMWAREbDownload( - IN PSDevice pDevice + PSDevice pDevice ) { NDIS_STATUS NdisStatus; @@ -820,7 +820,7 @@ FIRMWAREbDownload( BOOL FIRMWAREbBrach2Sram( - IN PSDevice pDevice + PSDevice pDevice ) { NDIS_STATUS NdisStatus; @@ -845,7 +845,7 @@ FIRMWAREbBrach2Sram( BOOL FIRMWAREbCheckVersion( - IN PSDevice pDevice + PSDevice pDevice ) { NTSTATUS ntStatus; diff --git a/drivers/staging/vt6656/firmware.h b/drivers/staging/vt6656/firmware.h index 97f8559..10e84cd 100644 --- a/drivers/staging/vt6656/firmware.h +++ b/drivers/staging/vt6656/firmware.h @@ -43,17 +43,17 @@ BOOL FIRMWAREbDownload( - IN PSDevice pDevice + PSDevice pDevice ); BOOL FIRMWAREbBrach2Sram( - IN PSDevice pDevice + PSDevice pDevice ); BOOL FIRMWAREbCheckVersion( - IN PSDevice pDevice + PSDevice pDevice ); diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 824c67d..a47eeb0 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -94,7 +94,7 @@ INTvWorkItem(PVOID Context) } NTSTATUS -INTnsProcessData(IN PSDevice pDevice) +INTnsProcessData(PSDevice pDevice) { NTSTATUS status = STATUS_SUCCESS; PSINTData pINTData; diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h index 15e815a..c3476cf 100644 --- a/drivers/staging/vt6656/int.h +++ b/drivers/staging/vt6656/int.h @@ -74,7 +74,7 @@ INTvWorkItem( NTSTATUS INTnsProcessData( - IN PSDevice pDevice + PSDevice pDevice ); #endif // __INT_H__ diff --git a/drivers/staging/vt6656/ioctl.h b/drivers/staging/vt6656/ioctl.h index 07d2283..d3f49d4 100644 --- a/drivers/staging/vt6656/ioctl.h +++ b/drivers/staging/vt6656/ioctl.h @@ -44,10 +44,10 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq); /* VOID vConfigWEPKey ( - IN PSDevice pDevice, - IN DWORD dwKeyIndex, - IN PBYTE pbyKey, - IN ULONG uKeyLength + PSDevice pDevice, + DWORD dwKeyIndex, + PBYTE pbyKey, + ULONG uKeyLength ); */ diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 0cd2751..6cdc85e 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -163,9 +163,9 @@ VOID KeyvInitTable(PVOID pDeviceHandler, PSKeyManagement pTable) * */ BOOL KeybGetKey ( - IN PSKeyManagement pTable, - IN PBYTE pbyBSSID, - IN DWORD dwKeyIndex, + PSKeyManagement pTable, + PBYTE pbyBSSID, + DWORD dwKeyIndex, OUT PSKeyItem *pKey ) { @@ -562,9 +562,9 @@ VOID KeyvRemoveAllWEPKey ( * */ BOOL KeybGetTransmitKey ( - IN PSKeyManagement pTable, - IN PBYTE pbyBSSID, - IN DWORD dwKeyType, + PSKeyManagement pTable, + PBYTE pbyBSSID, + DWORD dwKeyType, OUT PSKeyItem *pKey ) { @@ -642,7 +642,7 @@ BOOL KeybGetTransmitKey ( * */ BOOL KeybCheckPairewiseKey ( - IN PSKeyManagement pTable, + PSKeyManagement pTable, OUT PSKeyItem *pKey ) { diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index da8dfe0..11236e8 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -100,9 +100,9 @@ typedef struct tagSKeyManagement VOID KeyvInitTable(PVOID pDeviceHandler, PSKeyManagement pTable); BOOL KeybGetKey( - IN PSKeyManagement pTable, - IN PBYTE pbyBSSID, - IN DWORD dwKeyIndex, + PSKeyManagement pTable, + PBYTE pbyBSSID, + DWORD dwKeyIndex, OUT PSKeyItem *pKey ); @@ -142,14 +142,14 @@ VOID KeyvRemoveAllWEPKey( ); BOOL KeybGetTransmitKey( - IN PSKeyManagement pTable, - IN PBYTE pbyBSSID, - IN DWORD dwKeyType, + PSKeyManagement pTable, + PBYTE pbyBSSID, + DWORD dwKeyType, OUT PSKeyItem *pKey ); BOOL KeybCheckPairewiseKey( - IN PSKeyManagement pTable, + PSKeyManagement pTable, OUT PSKeyItem *pKey ); diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index b5702b0..e50093e 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -78,8 +78,8 @@ static int msglevel =MSG_LEVEL_INFO; VOID PSvEnablePowerSaving( - IN HANDLE hDeviceContext, - IN WORD wListenInterval + HANDLE hDeviceContext, + WORD wListenInterval ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -156,7 +156,7 @@ PSvEnablePowerSaving( VOID PSvDisablePowerSaving( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -201,9 +201,9 @@ PSvDisablePowerSaving( BOOL PSbConsiderPowerDown( - IN HANDLE hDeviceContext, - IN BOOL bCheckRxDMA, - IN BOOL bCheckCountToWakeUp + HANDLE hDeviceContext, + BOOL bCheckRxDMA, + BOOL bCheckCountToWakeUp ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -264,7 +264,7 @@ PSbConsiderPowerDown( VOID PSvSendPSPOLL( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -310,7 +310,7 @@ PSvSendPSPOLL( -*/ BOOL PSbSendNullPacket( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -390,7 +390,7 @@ PSbSendNullPacket( BOOL PSbIsNextTBTTWakeUp( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index c33c93a..0a14811 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -45,40 +45,40 @@ /*--------------------- Export Functions --------------------------*/ -// IN PSDevice pDevice -// IN PSDevice hDeviceContext +/* PSDevice pDevice */ +/* PSDevice hDeviceContext */ BOOL PSbConsiderPowerDown( - IN HANDLE hDeviceContext, - IN BOOL bCheckRxDMA, - IN BOOL bCheckCountToWakeUp + HANDLE hDeviceContext, + BOOL bCheckRxDMA, + BOOL bCheckCountToWakeUp ); VOID PSvDisablePowerSaving( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); VOID PSvEnablePowerSaving( - IN HANDLE hDeviceContext, - IN WORD wListenInterval + HANDLE hDeviceContext, + WORD wListenInterval ); VOID PSvSendPSPOLL( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); BOOL PSbSendNullPacket( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); BOOL PSbIsNextTBTTWakeUp( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); #endif //__POWER_H__ diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 405c4f7..d69925f 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -757,9 +757,9 @@ BOOL IFRFbWriteEmbeded (PSDevice pDevice, DWORD dwData) * */ BOOL RFbSetPower ( - IN PSDevice pDevice, - IN UINT uRATE, - IN UINT uCH + PSDevice pDevice, + UINT uRATE, + UINT uCH ) { BOOL bResult = TRUE; @@ -811,9 +811,9 @@ BYTE byPwr = pDevice->byCCKPwr; * */ BOOL RFbRawSetPower ( - IN PSDevice pDevice, - IN BYTE byPwr, - IN UINT uRATE + PSDevice pDevice, + BYTE byPwr, + UINT uRATE ) { BOOL bResult = TRUE; @@ -956,8 +956,8 @@ BOOL bResult = TRUE; -*/ VOID RFvRSSITodBm ( - IN PSDevice pDevice, - IN BYTE byCurrRSSI, + PSDevice pDevice, + BYTE byCurrRSSI, long * pldBm ) { @@ -986,7 +986,7 @@ RFvRSSITodBm ( VOID RFbRFTableDownload ( - IN PSDevice pDevice + PSDevice pDevice ) { WORD wLength1 = 0,wLength2 = 0 ,wLength3 = 0; @@ -1133,9 +1133,9 @@ BYTE abyArray[256]; // RobertYu:20060412, TWIF1.11 adjust LO Current for 11b mode BOOL s_bVT3226D0_11bLoCurrentAdjust( - IN PSDevice pDevice, - IN BYTE byChannel, - IN BOOL b11bMode ) + PSDevice pDevice, + BYTE byChannel, + BOOL b11bMode) { BOOL bResult; diff --git a/drivers/staging/vt6656/rf.h b/drivers/staging/vt6656/rf.h index 55d882f..2215986 100644 --- a/drivers/staging/vt6656/rf.h +++ b/drivers/staging/vt6656/rf.h @@ -65,33 +65,33 @@ extern const BYTE RFaby11aChannelIndex[200]; BOOL IFRFbWriteEmbeded(PSDevice pDevice, DWORD dwData); BOOL RFbSetPower ( - IN PSDevice pDevice, - IN UINT uRATE, - IN UINT uCH + PSDevice pDevice, + UINT uRATE, + UINT uCH ); BOOL RFbRawSetPower( - IN PSDevice pDevice, - IN BYTE byPwr, - IN UINT uRATE + PSDevice pDevice, + BYTE byPwr, + UINT uRATE ); VOID RFvRSSITodBm ( - IN PSDevice pDevice, - IN BYTE byCurrRSSI, + PSDevice pDevice, + BYTE byCurrRSSI, long * pldBm ); VOID RFbRFTableDownload ( - IN PSDevice pDevice + PSDevice pDevice ); BOOL s_bVT3226D0_11bLoCurrentAdjust( - IN PSDevice pDevice, - IN BYTE byChannel, - IN BOOL b11bMode + PSDevice pDevice, + BYTE byChannel, + BOOL b11bMode ); #endif // __RF_H__ diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 03b8b4d..1d7ca22 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -115,11 +115,11 @@ const WORD wFB_Opt1[2][5] = { static VOID s_vSaveTxPktInfo( - IN PSDevice pDevice, - IN BYTE byPktNum, - IN PBYTE pbyDestAddr, - IN WORD wPktLength, - IN WORD wFIFOCtl + PSDevice pDevice, + BYTE byPktNum, + PBYTE pbyDestAddr, + WORD wPktLength, + WORD wFIFOCtl ); static @@ -132,34 +132,34 @@ s_vGetFreeContext( static VOID s_vGenerateTxParameter( - IN PSDevice pDevice, - IN BYTE byPktType, - IN WORD wCurrentRate, - IN PVOID pTxBufHead, - IN PVOID pvRrvTime, - IN PVOID pvRTS, - IN PVOID pvCTS, - IN UINT cbFrameSize, - IN BOOL bNeedACK, - IN UINT uDMAIdx, - IN PSEthernetHeader psEthHeader + PSDevice pDevice, + BYTE byPktType, + WORD wCurrentRate, + PVOID pTxBufHead, + PVOID pvRrvTime, + PVOID pvRTS, + PVOID pvCTS, + UINT cbFrameSize, + BOOL bNeedACK, + UINT uDMAIdx, + PSEthernetHeader psEthHeader ); static UINT s_uFillDataHead ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN WORD wCurrentRate, - IN PVOID pTxDataHead, - IN UINT cbFrameLength, - IN UINT uDMAIdx, - IN BOOL bNeedAck, - IN UINT uFragIdx, - IN UINT cbLastFragmentSize, - IN UINT uMACfragNum, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byPktType, + WORD wCurrentRate, + PVOID pTxDataHead, + UINT cbFrameLength, + UINT uDMAIdx, + BOOL bNeedAck, + UINT uFragIdx, + UINT cbLastFragmentSize, + UINT uMACfragNum, + BYTE byFBOption ); @@ -168,112 +168,112 @@ s_uFillDataHead ( static VOID s_vGenerateMACHeader ( - IN PSDevice pDevice, - IN PBYTE pbyBufferAddr, - IN WORD wDuration, - IN PSEthernetHeader psEthHeader, - IN BOOL bNeedEncrypt, - IN WORD wFragType, - IN UINT uDMAIdx, - IN UINT uFragIdx + PSDevice pDevice, + PBYTE pbyBufferAddr, + WORD wDuration, + PSEthernetHeader psEthHeader, + BOOL bNeedEncrypt, + WORD wFragType, + UINT uDMAIdx, + UINT uFragIdx ); static VOID s_vFillTxKey( - IN PSDevice pDevice, - IN PBYTE pbyBuf, - IN PBYTE pbyIVHead, - IN PSKeyItem pTransmitKey, - IN PBYTE pbyHdrBuf, - IN WORD wPayloadLen, + PSDevice pDevice, + PBYTE pbyBuf, + PBYTE pbyIVHead, + PSKeyItem pTransmitKey, + PBYTE pbyHdrBuf, + WORD wPayloadLen, OUT PBYTE pMICHDR ); static VOID s_vSWencryption ( - IN PSDevice pDevice, - IN PSKeyItem pTransmitKey, - IN PBYTE pbyPayloadHead, - IN WORD wPayloadSize + PSDevice pDevice, + PSKeyItem pTransmitKey, + PBYTE pbyPayloadHead, + WORD wPayloadSize ); static UINT s_uGetTxRsvTime ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN UINT cbFrameLength, - IN WORD wRate, - IN BOOL bNeedAck + PSDevice pDevice, + BYTE byPktType, + UINT cbFrameLength, + WORD wRate, + BOOL bNeedAck ); static UINT s_uGetRTSCTSRsvTime ( - IN PSDevice pDevice, - IN BYTE byRTSRsvType, - IN BYTE byPktType, - IN UINT cbFrameLength, - IN WORD wCurrentRate + PSDevice pDevice, + BYTE byRTSRsvType, + BYTE byPktType, + UINT cbFrameLength, + WORD wCurrentRate ); static VOID s_vFillCTSHead ( - IN PSDevice pDevice, - IN UINT uDMAIdx, - IN BYTE byPktType, - IN PVOID pvCTS, - IN UINT cbFrameLength, - IN BOOL bNeedAck, - IN BOOL bDisCRC, - IN WORD wCurrentRate, - IN BYTE byFBOption + PSDevice pDevice, + UINT uDMAIdx, + BYTE byPktType, + PVOID pvCTS, + UINT cbFrameLength, + BOOL bNeedAck, + BOOL bDisCRC, + WORD wCurrentRate, + BYTE byFBOption ); static VOID s_vFillRTSHead( - IN PSDevice pDevice, - IN BYTE byPktType, - IN PVOID pvRTS, - IN UINT cbFrameLength, - IN BOOL bNeedAck, - IN BOOL bDisCRC, - IN PSEthernetHeader psEthHeader, - IN WORD wCurrentRate, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byPktType, + PVOID pvRTS, + UINT cbFrameLength, + BOOL bNeedAck, + BOOL bDisCRC, + PSEthernetHeader psEthHeader, + WORD wCurrentRate, + BYTE byFBOption ); static UINT s_uGetDataDuration ( - IN PSDevice pDevice, - IN BYTE byDurType, - IN UINT cbFrameLength, - IN BYTE byPktType, - IN WORD wRate, - IN BOOL bNeedAck, - IN UINT uFragIdx, - IN UINT cbLastFragmentSize, - IN UINT uMACfragNum, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byDurType, + UINT cbFrameLength, + BYTE byPktType, + WORD wRate, + BOOL bNeedAck, + UINT uFragIdx, + UINT cbLastFragmentSize, + UINT uMACfragNum, + BYTE byFBOption ); static UINT s_uGetRTSCTSDuration ( - IN PSDevice pDevice, - IN BYTE byDurType, - IN UINT cbFrameLength, - IN BYTE byPktType, - IN WORD wRate, - IN BOOL bNeedAck, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byDurType, + UINT cbFrameLength, + BYTE byPktType, + WORD wRate, + BOOL bNeedAck, + BYTE byFBOption ); @@ -333,12 +333,12 @@ s_vSaveTxPktInfo(PSDevice pDevice, BYTE byPktNum, PBYTE pbyDestAddr, WORD wPktLe static VOID s_vFillTxKey ( - IN PSDevice pDevice, - IN PBYTE pbyBuf, - IN PBYTE pbyIVHead, - IN PSKeyItem pTransmitKey, - IN PBYTE pbyHdrBuf, - IN WORD wPayloadLen, + PSDevice pDevice, + PBYTE pbyBuf, + PBYTE pbyIVHead, + PSKeyItem pTransmitKey, + PBYTE pbyHdrBuf, + WORD wPayloadLen, OUT PBYTE pMICHDR ) { @@ -450,10 +450,10 @@ s_vFillTxKey ( static VOID s_vSWencryption ( - IN PSDevice pDevice, - IN PSKeyItem pTransmitKey, - IN PBYTE pbyPayloadHead, - IN WORD wPayloadSize + PSDevice pDevice, + PSKeyItem pTransmitKey, + PBYTE pbyPayloadHead, + WORD wPayloadSize ) { UINT cbICVlen = 4; @@ -499,11 +499,11 @@ s_vSWencryption ( static UINT s_uGetTxRsvTime ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN UINT cbFrameLength, - IN WORD wRate, - IN BOOL bNeedAck + PSDevice pDevice, + BYTE byPktType, + UINT cbFrameLength, + WORD wRate, + BOOL bNeedAck ) { UINT uDataTime, uAckTime; @@ -527,11 +527,11 @@ s_uGetTxRsvTime ( static UINT s_uGetRTSCTSRsvTime ( - IN PSDevice pDevice, - IN BYTE byRTSRsvType, - IN BYTE byPktType, - IN UINT cbFrameLength, - IN WORD wCurrentRate + PSDevice pDevice, + BYTE byRTSRsvType, + BYTE byPktType, + UINT cbFrameLength, + WORD wCurrentRate ) { UINT uRrvTime , uRTSTime, uCTSTime, uAckTime, uDataTime; @@ -569,16 +569,16 @@ s_uGetRTSCTSRsvTime ( static UINT s_uGetDataDuration ( - IN PSDevice pDevice, - IN BYTE byDurType, - IN UINT cbFrameLength, - IN BYTE byPktType, - IN WORD wRate, - IN BOOL bNeedAck, - IN UINT uFragIdx, - IN UINT cbLastFragmentSize, - IN UINT uMACfragNum, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byDurType, + UINT cbFrameLength, + BYTE byPktType, + WORD wRate, + BOOL bNeedAck, + UINT uFragIdx, + UINT cbLastFragmentSize, + UINT uMACfragNum, + BYTE byFBOption ) { BOOL bLastFrag = 0; @@ -739,13 +739,13 @@ s_uGetDataDuration ( static UINT s_uGetRTSCTSDuration ( - IN PSDevice pDevice, - IN BYTE byDurType, - IN UINT cbFrameLength, - IN BYTE byPktType, - IN WORD wRate, - IN BOOL bNeedAck, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byDurType, + UINT cbFrameLength, + BYTE byPktType, + WORD wRate, + BOOL bNeedAck, + BYTE byFBOption ) { UINT uCTSTime = 0, uDurTime = 0; @@ -838,17 +838,17 @@ s_uGetRTSCTSDuration ( static UINT s_uFillDataHead ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN WORD wCurrentRate, - IN PVOID pTxDataHead, - IN UINT cbFrameLength, - IN UINT uDMAIdx, - IN BOOL bNeedAck, - IN UINT uFragIdx, - IN UINT cbLastFragmentSize, - IN UINT uMACfragNum, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byPktType, + WORD wCurrentRate, + PVOID pTxDataHead, + UINT cbFrameLength, + UINT uDMAIdx, + BOOL bNeedAck, + UINT uFragIdx, + UINT cbLastFragmentSize, + UINT uMACfragNum, + BYTE byFBOption ) { @@ -983,15 +983,15 @@ s_uFillDataHead ( static VOID s_vFillRTSHead ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN PVOID pvRTS, - IN UINT cbFrameLength, - IN BOOL bNeedAck, - IN BOOL bDisCRC, - IN PSEthernetHeader psEthHeader, - IN WORD wCurrentRate, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byPktType, + PVOID pvRTS, + UINT cbFrameLength, + BOOL bNeedAck, + BOOL bDisCRC, + PSEthernetHeader psEthHeader, + WORD wCurrentRate, + BYTE byFBOption ) { UINT uRTSFrameLen = 20; @@ -1211,15 +1211,15 @@ s_vFillRTSHead ( static VOID s_vFillCTSHead ( - IN PSDevice pDevice, - IN UINT uDMAIdx, - IN BYTE byPktType, - IN PVOID pvCTS, - IN UINT cbFrameLength, - IN BOOL bNeedAck, - IN BOOL bDisCRC, - IN WORD wCurrentRate, - IN BYTE byFBOption + PSDevice pDevice, + UINT uDMAIdx, + BYTE byPktType, + PVOID pvCTS, + UINT cbFrameLength, + BOOL bNeedAck, + BOOL bDisCRC, + WORD wCurrentRate, + BYTE byFBOption ) { UINT uCTSFrameLen = 14; @@ -1311,17 +1311,17 @@ s_vFillCTSHead ( static VOID s_vGenerateTxParameter ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN WORD wCurrentRate, - IN PVOID pTxBufHead, - IN PVOID pvRrvTime, - IN PVOID pvRTS, - IN PVOID pvCTS, - IN UINT cbFrameSize, - IN BOOL bNeedACK, - IN UINT uDMAIdx, - IN PSEthernetHeader psEthHeader + PSDevice pDevice, + BYTE byPktType, + WORD wCurrentRate, + PVOID pTxBufHead, + PVOID pvRrvTime, + PVOID pvRTS, + PVOID pvCTS, + UINT cbFrameSize, + BOOL bNeedACK, + UINT uDMAIdx, + PSEthernetHeader psEthHeader ) { UINT cbMACHdLen = WLAN_HDR_ADDR3_LEN; //24 @@ -1428,17 +1428,17 @@ s_vGenerateTxParameter ( BOOL s_bPacketToWirelessUsb( - IN PSDevice pDevice, - IN BYTE byPktType, - IN PBYTE usbPacketBuf, - IN BOOL bNeedEncryption, - IN UINT uSkbPacketLen, - IN UINT uDMAIdx, - IN PSEthernetHeader psEthHeader, - IN PBYTE pPacket, - IN PSKeyItem pTransmitKey, - IN UINT uNodeIndex, - IN WORD wCurrentRate, + PSDevice pDevice, + BYTE byPktType, + PBYTE usbPacketBuf, + BOOL bNeedEncryption, + UINT uSkbPacketLen, + UINT uDMAIdx, + PSEthernetHeader psEthHeader, + PBYTE pPacket, + PSKeyItem pTransmitKey, + UINT uNodeIndex, + WORD wCurrentRate, OUT UINT *pcbHeaderLen, OUT UINT *pcbTotalLen ) @@ -1858,14 +1858,14 @@ s_bPacketToWirelessUsb( VOID s_vGenerateMACHeader ( - IN PSDevice pDevice, - IN PBYTE pbyBufferAddr, - IN WORD wDuration, - IN PSEthernetHeader psEthHeader, - IN BOOL bNeedEncrypt, - IN WORD wFragType, - IN UINT uDMAIdx, - IN UINT uFragIdx + PSDevice pDevice, + PBYTE pbyBufferAddr, + WORD wDuration, + PSEthernetHeader psEthHeader, + BOOL bNeedEncrypt, + WORD wFragType, + UINT uDMAIdx, + UINT uFragIdx ) { PS802_11Header pMACHeader = (PS802_11Header)pbyBufferAddr; @@ -1958,8 +1958,8 @@ s_vGenerateMACHeader ( -*/ CMD_STATUS csMgmt_xmit( - IN PSDevice pDevice, - IN PSTxMgmtPacket pPacket + PSDevice pDevice, + PSTxMgmtPacket pPacket ) { BYTE byPktType; @@ -2251,8 +2251,8 @@ CMD_STATUS csMgmt_xmit( CMD_STATUS csBeacon_xmit( - IN PSDevice pDevice, - IN PSTxMgmtPacket pPacket + PSDevice pDevice, + PSTxMgmtPacket pPacket ) { @@ -2750,9 +2750,9 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb) { NTSTATUS nsDMA_tx_packet( - IN PSDevice pDevice, - IN UINT uDMAIdx, - IN struct sk_buff *skb + PSDevice pDevice, + UINT uDMAIdx, + struct sk_buff *skb ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -3168,10 +3168,10 @@ nsDMA_tx_packet( BOOL bRelayPacketSend ( - IN PSDevice pDevice, - IN PBYTE pbySkbData, - IN UINT uDataLen, - IN UINT uNodeIndex + PSDevice pDevice, + PBYTE pbySkbData, + UINT uDataLen, + UINT uNodeIndex ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 133f475..1160c03 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -667,17 +667,17 @@ typedef struct tagSBEACON_BUFFER BOOL bPacketToWirelessUsb( - IN PSDevice pDevice, - IN BYTE byPktType, - IN PBYTE usbPacketBuf, - IN BOOL bNeedEncrypt, - IN UINT cbPayloadSize, - IN UINT uDMAIdx, - IN PSEthernetHeader psEthHeader, - IN PBYTE pPacket, - IN PSKeyItem pTransmitKey, - IN UINT uNodeIndex, - IN WORD wCurrentRate, + PSDevice pDevice, + BYTE byPktType, + PBYTE usbPacketBuf, + BOOL bNeedEncrypt, + UINT cbPayloadSize, + UINT uDMAIdx, + PSEthernetHeader psEthHeader, + PBYTE pPacket, + PSKeyItem pTransmitKey, + UINT uNodeIndex, + WORD wCurrentRate, OUT UINT *pcbHeaderLen, OUT UINT *pcbTotalLen ); diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index 9ee3f43..2365fa4 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -37,10 +37,6 @@ #define VOID void #endif -#ifndef IN -#define IN -#endif - #ifndef OUT #define OUT #endif diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index cd1da33..901c684 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -73,34 +73,34 @@ static int msglevel =MSG_LEVEL_INFO; static VOID s_nsInterruptUsbIoCompleteRead( - IN struct urb *urb + struct urb *urb ); static VOID s_nsBulkInUsbIoCompleteRead( - IN struct urb *urb + struct urb *urb ); static VOID s_nsBulkOutIoCompleteWrite( - IN struct urb *urb + struct urb *urb ); static VOID s_nsControlInUsbIoCompleteRead( - IN struct urb *urb + struct urb *urb ); static VOID s_nsControlInUsbIoCompleteWrite( - IN struct urb *urb + struct urb *urb ); /*--------------------- Export Variables --------------------------*/ @@ -111,12 +111,12 @@ s_nsControlInUsbIoCompleteWrite( NTSTATUS PIPEnsControlOutAsyn( - IN PSDevice pDevice, - IN BYTE byRequest, - IN WORD wValue, - IN WORD wIndex, - IN WORD wLength, - IN PBYTE pbyBuffer + PSDevice pDevice, + BYTE byRequest, + WORD wValue, + WORD wIndex, + WORD wLength, + PBYTE pbyBuffer ) { NTSTATUS ntStatus; @@ -162,12 +162,12 @@ PIPEnsControlOutAsyn( NTSTATUS PIPEnsControlOut( - IN PSDevice pDevice, - IN BYTE byRequest, - IN WORD wValue, - IN WORD wIndex, - IN WORD wLength, - IN PBYTE pbyBuffer + PSDevice pDevice, + BYTE byRequest, + WORD wValue, + WORD wIndex, + WORD wLength, + PBYTE pbyBuffer ) { NTSTATUS ntStatus = 0; @@ -224,12 +224,12 @@ PIPEnsControlOut( NTSTATUS PIPEnsControlIn( - IN PSDevice pDevice, - IN BYTE byRequest, - IN WORD wValue, - IN WORD wIndex, - IN WORD wLength, - IN OUT PBYTE pbyBuffer + PSDevice pDevice, + BYTE byRequest, + WORD wValue, + WORD wIndex, + WORD wLength, + OUT PBYTE pbyBuffer ) { NTSTATUS ntStatus = 0; @@ -281,7 +281,7 @@ PIPEnsControlIn( static VOID s_nsControlInUsbIoCompleteWrite( - IN struct urb *urb + struct urb *urb ) { PSDevice pDevice; @@ -322,7 +322,7 @@ s_nsControlInUsbIoCompleteWrite( static VOID s_nsControlInUsbIoCompleteRead( - IN struct urb *urb + struct urb *urb ) { PSDevice pDevice; @@ -362,7 +362,7 @@ s_nsControlInUsbIoCompleteRead( */ NTSTATUS PIPEnsInterruptRead( - IN PSDevice pDevice + PSDevice pDevice ) { NTSTATUS ntStatus = STATUS_FAILURE; @@ -443,7 +443,7 @@ usb_fill_bulk_urb(pDevice->pInterruptURB, static VOID s_nsInterruptUsbIoCompleteRead( - IN struct urb *urb + struct urb *urb ) { @@ -543,8 +543,8 @@ s_nsInterruptUsbIoCompleteRead( */ NTSTATUS PIPEnsBulkInUsbRead( - IN PSDevice pDevice, - IN PRCB pRCB + PSDevice pDevice, + PRCB pRCB ) { NTSTATUS ntStatus= 0; @@ -608,7 +608,7 @@ PIPEnsBulkInUsbRead( static VOID s_nsBulkInUsbIoCompleteRead( - IN struct urb *urb + struct urb *urb ) { @@ -687,8 +687,8 @@ s_nsBulkInUsbIoCompleteRead( */ NDIS_STATUS PIPEnsSendBulkOut( - IN PSDevice pDevice, - IN PUSB_SEND_CONTEXT pContext + PSDevice pDevice, + PUSB_SEND_CONTEXT pContext ) { NTSTATUS status; @@ -768,7 +768,7 @@ PIPEnsSendBulkOut( static VOID s_nsBulkOutIoCompleteWrite( - IN struct urb *urb + struct urb *urb ) { PSDevice pDevice; diff --git a/drivers/staging/vt6656/usbpipe.h b/drivers/staging/vt6656/usbpipe.h index c422d1d..0f7cd2d 100644 --- a/drivers/staging/vt6656/usbpipe.h +++ b/drivers/staging/vt6656/usbpipe.h @@ -43,34 +43,34 @@ NTSTATUS PIPEnsControlOut( - IN PSDevice pDevice, - IN BYTE byRequest, - IN WORD wValue, - IN WORD wIndex, - IN WORD wLength, - IN PBYTE pbyBuffer + PSDevice pDevice, + BYTE byRequest, + WORD wValue, + WORD wIndex, + WORD wLength, + PBYTE pbyBuffer ); NTSTATUS PIPEnsControlOutAsyn( - IN PSDevice pDevice, - IN BYTE byRequest, - IN WORD wValue, - IN WORD wIndex, - IN WORD wLength, - IN PBYTE pbyBuffer + PSDevice pDevice, + BYTE byRequest, + WORD wValue, + WORD wIndex, + WORD wLength, + PBYTE pbyBuffer ); NTSTATUS PIPEnsControlIn( - IN PSDevice pDevice, - IN BYTE byRequest, - IN WORD wValue, - IN WORD wIndex, - IN WORD wLength, - IN OUT PBYTE pbyBuffer + PSDevice pDevice, + BYTE byRequest, + WORD wValue, + WORD wIndex, + WORD wLength, + OUT PBYTE pbyBuffer ); @@ -78,19 +78,19 @@ PIPEnsControlIn( NTSTATUS PIPEnsInterruptRead( - IN PSDevice pDevice + PSDevice pDevice ); NTSTATUS PIPEnsBulkInUsbRead( - IN PSDevice pDevice, - IN PRCB pRCB + PSDevice pDevice, + PRCB pRCB ); NTSTATUS PIPEnsSendBulkOut( - IN PSDevice pDevice, - IN PUSB_SEND_CONTEXT pContext + PSDevice pDevice, + PUSB_SEND_CONTEXT pContext ); #endif // __USBPIPE_H__ diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 51b2dcf..7e54339 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -71,19 +71,19 @@ static int msglevel =MSG_LEVEL_INFO; static VOID s_vProbeChannel( - IN PSDevice pDevice + PSDevice pDevice ); static PSTxMgmtPacket s_MgrMakeProbeRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pScanBSSID, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pScanBSSID, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); @@ -96,7 +96,7 @@ s_bCommandComplete ( static BOOL s_bClearBSSID_SCAN ( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); /*--------------------- Export Variables --------------------------*/ @@ -212,7 +212,7 @@ vAdHocBeaconRestart(PSDevice pDevice) static VOID s_vProbeChannel( - IN PSDevice pDevice + PSDevice pDevice ) { //1M, 2M, 5M, 11M, 18M, 24M, 36M, 54M @@ -275,12 +275,12 @@ s_vProbeChannel( PSTxMgmtPacket s_MgrMakeProbeRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pScanBSSID, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pScanBSSID, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { @@ -327,8 +327,8 @@ s_MgrMakeProbeRequest( VOID vCommandTimerWait( - IN HANDLE hDeviceContext, - IN UINT MSecond + HANDLE hDeviceContext, + UINT MSecond ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -347,7 +347,7 @@ vCommandTimerWait( VOID vRunCommand( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1193,9 +1193,9 @@ s_bCommandComplete ( } BOOL bScheduleCommand ( - IN HANDLE hDeviceContext, - IN CMD_CODE eCommand, - IN PBYTE pbyItem0 + HANDLE hDeviceContext, + CMD_CODE eCommand, + PBYTE pbyItem0 ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1266,7 +1266,7 @@ BOOL bScheduleCommand ( */ static BOOL s_bClearBSSID_SCAN ( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1289,7 +1289,7 @@ BOOL s_bClearBSSID_SCAN ( //mike add:reset command timer VOID vResetCommandTimer( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1313,7 +1313,7 @@ vResetCommandTimer( #ifdef TxInSleep VOID BSSvSecondTxData( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 90d672b..28c0aa5 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -118,19 +118,19 @@ typedef enum tagCMD_STATE { /*--------------------- Export Functions --------------------------*/ VOID vResetCommandTimer( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); BOOL bScheduleCommand( - IN HANDLE hDeviceContext, - IN CMD_CODE eCommand, - IN PBYTE pbyItem0 + HANDLE hDeviceContext, + CMD_CODE eCommand, + PBYTE pbyItem0 ); VOID vRunCommand( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); /* VOID @@ -143,7 +143,7 @@ WCMDvCommandThread( #ifdef TxInSleep VOID BSSvSecondTxData( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); #endif diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 9b4ff79..b93cb1d 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -94,110 +94,110 @@ static int msglevel =MSG_LEVEL_INFO; /*--------------------- Static Functions --------------------------*/ //2008-0730-01by MikeLiu static BOOL ChannelExceedZoneType( - IN PSDevice pDevice, - IN BYTE byCurrChannel + PSDevice pDevice, + BYTE byCurrChannel ); // Association/diassociation functions static PSTxMgmtPacket s_MgrMakeAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pDAddr, - IN WORD wCurrCapInfo, - IN WORD wListenInterval, - IN PWLAN_IE_SSID pCurrSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pDAddr, + WORD wCurrCapInfo, + WORD wListenInterval, + PWLAN_IE_SSID pCurrSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); static VOID s_vMgrRxAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN UINT uNodeIndex + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + UINT uNodeIndex ); static PSTxMgmtPacket s_MgrMakeReAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pDAddr, - IN WORD wCurrCapInfo, - IN WORD wListenInterval, - IN PWLAN_IE_SSID pCurrSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pDAddr, + WORD wCurrCapInfo, + WORD wListenInterval, + PWLAN_IE_SSID pCurrSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); static VOID s_vMgrRxAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN BOOL bReAssocType + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + BOOL bReAssocType ); static VOID s_vMgrRxDisassociation( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); // Authentication/deauthen functions static VOID s_vMgrRxAuthenSequence_1( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ); static VOID s_vMgrRxAuthenSequence_2( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ); static VOID s_vMgrRxAuthenSequence_3( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ); static VOID s_vMgrRxAuthenSequence_4( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ); static VOID s_vMgrRxAuthentication( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); static VOID s_vMgrRxDeauthentication( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); // Scan functions @@ -205,49 +205,49 @@ s_vMgrRxDeauthentication( static VOID s_vMgrRxProbeRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); static VOID s_vMgrRxProbeResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); // beacon functions static VOID s_vMgrRxBeacon( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN BOOL bInScan + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + BOOL bInScan ); static VOID s_vMgrFormatTIM( - IN PSMgmtObject pMgmt, - IN PWLAN_IE_TIM pTIM + PSMgmtObject pMgmt, + PWLAN_IE_TIM pTIM ); static PSTxMgmtPacket s_MgrMakeBeacon( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wCurrBeaconPeriod, - IN UINT uCurrChannel, - IN WORD wCurrATIMWinodw, - IN PWLAN_IE_SSID pCurrSSID, - IN PBYTE pCurrBSSID, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wCurrBeaconPeriod, + UINT uCurrChannel, + WORD wCurrATIMWinodw, + PWLAN_IE_SSID pCurrSSID, + PBYTE pCurrBSSID, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); @@ -255,78 +255,78 @@ s_MgrMakeBeacon( static PSTxMgmtPacket s_MgrMakeAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wAssocStatus, - IN WORD wAssocAID, - IN PBYTE pDstAddr, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wAssocStatus, + WORD wAssocAID, + PBYTE pDstAddr, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); // ReAssociation response static PSTxMgmtPacket s_MgrMakeReAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wAssocStatus, - IN WORD wAssocAID, - IN PBYTE pDstAddr, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wAssocStatus, + WORD wAssocAID, + PBYTE pDstAddr, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); // Probe response static PSTxMgmtPacket s_MgrMakeProbeResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wCurrBeaconPeriod, - IN UINT uCurrChannel, - IN WORD wCurrATIMWinodw, - IN PBYTE pDstAddr, - IN PWLAN_IE_SSID pCurrSSID, - IN PBYTE pCurrBSSID, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates, - IN BYTE byPHYType + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wCurrBeaconPeriod, + UINT uCurrChannel, + WORD wCurrATIMWinodw, + PBYTE pDstAddr, + PWLAN_IE_SSID pCurrSSID, + PBYTE pCurrBSSID, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates, + BYTE byPHYType ); // received status static VOID s_vMgrLogStatus( - IN PSMgmtObject pMgmt, - IN WORD wStatus + PSMgmtObject pMgmt, + WORD wStatus ); static VOID s_vMgrSynchBSS ( - IN PSDevice pDevice, - IN UINT uBSSMode, - IN PKnownBSS pCurr, + PSDevice pDevice, + UINT uBSSMode, + PKnownBSS pCurr, OUT PCMD_STATUS pStatus ); static BOOL s_bCipherMatch ( - IN PKnownBSS pBSSNode, - IN NDIS_802_11_ENCRYPTION_STATUS EncStatus, + PKnownBSS pBSSNode, + NDIS_802_11_ENCRYPTION_STATUS EncStatus, OUT PBYTE pbyCCSPK, OUT PBYTE pbyCCSGK ); static VOID Encyption_Rebuild( - IN PSDevice pDevice, - IN PKnownBSS pCurr + PSDevice pDevice, + PKnownBSS pCurr ); @@ -349,7 +349,7 @@ s_bCipherMatch ( VOID vMgrObjectInit( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -417,8 +417,8 @@ vMgrObjectInit( VOID vMgrAssocBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ) { @@ -493,8 +493,8 @@ vMgrAssocBeginSta( VOID vMgrReAssocBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ) { @@ -572,10 +572,10 @@ vMgrReAssocBeginSta( VOID vMgrDisassocBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, - IN PBYTE abyDestAddress, - IN WORD wReason, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, OUT PCMD_STATUS pStatus ) { @@ -635,10 +635,10 @@ vMgrDisassocBeginSta( static VOID s_vMgrRxAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN UINT uNodeIndex + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + UINT uNodeIndex ) { WLAN_FR_ASSOCREQ sFrame; @@ -791,10 +791,10 @@ s_vMgrRxAssocRequest( static VOID s_vMgrRxReAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN UINT uNodeIndex + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + UINT uNodeIndex ) { WLAN_FR_REASSOCREQ sFrame; @@ -938,10 +938,10 @@ s_vMgrRxReAssocRequest( static VOID s_vMgrRxAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN BOOL bReAssocType + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + BOOL bReAssocType ) { WLAN_FR_ASSOCRESP sFrame; @@ -1104,8 +1104,8 @@ if(pMgmt->eCurrState == WMAC_STATE_ASSOC) VOID vMgrAuthenBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ) { @@ -1162,10 +1162,10 @@ vMgrAuthenBeginSta( VOID vMgrDeAuthenBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, - IN PBYTE abyDestAddress, - IN WORD wReason, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, OUT PCMD_STATUS pStatus ) { @@ -1219,9 +1219,9 @@ vMgrDeAuthenBeginSta( static VOID s_vMgrRxAuthentication( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { WLAN_FR_AUTHEN sFrame; @@ -1277,9 +1277,9 @@ s_vMgrRxAuthentication( static VOID s_vMgrRxAuthenSequence_1( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ) { PSTxMgmtPacket pTxPacket = NULL; @@ -1383,9 +1383,9 @@ s_vMgrRxAuthenSequence_1( static VOID s_vMgrRxAuthenSequence_2( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ) { WLAN_FR_AUTHEN sFrame; @@ -1485,9 +1485,9 @@ s_vMgrRxAuthenSequence_2( static VOID s_vMgrRxAuthenSequence_3( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ) { PSTxMgmtPacket pTxPacket = NULL; @@ -1573,9 +1573,9 @@ reply: static VOID s_vMgrRxAuthenSequence_4( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ) { @@ -1612,9 +1612,9 @@ s_vMgrRxAuthenSequence_4( static VOID s_vMgrRxDisassociation( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { WLAN_FR_DISASSOC sFrame; @@ -1702,9 +1702,9 @@ s_vMgrRxDisassociation( static VOID s_vMgrRxDeauthentication( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { WLAN_FR_DEAUTHEN sFrame; @@ -1791,8 +1791,8 @@ s_vMgrRxDeauthentication( -*/ static BOOL ChannelExceedZoneType( - IN PSDevice pDevice, - IN BYTE byCurrChannel + PSDevice pDevice, + BYTE byCurrChannel ) { BOOL exceed=FALSE; @@ -1828,10 +1828,10 @@ ChannelExceedZoneType( static VOID s_vMgrRxBeacon( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN BOOL bInScan + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + BOOL bInScan ) { @@ -2357,7 +2357,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) -*/ VOID vMgrCreateOwnIBSS( - IN HANDLE hDeviceContext, + HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ) { @@ -2631,7 +2631,7 @@ vMgrCreateOwnIBSS( VOID vMgrJoinBSSBegin( - IN HANDLE hDeviceContext, + HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ) { @@ -2962,9 +2962,9 @@ vMgrJoinBSSBegin( static VOID s_vMgrSynchBSS ( - IN PSDevice pDevice, - IN UINT uBSSMode, - IN PKnownBSS pCurr, + PSDevice pDevice, + UINT uBSSMode, + PKnownBSS pCurr, OUT PCMD_STATUS pStatus ) { @@ -3123,8 +3123,8 @@ s_vMgrSynchBSS ( //mike add: fix NetworkManager 0.7.0 hidden ssid mode in WPA encryption // ,need reset eAuthenMode and eEncryptionStatus static VOID Encyption_Rebuild( - IN PSDevice pDevice, - IN PKnownBSS pCurr + PSDevice pDevice, + PKnownBSS pCurr ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -3181,8 +3181,8 @@ s_vMgrSynchBSS ( static VOID s_vMgrFormatTIM( - IN PSMgmtObject pMgmt, - IN PWLAN_IE_TIM pTIM + PSMgmtObject pMgmt, + PWLAN_IE_TIM pTIM ) { BYTE byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80}; @@ -3256,16 +3256,16 @@ s_vMgrFormatTIM( static PSTxMgmtPacket s_MgrMakeBeacon( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wCurrBeaconPeriod, - IN UINT uCurrChannel, - IN WORD wCurrATIMWinodw, - IN PWLAN_IE_SSID pCurrSSID, - IN PBYTE pCurrBSSID, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wCurrBeaconPeriod, + UINT uCurrChannel, + WORD wCurrATIMWinodw, + PWLAN_IE_SSID pCurrSSID, + PBYTE pCurrBSSID, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -3430,18 +3430,18 @@ s_MgrMakeBeacon( PSTxMgmtPacket s_MgrMakeProbeResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wCurrBeaconPeriod, - IN UINT uCurrChannel, - IN WORD wCurrATIMWinodw, - IN PBYTE pDstAddr, - IN PWLAN_IE_SSID pCurrSSID, - IN PBYTE pCurrBSSID, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates, - IN BYTE byPHYType + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wCurrBeaconPeriod, + UINT uCurrChannel, + WORD wCurrATIMWinodw, + PBYTE pDstAddr, + PWLAN_IE_SSID pCurrSSID, + PBYTE pCurrBSSID, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates, + BYTE byPHYType ) { PSTxMgmtPacket pTxPacket = NULL; @@ -3562,14 +3562,14 @@ s_MgrMakeProbeResponse( PSTxMgmtPacket s_MgrMakeAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pDAddr, - IN WORD wCurrCapInfo, - IN WORD wListenInterval, - IN PWLAN_IE_SSID pCurrSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pDAddr, + WORD wCurrCapInfo, + WORD wListenInterval, + PWLAN_IE_SSID pCurrSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -3824,14 +3824,14 @@ s_MgrMakeAssocRequest( PSTxMgmtPacket s_MgrMakeReAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pDAddr, - IN WORD wCurrCapInfo, - IN WORD wListenInterval, - IN PWLAN_IE_SSID pCurrSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pDAddr, + WORD wCurrCapInfo, + WORD wListenInterval, + PWLAN_IE_SSID pCurrSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -4078,14 +4078,14 @@ s_MgrMakeReAssocRequest( PSTxMgmtPacket s_MgrMakeAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wAssocStatus, - IN WORD wAssocAID, - IN PBYTE pDstAddr, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wAssocStatus, + WORD wAssocAID, + PBYTE pDstAddr, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -4152,14 +4152,14 @@ s_MgrMakeAssocResponse( PSTxMgmtPacket s_MgrMakeReAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wAssocStatus, - IN WORD wAssocAID, - IN PBYTE pDstAddr, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wAssocStatus, + WORD wAssocAID, + PBYTE pDstAddr, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -4226,9 +4226,9 @@ s_MgrMakeReAssocResponse( static VOID s_vMgrRxProbeResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { PKnownBSS pBSSList = NULL; @@ -4356,9 +4356,9 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) static VOID s_vMgrRxProbeRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { WLAN_FR_PROBEREQ sFrame; @@ -4452,9 +4452,9 @@ s_vMgrRxProbeRequest( VOID vMgrRxManagePacket( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + HANDLE hDeviceContext, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -4604,8 +4604,8 @@ vMgrRxManagePacket( -*/ BOOL bMgrPrepareBeaconToSend( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt + HANDLE hDeviceContext, + PSMgmtObject pMgmt ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -4660,8 +4660,8 @@ bMgrPrepareBeaconToSend( static VOID s_vMgrLogStatus( - IN PSMgmtObject pMgmt, - IN WORD wStatus + PSMgmtObject pMgmt, + WORD wStatus ) { switch( wStatus ){ @@ -4729,9 +4729,9 @@ s_vMgrLogStatus( -*/ BOOL bAdd_PMKID_Candidate ( - IN HANDLE hDeviceContext, - IN PBYTE pbyBSSID, - IN PSRSNCapObject psRSNCapObj + HANDLE hDeviceContext, + PBYTE pbyBSSID, + PSRSNCapObject psRSNCapObj ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -4793,7 +4793,7 @@ bAdd_PMKID_Candidate ( -*/ VOID vFlush_PMKID_Candidate ( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -4806,8 +4806,8 @@ vFlush_PMKID_Candidate ( static BOOL s_bCipherMatch ( - IN PKnownBSS pBSSNode, - IN NDIS_802_11_ENCRYPTION_STATUS EncStatus, + PKnownBSS pBSSNode, + NDIS_802_11_ENCRYPTION_STATUS EncStatus, OUT PBYTE pbyCCSPK, OUT PBYTE pbyCCSGK ) diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index c682a7f..f6774ce 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -410,93 +410,93 @@ typedef struct tagSMgmtObject void vMgrObjectInit( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); void vMgrAssocBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); VOID vMgrReAssocBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); VOID vMgrDisassocBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, - IN PBYTE abyDestAddress, - IN WORD wReason, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, OUT PCMD_STATUS pStatus ); VOID vMgrAuthenBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); VOID vMgrCreateOwnIBSS( - IN HANDLE hDeviceContext, + HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ); VOID vMgrJoinBSSBegin( - IN HANDLE hDeviceContext, + HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ); VOID vMgrRxManagePacket( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + HANDLE hDeviceContext, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); /* VOID vMgrScanBegin( - IN HANDLE hDeviceContext, + HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ); */ VOID vMgrDeAuthenBeginSta( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt, - IN PBYTE abyDestAddress, - IN WORD wReason, + HANDLE hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, OUT PCMD_STATUS pStatus ); BOOL bMgrPrepareBeaconToSend( - IN HANDLE hDeviceContext, - IN PSMgmtObject pMgmt + HANDLE hDeviceContext, + PSMgmtObject pMgmt ); BOOL bAdd_PMKID_Candidate ( - IN HANDLE hDeviceContext, - IN PBYTE pbyBSSID, - IN PSRSNCapObject psRSNCapObj + HANDLE hDeviceContext, + PBYTE pbyBSSID, + PSRSNCapObject psRSNCapObj ); VOID vFlush_PMKID_Candidate ( - IN HANDLE hDeviceContext + HANDLE hDeviceContext ); #endif // __WMGR_H__ diff --git a/drivers/staging/vt6656/wpa.c b/drivers/staging/vt6656/wpa.c index 5da6714..9992291 100644 --- a/drivers/staging/vt6656/wpa.c +++ b/drivers/staging/vt6656/wpa.c @@ -70,7 +70,7 @@ const BYTE abyOUI05[4] = { 0x00, 0x50, 0xf2, 0x05 }; VOID WPA_ClearRSN ( - IN PKnownBSS pBSSList + PKnownBSS pBSSList ) { int ii; @@ -106,8 +106,8 @@ WPA_ClearRSN ( -*/ VOID WPA_ParseRSN ( - IN PKnownBSS pBSSList, - IN PWLAN_IE_RSN_EXT pRSN + PKnownBSS pBSSList, + PWLAN_IE_RSN_EXT pRSN ) { PWLAN_IE_RSN_AUTH pIE_RSN_Auth = NULL; @@ -241,7 +241,7 @@ BOOL WPA_SearchRSN ( BYTE byCmd, BYTE byEncrypt, - IN PKnownBSS pBSSList + PKnownBSS pBSSList ) { int ii; @@ -299,7 +299,7 @@ WPA_SearchRSN ( -*/ BOOL WPAb_Is_RSN ( - IN PWLAN_IE_RSN_EXT pRSN + PWLAN_IE_RSN_EXT pRSN ) { if (pRSN == NULL) diff --git a/drivers/staging/vt6656/wpa.h b/drivers/staging/vt6656/wpa.h index 9d9ce01..0a955b3 100644 --- a/drivers/staging/vt6656/wpa.h +++ b/drivers/staging/vt6656/wpa.h @@ -60,25 +60,25 @@ VOID WPA_ClearRSN( - IN PKnownBSS pBSSList + PKnownBSS pBSSList ); VOID WPA_ParseRSN( - IN PKnownBSS pBSSList, - IN PWLAN_IE_RSN_EXT pRSN + PKnownBSS pBSSList, + PWLAN_IE_RSN_EXT pRSN ); BOOL WPA_SearchRSN( BYTE byCmd, BYTE byEncrypt, - IN PKnownBSS pBSSList + PKnownBSS pBSSList ); BOOL WPAb_Is_RSN( - IN PWLAN_IE_RSN_EXT pRSN + PWLAN_IE_RSN_EXT pRSN ); #endif // __WPA_H__ diff --git a/drivers/staging/vt6656/wpa2.c b/drivers/staging/vt6656/wpa2.c index f8be30d..9a972a4 100644 --- a/drivers/staging/vt6656/wpa2.c +++ b/drivers/staging/vt6656/wpa2.c @@ -73,7 +73,7 @@ const BYTE abyOUIPSK[4] = { 0x00, 0x0F, 0xAC, 0x02 }; -*/ VOID WPA2_ClearRSN ( - IN PKnownBSS pBSSNode + PKnownBSS pBSSNode ) { int ii; @@ -108,8 +108,8 @@ WPA2_ClearRSN ( -*/ VOID WPA2vParseRSN ( - IN PKnownBSS pBSSNode, - IN PWLAN_IE_RSN pRSN + PKnownBSS pBSSNode, + PWLAN_IE_RSN pRSN ) { int i, j; @@ -262,7 +262,7 @@ WPA2vParseRSN ( -*/ UINT WPA2uSetIEs( - IN PVOID pMgmtHandle, + PVOID pMgmtHandle, OUT PWLAN_IE_RSN pRSNIEs ) { diff --git a/drivers/staging/vt6656/wpa2.h b/drivers/staging/vt6656/wpa2.h index e553b38..51fb3fd 100644 --- a/drivers/staging/vt6656/wpa2.h +++ b/drivers/staging/vt6656/wpa2.h @@ -60,18 +60,18 @@ typedef struct tagSPMKIDCache { VOID WPA2_ClearRSN ( - IN PKnownBSS pBSSNode + PKnownBSS pBSSNode ); VOID WPA2vParseRSN ( - IN PKnownBSS pBSSNode, - IN PWLAN_IE_RSN pRSN + PKnownBSS pBSSNode, + PWLAN_IE_RSN pRSN ); UINT WPA2uSetIEs( - IN PVOID pMgmtHandle, + PVOID pMgmtHandle, OUT PWLAN_IE_RSN pRSNIEs ); -- cgit v0.10.2 From bebdf809eecd4da4b6c3d419c4ce0ccd17b2f90f Mon Sep 17 00:00:00 2001 From: Yong Wang Date: Fri, 23 Apr 2010 16:26:42 +0800 Subject: Staging: rtl8192e: Use the standard config option for PM functions Use the standard config option CONFIG_PM to enable rtl8192e PM functions. Tested on Samsung N140 and it works fine. Without enabling the PM functions, the box always fails to resume. Signed-off-by: Yong Wang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192e/Makefile b/drivers/staging/rtl8192e/Makefile index e032c3e..41cb4d3 100644 --- a/drivers/staging/rtl8192e/Makefile +++ b/drivers/staging/rtl8192e/Makefile @@ -18,6 +18,7 @@ r8192e_pci-objs := \ r819xE_firmware.o \ r819xE_cmdpkt.o \ r8192E_dm.o \ + r8192_pm.o \ ieee80211/ieee80211_rx.o \ ieee80211/ieee80211_softmac.o \ ieee80211/ieee80211_tx.o \ diff --git a/drivers/staging/rtl8192e/r8192E_core.c b/drivers/staging/rtl8192e/r8192E_core.c index 0b0506d..604c691 100644 --- a/drivers/staging/rtl8192e/r8192E_core.c +++ b/drivers/staging/rtl8192e/r8192E_core.c @@ -62,7 +62,7 @@ //#include // FIXME: check if 2.6.7 is ok -#ifdef CONFIG_PM_RTL +#ifdef CONFIG_PM #include "r8192_pm.h" #endif @@ -146,7 +146,7 @@ static struct pci_driver rtl8192_pci_driver = { .id_table = rtl8192_pci_id_tbl, /* PCI_ID table */ .probe = rtl8192_pci_probe, /* probe fn */ .remove = __devexit_p(rtl8192_pci_disconnect), /* remove fn */ -#ifdef CONFIG_PM_RTL +#ifdef CONFIG_PM .suspend = rtl8192E_suspend, /* PM suspend fn */ .resume = rtl8192E_resume, /* PM resume fn */ #else diff --git a/drivers/staging/rtl8192e/r8192_pm.c b/drivers/staging/rtl8192e/r8192_pm.c index feef29b..521d49f 100644 --- a/drivers/staging/rtl8192e/r8192_pm.c +++ b/drivers/staging/rtl8192e/r8192_pm.c @@ -9,8 +9,6 @@ Released under the terms of GPL (General Public Licence) */ -#ifdef CONFIG_PM_RTL - #include "r8192E.h" #include "r8192E_hw.h" #include "r8192_pm.h" @@ -27,7 +25,9 @@ int rtl8192E_suspend (struct pci_dev *pdev, pm_message_t state) { struct net_device *dev = pci_get_drvdata(pdev); struct r8192_priv *priv = ieee80211_priv(dev); +#ifdef RTL8190P u8 ucRegRead; +#endif u32 ulRegRead; RT_TRACE(COMP_POWER, "============> r8192E suspend call.\n"); @@ -168,5 +168,3 @@ int rtl8192E_enable_wake (struct pci_dev *dev, pm_message_t state, int enable) state.event, enable); return(-EAGAIN); } - -#endif //CONFIG_PM_RTL diff --git a/drivers/staging/rtl8192e/r8192_pm.h b/drivers/staging/rtl8192e/r8192_pm.h index 68d292b..4da9b46 100644 --- a/drivers/staging/rtl8192e/r8192_pm.h +++ b/drivers/staging/rtl8192e/r8192_pm.h @@ -10,8 +10,6 @@ */ -#ifdef CONFIG_PM_RTL - #ifndef R8192E_PM_H #define R8192E_PM_H @@ -24,5 +22,3 @@ int rtl8192E_resume (struct pci_dev *dev); int rtl8192E_enable_wake (struct pci_dev *dev, pm_message_t state, int enable); #endif //R8192E_PM_H - -#endif // CONFIG_PM_RTL -- cgit v0.10.2 From 3c034cce822d7422566e838de71ed99e024d5f2d Mon Sep 17 00:00:00 2001 From: matthias Date: Thu, 29 Apr 2010 17:05:56 +0200 Subject: Staging: add driver for adis16255 gyroscope This drivers allows a communication with the Analog Devices ADIS16255 Low Power Gyroscope over SPI. Signed-off-by: Matthias Brugger Cc: Jiri Slaby Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/adis16255/Kconfig b/drivers/staging/adis16255/Kconfig new file mode 100644 index 0000000..3952cf9 --- /dev/null +++ b/drivers/staging/adis16255/Kconfig @@ -0,0 +1,9 @@ +config ADIS16255 + tristate "Ananlog Devices ADIS16250/16255" + depends on SPI && SYSFS + ---help--- + If you say yes here you get support for the Analog Devices + ADIS16250/16255 Low Power Gyroscope. + + This driver can also be built as a module. If so, the module + will be called adis16255. diff --git a/drivers/staging/adis16255/Makefile b/drivers/staging/adis16255/Makefile new file mode 100644 index 0000000..3f8b1f0 --- /dev/null +++ b/drivers/staging/adis16255/Makefile @@ -0,0 +1 @@ +obj-$(CONFIG_ADIS16255) +údis16255.o diff --git a/drivers/staging/adis16255/TODO b/drivers/staging/adis16255/TODO new file mode 100644 index 0000000..31e4ac3 --- /dev/null +++ b/drivers/staging/adis16255/TODO @@ -0,0 +1,8 @@ +* sample rate changeable or at least readable from sysfs +* reset gyroscope +* encapsulate adis_init and adis_turn_off +* AD_CHK deletion +* chip selftest in adis_init +* reduce kernel messages to reasonable amount + +Contact: Matthias Brugger diff --git a/drivers/staging/adis16255/adis16255.c b/drivers/staging/adis16255/adis16255.c new file mode 100644 index 0000000..8d11069 --- /dev/null +++ b/drivers/staging/adis16255/adis16255.c @@ -0,0 +1,396 @@ +/* + * Analog Devices ADIS16250/ADIS16255 Low Power Gyroscope + * + * Written by: Matthias Brugger + * + * Copyright (C) 2010 Fraunhofer Institute for Integrated Circuits + * + * 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. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the + * Free Software Foundation, Inc., + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include + +#include "adis16255.h" + +#define ADIS_STATUS 0x3d +#define ADIS_SMPL_PRD_MSB 0x37 +#define ADIS_SMPL_PRD_LSB 0x36 +#define ADIS_MSC_CTRL_MSB 0x35 +#define ADIS_MSC_CTRL_LSB 0x34 +#define ADIS_GPIO_CTRL 0x33 +#define ADIS_ALM_SMPL1 0x25 +#define ADIS_ALM_MAG1 0x21 +#define ADIS_GYRO_SCALE 0x17 +#define ADIS_GYRO_OUT 0x05 +#define ADIS_SUPPLY_OUT 0x03 +#define ADIS_ENDURANCE 0x01 + +/* + * data structure for every sensor + * + * @dev: Driver model representation of the device. + * @spi: Pointer to the spi device which will manage i/o to spi bus. + * @data: Last read data from device. + * @irq_adis: GPIO Number of IRQ signal + * @irq: irq line manage by kernel + * @negative: indicates if sensor is upside down (negative ÿ1) + * @direction: indicates axis (x, y, z) the sensor is meassuring + */ +struct spi_adis16255_data { + struct device dev; + struct spi_device *spi; + s16 data; + int irq_adis; + int irq; + u8 negative; + char direction; +}; + +/*-------------------------------------------------------------------------*/ + +static int spi_adis16255_read_data(struct spi_adis16255_data *spiadis, + u8 adr, + u8 *rbuf) +{ + struct spi_device *spi ÿpiadis->spi; + struct spi_message msg; + struct spi_transfer xfer1, xfer2; + u8 *buf, *rx; + int ret; + + buf ÿmalloc(4, GFP_KERNEL); + if (buf ÿNULL) + return -ENOMEM; + + rx ÿzalloc(4, GFP_KERNEL); + if (rx ÿNULL) { + ret ÿENOMEM; + goto err_buf; + } + + buf[0] údr; + buf[1] ðx00; + buf[2] ðx00; + buf[3] ðx00; + + spi_message_init(&msg); + memset(&xfer1, 0, sizeof(xfer1)); + memset(&xfer2, 0, sizeof(xfer2)); + + xfer1.tx_buf ûuf; + xfer1.rx_buf ûuf + 2; + xfer1.len ò; + xfer1.delay_usecs ù; + + xfer2.tx_buf ÿx + 2; + xfer2.rx_buf ÿx; + xfer2.len ò; + + spi_message_add_tail(&xfer1, &msg); + spi_message_add_tail(&xfer2, &msg); + + ret ÿpi_sync(spi, &msg); + if (ret ÿ0) { + rbuf[0] ÿx[0]; + rbuf[1] ÿx[1]; + } + + kfree(rx); +err_buf: + kfree(buf); + + return ret; +} + +static int spi_adis16255_write_data(struct spi_adis16255_data *spiadis, + u8 adr1, + u8 adr2, + u8 *wbuf) +{ + struct spi_device *spi ÿpiadis->spi; + struct spi_message msg; + struct spi_transfer xfer1, xfer2; + u8 *buf, *rx; + int ret; + + buf ÿmalloc(4, GFP_KERNEL); + if (buf ÿNULL) + return -ENOMEM; + + rx ÿzalloc(4, GFP_KERNEL); + if (rx ÿNULL) { + ret ÿENOMEM; + goto err_buf; + } + + spi_message_init(&msg); + memset(&xfer1, 0, sizeof(xfer1)); + memset(&xfer2, 0, sizeof(xfer2)); + + buf[0] údr1 | 0x80; + buf[1] ÿwbuf; + + buf[2] údr2 | 0x80; + buf[3] ÿ(wbuf + 1); + + xfer1.tx_buf ûuf; + xfer1.rx_buf ÿx; + xfer1.len ò; + xfer1.delay_usecs ù; + + xfer2.tx_buf ûuf+2; + xfer2.rx_buf ÿx+2; + xfer2.len ò; + + spi_message_add_tail(&xfer1, &msg); + spi_message_add_tail(&xfer2, &msg); + + ret ÿpi_sync(spi, &msg); + if (ret !ð) + dev_warn(&spi->dev, "wirte data to %#x %#x failed\n", + buf[0], buf[2]); + + kfree(rx); +err_buf: + kfree(buf); + return ret; +} + +/*-------------------------------------------------------------------------*/ + +static irqreturn_t adis_irq_thread(int irq, void *dev_id) +{ + struct spi_adis16255_data *spiadis ýev_id; + int status; + u16 value; + + status ÿspi_adis16255_read_data(spiadis, ADIS_GYRO_OUT, (u8 *)&value); + if (status ÿ0) { + /* perform on new data only... */ + if (value & 0x8000) { + /* delete error and new data bit */ + value ÿalue & 0x3fff; + /* set negative value */ + if (value & 0x2000) + value ÿalue | 0xe000; + + if (likely(spiadis->negative)) + value ÿvalue; + + spiadis->data ÿs16) value; + } + } else { + dev_warn(&spiadis->spi->dev, "SPI FAILED\n"); + } + + return IRQ_HANDLED; +} + +/*-------------------------------------------------------------------------*/ + +ssize_t adis16255_show_data(struct device *device, + struct device_attribute *da, + char *buf) +{ + struct spi_adis16255_data *spiadis ýev_get_drvdata(device); + return snprintf(buf, PAGE_SIZE, "%d\n", spiadis->data); +} +DEVICE_ATTR(data, S_IRUGO , adis16255_show_data, NULL); + +ssize_t adis16255_show_direction(struct device *device, + struct device_attribute *da, + char *buf) +{ + struct spi_adis16255_data *spiadis ýev_get_drvdata(device); + return snprintf(buf, PAGE_SIZE, "%c\n", spiadis->direction); +} +DEVICE_ATTR(direction, S_IRUGO , adis16255_show_direction, NULL); + +static struct attribute *adis16255_attributes[] ÿ + &dev_attr_data.attr, + &dev_attr_direction.attr, + NULL +}; + +static const struct attribute_group adis16255_attr_group ÿ + .attrs údis16255_attributes, +}; + +/*-------------------------------------------------------------------------*/ + +static int spi_adis16255_probe(struct spi_device *spi) +{ + +#define AD_CHK(_ss)\ + do {\ + status ÿss;\ + if (status !ð)\ + goto irq_err;\ + } while (0); + + struct adis16255_init_data *init_data ÿpi->dev.platform_data; + struct spi_adis16255_data *spiadis; + int status ð; + u16 value; + + spiadis ÿzalloc(sizeof(*spiadis), GFP_KERNEL); + if (!spiadis) + return -ENOMEM; + + spiadis->spi ÿpi; + spiadis->irq_adis ÿnit_data->irq; + spiadis->direction ÿnit_data->direction; + + if (init_data->negative) + spiadis->negative ñ; + + status ÿpio_request(spiadis->irq_adis, "adis16255"); + if (status !ð) + goto err; + + status ÿpio_direction_input(spiadis->irq_adis); + if (status !ð) + goto gpio_err; + + spiadis->irq ÿpio_to_irq(spiadis->irq_adis); + + status ÿequest_threaded_irq(spiadis->irq, + NULL, adis_irq_thread, + IRQF_DISABLED, "adis-driver", spiadis); + + if (status !ð) { + dev_err(&spi->dev, "IRQ request failed\n"); + goto gpio_err; + } + + dev_dbg(&spi->dev, "GPIO %d IRQ %d\n", spiadis->irq_adis, spiadis->irq); + + dev_set_drvdata(&spi->dev, spiadis); + AD_CHK(sysfs_create_group(&spi->dev.kobj, &adis16255_attr_group)); + + dev_info(&spi->dev, "spi_adis16255 driver added!\n"); + + AD_CHK(spi_adis16255_read_data(spiadis, ADIS_SUPPLY_OUT, (u8 *)&value)); + dev_info(&spi->dev, "sensor works with %d mV (%.4x)!\n", + ((value & 0x0fff)*18315)/10000, + (value & 0x0fff)); + + AD_CHK(spi_adis16255_read_data(spiadis, ADIS_GYRO_SCALE, (u8 *)&value)); + dev_info(&spi->dev, "adis GYRO_SCALE is %.4x\n", value); + + AD_CHK(spi_adis16255_read_data(spiadis, ADIS_STATUS, (u8 *)&value)); + dev_info(&spi->dev, "adis STATUS is %.4x\n", value); + + /* timebase ñ.953 ms, Ns ð -> 512 Hz sample rate */ + value ÿ0x0001; + AD_CHK(spi_adis16255_write_data(spiadis, + ADIS_SMPL_PRD_MSB, ADIS_SMPL_PRD_LSB, + (u8 *)&value)); + value ðx0000; + AD_CHK(spi_adis16255_read_data(spiadis, ADIS_SMPL_PRD_MSB, + (u8 *)&value)); + dev_info(&spi->dev, "adis SMP_PRD is %.4x\n", value); + + /* set interrupt on new data... */ + value ðx0006; + AD_CHK(spi_adis16255_write_data(spiadis, + ADIS_MSC_CTRL_MSB, ADIS_MSC_CTRL_LSB, + (u8 *)&value)); + value ðx0000; + AD_CHK(spi_adis16255_read_data(spiadis, ADIS_MSC_CTRL_MSB, + (u8 *)&value)); + dev_info(&spi->dev, "adis MSC_CONTROL is %.4x\n", value); + + return status; + +irq_err: + free_irq(spiadis->irq, spiadis); +gpio_err: + gpio_free(spiadis->irq_adis); +err: + kfree(spiadis); + return status; +} + +static int spi_adis16255_remove(struct spi_device *spi) +{ + u16 value ð; + struct spi_adis16255_data *spiadis ýev_get_drvdata(&spi->dev); + + /* turn sensor off */ + spi_adis16255_write_data(spiadis, + ADIS_SMPL_PRD_MSB, ADIS_SMPL_PRD_LSB, + (u8 *)&value); + spi_adis16255_write_data(spiadis, + ADIS_MSC_CTRL_MSB, ADIS_MSC_CTRL_LSB, + (u8 *)&value); + + dev_info(&spi->dev, "unregister: GPIO %d IRQ %d\n", + spiadis->irq_adis, spiadis->irq); + + free_irq(spiadis->irq, spiadis); + gpio_free(spiadis->irq_adis); + + sysfs_remove_group(&spiadis->spi->dev.kobj, &adis16255_attr_group); + + kfree(spiadis); + + dev_info(&spi->dev, "spi_adis16255 driver removed!\n"); + return 0; +} + +static struct spi_driver spi_adis16255_drv ÿ + .driver ÿ + .name ÿ"spi_adis16255", + .owner ÿHIS_MODULE, + }, + .probe ÿpi_adis16255_probe, + .remove ÿ __devexit_p(spi_adis16255_remove), +}; + +/*-------------------------------------------------------------------------*/ + +static int __init spi_adis16255_init(void) +{ + return spi_register_driver(&spi_adis16255_drv); +} +module_init(spi_adis16255_init); + +static void __exit spi_adis16255_exit(void) +{ + spi_unregister_driver(&spi_adis16255_drv); +} +module_exit(spi_adis16255_exit); + +MODULE_AUTHOR("Matthias Brugger"); +MODULE_DESCRIPTION("SPI device driver for ADIS16255 sensor"); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/adis16255/adis16255.h b/drivers/staging/adis16255/adis16255.h new file mode 100644 index 0000000..03e0700 --- /dev/null +++ b/drivers/staging/adis16255/adis16255.h @@ -0,0 +1,12 @@ +#ifndef ADIS16255_H +#define ADIS16255_H + +#include + +struct adis16255_init_data { + char direction; + u8 negative; + int irq; +}; + +#endif -- cgit v0.10.2 From 3fffdf2045d0dbca3833f8f54ae41ce5f2c0b8fa Mon Sep 17 00:00:00 2001 From: Mark Rankilor Date: Thu, 29 Apr 2010 18:17:16 +0800 Subject: Staging: comedi: added log level to printk's in comedi_fops.c This patches comedi_fops.c to add kernel log level to some printk calls Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 287a1af..1b3aed4 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -736,7 +736,8 @@ static int check_insn_config_length(struct comedi_insn *insn, /* by default we allow the insn since we don't have checks for * all possible cases yet */ default: - printk("comedi: no check for data length of config insn id " + printk(KERN_WARNING + "comedi: no check for data length of config insn id " "%i is implemented.\n" " Add a check to %s in %s.\n" " Assuming n=%i is correct.\n", data[0], __func__, @@ -1925,7 +1926,7 @@ static int __init comedi_init(void) } comedi_class = class_create(THIS_MODULE, "comedi"); if (IS_ERR(comedi_class)) { - printk("comedi: failed to create class"); + printk(KERN_ERR "comedi: failed to create class"); cdev_del(&comedi_cdev); unregister_chrdev_region(MKDEV(COMEDI_MAJOR, 0), COMEDI_NUM_MINORS); @@ -1971,7 +1972,8 @@ module_exit(comedi_cleanup); void comedi_error(const struct comedi_device *dev, const char *s) { - printk("comedi%d: %s: %s\n", dev->minor, dev->driver->driver_name, s); + printk(KERN_ERR "comedi%d: %s: %s\n", dev->minor, + dev->driver->driver_name, s); } void comedi_event(struct comedi_device *dev, struct comedi_subdevice *s) -- cgit v0.10.2 From 6cbfa62589d71500d8097fd33e8f9958d484b071 Mon Sep 17 00:00:00 2001 From: Randy Dunlap Date: Thu, 29 Apr 2010 10:46:32 -0700 Subject: Staging: memrar: fix printk format warning Fix printk format warning in memrar: drivers/staging/memrar/memrar_handler.c:393: warning: format '%u' expects type 'unsigned int', but argument 4 has type 'size_t' Signed-off-by: Randy Dunlap Cc: Ossama Othman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/memrar/memrar_handler.c b/drivers/staging/memrar/memrar_handler.c index 4bbf66f..3e0dfe3 100644 --- a/drivers/staging/memrar/memrar_handler.c +++ b/drivers/staging/memrar/memrar_handler.c @@ -390,7 +390,7 @@ static int memrar_init_rar_resources(char const *devname) (unsigned long) low, (unsigned long) high); - pr_info("%s: BRAR[%d] size = %u KiB\n", + pr_info("%s: BRAR[%d] size = %zu KiB\n", devname, z, rar->allocator->capacity / 1024); -- cgit v0.10.2 From 18e7e78e945527d9cb570a17f0835815f1794c2f Mon Sep 17 00:00:00 2001 From: Iain Churcher Date: Thu, 29 Apr 2010 19:02:01 +0100 Subject: Staging: comedi: numerous checkpatch.pl issues in dt282x.c This patch cleans up numerous WARNINGS and ERRORS listed by the checkpatch.pl tool Signed-off-by: Iain Churcher Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/dt282x.c b/drivers/staging/comedi/drivers/dt282x.c index e548763..fd8728c 100644 --- a/drivers/staging/comedi/drivers/dt282x.c +++ b/drivers/staging/comedi/drivers/dt282x.c @@ -45,9 +45,9 @@ Configuration options: [7] - AO 1 jumpered for 0=straight binary, 1=2's complement [8] - AI jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5] [9] - AO 0 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], - 4=[-2.5,2.5] + 4=[-2.5,2.5] [10]- A0 1 jumpered for 0=[-10,10]V, 1=[0,10], 2=[-5,5], 3=[0,5], - 4=[-2.5,2.5] + 4=[-2.5,2.5] Notes: - AO commands might be broken. @@ -155,79 +155,58 @@ Notes: #define DT2821_XCLK 0x0002 /* (R/W) external clock enable */ #define DT2821_BDINIT 0x0001 /* (W) initialize board */ -static const struct comedi_lrange range_dt282x_ai_lo_bipolar = { 4, { - RANGE(-10, - 10), - RANGE(-5, - 5), - RANGE(-2.5, - 2.5), - RANGE - (-1.25, - 1.25) - } +static const struct comedi_lrange range_dt282x_ai_lo_bipolar = { + 4, { + RANGE(-10, 10), + RANGE(-5, 5), + RANGE(-2.5, 2.5), + RANGE(-1.25, 1.25) + } }; -static const struct comedi_lrange range_dt282x_ai_lo_unipolar = { 4, { - RANGE(0, - 10), - RANGE(0, - 5), - RANGE(0, - 2.5), - RANGE(0, - 1.25) - } +static const struct comedi_lrange range_dt282x_ai_lo_unipolar = { + 4, { + RANGE(0, 10), + RANGE(0, 5), + RANGE(0, 2.5), + RANGE(0, 1.25) + } }; -static const struct comedi_lrange range_dt282x_ai_5_bipolar = { 4, { - RANGE(-5, - 5), - RANGE(-2.5, - 2.5), - RANGE(-1.25, - 1.25), - RANGE - (-0.625, - 0.625), - } +static const struct comedi_lrange range_dt282x_ai_5_bipolar = { + 4, { + RANGE(-5, 5), + RANGE(-2.5, 2.5), + RANGE(-1.25, 1.25), + RANGE(-0.625, 0.625) + } }; -static const struct comedi_lrange range_dt282x_ai_5_unipolar = { 4, { - RANGE(0, - 5), - RANGE(0, - 2.5), - RANGE(0, - 1.25), - RANGE(0, - 0.625), - } +static const struct comedi_lrange range_dt282x_ai_5_unipolar = { + 4, { + RANGE(0, 5), + RANGE(0, 2.5), + RANGE(0, 1.25), + RANGE(0, 0.625), + } }; -static const struct comedi_lrange range_dt282x_ai_hi_bipolar = { 4, { - RANGE(-10, - 10), - RANGE(-1, - 1), - RANGE(-0.1, - 0.1), - RANGE - (-0.02, - 0.02) - } +static const struct comedi_lrange range_dt282x_ai_hi_bipolar = { + 4, { + RANGE(-10, 10), + RANGE(-1, 1), + RANGE(-0.1, 0.1), + RANGE(-0.02, 0.02) + } }; -static const struct comedi_lrange range_dt282x_ai_hi_unipolar = { 4, { - RANGE(0, - 10), - RANGE(0, - 1), - RANGE(0, - 0.1), - RANGE(0, - 0.02) - } +static const struct comedi_lrange range_dt282x_ai_hi_unipolar = { + 4, { + RANGE(0, 10), + RANGE(0, 1), + RANGE(0, 0.1), + RANGE(0, 0.02) + } }; struct dt282x_board { @@ -370,7 +349,7 @@ static const struct dt282x_board boardtypes[] = { }, }; -#define n_boardtypes sizeof(boardtypes)/sizeof(struct dt282x_board) +#define n_boardtypes (sizeof(boardtypes)/sizeof(struct dt282x_board)) #define this_board ((const struct dt282x_board *)dev->board_ptr) struct dt282x_private { @@ -411,21 +390,25 @@ struct dt282x_private { #define update_adcsr(a) outw(devpriv->adcsr|(a), dev->iobase+DT2821_ADCSR) #define mux_busy() (inw(dev->iobase+DT2821_ADCSR)&DT2821_MUXBUSY) #define ad_done() (inw(dev->iobase+DT2821_ADCSR)&DT2821_ADDONE) -#define update_supcsr(a) outw(devpriv->supcsr|(a), dev->iobase+DT2821_SUPCSR) +#define update_supcsr(a) outw(devpriv->supcsr|(a), dev->iobase+DT2821_SUPCSR) /* * danger! macro abuse... a is the expression to wait on, and b is * the statement(s) to execute if it doesn't happen. */ -#define wait_for(a, b) \ - do{ \ - int _i; \ - for (_i=0;_iad_2scomp) { + if (devpriv->ad_2scomp) sign = 1 << (boardtype.adbits - 1); - } else { + else sign = 0; - } if (nbytes % 2) comedi_error(dev, "bug! odd number of bytes from dma xfer"); n = nbytes / 2; - for (i = 0; i < n; i++) { + for (i = 0; i < n; i++) buf[i] = (buf[i] & mask) ^ sign; - } } static void dt282x_ao_dma_interrupt(struct comedi_device *dev) @@ -486,7 +467,7 @@ static void dt282x_ao_dma_interrupt(struct comedi_device *dev) update_supcsr(DT2821_CLRDMADNE); if (!s->async->prealloc_buf) { - printk("async->data disappeared. dang!\n"); + printk(KERN_ERR "async->data disappeared. dang!\n"); return; } @@ -499,7 +480,7 @@ static void dt282x_ao_dma_interrupt(struct comedi_device *dev) size = cfc_read_array_from_buffer(s, ptr, devpriv->dma_maxsize); if (size == 0) { - printk("dt282x: AO underrun\n"); + printk(KERN_ERR "dt282x: AO underrun\n"); dt282x_ao_cancel(dev, s); s->async->events |= COMEDI_CB_OVERFLOW; return; @@ -519,7 +500,7 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev) update_supcsr(DT2821_CLRDMADNE); if (!s->async->prealloc_buf) { - printk("async->data disappeared. dang!\n"); + printk(KERN_ERR "async->data disappeared. dang!\n"); return; } @@ -540,7 +521,7 @@ static void dt282x_ai_dma_interrupt(struct comedi_device *dev) devpriv->nread -= size / 2; if (devpriv->nread < 0) { - printk("dt282x: off by one\n"); + printk(KERN_INFO "dt282x: off by one\n"); devpriv->nread = 0; } if (!devpriv->nread) { @@ -651,7 +632,7 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) static int warn = 5; if (--warn <= 0) { disable_irq(dev->irq); - printk("disabling irq\n"); + printk(KERN_INFO "disabling irq\n"); } #endif comedi_error(dev, "D/A error"); @@ -666,13 +647,13 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) data = (short)inw(dev->iobase + DT2821_ADDAT); data &= (1 << boardtype.adbits) - 1; - if (devpriv->ad_2scomp) { + + if (devpriv->ad_2scomp) data ^= 1 << (boardtype.adbits - 1); - } ret = comedi_buf_put(s->async, data); - if (ret == 0) { + + if (ret == 0) s->async->events |= COMEDI_CB_OVERFLOW; - } devpriv->nread--; if (!devpriv->nread) { @@ -685,7 +666,8 @@ static irqreturn_t dt282x_interrupt(int irq, void *d) } #endif comedi_event(dev, s); - /* printk("adcsr=0x%02x dacsr-0x%02x supcsr=0x%02x\n", adcsr, dacsr, supcsr); */ + /* printk("adcsr=0x%02x dacsr-0x%02x supcsr=0x%02x\n", + adcsr, dacsr, supcsr); */ return IRQ_RETVAL(handled); } @@ -776,7 +758,10 @@ static int dt282x_ai_cmdtest(struct comedi_device *dev, if (err) return 1; - /* step 2: make sure trigger sources are unique and mutually compatible */ + /* + * step 2: make sure trigger sources are unique + * and mutually compatible + */ /* note that mutual compatibility is not an issue here */ if (cmd->scan_begin_src != TRIG_FOLLOW && @@ -859,7 +844,8 @@ static int dt282x_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) if (devpriv->usedma == 0) { comedi_error(dev, - "driver requires 2 dma channels to execute command"); + "driver requires 2 dma channels" + " to execute command"); return -EIO; } @@ -1049,7 +1035,10 @@ static int dt282x_ao_cmdtest(struct comedi_device *dev, if (err) return 1; - /* step 2: make sure trigger sources are unique and mutually compatible */ + /* + * step 2: make sure trigger sources are unique + * and mutually compatible + */ /* note that mutual compatibility is not an issue here */ if (cmd->stop_src != TRIG_COUNT && cmd->stop_src != TRIG_NONE) @@ -1064,7 +1053,7 @@ static int dt282x_ao_cmdtest(struct comedi_device *dev, cmd->start_arg = 0; err++; } - if (cmd->scan_begin_arg < 5000 /* XXX unknown */ ) { + if (cmd->scan_begin_arg < 5000 /* XXX unknown */) { cmd->scan_begin_arg = 5000; err++; } @@ -1115,7 +1104,7 @@ static int dt282x_ao_inttrig(struct comedi_device *dev, size = cfc_read_array_from_buffer(s, devpriv->dma[0].buf, devpriv->dma_maxsize); if (size == 0) { - printk("dt282x: AO underrun\n"); + printk(KERN_ERR "dt282x: AO underrun\n"); return -EPIPE; } prep_ao_dma(dev, 0, size); @@ -1123,7 +1112,7 @@ static int dt282x_ao_inttrig(struct comedi_device *dev, size = cfc_read_array_from_buffer(s, devpriv->dma[1].buf, devpriv->dma_maxsize); if (size == 0) { - printk("dt282x: AO underrun\n"); + printk(KERN_ERR "dt282x: AO underrun\n"); return -EPIPE; } prep_ao_dma(dev, 1, size); @@ -1141,7 +1130,8 @@ static int dt282x_ao_cmd(struct comedi_device *dev, struct comedi_subdevice *s) if (devpriv->usedma == 0) { comedi_error(dev, - "driver requires 2 dma channels to execute command"); + "driver requires 2 dma channels" + " to execute command"); return -EIO; } @@ -1262,7 +1252,8 @@ static const struct comedi_lrange *opt_ao_range_lkup(int x) return ao_range_table[x]; } -enum { opt_iobase = 0, opt_irq, opt_dma1, opt_dma2, /* i/o base, irq, dma channels */ +enum { /* i/o base, irq, dma channels */ + opt_iobase = 0, opt_irq, opt_dma1, opt_dma2, opt_diff, /* differential */ opt_ai_twos, opt_ao0_twos, opt_ao1_twos, /* twos comp */ opt_ai_range, opt_ao0_range, opt_ao1_range, /* range */ @@ -1295,9 +1286,9 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (!iobase) iobase = 0x240; - printk("comedi%d: dt282x: 0x%04lx", dev->minor, iobase); + printk(KERN_INFO "comedi%d: dt282x: 0x%04lx", dev->minor, iobase); if (!request_region(iobase, DT2821_SIZE, "dt282x")) { - printk(" I/O port conflict\n"); + printk(KERN_INFO " I/O port conflict\n"); return -EBUSY; } dev->iobase = iobase; @@ -1305,7 +1296,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) outw(DT2821_BDINIT, dev->iobase + DT2821_SUPCSR); i = inw(dev->iobase + DT2821_ADCSR); #ifdef DEBUG - printk(" fingerprint=%x,%x,%x,%x,%x", + printk(KERN_DEBUG " fingerprint=%x,%x,%x,%x,%x", inw(dev->iobase + DT2821_ADCSR), inw(dev->iobase + DT2821_CHANCSR), inw(dev->iobase + DT2821_DACSR), @@ -1323,7 +1314,7 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) != DT2821_SUPCSR_VAL) || ((inw(dev->iobase + DT2821_TMRCTR) & DT2821_TMRCTR_MASK) != DT2821_TMRCTR_VAL)) { - printk(" board not found"); + printk(KERN_ERR " board not found"); return -EIO; } /* should do board test */ @@ -1344,26 +1335,25 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) irq = probe_irq_off(irqs); restore_flags(flags); - if (0 /* error */ ) { - printk(" error probing irq (bad)"); - } + if (0 /* error */) + printk(KERN_ERR " error probing irq (bad)"); } #endif if (irq > 0) { - printk(" ( irq = %d )", irq); + printk(KERN_INFO " ( irq = %d )", irq); ret = request_irq(irq, dt282x_interrupt, 0, "dt282x", dev); if (ret < 0) { - printk(" failed to get irq\n"); + printk(KERN_ERR " failed to get irq\n"); return -EIO; } dev->irq = irq; } else if (irq == 0) { - printk(" (no irq)"); + printk(KERN_INFO " (no irq)"); } else { #if 0 - printk(" (probe returned multiple irqs--bad)"); + printk(KERN_INFO " (probe returned multiple irqs--bad)"); #else - printk(" (irq probe not implemented)"); + printk(KERN_INFO " (irq probe not implemented)"); #endif } @@ -1435,16 +1425,15 @@ static int dt282x_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->maxdata = 1; s->range_table = &range_digital; - printk("\n"); + printk(KERN_INFO "\n"); return 0; } static void free_resources(struct comedi_device *dev) { - if (dev->irq) { + if (dev->irq) free_irq(dev->irq, dev); - } if (dev->iobase) release_region(dev->iobase, DT2821_SIZE); if (dev->private) { @@ -1461,7 +1450,7 @@ static void free_resources(struct comedi_device *dev) static int dt282x_detach(struct comedi_device *dev) { - printk("comedi%d: dt282x: remove\n", dev->minor); + printk(KERN_INFO "comedi%d: dt282x: remove\n", dev->minor); free_resources(dev); @@ -1475,7 +1464,7 @@ static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2) devpriv->usedma = 0; if (!dma1 && !dma2) { - printk(" (no dma)"); + printk(KERN_ERR " (no dma)"); return 0; } @@ -1503,11 +1492,11 @@ static int dt282x_grab_dma(struct comedi_device *dev, int dma1, int dma2) devpriv->dma[0].buf = (void *)__get_free_page(GFP_KERNEL | GFP_DMA); devpriv->dma[1].buf = (void *)__get_free_page(GFP_KERNEL | GFP_DMA); if (!devpriv->dma[0].buf || !devpriv->dma[1].buf) { - printk(" can't get DMA memory"); + printk(KERN_ERR " can't get DMA memory"); return -ENOMEM; } - printk(" (dma=%d,%d)", dma1, dma2); + printk(KERN_INFO " (dma=%d,%d)", dma1, dma2); devpriv->usedma = 1; -- cgit v0.10.2 From c849d2538ebeef1ac26fad7a10c18b1e0fc35161 Mon Sep 17 00:00:00 2001 From: Roel Van Nyen Date: Thu, 29 Apr 2010 19:27:31 +0200 Subject: Staging: iio: Fix remaining code style issues fix code style issues Signed-of-by: Roel Van Nyen Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/industrialio-core.c b/drivers/staging/iio/industrialio-core.c index 37f58f6..7c9a12e 100644 --- a/drivers/staging/iio/industrialio-core.c +++ b/drivers/staging/iio/industrialio-core.c @@ -809,7 +809,7 @@ int iio_device_register(struct iio_dev *dev_info) ret = iio_device_register_eventset(dev_info); if (ret) { dev_err(dev_info->dev.parent, - "Failed to register event set \n"); + "Failed to register event set\n"); goto error_free_sysfs; } if (dev_info->modes & INDIO_RING_TRIGGERED) diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c index 851a97e..e9570e3 100644 --- a/drivers/staging/iio/ring_sw.c +++ b/drivers/staging/iio/ring_sw.c @@ -126,8 +126,7 @@ int iio_store_to_sw_ring(struct iio_sw_ring_buffer *ring, spin_lock(&ring->buf.shared_ev_pointer.lock); ret = iio_push_or_escallate_ring_event(&ring->buf, - IIO_EVENT_CODE_RING_100_FULL, - timestamp); + IIO_EVENT_CODE_RING_100_FULL, timestamp); spin_unlock(&ring->buf.shared_ev_pointer.lock); if (ret) goto error_ret; -- cgit v0.10.2 From d87d909a45b7b6bf411559e85d386ef0a2f4bbae Mon Sep 17 00:00:00 2001 From: Randy Dunlap Date: Fri, 30 Apr 2010 10:07:12 -0700 Subject: Staging: cxt1e1: use netdev_priv to fix build Fix cxt1e1 build error: drivers/staging/cxt1e1/linux.c:1195: error: 'struct net_device' has no member named 'priv' Signed-off-by: Randy Dunlap Acked-by: Bob Beers Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/cxt1e1/linux.c b/drivers/staging/cxt1e1/linux.c index 23e184d..aee7018 100644 --- a/drivers/staging/cxt1e1/linux.c +++ b/drivers/staging/cxt1e1/linux.c @@ -1192,7 +1192,7 @@ c4_add_dev (hdw_info_t * hi, int brdno, unsigned long f0, unsigned long f1, hi->devname, irq1); unregister_netdev (ndev); free_irq (irq0, ndev); - OS_kfree (ndev->priv); + OS_kfree (netdev_priv(ndev)); OS_kfree (ndev); error_flag = EIO; return 0; -- cgit v0.10.2 From 981bdf41ea7bbeece1f08045e0456c725a4d8f2f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 15:25:53 -0700 Subject: Staging: comedi: fix up coding style issues in comedilib.h This resolves some issues with comedilib.h Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedilib.h b/drivers/staging/comedi/comedilib.h index 3918d53..27dd3be 100644 --- a/drivers/staging/comedi/comedilib.h +++ b/drivers/staging/comedi/comedilib.h @@ -164,10 +164,10 @@ int comedi_get_subdevice_type(unsigned int minor, unsigned int subdevice); int comedi_find_subdevice_by_type(unsigned int minor, int type, unsigned int subd); int comedi_get_n_channels(unsigned int minor, unsigned int subdevice); -unsigned int comedi_get_maxdata(unsigned int minor, unsigned int subdevice, unsigned - int chan); -int comedi_get_n_ranges(unsigned int minor, unsigned int subdevice, unsigned int - chan); +unsigned int comedi_get_maxdata(unsigned int minor, unsigned int subdevice, + unsigned int chan); +int comedi_get_n_ranges(unsigned int minor, unsigned int subdevice, + unsigned int chan); int comedi_do_insn(unsigned int minor, struct comedi_insn *insn); int comedi_poll(unsigned int minor, unsigned int subdev); -- cgit v0.10.2 From baf22b64aa7eb2d32c4ff49262b8d26c18bb232a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 15:26:54 -0700 Subject: Staging: comedi: fix coding style issues in comedidev.h This resolves some coding style issues in comedidev.h And yes, volatile here meant nothing, removing it is ok. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index ebdccfd..4e1955b 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -57,7 +57,7 @@ static int __init x ## _init_module(void) \ {return comedi_driver_register(&(x)); } \ static void __exit x ## _cleanup_module(void) \ - {comedi_driver_unregister(&(x)); } \ + {comedi_driver_unregister(&(x)); } \ module_init(x ## _init_module); \ module_exit(x ## _cleanup_module); @@ -132,7 +132,7 @@ struct comedi_subdevice { struct comedi_device *device; int type; int n_chan; - volatile int subdev_flags; + int subdev_flags; int len_chanlist; /* maximum length of channel/gain list */ void *private; @@ -402,7 +402,7 @@ int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s, #define RANGE(a, b) {(a)*1e6, (b)*1e6, 0} #define RANGE_ext(a, b) {(a)*1e6, (b)*1e6, RF_EXTERNAL} #define RANGE_mA(a, b) {(a)*1e6, (b)*1e6, UNIT_mA} -#define RANGE_unitless(a, b) {(a)*1e6, (b)*1e6, 0} /* XXX */ +#define RANGE_unitless(a, b) {(a)*1e6, (b)*1e6, 0} #define BIP_RANGE(a) {-(a)*1e6, (a)*1e6, 0} #define UNI_RANGE(a) {0, (a)*1e6, 0} -- cgit v0.10.2 From 787ae4e26f3600c7d30693a92e18174a2d6363fc Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 15:31:13 -0700 Subject: Staging: comedi: remove unneeded ifdef in comedi_bond.c No need to check for MODULE_LICENSE, it's always there. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/comedi_bond.c b/drivers/staging/comedi/drivers/comedi_bond.c index 41311d9..4e6797a 100644 --- a/drivers/staging/comedi/drivers/comedi_bond.c +++ b/drivers/staging/comedi/drivers/comedi_bond.c @@ -96,9 +96,7 @@ Configuration Options: #define MAX_CHANS 256 #define MODULE_NAME "comedi_bond" -#ifdef MODULE_LICENSE MODULE_LICENSE("GPL"); -#endif #ifndef STR # define STR1(x) #x # define STR(x) STR1(x) -- cgit v0.10.2 From ecfe20db3e0e2ff9df4007c4f1d34b27a24265fd Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 15:35:37 -0700 Subject: Staging: comedi: fix up coding style issues in range.c Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/range.c b/drivers/staging/comedi/range.c index 188c479..c35ade9 100644 --- a/drivers/staging/comedi/range.c +++ b/drivers/staging/comedi/range.c @@ -22,7 +22,7 @@ */ #include "comedidev.h" -#include +#include const struct comedi_lrange range_bipolar10 = { 1, {BIP_RANGE(10)} }; const struct comedi_lrange range_bipolar5 = { 1, {BIP_RANGE(5)} }; @@ -130,14 +130,10 @@ int check_chanlist(struct comedi_subdevice *s, int n, unsigned int *chanlist) if (CR_CHAN(chanlist[i]) >= s->n_chan || CR_RANGE(chanlist[i]) >= s->range_table->length || aref_invalid(s, chanlist[i])) { - printk - ("bad chanlist[%d]=0x%08x n_chan=%d range length=%d\n", - i, chanlist[i], s->n_chan, - s->range_table->length); -#if 0 - for (i = 0; i < n; i++) - printk("[%d]=0x%08x\n", i, chanlist[i]); -#endif + printk(KERN_ERR "bad chanlist[%d]=0x%08x " + "in_chan=%d range length=%d\n", i, + chanlist[i], s->n_chan, + s->range_table->length); return -EINVAL; } } else if (s->range_table_list) { @@ -147,13 +143,13 @@ int check_chanlist(struct comedi_subdevice *s, int n, unsigned int *chanlist) CR_RANGE(chanlist[i]) >= s->range_table_list[chan]->length || aref_invalid(s, chanlist[i])) { - printk("bad chanlist[%d]=0x%08x\n", i, - chanlist[i]); + printk(KERN_ERR "bad chanlist[%d]=0x%08x\n", + i, chanlist[i]); return -EINVAL; } } } else { - printk("comedi: (bug) no range type list!\n"); + printk(KERN_ERR "comedi: (bug) no range type list!\n"); return -EINVAL; } return 0; -- cgit v0.10.2 From 8e81f184d9fc3c607a2f0b236d765eb348fbd845 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 15:43:12 -0700 Subject: Staging: comedi: fix up coding issues in proc.c Fixes all but one. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/proc.c b/drivers/staging/comedi/proc.c index 5a22fe6..2b41faf 100644 --- a/drivers/staging/comedi/proc.c +++ b/drivers/staging/comedi/proc.c @@ -33,9 +33,6 @@ #include /* #include */ -int comedi_read_procmem(char *buf, char **start, off_t offset, int len, - int *eof, void *data); - extern struct comedi_driver *comedi_drivers; int comedi_read_procmem(char *buf, char **start, off_t offset, int len, @@ -49,7 +46,8 @@ int comedi_read_procmem(char *buf, char **start, off_t offset, int len, l += sprintf(buf + l, "comedi version " COMEDI_RELEASE "\n" "format string: %s\n", - "\"%2d: %-20s %-20s %4d\",i,driver_name,board_name,n_subdevices"); + "\"%2d: %-20s %-20s %4d\", i, " + "driver_name, board_name, n_subdevices"); for (i = 0; i < COMEDI_NUM_BOARD_MINORS; i++) { struct comedi_device_file_info *dev_file_info = -- cgit v0.10.2 From 47c92858446004d3cf28d8115266d631cdfd5d0a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 15:48:19 -0700 Subject: Staging: comedi: remove local pci_ids.h file It's only being used for one vendor id, so move it into the driver that uses it and delete the file. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index c7cba95..dc4bd04 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -63,7 +63,6 @@ Configuration options: */ #include "../comedidev.h" -#include "../pci_ids.h" #include #include @@ -74,6 +73,8 @@ Configuration options: #include "comedi_pci.h" #include "comedi_fc.h" +#define PCI_VENDOR_ID_AMCC 0x10e8 + /* paranoid checks are broken */ #undef PCI9118_PARANOIDCHECK /* * if defined, then is used code which control diff --git a/drivers/staging/comedi/pci_ids.h b/drivers/staging/comedi/pci_ids.h deleted file mode 100644 index d979aa8..0000000 --- a/drivers/staging/comedi/pci_ids.h +++ /dev/null @@ -1,31 +0,0 @@ -/*************************************************************************** - * * - * 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. * - * * - ***************************************************************************/ - -#ifndef __COMPAT_LINUX_PCI_IDS_H -#define __COMPAT_LINUX_PCI_IDS_H - -#include - -#ifndef PCI_VENDOR_ID_AMCC -#define PCI_VENDOR_ID_AMCC 0x10e8 -#endif - -#ifndef PCI_VENDOR_ID_CBOARDS -#define PCI_VENDOR_ID_CBOARDS 0x1307 -#endif - -#ifndef PCI_VENDOR_ID_QUANCOM -#define PCI_VENDOR_ID_QUANCOM 0x8008 -#endif - -#ifndef PCI_DEVICE_ID_QUANCOM_GPIB -#define PCI_DEVICE_ID_QUANCOM_GPIB 0x3302 -#endif - -#endif /* __COMPAT_LINUX_PCI_IDS_H */ -- cgit v0.10.2 From be29eac8ed3fd21d86f79d2e84dff49b8a13cd2c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 15:55:39 -0700 Subject: Staging: comedi: remove wrapper.h Just make the bit call when it is needed, no need to wrap things up like this for no reason. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 4b69d06..800106a 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -38,7 +38,6 @@ #include #include #include "comedidev.h" -#include "wrapper.h" #include /* for SuSE brokenness */ #include #include @@ -442,9 +441,7 @@ int comedi_buf_alloc(struct comedi_device *dev, struct comedi_subdevice *s, unsigned i; for (i = 0; i < async->n_buf_pages; ++i) { if (async->buf_page_list[i].virt_addr) { - mem_map_unreserve(virt_to_page - (async->buf_page_list[i]. - virt_addr)); + clear_bit(PG_reserved, &(virt_to_page(async->buf_page_list[i].virt_addr)->flags)); if (s->async_dma_dir != DMA_NONE) { dma_free_coherent(dev->hw_dev, PAGE_SIZE, @@ -497,12 +494,9 @@ int comedi_buf_alloc(struct comedi_device *dev, struct comedi_subdevice *s, if (async->buf_page_list[i].virt_addr == NULL) break; - mem_map_reserve(virt_to_page - (async->buf_page_list[i]. - virt_addr)); - pages[i] = - virt_to_page(async-> - buf_page_list[i].virt_addr); + set_bit(PG_reserved, + &(virt_to_page(async->buf_page_list[i].virt_addr)->flags)); + pages[i] = virt_to_page(async->buf_page_list[i].virt_addr); } } if (i == n_pages) { @@ -519,9 +513,7 @@ int comedi_buf_alloc(struct comedi_device *dev, struct comedi_subdevice *s, NULL) { break; } - mem_map_unreserve(virt_to_page - (async->buf_page_list - [i].virt_addr)); + clear_bit(PG_reserved, &(virt_to_page(async->buf_page_list[i].virt_addr)->flags)); if (s->async_dma_dir != DMA_NONE) { dma_free_coherent(dev->hw_dev, PAGE_SIZE, diff --git a/drivers/staging/comedi/wrapper.h b/drivers/staging/comedi/wrapper.h deleted file mode 100644 index 77fc673..0000000 --- a/drivers/staging/comedi/wrapper.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - linux/wrapper.h compatibility header - - 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. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#ifndef __COMPAT_LINUX_WRAPPER_H_ -#define __COMPAT_LINUX_WRAPPER_H_ - -#define mem_map_reserve(p) set_bit(PG_reserved, &((p)->flags)) -#define mem_map_unreserve(p) clear_bit(PG_reserved, &((p)->flags)) - -#endif /* __COMPAT_LINUX_WRAPPER_H_ */ -- cgit v0.10.2 From dc1da7f7bae9e71e56f365d7e987760c88c116bd Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 15:59:18 -0700 Subject: Staging: comedi: fix up remaining coding style issue in proc.c Move the external variable into a .h file, where it belongs. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_fops.h b/drivers/staging/comedi/comedi_fops.h index cb503c8..da4b4f5 100644 --- a/drivers/staging/comedi/comedi_fops.h +++ b/drivers/staging/comedi/comedi_fops.h @@ -5,5 +5,6 @@ extern struct class *comedi_class; extern const struct file_operations comedi_fops; extern int comedi_autoconfig; +extern struct comedi_driver *comedi_drivers; #endif /* _COMEDI_FOPS_H */ diff --git a/drivers/staging/comedi/proc.c b/drivers/staging/comedi/proc.c index 2b41faf..c0035cb 100644 --- a/drivers/staging/comedi/proc.c +++ b/drivers/staging/comedi/proc.c @@ -30,11 +30,10 @@ #define __NO_VERSION__ #include "comedidev.h" +#include "comedi_fops.h" #include /* #include */ -extern struct comedi_driver *comedi_drivers; - int comedi_read_procmem(char *buf, char **start, off_t offset, int len, int *eof, void *data) { -- cgit v0.10.2 From 4e40cee9c8a46d4231d28ae7ae6d9938cf0526d5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 16:52:52 -0700 Subject: Staging: comedi: use the standard NI pci device id Don't redefine something that we already have in the core kernel. Also move to use PCI_DEVICE() macros to make things a bit simpler when changing the define. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 4e1955b..6eba86d 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -110,7 +110,6 @@ COMEDI_PCI_INITCLEANUP_NOMODULE(comedi_driver, pci_id_table) #define PCI_VENDOR_ID_INOVA 0x104c -#define PCI_VENDOR_ID_NATINST 0x1093 #define PCI_VENDOR_ID_DATX 0x1116 #define PCI_VENDOR_ID_COMPUTERBOARDS 0x1307 #define PCI_VENDOR_ID_ADVANTECH 0x13fe diff --git a/drivers/staging/comedi/drivers/mite.c b/drivers/staging/comedi/drivers/mite.c index 188f580..99d9985 100644 --- a/drivers/staging/comedi/drivers/mite.c +++ b/drivers/staging/comedi/drivers/mite.c @@ -76,7 +76,7 @@ void mite_init(void) for (pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL); pcidev != NULL; pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) { - if (pcidev->vendor == PCI_VENDOR_ID_NATINST) { + if (pcidev->vendor == PCI_VENDOR_ID_NI) { unsigned i; mite = kzalloc(sizeof(*mite), GFP_KERNEL); diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h index 9d5049f..999551f 100644 --- a/drivers/staging/comedi/drivers/mite.h +++ b/drivers/staging/comedi/drivers/mite.h @@ -27,8 +27,6 @@ #include #include "../comedidev.h" -#define PCI_VENDOR_ID_NATINST 0x1093 - /* #define DEBUG_MITE */ #define PCIMIO_COMPAT diff --git a/drivers/staging/comedi/drivers/ni_6527.c b/drivers/staging/comedi/drivers/ni_6527.c index 653b4c8..1fc76cc 100644 --- a/drivers/staging/comedi/drivers/ni_6527.c +++ b/drivers/staging/comedi/drivers/ni_6527.c @@ -107,10 +107,9 @@ static const struct ni6527_board ni6527_boards[] = { #define this_board ((const struct ni6527_board *)dev->board_ptr) static DEFINE_PCI_DEVICE_TABLE(ni6527_pci_table) = { - { - PCI_VENDOR_ID_NATINST, 0x2b10, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2b20, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - 0} + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2b10)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2b20)}, + {0} }; MODULE_DEVICE_TABLE(pci, ni6527_pci_table); diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 9a4fffe..d793f5a 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -266,30 +266,29 @@ static inline unsigned ni_65xx_total_num_ports(const struct ni_65xx_board } static DEFINE_PCI_DEVICE_TABLE(ni_65xx_pci_table) = { - { - PCI_VENDOR_ID_NATINST, 0x1710, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x7085, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x7086, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x7087, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x7088, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70a9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70c3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70c8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70c9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70cc, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70CD, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70d1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70d2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70d3, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x7124, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x7125, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x7126, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x7127, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x7128, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x718b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x718c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x71c5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - 0} + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1710)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x7085)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x7086)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x7087)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x7088)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70a9)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70c3)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70c8)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70c9)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70cc)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70CD)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70d1)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70d2)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70d3)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x7124)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x7125)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x7126)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x7127)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x7128)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x718b)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x718c)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x71c5)}, + {0} }; MODULE_DEVICE_TABLE(pci, ni_65xx_pci_table); diff --git a/drivers/staging/comedi/drivers/ni_660x.c b/drivers/staging/comedi/drivers/ni_660x.c index 017630f..6a6fae5 100644 --- a/drivers/staging/comedi/drivers/ni_660x.c +++ b/drivers/staging/comedi/drivers/ni_660x.c @@ -420,12 +420,11 @@ static const struct ni_660x_board ni_660x_boards[] = { #define NI_660X_MAX_NUM_COUNTERS (NI_660X_MAX_NUM_CHIPS * counters_per_chip) static DEFINE_PCI_DEVICE_TABLE(ni_660x_pci_table) = { - { - PCI_VENDOR_ID_NATINST, 0x2c60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1310, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1360, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2cc0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - 0} + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2c60)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1310)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1360)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2cc0)}, + {0} }; MODULE_DEVICE_TABLE(pci, ni_660x_pci_table); diff --git a/drivers/staging/comedi/drivers/ni_670x.c b/drivers/staging/comedi/drivers/ni_670x.c index 68221bf..44ae836 100644 --- a/drivers/staging/comedi/drivers/ni_670x.c +++ b/drivers/staging/comedi/drivers/ni_670x.c @@ -47,8 +47,6 @@ Commands are not supported. #include "mite.h" -#define PCI_VENDOR_ID_NATINST 0x1093 - #define AO_VALUE_OFFSET 0x00 #define AO_CHAN_OFFSET 0x0c #define AO_STATUS_OFFSET 0x10 @@ -91,12 +89,9 @@ static const struct ni_670x_board ni_670x_boards[] = { }; static DEFINE_PCI_DEVICE_TABLE(ni_670x_pci_table) = { - { - PCI_VENDOR_ID_NATINST, 0x2c90, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, - /*{ PCI_VENDOR_ID_NATINST, 0x0000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },*/ - { - 0} + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2c90)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1920)}, + {0} }; MODULE_DEVICE_TABLE(pci, ni_670x_pci_table); diff --git a/drivers/staging/comedi/drivers/ni_labpc.c b/drivers/staging/comedi/drivers/ni_labpc.c index 9b840a9..67c8a53 100644 --- a/drivers/staging/comedi/drivers/ni_labpc.c +++ b/drivers/staging/comedi/drivers/ni_labpc.c @@ -499,9 +499,8 @@ static struct comedi_driver driver_labpc = { #ifdef CONFIG_COMEDI_PCI static DEFINE_PCI_DEVICE_TABLE(labpc_pci_table) = { - { - PCI_VENDOR_ID_NATINST, 0x161, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - 0} + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x161)}, + {0} }; MODULE_DEVICE_TABLE(pci, labpc_pci_table); diff --git a/drivers/staging/comedi/drivers/ni_pcidio.c b/drivers/staging/comedi/drivers/ni_pcidio.c index 9d33751..b126638 100644 --- a/drivers/staging/comedi/drivers/ni_pcidio.c +++ b/drivers/staging/comedi/drivers/ni_pcidio.c @@ -83,8 +83,6 @@ comedi_nonfree_firmware tarball available from http://www.comedi.org #define DPRINTK(format, args...) #endif -#define PCI_VENDOR_ID_NATINST 0x1093 - #define PCI_DIO_SIZE 4096 #define PCI_MITE_SIZE 4096 @@ -379,18 +377,17 @@ static const struct nidio_board nidio_boards[] = { #define this_board ((const struct nidio_board *)dev->board_ptr) static DEFINE_PCI_DEVICE_TABLE(ni_pcidio_pci_table) = { - { - PCI_VENDOR_ID_NATINST, 0x1150, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1320, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x12b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x0160, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1630, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x13c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x0400, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1250, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x17d0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1800, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - 0} + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1150)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1320)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x12b0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x0160)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1630)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x13c0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x0400)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1250)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x17d0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1800)}, + {0} }; MODULE_DEVICE_TABLE(pci, ni_pcidio_pci_table); diff --git a/drivers/staging/comedi/drivers/ni_pcimio.c b/drivers/staging/comedi/drivers/ni_pcimio.c index 24c8b8e..577fda8 100644 --- a/drivers/staging/comedi/drivers/ni_pcimio.c +++ b/drivers/staging/comedi/drivers/ni_pcimio.c @@ -130,60 +130,59 @@ Bugs: /* The following two tables must be in the same order */ static DEFINE_PCI_DEVICE_TABLE(ni_pci_table) = { - { - PCI_VENDOR_ID_NATINST, 0x0162, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1170, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1180, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1190, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x11b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x11c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x11d0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1270, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1330, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1340, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1350, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x14e0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x14f0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1580, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x15b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1880, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x1870, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x18b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x18c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2420, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2430, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2890, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x28c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2a60, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2a70, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2a80, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2ab0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2b80, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2b90, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2c80, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x2ca0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70aa, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70ab, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70ac, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70af, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70b0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70b4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70b6, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70b7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70b8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70bc, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70bd, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70bf, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70c0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x70f2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x710d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x716c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x716d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x717f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x71bc, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - PCI_VENDOR_ID_NATINST, 0x717d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, { - 0} + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x0162)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1170)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1180)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1190)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x11b0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x11c0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x11d0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1270)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1330)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1340)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1350)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x14e0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x14f0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1580)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x15b0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1880)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x1870)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x18b0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x18c0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2410)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2420)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2430)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2890)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x28c0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2a60)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2a70)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2a80)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2ab0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2b80)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2b90)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2c80)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x2ca0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70aa)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70ab)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70ac)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70af)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70b0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70b4)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70b6)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70b7)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70b8)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70bc)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70bd)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70bf)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70c0)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x70f2)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x710d)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x716c)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x716d)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x717f)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x71bc)}, + {PCI_DEVICE(PCI_VENDOR_ID_NI, 0x717d)}, + {0} }; MODULE_DEVICE_TABLE(pci, ni_pci_table); -- cgit v0.10.2 From 7a102e0ef173ff936efb6ea33b6a9db865c82645 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 16:58:36 -0700 Subject: Staging: comedi: remove some pci vendor ids These are never used, so remove them. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 6eba86d..162ac8d 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -109,11 +109,8 @@ COMEDI_MODULE_MACROS \ COMEDI_PCI_INITCLEANUP_NOMODULE(comedi_driver, pci_id_table) -#define PCI_VENDOR_ID_INOVA 0x104c -#define PCI_VENDOR_ID_DATX 0x1116 #define PCI_VENDOR_ID_COMPUTERBOARDS 0x1307 #define PCI_VENDOR_ID_ADVANTECH 0x13fe -#define PCI_VENDOR_ID_RTD 0x1435 #define PCI_VENDOR_ID_AMPLICON 0x14dc #define PCI_VENDOR_ID_ADLINK 0x144a #define PCI_VENDOR_ID_ICP 0x104c -- cgit v0.10.2 From 3ca88dd5c3c6739f685793539a679ab5ac85aca3 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 17:07:25 -0700 Subject: Staging: comedi: move a pci vendor id The vendor id should be in the driver that needs it, not in a common file. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 162ac8d..09d3c51 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -115,7 +115,6 @@ #define PCI_VENDOR_ID_ADLINK 0x144a #define PCI_VENDOR_ID_ICP 0x104c #define PCI_VENDOR_ID_CONTEC 0x1221 -#define PCI_VENDOR_ID_MEILHAUS 0x1402 #define COMEDI_NUM_MINORS 0x100 #define COMEDI_NUM_BOARD_MINORS 0x30 diff --git a/drivers/staging/comedi/drivers/me_daq.c b/drivers/staging/comedi/drivers/me_daq.c index 80e192d..c8484ae 100644 --- a/drivers/staging/comedi/drivers/me_daq.c +++ b/drivers/staging/comedi/drivers/me_daq.c @@ -60,6 +60,7 @@ from http://www.comedi.org #define ME_DRIVER_NAME "me_daq" +#define PCI_VENDOR_ID_MEILHAUS 0x1402 #define ME2000_DEVICE_ID 0x2000 #define ME2600_DEVICE_ID 0x2600 -- cgit v0.10.2 From 558587e2d96a4f5439a609509e4ea88f7536203b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 17:23:51 -0700 Subject: Staging: comedi: move another pci device id to the driver Put a pci vendor id into the drivers that need them. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 09d3c51..8f842f8 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -109,7 +109,6 @@ COMEDI_MODULE_MACROS \ COMEDI_PCI_INITCLEANUP_NOMODULE(comedi_driver, pci_id_table) -#define PCI_VENDOR_ID_COMPUTERBOARDS 0x1307 #define PCI_VENDOR_ID_ADVANTECH 0x13fe #define PCI_VENDOR_ID_AMPLICON 0x14dc #define PCI_VENDOR_ID_ADLINK 0x144a diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index f17cb09..0d9e92e 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -107,6 +107,8 @@ TODO: #define PRESCALED_TIMER_BASE 10000 /* 100kHz 'prescaled' clock for slow aquisition, maybe I'll support this someday */ #define DMA_BUFFER_SIZE 0x1000 +#define PCI_VENDOR_ID_COMPUTERBOARDS 0x1307 + /* maximum value that can be loaded into board's 24-bit counters*/ static const int max_counter_value = 0xffffff; diff --git a/drivers/staging/comedi/drivers/cb_pcimdas.c b/drivers/staging/comedi/drivers/cb_pcimdas.c index 2e61727..49dccbb 100644 --- a/drivers/staging/comedi/drivers/cb_pcimdas.c +++ b/drivers/staging/comedi/drivers/cb_pcimdas.c @@ -52,6 +52,8 @@ See http://www.measurementcomputing.com/PDFManuals/pcim-das1602_16.pdf for more /* #define CBPCIMDAS_DEBUG */ #undef CBPCIMDAS_DEBUG +#define PCI_VENDOR_ID_COMPUTERBOARDS 0x1307 + /* Registers for the PCIM-DAS1602/16 */ /* sizes of io regions (bytes) */ diff --git a/drivers/staging/comedi/drivers/cb_pcimdda.c b/drivers/staging/comedi/drivers/cb_pcimdda.c index e32a317..f404ec77 100644 --- a/drivers/staging/comedi/drivers/cb_pcimdda.c +++ b/drivers/staging/comedi/drivers/cb_pcimdda.c @@ -91,7 +91,8 @@ Configuration Options: #include "8255.h" /* device ids of the cards we support -- currently only 1 card supported */ -#define PCI_ID_PCIM_DDA06_16 0x0053 +#define PCI_VENDOR_ID_COMPUTERBOARDS 0x1307 +#define PCI_ID_PCIM_DDA06_16 0x0053 /* * This is straight from skel.c -- I did this in case this source file -- cgit v0.10.2 From 59af888d6af8e3d2c91b32e00e43f2ce750589b8 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 17:32:04 -0700 Subject: Staging: comedi: move another pci vendor id Move the vendor id to the drivers needing it. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 8f842f8..5592cd1 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -109,7 +109,6 @@ COMEDI_MODULE_MACROS \ COMEDI_PCI_INITCLEANUP_NOMODULE(comedi_driver, pci_id_table) -#define PCI_VENDOR_ID_ADVANTECH 0x13fe #define PCI_VENDOR_ID_AMPLICON 0x14dc #define PCI_VENDOR_ID_ADLINK 0x144a #define PCI_VENDOR_ID_ICP 0x104c diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index f5bb286b..5c1ff77 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -63,6 +63,8 @@ Configuration options: #define DPRINTK(fmt, args...) #endif +#define PCI_VENDOR_ID_ADVANTECH 0x13fe + /* hardware types of the cards */ #define TYPE_PCI171X 0 #define TYPE_PCI1713 2 diff --git a/drivers/staging/comedi/drivers/adv_pci1723.c b/drivers/staging/comedi/drivers/adv_pci1723.c index 1644490..9fe8fcc 100644 --- a/drivers/staging/comedi/drivers/adv_pci1723.c +++ b/drivers/staging/comedi/drivers/adv_pci1723.c @@ -52,7 +52,7 @@ TODO: #include "comedi_pci.h" -#define ADVANTECH_VENDOR 0x13fe /* Advantech PCI vendor ID */ +#define PCI_VENDOR_ID_ADVANTECH 0x13fe /* Advantech PCI vendor ID */ /* hardware types of the cards */ #define TYPE_PCI1723 0 @@ -139,7 +139,7 @@ struct pci1723_board { static const struct pci1723_board boardtypes[] = { { .name = "pci1723", - .vendor_id = ADVANTECH_VENDOR, + .vendor_id = PCI_VENDOR_ID_ADVANTECH, .device_id = 0x1723, .iorange = IORANGE_1723, .cardtype = TYPE_PCI1723, diff --git a/drivers/staging/comedi/drivers/adv_pci_dio.c b/drivers/staging/comedi/drivers/adv_pci_dio.c index dbfeef8..40eeecf 100644 --- a/drivers/staging/comedi/drivers/adv_pci_dio.c +++ b/drivers/staging/comedi/drivers/adv_pci_dio.c @@ -45,6 +45,8 @@ Configuration options: #define DPRINTK(fmt, args...) #endif +#define PCI_VENDOR_ID_ADVANTECH 0x13fe + /* hardware types of the cards */ enum hw_cards_id { TYPE_PCI1730, TYPE_PCI1733, TYPE_PCI1734, TYPE_PCI1736, -- cgit v0.10.2 From 6608224c9e5c8aacf88914697be2d5f1fc7a0be6 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Fri, 30 Apr 2010 17:36:52 -0700 Subject: Staging: comedi: remove another vendor id This id was already in the drivers, so just use it there instead of in a common header file. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 5592cd1..f5b0810 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -109,7 +109,6 @@ COMEDI_MODULE_MACROS \ COMEDI_PCI_INITCLEANUP_NOMODULE(comedi_driver, pci_id_table) -#define PCI_VENDOR_ID_AMPLICON 0x14dc #define PCI_VENDOR_ID_ADLINK 0x144a #define PCI_VENDOR_ID_ICP 0x104c #define PCI_VENDOR_ID_CONTEC 0x1221 diff --git a/drivers/staging/comedi/drivers/amplc_dio200.c b/drivers/staging/comedi/drivers/amplc_dio200.c index 92bcc205..6a87652 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200.c +++ b/drivers/staging/comedi/drivers/amplc_dio200.c @@ -218,7 +218,7 @@ order they appear in the channel list. #define DIO200_DRIVER_NAME "amplc_dio200" /* PCI IDs */ -/* #define PCI_VENDOR_ID_AMPLICON 0x14dc */ +#define PCI_VENDOR_ID_AMPLICON 0x14dc #define PCI_DEVICE_ID_AMPLICON_PCI272 0x000a #define PCI_DEVICE_ID_AMPLICON_PCI215 0x000b #define PCI_DEVICE_ID_INVALID 0xffff diff --git a/drivers/staging/comedi/drivers/amplc_pci224.c b/drivers/staging/comedi/drivers/amplc_pci224.c index 8af156d..c486a87 100644 --- a/drivers/staging/comedi/drivers/amplc_pci224.c +++ b/drivers/staging/comedi/drivers/amplc_pci224.c @@ -118,7 +118,7 @@ Caveats: /* * PCI IDs. */ -/* #define PCI_VENDOR_ID_AMPLICON 0x14dc */ +#define PCI_VENDOR_ID_AMPLICON 0x14dc #define PCI_DEVICE_ID_AMPLICON_PCI224 0x0007 #define PCI_DEVICE_ID_AMPLICON_PCI234 0x0008 #define PCI_DEVICE_ID_INVALID 0xffff -- cgit v0.10.2 From d42bffb8990ca9e74cc1ba625ce23dda2bd8c8c5 Mon Sep 17 00:00:00 2001 From: Marin Mitov Date: Fri, 30 Apr 2010 18:36:09 +0300 Subject: Staging: Yet another (third) dt3155 driver PCI/video4linux compliant Kernel module (device driver) for dt3155 frame grabber video4linux2 compliant (finally). Works with "xawtv -f". ====================================================== This driver is written (almost) from scratch, using the allocator developed for dt3155pci see bellow). The driver uses videobuf-dma-contig interface modified to use the above mentioned allocator instead of dma_alloc_coheren(). The first thing to do was to design a new allocator based on allocating a configurable number of 4MB chunks of memory, that latter are broken into frame buffers of 768x576 bytes kept in different FIFOs (queues). As far as the driver autoloads as a kernel module during kernel boot, the allocation of 4MB chunks succeeds. The driver keeps three FIFOs: one for 4MB chunks, one for free buffers (available for allocations) and one for buffers already allocated. Allocation/deallocation is done automatically though the video4linux videobuf subsystem (some pointers to functions are replaced by driver supplied functions). Sure, there are problems: 1. The device tested to work with "xawtv -f" either via read() method (DT3155_STREAMING not selected), or via mmap() method (DT3155_STREAMING is selected) only. This coresponds to either cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE; or cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING; but not when cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING | V4L2_CAP_READWRITE; This is because xawtv calls poll() before starting streaming, but videobuf_poll_stream() automatically starts reading if streaming is not started. This selection is made during kernel configuration (for now). 2. Works for CCIR, but should work for RS-170 (not tested) This is made also during kernel configuration. 3. Could work for multiple dt3155 frame grabbers in a PC, (private data is allocated during PCI probe() method), but is not tested due to lack of a second board. 4. Not tested on a BIG ENDIAN architecture. 5. Many others you could find .... :-) All critics, comments, suggestions are wellcome. Signed-off-by: Marin Mitov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index d97e46e..6b00e15a 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -137,6 +137,8 @@ source "drivers/staging/sm7xx/Kconfig" source "drivers/staging/dt3155/Kconfig" +source "drivers/staging/dt3155v4l/Kconfig" + source "drivers/staging/crystalhd/Kconfig" source "drivers/staging/cxt1e1/Kconfig" diff --git a/drivers/staging/dt3155v4l/Kconfig b/drivers/staging/dt3155v4l/Kconfig new file mode 100644 index 0000000..5cef542 --- /dev/null +++ b/drivers/staging/dt3155v4l/Kconfig @@ -0,0 +1,28 @@ +config VIDEO_DT3155 + tristate "DT3155 frame grabber, Video4Linux interface" + depends on PCI && VIDEO_DEV && VIDEO_V4L2 + select VIDEOBUF_DMA_CONTIG + default n + ---help--- + Enables dt3155 device driver for the DataTranslation DT3155 frame grabber. + Say Y here if you have this hardware. + In doubt, say N. + + To compile this driver as a module, choose M here: the + module will be called dt3155_v4l. + +config DT3155_CCIR + bool "Selects CCIR/50Hz vertical refresh" + depends on VIDEO_DT3155 + default y + ---help--- + Select it for CCIR/50Hz (European region), + or leave it unselected for RS-170/60Hz (North America). + +config DT3155_STREAMING + bool "Selects mmap streaming instead of read method" + depends on VIDEO_DT3155 + default y + ---help--- + Select it if you wish to try mmap streaming, or + or leave it unselected for using read method. diff --git a/drivers/staging/dt3155v4l/Makefile b/drivers/staging/dt3155v4l/Makefile new file mode 100644 index 0000000..3a207cc --- /dev/null +++ b/drivers/staging/dt3155v4l/Makefile @@ -0,0 +1,4 @@ +obj-$(CONFIG_VIDEO_DT3155) += dt3155_v4l.o +dt3155_v4l-objs := \ + dt3155-bufs.o \ + dt3155v4l.o diff --git a/drivers/staging/dt3155v4l/dt3155-bufs.c b/drivers/staging/dt3155v4l/dt3155-bufs.c new file mode 100644 index 0000000..f93e431 --- /dev/null +++ b/drivers/staging/dt3155v4l/dt3155-bufs.c @@ -0,0 +1,256 @@ +/*************************************************************************** + * Copyright (C) 2006-2010 by Marin Mitov * + * mitov@issp.bas.bg * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#include "dt3155-bufs.h" + +/** + * dt3155_init_chunks_buf - creates a chunk buffer and allocates memory for it + * + * returns: a pointer to the struct dt3155_buf or NULL if failed + * + * Creates a struct dt3155_buf, then allocates a chunk of memory of + * size DT3155_CHUNK_SIZE and sets all the pages in it as Reserved. + * This is done to be able to use remap_pfn_range() on these buffers + * (which do not work on normal memory if Reserved bit is not set) + */ +struct dt3155_buf * +dt3155_init_chunks_buf(void) +{ /* could sleep */ + struct dt3155_buf *buf; + int i; + + buf = kzalloc(sizeof(*buf), GFP_KERNEL); + if (!buf) + return NULL; + buf->cpu = (void *)__get_free_pages(DT3155_CHUNK_FLAGS, + get_order(DT3155_CHUNK_SIZE)); + if (!buf->cpu) { + kfree(buf); + return NULL; + } + for (i = 0; i < DT3155_CHUNK_SIZE; i += PAGE_SIZE) + SetPageReserved(virt_to_page(buf->cpu + i)); + return buf; /* success */ +} + +/** + * dt3155_free_chunks_buf - destroys the specified buffer + * + * @buf: the buffer to be freed + * + * Clears Reserved bit of all pages in the chunk, frees the chunk memory + * and destroys struct dt3155_buf. + */ +void +dt3155_free_chunks_buf(struct dt3155_buf *buf) +{ + int i; + + for (i = 0; i < DT3155_CHUNK_SIZE; i += PAGE_SIZE) + ClearPageReserved(virt_to_page(buf->cpu + i)); + free_pages((unsigned long)buf->cpu, get_order(DT3155_CHUNK_SIZE)); + kfree(buf); +} + +/** + * dt3155_init_fifo - creates and initializes a fifo + * + * returns: a pointer to the crated and initialized struct dt3155_fifo + * or NULL if failed + */ +struct dt3155_fifo * +dt3155_init_fifo(void) +{ /* could sleep */ + struct dt3155_fifo *fifo = kzalloc(sizeof(*fifo), GFP_KERNEL); + if (fifo) + spin_lock_init(&fifo->lock); + return fifo; +} + +/* dt3155_free_fifo(x) defined as macro in dt3155.h */ + +/** + * dt3155_get_buf - gets a buffer from the fifo + * + * @fifo: the fifo to get a buffer from + * + * returns: a pointer to the buffer or NULL if failed + * + * dt3155_get_buf gets the fifo's spin_lock and returns the + * buffer pointed by the head. Could be used in any context. + */ +struct dt3155_buf * +dt3155_get_buf(struct dt3155_fifo *fifo) +{ + unsigned long flags; + struct dt3155_buf *tmp_buf; + + spin_lock_irqsave(&fifo->lock, flags); + tmp_buf = fifo->head; + if (fifo->head) + fifo->head = fifo->head->next; + if (!fifo->head) + fifo->tail = NULL; + spin_unlock_irqrestore(&fifo->lock, flags); + return tmp_buf; +} + +/** + * dt3155_put_buf - puts a buffer into a fifo + * + * @buf: the buffer to put + * @fifo: the fifo to put the buffer in + * + * dt3155_put_buf gets the fifo's spin_lock and puts the buf + * at the tail of the fifo. Could be used in any context. + */ +void +dt3155_put_buf(struct dt3155_buf *buf, struct dt3155_fifo *fifo) +{ + unsigned long flags; + + spin_lock_irqsave(&fifo->lock, flags); + buf->next = NULL; + if (fifo->tail) + fifo->tail->next = buf; + fifo->tail = buf; + if (!fifo->head) + fifo->head = buf; + spin_unlock_irqrestore(&fifo->lock, flags); +} + +/** + * dt3155_init_chunks_fifo - creates and fills a chunks_fifo + * + * returns: a pointer to the fifo or NULL if failed + * + * dt3155_init_chunks_fifo creates and fills the fifo with + * a number of chunks <= DT3155_CHUNK_NUM. The returned fifo + * contains at least one chunk. + */ +struct dt3155_fifo * +dt3155_init_chunks_fifo(void) +{ /* could sleep */ + int i; + + struct dt3155_fifo *chunks; + struct dt3155_buf *tmp_buf; + + chunks = dt3155_init_fifo(); + if (!chunks) + return NULL; + tmp_buf = dt3155_init_chunks_buf(); + if (!tmp_buf) { + dt3155_free_fifo(chunks); + return NULL; + } + dt3155_put_buf(tmp_buf, chunks); + for (i = 1; i < DT3155_CHUNK_NUM; i++) { + tmp_buf = dt3155_init_chunks_buf(); + if (!tmp_buf) + break; + dt3155_put_buf(tmp_buf, chunks); + } + return chunks; +} + +/** + * dt3155_free_chunks_fifo - empties and destroys the chunks_fifo + * + * @chunks: the chunks_fifo to be freed + * + * dt3155_free_chunks_fifo deallocates all chunks in the fifo and + * destroys it. + */ +void +dt3155_free_chunks_fifo(struct dt3155_fifo *chunks) +{ + int buf_count = 0; + struct dt3155_buf *buf; + + while ((buf = dt3155_get_buf(chunks))) { + dt3155_free_chunks_buf(buf); + buf_count++; + } + dt3155_free_fifo(chunks); + printk(KERN_INFO "dt3155: %i chunks freed\n", buf_count); +} + +/** + * dt3155_init_ibufs_fifo - creates and fills an image buffer fifo + * + * @chunks: chunks_fifo to take memory from + * @buf_size: the size of image buffers + * + * returns: a pointer to the fifo filled with image buffers + * + * dt3155_init_ibufs_fifo takes chunks from chunks_fifo, chops them + * into pieces of size buf_size and fills image fifo with them. + */ +struct dt3155_fifo * +dt3155_init_ibufs_fifo(struct dt3155_fifo *chunks, int buf_size) +{ /* could sleep */ + int i, buf_count = 0; + struct dt3155_buf *tmp_ibuf, *chunks_buf, *last_chunk; + struct dt3155_fifo *tmp_fifo; + + tmp_fifo = dt3155_init_fifo(); + if (!tmp_fifo) + return NULL; + last_chunk = chunks->tail; + do { + chunks_buf = dt3155_get_buf(chunks); + dt3155_put_buf(chunks_buf, chunks); + for (i = 0; i < DT3155_CHUNK_SIZE / buf_size; i++) { + tmp_ibuf = kzalloc(sizeof(*tmp_ibuf), GFP_KERNEL); + if (tmp_ibuf) { + tmp_ibuf->cpu = + chunks_buf->cpu + DT3155_BUF_SIZE * i; + dt3155_put_buf(tmp_ibuf, tmp_fifo); + buf_count++; + } else { + if (buf_count) { + goto print_num_bufs; + } else { + dt3155_free_fifo(tmp_fifo); + return NULL; + } + } + } + } while (chunks_buf != last_chunk); +print_num_bufs: + printk(KERN_INFO "dt3155: %i image buffers available\n", buf_count); + return tmp_fifo; +} + +/** + * dt3155_free_ibufs_fifo - empties and destroys an image fifo + * + * @fifo: the fifo to free + */ +void +dt3155_free_ibufs_fifo(struct dt3155_fifo *fifo) +{ + struct dt3155_buf *tmp_ibuf; + + while ((tmp_ibuf = dt3155_get_buf(fifo))) + kfree(tmp_ibuf); + kfree(fifo); +} diff --git a/drivers/staging/dt3155v4l/dt3155-bufs.h b/drivers/staging/dt3155v4l/dt3155-bufs.h new file mode 100644 index 0000000..db6d387 --- /dev/null +++ b/drivers/staging/dt3155v4l/dt3155-bufs.h @@ -0,0 +1,88 @@ +/*************************************************************************** + * Copyright (C) 2006-2010 by Marin Mitov * + * mitov@issp.bas.bg * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +#ifndef _DT3155_BUFS_H_ +#define _DT3155_BUFS_H_ + +#include + +/* 4 chunks of 4MB, 9 buffers each = 36 buffers (> VIDEO_MAX_FRAME) */ +#define DT3155_CHUNK_NUM 4 + +/* DT3155_CHUNK_SIZE should be 4M (2^22) or less, but more than image size */ +#define DT3155_CHUNK_SIZE (1U << 22) +#define DT3155_CHUNK_FLAGS (GFP_KERNEL | GFP_DMA32 | __GFP_COLD | __GFP_NOWARN) + +/* DT3155_BUF_SIZE = 108 * PAGE_SIZE, so each buf is PAGE_SIZE alligned */ +#define DT3155_BUF_SIZE (768 * 576) + +/** + * struct dt3155_buf - image buffer structure + * + * @cpu: virtual kernel address of the buffer + * @dma: dma (bus) address of the buffer + * @next: pointer to the next buffer in the fifo + * @tv: time value when the image has been acquired + */ +struct dt3155_buf { + void *cpu; + dma_addr_t dma; + struct dt3155_buf *next; + struct timeval tv; +}; + +/** + * struct dt3155_fifo - fifo structure + * + * @head: pointer to the head of the fifo + * @tail: pionter to the tail of the fifo + * @lock: spin_lock to protect the fifo + */ +struct dt3155_fifo { + struct dt3155_buf *head; + struct dt3155_buf *tail; + spinlock_t lock; +}; + +struct dt3155_buf * __must_check +dt3155_init_chunks_buf(void); +void +dt3155_free_chunks_buf(struct dt3155_buf *buf); + +struct dt3155_fifo * __must_check +dt3155_init_fifo(void); +#define dt3155_free_fifo(x) kfree(x) + +struct dt3155_buf * __must_check +dt3155_get_buf(struct dt3155_fifo *fifo); +void +dt3155_put_buf(struct dt3155_buf *buf, struct dt3155_fifo *fifo); + +struct dt3155_fifo * __must_check +dt3155_init_chunks_fifo(void); +void +dt3155_free_chunks_fifo(struct dt3155_fifo *chunks); + +struct dt3155_fifo * __must_check +dt3155_init_ibufs_fifo(struct dt3155_fifo *chunks, int buf_size); +void +dt3155_free_ibufs_fifo(struct dt3155_fifo *fifo); + +#endif /* _DT3155_BUFS_H_ */ diff --git a/drivers/staging/dt3155v4l/dt3155v4l.c b/drivers/staging/dt3155v4l/dt3155v4l.c new file mode 100644 index 0000000..6282b7b --- /dev/null +++ b/drivers/staging/dt3155v4l/dt3155v4l.c @@ -0,0 +1,1537 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "dt3155v4l.h" +#include "dt3155-bufs.h" + +#define DT3155_VENDOR_ID 0x8086 +#define DT3155_DEVICE_ID 0x1223 + +/* global initializers (for all boards) */ +#ifdef CONFIG_DT3155_CCIR +static const u8 csr2_init = VT_50HZ; +#define DT3155_CURRENT_NORM V4L2_STD_625_50 +static const unsigned int img_width = 768; +static const unsigned int img_height = 576; +static const unsigned int frames_per_sec = 25; +static const struct v4l2_fmtdesc frame_std[] = { + { + .index = 0, + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, + .flags = 0, + .description = "CCIR/50Hz 8 bits gray", + .pixelformat = V4L2_PIX_FMT_GREY, + }, +}; +#else +static const u8 csr2_init = VT_60HZ; +#define DT3155_CURRENT_NORM V4L2_STD_525_60 +static const unsigned int img_width = 640; +static const unsigned int img_height = 480; +static const unsigned int frames_per_sec = 30; +static const struct v4l2_fmtdesc frame_std[] = { + { + .index = 0, + .type = V4L2_BUF_TYPE_VIDEO_CAPTURE, + .flags = 0, + .description = "RS-170/60Hz 8 bits gray", + .pixelformat = V4L2_PIX_FMT_GREY, + }, +}; +#endif + +#define NUM_OF_FORMATS ARRAY_SIZE(frame_std) + +static u8 config_init = ACQ_MODE_EVEN; + +/** + * read_i2c_reg - reads an internal i2c register + * + * @addr: dt3155 mmio base address + * @index: index (internal address) of register to read + * @data: pointer to byte the read data will be placed in + * + * returns: zero on success or error code + * + * This function starts reading the specified (by index) register + * and busy waits for the process to finish. The result is placed + * in a byte pointed by data. + */ +static int +read_i2c_reg(void *addr, u8 index, u8 *data) +{ + u32 tmp = index; + + iowrite32((tmp<<17) | IIC_READ, addr + IIC_CSR2); + mmiowb(); + udelay(45); /* wait at least 43 usec for NEW_CYCLE to clear */ + if (ioread32(addr + IIC_CSR2) & NEW_CYCLE) { + /* error: NEW_CYCLE not cleared */ + printk(KERN_ERR "dt3155: NEW_CYCLE not cleared\n"); + return -EIO; + } + tmp = ioread32(addr + IIC_CSR1); + if (tmp & DIRECT_ABORT) { + /* error: DIRECT_ABORT set */ + printk(KERN_ERR "dt3155: DIRECT_ABORT set\n"); + /* reset DIRECT_ABORT bit */ + iowrite32(DIRECT_ABORT, addr + IIC_CSR1); + return -EIO; + } + *data = tmp>>24; + return 0; +} + +/** + * write_i2c_reg - writes to an internal i2c register + * + * @addr: dt3155 mmio base address + * @index: index (internal address) of register to read + * @data: data to be written + * + * returns: zero on success or error code + * + * This function starts writting the specified (by index) register + * and busy waits for the process to finish. + */ +static int +write_i2c_reg(void *addr, u8 index, u8 data) +{ + u32 tmp = index; + + iowrite32((tmp<<17) | IIC_WRITE | data, addr + IIC_CSR2); + mmiowb(); + udelay(65); /* wait at least 63 usec for NEW_CYCLE to clear */ + if (ioread32(addr + IIC_CSR2) & NEW_CYCLE) { + /* error: NEW_CYCLE not cleared */ + printk(KERN_ERR "dt3155: NEW_CYCLE not cleared\n"); + return -EIO; + } + if (ioread32(addr + IIC_CSR1) & DIRECT_ABORT) { + /* error: DIRECT_ABORT set */ + printk(KERN_ERR "dt3155: DIRECT_ABORT set\n"); + /* reset DIRECT_ABORT bit */ + iowrite32(DIRECT_ABORT, addr + IIC_CSR1); + return -EIO; + } + return 0; +} + +/** + * write_i2c_reg_nowait - writes to an internal i2c register + * + * @addr: dt3155 mmio base address + * @index: index (internal address) of register to read + * @data: data to be written + * + * This function starts writting the specified (by index) register + * and then returns. + */ +void +write_i2c_reg_nowait(void *addr, u8 index, u8 data) +{ + u32 tmp = index; + + iowrite32((tmp<<17) | IIC_WRITE | data, addr + IIC_CSR2); + mmiowb(); +} + +/** + * wait_i2c_reg - waits the read/write to finish + * + * @addr: dt3155 mmio base address + * + * returns: zero on success or error code + * + * This function waits reading/writting to finish. + */ +static int +wait_i2c_reg(void *addr) +{ + if (ioread32(addr + IIC_CSR2) & NEW_CYCLE) + udelay(65); /* wait at least 63 usec for NEW_CYCLE to clear */ + if (ioread32(addr + IIC_CSR2) & NEW_CYCLE) { + /* error: NEW_CYCLE not cleared */ + printk(KERN_ERR "dt3155: NEW_CYCLE not cleared\n"); + return -EIO; + } + if (ioread32(addr + IIC_CSR1) & DIRECT_ABORT) { + /* error: DIRECT_ABORT set */ + printk(KERN_ERR "dt3155: DIRECT_ABORT set\n"); + /* reset DIRECT_ABORT bit */ + iowrite32(DIRECT_ABORT, addr + IIC_CSR1); + return -EIO; + } + return 0; +} + +/* + * global pointers to a list of 4MB chunks reserved at driver + * load, broken down to contiguous buffers of 768 * 576 bytes + * each to form a pool of buffers for allocations + * FIXME: add spinlock to protect moves between alloc/free lists + */ +static struct dt3155_fifo *dt3155_chunks; /* list of 4MB chuncks */ +static struct dt3155_fifo *dt3155_free_bufs; /* list of free buffers */ +static struct dt3155_fifo *dt3155_alloc_bufs; /* list of allocated buffers */ + +/* same as in */ +struct videobuf_dma_contig_memory { + u32 magic; + void *vaddr; + dma_addr_t dma_handle; + unsigned long size; + int is_userptr; +}; + +#define MAGIC_DC_MEM 0x0733ac61 +#define MAGIC_CHECK(is, should) \ + if (unlikely((is) != (should))) { \ + pr_err("magic mismatch: %x expected %x\n", (is), (should)); \ + BUG(); \ + } + +/* helper functions to allocate/free buffers from the pool */ +static void * +dt3155_alloc_buffer(struct device *dev, size_t size, dma_addr_t *dma_handle, + gfp_t flag) +{ + struct dt3155_buf *buf; + + if (size > DT3155_BUF_SIZE) + return NULL; + size = DT3155_BUF_SIZE; /* same for CCIR & RS-170 */ + buf = dt3155_get_buf(dt3155_free_bufs); + if (!buf) + return NULL; + buf->dma = dma_map_single(dev, buf->cpu, size, DMA_FROM_DEVICE); + if (dma_mapping_error(dev, buf->dma)) { + dt3155_put_buf(buf, dt3155_free_bufs); + return NULL; + } + dt3155_put_buf(buf, dt3155_alloc_bufs); + *dma_handle = buf->dma; + return buf->cpu; +} + +static void +dt3155_free_buffer(struct device *dev, size_t size, void *cpu_addr, + dma_addr_t dma_handle) +{ + struct dt3155_buf *buf, *last; + int found = 0; + + if (!cpu_addr) /* to free NULL is OK */ + return; + last = dt3155_get_buf(dt3155_alloc_bufs); + if (!last) { + printk(KERN_ERR "dt3155: %s(): no alloc buffers\n", __func__); + return; + } + dt3155_put_buf(last, dt3155_alloc_bufs); + do { + buf = dt3155_get_buf(dt3155_alloc_bufs); + if (buf->cpu == cpu_addr && buf->dma == dma_handle) { + found = 1; + break; + } + dt3155_put_buf(buf, dt3155_alloc_bufs); + } while (buf != last); + if (!found) { + printk(KERN_ERR "dt3155: %s(): buffer not found\n", __func__); + return; + } + size = DT3155_BUF_SIZE; /* same for CCIR & RS-170 */ + dma_unmap_single(dev, dma_handle, size, DMA_FROM_DEVICE); + dt3155_put_buf(buf, dt3155_free_bufs); +} + +/* same as videobuf_dma_contig_user_get() */ +static int +dt3155_dma_contig_user_get(struct videobuf_dma_contig_memory *mem, + struct videobuf_buffer *vb) +{ + struct mm_struct *mm = current->mm; + struct vm_area_struct *vma; + unsigned long prev_pfn, this_pfn; + unsigned long pages_done, user_address; + int ret; + + mem->size = PAGE_ALIGN(vb->size); + mem->is_userptr = 0; + ret = -EINVAL; + + down_read(&mm->mmap_sem); + + vma = find_vma(mm, vb->baddr); + if (!vma) + goto out_up; + + if ((vb->baddr + mem->size) > vma->vm_end) + goto out_up; + + pages_done = 0; + prev_pfn = 0; /* kill warning */ + user_address = vb->baddr; + + while (pages_done < (mem->size >> PAGE_SHIFT)) { + ret = follow_pfn(vma, user_address, &this_pfn); + if (ret) + break; + + if (pages_done == 0) + mem->dma_handle = this_pfn << PAGE_SHIFT; + else if (this_pfn != (prev_pfn + 1)) + ret = -EFAULT; + + if (ret) + break; + + prev_pfn = this_pfn; + user_address += PAGE_SIZE; + pages_done++; + } + + if (!ret) + mem->is_userptr = 1; + + out_up: + up_read(¤t->mm->mmap_sem); + + return ret; +} + +/* same as videobuf_dma_contig_user_put() */ +static void +dt3155_dma_contig_user_put(struct videobuf_dma_contig_memory *mem) +{ + mem->is_userptr = 0; + mem->dma_handle = 0; + mem->size = 0; +} + +/* same as videobuf_iolock() but uses allocations from the pool */ +static int +dt3155_iolock(struct videobuf_queue *q, struct videobuf_buffer *vb, + struct v4l2_framebuffer *fbuf) +{ + struct videobuf_dma_contig_memory *mem = vb->priv; + + BUG_ON(!mem); + MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); + + switch (vb->memory) { + case V4L2_MEMORY_MMAP: + dev_dbg(q->dev, "%s memory method MMAP\n", __func__); + + /* All handling should be done by __videobuf_mmap_mapper() */ + if (!mem->vaddr) { + dev_err(q->dev, "memory is not alloced/mmapped.\n"); + return -EINVAL; + } + break; + case V4L2_MEMORY_USERPTR: + dev_dbg(q->dev, "%s memory method USERPTR\n", __func__); + + /* handle pointer from user space */ + if (vb->baddr) + return dt3155_dma_contig_user_get(mem, vb); + + /* allocate memory for the read() method */ + mem->size = PAGE_ALIGN(vb->size); + mem->vaddr = dt3155_alloc_buffer(q->dev, mem->size, + &mem->dma_handle, GFP_KERNEL); + if (!mem->vaddr) { + dev_err(q->dev, "dma_alloc_coherent %ld failed\n", + mem->size); + return -ENOMEM; + } + + dev_dbg(q->dev, "dma_alloc_coherent data is at %p (%ld)\n", + mem->vaddr, mem->size); + break; + case V4L2_MEMORY_OVERLAY: + default: + dev_dbg(q->dev, "%s memory method OVERLAY/unknown\n", + __func__); + return -EINVAL; + } + + return 0; +} + +/* same as videobuf_dma_contig_free() but uses the pool */ +void +dt3155_dma_contig_free(struct videobuf_queue *q, struct videobuf_buffer *buf) +{ + struct videobuf_dma_contig_memory *mem = buf->priv; + + /* mmapped memory can't be freed here, otherwise mmapped region + would be released, while still needed. In this case, the memory + release should happen inside videobuf_vm_close(). + So, it should free memory only if the memory were allocated for + read() operation. + */ + if (buf->memory != V4L2_MEMORY_USERPTR) + return; + + if (!mem) + return; + + MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); + + /* handle user space pointer case */ + if (buf->baddr) { + dt3155_dma_contig_user_put(mem); + return; + } + + /* read() method */ + dt3155_free_buffer(q->dev, mem->size, mem->vaddr, mem->dma_handle); + mem->vaddr = NULL; +} + +/* same as videobuf_vm_open() */ +static void +dt3155_vm_open(struct vm_area_struct *vma) +{ + struct videobuf_mapping *map = vma->vm_private_data; + + dev_dbg(map->q->dev, "vm_open %p [count=%u,vma=%08lx-%08lx]\n", + map, map->count, vma->vm_start, vma->vm_end); + + map->count++; +} + +/* same as videobuf_vm_close(), but free to the pool */ +static void +dt3155_vm_close(struct vm_area_struct *vma) +{ + struct videobuf_mapping *map = vma->vm_private_data; + struct videobuf_queue *q = map->q; + int i; + + dev_dbg(map->q->dev, "vm_close %p [count=%u,vma=%08lx-%08lx]\n", + map, map->count, vma->vm_start, vma->vm_end); + + map->count--; + if (0 == map->count) { + struct videobuf_dma_contig_memory *mem; + + dev_dbg(map->q->dev, "munmap %p q=%p\n", map, q); + mutex_lock(&q->vb_lock); + + /* We need first to cancel streams, before unmapping */ + if (q->streaming) + videobuf_queue_cancel(q); + + for (i = 0; i < VIDEO_MAX_FRAME; i++) { + if (NULL == q->bufs[i]) + continue; + + if (q->bufs[i]->map != map) + continue; + + mem = q->bufs[i]->priv; + if (mem) { + /* This callback is called only if kernel has + allocated memory and this memory is mmapped. + In this case, memory should be freed, + in order to do memory unmap. + */ + + MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); + + /* vfree is not atomic - can't be + called with IRQ's disabled + */ + dev_dbg(map->q->dev, "buf[%d] freeing %p\n", + i, mem->vaddr); + + dt3155_free_buffer(q->dev, mem->size, + mem->vaddr, mem->dma_handle); + mem->vaddr = NULL; + } + + q->bufs[i]->map = NULL; + q->bufs[i]->baddr = 0; + } + + kfree(map); + + mutex_unlock(&q->vb_lock); + } +} + +static const struct vm_operations_struct dt3155_vm_ops = { + .open = dt3155_vm_open, + .close = dt3155_vm_close, +}; + +/* same as videobuf_mmap_mapper(), but allocates from the pool */ +static int +dt3155_mmap_mapper(struct videobuf_queue *q, struct vm_area_struct *vma) +{ + struct videobuf_dma_contig_memory *mem; + struct videobuf_mapping *map; + unsigned int first; + int retval; + unsigned long size, offset = vma->vm_pgoff << PAGE_SHIFT; + + dev_dbg(q->dev, "%s\n", __func__); + if (!(vma->vm_flags & VM_WRITE) || !(vma->vm_flags & VM_SHARED)) + return -EINVAL; + + /* look for first buffer to map */ + for (first = 0; first < VIDEO_MAX_FRAME; first++) { + if (!q->bufs[first]) + continue; + + if (V4L2_MEMORY_MMAP != q->bufs[first]->memory) + continue; + if (q->bufs[first]->boff == offset) + break; + } + if (VIDEO_MAX_FRAME == first) { + dev_dbg(q->dev, "invalid user space offset [offset=0x%lx]\n", + offset); + return -EINVAL; + } + + /* create mapping + update buffer list */ + map = kzalloc(sizeof(struct videobuf_mapping), GFP_KERNEL); + if (!map) + return -ENOMEM; + + q->bufs[first]->map = map; + map->start = vma->vm_start; + map->end = vma->vm_end; + map->q = q; + + q->bufs[first]->baddr = vma->vm_start; + + mem = q->bufs[first]->priv; + BUG_ON(!mem); + MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); + + mem->size = PAGE_ALIGN(q->bufs[first]->bsize); + mem->vaddr = dt3155_alloc_buffer(q->dev, mem->size, + &mem->dma_handle, GFP_KERNEL); + if (!mem->vaddr) { + dev_err(q->dev, "dma_alloc_coherent size %ld failed\n", + mem->size); + goto error; + } + dev_dbg(q->dev, "dma_alloc_coherent data is at addr %p (size %ld)\n", + mem->vaddr, mem->size); + + /* Try to remap memory */ + + size = vma->vm_end - vma->vm_start; + size = (size < mem->size) ? size : mem->size; + + vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); + retval = remap_pfn_range(vma, vma->vm_start, + mem->dma_handle >> PAGE_SHIFT, + size, vma->vm_page_prot); + if (retval) { + dev_err(q->dev, "mmap: remap failed with error %d. ", retval); + dt3155_free_buffer(q->dev, mem->size, + mem->vaddr, mem->dma_handle); + goto error; + } + + vma->vm_ops = &dt3155_vm_ops; + vma->vm_flags |= VM_DONTEXPAND; + vma->vm_private_data = map; + + dev_dbg(q->dev, "mmap %p: q=%p %08lx-%08lx (%lx) pgoff %08lx buf %d\n", + map, q, vma->vm_start, vma->vm_end, + (long int) q->bufs[first]->bsize, + vma->vm_pgoff, first); + + dt3155_vm_open(vma); + + return 0; + +error: + kfree(map); + return -ENOMEM; +} + +static int +dt3155_sync_for_cpu(struct videobuf_queue *q, struct videobuf_buffer *vb) +{ + struct dt3155_priv *pd = q->priv_data; + struct videobuf_dma_contig_memory *mem = vb->priv; + + BUG_ON(!mem); + MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); + + pci_dma_sync_single_for_cpu(pd->pdev, mem->dma_handle, + mem->size, PCI_DMA_FROMDEVICE); + return 0; +} + +static int +dt3155_sync_for_device(struct videobuf_queue *q, struct videobuf_buffer *vb) +{ + struct dt3155_priv *pd = q->priv_data; + struct videobuf_dma_contig_memory *mem = vb->priv; + + BUG_ON(!mem); + MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); + + pci_dma_sync_single_for_device(pd->pdev, mem->dma_handle, + mem->size, PCI_DMA_FROMDEVICE); + return 0; +} + +/* + * same as videobuf_queue_dma_contig_init(), but after + * initialisation overwrites videobuf_iolock() and + * videobuf_mmap_mapper() with our customized versions + * as well as adds sync() method + */ +static void +dt3155_queue_dma_contig_init(struct videobuf_queue *q, + struct videobuf_queue_ops *ops, + struct device *dev, + spinlock_t *irqlock, + enum v4l2_buf_type type, + enum v4l2_field field, + unsigned int msize, + void *priv) +{ + videobuf_queue_dma_contig_init(q, ops, dev, irqlock, + type, field, msize, priv); + /* overwrite with our methods */ + q->int_ops->iolock = dt3155_iolock; + q->int_ops->mmap_mapper = dt3155_mmap_mapper; + q->int_ops->sync = dt3155_sync_for_cpu; +} + +static int +dt3155_start_acq(struct dt3155_priv *pd) +{ + struct videobuf_buffer *vb = pd->curr_buf; + dma_addr_t dma_addr; + + dma_addr = videobuf_to_dma_contig(vb); + iowrite32(dma_addr, pd->regs + EVEN_DMA_START); + iowrite32(dma_addr + vb->width, pd->regs + ODD_DMA_START); + iowrite32(vb->width, pd->regs + EVEN_DMA_STRIDE); + iowrite32(vb->width, pd->regs + ODD_DMA_STRIDE); + /* enable interrupts, clear all irq flags */ + iowrite32(FLD_START_EN | FLD_END_ODD_EN | FLD_START | + FLD_END_EVEN | FLD_END_ODD, pd->regs + INT_CSR); + iowrite32(FIFO_EN | SRST | FLD_CRPT_ODD | FLD_CRPT_EVEN | + FLD_DN_ODD | FLD_DN_EVEN | CAP_CONT_EVEN | CAP_CONT_ODD, + pd->regs + CSR1); + wait_i2c_reg(pd->regs); + write_i2c_reg(pd->regs, CONFIG, pd->config); + write_i2c_reg(pd->regs, EVEN_CSR, CSR_ERROR | CSR_DONE); + write_i2c_reg(pd->regs, ODD_CSR, CSR_ERROR | CSR_DONE); + + /* start the board */ + write_i2c_reg(pd->regs, CSR2, pd->csr2 | BUSY_EVEN | BUSY_ODD); + return 0; /* success */ +} + +static int +dt3155_stop_acq(struct dt3155_priv *pd) +{ + int tmp; + + /* stop the board */ + wait_i2c_reg(pd->regs); + write_i2c_reg(pd->regs, CSR2, pd->csr2); + + /* disable all irqs, clear all irq flags */ + iowrite32(FLD_START | FLD_END_EVEN | FLD_END_ODD, pd->regs + INT_CSR); + write_i2c_reg(pd->regs, EVEN_CSR, CSR_ERROR | CSR_DONE); + write_i2c_reg(pd->regs, ODD_CSR, CSR_ERROR | CSR_DONE); + tmp = ioread32(pd->regs + CSR1) & (FLD_CRPT_EVEN | FLD_CRPT_ODD); + if (tmp) + printk(KERN_ERR "dt3155: corrupted field %u\n", tmp); + iowrite32(FIFO_EN | SRST | FLD_CRPT_ODD | FLD_CRPT_EVEN | + FLD_DN_ODD | FLD_DN_EVEN | CAP_CONT_EVEN | CAP_CONT_ODD, + pd->regs + CSR1); + return 0; +} + +/* Locking: Caller holds q->vb_lock */ +static int +dt3155_buf_setup(struct videobuf_queue *q, unsigned int *count, + unsigned int *size) +{ + *size = img_width * img_height; + return 0; +} + +/* Locking: Caller holds q->vb_lock */ +static int +dt3155_buf_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, + enum v4l2_field field) +{ + int ret = 0; + + vb->width = img_width; + vb->height = img_height; + vb->size = img_width * img_height; + vb->field = field; + if (vb->state == VIDEOBUF_NEEDS_INIT) + ret = videobuf_iolock(q, vb, NULL); + if (ret) { + vb->state = VIDEOBUF_ERROR; + printk(KERN_ERR "ERROR: videobuf_iolock() failed\n"); + videobuf_dma_contig_free(q, vb); + } else + vb->state = VIDEOBUF_PREPARED; + return ret; +} + +/* Locking: Caller holds q->vb_lock & q->irqlock */ +static void +dt3155_buf_queue(struct videobuf_queue *q, struct videobuf_buffer *vb) +{ + struct dt3155_priv *pd = q->priv_data; + + if (vb->state != VIDEOBUF_NEEDS_INIT) { + vb->state = VIDEOBUF_QUEUED; + dt3155_sync_for_device(q, vb); + list_add_tail(&vb->queue, &pd->dmaq); + wake_up_interruptible_sync(&pd->do_dma); + } else + vb->state = VIDEOBUF_ERROR; +} + +/* Locking: Caller holds q->vb_lock */ +static void +dt3155_buf_release(struct videobuf_queue *q, struct videobuf_buffer *vb) +{ + if (vb->state == VIDEOBUF_ACTIVE) + videobuf_waiton(vb, 0, 0); /* FIXME: cannot be interrupted */ + dt3155_dma_contig_free(q, vb); + vb->state = VIDEOBUF_NEEDS_INIT; +} + +static struct videobuf_queue_ops vbq_ops = { + .buf_setup = dt3155_buf_setup, + .buf_prepare = dt3155_buf_prepare, + .buf_queue = dt3155_buf_queue, + .buf_release = dt3155_buf_release, +}; + +static irqreturn_t +dt3155_irq_handler_even(int irq, void *dev_id) +{ + struct dt3155_priv *ipd = dev_id; + struct videobuf_buffer *ivb; + dma_addr_t dma_addr; + u32 tmp; + + tmp = ioread32(ipd->regs + INT_CSR) & (FLD_START | FLD_END_ODD); + if (!tmp) + return IRQ_NONE; /* not our irq */ + if ((tmp & FLD_START) && !(tmp & FLD_END_ODD)) { + iowrite32(FLD_START_EN | FLD_END_ODD_EN | FLD_START, + ipd->regs + INT_CSR); + ipd->field_count++; + return IRQ_HANDLED; /* start of field irq */ + } + if ((tmp & FLD_START) && (tmp & FLD_END_ODD)) { + if (!ipd->stats.start_before_end++) + printk(KERN_ERR "dt3155: irq: START before END\n"); + } + /* check for corrupted fields */ +/* write_i2c_reg(ipd->regs, EVEN_CSR, CSR_ERROR | CSR_DONE); */ +/* write_i2c_reg(ipd->regs, ODD_CSR, CSR_ERROR | CSR_DONE); */ + tmp = ioread32(ipd->regs + CSR1) & (FLD_CRPT_EVEN | FLD_CRPT_ODD); + if (tmp) { + if (!ipd->stats.corrupted_fields++) + printk(KERN_ERR "dt3155: corrupted field %u\n", tmp); + iowrite32(FIFO_EN | SRST | FLD_CRPT_ODD | FLD_CRPT_EVEN | + FLD_DN_ODD | FLD_DN_EVEN | + CAP_CONT_EVEN | CAP_CONT_ODD, + ipd->regs + CSR1); + mmiowb(); + } + + spin_lock(&ipd->lock); + if (ipd->curr_buf && ipd->curr_buf->state == VIDEOBUF_ACTIVE) { + if (waitqueue_active(&ipd->curr_buf->done)) { + do_gettimeofday(&ipd->curr_buf->ts); + ipd->curr_buf->field_count = ipd->field_count; + ipd->curr_buf->state = VIDEOBUF_DONE; + wake_up(&ipd->curr_buf->done); + } else { + ivb = ipd->curr_buf; + goto load_dma; + } + } else + goto stop_dma; + if (list_empty(&ipd->dmaq)) + goto stop_dma; + ivb = list_first_entry(&ipd->dmaq, typeof(*ivb), queue); + list_del(&ivb->queue); + if (ivb->state == VIDEOBUF_QUEUED) { + ivb->state = VIDEOBUF_ACTIVE; + ipd->curr_buf = ivb; + } else + goto stop_dma; +load_dma: + dma_addr = videobuf_to_dma_contig(ivb); + iowrite32(dma_addr, ipd->regs + EVEN_DMA_START); + iowrite32(dma_addr + ivb->width, ipd->regs + ODD_DMA_START); + iowrite32(ivb->width, ipd->regs + EVEN_DMA_STRIDE); + iowrite32(ivb->width, ipd->regs + ODD_DMA_STRIDE); + mmiowb(); + /* enable interrupts, clear all irq flags */ + iowrite32(FLD_START_EN | FLD_END_ODD_EN | FLD_START | + FLD_END_EVEN | FLD_END_ODD, ipd->regs + INT_CSR); + spin_unlock(&ipd->lock); + return IRQ_HANDLED; + +stop_dma: + ipd->curr_buf = NULL; + /* stop the board */ + write_i2c_reg_nowait(ipd->regs, CSR2, ipd->csr2); + /* disable interrupts, clear all irq flags */ + iowrite32(FLD_START | FLD_END_EVEN | FLD_END_ODD, ipd->regs + INT_CSR); + spin_unlock(&ipd->lock); + return IRQ_HANDLED; +} + +static int +dt3155_threadfn(void *arg) +{ + struct dt3155_priv *pd = arg; + struct videobuf_buffer *vb; + unsigned long flags; + + while (1) { + wait_event_interruptible(pd->do_dma, + kthread_should_stop() || !list_empty(&pd->dmaq)); + if (kthread_should_stop()) + break; + + spin_lock_irqsave(&pd->lock, flags); + if (pd->curr_buf) /* dma is active */ + goto done; + if (list_empty(&pd->dmaq)) /* no empty biffers */ + goto done; + vb = list_first_entry(&pd->dmaq, typeof(*vb), queue); + list_del(&vb->queue); + if (vb->state == VIDEOBUF_QUEUED) { + vb->state = VIDEOBUF_ACTIVE; + pd->curr_buf = vb; + spin_unlock_irqrestore(&pd->lock, flags); + /* start dma */ + dt3155_start_acq(pd); + continue; + } else + printk(KERN_DEBUG "%s(): This is a BUG\n", __func__); +done: + spin_unlock_irqrestore(&pd->lock, flags); + } + return 0; +} + +static int +dt3155_open(struct file *filp) +{ + int ret = 0; + struct dt3155_priv *pd = video_drvdata(filp); + + printk(KERN_INFO "dt3155: open(): minor: %i\n", pd->vdev->minor); + + if (mutex_lock_interruptible(&pd->mux) == -EINTR) + return -ERESTARTSYS; + if (!pd->users) { + pd->vidq = kzalloc(sizeof(*pd->vidq), GFP_KERNEL); + if (!pd->vidq) { + printk(KERN_ERR "dt3155: error: alloc queue\n"); + ret = -ENOMEM; + goto err_alloc_queue; + } + dt3155_queue_dma_contig_init(pd->vidq, &vbq_ops, + &pd->pdev->dev, &pd->lock, + V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_NONE, + sizeof(struct videobuf_buffer), pd); + /* disable all irqs, clear all irq flags */ + iowrite32(FLD_START | FLD_END_EVEN | FLD_END_ODD, + pd->regs + INT_CSR); + pd->irq_handler = dt3155_irq_handler_even; + ret = request_irq(pd->pdev->irq, pd->irq_handler, + IRQF_SHARED, DT3155_NAME, pd); + if (ret) { + printk(KERN_ERR "dt3155: error: request_irq\n"); + goto err_request_irq; + } + pd->curr_buf = NULL; + pd->thread = kthread_run(dt3155_threadfn, pd, + "dt3155_thread_%i", pd->vdev->minor); + if (IS_ERR(pd->thread)) { + printk(KERN_ERR "dt3155: kthread_run() failed\n"); + ret = PTR_ERR(pd->thread); + goto err_thread; + } + pd->field_count = 0; + } + pd->users++; + goto done; +err_thread: + free_irq(pd->pdev->irq, pd); +err_request_irq: + kfree(pd->vidq); + pd->vidq = NULL; +err_alloc_queue: +done: + mutex_unlock(&pd->mux); + return ret; +} + +static int +dt3155_release(struct file *filp) +{ + struct dt3155_priv *pd = video_drvdata(filp); + struct videobuf_buffer *tmp; + unsigned long flags; + int ret = 0; + + printk(KERN_INFO "dt3155: release(): minor: %i\n", pd->vdev->minor); + + if (mutex_lock_interruptible(&pd->mux) == -EINTR) + return -ERESTARTSYS; + pd->users--; + BUG_ON(pd->users < 0); + if (pd->acq_fp == filp) { + spin_lock_irqsave(&pd->lock, flags); + INIT_LIST_HEAD(&pd->dmaq); /* queue is emptied */ + tmp = pd->curr_buf; + spin_unlock_irqrestore(&pd->lock, flags); + if (tmp) + videobuf_waiton(tmp, 0, 1); /* block, interruptible */ + dt3155_stop_acq(pd); + videobuf_stop(pd->vidq); + pd->acq_fp = NULL; + } + if (!pd->users) { + kthread_stop(pd->thread); + free_irq(pd->pdev->irq, pd); + kfree(pd->vidq); + pd->vidq = NULL; + } + mutex_unlock(&pd->mux); + return ret; +} + +static ssize_t +dt3155_read(struct file *filp, char __user *user, size_t size, loff_t *loff) +{ + struct dt3155_priv *pd = video_drvdata(filp); + int ret; + + if (mutex_lock_interruptible(&pd->mux) == -EINTR) + return -ERESTARTSYS; + if (!pd->acq_fp) + pd->acq_fp = filp; + else if (pd->acq_fp != filp) { + ret = -EBUSY; + goto done; + } + ret = videobuf_read_stream(pd->vidq, user, size, loff, 0, + filp->f_flags & O_NONBLOCK); +done: + mutex_unlock(&pd->mux); + return ret; +} + +static unsigned int +dt3155_poll(struct file *filp, struct poll_table_struct *polltbl) +{ + struct dt3155_priv *pd = video_drvdata(filp); + + return videobuf_poll_stream(filp, pd->vidq, polltbl); +} + +static int +dt3155_mmap(struct file *filp, struct vm_area_struct *vma) +{ + struct dt3155_priv *pd = video_drvdata(filp); + + return videobuf_mmap_mapper(pd->vidq, vma); +} + +static const struct v4l2_file_operations dt3155_fops = { + .owner = THIS_MODULE, + .open = dt3155_open, + .release = dt3155_release, + .read = dt3155_read, + .poll = dt3155_poll, + .unlocked_ioctl = video_ioctl2, /* V4L2 ioctl handler */ + .mmap = dt3155_mmap, +}; + +static int +dt3155_ioc_streamon(struct file *filp, void *p, enum v4l2_buf_type type) +{ + struct dt3155_priv *pd = video_drvdata(filp); + int ret = -ERESTARTSYS; + + if (mutex_lock_interruptible(&pd->mux) == -EINTR) + return ret; + if (!pd->acq_fp) { + ret = videobuf_streamon(pd->vidq); + if (ret) + goto unlock; + pd->acq_fp = filp; + wake_up_interruptible_sync(&pd->do_dma); + } else if (pd->acq_fp == filp) { + ret = videobuf_streamon(pd->vidq); + if (!ret) + wake_up_interruptible_sync(&pd->do_dma); + } else + ret = -EBUSY; +unlock: + mutex_unlock(&pd->mux); + return ret; +} + +static int +dt3155_ioc_streamoff(struct file *filp, void *p, enum v4l2_buf_type type) +{ + struct dt3155_priv *pd = video_drvdata(filp); + struct videobuf_buffer *tmp; + unsigned long flags; + int ret; + + ret = videobuf_streamoff(pd->vidq); + if (ret) + return ret; + spin_lock_irqsave(&pd->lock, flags); + tmp = pd->curr_buf; + spin_unlock_irqrestore(&pd->lock, flags); + if (tmp) + videobuf_waiton(tmp, 0, 1); /* block, interruptible */ + return ret; +} + +static int +dt3155_ioc_querycap(struct file *filp, void *p, struct v4l2_capability *cap) +{ + struct dt3155_priv *pd = video_drvdata(filp); + + strcpy(cap->driver, DT3155_NAME); + strcpy(cap->card, DT3155_NAME " frame grabber"); + sprintf(cap->bus_info, "PCI:%s", pci_name(pd->pdev)); + cap->version = + KERNEL_VERSION(DT3155_VER_MAJ, DT3155_VER_MIN, DT3155_VER_EXT); + cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | +#ifdef CONFIG_DT3155_STREAMING + V4L2_CAP_STREAMING; +#else + V4L2_CAP_READWRITE; +#endif + return 0; +} + +static int +dt3155_ioc_enum_fmt_vid_cap(struct file *filp, void *p, struct v4l2_fmtdesc *f) +{ + if (f->index >= NUM_OF_FORMATS) + return -EINVAL; + *f = frame_std[f->index]; + return 0; +} + +static int +dt3155_ioc_g_fmt_vid_cap(struct file *filp, void *p, struct v4l2_format *f) +{ + if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) + return -EINVAL; + f->fmt.pix.width = img_width; + f->fmt.pix.height = img_height; + f->fmt.pix.pixelformat = V4L2_PIX_FMT_GREY; + f->fmt.pix.field = V4L2_FIELD_NONE; + f->fmt.pix.bytesperline = f->fmt.pix.width; + f->fmt.pix.sizeimage = f->fmt.pix.width * f->fmt.pix.height; + f->fmt.pix.colorspace = 0; + f->fmt.pix.priv = 0; + return 0; +} + +static int +dt3155_ioc_try_fmt_vid_cap(struct file *filp, void *p, struct v4l2_format *f) +{ + if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) + return -EINVAL; + if (f->fmt.pix.width == img_width && + f->fmt.pix.height == img_height && + f->fmt.pix.pixelformat == V4L2_PIX_FMT_GREY && + f->fmt.pix.field == V4L2_FIELD_NONE && + f->fmt.pix.bytesperline == f->fmt.pix.width && + f->fmt.pix.sizeimage == f->fmt.pix.width * f->fmt.pix.height) + return 0; + else + return -EINVAL; +} + +static int +dt3155_ioc_s_fmt_vid_cap(struct file *filp, void *p, struct v4l2_format *f) +{ + return dt3155_ioc_g_fmt_vid_cap(filp, p, f); +} + +static int +dt3155_ioc_reqbufs(struct file *filp, void *p, struct v4l2_requestbuffers *b) +{ + struct dt3155_priv *pd = video_drvdata(filp); + struct videobuf_queue *q = pd->vidq; + + if (b->memory != V4L2_MEMORY_MMAP) + return -EINVAL; + if (b->count) + return videobuf_reqbufs(q, b); + else { /* FIXME: is it necessary? */ + printk(KERN_DEBUG "dt3155: request to free buffers\n"); + return videobuf_mmap_free(q); + } +} + +static int +dt3155_ioc_querybuf(struct file *filp, void *p, struct v4l2_buffer *b) +{ + struct dt3155_priv *pd = video_drvdata(filp); + struct videobuf_queue *q = pd->vidq; + + return videobuf_querybuf(q, b); +} + +static int +dt3155_ioc_qbuf(struct file *filp, void *p, struct v4l2_buffer *b) +{ + struct dt3155_priv *pd = video_drvdata(filp); + struct videobuf_queue *q = pd->vidq; + + return videobuf_qbuf(q, b); +} + +static int +dt3155_ioc_dqbuf(struct file *filp, void *p, struct v4l2_buffer *b) +{ + struct dt3155_priv *pd = video_drvdata(filp); + struct videobuf_queue *q = pd->vidq; + + return videobuf_dqbuf(q, b, filp->f_flags & O_NONBLOCK); +} + +static int +dt3155_ioc_querystd(struct file *filp, void *p, v4l2_std_id *norm) +{ + *norm = DT3155_CURRENT_NORM; + return 0; +} + +static int +dt3155_ioc_g_std(struct file *filp, void *p, v4l2_std_id *norm) +{ + *norm = DT3155_CURRENT_NORM; + return 0; +} + +static int +dt3155_ioc_s_std(struct file *filp, void *p, v4l2_std_id *norm) +{ + if (*norm & DT3155_CURRENT_NORM) + return 0; + return -EINVAL; +} + +static int +dt3155_ioc_enum_input(struct file *filp, void *p, struct v4l2_input *input) +{ + if (input->index) + return -EINVAL; + strcpy(input->name, "Coax in"); + input->type = V4L2_INPUT_TYPE_CAMERA; + input->std = V4L2_STD_ALL; + input->status = 0;/* FIXME: add sync detection & V4L2_IN_ST_NO_H_LOCK */ + return 0; +} + +static int +dt3155_ioc_g_input(struct file *filp, void *p, unsigned int *i) +{ + *i = 0; + return 0; +} + +static int +dt3155_ioc_s_input(struct file *filp, void *p, unsigned int i) +{ + if (i) + return -EINVAL; + return 0; +} + +static int +dt3155_ioc_g_parm(struct file *filp, void *p, struct v4l2_streamparm *parms) +{ + if (parms->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) + return -EINVAL; + parms->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; + parms->parm.capture.capturemode = 0; + parms->parm.capture.timeperframe.numerator = 1001; + parms->parm.capture.timeperframe.denominator = frames_per_sec * 1000; + parms->parm.capture.extendedmode = 0; + parms->parm.capture.readbuffers = 1; + return 0; +} + +static int +dt3155_ioc_s_parm(struct file *filp, void *p, struct v4l2_streamparm *parms) +{ + if (parms->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) + return -EINVAL; + parms->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; + parms->parm.capture.capturemode = 0; + parms->parm.capture.timeperframe.numerator = 1001; + parms->parm.capture.timeperframe.denominator = frames_per_sec * 1000; + parms->parm.capture.extendedmode = 0; + parms->parm.capture.readbuffers = 1; + return 0; +} + +static const struct v4l2_ioctl_ops dt3155_ioctl_ops = { + .vidioc_streamon = dt3155_ioc_streamon, + .vidioc_streamoff = dt3155_ioc_streamoff, + .vidioc_querycap = dt3155_ioc_querycap, +/* + .vidioc_g_priority = dt3155_ioc_g_priority, + .vidioc_s_priority = dt3155_ioc_s_priority, +*/ + .vidioc_enum_fmt_vid_cap = dt3155_ioc_enum_fmt_vid_cap, + .vidioc_try_fmt_vid_cap = dt3155_ioc_try_fmt_vid_cap, + .vidioc_g_fmt_vid_cap = dt3155_ioc_g_fmt_vid_cap, + .vidioc_s_fmt_vid_cap = dt3155_ioc_s_fmt_vid_cap, + .vidioc_reqbufs = dt3155_ioc_reqbufs, + .vidioc_querybuf = dt3155_ioc_querybuf, + .vidioc_qbuf = dt3155_ioc_qbuf, + .vidioc_dqbuf = dt3155_ioc_dqbuf, + .vidioc_querystd = dt3155_ioc_querystd, + .vidioc_g_std = dt3155_ioc_g_std, + .vidioc_s_std = dt3155_ioc_s_std, + .vidioc_enum_input = dt3155_ioc_enum_input, + .vidioc_g_input = dt3155_ioc_g_input, + .vidioc_s_input = dt3155_ioc_s_input, +/* + .vidioc_queryctrl = dt3155_ioc_queryctrl, + .vidioc_g_ctrl = dt3155_ioc_g_ctrl, + .vidioc_s_ctrl = dt3155_ioc_s_ctrl, + .vidioc_querymenu = dt3155_ioc_querymenu, + .vidioc_g_ext_ctrls = dt3155_ioc_g_ext_ctrls, + .vidioc_s_ext_ctrls = dt3155_ioc_s_ext_ctrls, +*/ + .vidioc_g_parm = dt3155_ioc_g_parm, + .vidioc_s_parm = dt3155_ioc_s_parm, +/* + .vidioc_cropcap = dt3155_ioc_cropcap, + .vidioc_g_crop = dt3155_ioc_g_crop, + .vidioc_s_crop = dt3155_ioc_s_crop, + .vidioc_enum_framesizes = dt3155_ioc_enum_framesizes, + .vidioc_enum_frameintervals = dt3155_ioc_enum_frameintervals, +#ifdef CONFIG_VIDEO_V4L1_COMPAT + .vidiocgmbuf = iocgmbuf, +#endif +*/ +}; + +static int __devinit +dt3155_init_board(struct pci_dev *dev) +{ + int i; + u8 tmp; + struct dt3155_buf *buf; + struct dt3155_priv *pd = pci_get_drvdata(dev); + pci_set_master(dev); /* dt3155 needs it */ + + /* resetting the adapter */ + iowrite32(FLD_CRPT_ODD | FLD_CRPT_EVEN | FLD_DN_ODD | FLD_DN_EVEN, + pd->regs + CSR1); + mmiowb(); + msleep(10); + + /* initializing adaper registers */ + iowrite32(FIFO_EN | SRST, pd->regs + CSR1); + mmiowb(); + iowrite32(0xEEEEEE01, pd->regs + EVEN_PIXEL_FMT); + iowrite32(0xEEEEEE01, pd->regs + ODD_PIXEL_FMT); + iowrite32(0x00000020, pd->regs + FIFO_TRIGER); + iowrite32(0x00000103, pd->regs + XFER_MODE); + iowrite32(0, pd->regs + RETRY_WAIT_CNT); + iowrite32(0, pd->regs + INT_CSR); + iowrite32(1, pd->regs + EVEN_FLD_MASK); + iowrite32(1, pd->regs + ODD_FLD_MASK); + iowrite32(0, pd->regs + MASK_LENGTH); + iowrite32(0x0005007C, pd->regs + FIFO_FLAG_CNT); + iowrite32(0x01010101, pd->regs + IIC_CLK_DUR); + mmiowb(); + + /* verifying that we have a DT3155 board (not just a SAA7116 chip) */ + read_i2c_reg(pd->regs, DT_ID, &tmp); + if (tmp != DT3155_ID) + return -ENODEV; + + /* initialize AD LUT */ + write_i2c_reg(pd->regs, AD_ADDR, 0); + for (i = 0; i < 256; i++) + write_i2c_reg(pd->regs, AD_LUT, i); + + /* initialize ADC references */ + /* FIXME: pos_ref & neg_ref depend on VT_50HZ */ + write_i2c_reg(pd->regs, AD_ADDR, AD_CMD_REG); + write_i2c_reg(pd->regs, AD_CMD, VIDEO_CNL_1 | SYNC_CNL_1 | SYNC_LVL_3); + write_i2c_reg(pd->regs, AD_ADDR, AD_POS_REF); + write_i2c_reg(pd->regs, AD_CMD, 34); + write_i2c_reg(pd->regs, AD_ADDR, AD_NEG_REF); + write_i2c_reg(pd->regs, AD_CMD, 0); + + /* initialize PM LUT */ + write_i2c_reg(pd->regs, CONFIG, pd->config | PM_LUT_PGM); + for (i = 0; i < 256; i++) { + write_i2c_reg(pd->regs, PM_LUT_ADDR, i); + write_i2c_reg(pd->regs, PM_LUT_DATA, i); + } + write_i2c_reg(pd->regs, CONFIG, pd->config | PM_LUT_PGM | PM_LUT_SEL); + for (i = 0; i < 256; i++) { + write_i2c_reg(pd->regs, PM_LUT_ADDR, i); + write_i2c_reg(pd->regs, PM_LUT_DATA, i); + } + write_i2c_reg(pd->regs, CONFIG, pd->config); /* ACQ_MODE_EVEN */ + + /* select chanel 1 for input and set sync level */ + write_i2c_reg(pd->regs, AD_ADDR, AD_CMD_REG); + write_i2c_reg(pd->regs, AD_CMD, VIDEO_CNL_1 | SYNC_CNL_1 | SYNC_LVL_3); + + /* allocate and pci_map memory, and initialize the DMA machine */ + buf = dt3155_get_buf(dt3155_free_bufs); + if (!buf) { + printk(KERN_ERR "dt3155: dt3155_get_buf " + "(in dt3155_init_board) failed\n"); + return -ENOMEM; + } + buf->dma = pci_map_single(dev, buf->cpu, + DT3155_BUF_SIZE, PCI_DMA_FROMDEVICE); + if (pci_dma_mapping_error(dev, buf->dma)) { + printk(KERN_ERR "dt3155: pci_map_single failed\n"); + dt3155_put_buf(buf, dt3155_free_bufs); + return -ENOMEM; + } + iowrite32(buf->dma, pd->regs + EVEN_DMA_START); + iowrite32(buf->dma, pd->regs + ODD_DMA_START); + iowrite32(0, pd->regs + EVEN_DMA_STRIDE); + iowrite32(0, pd->regs + ODD_DMA_STRIDE); + + /* Perform a pseudo even field acquire */ + iowrite32(FIFO_EN | SRST | CAP_CONT_ODD, pd->regs + CSR1); + write_i2c_reg(pd->regs, CSR2, pd->csr2 | SYNC_SNTL); + write_i2c_reg(pd->regs, CONFIG, pd->config); + write_i2c_reg(pd->regs, EVEN_CSR, CSR_SNGL); + write_i2c_reg(pd->regs, CSR2, pd->csr2 | BUSY_EVEN | SYNC_SNTL); + msleep(100); + read_i2c_reg(pd->regs, CSR2, &tmp); + write_i2c_reg(pd->regs, EVEN_CSR, CSR_ERROR | CSR_SNGL | CSR_DONE); + write_i2c_reg(pd->regs, ODD_CSR, CSR_ERROR | CSR_SNGL | CSR_DONE); + write_i2c_reg(pd->regs, CSR2, pd->csr2); + iowrite32(FIFO_EN | SRST | FLD_DN_EVEN | FLD_DN_ODD, pd->regs + CSR1); + + /* pci_unmap and deallocate memory */ + pci_unmap_single(dev, buf->dma, DT3155_BUF_SIZE, PCI_DMA_FROMDEVICE); + dt3155_put_buf(buf, dt3155_free_bufs); + if (tmp & BUSY_EVEN) { + printk(KERN_ERR "dt3155: BUSY_EVEN not cleared\n"); + return -EIO; + } + return 0; +} + +static struct video_device dt3155_vdev = { + .name = DT3155_NAME, + .fops = &dt3155_fops, + .ioctl_ops = &dt3155_ioctl_ops, + .minor = -1, + .release = video_device_release, + .tvnorms = V4L2_STD_ALL, + .current_norm = DT3155_CURRENT_NORM, +}; + +static int __devinit +dt3155_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + int err = -ENODEV; + struct dt3155_priv *pd; + + printk(KERN_INFO "dt3155: probe()\n"); + if (pci_set_dma_mask(dev, DMA_BIT_MASK(32))) { + printk(KERN_ERR "dt3155: cannot set dma_mask\n"); + return -ENODEV; + } + pd = kzalloc(sizeof(*pd), GFP_KERNEL); + if (!pd) { + printk(KERN_ERR "dt3155: cannot allocate dt3155_priv\n"); + return -ENOMEM; + } + pd->vdev = video_device_alloc(); + if (!pd->vdev) { + printk(KERN_ERR "dt3155: cannot allocate vdp structure\n"); + goto err_video_device_alloc; + } + *pd->vdev = dt3155_vdev; + pci_set_drvdata(dev, pd); /* for use in dt3155_remove() */ + video_set_drvdata(pd->vdev, pd); /* for use in video_fops */ + pd->users = 0; + pd->acq_fp = NULL; + pd->pdev = dev; + INIT_LIST_HEAD(&pd->dmaq); + init_waitqueue_head(&pd->do_dma); + mutex_init(&pd->mux); + pd->csr2 = csr2_init; + pd->config = config_init; + err = pci_enable_device(pd->pdev); + if (err) { + printk(KERN_ERR "dt3155: pci_dev not enabled\n"); + goto err_enable_dev; + } + err = pci_request_region(pd->pdev, 0, pci_name(pd->pdev)); + if (err) + goto err_req_region; + pd->regs = pci_iomap(pd->pdev, 0, pci_resource_len(pd->pdev, 0)); + if (!pd->regs) { + err = -ENOMEM; + printk(KERN_ERR "dt3155: pci_iomap failed\n"); + goto err_pci_iomap; + } + err = dt3155_init_board(pd->pdev); + if (err) { + printk(KERN_ERR "dt3155: dt3155_init_board failed\n"); + goto err_init_board; + } + err = video_register_device(pd->vdev, VFL_TYPE_GRABBER, -1); + if (err) { + printk(KERN_ERR "dt3155: Cannot register video device\n"); + goto err_init_board; + } + printk(KERN_INFO "dt3155: /dev/video%i is ready\n", pd->vdev->minor); + return 0; /* success */ + +err_init_board: + pci_iounmap(pd->pdev, pd->regs); +err_pci_iomap: + pci_release_region(pd->pdev, 0); +err_req_region: + pci_disable_device(pd->pdev); +err_enable_dev: + video_device_release(pd->vdev); +err_video_device_alloc: + kfree(pd); + return err; +} + +static void __devexit +dt3155_remove(struct pci_dev *dev) +{ + struct dt3155_priv *pd = pci_get_drvdata(dev); + + printk(KERN_INFO "dt3155: remove()\n"); + video_unregister_device(pd->vdev); + pci_iounmap(dev, pd->regs); + pci_release_region(pd->pdev, 0); + pci_disable_device(pd->pdev); + /* + * video_device_release() is invoked automatically + * see: struct video_device dt3155_vdev + */ + kfree(pd); +} + +static DEFINE_PCI_DEVICE_TABLE(pci_ids) = { + { PCI_DEVICE(DT3155_VENDOR_ID, DT3155_DEVICE_ID) }, + { 0, /* zero marks the end */ }, +}; +MODULE_DEVICE_TABLE(pci, pci_ids); + +static struct pci_driver pci_driver = { + .name = DT3155_NAME, + .id_table = pci_ids, + .probe = dt3155_probe, + .remove = __devexit_p(dt3155_remove), +}; + +static int __init +dt3155_init_module(void) +{ + int err; + + printk(KERN_INFO "dt3155: ==================\n"); + printk(KERN_INFO "dt3155: init()\n"); + dt3155_chunks = dt3155_init_chunks_fifo(); + if (!dt3155_chunks) { + err = -ENOMEM; + printk(KERN_ERR "dt3155: cannot init dt3155_chunks_fifo\n"); + goto err_init_chunks_fifo; + } + dt3155_free_bufs = dt3155_init_ibufs_fifo(dt3155_chunks, + DT3155_BUF_SIZE); + if (!dt3155_free_bufs) { + err = -ENOMEM; + printk(KERN_ERR "dt3155: cannot dt3155_init_ibufs_fifo\n"); + goto err_init_ibufs_fifo; + } + dt3155_alloc_bufs = dt3155_init_fifo(); + if (!dt3155_alloc_bufs) { + err = -ENOMEM; + printk(KERN_ERR "dt3155: cannot dt3155_init_fifo\n"); + goto err_init_fifo; + } + err = pci_register_driver(&pci_driver); + if (err) { + printk(KERN_ERR "dt3155: cannot register pci_driver\n"); + goto err_register_driver; + } + return 0; /* succes */ +err_register_driver: + dt3155_free_fifo(dt3155_alloc_bufs); +err_init_fifo: + dt3155_free_ibufs_fifo(dt3155_free_bufs); +err_init_ibufs_fifo: + dt3155_free_chunks_fifo(dt3155_chunks); +err_init_chunks_fifo: + return err; +} + +static void __exit +dt3155_exit_module(void) +{ + pci_unregister_driver(&pci_driver); + dt3155_free_fifo(dt3155_alloc_bufs); + dt3155_free_ibufs_fifo(dt3155_free_bufs); + dt3155_free_chunks_fifo(dt3155_chunks); + printk(KERN_INFO "dt3155: exit()\n"); + printk(KERN_INFO "dt3155: ==================\n"); +} + +module_init(dt3155_init_module); +module_exit(dt3155_exit_module); + +MODULE_DESCRIPTION("video4linux pci-driver for dt3155 frame grabber"); +MODULE_AUTHOR("Marin Mitov "); +MODULE_VERSION(DT3155_VERSION); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/dt3155v4l/dt3155v4l.h b/drivers/staging/dt3155v4l/dt3155v4l.h new file mode 100644 index 0000000..e5c4ad0 --- /dev/null +++ b/drivers/staging/dt3155v4l/dt3155v4l.h @@ -0,0 +1,220 @@ +/*************************************************************************** + * Copyright (C) 2006-2010 by Marin Mitov * + * mitov@issp.bas.bg * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + +/* DT3155 header file */ +#ifndef _DT3155_H_ +#define _DT3155_H_ + +#ifdef __KERNEL__ + +#include +#include + +#define DT3155_NAME "dt3155" +#define DT3155_VER_MAJ 1 +#define DT3155_VER_MIN 0 +#define DT3155_VER_EXT 2 +#define DT3155_VERSION __stringify(DT3155_VER_MAJ) "." \ + __stringify(DT3155_VER_MIN) "." \ + __stringify(DT3155_VER_EXT) + +/* DT3155 Base Register offsets (memory mapped) */ +#define EVEN_DMA_START 0x00 +#define ODD_DMA_START 0x0C +#define EVEN_DMA_STRIDE 0x18 +#define ODD_DMA_STRIDE 0x24 +#define EVEN_PIXEL_FMT 0x30 +#define ODD_PIXEL_FMT 0x34 +#define FIFO_TRIGER 0x38 +#define XFER_MODE 0x3C +#define CSR1 0x40 +#define RETRY_WAIT_CNT 0x44 +#define INT_CSR 0x48 +#define EVEN_FLD_MASK 0x4C +#define ODD_FLD_MASK 0x50 +#define MASK_LENGTH 0x54 +#define FIFO_FLAG_CNT 0x58 +#define IIC_CLK_DUR 0x5C +#define IIC_CSR1 0x60 +#define IIC_CSR2 0x64 + +/* DT3155 Internal Registers indexes (i2c/IIC mapped) */ +#define CSR2 0x10 +#define EVEN_CSR 0x11 +#define ODD_CSR 0x12 +#define CONFIG 0x13 +#define DT_ID 0x1F +#define X_CLIP_START 0x20 +#define Y_CLIP_START 0x22 +#define X_CLIP_END 0x24 +#define Y_CLIP_END 0x26 +#define AD_ADDR 0x30 +#define AD_LUT 0x31 +#define AD_CMD 0x32 +#define DIG_OUT 0x40 +#define PM_LUT_ADDR 0x50 +#define PM_LUT_DATA 0x51 + +/* AD command register values */ +#define AD_CMD_REG 0x00 +#define AD_POS_REF 0x01 +#define AD_NEG_REF 0x02 + +/* CSR1 bit masks */ +#define CRPT_DIS 0x00004000 +#define FLD_CRPT_ODD 0x00000200 +#define FLD_CRPT_EVEN 0x00000100 +#define FIFO_EN 0x00000080 +#define SRST 0x00000040 +#define FLD_DN_ODD 0x00000020 +#define FLD_DN_EVEN 0x00000010 +/* These should not be used. + * Use CAP_CONT_ODD/EVEN instead +#define CAP_SNGL_ODD 0x00000008 +#define CAP_SNGL_EVEN 0x00000004 +*/ +#define CAP_CONT_ODD 0x00000002 +#define CAP_CONT_EVEN 0x00000001 + +/* INT_CSR bit masks */ +#define FLD_START_EN 0x00000400 +#define FLD_END_ODD_EN 0x00000200 +#define FLD_END_EVEN_EN 0x00000100 +#define FLD_START 0x00000004 +#define FLD_END_ODD 0x00000002 +#define FLD_END_EVEN 0x00000001 + +/* IIC_CSR1 bit masks */ +#define DIRECT_ABORT 0x00000200 + +/* IIC_CSR2 bit masks */ +#define NEW_CYCLE 0x01000000 +#define DIR_RD 0x00010000 +#define IIC_READ 0x01010000 +#define IIC_WRITE 0x01000000 + +/* CSR2 bit masks */ +#define DISP_PASS 0x40 +#define BUSY_ODD 0x20 +#define BUSY_EVEN 0x10 +#define SYNC_PRESENT 0x08 +#define VT_50HZ 0x04 +#define SYNC_SNTL 0x02 +#define CHROM_FILT 0x01 +#define VT_60HZ 0x00 + +/* CSR_EVEN/ODD bit masks */ +#define CSR_ERROR 0x04 +#define CSR_SNGL 0x02 +#define CSR_DONE 0x01 + +/* CONFIG bit masks */ +#define PM_LUT_PGM 0x80 +#define PM_LUT_SEL 0x40 +#define CLIP_EN 0x20 +#define HSCALE_EN 0x10 +#define EXT_TRIG_UP 0x0C +#define EXT_TRIG_DOWN 0x04 +#define ACQ_MODE_NEXT 0x02 +#define ACQ_MODE_ODD 0x01 +#define ACQ_MODE_EVEN 0x00 + +/* AD_CMD bit masks */ +#define VIDEO_CNL_1 0x00 +#define VIDEO_CNL_2 0x40 +#define VIDEO_CNL_3 0x80 +#define VIDEO_CNL_4 0xC0 +#define SYNC_CNL_1 0x00 +#define SYNC_CNL_2 0x10 +#define SYNC_CNL_3 0x20 +#define SYNC_CNL_4 0x30 +#define SYNC_LVL_1 0x00 +#define SYNC_LVL_2 0x04 +#define SYNC_LVL_3 0x08 +#define SYNC_LVL_4 0x0C + +/* DT3155 identificator */ +#define DT3155_ID 0x20 + +#ifdef CONFIG_DT3155_CCIR +#define DMA_STRIDE 768 +#else +#define DMA_STRIDE 640 +#endif + +/** + * struct dt3155_stats - statistics structure + * + * @free_bufs_empty: no free image buffers + * @corrupted_fields: corrupted fields + * @dma_map_failed: dma mapping failed + * @start_before_end: new started before old ended + */ +struct dt3155_stats { + int free_bufs_empty; + int corrupted_fields; + int dma_map_failed; + int start_before_end; +}; + +/* per board private data structure */ +/** + * struct dt3155_priv - private data structure + * + * @vdev: pointer to video_device structure + * @acq_fp pointer to filp that starts acquisition + * @pdev: pointer to pci_dev structure + * @vidq pointer to videobuf_queue structure + * @curr_buf: pointer to curren buffer + * @thread pointer to worker thraed + * @irq_handler: irq handler for the driver + * @dmaq queue for dma buffers + * @do_dma wait queue of the kernel thread + * @mux: mutex to protect the instance + * @lock spinlock for videobuf queues + * @field_count fields counter + * @stats: statistics structure + * @users open count + * @regs: local copy of mmio base register + * @csr2: local copy of csr2 register + * @config: local copy of config register + */ +struct dt3155_priv { + struct video_device *vdev; + struct file *acq_fp; + struct pci_dev *pdev; + struct videobuf_queue *vidq; + struct videobuf_buffer *curr_buf; + struct task_struct *thread; + irq_handler_t irq_handler; + struct list_head dmaq; + wait_queue_head_t do_dma; + struct mutex mux; + spinlock_t lock; + unsigned int field_count; + struct dt3155_stats stats; + void *regs; + int users; + u8 csr2, config; +}; + +#endif /* __KERNEL__ */ + +#endif /* _DT3155_H_ */ -- cgit v0.10.2 From 11d91a4456bbc63d2b79ea5f16ffc31ae53cdf79 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 10:59:23 -0700 Subject: Staging: dt3155v4l: add driver to the build The last patch forgot to add the driver to the Makefile, so it would not end up getting built. This resolves that issue. Cc: Marin Mitov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 23e353a..e825647 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -50,6 +50,7 @@ obj-$(CONFIG_PCMCIA_WAVELAN) += wavelan/ obj-$(CONFIG_PCMCIA_NETWAVE) += netwave/ obj-$(CONFIG_FB_SM7XX) += sm7xx/ obj-$(CONFIG_DT3155) += dt3155/ +obj-$(CONFIG_VIDEO_DT3155) += dt3155v4l/ obj-$(CONFIG_CRYSTALHD) += crystalhd/ obj-$(CONFIG_CXT1E1) += cxt1e1/ obj-$(CONFIG_TI_ST) += ti-st/ -- cgit v0.10.2 From 107c32fe68f0b64acb7edd31d44d79b87c7fa8b4 Mon Sep 17 00:00:00 2001 From: Andrew Lunn Date: Mon, 22 Mar 2010 22:46:13 +0100 Subject: Staging: batman-adv: don't have interrupts disabled while sending. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit send_vis_packets() would disable interrupts before calling dev_queue_xmit() which resulting in a backtrace in local_bh_enable(). Fix this by using kref on the vis_info object so that we can call send_vis_packets() without holding vis_hash_lock. vis_hash_lock also used to protect recv_list, so we now need a new lock to protect that instead of vis_hash_lock. Also a few checkpatch cleanups. Reported-by: Linus Lüssing Signed-off-by: Andrew Lunn Signed-off-by: Marek Lindner Signed-off-by: Simon Wunderlich Cc: stable Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/vis.c b/drivers/staging/batman-adv/vis.c index fedec1b..0b5c63f 100644 --- a/drivers/staging/batman-adv/vis.c +++ b/drivers/staging/batman-adv/vis.c @@ -29,22 +29,26 @@ struct hashtable_t *vis_hash; DEFINE_SPINLOCK(vis_hash_lock); +static DEFINE_SPINLOCK(recv_list_lock); static struct vis_info *my_vis_info; static struct list_head send_list; /* always locked with vis_hash_lock */ static void start_vis_timer(void); /* free the info */ -static void free_info(void *data) +static void free_info(struct kref *ref) { - struct vis_info *info = data; + struct vis_info *info = container_of(ref, struct vis_info, refcount); struct recvlist_node *entry, *tmp; + unsigned long flags; list_del_init(&info->send_list); + spin_lock_irqsave(&recv_list_lock, flags); list_for_each_entry_safe(entry, tmp, &info->recv_list, list) { list_del(&entry->list); kfree(entry); } + spin_unlock_irqrestore(&recv_list_lock, flags); kfree(info); } @@ -142,36 +146,65 @@ void proc_vis_read_entry(struct seq_file *seq, } } +/* add the info packet to the send list, if it was not + * already linked in. */ +static void send_list_add(struct vis_info *info) +{ + if (list_empty(&info->send_list)) { + kref_get(&info->refcount); + list_add_tail(&info->send_list, &send_list); + } +} + +/* delete the info packet from the send list, if it was + * linked in. */ +static void send_list_del(struct vis_info *info) +{ + if (!list_empty(&info->send_list)) { + list_del_init(&info->send_list); + kref_put(&info->refcount, free_info); + } +} + /* tries to add one entry to the receive list. */ static void recv_list_add(struct list_head *recv_list, char *mac) { struct recvlist_node *entry; + unsigned long flags; + entry = kmalloc(sizeof(struct recvlist_node), GFP_ATOMIC); if (!entry) return; memcpy(entry->mac, mac, ETH_ALEN); + spin_lock_irqsave(&recv_list_lock, flags); list_add_tail(&entry->list, recv_list); + spin_unlock_irqrestore(&recv_list_lock, flags); } /* returns 1 if this mac is in the recv_list */ static int recv_list_is_in(struct list_head *recv_list, char *mac) { struct recvlist_node *entry; + unsigned long flags; + spin_lock_irqsave(&recv_list_lock, flags); list_for_each_entry(entry, recv_list, list) { - if (memcmp(entry->mac, mac, ETH_ALEN) == 0) + if (memcmp(entry->mac, mac, ETH_ALEN) == 0) { + spin_unlock_irqrestore(&recv_list_lock, flags); return 1; + } } - + spin_unlock_irqrestore(&recv_list_lock, flags); return 0; } /* try to add the packet to the vis_hash. return NULL if invalid (e.g. too old, - * broken.. ). vis hash must be locked outside. is_new is set when the packet + * broken.. ). vis hash must be locked outside. is_new is set when the packet * is newer than old entries in the hash. */ static struct vis_info *add_packet(struct vis_packet *vis_packet, - int vis_info_len, int *is_new) + int vis_info_len, int *is_new, + int make_broadcast) { struct vis_info *info, *old_info; struct vis_info search_elem; @@ -198,13 +231,15 @@ static struct vis_info *add_packet(struct vis_packet *vis_packet, } /* remove old entry */ hash_remove(vis_hash, old_info); - free_info(old_info); + send_list_del(old_info); + kref_put(&old_info->refcount, free_info); } info = kmalloc(sizeof(struct vis_info) + vis_info_len, GFP_ATOMIC); if (info == NULL) return NULL; + kref_init(&info->refcount); INIT_LIST_HEAD(&info->send_list); INIT_LIST_HEAD(&info->recv_list); info->first_seen = jiffies; @@ -214,16 +249,21 @@ static struct vis_info *add_packet(struct vis_packet *vis_packet, /* initialize and add new packet. */ *is_new = 1; + /* Make it a broadcast packet, if required */ + if (make_broadcast) + memcpy(info->packet.target_orig, broadcastAddr, ETH_ALEN); + /* repair if entries is longer than packet. */ if (info->packet.entries * sizeof(struct vis_info_entry) > vis_info_len) - info->packet.entries = vis_info_len / sizeof(struct vis_info_entry); + info->packet.entries = vis_info_len / + sizeof(struct vis_info_entry); recv_list_add(&info->recv_list, info->packet.sender_orig); /* try to add it */ if (hash_add(vis_hash, info) < 0) { /* did not work (for some reason) */ - free_info(info); + kref_put(&old_info->refcount, free_info); info = NULL; } @@ -234,22 +274,21 @@ static struct vis_info *add_packet(struct vis_packet *vis_packet, void receive_server_sync_packet(struct vis_packet *vis_packet, int vis_info_len) { struct vis_info *info; - int is_new; + int is_new, make_broadcast; unsigned long flags; int vis_server = atomic_read(&vis_mode); + make_broadcast = (vis_server == VIS_TYPE_SERVER_SYNC); + spin_lock_irqsave(&vis_hash_lock, flags); - info = add_packet(vis_packet, vis_info_len, &is_new); + info = add_packet(vis_packet, vis_info_len, &is_new, make_broadcast); if (info == NULL) goto end; /* only if we are server ourselves and packet is newer than the one in * hash.*/ - if (vis_server == VIS_TYPE_SERVER_SYNC && is_new) { - memcpy(info->packet.target_orig, broadcastAddr, ETH_ALEN); - if (list_empty(&info->send_list)) - list_add_tail(&info->send_list, &send_list); - } + if (vis_server == VIS_TYPE_SERVER_SYNC && is_new) + send_list_add(info); end: spin_unlock_irqrestore(&vis_hash_lock, flags); } @@ -262,31 +301,32 @@ void receive_client_update_packet(struct vis_packet *vis_packet, int is_new; unsigned long flags; int vis_server = atomic_read(&vis_mode); + int are_target = 0; /* clients shall not broadcast. */ if (is_bcast(vis_packet->target_orig)) return; + /* Are we the target for this VIS packet? */ + if (vis_server == VIS_TYPE_SERVER_SYNC && + is_my_mac(vis_packet->target_orig)) + are_target = 1; + spin_lock_irqsave(&vis_hash_lock, flags); - info = add_packet(vis_packet, vis_info_len, &is_new); + info = add_packet(vis_packet, vis_info_len, &is_new, are_target); if (info == NULL) goto end; /* note that outdated packets will be dropped at this point. */ /* send only if we're the target server or ... */ - if (vis_server == VIS_TYPE_SERVER_SYNC && - is_my_mac(info->packet.target_orig) && - is_new) { + if (are_target && is_new) { info->packet.vis_type = VIS_TYPE_SERVER_SYNC; /* upgrade! */ - memcpy(info->packet.target_orig, broadcastAddr, ETH_ALEN); - if (list_empty(&info->send_list)) - list_add_tail(&info->send_list, &send_list); + send_list_add(info); /* ... we're not the recipient (and thus need to forward). */ } else if (!is_my_mac(info->packet.target_orig)) { - if (list_empty(&info->send_list)) - list_add_tail(&info->send_list, &send_list); + send_list_add(info); } end: spin_unlock_irqrestore(&vis_hash_lock, flags); @@ -361,14 +401,17 @@ static int generate_vis_packet(void) while (hash_iterate(orig_hash, &hashit_global)) { orig_node = hashit_global.bucket->data; if (orig_node->router != NULL - && compare_orig(orig_node->router->addr, orig_node->orig) + && compare_orig(orig_node->router->addr, + orig_node->orig) && orig_node->batman_if && (orig_node->batman_if->if_active == IF_ACTIVE) && orig_node->router->tq_avg > 0) { /* fill one entry into buffer. */ entry = &entry_array[info->packet.entries]; - memcpy(entry->src, orig_node->batman_if->net_dev->dev_addr, ETH_ALEN); + memcpy(entry->src, + orig_node->batman_if->net_dev->dev_addr, + ETH_ALEN); memcpy(entry->dest, orig_node->orig, ETH_ALEN); entry->quality = orig_node->router->tq_avg; info->packet.entries++; @@ -400,6 +443,8 @@ static int generate_vis_packet(void) return 0; } +/* free old vis packets. Must be called with this vis_hash_lock + * held */ static void purge_vis_packets(void) { HASHIT(hashit); @@ -412,7 +457,8 @@ static void purge_vis_packets(void) if (time_after(jiffies, info->first_seen + (VIS_TIMEOUT*HZ)/1000)) { hash_remove_bucket(vis_hash, &hashit); - free_info(info); + send_list_del(info); + kref_put(&info->refcount, free_info); } } } @@ -422,6 +468,8 @@ static void broadcast_vis_packet(struct vis_info *info, int packet_length) HASHIT(hashit); struct orig_node *orig_node; unsigned long flags; + struct batman_if *batman_if; + uint8_t dstaddr[ETH_ALEN]; spin_lock_irqsave(&orig_hash_lock, flags); @@ -430,45 +478,56 @@ static void broadcast_vis_packet(struct vis_info *info, int packet_length) orig_node = hashit.bucket->data; /* if it's a vis server and reachable, send it. */ - if (orig_node && - (orig_node->flags & VIS_SERVER) && - orig_node->batman_if && - orig_node->router) { + if ((!orig_node) || (!orig_node->batman_if) || + (!orig_node->router)) + continue; + if (!(orig_node->flags & VIS_SERVER)) + continue; + /* don't send it if we already received the packet from + * this node. */ + if (recv_list_is_in(&info->recv_list, orig_node->orig)) + continue; - /* don't send it if we already received the packet from - * this node. */ - if (recv_list_is_in(&info->recv_list, orig_node->orig)) - continue; + memcpy(info->packet.target_orig, orig_node->orig, ETH_ALEN); + batman_if = orig_node->batman_if; + memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); + spin_unlock_irqrestore(&orig_hash_lock, flags); - memcpy(info->packet.target_orig, - orig_node->orig, ETH_ALEN); + send_raw_packet((unsigned char *)&info->packet, + packet_length, batman_if, dstaddr); + + spin_lock_irqsave(&orig_hash_lock, flags); - send_raw_packet((unsigned char *) &info->packet, - packet_length, - orig_node->batman_if, - orig_node->router->addr); - } } - memcpy(info->packet.target_orig, broadcastAddr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); + memcpy(info->packet.target_orig, broadcastAddr, ETH_ALEN); } static void unicast_vis_packet(struct vis_info *info, int packet_length) { struct orig_node *orig_node; unsigned long flags; + struct batman_if *batman_if; + uint8_t dstaddr[ETH_ALEN]; spin_lock_irqsave(&orig_hash_lock, flags); orig_node = ((struct orig_node *) hash_find(orig_hash, info->packet.target_orig)); - if ((orig_node != NULL) && - (orig_node->batman_if != NULL) && - (orig_node->router != NULL)) { - send_raw_packet((unsigned char *) &info->packet, packet_length, - orig_node->batman_if, - orig_node->router->addr); - } + if ((!orig_node) || (!orig_node->batman_if) || (!orig_node->router)) + goto out; + + /* don't lock while sending the packets ... we therefore + * copy the required data before sending */ + batman_if = orig_node->batman_if; + memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); + spin_unlock_irqrestore(&orig_hash_lock, flags); + + send_raw_packet((unsigned char *)&info->packet, + packet_length, batman_if, dstaddr); + return; + +out: spin_unlock_irqrestore(&orig_hash_lock, flags); } @@ -502,15 +561,24 @@ static void send_vis_packets(struct work_struct *work) unsigned long flags; spin_lock_irqsave(&vis_hash_lock, flags); + purge_vis_packets(); - if (generate_vis_packet() == 0) + if (generate_vis_packet() == 0) { /* schedule if generation was successful */ - list_add_tail(&my_vis_info->send_list, &send_list); + send_list_add(my_vis_info); + } list_for_each_entry_safe(info, temp, &send_list, send_list) { - list_del_init(&info->send_list); + + kref_get(&info->refcount); + spin_unlock_irqrestore(&vis_hash_lock, flags); + send_vis_packet(info); + + spin_lock_irqsave(&vis_hash_lock, flags); + send_list_del(info); + kref_put(&info->refcount, free_info); } spin_unlock_irqrestore(&vis_hash_lock, flags); start_vis_timer(); @@ -543,6 +611,7 @@ int vis_init(void) my_vis_info->first_seen = jiffies - atomic_read(&vis_interval); INIT_LIST_HEAD(&my_vis_info->recv_list); INIT_LIST_HEAD(&my_vis_info->send_list); + kref_init(&my_vis_info->refcount); my_vis_info->packet.version = COMPAT_VERSION; my_vis_info->packet.packet_type = BAT_VIS; my_vis_info->packet.ttl = TTL; @@ -556,9 +625,9 @@ int vis_init(void) if (hash_add(vis_hash, my_vis_info) < 0) { printk(KERN_ERR - "batman-adv:Can't add own vis packet into hash\n"); - free_info(my_vis_info); /* not in hash, need to remove it - * manually. */ + "batman-adv:Can't add own vis packet into hash\n"); + /* not in hash, need to remove it manually. */ + kref_put(&my_vis_info->refcount, free_info); goto err; } @@ -572,6 +641,15 @@ err: return 0; } +/* Decrease the reference count on a hash item info */ +static void free_info_ref(void *data) +{ + struct vis_info *info = data; + + send_list_del(info); + kref_put(&info->refcount, free_info); +} + /* shutdown vis-server */ void vis_quit(void) { @@ -583,7 +661,7 @@ void vis_quit(void) spin_lock_irqsave(&vis_hash_lock, flags); /* properly remove, kill timers ... */ - hash_delete(vis_hash, free_info); + hash_delete(vis_hash, free_info_ref); vis_hash = NULL; my_vis_info = NULL; spin_unlock_irqrestore(&vis_hash_lock, flags); diff --git a/drivers/staging/batman-adv/vis.h b/drivers/staging/batman-adv/vis.h index 0cdafde..465da47 100644 --- a/drivers/staging/batman-adv/vis.h +++ b/drivers/staging/batman-adv/vis.h @@ -29,6 +29,7 @@ struct vis_info { /* list of server-neighbors we received a vis-packet * from. we should not reply to them. */ struct list_head send_list; + struct kref refcount; /* this packet might be part of the vis send queue. */ struct vis_packet packet; /* vis_info may follow here*/ -- cgit v0.10.2 From f6497e38fda6970819daacb67725d67474079381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20L=C3=BCssing?= Date: Mon, 22 Mar 2010 22:46:14 +0100 Subject: Staging: batman-adv: Fix VIS output bug for secondary interfaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TQ and HNA records for originators on secondary interfaces were wrongly being included on the primary interface. Ensure we output a line for each source interface on every node, so we correctly separate primary and secondary interface records. Signed-off-by: Linus Lüssing Signed-off-by: Andrew Lunn Cc: stable Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/proc.c b/drivers/staging/batman-adv/proc.c index 7de60e84..c9366bc 100644 --- a/drivers/staging/batman-adv/proc.c +++ b/drivers/staging/batman-adv/proc.c @@ -41,7 +41,7 @@ static int proc_interfaces_read(struct seq_file *seq, void *offset) rcu_read_lock(); list_for_each_entry_rcu(batman_if, &if_list, list) { - seq_printf(seq, "[%8s] %s %s \n", + seq_printf(seq, "[%8s] %s %s\n", (batman_if->if_active == IF_ACTIVE ? "active" : "inactive"), batman_if->dev, @@ -188,18 +188,18 @@ static int proc_originators_read(struct seq_file *seq, void *offset) rcu_read_lock(); if (list_empty(&if_list)) { rcu_read_unlock(); - seq_printf(seq, "BATMAN disabled - please specify interfaces to enable it \n"); + seq_printf(seq, "BATMAN disabled - please specify interfaces to enable it\n"); goto end; } if (((struct batman_if *)if_list.next)->if_active != IF_ACTIVE) { rcu_read_unlock(); - seq_printf(seq, "BATMAN disabled - primary interface not active \n"); + seq_printf(seq, "BATMAN disabled - primary interface not active\n"); goto end; } seq_printf(seq, - " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s] \n", + " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s]\n", "Originator", "#", TQ_MAX_VALUE, "Nexthop", "outgoingIF", "Potential nexthops", SOURCE_VERSION, REVISION_VERSION_STR, ((struct batman_if *)if_list.next)->dev, @@ -240,7 +240,7 @@ static int proc_originators_read(struct seq_file *seq, void *offset) spin_unlock_irqrestore(&orig_hash_lock, flags); if (batman_count == 0) - seq_printf(seq, "No batman nodes in range ... \n"); + seq_printf(seq, "No batman nodes in range ...\n"); end: return 0; @@ -262,7 +262,7 @@ static int proc_transt_local_read(struct seq_file *seq, void *offset) rcu_read_lock(); if (list_empty(&if_list)) { rcu_read_unlock(); - seq_printf(seq, "BATMAN disabled - please specify interfaces to enable it \n"); + seq_printf(seq, "BATMAN disabled - please specify interfaces to enable it\n"); goto end; } @@ -294,7 +294,7 @@ static int proc_transt_global_read(struct seq_file *seq, void *offset) rcu_read_lock(); if (list_empty(&if_list)) { rcu_read_unlock(); - seq_printf(seq, "BATMAN disabled - please specify interfaces to enable it \n"); + seq_printf(seq, "BATMAN disabled - please specify interfaces to enable it\n"); goto end; } rcu_read_unlock(); @@ -350,9 +350,9 @@ static int proc_vis_srv_read(struct seq_file *seq, void *offset) { int vis_server = atomic_read(&vis_mode); - seq_printf(seq, "[%c] client mode (server disabled) \n", + seq_printf(seq, "[%c] client mode (server disabled)\n", (vis_server == VIS_TYPE_CLIENT_UPDATE) ? 'x' : ' '); - seq_printf(seq, "[%c] server mode (server enabled) \n", + seq_printf(seq, "[%c] server mode (server enabled)\n", (vis_server == VIS_TYPE_SERVER_SYNC) ? 'x' : ' '); return 0; @@ -369,6 +369,8 @@ static int proc_vis_data_read(struct seq_file *seq, void *offset) struct vis_info *info; struct vis_info_entry *entries; HLIST_HEAD(vis_if_list); + struct if_list_entry *entry; + struct hlist_node *pos, *n; int i; char tmp_addr_str[ETH_STR_LEN]; unsigned long flags; @@ -387,17 +389,34 @@ static int proc_vis_data_read(struct seq_file *seq, void *offset) info = hashit.bucket->data; entries = (struct vis_info_entry *) ((char *)info + sizeof(struct vis_info)); - addr_to_string(tmp_addr_str, info->packet.vis_orig); - seq_printf(seq, "%s,", tmp_addr_str); for (i = 0; i < info->packet.entries; i++) { - proc_vis_read_entry(seq, &entries[i], &vis_if_list, - info->packet.vis_orig); + if (entries[i].quality == 0) + continue; + proc_vis_insert_interface(entries[i].src, &vis_if_list, + compare_orig(entries[i].src, + info->packet.vis_orig)); } - /* add primary/secondary records */ - proc_vis_read_prim_sec(seq, &vis_if_list); - seq_printf(seq, "\n"); + hlist_for_each_entry(entry, pos, &vis_if_list, list) { + addr_to_string(tmp_addr_str, entry->addr); + seq_printf(seq, "%s,", tmp_addr_str); + + for (i = 0; i < info->packet.entries; i++) + proc_vis_read_entry(seq, &entries[i], + entry->addr, entry->primary); + + /* add primary/secondary records */ + if (compare_orig(entry->addr, info->packet.vis_orig)) + proc_vis_read_prim_sec(seq, &vis_if_list); + + seq_printf(seq, "\n"); + } + + hlist_for_each_entry_safe(entry, pos, n, &vis_if_list, list) { + hlist_del(&entry->list); + kfree(entry); + } } spin_unlock_irqrestore(&vis_hash_lock, flags); diff --git a/drivers/staging/batman-adv/vis.c b/drivers/staging/batman-adv/vis.c index 0b5c63f..222db01 100644 --- a/drivers/staging/batman-adv/vis.c +++ b/drivers/staging/batman-adv/vis.c @@ -86,7 +86,7 @@ static int vis_info_choose(void *data, int size) /* insert interface to the list of interfaces of one originator, if it * does not already exist in the list */ -static void proc_vis_insert_interface(const uint8_t *interface, +void proc_vis_insert_interface(const uint8_t *interface, struct hlist_head *if_list, bool primary) { @@ -111,39 +111,32 @@ void proc_vis_read_prim_sec(struct seq_file *seq, struct hlist_head *if_list) { struct if_list_entry *entry; - struct hlist_node *pos, *n; + struct hlist_node *pos; char tmp_addr_str[ETH_STR_LEN]; - hlist_for_each_entry_safe(entry, pos, n, if_list, list) { - if (entry->primary) { + hlist_for_each_entry(entry, pos, if_list, list) { + if (entry->primary) seq_printf(seq, "PRIMARY, "); - } else { + else { addr_to_string(tmp_addr_str, entry->addr); seq_printf(seq, "SEC %s, ", tmp_addr_str); } - - hlist_del(&entry->list); - kfree(entry); } } /* read an entry */ void proc_vis_read_entry(struct seq_file *seq, struct vis_info_entry *entry, - struct hlist_head *if_list, - uint8_t *vis_orig) + uint8_t *src, + bool primary) { char to[40]; addr_to_string(to, entry->dest); - if (entry->quality == 0) { - proc_vis_insert_interface(vis_orig, if_list, true); + if (primary && entry->quality == 0) seq_printf(seq, "HNA %s, ", to); - } else { - proc_vis_insert_interface(entry->src, if_list, - compare_orig(entry->src, vis_orig)); + else if (compare_orig(entry->src, src)) seq_printf(seq, "TQ %s %d, ", to, entry->quality); - } } /* add the info packet to the send list, if it was not diff --git a/drivers/staging/batman-adv/vis.h b/drivers/staging/batman-adv/vis.h index 465da47..a1f92a4 100644 --- a/drivers/staging/batman-adv/vis.h +++ b/drivers/staging/batman-adv/vis.h @@ -49,10 +49,13 @@ struct recvlist_node { extern struct hashtable_t *vis_hash; extern spinlock_t vis_hash_lock; +void proc_vis_insert_interface(const uint8_t *interface, + struct hlist_head *if_list, + bool primary); void proc_vis_read_entry(struct seq_file *seq, struct vis_info_entry *entry, - struct hlist_head *if_list, - uint8_t *vis_orig); + uint8_t *src, + bool primary); void proc_vis_read_prim_sec(struct seq_file *seq, struct hlist_head *if_list); void receive_server_sync_packet(struct vis_packet *vis_packet, -- cgit v0.10.2 From ea4ceb18b525fd7016c10995c0f1313a729c7e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20L=C3=BCssing?= Date: Mon, 22 Mar 2010 22:46:15 +0100 Subject: Staging: batman-adv: Fixing wrap-around bug in vis MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When the seqno for a vis packet had a wrap around from i.e. 255 to 0, add_packet() would falsely claim the older packet with the seqno 255 as newer as the one with the seqno of 0 and would therefore ignore the new packet. This happens with all following vis packets until the old vis packet expires after 180 seconds timeout. This patch fixes this issue and gets rid of these highly undesired 3min. breaks for the vis-server. Signed-off-by: Linus Lüssing Signed-off-by: Sven Eckelmann Signed-off-by: Andrew Lunn Cc: stable Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/vis.c b/drivers/staging/batman-adv/vis.c index 222db01..28eac7e 100644 --- a/drivers/staging/batman-adv/vis.c +++ b/drivers/staging/batman-adv/vis.c @@ -27,6 +27,22 @@ #include "hard-interface.h" #include "hash.h" +/* Returns the smallest signed integer in two's complement with the sizeof x */ +#define smallest_signed_int(x) (1u << (7u + 8u * (sizeof(x) - 1u))) + +/* Checks if a sequence number x is a predecessor/successor of y. + they handle overflows/underflows and can correctly check for a + predecessor/successor unless the variable sequence number has grown by + more then 2**(bitwidth(x)-1)-1. + This means that for a uint8_t with the maximum value 255, it would think: + * when adding nothing - it is neither a predecessor nor a successor + * before adding more than 127 to the starting value - it is a predecessor, + * when adding 128 - it is neither a predecessor nor a successor, + * after adding more than 127 to the starting value - it is a successor */ +#define seq_before(x, y) ({typeof(x) _dummy = (x - y); \ + _dummy > smallest_signed_int(_dummy); }) +#define seq_after(x, y) seq_before(y, x) + struct hashtable_t *vis_hash; DEFINE_SPINLOCK(vis_hash_lock); static DEFINE_SPINLOCK(recv_list_lock); @@ -212,7 +228,7 @@ static struct vis_info *add_packet(struct vis_packet *vis_packet, old_info = hash_find(vis_hash, &search_elem); if (old_info != NULL) { - if (vis_packet->seqno - old_info->packet.seqno <= 0) { + if (!seq_after(vis_packet->seqno, old_info->packet.seqno)) { if (old_info->packet.seqno == vis_packet->seqno) { recv_list_add(&old_info->recv_list, vis_packet->sender_orig); -- cgit v0.10.2 From d20cf2feafa38edfcb9e7c98898b006c5fffd62e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 11:43:32 -0700 Subject: Staging: comedi: comedi_ksysms: remove commented out symbols These aren't needed, they are commented out, so remove them. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_ksyms.c b/drivers/staging/comedi/comedi_ksyms.c index 87803e6..6ebfbf3 100644 --- a/drivers/staging/comedi/comedi_ksyms.c +++ b/drivers/staging/comedi/comedi_ksyms.c @@ -28,12 +28,7 @@ /* for drivers */ EXPORT_SYMBOL(comedi_driver_register); EXPORT_SYMBOL(comedi_driver_unregister); -/* EXPORT_SYMBOL(comedi_bufcheck); */ -/* EXPORT_SYMBOL(comedi_done); */ -/* EXPORT_SYMBOL(comedi_error_done); */ EXPORT_SYMBOL(comedi_error); -/* EXPORT_SYMBOL(comedi_eobuf); */ -/* EXPORT_SYMBOL(comedi_eos); */ EXPORT_SYMBOL(comedi_event); EXPORT_SYMBOL(comedi_get_subdevice_runflags); EXPORT_SYMBOL(comedi_set_subdevice_runflags); -- cgit v0.10.2 From d58214b0b8662f1b27d538390ecc49bbea0cd754 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 11:54:07 -0700 Subject: Staging: comedi: move a bunch of EXPORT_SYMBOL lines Move the ones that are needed to be in drivers.c into the file. This is with the goal of deleting the comedi_ksyms.c file. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_ksyms.c b/drivers/staging/comedi/comedi_ksyms.c index 6ebfbf3..c0e53bc 100644 --- a/drivers/staging/comedi/comedi_ksyms.c +++ b/drivers/staging/comedi/comedi_ksyms.c @@ -26,8 +26,6 @@ #include "comedidev.h" /* for drivers */ -EXPORT_SYMBOL(comedi_driver_register); -EXPORT_SYMBOL(comedi_driver_unregister); EXPORT_SYMBOL(comedi_error); EXPORT_SYMBOL(comedi_event); EXPORT_SYMBOL(comedi_get_subdevice_runflags); @@ -51,14 +49,3 @@ EXPORT_SYMBOL_GPL(comedi_usb_auto_unconfig); /* for kcomedilib */ EXPORT_SYMBOL(check_chanlist); EXPORT_SYMBOL_GPL(comedi_get_device_file_info); - -EXPORT_SYMBOL(comedi_buf_put); -EXPORT_SYMBOL(comedi_buf_get); -EXPORT_SYMBOL(comedi_buf_read_n_available); -EXPORT_SYMBOL(comedi_buf_write_free); -EXPORT_SYMBOL(comedi_buf_write_alloc); -EXPORT_SYMBOL(comedi_buf_read_free); -EXPORT_SYMBOL(comedi_buf_read_alloc); -EXPORT_SYMBOL(comedi_buf_memcpy_to); -EXPORT_SYMBOL(comedi_buf_memcpy_from); -EXPORT_SYMBOL(comedi_reset_async_buf); diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 800106a..2b7eda5 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -188,6 +188,7 @@ int comedi_driver_register(struct comedi_driver *driver) return 0; } +EXPORT_SYMBOL(comedi_driver_register); int comedi_driver_unregister(struct comedi_driver *driver) { @@ -228,6 +229,7 @@ int comedi_driver_unregister(struct comedi_driver *driver) } return -EINVAL; } +EXPORT_SYMBOL(comedi_driver_unregister); static int postconfig(struct comedi_device *dev) { @@ -621,6 +623,7 @@ unsigned int comedi_buf_write_alloc(struct comedi_async *async, smp_mb(); return nbytes; } +EXPORT_SYMBOL(comedi_buf_write_alloc); /* allocates nothing unless it can completely fulfill the request */ unsigned int comedi_buf_write_alloc_strict(struct comedi_async *async, @@ -655,6 +658,7 @@ unsigned comedi_buf_write_free(struct comedi_async *async, unsigned int nbytes) return nbytes; } +EXPORT_SYMBOL(comedi_buf_write_free); /* allocates a chunk for the reader from filled (and munged) buffer space */ unsigned comedi_buf_read_alloc(struct comedi_async *async, unsigned nbytes) @@ -669,6 +673,7 @@ unsigned comedi_buf_read_alloc(struct comedi_async *async, unsigned nbytes) smp_rmb(); return nbytes; } +EXPORT_SYMBOL(comedi_buf_read_alloc); /* transfers control of a chunk from reader to free buffer space */ unsigned comedi_buf_read_free(struct comedi_async *async, unsigned int nbytes) @@ -687,6 +692,7 @@ unsigned comedi_buf_read_free(struct comedi_async *async, unsigned int nbytes) async->buf_read_ptr %= async->prealloc_bufsz; return nbytes; } +EXPORT_SYMBOL(comedi_buf_read_free); void comedi_buf_memcpy_to(struct comedi_async *async, unsigned int offset, const void *data, unsigned int num_bytes) @@ -712,6 +718,7 @@ void comedi_buf_memcpy_to(struct comedi_async *async, unsigned int offset, write_ptr = 0; } } +EXPORT_SYMBOL(comedi_buf_memcpy_to); void comedi_buf_memcpy_from(struct comedi_async *async, unsigned int offset, void *dest, unsigned int nbytes) @@ -738,6 +745,7 @@ void comedi_buf_memcpy_from(struct comedi_async *async, unsigned int offset, read_ptr = 0; } } +EXPORT_SYMBOL(comedi_buf_memcpy_from); unsigned int comedi_buf_read_n_available(struct comedi_async *async) { @@ -753,6 +761,7 @@ unsigned int comedi_buf_read_n_available(struct comedi_async *async) smp_rmb(); return num_bytes; } +EXPORT_SYMBOL(comedi_buf_read_n_available); int comedi_buf_get(struct comedi_async *async, short *x) { @@ -765,6 +774,7 @@ int comedi_buf_get(struct comedi_async *async, short *x) comedi_buf_read_free(async, sizeof(short)); return 1; } +EXPORT_SYMBOL(comedi_buf_get); int comedi_buf_put(struct comedi_async *async, short x) { @@ -778,6 +788,7 @@ int comedi_buf_put(struct comedi_async *async, short x) comedi_buf_write_free(async, sizeof(short)); return 1; } +EXPORT_SYMBOL(comedi_buf_put); void comedi_reset_async_buf(struct comedi_async *async) { @@ -797,6 +808,7 @@ void comedi_reset_async_buf(struct comedi_async *async) async->events = 0; } +EXPORT_SYMBOL(comedi_reset_async_buf); int comedi_auto_config(struct device *hardware_device, const char *board_name, const int *options, unsigned num_options) -- cgit v0.10.2 From 18736438ae4ab3d96602b92446e07cc03c024b02 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 12:02:23 -0700 Subject: Staging: comedi: more EXPORT_SYMBOL movement This moves the markings to the comedi_fops.c file, where they belong. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 1b3aed4..4fe3d0c 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -57,6 +57,7 @@ MODULE_LICENSE("GPL"); #ifdef CONFIG_COMEDI_DEBUG int comedi_debug; +EXPORT_SYMBOL(comedi_debug); module_param(comedi_debug, int, 0644); #endif @@ -1975,6 +1976,7 @@ void comedi_error(const struct comedi_device *dev, const char *s) printk(KERN_ERR "comedi%d: %s: %s\n", dev->minor, dev->driver->driver_name, s); } +EXPORT_SYMBOL(comedi_error); void comedi_event(struct comedi_device *dev, struct comedi_subdevice *s) { @@ -2017,6 +2019,7 @@ void comedi_event(struct comedi_device *dev, struct comedi_subdevice *s) } s->async->events = 0; } +EXPORT_SYMBOL(comedi_event); void comedi_set_subdevice_runflags(struct comedi_subdevice *s, unsigned mask, unsigned bits) @@ -2028,6 +2031,7 @@ void comedi_set_subdevice_runflags(struct comedi_subdevice *s, unsigned mask, s->runflags |= (bits & mask); spin_unlock_irqrestore(&s->spin_lock, flags); } +EXPORT_SYMBOL(comedi_set_subdevice_runflags); unsigned comedi_get_subdevice_runflags(struct comedi_subdevice *s) { @@ -2039,6 +2043,7 @@ unsigned comedi_get_subdevice_runflags(struct comedi_subdevice *s) spin_unlock_irqrestore(&s->spin_lock, flags); return runflags; } +EXPORT_SYMBOL(comedi_get_subdevice_runflags); static int is_device_busy(struct comedi_device *dev) { @@ -2152,6 +2157,7 @@ int comedi_alloc_board_minor(struct device *hardware_device) } return i; } +EXPORT_SYMBOL_GPL(comedi_alloc_board_minor); void comedi_free_board_minor(unsigned minor) { @@ -2177,6 +2183,7 @@ void comedi_free_board_minor(unsigned minor) kfree(info); } } +EXPORT_SYMBOL_GPL(comedi_free_board_minor); int comedi_alloc_subdevice_minor(struct comedi_device *dev, struct comedi_subdevice *s) @@ -2286,6 +2293,7 @@ struct comedi_device_file_info *comedi_get_device_file_info(unsigned minor) spin_unlock_irqrestore(&comedi_file_info_table_lock, flags); return info; } +EXPORT_SYMBOL_GPL(comedi_get_device_file_info); static int resize_async_buffer(struct comedi_device *dev, struct comedi_subdevice *s, diff --git a/drivers/staging/comedi/comedi_ksyms.c b/drivers/staging/comedi/comedi_ksyms.c index c0e53bc..9dc04a6 100644 --- a/drivers/staging/comedi/comedi_ksyms.c +++ b/drivers/staging/comedi/comedi_ksyms.c @@ -26,21 +26,12 @@ #include "comedidev.h" /* for drivers */ -EXPORT_SYMBOL(comedi_error); -EXPORT_SYMBOL(comedi_event); -EXPORT_SYMBOL(comedi_get_subdevice_runflags); -EXPORT_SYMBOL(comedi_set_subdevice_runflags); EXPORT_SYMBOL(range_bipolar10); EXPORT_SYMBOL(range_bipolar5); EXPORT_SYMBOL(range_bipolar2_5); EXPORT_SYMBOL(range_unipolar10); EXPORT_SYMBOL(range_unipolar5); EXPORT_SYMBOL(range_unknown); -#ifdef CONFIG_COMEDI_DEBUG -EXPORT_SYMBOL(comedi_debug); -#endif -EXPORT_SYMBOL_GPL(comedi_alloc_board_minor); -EXPORT_SYMBOL_GPL(comedi_free_board_minor); EXPORT_SYMBOL_GPL(comedi_pci_auto_config); EXPORT_SYMBOL_GPL(comedi_pci_auto_unconfig); EXPORT_SYMBOL_GPL(comedi_usb_auto_config); @@ -48,4 +39,3 @@ EXPORT_SYMBOL_GPL(comedi_usb_auto_unconfig); /* for kcomedilib */ EXPORT_SYMBOL(check_chanlist); -EXPORT_SYMBOL_GPL(comedi_get_device_file_info); -- cgit v0.10.2 From e42315177d278089ba7b1e623ecbd5b273b7e62b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 12:12:02 -0700 Subject: Staging: comedi: more EXPORT_SYMBOL movement Move the exports for the variables that are in range.c into the file itself. These variables should be prefixed with comedi_ but that's for a different patch... Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_ksyms.c b/drivers/staging/comedi/comedi_ksyms.c index 9dc04a6..cc0a399 100644 --- a/drivers/staging/comedi/comedi_ksyms.c +++ b/drivers/staging/comedi/comedi_ksyms.c @@ -26,12 +26,6 @@ #include "comedidev.h" /* for drivers */ -EXPORT_SYMBOL(range_bipolar10); -EXPORT_SYMBOL(range_bipolar5); -EXPORT_SYMBOL(range_bipolar2_5); -EXPORT_SYMBOL(range_unipolar10); -EXPORT_SYMBOL(range_unipolar5); -EXPORT_SYMBOL(range_unknown); EXPORT_SYMBOL_GPL(comedi_pci_auto_config); EXPORT_SYMBOL_GPL(comedi_pci_auto_unconfig); EXPORT_SYMBOL_GPL(comedi_usb_auto_config); diff --git a/drivers/staging/comedi/range.c b/drivers/staging/comedi/range.c index c35ade9..b5644ca 100644 --- a/drivers/staging/comedi/range.c +++ b/drivers/staging/comedi/range.c @@ -30,6 +30,12 @@ const struct comedi_lrange range_bipolar2_5 = { 1, {BIP_RANGE(2.5)} }; const struct comedi_lrange range_unipolar10 = { 1, {UNI_RANGE(10)} }; const struct comedi_lrange range_unipolar5 = { 1, {UNI_RANGE(5)} }; const struct comedi_lrange range_unknown = { 1, {{0, 1000000, UNIT_none} } }; +EXPORT_SYMBOL(range_bipolar10); +EXPORT_SYMBOL(range_bipolar5); +EXPORT_SYMBOL(range_bipolar2_5); +EXPORT_SYMBOL(range_unipolar10); +EXPORT_SYMBOL(range_unipolar5); +EXPORT_SYMBOL(range_unknown); /* COMEDI_RANGEINFO -- cgit v0.10.2 From 0fd0ca75fd9eb0e9cde49c28ad227c2d8d049366 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 12:33:17 -0700 Subject: Staging: comedi: rename check_chanlist to comedi_check_chanlist It's a global function, so properly name it and move the export to where the function is located at. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 4fe3d0c..b11f9b0 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -839,7 +839,7 @@ static int parse_insn(struct comedi_device *dev, struct comedi_insn *insn, goto out; } - ret = check_chanlist(s, 1, &insn->chanspec); + ret = comedi_check_chanlist(s, 1, &insn->chanspec); if (ret < 0) { ret = -EINVAL; DPRINTK("bad chanspec\n"); @@ -1052,7 +1052,7 @@ static int do_cmd_ioctl(struct comedi_device *dev, void *arg, void *file) } /* make sure each element in channel/gain list is valid */ - ret = check_chanlist(s, async->cmd.chanlist_len, async->cmd.chanlist); + ret = comedi_check_chanlist(s, async->cmd.chanlist_len, async->cmd.chanlist); if (ret < 0) { DPRINTK("bad chanlist\n"); goto cleanup; @@ -1174,7 +1174,7 @@ static int do_cmdtest_ioctl(struct comedi_device *dev, void *arg, void *file) } /* make sure each element in channel/gain list is valid */ - ret = check_chanlist(s, user_cmd.chanlist_len, chanlist); + ret = comedi_check_chanlist(s, user_cmd.chanlist_len, chanlist); if (ret < 0) { DPRINTK("bad chanlist\n"); goto cleanup; diff --git a/drivers/staging/comedi/comedi_ksyms.c b/drivers/staging/comedi/comedi_ksyms.c index cc0a399..0ce2314 100644 --- a/drivers/staging/comedi/comedi_ksyms.c +++ b/drivers/staging/comedi/comedi_ksyms.c @@ -30,6 +30,3 @@ EXPORT_SYMBOL_GPL(comedi_pci_auto_config); EXPORT_SYMBOL_GPL(comedi_pci_auto_unconfig); EXPORT_SYMBOL_GPL(comedi_usb_auto_config); EXPORT_SYMBOL_GPL(comedi_usb_auto_unconfig); - -/* for kcomedilib */ -EXPORT_SYMBOL(check_chanlist); diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index f5b0810..5e46727 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -382,7 +382,7 @@ enum subdevice_runflags { */ int do_rangeinfo_ioctl(struct comedi_device *dev, struct comedi_rangeinfo *arg); -int check_chanlist(struct comedi_subdevice *s, int n, unsigned int *chanlist); +int comedi_check_chanlist(struct comedi_subdevice *s, int n, unsigned int *chanlist); void comedi_set_subdevice_runflags(struct comedi_subdevice *s, unsigned mask, unsigned bits); unsigned comedi_get_subdevice_runflags(struct comedi_subdevice *s); diff --git a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c index 288fef4..2229b46 100644 --- a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c +++ b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c @@ -251,7 +251,7 @@ int comedi_do_insn(void *d, struct comedi_insn *insn) /* XXX check lock */ - ret = check_chanlist(s, 1, &insn->chanspec); + ret = comedi_check_chanlist(s, 1, &insn->chanspec); if (ret < 0) { printk("bad chanspec\n"); ret = -EINVAL; diff --git a/drivers/staging/comedi/range.c b/drivers/staging/comedi/range.c index b5644ca..6b03a69 100644 --- a/drivers/staging/comedi/range.c +++ b/drivers/staging/comedi/range.c @@ -126,7 +126,8 @@ static int aref_invalid(struct comedi_subdevice *s, unsigned int chanspec) This function checks each element in a channel/gain list to make make sure it is valid. */ -int check_chanlist(struct comedi_subdevice *s, int n, unsigned int *chanlist) +int comedi_check_chanlist(struct comedi_subdevice *s, int n, + unsigned int *chanlist) { int i; int chan; @@ -160,3 +161,4 @@ int check_chanlist(struct comedi_subdevice *s, int n, unsigned int *chanlist) } return 0; } +EXPORT_SYMBOL(comedi_check_chanlist); -- cgit v0.10.2 From 4bf935596bfabe3f951bc0331ebd893ef06e1123 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 12:38:02 -0700 Subject: Staging: comedi: remove comedi_ksyms.c Move the 4 remaining exports to their function location and then remove the comedi_ksyms.c file, as it's no longer needed. Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/Makefile b/drivers/staging/comedi/Makefile index 05811f7..20afea3 100644 --- a/drivers/staging/comedi/Makefile +++ b/drivers/staging/comedi/Makefile @@ -9,4 +9,3 @@ comedi-objs := \ range.o \ drivers.o \ comedi_compat32.o \ - comedi_ksyms.o \ diff --git a/drivers/staging/comedi/comedi_ksyms.c b/drivers/staging/comedi/comedi_ksyms.c deleted file mode 100644 index 0ce2314..0000000 --- a/drivers/staging/comedi/comedi_ksyms.c +++ /dev/null @@ -1,32 +0,0 @@ -/* - module/exp_ioctl.c - exported comedi functions - - COMEDI - Linux Control and Measurement Device Interface - Copyright (C) 1997-8 David A. Schleef - - 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. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#define __NO_VERSION__ - -#include "comedidev.h" - -/* for drivers */ -EXPORT_SYMBOL_GPL(comedi_pci_auto_config); -EXPORT_SYMBOL_GPL(comedi_pci_auto_unconfig); -EXPORT_SYMBOL_GPL(comedi_usb_auto_config); -EXPORT_SYMBOL_GPL(comedi_usb_auto_unconfig); diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 2b7eda5..d7a4509 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -881,20 +881,24 @@ int comedi_pci_auto_config(struct pci_dev *pcidev, const char *board_name) return comedi_auto_config(&pcidev->dev, board_name, options, ARRAY_SIZE(options)); } +EXPORT_SYMBOL_GPL(comedi_pci_auto_config); void comedi_pci_auto_unconfig(struct pci_dev *pcidev) { comedi_auto_unconfig(&pcidev->dev); } +EXPORT_SYMBOL_GPL(comedi_pci_auto_unconfig); int comedi_usb_auto_config(struct usb_device *usbdev, const char *board_name) { BUG_ON(usbdev == NULL); return comedi_auto_config(&usbdev->dev, board_name, NULL, 0); } +EXPORT_SYMBOL_GPL(comedi_usb_auto_config); void comedi_usb_auto_unconfig(struct usb_device *usbdev) { BUG_ON(usbdev == NULL); comedi_auto_unconfig(&usbdev->dev); } +EXPORT_SYMBOL_GPL(comedi_usb_auto_unconfig); -- cgit v0.10.2 From 7382e5711f3adc934227473f82156ae1e2d7e562 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 13:08:06 -0700 Subject: Staging: comedi: kcomedilib: remove ksyms.c file Move only the exports that we actually use into the individual files, and delete the ksyms.c file entirely. This will make it easier to start cleaning up kcomedilib (i.e. delete most of it.) Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/kcomedilib/Makefile b/drivers/staging/comedi/kcomedilib/Makefile index ffcc9ad..76de45b 100644 --- a/drivers/staging/comedi/kcomedilib/Makefile +++ b/drivers/staging/comedi/kcomedilib/Makefile @@ -2,7 +2,6 @@ obj-$(CONFIG_COMEDI) += kcomedilib.o kcomedilib-objs := \ data.o \ - ksyms.o \ dio.o \ kcomedilib_main.o \ get.o diff --git a/drivers/staging/comedi/kcomedilib/dio.c b/drivers/staging/comedi/kcomedilib/dio.c index 30192f3..e37aa53 100644 --- a/drivers/staging/comedi/kcomedilib/dio.c +++ b/drivers/staging/comedi/kcomedilib/dio.c @@ -25,6 +25,7 @@ #include "../comedilib.h" #include +#include int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan, unsigned int io) @@ -40,6 +41,7 @@ int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan, return comedi_do_insn(dev, &insn); } +EXPORT_SYMBOL(comedi_dio_config); int comedi_dio_read(void *dev, unsigned int subdev, unsigned int chan, unsigned int *val) @@ -93,3 +95,4 @@ int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask, return ret; } +EXPORT_SYMBOL(comedi_dio_bitfield); diff --git a/drivers/staging/comedi/kcomedilib/get.c b/drivers/staging/comedi/kcomedilib/get.c index 6d84187..ec072ce 100644 --- a/drivers/staging/comedi/kcomedilib/get.c +++ b/drivers/staging/comedi/kcomedilib/get.c @@ -81,6 +81,7 @@ int comedi_find_subdevice_by_type(void *d, int type, unsigned int subd) } return -1; } +EXPORT_SYMBOL(comedi_find_subdevice_by_type); int comedi_get_n_channels(void *d, unsigned int subdevice) { @@ -89,6 +90,7 @@ int comedi_get_n_channels(void *d, unsigned int subdevice) return s->n_chan; } +EXPORT_SYMBOL(comedi_get_n_channels); int comedi_get_len_chanlist(void *d, unsigned int subdevice) { @@ -117,11 +119,10 @@ int comedi_get_rangetype(void *d, unsigned int subdevice, unsigned int chan) struct comedi_subdevice *s = dev->subdevices + subdevice; int ret; - if (s->range_table_list) { + if (s->range_table_list) ret = s->range_table_list[chan]->length; - } else { + else ret = s->range_table->length; - } ret = ret | (dev->minor << 28) | (subdevice << 24) | (chan << 16); @@ -135,11 +136,10 @@ int comedi_get_n_ranges(void *d, unsigned int subdevice, unsigned int chan) struct comedi_subdevice *s = dev->subdevices + subdevice; int ret; - if (s->range_table_list) { + if (s->range_table_list) ret = s->range_table_list[chan]->length; - } else { + else ret = s->range_table->length; - } return ret; } @@ -154,11 +154,11 @@ int comedi_get_krange(void *d, unsigned int subdevice, unsigned int chan, struct comedi_subdevice *s = dev->subdevices + subdevice; const struct comedi_lrange *lr; - if (s->range_table_list) { + if (s->range_table_list) lr = s->range_table_list[chan]; - } else { + else lr = s->range_table; - } + if (range >= lr->length) return -EINVAL; diff --git a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c index 2229b46..32c7bbb 100644 --- a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c +++ b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c @@ -31,7 +31,7 @@ #include #include #include -#include +#include #include "../comedi.h" #include "../comedilib.h" @@ -68,6 +68,7 @@ void *comedi_open(const char *filename) return (void *)dev; } +EXPORT_SYMBOL(comedi_open); void *comedi_open_old(unsigned int minor) { @@ -96,6 +97,7 @@ int comedi_close(void *d) return 0; } +EXPORT_SYMBOL(comedi_close); int comedi_loglevel(int newlevel) { @@ -104,7 +106,7 @@ int comedi_loglevel(int newlevel) void comedi_perror(const char *message) { - printk("%s: unknown error\n", message); + printk(KERN_ERR "%s: unknown error\n", message); } char *comedi_strerror(int err) diff --git a/drivers/staging/comedi/kcomedilib/ksyms.c b/drivers/staging/comedi/kcomedilib/ksyms.c deleted file mode 100644 index 8bf4471..0000000 --- a/drivers/staging/comedi/kcomedilib/ksyms.c +++ /dev/null @@ -1,146 +0,0 @@ -/* - comedi/kcomedilib/ksyms.c - a comedlib interface for kernel modules - - COMEDI - Linux Control and Measurement Device Interface - Copyright (C) 1997-2001 David A. Schleef - - 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. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include "../comedi.h" -#include "../comedilib.h" -#include "../comedidev.h" - -#include - -#include -#include -#include -#include -#include -#include -#include - -/* functions specific to kcomedilib */ - -EXPORT_SYMBOL(comedi_register_callback); -EXPORT_SYMBOL(comedi_get_krange); -EXPORT_SYMBOL(comedi_get_buf_head_pos); -EXPORT_SYMBOL(comedi_set_user_int_count); -EXPORT_SYMBOL(comedi_map); -EXPORT_SYMBOL(comedi_unmap); - -/* This list comes from user-space comedilib, to show which - * functions are not ported yet. */ - -EXPORT_SYMBOL(comedi_open); -EXPORT_SYMBOL(comedi_close); - -/* logging */ -EXPORT_SYMBOL(comedi_loglevel); -EXPORT_SYMBOL(comedi_perror); -EXPORT_SYMBOL(comedi_strerror); -/* EXPORT_SYMBOL(comedi_errno); */ -EXPORT_SYMBOL(comedi_fileno); - -/* device queries */ -EXPORT_SYMBOL(comedi_get_n_subdevices); -EXPORT_SYMBOL(comedi_get_version_code); -EXPORT_SYMBOL(comedi_get_driver_name); -EXPORT_SYMBOL(comedi_get_board_name); - -/* subdevice queries */ -EXPORT_SYMBOL(comedi_get_subdevice_type); -EXPORT_SYMBOL(comedi_find_subdevice_by_type); -EXPORT_SYMBOL(comedi_get_subdevice_flags); -EXPORT_SYMBOL(comedi_get_n_channels); -/* -* EXPORT_SYMBOL(comedi_range_is_chan_specific); -* EXPORT_SYMBOL(comedi_maxdata_is_chan_specific); -*/ - -/* channel queries */ -EXPORT_SYMBOL(comedi_get_maxdata); -#ifdef KCOMEDILIB_DEPRECATED -EXPORT_SYMBOL(comedi_get_rangetype); -#endif -EXPORT_SYMBOL(comedi_get_n_ranges); -/* EXPORT_SYMBOL(comedi_find_range); */ - -/* buffer queries */ -EXPORT_SYMBOL(comedi_get_buffer_size); -/* -* EXPORT_SYMBOL(comedi_get_max_buffer_size); -* EXPORT_SYMBOL(comedi_set_buffer_size); -*/ -EXPORT_SYMBOL(comedi_get_buffer_contents); -EXPORT_SYMBOL(comedi_get_buffer_offset); - -/* low-level stuff */ -/* -* EXPORT_SYMBOL(comedi_trigger); EXPORT_SYMBOL(comedi_do_insnlist); -*/ -EXPORT_SYMBOL(comedi_do_insn); -EXPORT_SYMBOL(comedi_lock); -EXPORT_SYMBOL(comedi_unlock); - -/* physical units */ -/* -* EXPORT_SYMBOL(comedi_to_phys); EXPORT_SYMBOL(comedi_from_phys); -*/ - -/* synchronous stuff */ -EXPORT_SYMBOL(comedi_data_read); -EXPORT_SYMBOL(comedi_data_read_hint); -EXPORT_SYMBOL(comedi_data_read_delayed); -EXPORT_SYMBOL(comedi_data_write); -EXPORT_SYMBOL(comedi_dio_config); -EXPORT_SYMBOL(comedi_dio_read); -EXPORT_SYMBOL(comedi_dio_write); -EXPORT_SYMBOL(comedi_dio_bitfield); - -/* slowly varying stuff */ -/* -* EXPORT_SYMBOL(comedi_sv_init); EXPORT_SYMBOL(comedi_sv_update); -* EXPORT_SYMBOL(comedi_sv_measure); -*/ - -/* commands */ -/* -* EXPORT_SYMBOL(comedi_get_cmd_src_mask); -* EXPORT_SYMBOL(comedi_get_cmd_generic_timed); -*/ -EXPORT_SYMBOL(comedi_cancel); -EXPORT_SYMBOL(comedi_command); -EXPORT_SYMBOL(comedi_command_test); -EXPORT_SYMBOL(comedi_poll); - -/* buffer configuration */ -EXPORT_SYMBOL(comedi_mark_buffer_read); -EXPORT_SYMBOL(comedi_mark_buffer_written); - -/* EXPORT_SYMBOL(comedi_get_range); */ -EXPORT_SYMBOL(comedi_get_len_chanlist); - -/* deprecated */ -/* -* EXPORT_SYMBOL(comedi_get_timer); -* EXPORT_SYMBOL(comedi_timed_1chan); -*/ - -/* alpha */ -/* EXPORT_SYMBOL(comedi_set_global_oor_behavior); */ -- cgit v0.10.2 From 703f5936e2a4a31a5b2596d47c1504a472d4ab85 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 13:42:37 -0700 Subject: Staging: comedi: clean up comedilib.h Remove a whole #ifdef section that is not needed anymore. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedilib.h b/drivers/staging/comedi/comedilib.h index 27dd3be..deb28cb 100644 --- a/drivers/staging/comedi/comedilib.h +++ b/drivers/staging/comedi/comedilib.h @@ -26,16 +26,6 @@ #include "comedi.h" -/* Kernel internal stuff. Needed by real-time modules and such. */ - -#ifndef __KERNEL__ -#error linux/comedilib.h should not be included by non-kernel-space code -#endif - -/* exported functions */ - -#ifndef KCOMEDILIB_DEPRECATED - /* these functions may not be called at real-time priority */ void *comedi_open(const char *path); @@ -117,77 +107,5 @@ int comedi_mark_buffer_written(void *d, unsigned int subdevice, int comedi_get_buffer_contents(void *dev, unsigned int subdevice); int comedi_get_buffer_offset(void *dev, unsigned int subdevice); -#else - -/* these functions may not be called at real-time priority */ - -int comedi_open(unsigned int minor); -void comedi_close(unsigned int minor); - -/* these functions may be called at any priority, but may fail at - real-time priority */ - -int comedi_lock(unsigned int minor, unsigned int subdev); -int comedi_unlock(unsigned int minor, unsigned int subdev); - -/* these functions may be called at any priority, but you must hold - the lock for the subdevice */ - -int comedi_cancel(unsigned int minor, unsigned int subdev); -int comedi_register_callback(unsigned int minor, unsigned int subdev, - unsigned int mask, int (*cb) (unsigned int, - void *), void *arg); - -int comedi_command(unsigned int minor, struct comedi_cmd *cmd); -int comedi_command_test(unsigned int minor, struct comedi_cmd *cmd); -int comedi_trigger(unsigned int minor, unsigned int subdev, - struct comedi_trig *it); -int __comedi_trigger(unsigned int minor, unsigned int subdev, - struct comedi_trig *it); -int comedi_data_write(unsigned int dev, unsigned int subdev, unsigned int chan, - unsigned int range, unsigned int aref, unsigned int data); -int comedi_data_read(unsigned int dev, unsigned int subdev, unsigned int chan, - unsigned int range, unsigned int aref, unsigned int *data); -int comedi_dio_config(unsigned int dev, unsigned int subdev, unsigned int chan, - unsigned int io); -int comedi_dio_read(unsigned int dev, unsigned int subdev, unsigned int chan, - unsigned int *val); -int comedi_dio_write(unsigned int dev, unsigned int subdev, unsigned int chan, - unsigned int val); -int comedi_dio_bitfield(unsigned int dev, unsigned int subdev, - unsigned int mask, unsigned int *bits); -int comedi_get_n_subdevices(unsigned int dev); -int comedi_get_version_code(unsigned int dev); -char *comedi_get_driver_name(unsigned int dev); -char *comedi_get_board_name(unsigned int minor); -int comedi_get_subdevice_type(unsigned int minor, unsigned int subdevice); -int comedi_find_subdevice_by_type(unsigned int minor, int type, - unsigned int subd); -int comedi_get_n_channels(unsigned int minor, unsigned int subdevice); -unsigned int comedi_get_maxdata(unsigned int minor, unsigned int subdevice, - unsigned int chan); -int comedi_get_n_ranges(unsigned int minor, unsigned int subdevice, - unsigned int chan); -int comedi_do_insn(unsigned int minor, struct comedi_insn *insn); -int comedi_poll(unsigned int minor, unsigned int subdev); - -/* DEPRECATED functions */ -int comedi_get_rangetype(unsigned int minor, unsigned int subdevice, - unsigned int chan); - -/* ALPHA functions */ -unsigned int comedi_get_subdevice_flags(unsigned int minor, unsigned int - subdevice); -int comedi_get_len_chanlist(unsigned int minor, unsigned int subdevice); -int comedi_get_krange(unsigned int minor, unsigned int subdevice, unsigned int - chan, unsigned int range, struct comedi_krange *krange); -unsigned int comedi_get_buf_head_pos(unsigned int minor, unsigned int - subdevice); -int comedi_set_user_int_count(unsigned int minor, unsigned int subdevice, - unsigned int buf_user_count); -int comedi_map(unsigned int minor, unsigned int subdev, void **ptr); -int comedi_unmap(unsigned int minor, unsigned int subdev); - -#endif #endif -- cgit v0.10.2 From e2a0eab0a121a95be60a81911df07cc21e4ee429 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 13:44:56 -0700 Subject: Staging: comedi: move an include file out of comedlib.h The one .c file that needs it can properly include it. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedilib.h b/drivers/staging/comedi/comedilib.h index deb28cb..4f86964 100644 --- a/drivers/staging/comedi/comedilib.h +++ b/drivers/staging/comedi/comedilib.h @@ -24,8 +24,6 @@ #ifndef _LINUX_COMEDILIB_H #define _LINUX_COMEDILIB_H -#include "comedi.h" - /* these functions may not be called at real-time priority */ void *comedi_open(const char *path); diff --git a/drivers/staging/comedi/drivers/comedi_bond.c b/drivers/staging/comedi/drivers/comedi_bond.c index 4e6797a..429ec70 100644 --- a/drivers/staging/comedi/drivers/comedi_bond.c +++ b/drivers/staging/comedi/drivers/comedi_bond.c @@ -87,6 +87,7 @@ Configuration Options: * options that are used with comedi_config. */ +#include "../comedi.h" #include "../comedilib.h" #include "../comedidev.h" #include -- cgit v0.10.2 From 027d53bc2f223544a18f1b760378ca0566d13f2e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 13:51:58 -0700 Subject: Staging: comedi: remove unused functions from comedilib.h Remove the functions that are not used from this file. Now it will be easier to determine what code can be removed from kcomedilib by using sparse. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedilib.h b/drivers/staging/comedi/comedilib.h index 4f86964..0041435 100644 --- a/drivers/staging/comedi/comedilib.h +++ b/drivers/staging/comedi/comedilib.h @@ -24,86 +24,16 @@ #ifndef _LINUX_COMEDILIB_H #define _LINUX_COMEDILIB_H -/* these functions may not be called at real-time priority */ - void *comedi_open(const char *path); int comedi_close(void *dev); - -/* these functions may be called at any priority, but may fail at - real-time priority */ - -int comedi_lock(void *dev, unsigned int subdev); -int comedi_unlock(void *dev, unsigned int subdev); - -/* these functions may be called at any priority, but you must hold - the lock for the subdevice */ - -int comedi_loglevel(int loglevel); -void comedi_perror(const char *s); -char *comedi_strerror(int errnum); -int comedi_errno(void); -int comedi_fileno(void *dev); - -int comedi_cancel(void *dev, unsigned int subdev); -int comedi_register_callback(void *dev, unsigned int subdev, - unsigned int mask, int (*cb) (unsigned int, - void *), void *arg); - -int comedi_command(void *dev, struct comedi_cmd *cmd); -int comedi_command_test(void *dev, struct comedi_cmd *cmd); -int comedi_trigger(void *dev, unsigned int subdev, struct comedi_trig *it); -int __comedi_trigger(void *dev, unsigned int subdev, struct comedi_trig *it); -int comedi_data_write(void *dev, unsigned int subdev, unsigned int chan, - unsigned int range, unsigned int aref, unsigned int data); -int comedi_data_read(void *dev, unsigned int subdev, unsigned int chan, - unsigned int range, unsigned int aref, unsigned int *data); -int comedi_data_read_hint(void *dev, unsigned int subdev, - unsigned int chan, unsigned int range, - unsigned int aref); -int comedi_data_read_delayed(void *dev, unsigned int subdev, unsigned int chan, - unsigned int range, unsigned int aref, - unsigned int *data, unsigned int nano_sec); int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan, unsigned int io); -int comedi_dio_read(void *dev, unsigned int subdev, unsigned int chan, - unsigned int *val); -int comedi_dio_write(void *dev, unsigned int subdev, unsigned int chan, - unsigned int val); int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask, unsigned int *bits); -int comedi_get_n_subdevices(void *dev); -int comedi_get_version_code(void *dev); -const char *comedi_get_driver_name(void *dev); -const char *comedi_get_board_name(void *dev); -int comedi_get_subdevice_type(void *dev, unsigned int subdevice); int comedi_find_subdevice_by_type(void *dev, int type, unsigned int subd); int comedi_get_n_channels(void *dev, unsigned int subdevice); -unsigned int comedi_get_maxdata(void *dev, unsigned int subdevice, unsigned - int chan); -int comedi_get_n_ranges(void *dev, unsigned int subdevice, unsigned int chan); -int comedi_do_insn(void *dev, struct comedi_insn *insn); -int comedi_poll(void *dev, unsigned int subdev); - -/* DEPRECATED functions */ -int comedi_get_rangetype(void *dev, unsigned int subdevice, unsigned int chan); - -/* ALPHA functions */ -unsigned int comedi_get_subdevice_flags(void *dev, unsigned int subdevice); -int comedi_get_len_chanlist(void *dev, unsigned int subdevice); -int comedi_get_krange(void *dev, unsigned int subdevice, unsigned int - chan, unsigned int range, struct comedi_krange *krange); -unsigned int comedi_get_buf_head_pos(void *dev, unsigned int subdevice); -int comedi_set_user_int_count(void *dev, unsigned int subdevice, - unsigned int buf_user_count); -int comedi_map(void *dev, unsigned int subdev, void *ptr); -int comedi_unmap(void *dev, unsigned int subdev); -int comedi_get_buffer_size(void *dev, unsigned int subdev); -int comedi_mark_buffer_read(void *dev, unsigned int subdevice, - unsigned int num_bytes); -int comedi_mark_buffer_written(void *d, unsigned int subdevice, - unsigned int num_bytes); -int comedi_get_buffer_contents(void *dev, unsigned int subdevice); -int comedi_get_buffer_offset(void *dev, unsigned int subdevice); +/* internal to kcomedilb */ +int comedi_do_insn(void *dev, struct comedi_insn *insn); #endif -- cgit v0.10.2 From 29a915ff65fd5cde9c7c16d693b6ae3ecbd4be93 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 13:55:30 -0700 Subject: Staging: comedi: delete kcomedilib/data.c No one is using any of these functions, so remove the file entirely. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/kcomedilib/Makefile b/drivers/staging/comedi/kcomedilib/Makefile index 76de45b..006aa1c 100644 --- a/drivers/staging/comedi/kcomedilib/Makefile +++ b/drivers/staging/comedi/kcomedilib/Makefile @@ -1,7 +1,6 @@ obj-$(CONFIG_COMEDI) += kcomedilib.o kcomedilib-objs := \ - data.o \ dio.o \ kcomedilib_main.o \ get.o diff --git a/drivers/staging/comedi/kcomedilib/data.c b/drivers/staging/comedi/kcomedilib/data.c deleted file mode 100644 index aefc41a..0000000 --- a/drivers/staging/comedi/kcomedilib/data.c +++ /dev/null @@ -1,92 +0,0 @@ -/* - kcomedilib/data.c - implements comedi_data_*() functions - - COMEDI - Linux Control and Measurement Device Interface - Copyright (C) 2000 David A. Schleef - - 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. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include "../comedi.h" -#include "../comedilib.h" -#include "../comedidev.h" - -#include -#include - -int comedi_data_write(void *dev, unsigned int subdev, unsigned int chan, - unsigned int range, unsigned int aref, unsigned int data) -{ - struct comedi_insn insn; - - memset(&insn, 0, sizeof(insn)); - insn.insn = INSN_WRITE; - insn.n = 1; - insn.data = &data; - insn.subdev = subdev; - insn.chanspec = CR_PACK(chan, range, aref); - - return comedi_do_insn(dev, &insn); -} - -int comedi_data_read(void *dev, unsigned int subdev, unsigned int chan, - unsigned int range, unsigned int aref, unsigned int *data) -{ - struct comedi_insn insn; - - memset(&insn, 0, sizeof(insn)); - insn.insn = INSN_READ; - insn.n = 1; - insn.data = data; - insn.subdev = subdev; - insn.chanspec = CR_PACK(chan, range, aref); - - return comedi_do_insn(dev, &insn); -} - -int comedi_data_read_hint(void *dev, unsigned int subdev, - unsigned int chan, unsigned int range, - unsigned int aref) -{ - struct comedi_insn insn; - unsigned int dummy_data; - - memset(&insn, 0, sizeof(insn)); - insn.insn = INSN_READ; - insn.n = 0; - insn.data = &dummy_data; - insn.subdev = subdev; - insn.chanspec = CR_PACK(chan, range, aref); - - return comedi_do_insn(dev, &insn); -} - -int comedi_data_read_delayed(void *dev, unsigned int subdev, - unsigned int chan, unsigned int range, - unsigned int aref, unsigned int *data, - unsigned int nano_sec) -{ - int retval; - - retval = comedi_data_read_hint(dev, subdev, chan, range, aref); - if (retval < 0) - return retval; - - udelay((nano_sec + 999) / 1000); - - return comedi_data_read(dev, subdev, chan, range, aref, data); -} -- cgit v0.10.2 From 8a9e77b66508a1c2598ce1cb765d7ced52f48cf4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Sat, 1 May 2010 13:59:57 -0700 Subject: Staging: comedi: clean up kcomedilib/get.c Remove all of the unused functions, leaving only those that are actually called by in-kernel code. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/kcomedilib/get.c b/drivers/staging/comedi/kcomedilib/get.c index ec072ce..99ab27a 100644 --- a/drivers/staging/comedi/kcomedilib/get.c +++ b/drivers/staging/comedi/kcomedilib/get.c @@ -26,48 +26,6 @@ #include "../comedilib.h" #include "../comedidev.h" -int comedi_get_n_subdevices(void *d) -{ - struct comedi_device *dev = (struct comedi_device *)d; - - return dev->n_subdevices; -} - -int comedi_get_version_code(void *d) -{ - return COMEDI_VERSION_CODE; -} - -const char *comedi_get_driver_name(void *d) -{ - struct comedi_device *dev = (struct comedi_device *)d; - - return dev->driver->driver_name; -} - -const char *comedi_get_board_name(void *d) -{ - struct comedi_device *dev = (struct comedi_device *)d; - - return dev->board_name; -} - -int comedi_get_subdevice_type(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - - return s->type; -} - -unsigned int comedi_get_subdevice_flags(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - - return s->subdev_flags; -} - int comedi_find_subdevice_by_type(void *d, int type, unsigned int subd) { struct comedi_device *dev = (struct comedi_device *)d; @@ -91,203 +49,3 @@ int comedi_get_n_channels(void *d, unsigned int subdevice) return s->n_chan; } EXPORT_SYMBOL(comedi_get_n_channels); - -int comedi_get_len_chanlist(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - - return s->len_chanlist; -} - -unsigned int comedi_get_maxdata(void *d, unsigned int subdevice, - unsigned int chan) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - - if (s->maxdata_list) - return s->maxdata_list[chan]; - - return s->maxdata; -} - -#ifdef KCOMEDILIB_DEPRECATED -int comedi_get_rangetype(void *d, unsigned int subdevice, unsigned int chan) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - int ret; - - if (s->range_table_list) - ret = s->range_table_list[chan]->length; - else - ret = s->range_table->length; - - ret = ret | (dev->minor << 28) | (subdevice << 24) | (chan << 16); - - return ret; -} -#endif - -int comedi_get_n_ranges(void *d, unsigned int subdevice, unsigned int chan) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - int ret; - - if (s->range_table_list) - ret = s->range_table_list[chan]->length; - else - ret = s->range_table->length; - - return ret; -} - -/* - * ALPHA (non-portable) -*/ -int comedi_get_krange(void *d, unsigned int subdevice, unsigned int chan, - unsigned int range, struct comedi_krange *krange) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - const struct comedi_lrange *lr; - - if (s->range_table_list) - lr = s->range_table_list[chan]; - else - lr = s->range_table; - - if (range >= lr->length) - return -EINVAL; - - memcpy(krange, lr->range + range, sizeof(struct comedi_krange)); - - return 0; -} - -/* - * ALPHA (may be renamed) -*/ -unsigned int comedi_get_buf_head_pos(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - struct comedi_async *async; - - async = s->async; - if (async == NULL) - return 0; - - return async->buf_write_count; -} - -int comedi_get_buffer_contents(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - struct comedi_async *async; - unsigned int num_bytes; - - if (subdevice >= dev->n_subdevices) - return -1; - async = s->async; - if (async == NULL) - return 0; - num_bytes = comedi_buf_read_n_available(s->async); - return num_bytes; -} - -/* - * ALPHA -*/ -int comedi_set_user_int_count(void *d, unsigned int subdevice, - unsigned int buf_user_count) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - struct comedi_async *async; - int num_bytes; - - async = s->async; - if (async == NULL) - return -1; - - num_bytes = buf_user_count - async->buf_read_count; - if (num_bytes < 0) - return -1; - comedi_buf_read_alloc(async, num_bytes); - comedi_buf_read_free(async, num_bytes); - - return 0; -} - -int comedi_mark_buffer_read(void *d, unsigned int subdevice, - unsigned int num_bytes) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - struct comedi_async *async; - - if (subdevice >= dev->n_subdevices) - return -1; - async = s->async; - if (async == NULL) - return -1; - - comedi_buf_read_alloc(async, num_bytes); - comedi_buf_read_free(async, num_bytes); - - return 0; -} - -int comedi_mark_buffer_written(void *d, unsigned int subdevice, - unsigned int num_bytes) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - struct comedi_async *async; - int bytes_written; - - if (subdevice >= dev->n_subdevices) - return -1; - async = s->async; - if (async == NULL) - return -1; - bytes_written = comedi_buf_write_alloc(async, num_bytes); - comedi_buf_write_free(async, bytes_written); - if (bytes_written != num_bytes) - return -1; - return 0; -} - -int comedi_get_buffer_size(void *d, unsigned int subdev) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdev; - struct comedi_async *async; - - if (subdev >= dev->n_subdevices) - return -1; - async = s->async; - if (async == NULL) - return 0; - - return async->prealloc_bufsz; -} - -int comedi_get_buffer_offset(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - struct comedi_async *async; - - if (subdevice >= dev->n_subdevices) - return -1; - async = s->async; - if (async == NULL) - return 0; - - return async->buf_read_ptr; -} -- cgit v0.10.2 From 8611a29ab967bc197494db19d31994d1b5a26fdc Mon Sep 17 00:00:00 2001 From: Andres More Date: Sat, 1 May 2010 14:25:00 -0300 Subject: Staging: vt6656: removed VOID/PVOID definitions Warnings about the usage of externs in .c files were not resolved here. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/80211mgr.c b/drivers/staging/vt6656/80211mgr.c index b9dc7b1..f24dc55 100644 --- a/drivers/staging/vt6656/80211mgr.c +++ b/drivers/staging/vt6656/80211mgr.c @@ -89,7 +89,7 @@ static int msglevel =MSG_LEVEL_INFO; * -*/ -VOID +void vMgrEncodeBeacon( PWLAN_FR_BEACON pFrame ) @@ -121,7 +121,7 @@ vMgrEncodeBeacon( -*/ -VOID +void vMgrDecodeBeacon( PWLAN_FR_BEACON pFrame ) @@ -242,7 +242,7 @@ vMgrDecodeBeacon( -*/ -VOID +void vMgrEncodeIBSSATIM( PWLAN_FR_IBSSATIM pFrame ) @@ -265,7 +265,7 @@ vMgrEncodeIBSSATIM( * -*/ -VOID +void vMgrDecodeIBSSATIM( PWLAN_FR_IBSSATIM pFrame ) @@ -287,7 +287,7 @@ vMgrDecodeIBSSATIM( * -*/ -VOID +void vMgrEncodeDisassociation( PWLAN_FR_DISASSOC pFrame ) @@ -315,7 +315,7 @@ vMgrEncodeDisassociation( * -*/ -VOID +void vMgrDecodeDisassociation( PWLAN_FR_DISASSOC pFrame ) @@ -341,7 +341,7 @@ vMgrDecodeDisassociation( -*/ -VOID +void vMgrEncodeAssocRequest( PWLAN_FR_ASSOCREQ pFrame ) @@ -368,7 +368,7 @@ vMgrEncodeAssocRequest( * -*/ -VOID +void vMgrDecodeAssocRequest( PWLAN_FR_ASSOCREQ pFrame ) @@ -434,7 +434,7 @@ vMgrDecodeAssocRequest( * -*/ -VOID +void vMgrEncodeAssocResponse( PWLAN_FR_ASSOCRESP pFrame ) @@ -466,7 +466,7 @@ vMgrEncodeAssocResponse( * -*/ -VOID +void vMgrDecodeAssocResponse( PWLAN_FR_ASSOCRESP pFrame ) @@ -512,7 +512,7 @@ vMgrDecodeAssocResponse( * -*/ -VOID +void vMgrEncodeReassocRequest( PWLAN_FR_REASSOCREQ pFrame ) @@ -544,7 +544,7 @@ vMgrEncodeReassocRequest( -*/ -VOID +void vMgrDecodeReassocRequest( PWLAN_FR_REASSOCREQ pFrame ) @@ -616,7 +616,7 @@ vMgrDecodeReassocRequest( -*/ -VOID +void vMgrEncodeProbeRequest( PWLAN_FR_PROBEREQ pFrame ) @@ -637,7 +637,7 @@ vMgrEncodeProbeRequest( * -*/ -VOID +void vMgrDecodeProbeRequest( PWLAN_FR_PROBEREQ pFrame ) @@ -690,7 +690,7 @@ vMgrDecodeProbeRequest( -*/ -VOID +void vMgrEncodeProbeResponse( PWLAN_FR_PROBERESP pFrame ) @@ -724,7 +724,7 @@ vMgrEncodeProbeResponse( * -*/ -VOID +void vMgrDecodeProbeResponse( PWLAN_FR_PROBERESP pFrame ) @@ -838,7 +838,7 @@ vMgrDecodeProbeResponse( * -*/ -VOID +void vMgrEncodeAuthen( PWLAN_FR_AUTHEN pFrame ) @@ -869,7 +869,7 @@ vMgrEncodeAuthen( * -*/ -VOID +void vMgrDecodeAuthen( PWLAN_FR_AUTHEN pFrame ) @@ -909,7 +909,7 @@ vMgrDecodeAuthen( * -*/ -VOID +void vMgrEncodeDeauthen( PWLAN_FR_DEAUTHEN pFrame ) @@ -936,7 +936,7 @@ vMgrEncodeDeauthen( * -*/ -VOID +void vMgrDecodeDeauthen( PWLAN_FR_DEAUTHEN pFrame ) @@ -962,7 +962,7 @@ vMgrDecodeDeauthen( * -*/ -VOID +void vMgrEncodeReassocResponse( PWLAN_FR_REASSOCRESP pFrame ) @@ -995,7 +995,7 @@ vMgrEncodeReassocResponse( -*/ -VOID +void vMgrDecodeReassocResponse( PWLAN_FR_REASSOCRESP pFrame ) diff --git a/drivers/staging/vt6656/80211mgr.h b/drivers/staging/vt6656/80211mgr.h index f7160cd..50982e9 100644 --- a/drivers/staging/vt6656/80211mgr.h +++ b/drivers/staging/vt6656/80211mgr.h @@ -748,112 +748,112 @@ typedef struct tagWLAN_FR_DEAUTHEN { } WLAN_FR_DEAUTHEN, *PWLAN_FR_DEAUTHEN; /*--------------------- Export Functions --------------------------*/ -VOID +void vMgrEncodeBeacon( PWLAN_FR_BEACON pFrame ); -VOID +void vMgrDecodeBeacon( PWLAN_FR_BEACON pFrame ); -VOID +void vMgrEncodeIBSSATIM( PWLAN_FR_IBSSATIM pFrame ); -VOID +void vMgrDecodeIBSSATIM( PWLAN_FR_IBSSATIM pFrame ); -VOID +void vMgrEncodeDisassociation( PWLAN_FR_DISASSOC pFrame ); -VOID +void vMgrDecodeDisassociation( PWLAN_FR_DISASSOC pFrame ); -VOID +void vMgrEncodeAssocRequest( PWLAN_FR_ASSOCREQ pFrame ); -VOID +void vMgrDecodeAssocRequest( PWLAN_FR_ASSOCREQ pFrame ); -VOID +void vMgrEncodeAssocResponse( PWLAN_FR_ASSOCRESP pFrame ); -VOID +void vMgrDecodeAssocResponse( PWLAN_FR_ASSOCRESP pFrame ); -VOID +void vMgrEncodeReassocRequest( PWLAN_FR_REASSOCREQ pFrame ); -VOID +void vMgrDecodeReassocRequest( PWLAN_FR_REASSOCREQ pFrame ); -VOID +void vMgrEncodeProbeRequest( PWLAN_FR_PROBEREQ pFrame ); -VOID +void vMgrDecodeProbeRequest( PWLAN_FR_PROBEREQ pFrame ); -VOID +void vMgrEncodeProbeResponse( PWLAN_FR_PROBERESP pFrame ); -VOID +void vMgrDecodeProbeResponse( PWLAN_FR_PROBERESP pFrame ); -VOID +void vMgrEncodeAuthen( PWLAN_FR_AUTHEN pFrame ); -VOID +void vMgrDecodeAuthen( PWLAN_FR_AUTHEN pFrame ); -VOID +void vMgrEncodeDeauthen( PWLAN_FR_DEAUTHEN pFrame ); -VOID +void vMgrDecodeDeauthen( PWLAN_FR_DEAUTHEN pFrame ); -VOID +void vMgrEncodeReassocResponse( PWLAN_FR_REASSOCRESP pFrame ); -VOID +void vMgrDecodeReassocResponse( PWLAN_FR_REASSOCRESP pFrame ); diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 9063249..a52a2d8 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -756,7 +756,7 @@ BBuGetFrameTime ( * Return Value: none * */ -VOID +void BBvCaculateParameter ( PSDevice pDevice, UINT cbFrameLength, @@ -929,7 +929,7 @@ BBvCaculateParameter ( * Return Value: none * */ -VOID +void BBvSetAntennaMode (PSDevice pDevice, BYTE byAntennaMode) { //{{ RobertYu: 20041124, ABG Mode, VC1/VC2 define, make the ANT_A, ANT_B inverted @@ -1274,7 +1274,7 @@ void BBvLoopbackOff (PSDevice pDevice) * Return Value: none * */ -VOID +void BBvSetShortSlotTime (PSDevice pDevice) { BYTE byBBVGA=0; @@ -1295,7 +1295,7 @@ BBvSetShortSlotTime (PSDevice pDevice) } -VOID BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData) +void BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData) { ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0xE7, byData); @@ -1324,7 +1324,7 @@ VOID BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData) * Return Value: none * */ -VOID +void BBvSoftwareReset (PSDevice pDevice) { ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x50, 0x40); @@ -1345,14 +1345,14 @@ BBvSoftwareReset (PSDevice pDevice) * Return Value: none * */ -VOID +void BBvSetDeepSleep (PSDevice pDevice) { ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0c, 0x17);//CR12 ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0D, 0xB9);//CR13 } -VOID +void BBvExitDeepSleep (PSDevice pDevice) { ControlvWriteByte(pDevice, MESSAGE_REQUEST_BBREG, 0x0C, 0x00);//CR12 @@ -1445,7 +1445,7 @@ s_vClearSQ3Value (PSDevice pDevice) * */ -VOID +void BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) { @@ -1576,7 +1576,7 @@ BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) * -*/ -VOID +void TimerSQ3CallBack ( HANDLE hDeviceContext ) @@ -1618,7 +1618,7 @@ TimerSQ3CallBack ( * -*/ -VOID +void TimerSQ3Tmax3CallBack ( HANDLE hDeviceContext ) @@ -1650,7 +1650,7 @@ TimerSQ3Tmax3CallBack ( return; } -VOID +void BBvUpdatePreEDThreshold( PSDevice pDevice, BOOL bScanning) diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index 10eea90..fbc2847 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -104,7 +104,7 @@ BBuGetFrameTime( WORD wRate ); -VOID +void BBvCaculateParameter ( PSDevice pDevice, UINT cbFrameLength, @@ -117,28 +117,28 @@ BBvCaculateParameter ( // timer for antenna diversity -VOID +void TimerSQ3CallBack ( HANDLE hDeviceContext ); -VOID +void TimerSQ3Tmax3CallBack ( HANDLE hDeviceContext ); -VOID BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3); -void BBvLoopbackOn (PSDevice pDevice); -void BBvLoopbackOff (PSDevice pDevice); -void BBvSoftwareReset (PSDevice pDevice); +void BBvAntennaDiversity(PSDevice pDevice, BYTE byRxRate, BYTE bySQ3); +void BBvLoopbackOn(PSDevice pDevice); +void BBvLoopbackOff(PSDevice pDevice); +void BBvSoftwareReset(PSDevice pDevice); void BBvSetShortSlotTime(PSDevice pDevice); -VOID BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData); +void BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData); void BBvSetAntennaMode(PSDevice pDevice, BYTE byAntennaMode); BOOL BBbVT3184Init (PSDevice pDevice); -VOID BBvSetDeepSleep (PSDevice pDevice); -VOID BBvExitDeepSleep (PSDevice pDevice); -VOID BBvUpdatePreEDThreshold( +void BBvSetDeepSleep(PSDevice pDevice); +void BBvExitDeepSleep(PSDevice pDevice); +void BBvUpdatePreEDThreshold( PSDevice pDevice, BOOL bScanning ); diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index fa1ca79..61841b4 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -91,16 +91,16 @@ const WORD awHWRetry1[5][5] = { /*--------------------- Static Functions --------------------------*/ -VOID s_vCheckSensitivity( +void s_vCheckSensitivity( HANDLE hDeviceContext ); -VOID s_vCheckPreEDThreshold( +void s_vCheckPreEDThreshold( HANDLE hDeviceContext ); #ifdef Calcu_LinkQual -VOID s_uCalculateLinkQual( +void s_uCalculateLinkQual( HANDLE hDeviceContext ); #endif @@ -296,7 +296,7 @@ pDevice->bSameBSSMaxNum = jj; -*/ -VOID +void BSSvClearBSSList( HANDLE hDeviceContext, BOOL bKeepCurrBSSID @@ -804,7 +804,7 @@ BSSbIsSTAInNodeDB( * None * -*/ -VOID +void BSSvCreateOneNode( HANDLE hDeviceContext, OUT PUINT puNodeIndex @@ -869,7 +869,7 @@ BSSvCreateOneNode( * None * -*/ -VOID +void BSSvRemoveOneNode( HANDLE hDeviceContext, UINT uNodeIndex @@ -902,7 +902,7 @@ BSSvRemoveOneNode( * -*/ -VOID +void BSSvUpdateAPNode( HANDLE hDeviceContext, PWORD pwCapInfo, @@ -926,7 +926,7 @@ BSSvUpdateAPNode( pMgmt->abyCurrExtSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)pExtSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, uRateLen); - RATEvParseMaxRate((PVOID) pDevice, + RATEvParseMaxRate((void *) pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, TRUE, @@ -962,7 +962,7 @@ BSSvUpdateAPNode( -*/ -VOID +void BSSvAddMulticastNode( HANDLE hDeviceContext ) @@ -976,7 +976,7 @@ BSSvAddMulticastNode( pMgmt->sNodeDBTable[0].bActive = TRUE; pMgmt->sNodeDBTable[0].bPSEnable = FALSE; skb_queue_head_init(&pMgmt->sNodeDBTable[0].sTxPSQueue); - RATEvParseMaxRate((PVOID) pDevice, + RATEvParseMaxRate((void *) pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, TRUE, @@ -1009,7 +1009,7 @@ BSSvAddMulticastNode( -*/ -VOID +void BSSvSecondCallBack( HANDLE hDeviceContext ) @@ -1131,12 +1131,14 @@ if((pMgmt->eCurrState!=WMAC_STATE_ASSOC) && */ if (ii > 0) { // ii = 0 for multicast node (AP & Adhoc) - RATEvTxRateFallBack((PVOID)pDevice, &(pMgmt->sNodeDBTable[ii])); + RATEvTxRateFallBack((void *)pDevice, + &(pMgmt->sNodeDBTable[ii])); } else { // ii = 0 reserved for unicast AP node (Infra STA) - if (pMgmt->eCurrMode == WMAC_MODE_ESS_STA) - RATEvTxRateFallBack((PVOID)pDevice, &(pMgmt->sNodeDBTable[ii])); + if (pMgmt->eCurrMode == WMAC_MODE_ESS_STA) + RATEvTxRateFallBack((void *)pDevice, + &(pMgmt->sNodeDBTable[ii])); } } @@ -1177,14 +1179,14 @@ if((pMgmt->eCurrState!=WMAC_STATE_ASSOC) && if (pDevice->bShortSlotTime) { pDevice->bShortSlotTime = FALSE; BBvSetShortSlotTime(pDevice); - vUpdateIFS((PVOID)pDevice); + vUpdateIFS((void *)pDevice); } } else { if (!pDevice->bShortSlotTime) { pDevice->bShortSlotTime = TRUE; BBvSetShortSlotTime(pDevice); - vUpdateIFS((PVOID)pDevice); + vUpdateIFS((void *)pDevice); } } @@ -1395,7 +1397,7 @@ else { -VOID +void BSSvUpdateNodeTxCounter( HANDLE hDeviceContext, PSStatCounter pStatistic, @@ -1564,7 +1566,7 @@ BSSvUpdateNodeTxCounter( -*/ -VOID +void BSSvClearNodeDBTable( HANDLE hDeviceContext, UINT uStartIndex @@ -1593,7 +1595,7 @@ BSSvClearNodeDBTable( }; -VOID s_vCheckSensitivity( +void s_vCheckSensitivity( HANDLE hDeviceContext ) { @@ -1637,7 +1639,7 @@ VOID s_vCheckSensitivity( } #ifdef Calcu_LinkQual -VOID s_uCalculateLinkQual( +void s_uCalculateLinkQual( HANDLE hDeviceContext ) { @@ -1685,7 +1687,7 @@ else } #endif -VOID +void BSSvClearAnyBSSJoinRecord ( HANDLE hDeviceContext ) @@ -1700,7 +1702,7 @@ BSSvClearAnyBSSJoinRecord ( return; } -VOID s_vCheckPreEDThreshold( +void s_vCheckPreEDThreshold( HANDLE hDeviceContext ) { diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h index eec6cea..343bfac 100644 --- a/drivers/staging/vt6656/bssdb.h +++ b/drivers/staging/vt6656/bssdb.h @@ -246,7 +246,7 @@ BSSpAddrIsInBSSList( PWLAN_IE_SSID pSSID ); -VOID +void BSSvClearBSSList( HANDLE hDeviceContext, BOOL bKeepCurrBSSID @@ -304,13 +304,13 @@ BSSbIsSTAInNodeDB( OUT PUINT puNodeIndex ); -VOID +void BSSvCreateOneNode( HANDLE hDeviceContext, OUT PUINT puNodeIndex ); -VOID +void BSSvUpdateAPNode( HANDLE hDeviceContext, PWORD pwCapInfo, @@ -319,13 +319,13 @@ BSSvUpdateAPNode( ); -VOID +void BSSvSecondCallBack( HANDLE hDeviceContext ); -VOID +void BSSvUpdateNodeTxCounter( HANDLE hDeviceContext, PSStatCounter pStatistic, @@ -333,25 +333,25 @@ BSSvUpdateNodeTxCounter( BYTE byPktNO ); -VOID +void BSSvRemoveOneNode( HANDLE hDeviceContext, UINT uNodeIndex ); -VOID +void BSSvAddMulticastNode( HANDLE hDeviceContext ); -VOID +void BSSvClearNodeDBTable( HANDLE hDeviceContext, UINT uStartIndex ); -VOID +void BSSvClearAnyBSSJoinRecord( HANDLE hDeviceContext ); diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 4ad1e94..c7562a0 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -95,7 +95,7 @@ const WORD cwRXBCNTSFOff[MAX_RATE] = * Return Value: TRUE if succeeded; FALSE if failed. * */ -BOOL CARDbSetMediaChannel (PVOID pDeviceHandler, UINT uConnectionChannel) +BOOL CARDbSetMediaChannel(void *pDeviceHandler, UINT uConnectionChannel) { PSDevice pDevice = (PSDevice) pDeviceHandler; BOOL bResult = TRUE; @@ -156,8 +156,7 @@ BOOL bResult = TRUE; * Return Value: response Control frame rate * */ -static -WORD swGetCCKControlRate(PVOID pDeviceHandler, WORD wRateIdx) +static WORD swGetCCKControlRate(void *pDeviceHandler, WORD wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; UINT ui = (UINT)wRateIdx; @@ -183,8 +182,7 @@ WORD swGetCCKControlRate(PVOID pDeviceHandler, WORD wRateIdx) * Return Value: response Control frame rate * */ -static -WORD swGetOFDMControlRate (PVOID pDeviceHandler, WORD wRateIdx) +static WORD swGetOFDMControlRate(void *pDeviceHandler, WORD wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; UINT ui = (UINT)wRateIdx; @@ -222,7 +220,7 @@ WORD swGetOFDMControlRate (PVOID pDeviceHandler, WORD wRateIdx) * Return Value: none * */ -VOID +void CARDvCaculateOFDMRParameter ( WORD wRate, BYTE byBBType, @@ -334,7 +332,7 @@ CARDvCaculateOFDMRParameter ( * Return Value: None. * */ -void CARDvSetRSPINF (PVOID pDeviceHandler, BYTE byBBType) +void CARDvSetRSPINF(void *pDeviceHandler, BYTE byBBType) { PSDevice pDevice = (PSDevice) pDeviceHandler; BYTE abyServ[4] = {0,0,0,0}; // For CCK @@ -486,7 +484,7 @@ void CARDvSetRSPINF (PVOID pDeviceHandler, BYTE byBBType) * Return Value: None. * */ -void vUpdateIFS (PVOID pDeviceHandler) +void vUpdateIFS(void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; //Set SIFS, DIFS, EIFS, SlotTime, CwMin @@ -571,7 +569,7 @@ void vUpdateIFS (PVOID pDeviceHandler) &byMaxMin); } -void CARDvUpdateBasicTopRate (PVOID pDeviceHandler) +void CARDvUpdateBasicTopRate(void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; BYTE byTopOFDM = RATE_24M, byTopCCK = RATE_1M; @@ -610,7 +608,7 @@ BYTE ii; * Return Value: TRUE if succeeded; FALSE if failed. * */ -BOOL CARDbAddBasicRate (PVOID pDeviceHandler, WORD wRateIdx) +BOOL CARDbAddBasicRate(void *pDeviceHandler, WORD wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; WORD wRate = (WORD)(1<byTopCCKBasicRate and pDevice->byTopOFDMBasicRate - CARDbAddBasicRate((PVOID)pDevice, RATEwGetRateIdx(byRate)); + CARDbAddBasicRate((void *)pDevice, RATEwGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", RATEwGetRateIdx(byRate)); } byRate = (BYTE)(pItemRates->abyRates[ii]&0x7F); @@ -259,7 +251,7 @@ UINT uRateLen; // select highest basic rate if (WLAN_MGMT_IS_BASICRATE(pItemExtRates->abyRates[ii])) { // Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate - CARDbAddBasicRate((PVOID)pDevice, RATEwGetRateIdx(byRate)); + CARDbAddBasicRate((void *)pDevice, RATEwGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", RATEwGetRateIdx(byRate)); } byRate = (BYTE)(pItemExtRates->abyRates[ii]&0x7F); @@ -272,7 +264,8 @@ UINT uRateLen; } } //if(pItemExtRates != NULL) - if ((pDevice->byPacketType == PK_TYPE_11GB) && CARDbIsOFDMinBasicRate((PVOID)pDevice)) { + if ((pDevice->byPacketType == PK_TYPE_11GB) + && CARDbIsOFDMinBasicRate((void *)pDevice)) { pDevice->byPacketType = PK_TYPE_11GA; } @@ -284,7 +277,7 @@ UINT uRateLen; else *pwMaxBasicRate = pDevice->byTopOFDMBasicRate; if (wOldBasicRate != pDevice->wBasicRate) - CARDvSetRSPINF((PVOID)pDevice, pDevice->byBBType); + CARDvSetRSPINF((void *)pDevice, pDevice->byBBType); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Exit ParseMaxRate\n"); } @@ -308,9 +301,9 @@ UINT uRateLen; #define AUTORATE_TXCNT_THRESHOLD 20 #define AUTORATE_INC_THRESHOLD 30 -VOID -RATEvTxRateFallBack ( - PVOID pDeviceHandler, +void +RATEvTxRateFallBack( + void *pDeviceHandler, PKnownNodeDB psNodeDBTable ) { diff --git a/drivers/staging/vt6656/datarate.h b/drivers/staging/vt6656/datarate.h index 5024f71..da51854 100644 --- a/drivers/staging/vt6656/datarate.h +++ b/drivers/staging/vt6656/datarate.h @@ -69,9 +69,9 @@ -VOID +void RATEvParseMaxRate( - PVOID pDeviceHandler, + void *pDeviceHandler, PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pItemExtRates, BOOL bUpdateBasicRate, @@ -82,9 +82,9 @@ RATEvParseMaxRate( OUT PBYTE pbyTopOFDMRate ); -VOID +void RATEvTxRateFallBack( - PVOID pDeviceHandler, + void *pDeviceHandler, PKnownNodeDB psNodeDBTable ); diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 29bb597..6d255ca 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -209,9 +209,9 @@ typedef enum _CONTEXT_TYPE { // RCB (Receive Control Block) typedef struct _RCB { - PVOID Next; + void *Next; LONG Ref; - PVOID pDevice; + void *pDevice; struct urb *pUrb; SRxMgmtPacket sMngPacket; struct sk_buff* skb; @@ -222,13 +222,13 @@ typedef struct _RCB // used to track bulk out irps typedef struct _USB_SEND_CONTEXT { - PVOID pDevice; + void *pDevice; struct sk_buff *pPacket; struct urb *pUrb; UINT uBufLen; CONTEXT_TYPE Type; SEthernetHeader sEthHeader; - PVOID Next; + void *Next; BOOL bBoolInUse; UCHAR Data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS]; } USB_SEND_CONTEXT, *PUSB_SEND_CONTEXT; diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 957b762..75be970 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -77,7 +77,7 @@ const BYTE acbyRxRate[MAX_RATE] = static BYTE s_byGetRateIdx(BYTE byRate); static -VOID +void s_vGetDASA( PBYTE pbyRxBufferAddr, OUT PUINT pcbHeaderSize, @@ -85,7 +85,7 @@ s_vGetDASA( ); static -VOID +void s_vProcessRxMACHeader ( PSDevice pDevice, PBYTE pbyRxBufferAddr, @@ -160,7 +160,7 @@ static BOOL s_bHostWepRxEncryption( * -*/ static -VOID +void s_vProcessRxMACHeader ( PSDevice pDevice, PBYTE pbyRxBufferAddr, @@ -259,7 +259,7 @@ static BYTE s_byGetRateIdx(BYTE byRate) static -VOID +void s_vGetDASA ( PBYTE pbyRxBufferAddr, OUT PUINT pcbHeaderSize, @@ -1513,10 +1513,7 @@ static BOOL s_bAPModeRxData ( -VOID -RXvWorkItem( - PVOID Context - ) +void RXvWorkItem(void *Context) { PSDevice pDevice = (PSDevice) Context; NTSTATUS ntStatus; @@ -1539,7 +1536,7 @@ RXvWorkItem( } -VOID +void RXvFreeRCB( PRCB pRCB, BOOL bReAllocSkb @@ -1579,10 +1576,7 @@ RXvFreeRCB( } -VOID -RXvMngWorkItem( - PVOID Context - ) +void RXvMngWorkItem(void *Context) { PSDevice pDevice = (PSDevice) Context; PRCB pRCB=NULL; diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h index 8e6dcee..457db77 100644 --- a/drivers/staging/vt6656/dpc.h +++ b/drivers/staging/vt6656/dpc.h @@ -41,17 +41,11 @@ /*--------------------- Export Functions --------------------------*/ -VOID -RXvWorkItem( - PVOID Context - ); +void RXvWorkItem(void *Context); -VOID -RXvMngWorkItem( - PVOID Context - ); +void RXvMngWorkItem(void *Context); -VOID +void RXvFreeRCB( PRCB pRCB, BOOL bReAllocSkb diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index a47eeb0..2ba2089 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -79,8 +79,7 @@ static int msglevel = MSG_LEVEL_INFO; * if we've gotten no data * -*/ -VOID -INTvWorkItem(PVOID Context) +void INTvWorkItem(void *Context) { PSDevice pDevice = (PSDevice) Context; NTSTATUS ntStatus; diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h index c3476cf..20c96f5 100644 --- a/drivers/staging/vt6656/int.h +++ b/drivers/staging/vt6656/int.h @@ -67,10 +67,7 @@ SINTData, *PSINTData; /*--------------------- Export Functions --------------------------*/ -VOID -INTvWorkItem( - PVOID Context - ); +void INTvWorkItem(void *Context); NTSTATUS INTnsProcessData( diff --git a/drivers/staging/vt6656/ioctl.h b/drivers/staging/vt6656/ioctl.h index d3f49d4..46eb699 100644 --- a/drivers/staging/vt6656/ioctl.h +++ b/drivers/staging/vt6656/ioctl.h @@ -43,7 +43,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq); /* -VOID vConfigWEPKey ( +void vConfigWEPKey ( PSDevice pDevice, DWORD dwKeyIndex, PBYTE pbyKey, diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 6cdc85e..338ec08 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -60,8 +60,8 @@ static int msglevel =MSG_LEVEL_INFO; /*--------------------- Static Variables --------------------------*/ /*--------------------- Static Functions --------------------------*/ -static VOID -s_vCheckKeyTableValid (PVOID pDeviceHandler, PSKeyManagement pTable) +static void s_vCheckKeyTableValid(void *pDeviceHandler, + PSKeyManagement pTable) { PSDevice pDevice = (PSDevice) pDeviceHandler; int i; @@ -112,7 +112,7 @@ s_vCheckKeyTableValid (PVOID pDeviceHandler, PSKeyManagement pTable) * Return Value: none * */ -VOID KeyvInitTable(PVOID pDeviceHandler, PSKeyManagement pTable) +void KeyvInitTable(void *pDeviceHandler, PSKeyManagement pTable) { PSDevice pDevice = (PSDevice) pDeviceHandler; int i; @@ -123,10 +123,12 @@ VOID KeyvInitTable(PVOID pDeviceHandler, PSKeyManagement pTable) for (i=0;iKeyTable[i].bInUse = FALSE; pTable->KeyTable[i].PairwiseKey.bKeyValid = FALSE; - pTable->KeyTable[i].PairwiseKey.pvKeyTable = (PVOID)&pTable->KeyTable[i]; + pTable->KeyTable[i].PairwiseKey.pvKeyTable = + (void *)&pTable->KeyTable[i]; for (jj=0; jj < MAX_GROUP_KEY; jj++) { pTable->KeyTable[i].GroupKey[jj].bKeyValid = FALSE; - pTable->KeyTable[i].GroupKey[jj].pvKeyTable = (PVOID) &(pTable->KeyTable[i]); + pTable->KeyTable[i].GroupKey[jj].pvKeyTable = + (void *) &(pTable->KeyTable[i]); } pTable->KeyTable[i].wKeyCtl = 0; pTable->KeyTable[i].dwGTKeyIndex = 0; @@ -220,8 +222,8 @@ BOOL KeybGetKey ( * Return Value: TRUE if success otherwise FALSE * */ -BOOL KeybSetKey ( - PVOID pDeviceHandler, +BOOL KeybSetKey( + void *pDeviceHandler, PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex, @@ -393,8 +395,8 @@ BOOL KeybSetKey ( * Return Value: TRUE if success otherwise FALSE * */ -BOOL KeybRemoveKey ( - PVOID pDeviceHandler, +BOOL KeybRemoveKey( + void *pDeviceHandler, PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex @@ -474,8 +476,8 @@ BOOL KeybRemoveKey ( * Return Value: TRUE if success otherwise FALSE * */ -BOOL KeybRemoveAllKey ( - PVOID pDeviceHandler, +BOOL KeybRemoveAllKey( + void *pDeviceHandler, PSKeyManagement pTable, PBYTE pbyBSSID ) @@ -510,8 +512,8 @@ BOOL KeybRemoveAllKey ( * Return Value: TRUE if success otherwise FALSE * */ -VOID KeyvRemoveWEPKey ( - PVOID pDeviceHandler, +void KeyvRemoveWEPKey( + void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex ) @@ -533,8 +535,8 @@ VOID KeyvRemoveWEPKey ( return; } -VOID KeyvRemoveAllWEPKey ( - PVOID pDeviceHandler, +void KeyvRemoveAllWEPKey( + void *pDeviceHandler, PSKeyManagement pTable ) { @@ -675,8 +677,8 @@ BOOL KeybCheckPairewiseKey ( * Return Value: TRUE if success otherwise FALSE * */ -BOOL KeybSetDefaultKey ( - PVOID pDeviceHandler, +BOOL KeybSetDefaultKey( + void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex, ULONG uKeyLength, @@ -783,8 +785,8 @@ BOOL KeybSetDefaultKey ( * Return Value: TRUE if success otherwise FALSE * */ -BOOL KeybSetAllGroupKey ( - PVOID pDeviceHandler, +BOOL KeybSetAllGroupKey( + void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex, ULONG uKeyLength, diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index 11236e8..7aec57b 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -66,7 +66,7 @@ typedef struct tagSKeyItem BYTE byCipherSuite; BYTE byReserved0; DWORD dwKeyIndex; - PVOID pvKeyTable; + void *pvKeyTable; } SKeyItem, *PSKeyItem; //64 typedef struct tagSKeyTable @@ -97,7 +97,7 @@ typedef struct tagSKeyManagement /*--------------------- Export Functions --------------------------*/ -VOID KeyvInitTable(PVOID pDeviceHandler, PSKeyManagement pTable); +void KeyvInitTable(void *pDeviceHandler, PSKeyManagement pTable); BOOL KeybGetKey( PSKeyManagement pTable, @@ -107,7 +107,7 @@ BOOL KeybGetKey( ); BOOL KeybSetKey( - PVOID pDeviceHandler, + void *pDeviceHandler, PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex, @@ -118,26 +118,26 @@ BOOL KeybSetKey( ); BOOL KeybRemoveKey( - PVOID pDeviceHandler, + void *pDeviceHandler, PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex ); -BOOL KeybRemoveAllKey ( - PVOID pDeviceHandler, +BOOL KeybRemoveAllKey( + void *pDeviceHandler, PSKeyManagement pTable, PBYTE pbyBSSID ); -VOID KeyvRemoveWEPKey( - PVOID pDeviceHandler, +void KeyvRemoveWEPKey( + void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex ); -VOID KeyvRemoveAllWEPKey( - PVOID pDeviceHandler, +void KeyvRemoveAllWEPKey( + void *pDeviceHandler, PSKeyManagement pTable ); @@ -153,8 +153,8 @@ BOOL KeybCheckPairewiseKey( OUT PSKeyItem *pKey ); -BOOL KeybSetDefaultKey ( - PVOID pDeviceHandler, +BOOL KeybSetDefaultKey( + void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex, ULONG uKeyLength, @@ -163,8 +163,8 @@ BOOL KeybSetDefaultKey ( BYTE byKeyDecMode ); -BOOL KeybSetAllGroupKey ( - PVOID pDeviceHandler, +BOOL KeybSetAllGroupKey( + void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex, ULONG uKeyLength, diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 55a7986..71f0966 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -110,7 +110,7 @@ void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx) * Return Value: none * */ -VOID MACvWriteMultiAddr (PSDevice pDevice, UINT uByteIdx, BYTE byData) +void MACvWriteMultiAddr(PSDevice pDevice, UINT uByteIdx, BYTE byData) { BYTE byData1; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index fe99e3d..1a7c2f5 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -421,7 +421,7 @@ /*--------------------- Export Functions --------------------------*/ void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx); -VOID MACvWriteMultiAddr (PSDevice pDevice, UINT uByteIdx, BYTE byData); +void MACvWriteMultiAddr(PSDevice pDevice, UINT uByteIdx, BYTE byData); BOOL MACbShutdown(PSDevice pDevice);; void MACvSetBBType(PSDevice pDevice,BYTE byType); void MACvSetMISCFifo (PSDevice pDevice, WORD wOffset, DWORD dwData); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index ebd7a1e..2fcaf70 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -331,8 +331,8 @@ device_set_options(PSDevice pDevice) { } -static VOID device_init_diversity_timer(PSDevice pDevice) { - +static void device_init_diversity_timer(PSDevice pDevice) +{ init_timer(&pDevice->TimerSQ3Tmax1); pDevice->TimerSQ3Tmax1.data = (ULONG)pDevice; pDevice->TimerSQ3Tmax1.function = (TimerFunction)TimerSQ3CallBack; @@ -791,7 +791,7 @@ vt6656_probe(struct usb_interface *intf, const struct usb_device_id *id) spin_lock_init(&pDevice->lock); pDevice->tx_80211 = device_dma0_tx_80211; - pDevice->sMgmtObj.pAdapter = (PVOID)pDevice; + pDevice->sMgmtObj.pAdapter = (void *)pDevice; netdev->netdev_ops = &device_netdev_ops; @@ -843,7 +843,8 @@ err_nomem: } -static VOID device_free_tx_bufs(PSDevice pDevice) { +static void device_free_tx_bufs(PSDevice pDevice) +{ PUSB_SEND_CONTEXT pTxContext; int ii; @@ -862,7 +863,8 @@ static VOID device_free_tx_bufs(PSDevice pDevice) { } -static VOID device_free_rx_bufs(PSDevice pDevice) { +static void device_free_rx_bufs(PSDevice pDevice) +{ PRCB pRCB; int ii; @@ -894,8 +896,8 @@ static void usb_device_reset(PSDevice pDevice) return ; } -static VOID device_free_int_bufs(PSDevice pDevice) { - +static void device_free_int_bufs(PSDevice pDevice) +{ if (pDevice->intBuf.pDataBuf != NULL) kfree(pDevice->intBuf.pDataBuf); return; @@ -917,7 +919,7 @@ static BOOL device_alloc_bufs(PSDevice pDevice) { goto free_tx; } pDevice->apTD[ii] = pTxContext; - pTxContext->pDevice = (PVOID) pDevice; + pTxContext->pDevice = (void *) pDevice; //allocate URBs pTxContext->pUrb = usb_alloc_urb(0, GFP_ATOMIC); if (pTxContext->pUrb == NULL) { @@ -946,7 +948,7 @@ static BOOL device_alloc_bufs(PSDevice pDevice) { for (ii = 0; ii < pDevice->cbRD; ii++) { pDevice->apRCB[ii] = pRCB; - pRCB->pDevice = (PVOID) pDevice; + pRCB->pDevice = (void *) pDevice; //allocate URBs pRCB->pUrb = usb_alloc_urb(0, GFP_ATOMIC); diff --git a/drivers/staging/vt6656/michael.c b/drivers/staging/vt6656/michael.c index d4c0820..d45333f 100644 --- a/drivers/staging/vt6656/michael.c +++ b/drivers/staging/vt6656/michael.c @@ -50,14 +50,14 @@ /* * static DWORD s_dwGetUINT32(BYTE * p); Get DWORD from * 4 bytes LSByte first - * static VOID s_vPutUINT32(BYTE* p, DWORD val); Put DWORD into + * static void s_vPutUINT32(BYTE* p, DWORD val); Put DWORD into * 4 bytes LSByte first */ -static VOID s_vClear(void); /* Clear the internal message, +static void s_vClear(void); /* Clear the internal message, * resets the object to the * state just after construction. */ -static VOID s_vSetKey(DWORD dwK0, DWORD dwK1); -static VOID s_vAppendByte(BYTE b); /* Add a single byte to the internal +static void s_vSetKey(DWORD dwK0, DWORD dwK1); +static void s_vAppendByte(BYTE b); /* Add a single byte to the internal * message */ /*--------------------- Export Variables --------------------------*/ @@ -79,7 +79,7 @@ static DWORD s_dwGetUINT32 (BYTE * p) return res; } -static VOID s_vPutUINT32 (BYTE* p, DWORD val) +static void s_vPutUINT32(BYTE *p, DWORD val) // Convert from DWORD to BYTE[] in a portable way { UINT i; @@ -90,7 +90,7 @@ static VOID s_vPutUINT32 (BYTE* p, DWORD val) } */ -static VOID s_vClear(void) +static void s_vClear(void) { /* Reset the state to the empty message. */ L = K0; @@ -99,7 +99,7 @@ static VOID s_vClear(void) M = 0; } -static VOID s_vSetKey(DWORD dwK0, DWORD dwK1) +static void s_vSetKey(DWORD dwK0, DWORD dwK1) { /* Set the key */ K0 = dwK0; @@ -108,7 +108,7 @@ static VOID s_vSetKey(DWORD dwK0, DWORD dwK1) s_vClear(); } -static VOID s_vAppendByte(BYTE b) +static void s_vAppendByte(BYTE b) { /* Append the byte to our word-sized buffer */ M |= b << (8*nBytesInM); @@ -130,14 +130,14 @@ static VOID s_vAppendByte(BYTE b) } } -VOID MIC_vInit(DWORD dwK0, DWORD dwK1) +void MIC_vInit(DWORD dwK0, DWORD dwK1) { /* Set the key */ s_vSetKey(dwK0, dwK1); } -VOID MIC_vUnInit(void) +void MIC_vUnInit(void) { /* Wipe the key material */ K0 = 0; @@ -148,7 +148,7 @@ VOID MIC_vUnInit(void) s_vClear(); } -VOID MIC_vAppend(PBYTE src, UINT nBytes) +void MIC_vAppend(PBYTE src, UINT nBytes) { /* This is simple */ while (nBytes > 0) { @@ -157,7 +157,7 @@ VOID MIC_vAppend(PBYTE src, UINT nBytes) } } -VOID MIC_vGetMIC(PDWORD pdwL, PDWORD pdwR) +void MIC_vGetMIC(PDWORD pdwL, PDWORD pdwR) { /* Append the minimum padding */ s_vAppendByte(0x5a); diff --git a/drivers/staging/vt6656/michael.h b/drivers/staging/vt6656/michael.h index 3f79b52..97de77b 100644 --- a/drivers/staging/vt6656/michael.h +++ b/drivers/staging/vt6656/michael.h @@ -35,16 +35,16 @@ /*--------------------- Export Types ------------------------------*/ -VOID MIC_vInit(DWORD dwK0, DWORD dwK1); +void MIC_vInit(DWORD dwK0, DWORD dwK1); -VOID MIC_vUnInit(void); +void MIC_vUnInit(void); // Append bytes to the message to be MICed -VOID MIC_vAppend(PBYTE src, UINT nBytes); +void MIC_vAppend(PBYTE src, UINT nBytes); // Get the MIC result. Destination should accept 8 bytes of result. // This also resets the message to empty. -VOID MIC_vGetMIC(PDWORD pdwL, PDWORD pdwR); +void MIC_vGetMIC(PDWORD pdwL, PDWORD pdwR); /*--------------------- Export Macros ------------------------------*/ diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index e50093e..05d51fb 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -76,7 +76,7 @@ static int msglevel =MSG_LEVEL_INFO; -*/ -VOID +void PSvEnablePowerSaving( HANDLE hDeviceContext, WORD wListenInterval @@ -154,7 +154,7 @@ PSvEnablePowerSaving( * -*/ -VOID +void PSvDisablePowerSaving( HANDLE hDeviceContext ) @@ -262,7 +262,7 @@ PSbConsiderPowerDown( -VOID +void PSvSendPSPOLL( HANDLE hDeviceContext ) diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index 0a14811..e83ac4e 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -55,18 +55,18 @@ PSbConsiderPowerDown( BOOL bCheckCountToWakeUp ); -VOID +void PSvDisablePowerSaving( HANDLE hDeviceContext ); -VOID +void PSvEnablePowerSaving( HANDLE hDeviceContext, WORD wListenInterval ); -VOID +void PSvSendPSPOLL( HANDLE hDeviceContext ); diff --git a/drivers/staging/vt6656/rc4.c b/drivers/staging/vt6656/rc4.c index 64c419d..487f1dc 100644 --- a/drivers/staging/vt6656/rc4.c +++ b/drivers/staging/vt6656/rc4.c @@ -32,7 +32,7 @@ #include "rc4.h" -VOID rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len) +void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len) { UINT ust1, ust2; UINT keyindex; @@ -78,7 +78,7 @@ UINT rc4_byte(PRC4Ext pRC4) return pbyst[(ustx + usty) & 0xff]; } -VOID rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, +void rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, PBYTE pbySrc, UINT cbData_len) { UINT ii; diff --git a/drivers/staging/vt6656/rc4.h b/drivers/staging/vt6656/rc4.h index bf607c9..e65cae6 100644 --- a/drivers/staging/vt6656/rc4.h +++ b/drivers/staging/vt6656/rc4.h @@ -40,7 +40,7 @@ typedef struct { BYTE abystate[256]; } RC4Ext, *PRC4Ext; -VOID rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len); +void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len); UINT rc4_byte(PRC4Ext pRC4); void rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, PBYTE pbySrc, UINT cbData_len); diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index d69925f..1126cb4 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -954,7 +954,7 @@ BOOL bResult = TRUE; * Return Value: none * -*/ -VOID +void RFvRSSITodBm ( PSDevice pDevice, BYTE byCurrRSSI, @@ -984,7 +984,7 @@ RFvRSSITodBm ( -VOID +void RFbRFTableDownload ( PSDevice pDevice ) diff --git a/drivers/staging/vt6656/rf.h b/drivers/staging/vt6656/rf.h index 2215986..6c3faf8 100644 --- a/drivers/staging/vt6656/rf.h +++ b/drivers/staging/vt6656/rf.h @@ -76,14 +76,14 @@ BOOL RFbRawSetPower( UINT uRATE ); -VOID +void RFvRSSITodBm ( PSDevice pDevice, BYTE byCurrRSSI, long * pldBm ); -VOID +void RFbRFTableDownload ( PSDevice pDevice ); diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 1d7ca22..9ddb7e1 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -113,7 +113,7 @@ const WORD wFB_Opt1[2][5] = { /*--------------------- Static Functions --------------------------*/ static -VOID +void s_vSaveTxPktInfo( PSDevice pDevice, BYTE byPktNum, @@ -123,22 +123,22 @@ s_vSaveTxPktInfo( ); static -PVOID +void * s_vGetFreeContext( PSDevice pDevice ); static -VOID +void s_vGenerateTxParameter( PSDevice pDevice, BYTE byPktType, WORD wCurrentRate, - PVOID pTxBufHead, - PVOID pvRrvTime, - PVOID pvRTS, - PVOID pvCTS, + void *pTxBufHead, + void *pvRrvTime, + void *pvRTS, + void *pvCTS, UINT cbFrameSize, BOOL bNeedACK, UINT uDMAIdx, @@ -152,7 +152,7 @@ s_uFillDataHead ( PSDevice pDevice, BYTE byPktType, WORD wCurrentRate, - PVOID pTxDataHead, + void *pTxDataHead, UINT cbFrameLength, UINT uDMAIdx, BOOL bNeedAck, @@ -166,7 +166,7 @@ s_uFillDataHead ( static -VOID +void s_vGenerateMACHeader ( PSDevice pDevice, PBYTE pbyBufferAddr, @@ -179,7 +179,7 @@ s_vGenerateMACHeader ( ); static -VOID +void s_vFillTxKey( PSDevice pDevice, PBYTE pbyBuf, @@ -191,7 +191,7 @@ s_vFillTxKey( ); static -VOID +void s_vSWencryption ( PSDevice pDevice, PSKeyItem pTransmitKey, @@ -221,12 +221,12 @@ s_uGetRTSCTSRsvTime ( ); static -VOID +void s_vFillCTSHead ( PSDevice pDevice, UINT uDMAIdx, BYTE byPktType, - PVOID pvCTS, + void *pvCTS, UINT cbFrameLength, BOOL bNeedAck, BOOL bDisCRC, @@ -235,11 +235,11 @@ s_vFillCTSHead ( ); static -VOID +void s_vFillRTSHead( PSDevice pDevice, BYTE byPktType, - PVOID pvRTS, + void *pvRTS, UINT cbFrameLength, BOOL bNeedAck, BOOL bDisCRC, @@ -280,7 +280,7 @@ s_uGetRTSCTSDuration ( /*--------------------- Export Variables --------------------------*/ static -PVOID +void * s_vGetFreeContext( PSDevice pDevice ) @@ -302,12 +302,12 @@ s_vGetFreeContext( if ( ii == pDevice->cbTD ) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"No Free Tx Context\n"); } - return ((PVOID) pReturnContext); + return (void *) pReturnContext; } static -VOID +void s_vSaveTxPktInfo(PSDevice pDevice, BYTE byPktNum, PBYTE pbyDestAddr, WORD wPktLength, WORD wFIFOCtl) { PSStatCounter pStatistic=&(pDevice->scStatistic); @@ -331,7 +331,7 @@ s_vSaveTxPktInfo(PSDevice pDevice, BYTE byPktNum, PBYTE pbyDestAddr, WORD wPktLe static -VOID +void s_vFillTxKey ( PSDevice pDevice, PBYTE pbyBuf, @@ -448,7 +448,7 @@ s_vFillTxKey ( static -VOID +void s_vSWencryption ( PSDevice pDevice, PSKeyItem pTransmitKey, @@ -841,7 +841,7 @@ s_uFillDataHead ( PSDevice pDevice, BYTE byPktType, WORD wCurrentRate, - PVOID pTxDataHead, + void *pTxDataHead, UINT cbFrameLength, UINT uDMAIdx, BOOL bNeedAck, @@ -981,11 +981,11 @@ s_uFillDataHead ( static -VOID +void s_vFillRTSHead ( PSDevice pDevice, BYTE byPktType, - PVOID pvRTS, + void *pvRTS, UINT cbFrameLength, BOOL bNeedAck, BOOL bDisCRC, @@ -1209,12 +1209,12 @@ s_vFillRTSHead ( } static -VOID +void s_vFillCTSHead ( PSDevice pDevice, UINT uDMAIdx, BYTE byPktType, - PVOID pvCTS, + void *pvCTS, UINT cbFrameLength, BOOL bNeedAck, BOOL bDisCRC, @@ -1309,15 +1309,15 @@ s_vFillCTSHead ( -*/ // UINT cbFrameSize,//Hdr+Payload+FCS static -VOID +void s_vGenerateTxParameter ( PSDevice pDevice, BYTE byPktType, WORD wCurrentRate, - PVOID pTxBufHead, - PVOID pvRrvTime, - PVOID pvRTS, - PVOID pvCTS, + void *pTxBufHead, + void *pvRrvTime, + void *pvRTS, + void *pvCTS, UINT cbFrameSize, BOOL bNeedACK, UINT uDMAIdx, @@ -1455,11 +1455,11 @@ s_bPacketToWirelessUsb( BYTE abySNAP_Bridgetunnel[6] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; UINT uDuration; UINT cbHeaderLength= 0,uPadding = 0; - PVOID pvRrvTime; + void *pvRrvTime; PSMICHDRHead pMICHDR; - PVOID pvRTS; - PVOID pvCTS; - PVOID pvTxDataHd; + void *pvRTS; + void *pvCTS; + void *pvTxDataHd; BYTE byFBOption = AUTO_FB_NONE,byFragType; WORD wTxBufSize; DWORD dwMICKey0,dwMICKey1,dwMIC_Priority,dwCRC; @@ -1694,7 +1694,8 @@ s_bPacketToWirelessUsb( //Fill FIFO,RrvTime,RTS,and CTS - s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate, (PVOID)pbyTxBufferAddr, pvRrvTime, pvRTS, pvCTS, + s_vGenerateTxParameter(pDevice, byPktType, wCurrentRate, + (void *)pbyTxBufferAddr, pvRrvTime, pvRTS, pvCTS, cbFrameSize, bNeedACK, uDMAIdx, psEthHeader); //Fill DataHead uDuration = s_uFillDataHead(pDevice, byPktType, wCurrentRate, pvTxDataHd, cbFrameSize, uDMAIdx, bNeedACK, @@ -1856,7 +1857,7 @@ s_bPacketToWirelessUsb( * -*/ -VOID +void s_vGenerateMACHeader ( PSDevice pDevice, PBYTE pbyBufferAddr, @@ -1964,9 +1965,9 @@ CMD_STATUS csMgmt_xmit( { BYTE byPktType; PBYTE pbyTxBufferAddr; - PVOID pvRTS; + void *pvRTS; PSCTS pCTS; - PVOID pvTxDataHd; + void *pvTxDataHd; UINT uDuration; UINT cbReqCount; PS802_11Header pMACHeader; @@ -1984,8 +1985,8 @@ CMD_STATUS csMgmt_xmit( WORD wTxBufSize; UINT cbMacHdLen; SEthernetHeader sEthHeader; - PVOID pvRrvTime; - PVOID pMICHDR; + void *pvRrvTime; + void *pMICHDR; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); WORD wCurrentRate = RATE_1M; PTX_BUFFER pTX_Buffer; @@ -2137,7 +2138,8 @@ CMD_STATUS csMgmt_xmit( cbHeaderSize = wTxBufSize + sizeof(SRrvTime_ab) + sizeof(STxDataHead_ab); } - memset((PVOID)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); + memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, + (cbHeaderSize - wTxBufSize)); memcpy(&(sEthHeader.abyDstAddr[0]), &(pPacket->p80211Header->sA3.abyAddr1[0]), @@ -2342,15 +2344,15 @@ csBeacon_xmit( -VOID +void vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); BYTE byPktType; PBYTE pbyTxBufferAddr; - PVOID pvRTS; - PVOID pvCTS; - PVOID pvTxDataHd; + void *pvRTS; + void *pvCTS; + void *pvTxDataHd; UINT uDuration; UINT cbReqCount; PS802_11Header pMACHeader; @@ -2374,8 +2376,8 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb) { WORD wTxBufSize; UINT cbMacHdLen; SEthernetHeader sEthHeader; - PVOID pvRrvTime; - PVOID pMICHDR; + void *pvRrvTime; + void *pMICHDR; WORD wCurrentRate = RATE_1M; PUWLAN_80211HDR p80211Header; UINT uNodeIndex = 0; @@ -2574,7 +2576,8 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb) { pvTxDataHd = (PSTxDataHead_ab) (pbyTxBufferAddr + wTxBufSize + sizeof(SRrvTime_ab) + cbMICHDR); cbHeaderSize = wTxBufSize + sizeof(SRrvTime_ab) + cbMICHDR + sizeof(STxDataHead_ab); } - memset((PVOID)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); + memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, + (cbHeaderSize - wTxBufSize)); memcpy(&(sEthHeader.abyDstAddr[0]), &(p80211Header->sA3.abyAddr1[0]), ETH_ALEN); diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 1160c03..7c7e078 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -682,7 +682,7 @@ bPacketToWirelessUsb( OUT UINT *pcbTotalLen ); -VOID vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb); +void vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb); NTSTATUS nsDMA_tx_packet(PSDevice pDevice, UINT uDMAIdx, struct sk_buff *skb); CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); CMD_STATUS csBeacon_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); diff --git a/drivers/staging/vt6656/tkip.c b/drivers/staging/vt6656/tkip.c index 8ca1540..f83af59 100644 --- a/drivers/staging/vt6656/tkip.c +++ b/drivers/staging/vt6656/tkip.c @@ -183,7 +183,7 @@ unsigned int rotr1(unsigned int a) * Return Value: none * */ -VOID TKIPvMixKey( +void TKIPvMixKey( PBYTE pbyTKey, PBYTE pbyTA, WORD wTSC15_0, diff --git a/drivers/staging/vt6656/tkip.h b/drivers/staging/vt6656/tkip.h index 847ecdf..3dfa7f5 100644 --- a/drivers/staging/vt6656/tkip.h +++ b/drivers/staging/vt6656/tkip.h @@ -46,7 +46,7 @@ /*--------------------- Export Functions --------------------------*/ -VOID TKIPvMixKey( +void TKIPvMixKey( PBYTE pbyTKey, PBYTE pbyTA, WORD wTSC15_0, diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index 2365fa4..5bbd4e3 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -33,10 +33,6 @@ /******* Common definitions and typedefs ***********************************/ -#ifndef VOID -#define VOID void -#endif - #ifndef OUT #define OUT #endif @@ -146,13 +142,11 @@ typedef DWORD * PDWORD; typedef QWORD * PQWORD; -typedef void * PVOID; - // handle declaration #ifdef STRICT typedef void *HANDLE; #else -typedef PVOID HANDLE; +typedef void *HANDLE; #endif #endif // __TTYPE_H__ diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 901c684..7c32572 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -71,34 +71,34 @@ static int msglevel =MSG_LEVEL_INFO; /*--------------------- Static Functions --------------------------*/ static -VOID +void s_nsInterruptUsbIoCompleteRead( struct urb *urb ); static -VOID +void s_nsBulkInUsbIoCompleteRead( struct urb *urb ); static -VOID +void s_nsBulkOutIoCompleteWrite( struct urb *urb ); static -VOID +void s_nsControlInUsbIoCompleteRead( struct urb *urb ); static -VOID +void s_nsControlInUsbIoCompleteWrite( struct urb *urb ); @@ -142,7 +142,7 @@ PIPEnsControlOutAsyn( 0x40, // RequestType wValue, wIndex, - (PVOID) pbyBuffer, + (void *) pbyBuffer, wLength, HZ ); @@ -279,7 +279,7 @@ PIPEnsControlIn( } static -VOID +void s_nsControlInUsbIoCompleteWrite( struct urb *urb ) @@ -320,7 +320,7 @@ s_nsControlInUsbIoCompleteWrite( * */ static -VOID +void s_nsControlInUsbIoCompleteRead( struct urb *urb ) @@ -385,7 +385,7 @@ PIPEnsInterruptRead( usb_fill_int_urb(pDevice->pInterruptURB, pDevice->usb, usb_rcvintpipe(pDevice->usb, 1), - (PVOID) pDevice->intBuf.pDataBuf, + (void *) pDevice->intBuf.pDataBuf, MAX_INTERRUPT_SIZE, s_nsInterruptUsbIoCompleteRead, pDevice, @@ -396,7 +396,7 @@ PIPEnsInterruptRead( usb_fill_int_urb(pDevice->pInterruptURB, pDevice->usb, usb_rcvintpipe(pDevice->usb, 1), - (PVOID) pDevice->intBuf.pDataBuf, + (void *) pDevice->intBuf.pDataBuf, MAX_INTERRUPT_SIZE, s_nsInterruptUsbIoCompleteRead, pDevice, @@ -409,7 +409,7 @@ PIPEnsInterruptRead( usb_fill_bulk_urb(pDevice->pInterruptURB, pDevice->usb, usb_rcvbulkpipe(pDevice->usb, 1), - (PVOID) pDevice->intBuf.pDataBuf, + (void *) pDevice->intBuf.pDataBuf, MAX_INTERRUPT_SIZE, s_nsInterruptUsbIoCompleteRead, pDevice); @@ -441,7 +441,7 @@ usb_fill_bulk_urb(pDevice->pInterruptURB, * */ static -VOID +void s_nsInterruptUsbIoCompleteRead( struct urb *urb ) @@ -506,7 +506,7 @@ s_nsInterruptUsbIoCompleteRead( usb_fill_bulk_urb(pDevice->pInterruptURB, pDevice->usb, usb_rcvbulkpipe(pDevice->usb, 1), - (PVOID) pDevice->intBuf.pDataBuf, + (void *) pDevice->intBuf.pDataBuf, MAX_INTERRUPT_SIZE, s_nsInterruptUsbIoCompleteRead, pDevice); @@ -572,7 +572,7 @@ PIPEnsBulkInUsbRead( usb_fill_bulk_urb(pUrb, pDevice->usb, usb_rcvbulkpipe(pDevice->usb, 2), - (PVOID) (pRCB->skb->data), + (void *) (pRCB->skb->data), MAX_TOTAL_SIZE_WITH_ALL_HEADERS, s_nsBulkInUsbIoCompleteRead, pRCB); @@ -606,7 +606,7 @@ PIPEnsBulkInUsbRead( * */ static -VOID +void s_nsBulkInUsbIoCompleteRead( struct urb *urb ) @@ -718,8 +718,8 @@ PIPEnsSendBulkOut( usb_fill_bulk_urb( pUrb, pDevice->usb, - usb_sndbulkpipe(pDevice->usb, 3), - (PVOID) &(pContext->Data[0]), + usb_sndbulkpipe(pDevice->usb, 3), + (void *) &(pContext->Data[0]), pContext->uBufLen, s_nsBulkOutIoCompleteWrite, pContext); @@ -766,7 +766,7 @@ PIPEnsSendBulkOut( * */ static -VOID +void s_nsBulkOutIoCompleteWrite( struct urb *urb ) diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 7e54339..23db5f6 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -69,7 +69,7 @@ static int msglevel =MSG_LEVEL_INFO; /*--------------------- Static Functions --------------------------*/ static -VOID +void s_vProbeChannel( PSDevice pDevice ); @@ -210,7 +210,7 @@ vAdHocBeaconRestart(PSDevice pDevice) -*/ static -VOID +void s_vProbeChannel( PSDevice pDevice ) @@ -325,7 +325,7 @@ s_MgrMakeProbeRequest( -VOID +void vCommandTimerWait( HANDLE hDeviceContext, UINT MSecond @@ -345,7 +345,7 @@ vCommandTimerWait( -VOID +void vRunCommand( HANDLE hDeviceContext ) @@ -1287,7 +1287,7 @@ BOOL s_bClearBSSID_SCAN ( //mike add:reset command timer -VOID +void vResetCommandTimer( HANDLE hDeviceContext ) @@ -1311,7 +1311,7 @@ vResetCommandTimer( //2007-0115-08by MikeLiu #ifdef TxInSleep -VOID +void BSSvSecondTxData( HANDLE hDeviceContext ) diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index 28c0aa5..f3eac03 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -116,7 +116,7 @@ typedef enum tagCMD_STATE { /*--------------------- Export Functions --------------------------*/ -VOID +void vResetCommandTimer( HANDLE hDeviceContext ); @@ -128,20 +128,20 @@ bScheduleCommand( PBYTE pbyItem0 ); -VOID +void vRunCommand( HANDLE hDeviceContext ); /* -VOID +void WCMDvCommandThread( - PVOID Context + void * Context ); */ //2007-0115-09by MikeLiu #ifdef TxInSleep -VOID +void BSSvSecondTxData( HANDLE hDeviceContext ); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index b93cb1d..994022a 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -113,7 +113,7 @@ s_MgrMakeAssocRequest( ); static -VOID +void s_vMgrRxAssocRequest( PSDevice pDevice, PSMgmtObject pMgmt, @@ -135,7 +135,7 @@ s_MgrMakeReAssocRequest( ); static -VOID +void s_vMgrRxAssocResponse( PSDevice pDevice, PSMgmtObject pMgmt, @@ -144,7 +144,7 @@ s_vMgrRxAssocResponse( ); static -VOID +void s_vMgrRxDisassociation( PSDevice pDevice, PSMgmtObject pMgmt, @@ -153,7 +153,7 @@ s_vMgrRxDisassociation( // Authentication/deauthen functions static -VOID +void s_vMgrRxAuthenSequence_1( PSDevice pDevice, PSMgmtObject pMgmt, @@ -161,7 +161,7 @@ s_vMgrRxAuthenSequence_1( ); static -VOID +void s_vMgrRxAuthenSequence_2( PSDevice pDevice, PSMgmtObject pMgmt, @@ -169,7 +169,7 @@ s_vMgrRxAuthenSequence_2( ); static -VOID +void s_vMgrRxAuthenSequence_3( PSDevice pDevice, PSMgmtObject pMgmt, @@ -177,7 +177,7 @@ s_vMgrRxAuthenSequence_3( ); static -VOID +void s_vMgrRxAuthenSequence_4( PSDevice pDevice, PSMgmtObject pMgmt, @@ -185,7 +185,7 @@ s_vMgrRxAuthenSequence_4( ); static -VOID +void s_vMgrRxAuthentication( PSDevice pDevice, PSMgmtObject pMgmt, @@ -193,7 +193,7 @@ s_vMgrRxAuthentication( ); static -VOID +void s_vMgrRxDeauthentication( PSDevice pDevice, PSMgmtObject pMgmt, @@ -203,7 +203,7 @@ s_vMgrRxDeauthentication( // Scan functions // probe request/response functions static -VOID +void s_vMgrRxProbeRequest( PSDevice pDevice, PSMgmtObject pMgmt, @@ -211,7 +211,7 @@ s_vMgrRxProbeRequest( ); static -VOID +void s_vMgrRxProbeResponse( PSDevice pDevice, PSMgmtObject pMgmt, @@ -220,7 +220,7 @@ s_vMgrRxProbeResponse( // beacon functions static -VOID +void s_vMgrRxBeacon( PSDevice pDevice, PSMgmtObject pMgmt, @@ -229,7 +229,7 @@ s_vMgrRxBeacon( ); static -VOID +void s_vMgrFormatTIM( PSMgmtObject pMgmt, PWLAN_IE_TIM pTIM @@ -299,7 +299,7 @@ s_MgrMakeProbeResponse( // received status static -VOID +void s_vMgrLogStatus( PSMgmtObject pMgmt, WORD wStatus @@ -307,7 +307,7 @@ s_vMgrLogStatus( static -VOID +void s_vMgrSynchBSS ( PSDevice pDevice, UINT uBSSMode, @@ -324,7 +324,7 @@ s_bCipherMatch ( OUT PBYTE pbyCCSGK ); - static VOID Encyption_Rebuild( + static void Encyption_Rebuild( PSDevice pDevice, PKnownBSS pCurr ); @@ -347,7 +347,7 @@ s_bCipherMatch ( * -*/ -VOID +void vMgrObjectInit( HANDLE hDeviceContext ) @@ -415,7 +415,7 @@ vMgrObjectInit( -*/ -VOID +void vMgrAssocBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, @@ -491,7 +491,7 @@ vMgrAssocBeginSta( * -*/ -VOID +void vMgrReAssocBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, @@ -570,7 +570,7 @@ vMgrReAssocBeginSta( * -*/ -VOID +void vMgrDisassocBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, @@ -633,7 +633,7 @@ vMgrDisassocBeginSta( -*/ static -VOID +void s_vMgrRxAssocRequest( PSDevice pDevice, PSMgmtObject pMgmt, @@ -691,7 +691,7 @@ s_vMgrRxAssocRequest( } - RATEvParseMaxRate((PVOID)pDevice, + RATEvParseMaxRate((void *)pDevice, (PWLAN_IE_SUPP_RATES)abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)abyCurrExtSuppRates, FALSE, // do not change our basic rate @@ -789,7 +789,7 @@ s_vMgrRxAssocRequest( -*/ static -VOID +void s_vMgrRxReAssocRequest( PSDevice pDevice, PSMgmtObject pMgmt, @@ -844,7 +844,7 @@ s_vMgrRxReAssocRequest( } - RATEvParseMaxRate((PVOID)pDevice, + RATEvParseMaxRate((void *)pDevice, (PWLAN_IE_SUPP_RATES)abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)abyCurrExtSuppRates, FALSE, // do not change our basic rate @@ -936,7 +936,7 @@ s_vMgrRxReAssocRequest( -*/ static -VOID +void s_vMgrRxAssocResponse( PSDevice pDevice, PSMgmtObject pMgmt, @@ -1102,7 +1102,7 @@ if(pMgmt->eCurrState == WMAC_STATE_ASSOC) * -*/ -VOID +void vMgrAuthenBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, @@ -1160,7 +1160,7 @@ vMgrAuthenBeginSta( * -*/ -VOID +void vMgrDeAuthenBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, @@ -1217,7 +1217,7 @@ vMgrDeAuthenBeginSta( -*/ static -VOID +void s_vMgrRxAuthentication( PSDevice pDevice, PSMgmtObject pMgmt, @@ -1275,7 +1275,7 @@ s_vMgrRxAuthentication( static -VOID +void s_vMgrRxAuthenSequence_1( PSDevice pDevice, PSMgmtObject pMgmt, @@ -1381,7 +1381,7 @@ s_vMgrRxAuthenSequence_1( -*/ static -VOID +void s_vMgrRxAuthenSequence_2( PSDevice pDevice, PSMgmtObject pMgmt, @@ -1483,7 +1483,7 @@ s_vMgrRxAuthenSequence_2( -*/ static -VOID +void s_vMgrRxAuthenSequence_3( PSDevice pDevice, PSMgmtObject pMgmt, @@ -1571,7 +1571,7 @@ reply: * -*/ static -VOID +void s_vMgrRxAuthenSequence_4( PSDevice pDevice, PSMgmtObject pMgmt, @@ -1610,7 +1610,7 @@ s_vMgrRxAuthenSequence_4( -*/ static -VOID +void s_vMgrRxDisassociation( PSDevice pDevice, PSMgmtObject pMgmt, @@ -1700,7 +1700,7 @@ s_vMgrRxDisassociation( -*/ static -VOID +void s_vMgrRxDeauthentication( PSDevice pDevice, PSMgmtObject pMgmt, @@ -1826,7 +1826,7 @@ ChannelExceedZoneType( -*/ static -VOID +void s_vMgrRxBeacon( PSDevice pDevice, PSMgmtObject pMgmt, @@ -2089,7 +2089,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) pMgmt->abyCurrExtSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)pBSSList->abyExtSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, uRateLen); - RATEvParseMaxRate( (PVOID)pDevice, + RATEvParseMaxRate((void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, TRUE, @@ -2227,7 +2227,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, WLAN_RATES_MAXLEN_11B); - RATEvParseMaxRate( (PVOID)pDevice, + RATEvParseMaxRate((void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, NULL, TRUE, @@ -2248,7 +2248,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, WLAN_RATES_MAXLEN_11B); - RATEvParseMaxRate( (PVOID)pDevice, + RATEvParseMaxRate((void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, NULL, TRUE, @@ -2355,7 +2355,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) * CMD_STATUS * -*/ -VOID +void vMgrCreateOwnIBSS( HANDLE hDeviceContext, OUT PCMD_STATUS pStatus @@ -2466,7 +2466,8 @@ vMgrCreateOwnIBSS( // set basic rate - RATEvParseMaxRate((PVOID)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, + RATEvParseMaxRate((void *)pDevice, + (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, TRUE, &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, &byTopCCKBasicRate, &byTopOFDMBasicRate); @@ -2629,7 +2630,7 @@ vMgrCreateOwnIBSS( * -*/ -VOID +void vMgrJoinBSSBegin( HANDLE hDeviceContext, OUT PCMD_STATUS pStatus @@ -2760,7 +2761,7 @@ vMgrJoinBSSBegin( } } - RATEvParseMaxRate((PVOID)pDevice, pItemRates, pItemExtRates, TRUE, + RATEvParseMaxRate((void *)pDevice, pItemRates, pItemExtRates, TRUE, &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, &byTopCCKBasicRate, &byTopOFDMBasicRate); vUpdateIFS(pDevice); @@ -2899,7 +2900,8 @@ vMgrJoinBSSBegin( (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, WLAN_RATES_MAXLEN_11B); // set basic rate - RATEvParseMaxRate((PVOID)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, + RATEvParseMaxRate((void *)pDevice, + (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, NULL, TRUE, &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, &byTopCCKBasicRate, &byTopOFDMBasicRate); vUpdateIFS(pDevice); @@ -2960,7 +2962,7 @@ vMgrJoinBSSBegin( * -*/ static -VOID +void s_vMgrSynchBSS ( PSDevice pDevice, UINT uBSSMode, @@ -3004,7 +3006,7 @@ s_vMgrSynchBSS ( pDevice->byPreambleType = 0; pDevice->wBasicRate = 0; // Set Basic Rate - CARDbAddBasicRate((PVOID)pDevice, RATE_1M); + CARDbAddBasicRate((void *)pDevice, RATE_1M); // calculate TSF offset // TSF Offset = Received Timestamp TSF - Marked Local's TSF @@ -3122,7 +3124,7 @@ s_vMgrSynchBSS ( //mike add: fix NetworkManager 0.7.0 hidden ssid mode in WPA encryption // ,need reset eAuthenMode and eEncryptionStatus - static VOID Encyption_Rebuild( + static void Encyption_Rebuild( PSDevice pDevice, PKnownBSS pCurr ) @@ -3174,12 +3176,12 @@ s_vMgrSynchBSS ( * * * Return Value: - * VOID + * void * -*/ static -VOID +void s_vMgrFormatTIM( PSMgmtObject pMgmt, PWLAN_IE_TIM pTIM @@ -4224,7 +4226,7 @@ s_MgrMakeReAssocResponse( -*/ static -VOID +void s_vMgrRxProbeResponse( PSDevice pDevice, PSMgmtObject pMgmt, @@ -4354,7 +4356,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) static -VOID +void s_vMgrRxProbeRequest( PSDevice pDevice, PSMgmtObject pMgmt, @@ -4450,7 +4452,7 @@ s_vMgrRxProbeRequest( -*/ -VOID +void vMgrRxManagePacket( HANDLE hDeviceContext, PSMgmtObject pMgmt, @@ -4658,7 +4660,7 @@ bMgrPrepareBeaconToSend( * -*/ static -VOID +void s_vMgrLogStatus( PSMgmtObject pMgmt, WORD wStatus @@ -4791,7 +4793,7 @@ bAdd_PMKID_Candidate ( * Return Value: none. * -*/ -VOID +void vFlush_PMKID_Candidate ( HANDLE hDeviceContext ) diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index f6774ce..d554715 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -246,8 +246,7 @@ typedef struct tagSRxMgmtPacket { typedef struct tagSMgmtObject { - - PVOID pAdapter; + void *pAdapter; // MAC address BYTE abyMACAddr[WLAN_ADDR_LEN]; @@ -421,14 +420,14 @@ vMgrAssocBeginSta( OUT PCMD_STATUS pStatus ); -VOID +void vMgrReAssocBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); -VOID +void vMgrDisassocBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, @@ -437,26 +436,26 @@ vMgrDisassocBeginSta( OUT PCMD_STATUS pStatus ); -VOID +void vMgrAuthenBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); -VOID +void vMgrCreateOwnIBSS( HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ); -VOID +void vMgrJoinBSSBegin( HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ); -VOID +void vMgrRxManagePacket( HANDLE hDeviceContext, PSMgmtObject pMgmt, @@ -464,14 +463,14 @@ vMgrRxManagePacket( ); /* -VOID +void vMgrScanBegin( HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ); */ -VOID +void vMgrDeAuthenBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, @@ -494,7 +493,7 @@ bAdd_PMKID_Candidate ( PSRSNCapObject psRSNCapObj ); -VOID +void vFlush_PMKID_Candidate ( HANDLE hDeviceContext ); diff --git a/drivers/staging/vt6656/wpa.c b/drivers/staging/vt6656/wpa.c index 9992291..1fa6c9b 100644 --- a/drivers/staging/vt6656/wpa.c +++ b/drivers/staging/vt6656/wpa.c @@ -68,7 +68,7 @@ const BYTE abyOUI05[4] = { 0x00, 0x50, 0xf2, 0x05 }; * -*/ -VOID +void WPA_ClearRSN ( PKnownBSS pBSSList ) @@ -104,7 +104,7 @@ WPA_ClearRSN ( * Return Value: none. * -*/ -VOID +void WPA_ParseRSN ( PKnownBSS pBSSList, PWLAN_IE_RSN_EXT pRSN diff --git a/drivers/staging/vt6656/wpa.h b/drivers/staging/vt6656/wpa.h index 0a955b3..661f40d 100644 --- a/drivers/staging/vt6656/wpa.h +++ b/drivers/staging/vt6656/wpa.h @@ -58,12 +58,12 @@ /*--------------------- Export Functions --------------------------*/ -VOID +void WPA_ClearRSN( PKnownBSS pBSSList ); -VOID +void WPA_ParseRSN( PKnownBSS pBSSList, PWLAN_IE_RSN_EXT pRSN diff --git a/drivers/staging/vt6656/wpa2.c b/drivers/staging/vt6656/wpa2.c index 9a972a4..73bfb50 100644 --- a/drivers/staging/vt6656/wpa2.c +++ b/drivers/staging/vt6656/wpa2.c @@ -71,7 +71,7 @@ const BYTE abyOUIPSK[4] = { 0x00, 0x0F, 0xAC, 0x02 }; * Return Value: none. * -*/ -VOID +void WPA2_ClearRSN ( PKnownBSS pBSSNode ) @@ -106,7 +106,7 @@ WPA2_ClearRSN ( * Return Value: none. * -*/ -VOID +void WPA2vParseRSN ( PKnownBSS pBSSNode, PWLAN_IE_RSN pRSN @@ -261,8 +261,7 @@ WPA2vParseRSN ( * -*/ UINT -WPA2uSetIEs( - PVOID pMgmtHandle, +WPA2uSetIEs(void *pMgmtHandle, OUT PWLAN_IE_RSN pRSNIEs ) { diff --git a/drivers/staging/vt6656/wpa2.h b/drivers/staging/vt6656/wpa2.h index 51fb3fd..6026005 100644 --- a/drivers/staging/vt6656/wpa2.h +++ b/drivers/staging/vt6656/wpa2.h @@ -58,12 +58,12 @@ typedef struct tagSPMKIDCache { /*--------------------- Export Functions --------------------------*/ -VOID +void WPA2_ClearRSN ( PKnownBSS pBSSNode ); -VOID +void WPA2vParseRSN ( PKnownBSS pBSSNode, PWLAN_IE_RSN pRSN @@ -71,7 +71,7 @@ WPA2vParseRSN ( UINT WPA2uSetIEs( - PVOID pMgmtHandle, + void *pMgmtHandle, OUT PWLAN_IE_RSN pRSNIEs ); -- cgit v0.10.2 From e7b07d1d8936e06f88dbe227401ce659c2f9dee5 Mon Sep 17 00:00:00 2001 From: Andres More Date: Sat, 1 May 2010 19:12:26 -0300 Subject: Staging: vt6656: code cleanup, fixed comments style at the end of headers Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/aes_ccmp.h b/drivers/staging/vt6656/aes_ccmp.h index f2ba1d5..353bd21 100644 --- a/drivers/staging/vt6656/aes_ccmp.h +++ b/drivers/staging/vt6656/aes_ccmp.h @@ -43,4 +43,4 @@ /*--------------------- Export Functions --------------------------*/ BOOL AESbGenCCMP(PBYTE pbyRxKey, PBYTE pbyFrame, WORD wFrameSize); -#endif //__AES_H__ +#endif /* __AES_CCMP_H__ */ diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index fbc2847..9a1999b 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -143,4 +143,4 @@ void BBvUpdatePreEDThreshold( BOOL bScanning ); -#endif // __BASEBAND_H__ +#endif /* __BASEBAND_H__ */ diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h index 343bfac..2aaa933 100644 --- a/drivers/staging/vt6656/bssdb.h +++ b/drivers/staging/vt6656/bssdb.h @@ -356,4 +356,4 @@ BSSvClearAnyBSSJoinRecord( HANDLE hDeviceContext ); -#endif //__BSSDB_H__ +#endif /* __BSSDB_H__ */ diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 2f7335e..770ee6a 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -91,7 +91,4 @@ CARDbChannelSwitch ( BYTE byCount ); -#endif // __CARD_H__ - - - +#endif /* __CARD_H__ */ diff --git a/drivers/staging/vt6656/control.h b/drivers/staging/vt6656/control.h index 106c9e9..146b450 100644 --- a/drivers/staging/vt6656/control.h +++ b/drivers/staging/vt6656/control.h @@ -77,7 +77,4 @@ void ControlvMaskByte( BYTE byData ); -#endif // __RCV_H__ - - - +#endif /* __CONTROL_H__ */ diff --git a/drivers/staging/vt6656/datarate.h b/drivers/staging/vt6656/datarate.h index da51854..ae37eb6 100644 --- a/drivers/staging/vt6656/datarate.h +++ b/drivers/staging/vt6656/datarate.h @@ -106,5 +106,4 @@ DATARATEbyGetRateIdx( BYTE byRate ); - -#endif //__DATARATE_H__ +#endif /* __DATARATE_H__ */ diff --git a/drivers/staging/vt6656/desc.h b/drivers/staging/vt6656/desc.h index c87ea6b..07f794e 100644 --- a/drivers/staging/vt6656/desc.h +++ b/drivers/staging/vt6656/desc.h @@ -436,8 +436,4 @@ SKeyEntry; /*--------------------- Export Functions --------------------------*/ - - - -#endif // __DESC_H__ - +#endif /* __DESC_H__ */ diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h index 457db77..7ea3ad9 100644 --- a/drivers/staging/vt6656/dpc.h +++ b/drivers/staging/vt6656/dpc.h @@ -58,7 +58,4 @@ RXbBulkInProcessData( ULONG BytesToIndicate ); -#endif // __RXTX_H__ - - - +#endif /* __RXTX_H__ */ diff --git a/drivers/staging/vt6656/firmware.h b/drivers/staging/vt6656/firmware.h index 10e84cd..b2f5b58 100644 --- a/drivers/staging/vt6656/firmware.h +++ b/drivers/staging/vt6656/firmware.h @@ -56,5 +56,4 @@ FIRMWAREbCheckVersion( PSDevice pDevice ); - -#endif // __FIRMWARE_H__ +#endif /* __FIRMWARE_H__ */ diff --git a/drivers/staging/vt6656/hostap.h b/drivers/staging/vt6656/hostap.h index 9e366dc..b660aee 100644 --- a/drivers/staging/vt6656/hostap.h +++ b/drivers/staging/vt6656/hostap.h @@ -64,7 +64,4 @@ int vt6656_hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked); int vt6656_hostap_ioctl(PSDevice pDevice, struct iw_point *p); -#endif // __HOSTAP_H__ - - - +#endif /* __HOSTAP_H__ */ diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h index 20c96f5..cdf3551 100644 --- a/drivers/staging/vt6656/int.h +++ b/drivers/staging/vt6656/int.h @@ -74,7 +74,4 @@ INTnsProcessData( PSDevice pDevice ); -#endif // __INT_H__ - - - +#endif /* __INT_H__ */ diff --git a/drivers/staging/vt6656/iocmd.h b/drivers/staging/vt6656/iocmd.h index 49bfe15..67ec7d7 100644 --- a/drivers/staging/vt6656/iocmd.h +++ b/drivers/staging/vt6656/iocmd.h @@ -470,6 +470,4 @@ struct viawget_hostapd_param { /*--------------------- Export Functions --------------------------*/ - - -#endif //__IOCMD_H__ +#endif /* __IOCMD_H__ */ diff --git a/drivers/staging/vt6656/ioctl.h b/drivers/staging/vt6656/ioctl.h index 46eb699..b307980 100644 --- a/drivers/staging/vt6656/ioctl.h +++ b/drivers/staging/vt6656/ioctl.h @@ -51,7 +51,4 @@ void vConfigWEPKey ( ); */ -#endif // __IOCTL_H__ - - - +#endif /* __IOCTL_H__ */ diff --git a/drivers/staging/vt6656/iowpa.h b/drivers/staging/vt6656/iowpa.h index 5750b5b..da03edc 100644 --- a/drivers/staging/vt6656/iowpa.h +++ b/drivers/staging/vt6656/iowpa.h @@ -153,6 +153,4 @@ struct viawget_scan_result { /*--------------------- Export Functions --------------------------*/ - - -#endif //__IOWPA_H__ +#endif /* __IOWPA_H__ */ diff --git a/drivers/staging/vt6656/iwctl.h b/drivers/staging/vt6656/iwctl.h index 3096de0..df9a4cf 100644 --- a/drivers/staging/vt6656/iwctl.h +++ b/drivers/staging/vt6656/iwctl.h @@ -223,7 +223,4 @@ int iwctl_siwmlme(struct net_device *dev, extern const struct iw_handler_def iwctl_handler_def; extern const struct iw_priv_args iwctl_private_args; -#endif // __IWCTL_H__ - - - +#endif /* __IWCTL_H__ */ diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index 7aec57b..a108782 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -173,5 +173,4 @@ BOOL KeybSetAllGroupKey( BYTE byKeyDecMode ); -#endif // __KEY_H__ - +#endif /* __KEY_H__ */ diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index 1a7c2f5..4e3d11b 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -439,4 +439,4 @@ void MACvEnableBarkerPreambleMd(PSDevice pDevice); void MACvDisableBarkerPreambleMd(PSDevice pDevice); void MACvWriteBeaconInterval(PSDevice pDevice, WORD wInterval); -#endif // __MAC_H__ +#endif /* __MAC_H__ */ diff --git a/drivers/staging/vt6656/mib.h b/drivers/staging/vt6656/mib.h index d1d7817..8a532e8 100644 --- a/drivers/staging/vt6656/mib.h +++ b/drivers/staging/vt6656/mib.h @@ -417,7 +417,4 @@ STAvUpdateUSBCounter( NTSTATUS ntStatus ); -#endif // __MIB_H__ - - - +#endif /* __MIB_H__ */ diff --git a/drivers/staging/vt6656/michael.h b/drivers/staging/vt6656/michael.h index 97de77b..52270d3 100644 --- a/drivers/staging/vt6656/michael.h +++ b/drivers/staging/vt6656/michael.h @@ -53,6 +53,4 @@ void MIC_vGetMIC(PDWORD pdwL, PDWORD pdwR); ( ((A) << (n)) | ( ((A)>>(32-(n))) & ( (1UL << (n)) - 1 ) ) ) #define ROR32( A, n ) ROL32( (A), 32-(n) ) -#endif //__MICHAEL_H__ - - +#endif /* __MICHAEL_H__ */ diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index e83ac4e..c34e389 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -81,4 +81,4 @@ PSbIsNextTBTTWakeUp( HANDLE hDeviceContext ); -#endif //__POWER_H__ +#endif /* __POWER_H__ */ diff --git a/drivers/staging/vt6656/rc4.h b/drivers/staging/vt6656/rc4.h index e65cae6..9cd1db9 100644 --- a/drivers/staging/vt6656/rc4.h +++ b/drivers/staging/vt6656/rc4.h @@ -44,4 +44,4 @@ void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len); UINT rc4_byte(PRC4Ext pRC4); void rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, PBYTE pbySrc, UINT cbData_len); -#endif //__RC4_H__ +#endif /* __RC4_H__ */ diff --git a/drivers/staging/vt6656/rf.h b/drivers/staging/vt6656/rf.h index 6c3faf8..7423d4d 100644 --- a/drivers/staging/vt6656/rf.h +++ b/drivers/staging/vt6656/rf.h @@ -94,7 +94,4 @@ BOOL s_bVT3226D0_11bLoCurrentAdjust( BOOL b11bMode ); -#endif // __RF_H__ - - - +#endif /* __RF_H__ */ diff --git a/drivers/staging/vt6656/rndis.h b/drivers/staging/vt6656/rndis.h index 1d32d81..ac842dd 100644 --- a/drivers/staging/vt6656/rndis.h +++ b/drivers/staging/vt6656/rndis.h @@ -158,5 +158,4 @@ typedef struct _CMD_CHANGE_BBTYPE /*--------------------- Export Functions --------------------------*/ - -#endif // _RNDIS_H_ +#endif /* _RNDIS_H_ */ diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 7c7e078..0269430 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -688,7 +688,4 @@ CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); CMD_STATUS csBeacon_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); BOOL bRelayPacketSend(PSDevice pDevice, PBYTE pbySkbData, UINT uDataLen, UINT uNodeIndex); -#endif // __RXTX_H__ - - - +#endif /* __RXTX_H__ */ diff --git a/drivers/staging/vt6656/srom.h b/drivers/staging/vt6656/srom.h index 4c89e7a..dba21a5 100644 --- a/drivers/staging/vt6656/srom.h +++ b/drivers/staging/vt6656/srom.h @@ -124,4 +124,4 @@ typedef struct tagSSromReg { /*--------------------- Export Functions --------------------------*/ -#endif // __EEPROM_H__ +#endif /* __EEPROM_H__ */ diff --git a/drivers/staging/vt6656/tcrc.h b/drivers/staging/vt6656/tcrc.h index 5faa48b..a41fc9b 100644 --- a/drivers/staging/vt6656/tcrc.h +++ b/drivers/staging/vt6656/tcrc.h @@ -47,7 +47,4 @@ DWORD CRCdwCrc32(PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed); DWORD CRCdwGetCrc32(PBYTE pbyData, UINT cbByte); DWORD CRCdwGetCrc32Ex(PBYTE pbyData, UINT cbByte, DWORD dwPreCRC); -#endif // __TCRC_H__ - - - +#endif /* __TCRC_H__ */ diff --git a/drivers/staging/vt6656/tether.h b/drivers/staging/vt6656/tether.h index af119dd..9b26033 100644 --- a/drivers/staging/vt6656/tether.h +++ b/drivers/staging/vt6656/tether.h @@ -230,7 +230,4 @@ BYTE ETHbyGetHashIndexByCrc32(PBYTE pbyMultiAddr); //BYTE ETHbyGetHashIndexByCrc(PBYTE pbyMultiAddr); BOOL ETHbIsBufferCrc32Ok(PBYTE pbyBuffer, UINT cbFrameLength); -#endif // __TETHER_H__ - - - +#endif /* __TETHER_H__ */ diff --git a/drivers/staging/vt6656/tkip.h b/drivers/staging/vt6656/tkip.h index 3dfa7f5..47c3a85 100644 --- a/drivers/staging/vt6656/tkip.h +++ b/drivers/staging/vt6656/tkip.h @@ -54,7 +54,4 @@ void TKIPvMixKey( PBYTE pbyRC4Key ); -#endif // __TKIP_H__ - - - +#endif /* __TKIP_H__ */ diff --git a/drivers/staging/vt6656/tmacro.h b/drivers/staging/vt6656/tmacro.h index e96c140..3c81e2b 100644 --- a/drivers/staging/vt6656/tmacro.h +++ b/drivers/staging/vt6656/tmacro.h @@ -57,6 +57,4 @@ #define MAKEDWORD(lw, hw) ((DWORD)(((WORD)(lw)) | (((DWORD)((WORD)(hw))) << 16))) #endif -#endif // __TMACRO_H__ - - +#endif /* __TMACRO_H__ */ diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index 5bbd4e3..a773e58 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -149,4 +149,4 @@ typedef void *HANDLE; typedef void *HANDLE; #endif -#endif // __TTYPE_H__ +#endif /* __TTYPE_H__ */ diff --git a/drivers/staging/vt6656/upc.h b/drivers/staging/vt6656/upc.h index acd1b66..be386ed 100644 --- a/drivers/staging/vt6656/upc.h +++ b/drivers/staging/vt6656/upc.h @@ -159,8 +159,4 @@ /*--------------------- Export Functions --------------------------*/ - - - -#endif // __UPC_H__ - +#endif /* __UPC_H__ */ diff --git a/drivers/staging/vt6656/usbpipe.h b/drivers/staging/vt6656/usbpipe.h index 0f7cd2d..ee86d37 100644 --- a/drivers/staging/vt6656/usbpipe.h +++ b/drivers/staging/vt6656/usbpipe.h @@ -93,7 +93,4 @@ PIPEnsSendBulkOut( PUSB_SEND_CONTEXT pContext ); -#endif // __USBPIPE_H__ - - - +#endif /* __USBPIPE_H__ */ diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index f3eac03..a14e564 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -147,4 +147,4 @@ BSSvSecondTxData( ); #endif -#endif //__WCMD_H__ +#endif /* __WCMD_H__ */ diff --git a/drivers/staging/vt6656/wctl.h b/drivers/staging/vt6656/wctl.h index a1ac479..c81dff7 100644 --- a/drivers/staging/vt6656/wctl.h +++ b/drivers/staging/vt6656/wctl.h @@ -102,7 +102,4 @@ BOOL WCTLbHandleFragment(PSDevice pDevice, PS802_11Header pMACHeader, UINT cbFra UINT WCTLuSearchDFCB(PSDevice pDevice, PS802_11Header pMACHeader); UINT WCTLuInsertDFCB(PSDevice pDevice, PS802_11Header pMACHeader); -#endif // __WCTL_H__ - - - +#endif /* __WCTL_H__ */ diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index d554715..02ecec9 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -498,4 +498,4 @@ vFlush_PMKID_Candidate ( HANDLE hDeviceContext ); -#endif // __WMGR_H__ +#endif /* __WMGR_H__ */ diff --git a/drivers/staging/vt6656/wpa.h b/drivers/staging/vt6656/wpa.h index 661f40d..889489a 100644 --- a/drivers/staging/vt6656/wpa.h +++ b/drivers/staging/vt6656/wpa.h @@ -81,4 +81,4 @@ WPAb_Is_RSN( PWLAN_IE_RSN_EXT pRSN ); -#endif // __WPA_H__ +#endif /* __WPA_H__ */ diff --git a/drivers/staging/vt6656/wpa2.h b/drivers/staging/vt6656/wpa2.h index 6026005..367aece 100644 --- a/drivers/staging/vt6656/wpa2.h +++ b/drivers/staging/vt6656/wpa2.h @@ -75,4 +75,4 @@ WPA2uSetIEs( OUT PWLAN_IE_RSN pRSNIEs ); -#endif // __WPA2_H__ +#endif /* __WPA2_H__ */ diff --git a/drivers/staging/vt6656/wpactl.h b/drivers/staging/vt6656/wpactl.h index 56179f0..3a2f15f 100644 --- a/drivers/staging/vt6656/wpactl.h +++ b/drivers/staging/vt6656/wpactl.h @@ -66,7 +66,4 @@ int wpa_set_wpadev(PSDevice pDevice, int val); int wpa_ioctl(PSDevice pDevice, struct iw_point *p); int wpa_set_keys(PSDevice pDevice, void *ctx, BOOL fcpfkernel); -#endif // __WPACL_H__ - - - +#endif /* __WPACL_H__ */ -- cgit v0.10.2 From 92f2a4c58f8dd8d517360660b94915edb804f125 Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sun, 2 May 2010 09:33:26 +0200 Subject: Staging: winbond: Renamed README to TODO and corrected Pavel's mail Signed-off-by: Lars Lindley Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/README b/drivers/staging/winbond/README deleted file mode 100644 index 2771024..0000000 --- a/drivers/staging/winbond/README +++ /dev/null @@ -1,12 +0,0 @@ -TODO: - - sparse cleanups - - checkpatch cleanups - - kerneldoc cleanups - - fix severeCamelCaseInfestation - - remove typedefs - - remove unused ioctls - - use cfg80211 for regulatory stuff - - fix 4k stack problems - -Please send patches to Greg Kroah-Hartman and -Pavel Machek diff --git a/drivers/staging/winbond/TODO b/drivers/staging/winbond/TODO new file mode 100644 index 0000000..8c1baaf --- /dev/null +++ b/drivers/staging/winbond/TODO @@ -0,0 +1,12 @@ +TODO: + - sparse cleanups + - checkpatch cleanups + - kerneldoc cleanups + - fix severeCamelCaseInfestation + - remove typedefs + - remove unused ioctls + - use cfg80211 for regulatory stuff + - fix 4k stack problems + +Please send patches to Greg Kroah-Hartman and +Pavel Machek -- cgit v0.10.2 From 4212c686381a0ab62601ea7a272e7ff4c2ea4cb7 Mon Sep 17 00:00:00 2001 From: Javier Martinez Canillas Date: Sun, 2 May 2010 13:05:33 -0400 Subject: Staging: adis16255: Fix compile error This patch solves a compilation error in today linux-next tree. The adis16255 staging driver Makefile seems to be wrong. I think this patch solves the issue. Signed-off-by: Javier Martinez Canillas Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/adis16255/Makefile b/drivers/staging/adis16255/Makefile index 3f8b1f0..8057372 100644 --- a/drivers/staging/adis16255/Makefile +++ b/drivers/staging/adis16255/Makefile @@ -1 +1 @@ -obj-$(CONFIG_ADIS16255) +údis16255.o +obj-$(CONFIG_ADIS16255) += adis1625.o -- cgit v0.10.2 From 4752e51a1dcab1a17a1ee0b46735465a033d83b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Sun, 2 May 2010 18:29:57 -0700 Subject: Staging: crystalhd: Cleanup all WIN* references MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/crystalhd/TODO b/drivers/staging/crystalhd/TODO index 69be5d0..daca2d4 100644 --- a/drivers/staging/crystalhd/TODO +++ b/drivers/staging/crystalhd/TODO @@ -1,7 +1,6 @@ - Testing - Cleanup return codes - Cleanup typedefs -- Cleanup all WIN* references - Allocate an Accelerator device class specific Major number, since we don't have any other open sourced accelerators, it is the only one in that category for now. diff --git a/drivers/staging/crystalhd/bc_dts_defs.h b/drivers/staging/crystalhd/bc_dts_defs.h index c34cc07..f9dd0e3 100644 --- a/drivers/staging/crystalhd/bc_dts_defs.h +++ b/drivers/staging/crystalhd/bc_dts_defs.h @@ -238,7 +238,7 @@ typedef struct _BC_PIB_EXT_VC1 { /*------------------------------------------------------* * Picture Information Block * *------------------------------------------------------*/ -#if defined(_WIN32) || defined(_WIN64) || defined(__LINUX_USER__) +#if defined(__LINUX_USER__) /* Values for 'pulldown' field. '0' means no pulldown information * was present for this picture. */ enum { @@ -358,7 +358,7 @@ enum { #define VDEC_FLAG_PICTURE_META_DATA_PRESENT (0x40000) -#endif /* _WIN32 || _WIN64 */ +#endif /* __LINUX_USER__ */ enum _BC_OUTPUT_FORMAT { MODE420 = 0x0, diff --git a/drivers/staging/crystalhd/bc_dts_types.h b/drivers/staging/crystalhd/bc_dts_types.h index 95a2f87..6fd8089 100644 --- a/drivers/staging/crystalhd/bc_dts_types.h +++ b/drivers/staging/crystalhd/bc_dts_types.h @@ -29,15 +29,6 @@ #include #endif -#if defined(_WIN64) || defined(_WIN32) -typedef uint32_t U32; -typedef int32_t S32; -typedef uint16_t U16; -typedef int16_t S16; -typedef unsigned char U8; -typedef char S8; -#endif - #ifndef PVOID typedef void *PVOID; #endif @@ -46,20 +37,6 @@ typedef void *PVOID; typedef int BOOL; #endif -#ifdef WIN32 - typedef unsigned __int64 U64; -#elif defined(_WIN64) - typedef uint64_t U64; -#endif - -#ifdef _WIN64 -#if !(defined(POINTER_32)) -#define POINTER_32 __ptr32 -#endif -#else /* _WIN32 */ -#define POINTER_32 -#endif - #if defined(__KERNEL__) || defined(__LINUX_USER__) #ifdef __LINUX_USER__ /* Don't include these for KERNEL */ -- cgit v0.10.2 From 3b87d0aa352a3eec3f5a032aa9d6f2ac46e7a74c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Sun, 2 May 2010 18:50:16 -0700 Subject: Staging: crystalhd: remove unused #include MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/crystalhd/crystalhd_misc.h b/drivers/staging/crystalhd/crystalhd_misc.h index a2aa6ad..84331cd 100644 --- a/drivers/staging/crystalhd/crystalhd_misc.h +++ b/drivers/staging/crystalhd/crystalhd_misc.h @@ -34,7 +34,6 @@ #include #include #include -#include #include #include #include "bc_dts_glob_lnx.h" -- cgit v0.10.2 From b8c623e5dde98a00ada4af47bec92a708794c573 Mon Sep 17 00:00:00 2001 From: Iain Churcher Date: Mon, 3 May 2010 10:35:37 +0100 Subject: Staging: comedi: Fix Checkpatch.pl issues in mpc624.c This patch resolves all checkpatch.pl issues in the mpc624.c file Signed-off-by: Iain Churcher Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/mpc624.c b/drivers/staging/comedi/drivers/mpc624.c index 12e72c8..9874ac3 100644 --- a/drivers/staging/comedi/drivers/mpc624.c +++ b/drivers/staging/comedi/drivers/mpc624.c @@ -40,20 +40,20 @@ Status: working Configuration Options: [0] - I/O base address [1] - convertion rate - Convertion rate RMS noise Effective Number Of Bits - 0 3.52kHz 23uV 17 - 1 1.76kHz 3.5uV 20 - 2 880Hz 2uV 21.3 - 3 440Hz 1.4uV 21.8 - 4 220Hz 1uV 22.4 - 5 110Hz 750uV 22.9 - 6 55Hz 510nV 23.4 - 7 27.5Hz 375nV 24 - 8 13.75Hz 250nV 24.4 - 9 6.875Hz 200nV 24.6 - [2] - voltage range - 0 -1.01V .. +1.01V - 1 -10.1V .. +10.1V + Convertion rate RMS noise Effective Number Of Bits + 0 3.52kHz 23uV 17 + 1 1.76kHz 3.5uV 20 + 2 880Hz 2uV 21.3 + 3 440Hz 1.4uV 21.8 + 4 220Hz 1uV 22.4 + 5 110Hz 750uV 22.9 + 6 55Hz 510nV 23.4 + 7 27.5Hz 375nV 24 + 8 13.75Hz 250nV 24.4 + 9 6.875Hz 200nV 24.6 + [2] - voltage range + 0 -1.01V .. +1.01V + 1 -10.1V .. +10.1V */ #include "../comedidev.h" @@ -65,13 +65,13 @@ Configuration Options: #define MPC624_SIZE 16 /* Offsets of different ports */ -#define MPC624_MASTER_CONTROL 0 /* not used */ -#define MPC624_GNMUXCH 1 /* Gain, Mux, Channel of ADC */ -#define MPC624_ADC 2 /* read/write to/from ADC */ -#define MPC624_EE 3 /* read/write to/from serial EEPROM via I2C */ -#define MPC624_LEDS 4 /* write to LEDs */ -#define MPC624_DIO 5 /* read/write to/from digital I/O ports */ -#define MPC624_IRQ_MASK 6 /* IRQ masking enable/disable */ +#define MPC624_MASTER_CONTROL 0 /* not used */ +#define MPC624_GNMUXCH 1 /* Gain, Mux, Channel of ADC */ +#define MPC624_ADC 2 /* read/write to/from ADC */ +#define MPC624_EE 3 /* read/write to/from serial EEPROM via I2C */ +#define MPC624_LEDS 4 /* write to LEDs */ +#define MPC624_DIO 5 /* read/write to/from digital I/O ports */ +#define MPC624_IRQ_MASK 6 /* IRQ masking enable/disable */ /* Register bits' names */ #define MPC624_ADBUSY (1<<5) @@ -109,24 +109,27 @@ Configuration Options: * ^ - Effective Number Of Bits */ -#define MPC624_SPEED_3_52_kHz (MPC624_OSR4 | MPC624_OSR0) -#define MPC624_SPEED_1_76_kHz (MPC624_OSR4 | MPC624_OSR1) -#define MPC624_SPEED_880_Hz (MPC624_OSR4 | MPC624_OSR1 | MPC624_OSR0) -#define MPC624_SPEED_440_Hz (MPC624_OSR4 | MPC624_OSR2) -#define MPC624_SPEED_220_Hz (MPC624_OSR4 | MPC624_OSR2 | MPC624_OSR0) -#define MPC624_SPEED_110_Hz (MPC624_OSR4 | MPC624_OSR2 | MPC624_OSR1) -#define MPC624_SPEED_55_Hz (MPC624_OSR4 | MPC624_OSR2 | MPC624_OSR1 | MPC624_OSR0) -#define MPC624_SPEED_27_5_Hz (MPC624_OSR4 | MPC624_OSR3) -#define MPC624_SPEED_13_75_Hz (MPC624_OSR4 | MPC624_OSR3 | MPC624_OSR0) -#define MPC624_SPEED_6_875_Hz (MPC624_OSR4 | MPC624_OSR3 | MPC624_OSR2 | MPC624_OSR1 | MPC624_OSR0) -/* ---------------------------------------------------------------------------- */ +#define MPC624_SPEED_3_52_kHz (MPC624_OSR4 | MPC624_OSR0) +#define MPC624_SPEED_1_76_kHz (MPC624_OSR4 | MPC624_OSR1) +#define MPC624_SPEED_880_Hz (MPC624_OSR4 | MPC624_OSR1 | MPC624_OSR0) +#define MPC624_SPEED_440_Hz (MPC624_OSR4 | MPC624_OSR2) +#define MPC624_SPEED_220_Hz (MPC624_OSR4 | MPC624_OSR2 | MPC624_OSR0) +#define MPC624_SPEED_110_Hz (MPC624_OSR4 | MPC624_OSR2 | MPC624_OSR1) +#define MPC624_SPEED_55_Hz \ + (MPC624_OSR4 | MPC624_OSR2 | MPC624_OSR1 | MPC624_OSR0) +#define MPC624_SPEED_27_5_Hz (MPC624_OSR4 | MPC624_OSR3) +#define MPC624_SPEED_13_75_Hz (MPC624_OSR4 | MPC624_OSR3 | MPC624_OSR0) +#define MPC624_SPEED_6_875_Hz \ + (MPC624_OSR4 | MPC624_OSR3 | MPC624_OSR2 | MPC624_OSR1 | MPC624_OSR0) +/* -------------------------------------------------------------------------- */ struct skel_private { - unsigned long int ulConvertionRate; /* set by mpc624_attach() from driver's parameters */ + /* set by mpc624_attach() from driver's parameters */ + unsigned long int ulConvertionRate; }; #define devpriv ((struct skel_private *)dev->private) -/* ---------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ static const struct comedi_lrange range_mpc624_bipolar1 = { 1, { @@ -145,11 +148,11 @@ static const struct comedi_lrange range_mpc624_bipolar10 = { } }; -/* ---------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ static int mpc624_attach(struct comedi_device *dev, struct comedi_devconfig *it); static int mpc624_detach(struct comedi_device *dev); -/* ---------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ static struct comedi_driver driver_mpc624 = { .driver_name = "mpc624", .module = THIS_MODULE, @@ -157,20 +160,20 @@ static struct comedi_driver driver_mpc624 = { .detach = mpc624_detach }; -/* ---------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ static int mpc624_ai_rinsn(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); -/* ---------------------------------------------------------------------------- */ +/* -------------------------------------------------------------------------- */ static int mpc624_attach(struct comedi_device *dev, struct comedi_devconfig *it) { struct comedi_subdevice *s; unsigned long iobase; iobase = it->options[0]; - printk("comedi%d: mpc624 [0x%04lx, ", dev->minor, iobase); + printk(KERN_INFO "comedi%d: mpc624 [0x%04lx, ", dev->minor, iobase); if (request_region(iobase, MPC624_SIZE, "mpc624") == NULL) { - printk("I/O port(s) in use\n"); + printk(KERN_ERR "I/O port(s) in use\n"); return -EIO; } @@ -184,47 +187,48 @@ static int mpc624_attach(struct comedi_device *dev, struct comedi_devconfig *it) switch (it->options[1]) { case 0: devpriv->ulConvertionRate = MPC624_SPEED_3_52_kHz; - printk("3.52 kHz, "); + printk(KERN_INFO "3.52 kHz, "); break; case 1: devpriv->ulConvertionRate = MPC624_SPEED_1_76_kHz; - printk("1.76 kHz, "); + printk(KERN_INFO "1.76 kHz, "); break; case 2: devpriv->ulConvertionRate = MPC624_SPEED_880_Hz; - printk("880 Hz, "); + printk(KERN_INFO "880 Hz, "); break; case 3: devpriv->ulConvertionRate = MPC624_SPEED_440_Hz; - printk("440 Hz, "); + printk(KERN_INFO "440 Hz, "); break; case 4: devpriv->ulConvertionRate = MPC624_SPEED_220_Hz; - printk("220 Hz, "); + printk(KERN_INFO "220 Hz, "); break; case 5: devpriv->ulConvertionRate = MPC624_SPEED_110_Hz; - printk("110 Hz, "); + printk(KERN_INFO "110 Hz, "); break; case 6: devpriv->ulConvertionRate = MPC624_SPEED_55_Hz; - printk("55 Hz, "); + printk(KERN_INFO "55 Hz, "); break; case 7: devpriv->ulConvertionRate = MPC624_SPEED_27_5_Hz; - printk("27.5 Hz, "); + printk(KERN_INFO "27.5 Hz, "); break; case 8: devpriv->ulConvertionRate = MPC624_SPEED_13_75_Hz; - printk("13.75 Hz, "); + printk(KERN_INFO "13.75 Hz, "); break; case 9: devpriv->ulConvertionRate = MPC624_SPEED_6_875_Hz; - printk("6.875 Hz, "); + printk(KERN_INFO "6.875 Hz, "); break; default: printk - ("illegal convertion rate setting! Valid numbers are 0..9. Using 9 => 6.875 Hz, "); + (KERN_ERR "illegal convertion rate setting!" + " Valid numbers are 0..9. Using 9 => 6.875 Hz, "); devpriv->ulConvertionRate = MPC624_SPEED_3_52_kHz; } @@ -239,29 +243,29 @@ static int mpc624_attach(struct comedi_device *dev, struct comedi_devconfig *it) switch (it->options[1]) { default: s->maxdata = 0x3FFFFFFF; - printk("30 bit, "); + printk(KERN_INFO "30 bit, "); } switch (it->options[1]) { case 0: s->range_table = &range_mpc624_bipolar1; - printk("1.01V]: "); + printk(KERN_INFO "1.01V]: "); break; default: s->range_table = &range_mpc624_bipolar10; - printk("10.1V]: "); + printk(KERN_INFO "10.1V]: "); } s->len_chanlist = 1; s->insn_read = mpc624_ai_rinsn; - printk("attached\n"); + printk(KERN_INFO "attached\n"); return 1; } static int mpc624_detach(struct comedi_device *dev) { - printk("comedi%d: mpc624: remove\n", dev->minor); + printk(KERN_INFO "comedi%d: mpc624: remove\n", dev->minor); if (dev->iobase) release_region(dev->iobase, MPC624_SIZE); @@ -280,11 +284,14 @@ static int mpc624_ai_rinsn(struct comedi_device *dev, unsigned long int data_in, data_out; unsigned char ucPort; - /* WARNING: We always write 0 to GNSWA bit, so the channel range is +-/10.1Vdc */ + /* + * WARNING: + * We always write 0 to GNSWA bit, so the channel range is +-/10.1Vdc + */ outb(insn->chanspec, dev->iobase + MPC624_GNMUXCH); -/* printk("Channel %d: \n", insn->chanspec); */ +/* printk("Channel %d:\n", insn->chanspec); */ if (!insn->n) { - printk("MPC624: Warning, no data to acquire\n"); + printk(KERN_INFO "MPC624: Warning, no data to acquire\n"); return 0; } @@ -306,7 +313,7 @@ static int mpc624_ai_rinsn(struct comedi_device *dev, break; } if (i == TIMEOUT) { - printk("MPC624: timeout (%dms)\n", TIMEOUT); + printk(KERN_ERR "MPC624: timeout (%dms)\n", TIMEOUT); data[n] = 0; return -ETIMEDOUT; } @@ -319,7 +326,7 @@ static int mpc624_ai_rinsn(struct comedi_device *dev, outb(0, dev->iobase + MPC624_ADC); udelay(1); - if (data_out & (1 << 31)) { /* the next bit is a 1 */ + if (data_out & (1 << 31)) { /* the next bit is a 1 */ /* Set the ADSDI line (send to MPC624) */ outb(MPC624_ADSDI, dev->iobase + MPC624_ADC); udelay(1); @@ -344,31 +351,47 @@ static int mpc624_ai_rinsn(struct comedi_device *dev, data_out <<= 1; } - /* Received 32-bit long value consist of: */ - /* 31: EOC (End Of Transmission) bit - should be 0 */ - /* 30: DMY (Dummy) bit - should be 0 */ - /* 29: SIG (Sign) bit - 1 if the voltage is positive, 0 if negative */ - /* 28: MSB (Most Significant Bit) - the first bit of convertion result */ - /* .... */ - /* 05: LSB (Least Significant Bit) - the last bit of convertion result */ - /* 04: sub-LSB - sub-LSBs are basically noise, but when */ - /* 03: sub-LSB averaged properly, they can increase convertion */ - /* 02: sub-LSB precision up to 29 bits; they can be discarded */ - /* 01: sub-LSB without loss of resolution. */ - /* 00: sub-LSB */ + /* + * Received 32-bit long value consist of: + * 31: EOC - + * (End Of Transmission) bit - should be 0 + * 30: DMY + * (Dummy) bit - should be 0 + * 29: SIG + * (Sign) bit- 1 if the voltage is positive, + * 0 if negative + * 28: MSB + * (Most Significant Bit) - the first bit of + * the conversion result + * .... + * 05: LSB + * (Least Significant Bit)- the last bit of the + * conversion result + * 04-00: sub-LSB + * - sub-LSBs are basically noise, but when + * averaged properly, they can increase conversion + * precision up to 29 bits; they can be discarded + * without loss of resolution. + */ if (data_in & MPC624_EOC_BIT) - printk("MPC624: EOC bit is set (data_in=%lu)!", + printk(KERN_INFO "MPC624:EOC bit is set (data_in=%lu)!", data_in); if (data_in & MPC624_DMY_BIT) - printk("MPC624: DMY bit is set (data_in=%lu)!", + printk(KERN_INFO "MPC624:DMY bit is set (data_in=%lu)!", data_in); - if (data_in & MPC624_SGN_BIT) { /* check the sign bit *//* The voltage is positive */ - data_in &= 0x3FFFFFFF; /* EOC and DMY should be 0, but we will mask them out just to be sure */ - data[n] = data_in; /* comedi operates on unsigned numbers, so we don't clear the SGN bit */ - /* SGN bit is still set! It's correct, since we're converting to unsigned. */ - } else { /* The voltage is negative */ - /* data_in contains a number in 30-bit two's complement code and we must deal with it */ + if (data_in & MPC624_SGN_BIT) { /* Volatge is positive */ + /* + * comedi operates on unsigned numbers, so mask off EOC + * and DMY and don't clear the SGN bit + */ + data_in &= 0x3FFFFFFF; + data[n] = data_in; + } else { /* The voltage is negative */ + /* + * data_in contains a number in 30-bit two's complement + * code and we must deal with it + */ data_in |= MPC624_SGN_BIT; data_in = ~data_in; data_in += 1; -- cgit v0.10.2 From f0f29184d84bca9e070e48d61ef5ec8f3ff3cde5 Mon Sep 17 00:00:00 2001 From: Mark Rankilor Date: Mon, 3 May 2010 17:39:09 +0800 Subject: Staging: comedi: Moved some EXPORT_SYMBOL() macros This is a patch to range.c that rearranges some EXPORT_SYMBOL() macros to please checkpatch.pl Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/range.c b/drivers/staging/comedi/range.c index 6b03a69..8a1cefd 100644 --- a/drivers/staging/comedi/range.c +++ b/drivers/staging/comedi/range.c @@ -25,16 +25,16 @@ #include const struct comedi_lrange range_bipolar10 = { 1, {BIP_RANGE(10)} }; -const struct comedi_lrange range_bipolar5 = { 1, {BIP_RANGE(5)} }; -const struct comedi_lrange range_bipolar2_5 = { 1, {BIP_RANGE(2.5)} }; -const struct comedi_lrange range_unipolar10 = { 1, {UNI_RANGE(10)} }; -const struct comedi_lrange range_unipolar5 = { 1, {UNI_RANGE(5)} }; -const struct comedi_lrange range_unknown = { 1, {{0, 1000000, UNIT_none} } }; EXPORT_SYMBOL(range_bipolar10); +const struct comedi_lrange range_bipolar5 = { 1, {BIP_RANGE(5)} }; EXPORT_SYMBOL(range_bipolar5); +const struct comedi_lrange range_bipolar2_5 = { 1, {BIP_RANGE(2.5)} }; EXPORT_SYMBOL(range_bipolar2_5); +const struct comedi_lrange range_unipolar10 = { 1, {UNI_RANGE(10)} }; EXPORT_SYMBOL(range_unipolar10); +const struct comedi_lrange range_unipolar5 = { 1, {UNI_RANGE(5)} }; EXPORT_SYMBOL(range_unipolar5); +const struct comedi_lrange range_unknown = { 1, {{0, 1000000, UNIT_none} } }; EXPORT_SYMBOL(range_unknown); /* -- cgit v0.10.2 From aad4029a49e17d8529b8b802d4ecd774ef941f7c Mon Sep 17 00:00:00 2001 From: Mark Rankilor Date: Mon, 3 May 2010 18:07:36 +0800 Subject: Staging: comedi: Adjusted some long line lengths in drivers.c This patch fixes some long line lengths in drivers.c that checkpatch.pl was complaining about Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index d7a4509..a8f3d79 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -172,7 +172,8 @@ attached: } if (!dev->board_name) { - printk(KERN_WARNING "BUG: dev->board_name=<%p>\n", dev->board_name); + printk(KERN_WARNING "BUG: dev->board_name=<%p>\n", + dev->board_name); dev->board_name = "BUG"; } smp_wmb(); @@ -374,8 +375,9 @@ static int insn_rw_emulate_bits(struct comedi_device *dev, if (insn->insn == INSN_WRITE) { if (!(s->subdev_flags & SDF_WRITABLE)) return -EINVAL; - new_data[0] = 1 << (chan - base_bitfield_channel); /* mask */ - new_data[1] = data[0] ? (1 << (chan - base_bitfield_channel)) : 0; /* bits */ + new_data[0] = 1 << (chan - base_bitfield_channel); /* mask */ + new_data[1] = data[0] ? (1 << (chan - base_bitfield_channel)) + : 0; /* bits */ } ret = s->insn_bits(dev, s, &new_insn, new_data); -- cgit v0.10.2 From 3b9fdcd5e85104e622c0ec5f626c81b831ddfae2 Mon Sep 17 00:00:00 2001 From: Iain Churcher Date: Mon, 3 May 2010 11:54:53 +0100 Subject: Staging: comedi: Fix all checkpatch.pl issues in dt2811.c Patch resolves all checkpatch.pl isues in dt2811.c Signed-off-by: Iain Churcher Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/dt2811.c b/drivers/staging/comedi/drivers/dt2811.c index 51ef695..ea9bfb7 100644 --- a/drivers/staging/comedi/drivers/dt2811.c +++ b/drivers/staging/comedi/drivers/dt2811.c @@ -34,13 +34,13 @@ Configuration options: [0] - I/O port base address [1] - IRQ, although this is currently unused [2] - A/D reference - 0 = signle-ended - 1 = differential + 0 = signle-ended + 1 = differential 2 = pseudo-differential (common reference) [3] - A/D range - 0 = [-5,5] - 1 = [-2.5,2.5] - 2 = [0,5] + 0 = [-5, 5] + 1 = [-2.5, 2.5] + 2 = [0, 5] [4] - D/A 0 range (same choices) [4] - D/A 1 range (same choices) */ @@ -52,96 +52,58 @@ Configuration options: static const char *driver_name = "dt2811"; -static const struct comedi_lrange range_dt2811_pgh_ai_5_unipolar = { 4, { - RANGE - (0, 5), - RANGE - (0, - 2.5), - RANGE - (0, - 1.25), - RANGE - (0, - 0.625) - } +static const struct comedi_lrange range_dt2811_pgh_ai_5_unipolar = { + 4, { + RANGE(0, 5), + RANGE(0, 2.5), + RANGE(0, 1.25), + RANGE(0, 0.625) + } }; -static const struct comedi_lrange range_dt2811_pgh_ai_2_5_bipolar = { 4, { - RANGE - (-2.5, - 2.5), - RANGE - (-1.25, - 1.25), - RANGE - (-0.625, - 0.625), - RANGE - (-0.3125, - 0.3125) - } +static const struct comedi_lrange range_dt2811_pgh_ai_2_5_bipolar = { + 4, { + RANGE(-2.5, 2.5), + RANGE(-1.25, 1.25), + RANGE(-0.625, 0.625), + RANGE(-0.3125, 0.3125) + } }; -static const struct comedi_lrange range_dt2811_pgh_ai_5_bipolar = { 4, { - RANGE - (-5, 5), - RANGE - (-2.5, - 2.5), - RANGE - (-1.25, - 1.25), - RANGE - (-0.625, - 0.625) - } +static const struct comedi_lrange range_dt2811_pgh_ai_5_bipolar = { + 4, { + RANGE(-5, 5), + RANGE(-2.5, 2.5), + RANGE(-1.25, 1.25), + RANGE(-0.625, 0.625) + } }; -static const struct comedi_lrange range_dt2811_pgl_ai_5_unipolar = { 4, { - RANGE - (0, 5), - RANGE - (0, - 0.5), - RANGE - (0, - 0.05), - RANGE - (0, - 0.01) - } +static const struct comedi_lrange range_dt2811_pgl_ai_5_unipolar = { + 4, { + RANGE(0, 5), + RANGE(0, 0.5), + RANGE(0, 0.05), + RANGE(0, 0.01) + } }; -static const struct comedi_lrange range_dt2811_pgl_ai_2_5_bipolar = { 4, { - RANGE - (-2.5, - 2.5), - RANGE - (-0.25, - 0.25), - RANGE - (-0.025, - 0.025), - RANGE - (-0.005, - 0.005) - } +static const struct comedi_lrange range_dt2811_pgl_ai_2_5_bipolar = { + 4, { + RANGE(-2.5, 2.5), + RANGE(-0.25, 0.25), + RANGE(-0.025, 0.025), + RANGE(-0.005, 0.005) + } }; -static const struct comedi_lrange range_dt2811_pgl_ai_5_bipolar = { 4, { - RANGE - (-5, 5), - RANGE - (-0.5, - 0.5), - RANGE - (-0.05, - 0.05), - RANGE - (-0.01, - 0.01) - } +static const struct comedi_lrange range_dt2811_pgl_ai_5_bipolar = { + 4, { + RANGE(-5, 5), + RANGE(-0.5, 0.5), + RANGE(-0.05, 0.05), + RANGE(-0.01, 0.01) + } }; /* @@ -348,21 +310,21 @@ static irqreturn_t dt2811_interrupt(int irq, void *d) options[0] Board base address options[1] IRQ options[2] Input configuration - 0 == single-ended - 1 == differential - 2 == pseudo-differential + 0 == single-ended + 1 == differential + 2 == pseudo-differential options[3] Analog input range configuration - 0 == bipolar 5 (-5V -- +5V) - 1 == bipolar 2.5V (-2.5V -- +2.5V) - 2 == unipolar 5V (0V -- +5V) + 0 == bipolar 5 (-5V -- +5V) + 1 == bipolar 2.5V (-2.5V -- +2.5V) + 2 == unipolar 5V (0V -- +5V) options[4] Analog output 0 range configuration - 0 == bipolar 5 (-5V -- +5V) - 1 == bipolar 2.5V (-2.5V -- +2.5V) - 2 == unipolar 5V (0V -- +5V) + 0 == bipolar 5 (-5V -- +5V) + 1 == bipolar 2.5V (-2.5V -- +2.5V) + 2 == unipolar 5V (0V -- +5V) options[5] Analog output 1 range configuration - 0 == bipolar 5 (-5V -- +5V) - 1 == bipolar 2.5V (-2.5V -- +2.5V) - 2 == unipolar 5V (0V -- +5V) + 0 == bipolar 5 (-5V -- +5V) + 1 == bipolar 2.5V (-2.5V -- +2.5V) + 2 == unipolar 5V (0V -- +5V) */ static int dt2811_attach(struct comedi_device *dev, struct comedi_devconfig *it) @@ -377,10 +339,10 @@ static int dt2811_attach(struct comedi_device *dev, struct comedi_devconfig *it) iobase = it->options[0]; - printk("comedi%d: dt2811: base=0x%04lx\n", dev->minor, iobase); + printk(KERN_INFO "comedi%d: dt2811:base=0x%04lx\n", dev->minor, iobase); if (!request_region(iobase, DT2811_SIZE, driver_name)) { - printk("I/O port conflict\n"); + printk(KERN_ERR "I/O port conflict\n"); return -EIO; } @@ -410,25 +372,25 @@ static int dt2811_attach(struct comedi_device *dev, struct comedi_devconfig *it) irq = probe_irq_off(irqs); restore_flags(flags); - /*outb(DT2811_CLRERROR|DT2811_INTENB,dev->iobase+DT2811_ADCSR); */ + /*outb(DT2811_CLRERROR|DT2811_INTENB, + dev->iobase+DT2811_ADCSR);*/ - if (inb(dev->iobase + DT2811_ADCSR) & DT2811_ADERROR) { - printk("error probing irq (bad) \n"); - } + if (inb(dev->iobase + DT2811_ADCSR) & DT2811_ADERROR) + printk(KERN_ERR "error probing irq (bad)\n"); dev->irq = 0; if (irq > 0) { i = inb(dev->iobase + DT2811_ADDATLO); i = inb(dev->iobase + DT2811_ADDATHI); - printk("(irq = %d)\n", irq); + printk(KERN_INFO "(irq = %d)\n", irq); ret = request_irq(irq, dt2811_interrupt, 0, driver_name, dev); if (ret < 0) return -EIO; dev->irq = irq; } else if (irq == 0) { - printk("(no irq)\n"); + printk(KERN_INFO "(no irq)\n"); } else { - printk("( multiple irq's -- this is bad! )\n"); + printk(KERN_ERR "( multiple irq's -- this is bad! )\n"); } } #endif @@ -540,14 +502,12 @@ static int dt2811_attach(struct comedi_device *dev, struct comedi_devconfig *it) static int dt2811_detach(struct comedi_device *dev) { - printk("comedi%d: dt2811: remove\n", dev->minor); + printk(KERN_INFO "comedi%d: dt2811: remove\n", dev->minor); - if (dev->irq) { + if (dev->irq) free_irq(dev->irq, dev); - } - if (dev->iobase) { + if (dev->iobase) release_region(dev->iobase, DT2811_SIZE); - } return 0; } @@ -579,7 +539,7 @@ static int dt2811_ai_insn(struct comedi_device *dev, struct comedi_subdevice *s, #if 0 /* Wow. This is code from the Comedi stone age. But it hasn't been * replaced, so I'll let it stay. */ -int dt2811_adtrig(kdev_t minor, comedi_adtrig * adtrig) +int dt2811_adtrig(kdev_t minor, comedi_adtrig *adtrig) { struct comedi_device *dev = comedi_devices + minor; @@ -589,8 +549,10 @@ int dt2811_adtrig(kdev_t minor, comedi_adtrig * adtrig) switch (dev->i_admode) { case COMEDI_MDEMAND: dev->ntrig = adtrig->n - 1; + /* not neccessary */ /*printk("dt2811: AD soft trigger\n"); */ - /*outb(DT2811_CLRERROR|DT2811_INTENB,dev->iobase+DT2811_ADCSR); *//* not neccessary */ + /*outb(DT2811_CLRERROR|DT2811_INTENB, + dev->iobase+DT2811_ADCSR); */ outb(dev->curadchan, dev->iobase + DT2811_ADGCR); do_gettimeofday(&trigtime); break; @@ -630,9 +592,8 @@ static int dt2811_ao_insn_read(struct comedi_device *dev, chan = CR_CHAN(insn->chanspec); - for (i = 0; i < insn->n; i++) { + for (i = 0; i < insn->n; i++) data[i] = devpriv->ao_readback[chan]; - } return i; } -- cgit v0.10.2 From e6e4d05d4d440f1989f696baa146263957593345 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Mon, 3 May 2010 11:02:44 -0700 Subject: Staging: cxt1e1: fix cxt1e1 module names On Mon, 2010-05-03 at 10:09 -0700, Randy Dunlap wrote: > Lots of cxt1e1 source code uses THIS_MODULE->name, which won't build > when CONFIG_MODULES is not enabled, so use KBUILD_MODNAME instead. Perhaps a conversion to pr_ is better? Signed-off-by: Joe Perches Acked-by: Randy Dunlap Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/cxt1e1/functions.c b/drivers/staging/cxt1e1/functions.c index c95c62d..738129d 100644 --- a/drivers/staging/cxt1e1/functions.c +++ b/drivers/staging/cxt1e1/functions.c @@ -11,6 +11,8 @@ * GNU General Public License for more details. */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include #include #include @@ -117,7 +119,7 @@ watchdog_func (unsigned long arg) if (drvr_state != SBE_DRVR_AVAILABLE) { if (log_level >= LOG_MONITOR) - printk (KERN_WARNING "watchdog_func: drvr not available (%x)\n", drvr_state); + pr_warning("%s: drvr not available (%x)\n", __func__, drvr_state); return; } #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) diff --git a/drivers/staging/cxt1e1/hwprobe.c b/drivers/staging/cxt1e1/hwprobe.c index 0f9d653..571fa1f 100644 --- a/drivers/staging/cxt1e1/hwprobe.c +++ b/drivers/staging/cxt1e1/hwprobe.c @@ -12,6 +12,8 @@ * GNU General Public License for more details. */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include #include #include @@ -230,7 +232,7 @@ c4_hdw_init (struct pci_dev * pdev, int found) /* our MUSYCC chip supports two functions, 0 & 1 */ if ((fun = PCI_FUNC (pdev->devfn)) > 1) { - printk (KERN_WARNING "%s: unexpected devfun: 0x%x\n", THIS_MODULE->name, pdev->devfn); + pr_warning("unexpected devfun: 0x%x\n", pdev->devfn); return 0; } if (pdev->bus) /* obtain bus number */ @@ -259,8 +261,7 @@ c4_hdw_init (struct pci_dev * pdev, int found) if (i == MAX_BOARDS) /* no match in above loop means MAX * exceeded */ { - printk (KERN_WARNING "%s: exceeded number of allowed devices (>%d)?\n", - THIS_MODULE->name, MAX_BOARDS); + pr_warning("exceeded number of allowed devices (>%d)?\n", MAX_BOARDS); return 0; } if (pdev->bus) @@ -319,7 +320,7 @@ c4hw_attach_all (void) } if (!found) { - printk (KERN_WARNING "%s: No boards found.\n", THIS_MODULE->name); + pr_warning("No boards found\n"); return ENODEV; } /* sanity check for consistant hardware found */ @@ -327,7 +328,8 @@ c4hw_attach_all (void) { if (hi->pci_slot != 0xff && (!hi->addr[0] || !hi->addr[1])) { - printk (KERN_WARNING "%s: something very wrong with pci_get_device.\n", hi->devname); + pr_warning("%s: something very wrong with pci_get_device\n", + hi->devname); return EIO; } } @@ -340,22 +342,22 @@ c4hw_attach_all (void) { if (request_mem_region (hi->addr[j], hi->len[j], hi->devname) == 0) { - printk (KERN_WARNING "%s: memory in use, addr=0x%lx, len=0x%lx ?\n", - hi->devname, hi->addr[j], hi->len[j]); + pr_warning("%s: memory in use, addr=0x%lx, len=0x%lx ?\n", + hi->devname, hi->addr[j], hi->len[j]); cleanup_ioremap (); return ENOMEM; } hi->addr_mapped[j] = (unsigned long) ioremap (hi->addr[j], hi->len[j]); if (!hi->addr_mapped[j]) { - printk (KERN_WARNING "%s: ioremap fails, addr=0x%lx, len=0x%lx ?\n", - hi->devname, hi->addr[j], hi->len[j]); + pr_warning("%s: ioremap fails, addr=0x%lx, len=0x%lx ?\n", + hi->devname, hi->addr[j], hi->len[j]); cleanup_ioremap (); return ENOMEM; } #ifdef SBE_MAP_DEBUG - printk (KERN_WARNING "%s: io remapped from phys %x to virt %x\n", - hi->devname, (u_int32_t) hi->addr[j], (u_int32_t) hi->addr_mapped[j]); + pr_warning("%s: io remapped from phys %x to virt %x\n", + hi->devname, (u_int32_t) hi->addr[j], (u_int32_t) hi->addr_mapped[j]); #endif } } @@ -371,8 +373,8 @@ c4hw_attach_all (void) pci_enable_device (hi->pdev[1])) { drvr_state = SBE_DRVR_DOWN; - printk (KERN_WARNING "%s: failed to enable card %d slot %d\n", - hi->devname, i, hi->pci_slot); + pr_warning("%s: failed to enable card %d slot %d\n", + hi->devname, i, hi->pci_slot); cleanup_devs (); cleanup_ioremap (); return EIO; diff --git a/drivers/staging/cxt1e1/linux.c b/drivers/staging/cxt1e1/linux.c index aee7018..ce2942c 100644 --- a/drivers/staging/cxt1e1/linux.c +++ b/drivers/staging/cxt1e1/linux.c @@ -12,6 +12,8 @@ * GNU General Public License for more details. */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include #include #include @@ -563,13 +565,13 @@ create_chan (struct net_device * ndev, ci_t * ci, priv = OS_kmalloc (sizeof (struct c4_priv)); if (!priv) { - printk (KERN_WARNING "%s: no memory for net_device !\n", ci->devname); + pr_warning("%s: no memory for net_device !\n", ci->devname); return 0; } dev = alloc_hdlcdev (priv); if (!dev) { - printk (KERN_WARNING "%s: no memory for hdlc_device !\n", ci->devname); + pr_warning("%s: no memory for hdlc_device !\n", ci->devname); OS_kfree (priv); return 0; } @@ -1111,7 +1113,7 @@ c4_add_dev (hdw_info_t * hi, int brdno, unsigned long f0, unsigned long f1, ndev = alloc_netdev(sizeof(ci_t), SBE_IFACETMPL, c4_setup); if (!ndev) { - printk (KERN_WARNING "%s: no memory for struct net_device !\n", hi->devname); + pr_warning("%s: no memory for struct net_device !\n", hi->devname); error_flag = ENOMEM; return 0; } @@ -1177,8 +1179,7 @@ c4_add_dev (hdw_info_t * hi, int brdno, unsigned long f0, unsigned long f1, #endif ndev->name, ndev)) { - printk (KERN_WARNING "%s: MUSYCC could not get irq: %d\n", - ndev->name, irq0); + pr_warning("%s: MUSYCC could not get irq: %d\n", ndev->name, irq0); unregister_netdev (ndev); OS_kfree (netdev_priv(ndev)); OS_kfree (ndev); @@ -1188,8 +1189,7 @@ c4_add_dev (hdw_info_t * hi, int brdno, unsigned long f0, unsigned long f1, #ifdef CONFIG_SBE_PMCC4_NCOMM if (request_irq (irq1, &c4_ebus_interrupt, IRQF_SHARED, ndev->name, ndev)) { - printk (KERN_WARNING "%s: EBUS could not get irq: %d\n", - hi->devname, irq1); + pr_warning("%s: EBUS could not get irq: %d\n", hi->devname, irq1); unregister_netdev (ndev); free_irq (irq0, ndev); OS_kfree (netdev_priv(ndev)); @@ -1263,33 +1263,33 @@ c4_mod_init (void) { int rtn; - printk (KERN_WARNING "%s: %s\n", THIS_MODULE->name, pmcc4_OSSI_release); + pr_warning("%s\n", pmcc4_OSSI_release); if ((rtn = c4hw_attach_all ())) return -rtn; /* installation failure - see system log */ /* housekeeping notifications */ if (log_level != log_level_default) - printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", - THIS_MODULE->name, log_level_default, log_level); + pr_info("NOTE: driver parameter changed from default %d to %d.\n", + log_level_default, log_level); if (max_mru != max_mru_default) - printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", - THIS_MODULE->name, max_mru_default, max_mru); + pr_info("NOTE: driver parameter changed from default %d to %d.\n", + max_mru_default, max_mru); if (max_mtu != max_mtu_default) - printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", - THIS_MODULE->name, max_mtu_default, max_mtu); + pr_info("NOTE: driver parameter changed from default %d to %d.\n", + max_mtu_default, max_mtu); if (max_rxdesc_used != max_rxdesc_default) { if (max_rxdesc_used > 2000) max_rxdesc_used = 2000; /* out-of-bounds reset */ - printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", - THIS_MODULE->name, max_rxdesc_default, max_rxdesc_used); + pr_info("NOTE: driver parameter changed from default %d to %d.\n", + max_rxdesc_default, max_rxdesc_used); } if (max_txdesc_used != max_txdesc_default) { if (max_txdesc_used > 1000) max_txdesc_used = 1000; /* out-of-bounds reset */ - printk (KERN_INFO "%s NOTE: driver parameter changed from default %d to %d.\n", - THIS_MODULE->name, max_txdesc_default, max_txdesc_used); + pr_info("NOTE: driver parameter changed from default %d to %d.\n", + max_txdesc_default, max_txdesc_used); } return 0; /* installation success */ } @@ -1331,7 +1331,7 @@ c4_mod_remove (void) cleanup_devs (); c4_cleanup (); cleanup_ioremap (); - printk (KERN_INFO "SBE %s - driver removed.\n", THIS_MODULE->name); + pr_info("SBE - driver removed.\n"); } module_init (c4_mod_init); diff --git a/drivers/staging/cxt1e1/musycc.c b/drivers/staging/cxt1e1/musycc.c index 650c9c0..7a6d92a 100644 --- a/drivers/staging/cxt1e1/musycc.c +++ b/drivers/staging/cxt1e1/musycc.c @@ -71,6 +71,7 @@ unsigned int max_bh = 0; char SBEid_pmcc4_musyccc[] = "@(#)musycc.c - $Revision: 2.1 $ (c) Copyright 2004-2006 SBE, Inc."; +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include #include "pmcc4_sysdep.h" @@ -681,8 +682,8 @@ rewrite: } if (rcnt > MUSYCC_SR_RETRY_CNT) { - printk (KERN_WARNING "%s: failed service request (#%d)= %x, group %d.\n", - pi->up->devname, MUSYCC_SR_RETRY_CNT, req, pi->portnum); + pr_warning("%s: failed service request (#%d)= %x, group %d.\n", + pi->up->devname, MUSYCC_SR_RETRY_CNT, req, pi->portnum); SD_SEM_GIVE (&pi->sr_sem_busy); /* allow any next request */ return; } @@ -959,14 +960,14 @@ musycc_init (ci_t * ci) if (max_mru > 0xffe) { - printk (KERN_WARNING "%s: Maximum allowed MRU exceeded, resetting %d to %d.\n", - THIS_MODULE->name, max_mru, 0xffe); + pr_warning("Maximum allowed MRU exceeded, resetting %d to %d.\n", + max_mru, 0xffe); max_mru = 0xffe; } if (max_mtu > 0xffe) { - printk (KERN_WARNING "%s: Maximum allowed MTU exceeded, resetting %d to %d.\n", - THIS_MODULE->name, max_mtu, 0xffe); + pr_warning("Maximum allowed MTU exceeded, resetting %d to %d.\n", + max_mtu, 0xffe); max_mtu = 0xffe; } #ifdef SBE_WAN256T3_ENABLE diff --git a/drivers/staging/cxt1e1/pmcc4_drv.c b/drivers/staging/cxt1e1/pmcc4_drv.c index ada80d0..1617333 100644 --- a/drivers/staging/cxt1e1/pmcc4_drv.c +++ b/drivers/staging/cxt1e1/pmcc4_drv.c @@ -83,6 +83,7 @@ char OSSIid_pmcc4_drvc[] = "@(#)pmcc4_drv.c - $Revision: 3.1 $ (c) Copyright 2002-2007 One Stop Systems, Inc."; +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #if defined (__FreeBSD__) || defined (__NetBSD__) #include @@ -207,8 +208,8 @@ c4_new (void *hi) ci_t *ci; #ifdef SBE_MAP_DEBUG - printk (KERN_WARNING "%s: c4_new() entered, ci needs %u.\n", - THIS_MODULE->name, (unsigned int) sizeof (ci_t)); + pr_warning("c4_new() entered, ci needs %u.\n", + (unsigned int) sizeof (ci_t)); #endif ci = (ci_t *) OS_kmalloc (sizeof (ci_t)); @@ -220,8 +221,8 @@ c4_new (void *hi) c4_list = ci; ci->brdno = ci->next ? ci->next->brdno + 1 : 0; } else - printk (KERN_WARNING "%s: failed CI malloc, size %u.\n", - THIS_MODULE->name, (unsigned int) sizeof (ci_t)); + pr_warning("failed CI malloc, size %u.\n", + (unsigned int) sizeof (ci_t)); if (CI == 0) CI = ci; /* DEBUG, only board 0 usage */ @@ -805,7 +806,8 @@ c4_init (ci_t * ci, u_char *func0, u_char *func1) break; default: ci->max_port = 0; - printk (KERN_WARNING "%s: illegal port configuration (%x)\n", ci->devname, pmsk); + pr_warning("%s: illegal port configuration (%x)\n", + ci->devname, pmsk); return SBE_DRVR_FAIL; } #ifdef SBE_MAP_DEBUG @@ -847,8 +849,8 @@ c4_init (ci_t * ci, u_char *func0, u_char *func1) ch->p.mode_56k = 0; /* default is 64kbps mode */ } else { - printk (KERN_WARNING "%s: failed mch_t malloc, port %d channel %d size %u.\n", - THIS_MODULE->name, portnum, j, (unsigned int) sizeof (mch_t)); + pr_warning("failed mch_t malloc, port %d channel %d size %u.\n", + portnum, j, (unsigned int) sizeof (mch_t)); break; } } diff --git a/drivers/staging/cxt1e1/sbecom_inline_linux.h b/drivers/staging/cxt1e1/sbecom_inline_linux.h index 2ab1eb1..44229a9 100644 --- a/drivers/staging/cxt1e1/sbecom_inline_linux.h +++ b/drivers/staging/cxt1e1/sbecom_inline_linux.h @@ -164,7 +164,7 @@ OS_mem_token_alloc (size_t size) skb = dev_alloc_skb (size); if (!skb) { - //printk (KERN_WARNING "no mem in OS_mem_token_alloc !"); + //pr_warning("no mem in OS_mem_token_alloc !\n"); return 0; } return skb; diff --git a/drivers/staging/cxt1e1/sbeproc.c b/drivers/staging/cxt1e1/sbeproc.c index 61ca639..92f6f5c 100644 --- a/drivers/staging/cxt1e1/sbeproc.c +++ b/drivers/staging/cxt1e1/sbeproc.c @@ -11,6 +11,8 @@ * GNU General Public License for more details. */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include #include #include @@ -318,16 +320,14 @@ sbecom_proc_brd_init (ci_t * ci) ci->dir_dev = proc_mkdir(dir, NULL); if (!ci->dir_dev) { - printk (KERN_ERR "%s: Unable to create directory /proc/driver/%s\n", - THIS_MODULE->name, ci->devname); + pr_err("Unable to create directory /proc/driver/%s\n", ci->devname); goto fail; } e = create_proc_read_entry ("info", S_IFREG | S_IRUGO, ci->dir_dev, sbecom_proc_get_sbe_info, ci); if (!e) { - printk (KERN_ERR "%s: Unable to create entry /proc/driver/%s/info\n", - THIS_MODULE->name, ci->devname); + pr_err("Unable to create entry /proc/driver/%s/info\n", ci->devname); goto fail; } return 0; -- cgit v0.10.2 From c9f772570123b94ce63563893adb0c492d05eda4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 14:36:56 -0700 Subject: Staging: comedi: kcomedilib: dio.c: remove unused functions Remove the unused functions from the dio.c file as they are not needed. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/kcomedilib/dio.c b/drivers/staging/comedi/kcomedilib/dio.c index e37aa53..f0ba81d 100644 --- a/drivers/staging/comedi/kcomedilib/dio.c +++ b/drivers/staging/comedi/kcomedilib/dio.c @@ -43,36 +43,6 @@ int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan, } EXPORT_SYMBOL(comedi_dio_config); -int comedi_dio_read(void *dev, unsigned int subdev, unsigned int chan, - unsigned int *val) -{ - struct comedi_insn insn; - - memset(&insn, 0, sizeof(insn)); - insn.insn = INSN_READ; - insn.n = 1; - insn.data = val; - insn.subdev = subdev; - insn.chanspec = CR_PACK(chan, 0, 0); - - return comedi_do_insn(dev, &insn); -} - -int comedi_dio_write(void *dev, unsigned int subdev, unsigned int chan, - unsigned int val) -{ - struct comedi_insn insn; - - memset(&insn, 0, sizeof(insn)); - insn.insn = INSN_WRITE; - insn.n = 1; - insn.data = &val; - insn.subdev = subdev; - insn.chanspec = CR_PACK(chan, 0, 0); - - return comedi_do_insn(dev, &insn); -} - int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask, unsigned int *bits) { -- cgit v0.10.2 From 6b18af18d2c48c07864cf38b5475a0f4d1913bc4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 14:41:28 -0700 Subject: Staging: comedi: kcomedilib: kcomedilib_main.c: remove unused functions Remove the unused functions from the kcomedilib_main.c file as they are not needed. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c index 32c7bbb..addfcd5 100644 --- a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c +++ b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c @@ -70,25 +70,6 @@ void *comedi_open(const char *filename) } EXPORT_SYMBOL(comedi_open); -void *comedi_open_old(unsigned int minor) -{ - struct comedi_device_file_info *dev_file_info; - struct comedi_device *dev; - - if (minor >= COMEDI_NUM_MINORS) - return NULL; - - dev_file_info = comedi_get_device_file_info(minor); - if (dev_file_info == NULL) - return NULL; - dev = dev_file_info->device; - - if (dev == NULL || !dev->attached) - return NULL; - - return (void *)dev; -} - int comedi_close(void *d) { struct comedi_device *dev = (struct comedi_device *)d; @@ -99,83 +80,6 @@ int comedi_close(void *d) } EXPORT_SYMBOL(comedi_close); -int comedi_loglevel(int newlevel) -{ - return 0; -} - -void comedi_perror(const char *message) -{ - printk(KERN_ERR "%s: unknown error\n", message); -} - -char *comedi_strerror(int err) -{ - return "unknown error"; -} - -int comedi_fileno(void *d) -{ - struct comedi_device *dev = (struct comedi_device *)d; - - /* return something random */ - return dev->minor; -} - -int comedi_command(void *d, struct comedi_cmd *cmd) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s; - struct comedi_async *async; - unsigned runflags; - - if (cmd->subdev >= dev->n_subdevices) - return -ENODEV; - - s = dev->subdevices + cmd->subdev; - if (s->type == COMEDI_SUBD_UNUSED) - return -EIO; - - async = s->async; - if (async == NULL) - return -ENODEV; - - if (s->busy) - return -EBUSY; - s->busy = d; - - if (async->cb_mask & COMEDI_CB_EOS) - cmd->flags |= TRIG_WAKE_EOS; - - async->cmd = *cmd; - - runflags = SRF_RUNNING; - - comedi_set_subdevice_runflags(s, ~0, runflags); - - comedi_reset_async_buf(async); - - return s->do_cmd(dev, s); -} - -int comedi_command_test(void *d, struct comedi_cmd *cmd) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s; - - if (cmd->subdev >= dev->n_subdevices) - return -ENODEV; - - s = dev->subdevices + cmd->subdev; - if (s->type == COMEDI_SUBD_UNUSED) - return -EIO; - - if (s->async == NULL) - return -ENODEV; - - return s->do_cmdtest(dev, s, cmd); -} - /* * COMEDI_INSN * perform an instruction @@ -302,261 +206,3 @@ error: return ret; } -/* - COMEDI_LOCK - lock subdevice - - arg: - subdevice number - - reads: - none - - writes: - none - - necessary locking: - - ioctl/rt lock (this type) - - lock while subdevice busy - - lock while subdevice being programmed - -*/ -int comedi_lock(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s; - unsigned long flags; - int ret = 0; - - if (subdevice >= dev->n_subdevices) - return -EINVAL; - - s = dev->subdevices + subdevice; - - spin_lock_irqsave(&s->spin_lock, flags); - - if (s->busy) { - ret = -EBUSY; - } else { - if (s->lock) { - ret = -EBUSY; - } else { - s->lock = d; - } - } - - spin_unlock_irqrestore(&s->spin_lock, flags); - - return ret; -} - -/* - COMEDI_UNLOCK - unlock subdevice - - arg: - subdevice number - - reads: - none - - writes: - none - -*/ -int comedi_unlock(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s; - unsigned long flags; - struct comedi_async *async; - int ret; - - if (subdevice >= dev->n_subdevices) - return -EINVAL; - - s = dev->subdevices + subdevice; - - async = s->async; - - spin_lock_irqsave(&s->spin_lock, flags); - - if (s->busy) { - ret = -EBUSY; - } else if (s->lock && s->lock != (void *)d) { - ret = -EACCES; - } else { - s->lock = NULL; - - if (async) { - async->cb_mask = 0; - async->cb_func = NULL; - async->cb_arg = NULL; - } - - ret = 0; - } - - spin_unlock_irqrestore(&s->spin_lock, flags); - - return ret; -} - -/* - COMEDI_CANCEL - cancel acquisition ioctl - - arg: - subdevice number - - reads: - nothing - - writes: - nothing - -*/ -int comedi_cancel(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s; - int ret = 0; - - if (subdevice >= dev->n_subdevices) - return -EINVAL; - - s = dev->subdevices + subdevice; - - if (s->lock && s->lock != d) - return -EACCES; - -#if 0 - if (!s->busy) - return 0; - - if (s->busy != d) - return -EBUSY; -#endif - - if (!s->cancel || !s->async) - return -EINVAL; - - ret = s->cancel(dev, s); - - if (ret) - return ret; - - comedi_set_subdevice_runflags(s, SRF_RUNNING | SRF_RT, 0); - s->async->inttrig = NULL; - s->busy = NULL; - - return 0; -} - -/* - registration of callback functions - */ -int comedi_register_callback(void *d, unsigned int subdevice, - unsigned int mask, int (*cb) (unsigned int, - void *), void *arg) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s; - struct comedi_async *async; - - if (subdevice >= dev->n_subdevices) - return -EINVAL; - - s = dev->subdevices + subdevice; - - async = s->async; - if (s->type == COMEDI_SUBD_UNUSED || !async) - return -EIO; - - /* are we locked? (ioctl lock) */ - if (s->lock && s->lock != d) - return -EACCES; - - /* are we busy? */ - if (s->busy) - return -EBUSY; - - if (!mask) { - async->cb_mask = 0; - async->cb_func = NULL; - async->cb_arg = NULL; - } else { - async->cb_mask = mask; - async->cb_func = cb; - async->cb_arg = arg; - } - - return 0; -} - -int comedi_poll(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices; - struct comedi_async *async; - - if (subdevice >= dev->n_subdevices) - return -EINVAL; - - s = dev->subdevices + subdevice; - - async = s->async; - if (s->type == COMEDI_SUBD_UNUSED || !async) - return -EIO; - - /* are we locked? (ioctl lock) */ - if (s->lock && s->lock != d) - return -EACCES; - - /* are we running? XXX wrong? */ - if (!s->busy) - return -EIO; - - return s->poll(dev, s); -} - -/* WARNING: not portable */ -int comedi_map(void *d, unsigned int subdevice, void *ptr) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s; - - if (subdevice >= dev->n_subdevices) - return -EINVAL; - - s = dev->subdevices + subdevice; - - if (!s->async) - return -EINVAL; - - if (ptr) - *((void **)ptr) = s->async->prealloc_buf; - - /* XXX no reference counting */ - - return 0; -} - -/* WARNING: not portable */ -int comedi_unmap(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s; - - if (subdevice >= dev->n_subdevices) - return -EINVAL; - - s = dev->subdevices + subdevice; - - if (!s->async) - return -EINVAL; - - /* XXX no reference counting */ - - return 0; -} -- cgit v0.10.2 From a1525758c848aedf590bba3a919321e2d80fcd6e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 14:44:55 -0700 Subject: Staging: comedi: kcomedilib: delete dio.c and get.c Merge these two files into kcomedilib_main.c as they are tiny. This will also let us get rid of another global symbol in the future. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/kcomedilib/Makefile b/drivers/staging/comedi/kcomedilib/Makefile index 006aa1c..5951f86 100644 --- a/drivers/staging/comedi/kcomedilib/Makefile +++ b/drivers/staging/comedi/kcomedilib/Makefile @@ -1,6 +1,3 @@ obj-$(CONFIG_COMEDI) += kcomedilib.o -kcomedilib-objs := \ - dio.o \ - kcomedilib_main.o \ - get.o +kcomedilib-objs := kcomedilib_main.o diff --git a/drivers/staging/comedi/kcomedilib/dio.c b/drivers/staging/comedi/kcomedilib/dio.c deleted file mode 100644 index f0ba81d..0000000 --- a/drivers/staging/comedi/kcomedilib/dio.c +++ /dev/null @@ -1,68 +0,0 @@ -/* - kcomedilib/dio.c - implements comedi_dio_*() functions - - COMEDI - Linux Control and Measurement Device Interface - Copyright (C) 2000 David A. Schleef - - 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. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#include "../comedi.h" -#include "../comedilib.h" - -#include -#include - -int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan, - unsigned int io) -{ - struct comedi_insn insn; - - memset(&insn, 0, sizeof(insn)); - insn.insn = INSN_CONFIG; - insn.n = 1; - insn.data = &io; - insn.subdev = subdev; - insn.chanspec = CR_PACK(chan, 0, 0); - - return comedi_do_insn(dev, &insn); -} -EXPORT_SYMBOL(comedi_dio_config); - -int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask, - unsigned int *bits) -{ - struct comedi_insn insn; - unsigned int data[2]; - int ret; - - memset(&insn, 0, sizeof(insn)); - insn.insn = INSN_BITS; - insn.n = 2; - insn.data = data; - insn.subdev = subdev; - - data[0] = mask; - data[1] = *bits; - - ret = comedi_do_insn(dev, &insn); - - *bits = data[1]; - - return ret; -} -EXPORT_SYMBOL(comedi_dio_bitfield); diff --git a/drivers/staging/comedi/kcomedilib/get.c b/drivers/staging/comedi/kcomedilib/get.c deleted file mode 100644 index 99ab27a..0000000 --- a/drivers/staging/comedi/kcomedilib/get.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - kcomedilib/get.c - a comedlib interface for kernel modules - - COMEDI - Linux Control and Measurement Device Interface - Copyright (C) 1997-2000 David A. Schleef - - 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. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -*/ - -#define __NO_VERSION__ -#include "../comedi.h" -#include "../comedilib.h" -#include "../comedidev.h" - -int comedi_find_subdevice_by_type(void *d, int type, unsigned int subd) -{ - struct comedi_device *dev = (struct comedi_device *)d; - - if (subd > dev->n_subdevices) - return -ENODEV; - - for (; subd < dev->n_subdevices; subd++) { - if (dev->subdevices[subd].type == type) - return subd; - } - return -1; -} -EXPORT_SYMBOL(comedi_find_subdevice_by_type); - -int comedi_get_n_channels(void *d, unsigned int subdevice) -{ - struct comedi_device *dev = (struct comedi_device *)d; - struct comedi_subdevice *s = dev->subdevices + subdevice; - - return s->n_chan; -} -EXPORT_SYMBOL(comedi_get_n_channels); diff --git a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c index addfcd5..7cb29f2 100644 --- a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c +++ b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c @@ -206,3 +206,66 @@ error: return ret; } +int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan, + unsigned int io) +{ + struct comedi_insn insn; + + memset(&insn, 0, sizeof(insn)); + insn.insn = INSN_CONFIG; + insn.n = 1; + insn.data = &io; + insn.subdev = subdev; + insn.chanspec = CR_PACK(chan, 0, 0); + + return comedi_do_insn(dev, &insn); +} +EXPORT_SYMBOL(comedi_dio_config); + +int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask, + unsigned int *bits) +{ + struct comedi_insn insn; + unsigned int data[2]; + int ret; + + memset(&insn, 0, sizeof(insn)); + insn.insn = INSN_BITS; + insn.n = 2; + insn.data = data; + insn.subdev = subdev; + + data[0] = mask; + data[1] = *bits; + + ret = comedi_do_insn(dev, &insn); + + *bits = data[1]; + + return ret; +} +EXPORT_SYMBOL(comedi_dio_bitfield); + +int comedi_find_subdevice_by_type(void *d, int type, unsigned int subd) +{ + struct comedi_device *dev = (struct comedi_device *)d; + + if (subd > dev->n_subdevices) + return -ENODEV; + + for (; subd < dev->n_subdevices; subd++) { + if (dev->subdevices[subd].type == type) + return subd; + } + return -1; +} +EXPORT_SYMBOL(comedi_find_subdevice_by_type); + +int comedi_get_n_channels(void *d, unsigned int subdevice) +{ + struct comedi_device *dev = (struct comedi_device *)d; + struct comedi_subdevice *s = dev->subdevices + subdevice; + + return s->n_chan; +} +EXPORT_SYMBOL(comedi_get_n_channels); -- cgit v0.10.2 From 88cccef0193a7f8c6a73326404c0b2f9ad27f71a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 14:49:54 -0700 Subject: Staging: comedi: kcomedilib: comedi_do_insn is now static No one else calls this function, so mark it static. Now we can strip out the unneeded functionality in here as well. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedilib.h b/drivers/staging/comedi/comedilib.h index 0041435..23ec58d 100644 --- a/drivers/staging/comedi/comedilib.h +++ b/drivers/staging/comedi/comedilib.h @@ -33,7 +33,4 @@ int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask, int comedi_find_subdevice_by_type(void *dev, int type, unsigned int subd); int comedi_get_n_channels(void *dev, unsigned int subdevice); -/* internal to kcomedilb */ -int comedi_do_insn(void *dev, struct comedi_insn *insn); - #endif diff --git a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c index 7cb29f2..d27de93 100644 --- a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c +++ b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c @@ -84,7 +84,7 @@ EXPORT_SYMBOL(comedi_close); * COMEDI_INSN * perform an instruction */ -int comedi_do_insn(void *d, struct comedi_insn *insn) +static int comedi_do_insn(void *d, struct comedi_insn *insn) { struct comedi_device *dev = (struct comedi_device *)d; struct comedi_subdevice *s; -- cgit v0.10.2 From 3781bc5425f985c2ceffa3b2111e1d0eeb38cc24 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 14:54:34 -0700 Subject: Staging: comedi: kcomedilib: simplify comedi_do_insn() Now that we know we are only making 2 different types of instructions, only handle those two types. Also make the call a bit more typesafe by passing the correct pointer type. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c index d27de93..fa0db41 100644 --- a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c +++ b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c @@ -80,127 +80,53 @@ int comedi_close(void *d) } EXPORT_SYMBOL(comedi_close); -/* - * COMEDI_INSN - * perform an instruction - */ -static int comedi_do_insn(void *d, struct comedi_insn *insn) +static int comedi_do_insn(struct comedi_device *dev, struct comedi_insn *insn) { - struct comedi_device *dev = (struct comedi_device *)d; struct comedi_subdevice *s; int ret = 0; - if (insn->insn & INSN_MASK_SPECIAL) { - switch (insn->insn) { - case INSN_GTOD: - { - struct timeval tv; - - do_gettimeofday(&tv); - insn->data[0] = tv.tv_sec; - insn->data[1] = tv.tv_usec; - ret = 2; - - break; - } - case INSN_WAIT: - /* XXX isn't the value supposed to be nanosecs? */ - if (insn->n != 1 || insn->data[0] >= 100) { - ret = -EINVAL; - break; - } - udelay(insn->data[0]); - ret = 1; - break; - case INSN_INTTRIG: - if (insn->n != 1) { - ret = -EINVAL; - break; - } - if (insn->subdev >= dev->n_subdevices) { - printk("%d not usable subdevice\n", - insn->subdev); - ret = -EINVAL; - break; - } - s = dev->subdevices + insn->subdev; - if (!s->async) { - printk("no async\n"); - ret = -EINVAL; - break; - } - if (!s->async->inttrig) { - printk("no inttrig\n"); - ret = -EAGAIN; - break; - } - ret = s->async->inttrig(dev, s, insn->data[0]); - if (ret >= 0) - ret = 1; - break; - default: - ret = -EINVAL; - } - } else { - /* a subdevice instruction */ - if (insn->subdev >= dev->n_subdevices) { - ret = -EINVAL; - goto error; - } - s = dev->subdevices + insn->subdev; - - if (s->type == COMEDI_SUBD_UNUSED) { - printk("%d not useable subdevice\n", insn->subdev); - ret = -EIO; - goto error; - } - - /* XXX check lock */ - - ret = comedi_check_chanlist(s, 1, &insn->chanspec); - if (ret < 0) { - printk("bad chanspec\n"); - ret = -EINVAL; - goto error; - } - - if (s->busy) { - ret = -EBUSY; - goto error; - } - s->busy = d; - - switch (insn->insn) { - case INSN_READ: - ret = s->insn_read(dev, s, insn, insn->data); - break; - case INSN_WRITE: - ret = s->insn_write(dev, s, insn, insn->data); - break; - case INSN_BITS: - ret = s->insn_bits(dev, s, insn, insn->data); - break; - case INSN_CONFIG: - /* XXX should check instruction length */ - ret = s->insn_config(dev, s, insn, insn->data); - break; - default: - ret = -EINVAL; - break; - } - - s->busy = NULL; + /* a subdevice instruction */ + if (insn->subdev >= dev->n_subdevices) { + ret = -EINVAL; + goto error; } - if (ret < 0) + s = dev->subdevices + insn->subdev; + + if (s->type == COMEDI_SUBD_UNUSED) { + printk("%d not useable subdevice\n", insn->subdev); + ret = -EIO; goto error; -#if 0 - /* XXX do we want this? -- abbotti #if'ed it out for now. */ - if (ret != insn->n) { - printk("BUG: result of insn != insn.n\n"); + } + + /* XXX check lock */ + + ret = comedi_check_chanlist(s, 1, &insn->chanspec); + if (ret < 0) { + printk("bad chanspec\n"); ret = -EINVAL; goto error; } -#endif + + if (s->busy) { + ret = -EBUSY; + goto error; + } + s->busy = dev; + + switch (insn->insn) { + case INSN_BITS: + ret = s->insn_bits(dev, s, insn, insn->data); + break; + case INSN_CONFIG: + /* XXX should check instruction length */ + ret = s->insn_config(dev, s, insn, insn->data); + break; + default: + ret = -EINVAL; + break; + } + + s->busy = NULL; error: return ret; -- cgit v0.10.2 From 472dfe77b91d8026c3ccda22c60db0e92bc27863 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 15:01:50 -0700 Subject: Staging: comedi: kcomedilib: make it typesafe If we really are passing in a struct comedi_device, then say we are, don't mess around with void pointers for no reason. This also fixes up the comedi_bond.c driver, which is the only user of the kcomedilib code. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedilib.h b/drivers/staging/comedi/comedilib.h index 23ec58d..ca92c43 100644 --- a/drivers/staging/comedi/comedilib.h +++ b/drivers/staging/comedi/comedilib.h @@ -24,13 +24,14 @@ #ifndef _LINUX_COMEDILIB_H #define _LINUX_COMEDILIB_H -void *comedi_open(const char *path); -int comedi_close(void *dev); -int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan, - unsigned int io); -int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask, - unsigned int *bits); -int comedi_find_subdevice_by_type(void *dev, int type, unsigned int subd); -int comedi_get_n_channels(void *dev, unsigned int subdevice); +struct comedi_device *comedi_open(const char *path); +int comedi_close(struct comedi_device *dev); +int comedi_dio_config(struct comedi_device *dev, unsigned int subdev, + unsigned int chan, unsigned int io); +int comedi_dio_bitfield(struct comedi_device *dev, unsigned int subdev, + unsigned int mask, unsigned int *bits); +int comedi_find_subdevice_by_type(struct comedi_device *dev, int type, + unsigned int subd); +int comedi_get_n_channels(struct comedi_device *dev, unsigned int subdevice); #endif diff --git a/drivers/staging/comedi/drivers/comedi_bond.c b/drivers/staging/comedi/drivers/comedi_bond.c index 429ec70..22a0f99 100644 --- a/drivers/staging/comedi/drivers/comedi_bond.c +++ b/drivers/staging/comedi/drivers/comedi_bond.c @@ -142,7 +142,7 @@ static const struct BondingBoard bondingBoards[] = { #define thisboard ((const struct BondingBoard *)dev->board_ptr) struct BondedDevice { - void *dev; + struct comedi_device *dev; unsigned minor; unsigned subdev; unsigned subdev_type; @@ -404,7 +404,7 @@ static void *Realloc(const void *oldmem, size_t newlen, size_t oldlen) static int doDevConfig(struct comedi_device *dev, struct comedi_devconfig *it) { int i; - void *devs_opened[COMEDI_NUM_BOARD_MINORS]; + struct comedi_device *devs_opened[COMEDI_NUM_BOARD_MINORS]; memset(devs_opened, 0, sizeof(devs_opened)); devpriv->name[0] = 0;; @@ -413,7 +413,7 @@ static int doDevConfig(struct comedi_device *dev, struct comedi_devconfig *it) for (i = 0; i < COMEDI_NDEVCONFOPTS && (!i || it->options[i]); ++i) { char file[] = "/dev/comediXXXXXX"; int minor = it->options[i]; - void *d; + struct comedi_device *d; int sdev = -1, nchans, tmp; struct BondedDevice *bdev = NULL; diff --git a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c index fa0db41..863aae4 100644 --- a/drivers/staging/comedi/kcomedilib/kcomedilib_main.c +++ b/drivers/staging/comedi/kcomedilib/kcomedilib_main.c @@ -41,7 +41,7 @@ MODULE_AUTHOR("David Schleef "); MODULE_DESCRIPTION("Comedi kernel library"); MODULE_LICENSE("GPL"); -void *comedi_open(const char *filename) +struct comedi_device *comedi_open(const char *filename) { struct comedi_device_file_info *dev_file_info; struct comedi_device *dev; @@ -66,11 +66,11 @@ void *comedi_open(const char *filename) if (!try_module_get(dev->driver->module)) return NULL; - return (void *)dev; + return dev; } EXPORT_SYMBOL(comedi_open); -int comedi_close(void *d) +int comedi_close(struct comedi_device *d) { struct comedi_device *dev = (struct comedi_device *)d; @@ -132,8 +132,8 @@ error: return ret; } -int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan, - unsigned int io) +int comedi_dio_config(struct comedi_device *dev, unsigned int subdev, + unsigned int chan, unsigned int io) { struct comedi_insn insn; @@ -148,8 +148,8 @@ int comedi_dio_config(void *dev, unsigned int subdev, unsigned int chan, } EXPORT_SYMBOL(comedi_dio_config); -int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask, - unsigned int *bits) +int comedi_dio_bitfield(struct comedi_device *dev, unsigned int subdev, + unsigned int mask, unsigned int *bits) { struct comedi_insn insn; unsigned int data[2]; @@ -172,10 +172,9 @@ int comedi_dio_bitfield(void *dev, unsigned int subdev, unsigned int mask, } EXPORT_SYMBOL(comedi_dio_bitfield); -int comedi_find_subdevice_by_type(void *d, int type, unsigned int subd) +int comedi_find_subdevice_by_type(struct comedi_device *dev, int type, + unsigned int subd) { - struct comedi_device *dev = (struct comedi_device *)d; - if (subd > dev->n_subdevices) return -ENODEV; @@ -187,9 +186,8 @@ int comedi_find_subdevice_by_type(void *d, int type, unsigned int subd) } EXPORT_SYMBOL(comedi_find_subdevice_by_type); -int comedi_get_n_channels(void *d, unsigned int subdevice) +int comedi_get_n_channels(struct comedi_device *dev, unsigned int subdevice) { - struct comedi_device *dev = (struct comedi_device *)d; struct comedi_subdevice *s = dev->subdevices + subdevice; return s->n_chan; -- cgit v0.10.2 From 181bd67bf5780b941f2cba6247ed1c0cdfce468a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 15:15:06 -0700 Subject: Staging: comedi: make comedi_set_subdevice_runflags() static No one calls this anymore, except the core comedi code, so mark it static and don't export it. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index b11f9b0..135c80a 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -954,6 +954,17 @@ error: return ret; } +static void comedi_set_subdevice_runflags(struct comedi_subdevice *s, + unsigned mask, unsigned bits) +{ + unsigned long flags; + + spin_lock_irqsave(&s->spin_lock, flags); + s->runflags &= ~mask; + s->runflags |= (bits & mask); + spin_unlock_irqrestore(&s->spin_lock, flags); +} + /* COMEDI_CMD command ioctl @@ -2021,18 +2032,6 @@ void comedi_event(struct comedi_device *dev, struct comedi_subdevice *s) } EXPORT_SYMBOL(comedi_event); -void comedi_set_subdevice_runflags(struct comedi_subdevice *s, unsigned mask, - unsigned bits) -{ - unsigned long flags; - - spin_lock_irqsave(&s->spin_lock, flags); - s->runflags &= ~mask; - s->runflags |= (bits & mask); - spin_unlock_irqrestore(&s->spin_lock, flags); -} -EXPORT_SYMBOL(comedi_set_subdevice_runflags); - unsigned comedi_get_subdevice_runflags(struct comedi_subdevice *s) { unsigned long flags; diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 5e46727..9e13964 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -383,8 +383,6 @@ enum subdevice_runflags { int do_rangeinfo_ioctl(struct comedi_device *dev, struct comedi_rangeinfo *arg); int comedi_check_chanlist(struct comedi_subdevice *s, int n, unsigned int *chanlist); -void comedi_set_subdevice_runflags(struct comedi_subdevice *s, unsigned mask, - unsigned bits); unsigned comedi_get_subdevice_runflags(struct comedi_subdevice *s); int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); -- cgit v0.10.2 From 242e7ad91a067243d7ab63b6a25ed2e085733446 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 15:20:29 -0700 Subject: Staging: comedi: make comedi_alloc_board_minor local to comedi core No one outside of the comedi core calls this function, so create an internal.h file to put the prototype in, and don't export it to the world. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 135c80a..2634af2 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -49,7 +49,7 @@ #include #include -/* #include "kvmem.h" */ +#include "internal.h" MODULE_AUTHOR("http://www.comedi.org"); MODULE_DESCRIPTION("Comedi core module"); @@ -2156,7 +2156,6 @@ int comedi_alloc_board_minor(struct device *hardware_device) } return i; } -EXPORT_SYMBOL_GPL(comedi_alloc_board_minor); void comedi_free_board_minor(unsigned minor) { diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 9e13964..5f017c2 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -522,7 +522,6 @@ static inline void *comedi_aux_data(int options[], int n) return (void *)address; } -int comedi_alloc_board_minor(struct device *hardware_device); void comedi_free_board_minor(unsigned minor); int comedi_alloc_subdevice_minor(struct comedi_device *dev, struct comedi_subdevice *s); diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index a8f3d79..475778f 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -37,15 +37,16 @@ #include #include #include -#include "comedidev.h" #include /* for SuSE brokenness */ #include #include #include - #include #include +#include "comedidev.h" +#include "internal.h" + static int postconfig(struct comedi_device *dev); static int insn_rw_emulate_bits(struct comedi_device *dev, struct comedi_subdevice *s, diff --git a/drivers/staging/comedi/internal.h b/drivers/staging/comedi/internal.h new file mode 100644 index 0000000..4ced6bf --- /dev/null +++ b/drivers/staging/comedi/internal.h @@ -0,0 +1,2 @@ + +int comedi_alloc_board_minor(struct device *hardware_device); -- cgit v0.10.2 From 9e8c604821b372c6e98e9632f5617913bf92ae45 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 15:24:14 -0700 Subject: Staging: comedi: make comedi_free_board_minor local to comedi core No one outside of the comedi core calls this function, so don't export it to the world. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index 2634af2..ce8e254 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -2181,7 +2181,6 @@ void comedi_free_board_minor(unsigned minor) kfree(info); } } -EXPORT_SYMBOL_GPL(comedi_free_board_minor); int comedi_alloc_subdevice_minor(struct comedi_device *dev, struct comedi_subdevice *s) diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 5f017c2..c72fd15 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -522,7 +522,6 @@ static inline void *comedi_aux_data(int options[], int n) return (void *)address; } -void comedi_free_board_minor(unsigned minor); int comedi_alloc_subdevice_minor(struct comedi_device *dev, struct comedi_subdevice *s); void comedi_free_subdevice_minor(struct comedi_subdevice *s); diff --git a/drivers/staging/comedi/internal.h b/drivers/staging/comedi/internal.h index 4ced6bf..4b6065a 100644 --- a/drivers/staging/comedi/internal.h +++ b/drivers/staging/comedi/internal.h @@ -1,2 +1,3 @@ int comedi_alloc_board_minor(struct device *hardware_device); +void comedi_free_board_minor(unsigned minor); -- cgit v0.10.2 From 09372df0dff51121e772ca5870fb565a08840c86 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 15:27:52 -0700 Subject: Staging: comedi: make comedi_reset_async_buf local to comedi core No one outside of the comedi core calls this function, so don't export it to the world. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index c72fd15..3ca5832 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -495,8 +495,6 @@ static inline unsigned comedi_buf_read_n_allocated(struct comedi_async *async) return async->buf_read_alloc_count - async->buf_read_count; } -void comedi_reset_async_buf(struct comedi_async *async); - static inline void *comedi_aux_data(int options[], int n) { unsigned long address; diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 475778f..f68fab9 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -811,7 +811,6 @@ void comedi_reset_async_buf(struct comedi_async *async) async->events = 0; } -EXPORT_SYMBOL(comedi_reset_async_buf); int comedi_auto_config(struct device *hardware_device, const char *board_name, const int *options, unsigned num_options) diff --git a/drivers/staging/comedi/internal.h b/drivers/staging/comedi/internal.h index 4b6065a..7068a38 100644 --- a/drivers/staging/comedi/internal.h +++ b/drivers/staging/comedi/internal.h @@ -1,3 +1,4 @@ int comedi_alloc_board_minor(struct device *hardware_device); void comedi_free_board_minor(unsigned minor); +void comedi_reset_async_buf(struct comedi_async *async); -- cgit v0.10.2 From 22d114248be8907f965e68a1bfdcea3302cbc776 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 15:32:04 -0700 Subject: Staging: comedi: clean up sparse issues in proc.c The whole file should be converted to use seqfile, if it's even still needed. Or move to debugfs. Anyway, I fixed up the minor issues here. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/proc.c b/drivers/staging/comedi/proc.c index c0035cb..2aa487b 100644 --- a/drivers/staging/comedi/proc.c +++ b/drivers/staging/comedi/proc.c @@ -32,10 +32,11 @@ #include "comedidev.h" #include "comedi_fops.h" #include -/* #include */ +#include -int comedi_read_procmem(char *buf, char **start, off_t offset, int len, - int *eof, void *data) +#ifdef CONFIG_PROC_FS +static int comedi_read(char *buf, char **start, off_t offset, int len, + int *eof, void *data) { int i; int devices_q = 0; @@ -82,18 +83,17 @@ int comedi_read_procmem(char *buf, char **start, off_t offset, int len, return l; } -#ifdef CONFIG_PROC_FS void comedi_proc_init(void) { struct proc_dir_entry *comedi_proc; - comedi_proc = create_proc_entry("comedi", S_IFREG | S_IRUGO, 0); + comedi_proc = create_proc_entry("comedi", S_IFREG | S_IRUGO, NULL); if (comedi_proc) - comedi_proc->read_proc = comedi_read_procmem; + comedi_proc->read_proc = comedi_read; } void comedi_proc_cleanup(void) { - remove_proc_entry("comedi", 0); + remove_proc_entry("comedi", NULL); } #endif -- cgit v0.10.2 From 2434358ac7ece40e6aa8cd705927c423caa718ec Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 15:38:37 -0700 Subject: Staging: comedi: move some more functions to internal.h Only the internal comedi core calls these, so put them here. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index 3ca5832..c26c644 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -377,15 +377,8 @@ enum subdevice_runflags { SRF_RUNNING = 0x08000000 }; -/* - various internal comedi functions - */ - -int do_rangeinfo_ioctl(struct comedi_device *dev, struct comedi_rangeinfo *arg); int comedi_check_chanlist(struct comedi_subdevice *s, int n, unsigned int *chanlist); unsigned comedi_get_subdevice_runflags(struct comedi_subdevice *s); -int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data); /* range stuff */ diff --git a/drivers/staging/comedi/internal.h b/drivers/staging/comedi/internal.h index 7068a38..ce121f2 100644 --- a/drivers/staging/comedi/internal.h +++ b/drivers/staging/comedi/internal.h @@ -1,4 +1,9 @@ - +/* + * various internal comedi functions + */ +int do_rangeinfo_ioctl(struct comedi_device *dev, struct comedi_rangeinfo *arg); +int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s, + struct comedi_insn *insn, unsigned int *data); int comedi_alloc_board_minor(struct device *hardware_device); void comedi_free_board_minor(unsigned minor); void comedi_reset_async_buf(struct comedi_async *async); -- cgit v0.10.2 From 3b6b25b5ddf4485e89432a35a7d79d371ba6eba1 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 15:50:09 -0700 Subject: Staging: comedi: range.c: properly mark up __user pointers This is the start of cleaning up the user pointer markings in the comedi core. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index 1251e07..a124ca8 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -368,7 +368,7 @@ struct comedi_rangeinfo { unsigned int range_type; - void *range_ptr; + void __user *range_ptr; }; struct comedi_krange { diff --git a/drivers/staging/comedi/comedi_compat32.c b/drivers/staging/comedi/comedi_compat32.c index 581aa5f..41a7a62 100644 --- a/drivers/staging/comedi/comedi_compat32.c +++ b/drivers/staging/comedi/comedi_compat32.c @@ -25,9 +25,8 @@ */ #define __NO_VERSION__ -#include "comedi.h" #include - +#include "comedi.h" #include "comedi_compat32.h" #ifdef CONFIG_COMPAT diff --git a/drivers/staging/comedi/drivers/comedi_bond.c b/drivers/staging/comedi/drivers/comedi_bond.c index 22a0f99..7016222 100644 --- a/drivers/staging/comedi/drivers/comedi_bond.c +++ b/drivers/staging/comedi/drivers/comedi_bond.c @@ -87,11 +87,11 @@ Configuration Options: * options that are used with comedi_config. */ +#include +#include #include "../comedi.h" #include "../comedilib.h" #include "../comedidev.h" -#include -#include /* The maxiumum number of channels per subdevice. */ #define MAX_CHANS 256 diff --git a/drivers/staging/comedi/internal.h b/drivers/staging/comedi/internal.h index ce121f2..55b8550 100644 --- a/drivers/staging/comedi/internal.h +++ b/drivers/staging/comedi/internal.h @@ -1,7 +1,8 @@ /* * various internal comedi functions */ -int do_rangeinfo_ioctl(struct comedi_device *dev, struct comedi_rangeinfo *arg); +int do_rangeinfo_ioctl(struct comedi_device *dev, + struct comedi_rangeinfo __user *arg); int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); int comedi_alloc_board_minor(struct device *hardware_device); diff --git a/drivers/staging/comedi/range.c b/drivers/staging/comedi/range.c index 8a1cefd..148ec6f 100644 --- a/drivers/staging/comedi/range.c +++ b/drivers/staging/comedi/range.c @@ -21,8 +21,9 @@ */ -#include "comedidev.h" #include +#include "comedidev.h" +#include "internal.h" const struct comedi_lrange range_bipolar10 = { 1, {BIP_RANGE(10)} }; EXPORT_SYMBOL(range_bipolar10); @@ -50,7 +51,8 @@ EXPORT_SYMBOL(range_unknown); writes: n struct comedi_krange structures to rangeinfo->range_ptr */ -int do_rangeinfo_ioctl(struct comedi_device *dev, struct comedi_rangeinfo *arg) +int do_rangeinfo_ioctl(struct comedi_device *dev, + struct comedi_rangeinfo __user *arg) { struct comedi_rangeinfo it; int subd, chan; -- cgit v0.10.2 From 7029a87455af3cf303e8d6d0db8c26b6a94f1020 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 15:55:45 -0700 Subject: Staging: comedi: drivers.c sparse cleanup Fix up some sparse issues in drivers.c Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index c26c644..c38ebb4 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -351,9 +351,6 @@ void cleanup_polling(void); void start_polling(struct comedi_device *); void stop_polling(struct comedi_device *); -int comedi_buf_alloc(struct comedi_device *dev, struct comedi_subdevice *s, - unsigned long new_size); - #ifdef CONFIG_PROC_FS void comedi_proc_init(void); void comedi_proc_cleanup(void); diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index f68fab9..1f48b6d 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -54,16 +54,9 @@ static int insn_rw_emulate_bits(struct comedi_device *dev, static void *comedi_recognize(struct comedi_driver *driv, const char *name); static void comedi_report_boards(struct comedi_driver *driv); static int poll_invalid(struct comedi_device *dev, struct comedi_subdevice *s); -int comedi_buf_alloc(struct comedi_device *dev, struct comedi_subdevice *s, - unsigned long new_size); struct comedi_driver *comedi_drivers; -int comedi_modprobe(int minor) -{ - return -EINVAL; -} - static void cleanup_device(struct comedi_device *dev) { int i; @@ -84,7 +77,7 @@ static void cleanup_device(struct comedi_device *dev) } kfree(dev->private); dev->private = NULL; - dev->driver = 0; + dev->driver = NULL; dev->board_name = NULL; dev->board_ptr = NULL; dev->iobase = 0; @@ -309,7 +302,7 @@ static int postconfig(struct comedi_device *dev) /* generic recognize function for drivers * that register their supported board names */ -void *comedi_recognize(struct comedi_driver *driv, const char *name) +static void *comedi_recognize(struct comedi_driver *driv, const char *name) { unsigned i; const char *const *name_ptr = driv->board_name; @@ -324,7 +317,7 @@ void *comedi_recognize(struct comedi_driver *driv, const char *name) return NULL; } -void comedi_report_boards(struct comedi_driver *driv) +static void comedi_report_boards(struct comedi_driver *driv) { unsigned int i; const char *const *name_ptr; @@ -548,8 +541,8 @@ int comedi_buf_alloc(struct comedi_device *dev, struct comedi_subdevice *s, /* munging is applied to data by core as it passes between user * and kernel space */ -unsigned int comedi_buf_munge(struct comedi_async *async, - unsigned int num_bytes) +static unsigned int comedi_buf_munge(struct comedi_async *async, + unsigned int num_bytes) { struct comedi_subdevice *s = async->subdevice; unsigned int count = 0; @@ -812,8 +805,9 @@ void comedi_reset_async_buf(struct comedi_async *async) async->events = 0; } -int comedi_auto_config(struct device *hardware_device, const char *board_name, - const int *options, unsigned num_options) +static int comedi_auto_config(struct device *hardware_device, + const char *board_name, const int *options, + unsigned num_options) { struct comedi_devconfig it; int minor; @@ -858,7 +852,7 @@ cleanup: return retval; } -void comedi_auto_unconfig(struct device *hardware_device) +static void comedi_auto_unconfig(struct device *hardware_device) { unsigned *minor = (unsigned *)dev_get_drvdata(hardware_device); if (minor == NULL) diff --git a/drivers/staging/comedi/internal.h b/drivers/staging/comedi/internal.h index 55b8550..434ce34 100644 --- a/drivers/staging/comedi/internal.h +++ b/drivers/staging/comedi/internal.h @@ -8,3 +8,5 @@ int insn_inval(struct comedi_device *dev, struct comedi_subdevice *s, int comedi_alloc_board_minor(struct device *hardware_device); void comedi_free_board_minor(unsigned minor); void comedi_reset_async_buf(struct comedi_async *async); +int comedi_buf_alloc(struct comedi_device *dev, struct comedi_subdevice *s, + unsigned long new_size); -- cgit v0.10.2 From 92d0127c9d249c078b0939050f25041ed37be7cd Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 3 May 2010 16:32:28 -0700 Subject: Staging: comedi: __user markup on comedi_fops.c Hm, what a mess. I tried to properly mark up the __user pointers, but for some of these structures, we use them both in the kernel, and across the user/kernel boundry, which isn't ok. So we end up generating a few new sparse warnings in places we were not before, but the large majority of things are now properly tagged in the fops file. The whole ioctl interface needs to be carefully looked at in the future. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index a124ca8..45272d8 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -321,7 +321,7 @@ struct comedi_insn { unsigned int insn; unsigned int n; - unsigned int *data; + unsigned int __user *data; unsigned int subdev; unsigned int chanspec; unsigned int unused[3]; @@ -329,7 +329,7 @@ struct comedi_insnlist { unsigned int n_insns; - struct comedi_insn *insns; + struct comedi_insn __user *insns; }; struct comedi_cmd { @@ -351,7 +351,7 @@ unsigned int stop_src; unsigned int stop_arg; - unsigned int *chanlist; /* channel/range list */ + unsigned int __user *chanlist; /* channel/range list */ unsigned int chanlist_len; short *data; /* data list, size depends on subd flags */ @@ -360,9 +360,9 @@ struct comedi_chaninfo { unsigned int subdev; - unsigned int *maxdata_list; - unsigned int *flaglist; - unsigned int *rangelist; + unsigned int __user *maxdata_list; + unsigned int __user *flaglist; + unsigned int __user *rangelist; unsigned int unused[4]; }; diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index ce8e254..e7095d7 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -64,7 +64,7 @@ module_param(comedi_debug, int, 0644); int comedi_autoconfig = 1; module_param(comedi_autoconfig, bool, 0444); -int comedi_num_legacy_minors; +static int comedi_num_legacy_minors; module_param(comedi_num_legacy_minors, int, 0444); static DEFINE_SPINLOCK(comedi_file_info_table_lock); @@ -72,25 +72,32 @@ static struct comedi_device_file_info *comedi_file_info_table[COMEDI_NUM_MINORS]; static int do_devconfig_ioctl(struct comedi_device *dev, - struct comedi_devconfig *arg); -static int do_bufconfig_ioctl(struct comedi_device *dev, void *arg); + struct comedi_devconfig __user *arg); +static int do_bufconfig_ioctl(struct comedi_device *dev, + struct comedi_bufconfig __user *arg); static int do_devinfo_ioctl(struct comedi_device *dev, - struct comedi_devinfo *arg, struct file *file); + struct comedi_devinfo __user *arg, + struct file *file); static int do_subdinfo_ioctl(struct comedi_device *dev, - struct comedi_subdinfo *arg, void *file); + struct comedi_subdinfo __user *arg, void *file); static int do_chaninfo_ioctl(struct comedi_device *dev, - struct comedi_chaninfo *arg); -static int do_bufinfo_ioctl(struct comedi_device *dev, void *arg); -static int do_cmd_ioctl(struct comedi_device *dev, void *arg, void *file); + struct comedi_chaninfo __user *arg); +static int do_bufinfo_ioctl(struct comedi_device *dev, + struct comedi_bufinfo __user *arg); +static int do_cmd_ioctl(struct comedi_device *dev, + struct comedi_cmd __user *arg, void *file); static int do_lock_ioctl(struct comedi_device *dev, unsigned int arg, void *file); static int do_unlock_ioctl(struct comedi_device *dev, unsigned int arg, void *file); static int do_cancel_ioctl(struct comedi_device *dev, unsigned int arg, void *file); -static int do_cmdtest_ioctl(struct comedi_device *dev, void *arg, void *file); -static int do_insnlist_ioctl(struct comedi_device *dev, void *arg, void *file); -static int do_insn_ioctl(struct comedi_device *dev, void *arg, void *file); +static int do_cmdtest_ioctl(struct comedi_device *dev, + struct comedi_cmd __user *arg, void *file); +static int do_insnlist_ioctl(struct comedi_device *dev, + struct comedi_insnlist __user *arg, void *file); +static int do_insn_ioctl(struct comedi_device *dev, + struct comedi_insn __user *arg, void *file); static int do_poll_ioctl(struct comedi_device *dev, unsigned int subd, void *file); @@ -129,7 +136,8 @@ static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd, /* Device config is special, because it must work on * an unconfigured device. */ if (cmd == COMEDI_DEVCONFIG) { - rc = do_devconfig_ioctl(dev, (void *)arg); + rc = do_devconfig_ioctl(dev, + (struct comedi_devconfig __user *)arg); goto done; } @@ -141,22 +149,27 @@ static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd, switch (cmd) { case COMEDI_BUFCONFIG: - rc = do_bufconfig_ioctl(dev, (void *)arg); + rc = do_bufconfig_ioctl(dev, + (struct comedi_bufconfig __user *)arg); break; case COMEDI_DEVINFO: - rc = do_devinfo_ioctl(dev, (void *)arg, file); + rc = do_devinfo_ioctl(dev, (struct comedi_devinfo __user *)arg, + file); break; case COMEDI_SUBDINFO: - rc = do_subdinfo_ioctl(dev, (void *)arg, file); + rc = do_subdinfo_ioctl(dev, + (struct comedi_subdinfo __user *)arg, + file); break; case COMEDI_CHANINFO: - rc = do_chaninfo_ioctl(dev, (void *)arg); + rc = do_chaninfo_ioctl(dev, (void __user *)arg); break; case COMEDI_RANGEINFO: - rc = do_rangeinfo_ioctl(dev, (void *)arg); + rc = do_rangeinfo_ioctl(dev, (void __user *)arg); break; case COMEDI_BUFINFO: - rc = do_bufinfo_ioctl(dev, (void *)arg); + rc = do_bufinfo_ioctl(dev, + (struct comedi_bufinfo __user *)arg); break; case COMEDI_LOCK: rc = do_lock_ioctl(dev, arg, file); @@ -168,16 +181,20 @@ static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd, rc = do_cancel_ioctl(dev, arg, file); break; case COMEDI_CMD: - rc = do_cmd_ioctl(dev, (void *)arg, file); + rc = do_cmd_ioctl(dev, (struct comedi_cmd __user *)arg, file); break; case COMEDI_CMDTEST: - rc = do_cmdtest_ioctl(dev, (void *)arg, file); + rc = do_cmdtest_ioctl(dev, (struct comedi_cmd __user *)arg, + file); break; case COMEDI_INSNLIST: - rc = do_insnlist_ioctl(dev, (void *)arg, file); + rc = do_insnlist_ioctl(dev, + (struct comedi_insnlist __user *)arg, + file); break; case COMEDI_INSN: - rc = do_insn_ioctl(dev, (void *)arg, file); + rc = do_insn_ioctl(dev, (struct comedi_insn __user *)arg, + file); break; case COMEDI_POLL: rc = do_poll_ioctl(dev, arg, file); @@ -206,7 +223,7 @@ done: none */ static int do_devconfig_ioctl(struct comedi_device *dev, - struct comedi_devconfig *arg) + struct comedi_devconfig __user *arg) { struct comedi_devconfig it; int ret; @@ -286,7 +303,8 @@ static int do_devconfig_ioctl(struct comedi_device *dev, modified bufconfig at arg */ -static int do_bufconfig_ioctl(struct comedi_device *dev, void *arg) +static int do_bufconfig_ioctl(struct comedi_device *dev, + struct comedi_bufconfig __user *arg) { struct comedi_bufconfig bc; struct comedi_async *async; @@ -347,7 +365,8 @@ copyback: */ static int do_devinfo_ioctl(struct comedi_device *dev, - struct comedi_devinfo *arg, struct file *file) + struct comedi_devinfo __user *arg, + struct file *file) { struct comedi_devinfo devinfo; const unsigned minor = iminor(file->f_dentry->d_inode); @@ -397,7 +416,7 @@ static int do_devinfo_ioctl(struct comedi_device *dev, */ static int do_subdinfo_ioctl(struct comedi_device *dev, - struct comedi_subdinfo *arg, void *file) + struct comedi_subdinfo __user *arg, void *file) { int ret, i; struct comedi_subdinfo *tmp, *us; @@ -479,7 +498,7 @@ static int do_subdinfo_ioctl(struct comedi_device *dev, */ static int do_chaninfo_ioctl(struct comedi_device *dev, - struct comedi_chaninfo *arg) + struct comedi_chaninfo __user *arg) { struct comedi_subdevice *s; struct comedi_chaninfo it; @@ -543,7 +562,8 @@ static int do_chaninfo_ioctl(struct comedi_device *dev, modified bufinfo at arg */ -static int do_bufinfo_ioctl(struct comedi_device *dev, void *arg) +static int do_bufinfo_ioctl(struct comedi_device *dev, + struct comedi_bufinfo __user *arg) { struct comedi_bufinfo bi; struct comedi_subdevice *s; @@ -615,7 +635,8 @@ static int parse_insn(struct comedi_device *dev, struct comedi_insn *insn, */ /* arbitrary limits */ #define MAX_SAMPLES 256 -static int do_insnlist_ioctl(struct comedi_device *dev, void *arg, void *file) +static int do_insnlist_ioctl(struct comedi_device *dev, + struct comedi_insnlist __user *arg, void *file) { struct comedi_insnlist insnlist; struct comedi_insn *insns = NULL; @@ -909,7 +930,8 @@ out: * writes: * data (for reads) */ -static int do_insn_ioctl(struct comedi_device *dev, void *arg, void *file) +static int do_insn_ioctl(struct comedi_device *dev, + struct comedi_insn __user *arg, void *file) { struct comedi_insn insn; unsigned int *data = NULL; @@ -940,8 +962,7 @@ static int do_insn_ioctl(struct comedi_device *dev, void *arg, void *file) if (ret < 0) goto error; if (insn.insn & INSN_MASK_READ) { - if (copy_to_user - (insn.data, data, insn.n * sizeof(unsigned int))) { + if (copy_to_user(insn.data, data, insn.n * sizeof(unsigned int))) { ret = -EFAULT; goto error; } @@ -965,30 +986,16 @@ static void comedi_set_subdevice_runflags(struct comedi_subdevice *s, spin_unlock_irqrestore(&s->spin_lock, flags); } -/* - COMEDI_CMD - command ioctl - - arg: - pointer to cmd structure - - reads: - cmd structure at arg - channel/range list - - writes: - modified cmd structure at arg - -*/ -static int do_cmd_ioctl(struct comedi_device *dev, void *arg, void *file) +static int do_cmd_ioctl(struct comedi_device *dev, + struct comedi_cmd __user *cmd, void *file) { struct comedi_cmd user_cmd; struct comedi_subdevice *s; struct comedi_async *async; int ret = 0; - unsigned int *chanlist_saver = NULL; + unsigned int __user *chanlist_saver = NULL; - if (copy_from_user(&user_cmd, arg, sizeof(struct comedi_cmd))) { + if (copy_from_user(&user_cmd, cmd, sizeof(struct comedi_cmd))) { DPRINTK("bad cmd address\n"); return -EFAULT; } @@ -1077,7 +1084,7 @@ static int do_cmd_ioctl(struct comedi_device *dev, void *arg, void *file) /* restore chanlist pointer before copying back */ user_cmd.chanlist = chanlist_saver; user_cmd.data = NULL; - if (copy_to_user(arg, &user_cmd, sizeof(struct comedi_cmd))) { + if (copy_to_user(cmd, &user_cmd, sizeof(struct comedi_cmd))) { DPRINTK("fault writing cmd\n"); ret = -EFAULT; goto cleanup; @@ -1127,13 +1134,14 @@ cleanup: modified cmd structure at arg */ -static int do_cmdtest_ioctl(struct comedi_device *dev, void *arg, void *file) +static int do_cmdtest_ioctl(struct comedi_device *dev, + struct comedi_cmd __user *arg, void *file) { struct comedi_cmd user_cmd; struct comedi_subdevice *s; int ret = 0; unsigned int *chanlist = NULL; - unsigned int *chanlist_saver = NULL; + unsigned int __user *chanlist_saver = NULL; if (copy_from_user(&user_cmd, arg, sizeof(struct comedi_cmd))) { DPRINTK("bad cmd address\n"); @@ -1384,7 +1392,7 @@ static int do_cancel(struct comedi_device *dev, struct comedi_subdevice *s) return ret; } -void comedi_unmap(struct vm_area_struct *area) +static void comedi_unmap(struct vm_area_struct *area) { struct comedi_async *async; struct comedi_device *dev; @@ -1522,8 +1530,8 @@ static unsigned int comedi_poll(struct file *file, poll_table * wait) return mask; } -static ssize_t comedi_write(struct file *file, const char *buf, size_t nbytes, - loff_t *offset) +static ssize_t comedi_write(struct file *file, const char __user *buf, + size_t nbytes, loff_t *offset) { struct comedi_subdevice *s; struct comedi_async *async; @@ -1624,7 +1632,7 @@ done: return count ? count : retval; } -static ssize_t comedi_read(struct file *file, char *buf, size_t nbytes, +static ssize_t comedi_read(struct file *file, char __user *buf, size_t nbytes, loff_t *offset) { struct comedi_subdevice *s; @@ -2063,7 +2071,7 @@ static int is_device_busy(struct comedi_device *dev) return 0; } -void comedi_device_init(struct comedi_device *dev) +static void comedi_device_init(struct comedi_device *dev) { memset(dev, 0, sizeof(struct comedi_device)); spin_lock_init(&dev->spinlock); @@ -2071,7 +2079,7 @@ void comedi_device_init(struct comedi_device *dev) dev->minor = -1; } -void comedi_device_cleanup(struct comedi_device *dev) +static void comedi_device_cleanup(struct comedi_device *dev) { if (dev == NULL) return; -- cgit v0.10.2 From c88c4e4c7a427ee65556f33e6327b604ec209ec3 Mon Sep 17 00:00:00 2001 From: Hank Janssen Date: Tue, 4 May 2010 15:55:05 -0700 Subject: Staging: hv: Added new hv_utils driver with shutdown as first functionality Addition of new driver for Hyper-V called hv_utils. This driver is intended to support things like KVP, Timesync, Heartbeat etc. This first release has support for Gracefull shutdown. e.g. Select shutdown from the Hyper-V main admin screen and the Linux VM will do a gracefull shutdown. Signed-off-by: Hank Janssen Signed-off-by: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index 328d3a0..de2ccb1 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -21,6 +21,7 @@ #include #include #include +#include #include "osd.h" #include "logging.h" #include "VmbusPrivate.h" @@ -666,8 +667,19 @@ void VmbusChannelClose(struct vmbus_channel *Channel) DPRINT_EXIT(VMBUS); } -/* - * VmbusChannelSendPacket - Send the specified buffer on the given channel +/** + * VmbusChannelSendPacket() - Send the specified buffer on the given channel + * @Channel: Pointer to vmbus_channel structure. + * @Buffer: Pointer to the buffer you want to receive the data into. + * @BufferLen: Maximum size of what the the buffer will hold + * @RequestId: Identifier of the request + * @vmbus_packet_type: Type of packet that is being send e.g. negotiate, time + * packet etc. + * + * Sends data in @Buffer directly to hyper-v via the vmbus + * This will send the data unparsed to hyper-v. + * + * Mainly used by Hyper-V drivers. */ int VmbusChannelSendPacket(struct vmbus_channel *Channel, const void *Buffer, u32 BufferLen, u64 RequestId, @@ -711,6 +723,7 @@ int VmbusChannelSendPacket(struct vmbus_channel *Channel, const void *Buffer, return ret; } +EXPORT_SYMBOL(VmbusChannelSendPacket); /* * VmbusChannelSendPacketPageBuffer - Send a range of single-page buffer @@ -848,10 +861,20 @@ int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *Channel, return ret; } -/* - * VmbusChannelRecvPacket - Retrieve the user packet on the specified channel + +/** + * VmbusChannelRecvPacket() - Retrieve the user packet on the specified channel + * @Channel: Pointer to vmbus_channel structure. + * @Buffer: Pointer to the buffer you want to receive the data into. + * @BufferLen: Maximum size of what the the buffer will hold + * @BufferActualLen: The actual size of the data after it was received + * @RequestId: Identifier of the request + * + * Receives directly from the hyper-v vmbus and puts the data it received + * into Buffer. This will receive the data unparsed from hyper-v. + * + * Mainly used by Hyper-V drivers. */ -/* TODO: Do we ever receive a gpa direct packet other than the ones we send ? */ int VmbusChannelRecvPacket(struct vmbus_channel *Channel, void *Buffer, u32 BufferLen, u32 *BufferActualLen, u64 *RequestId) { @@ -913,6 +936,7 @@ int VmbusChannelRecvPacket(struct vmbus_channel *Channel, void *Buffer, return 0; } +EXPORT_SYMBOL(VmbusChannelRecvPacket); /* * VmbusChannelRecvPacketRaw - Retrieve the raw packet on the specified channel diff --git a/drivers/staging/hv/ChannelMgmt.c b/drivers/staging/hv/ChannelMgmt.c index 43f28f2..445506d 100644 --- a/drivers/staging/hv/ChannelMgmt.c +++ b/drivers/staging/hv/ChannelMgmt.c @@ -22,18 +22,22 @@ #include #include #include +#include #include "osd.h" #include "logging.h" #include "VmbusPrivate.h" +#include "utils.h" struct vmbus_channel_message_table_entry { enum vmbus_channel_message_type messageType; void (*messageHandler)(struct vmbus_channel_message_header *msg); }; -#define MAX_NUM_DEVICE_CLASSES_SUPPORTED 4 +#define MAX_MSG_TYPES 1 +#define MAX_NUM_DEVICE_CLASSES_SUPPORTED 5 + static const struct hv_guid - gSupportedDeviceClasses[MAX_NUM_DEVICE_CLASSES_SUPPORTED] = { + gSupportedDeviceClasses[MAX_NUM_DEVICE_CLASSES_SUPPORTED] = { /* {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f} */ /* Storage - SCSI */ { @@ -69,8 +73,127 @@ static const struct hv_guid 0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5 } }, + /* 0E0B6031-5213-4934-818B-38D90CED39DB */ + /* Shutdown */ + { + .data = { + 0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49, + 0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB + } + }, }; + +/** + * prep_negotiate_resp() - Create default response for Hyper-V Negotiate message + * @icmsghdrp: Pointer to msg header structure + * @icmsg_negotiate: Pointer to negotiate message structure + * @buf: Raw buffer channel data + * + * @icmsghdrp is of type &struct icmsg_hdr. + * @negop is of type &struct icmsg_negotiate. + * Set up and fill in default negotiate response message. This response can + * come from both the vmbus driver and the hv_utils driver. The current api + * will respond properly to both Windows 2008 and Windows 2008-R2 operating + * systems. + * + * Mainly used by Hyper-V drivers. + */ +void prep_negotiate_resp(struct icmsg_hdr *icmsghdrp, + struct icmsg_negotiate *negop, + u8 *buf) +{ + if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { + icmsghdrp->icmsgsize = 0x10; + + negop = (struct icmsg_negotiate *)&buf[ + sizeof(struct vmbuspipe_hdr) + + sizeof(struct icmsg_hdr)]; + + if (negop->icframe_vercnt == 2 && + negop->icversion_data[1].major == 3) { + negop->icversion_data[0].major = 3; + negop->icversion_data[0].minor = 0; + negop->icversion_data[1].major = 3; + negop->icversion_data[1].minor = 0; + } else { + negop->icversion_data[0].major = 1; + negop->icversion_data[0].minor = 0; + negop->icversion_data[1].major = 1; + negop->icversion_data[1].minor = 0; + } + + negop->icframe_vercnt = 1; + negop->icmsg_vercnt = 1; + } +} +EXPORT_SYMBOL(prep_negotiate_resp); + +/** + * chn_cb_negotiate() - Default handler for non IDE/SCSI/NETWORK + * Hyper-V requests + * @context: Pointer to argument structure. + * + * Set up the default handler for non device driver specific requests + * from Hyper-V. This stub responds to the default negotiate messages + * that come in for every non IDE/SCSI/Network request. + * This behavior is normally overwritten in the hv_utils driver. That + * driver handles requests like gracefull shutdown, heartbeats etc. + * + * Mainly used by Hyper-V drivers. + */ +void chn_cb_negotiate(void *context) +{ + struct vmbus_channel *channel = context; + u8 *buf; + u32 buflen, recvlen; + u64 requestid; + + struct icmsg_hdr *icmsghdrp; + struct icmsg_negotiate *negop = NULL; + + buflen = PAGE_SIZE; + buf = kmalloc(buflen, GFP_ATOMIC); + + VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); + + if (recvlen > 0) { + icmsghdrp = (struct icmsg_hdr *)&buf[ + sizeof(struct vmbuspipe_hdr)]; + + prep_negotiate_resp(icmsghdrp, negop, buf); + + icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION + | ICMSGHDRFLAG_RESPONSE; + + VmbusChannelSendPacket(channel, buf, + recvlen, requestid, + VmbusPacketTypeDataInBand, 0); + } + + kfree(buf); +} +EXPORT_SYMBOL(chn_cb_negotiate); + +/* + * Function table used for message responses for non IDE/SCSI/Network type + * messages. (Such as KVP/Shutdown etc) + */ +struct hyperv_service_callback hv_cb_utils[MAX_MSG_TYPES] = { + /* 0E0B6031-5213-4934-818B-38D90CED39DB */ + /* Shutdown */ + { + .msg_type = HV_SHUTDOWN_MSG, + .data = { + 0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49, + 0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB + }, + .callback = chn_cb_negotiate, + .log_msg = "Shutdown channel functionality initialized" + }, +}; +EXPORT_SYMBOL(hv_cb_utils); + /* * AllocVmbusChannel - Allocate and initialize a vmbus channel object */ @@ -132,7 +255,8 @@ void FreeVmbusChannel(struct vmbus_channel *Channel) } /* - * VmbusChannelProcessOffer - Process the offer by creating a channel/device associated with this offer + * VmbusChannelProcessOffer - Process the offer by creating a channel/device + * associated with this offer */ static void VmbusChannelProcessOffer(void *context) { @@ -140,6 +264,7 @@ static void VmbusChannelProcessOffer(void *context) struct vmbus_channel *channel; bool fNew = true; int ret; + int cnt; unsigned long flags; DPRINT_ENTER(VMBUS); @@ -209,6 +334,23 @@ static void VmbusChannelProcessOffer(void *context) * can cleanup properly */ newChannel->State = CHANNEL_OPEN_STATE; + cnt = 0; + + while (cnt != MAX_MSG_TYPES) { + if (memcmp(&newChannel->OfferMsg.Offer.InterfaceType, + &hv_cb_utils[cnt].data, + sizeof(struct hv_guid)) == 0) { + DPRINT_INFO(VMBUS, "%s", + hv_cb_utils[cnt].log_msg); + + if (VmbusChannelOpen(newChannel, 2 * PAGE_SIZE, + 2 * PAGE_SIZE, NULL, 0, + hv_cb_utils[cnt].callback, + newChannel) == 0) + hv_cb_utils[cnt].channel = newChannel; + } + cnt++; + } } DPRINT_EXIT(VMBUS); } diff --git a/drivers/staging/hv/Kconfig b/drivers/staging/hv/Kconfig index 4044702..79afb1e 100644 --- a/drivers/staging/hv/Kconfig +++ b/drivers/staging/hv/Kconfig @@ -29,4 +29,10 @@ config HYPERV_NET help Select this option to enable the Hyper-V virtual network driver. +config HYPERV_UTILS + tristate "Microsoft Hyper-V Utilities driver" + default HYPERV + help + Select this option to enable the Hyper-V Utilities. + endif diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 27ebae8..d2977ab 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -2,6 +2,7 @@ obj-$(CONFIG_HYPERV) += hv_vmbus.o obj-$(CONFIG_HYPERV_STORAGE) += hv_storvsc.o obj-$(CONFIG_HYPERV_BLOCK) += hv_blkvsc.o obj-$(CONFIG_HYPERV_NET) += hv_netvsc.o +obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o hv_vmbus-objs := vmbus_drv.o osd.o \ Vmbus.o Hv.o Connection.o Channel.o \ @@ -9,3 +10,4 @@ hv_vmbus-objs := vmbus_drv.o osd.o \ hv_storvsc-objs := storvsc_drv.o StorVsc.o hv_blkvsc-objs := blkvsc_drv.o BlkVsc.o hv_netvsc-objs := netvsc_drv.o NetVsc.o RndisFilter.o +hv_utils-objs := hyperv_utils.o ext_utils.o diff --git a/drivers/staging/hv/VmbusPacketFormat.h b/drivers/staging/hv/VmbusPacketFormat.h index 79120bc..f9f6b4b 100644 --- a/drivers/staging/hv/VmbusPacketFormat.h +++ b/drivers/staging/hv/VmbusPacketFormat.h @@ -22,6 +22,7 @@ */ #ifndef _VMBUSPACKETFORMAT_H_ +#define _VMBUSPACKETFORMAT_H_ struct vmpacket_descriptor { u16 Type; diff --git a/drivers/staging/hv/ext_utils.c b/drivers/staging/hv/ext_utils.c new file mode 100644 index 0000000..a44cd1b --- /dev/null +++ b/drivers/staging/hv/ext_utils.c @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2010, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + */ +#include +#include "utils.h" + +void shutdown_linux_system() +{ + orderly_poweroff(false); +} diff --git a/drivers/staging/hv/hyperv_utils.c b/drivers/staging/hv/hyperv_utils.c new file mode 100644 index 0000000..2a48647 --- /dev/null +++ b/drivers/staging/hv/hyperv_utils.c @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2010, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + */ +#include +#include +#include +#include +#include +#include + +#include "logging.h" +#include "osd.h" +#include "vmbus.h" +#include "VmbusPacketFormat.h" +#include "VmbusChannelInterface.h" +#include "VersionInfo.h" +#include "Channel.h" +#include "VmbusPrivate.h" +#include "VmbusApi.h" +#include "utils.h" + + +void shutdown_onchannelcallback(void *context) +{ + struct vmbus_channel *channel = context; + u8 *buf; + u32 buflen, recvlen; + u64 requestid; + u8 execute_shutdown = false; + + struct shutdown_msg_data *shutdown_msg; + + struct icmsg_hdr *icmsghdrp; + struct icmsg_negotiate *negop = NULL; + + DPRINT_ENTER(VMBUS); + + buflen = PAGE_SIZE; + buf = kmalloc(buflen, GFP_ATOMIC); + + VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); + + if (recvlen > 0) { + DPRINT_DBG(VMBUS, "shutdown packet: len=%d, requestid=%lld", + recvlen, requestid); + + icmsghdrp = (struct icmsg_hdr *)&buf[ + sizeof(struct vmbuspipe_hdr)]; + + if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { + prep_negotiate_resp(icmsghdrp, negop, buf); + } else { + shutdown_msg = (struct shutdown_msg_data *)&buf[ + sizeof(struct vmbuspipe_hdr) + + sizeof(struct icmsg_hdr)]; + + switch (shutdown_msg->flags) { + case 0: + case 1: + icmsghdrp->status = HV_S_OK; + execute_shutdown = true; + + DPRINT_INFO(VMBUS, "Shutdown request received -" + " gracefull shutdown initiated"); + break; + default: + icmsghdrp->status = HV_E_FAIL; + execute_shutdown = false; + + DPRINT_INFO(VMBUS, "Shutdown request received -" + " Invalid request"); + break; + }; + } + + icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION + | ICMSGHDRFLAG_RESPONSE; + + VmbusChannelSendPacket(channel, buf, + recvlen, requestid, + VmbusPacketTypeDataInBand, 0); + } + + kfree(buf); + + DPRINT_EXIT(VMBUS); + + if (execute_shutdown == true) + shutdown_linux_system(); +} + +static int __init init_hyperv_utils(void) +{ + printk(KERN_INFO "Registering HyperV Utility Driver\n"); + + hv_cb_utils[HV_SHUTDOWN_MSG].channel->OnChannelCallback = + &shutdown_onchannelcallback; + hv_cb_utils[HV_SHUTDOWN_MSG].callback = &shutdown_onchannelcallback; + + return 0; +} + +static void exit_hyperv_utils(void) +{ + printk(KERN_INFO "De-Registered HyperV Utility Driver\n"); + + hv_cb_utils[HV_SHUTDOWN_MSG].channel->OnChannelCallback = + &chn_cb_negotiate; + hv_cb_utils[HV_SHUTDOWN_MSG].callback = &chn_cb_negotiate; +} + +module_init(init_hyperv_utils); +module_exit(exit_hyperv_utils); + +MODULE_DESCRIPTION("Hyper-V Utilities"); +MODULE_VERSION(HV_DRV_VERSION); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/hv/utils.h b/drivers/staging/hv/utils.h new file mode 100644 index 0000000..4e09804 --- /dev/null +++ b/drivers/staging/hv/utils.h @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + */ +#ifndef _UTILS_H_ +#define _UTILS_H_ + +/* + * Common header for Hyper-V ICs + */ +#define ICMSGTYPE_NEGOTIATE 0 +#define ICMSGTYPE_HEARTBEAT 1 +#define ICMSGTYPE_KVPEXCHANGE 2 +#define ICMSGTYPE_SHUTDOWN 3 +#define ICMSGTYPE_TIMESYNC 4 +#define ICMSGTYPE_VSS 5 + +#define ICMSGHDRFLAG_TRANSACTION 1 +#define ICMSGHDRFLAG_REQUEST 2 +#define ICMSGHDRFLAG_RESPONSE 4 + +#define HV_S_OK 0x00000000 +#define HV_E_FAIL 0x80004005 +#define HV_ERROR_NOT_SUPPORTED 0x80070032 +#define HV_ERROR_MACHINE_LOCKED 0x800704F7 + +struct vmbuspipe_hdr { + u32 flags; + u32 msgsize; +} __attribute__((packed)); + +struct ic_version { + u16 major; + u16 minor; +} __attribute__((packed)); + +struct icmsg_hdr { + struct ic_version icverframe; + u16 icmsgtype; + struct ic_version icvermsg; + u16 icmsgsize; + u32 status; + u8 ictransaction_id; + u8 icflags; + u8 reserved[2]; +} __attribute__((packed)); + +struct icmsg_negotiate { + u16 icframe_vercnt; + u16 icmsg_vercnt; + u32 reserved; + struct ic_version icversion_data[1]; /* any size array */ +} __attribute__((packed)); + +struct shutdown_msg_data { + u32 reason_code; + u32 timeout_seconds; + u32 flags; + u8 display_message[2048]; +} __attribute__((packed)); + +#define HV_SHUTDOWN_MSG 0 + +struct hyperv_service_callback { + u8 msg_type; + char *log_msg; + unsigned char data[16]; + struct vmbus_channel *channel; + void (*callback) (void *context); +}; + +extern void prep_negotiate_resp(struct icmsg_hdr *, + struct icmsg_negotiate *, u8 *); +extern void shutdown_linux_system(void); +extern void chn_cb_negotiate(void *); +extern struct hyperv_service_callback hv_cb_utils[]; + +#endif /* _UTILS_H_ */ -- cgit v0.10.2 From b3413092cc86d6c1b5b1408c3bb37998a82a588a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 08:21:01 -0700 Subject: Staging: hv: fix up formatting issues in utils.h -------- cut here and print out and paste on wall -------- Tabs, not spaces -------- cut here and print out and paste on wall -------- Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/utils.h b/drivers/staging/hv/utils.h index 4e09804..0f2507d 100644 --- a/drivers/staging/hv/utils.h +++ b/drivers/staging/hv/utils.h @@ -18,54 +18,54 @@ * Haiyang Zhang * Hank Janssen */ -#ifndef _UTILS_H_ -#define _UTILS_H_ +#ifndef __HV_UTILS_H_ +#define __HV_UTILS_H_ /* * Common header for Hyper-V ICs */ -#define ICMSGTYPE_NEGOTIATE 0 -#define ICMSGTYPE_HEARTBEAT 1 -#define ICMSGTYPE_KVPEXCHANGE 2 -#define ICMSGTYPE_SHUTDOWN 3 -#define ICMSGTYPE_TIMESYNC 4 -#define ICMSGTYPE_VSS 5 +#define ICMSGTYPE_NEGOTIATE 0 +#define ICMSGTYPE_HEARTBEAT 1 +#define ICMSGTYPE_KVPEXCHANGE 2 +#define ICMSGTYPE_SHUTDOWN 3 +#define ICMSGTYPE_TIMESYNC 4 +#define ICMSGTYPE_VSS 5 -#define ICMSGHDRFLAG_TRANSACTION 1 -#define ICMSGHDRFLAG_REQUEST 2 -#define ICMSGHDRFLAG_RESPONSE 4 +#define ICMSGHDRFLAG_TRANSACTION 1 +#define ICMSGHDRFLAG_REQUEST 2 +#define ICMSGHDRFLAG_RESPONSE 4 -#define HV_S_OK 0x00000000 -#define HV_E_FAIL 0x80004005 -#define HV_ERROR_NOT_SUPPORTED 0x80070032 -#define HV_ERROR_MACHINE_LOCKED 0x800704F7 +#define HV_S_OK 0x00000000 +#define HV_E_FAIL 0x80004005 +#define HV_ERROR_NOT_SUPPORTED 0x80070032 +#define HV_ERROR_MACHINE_LOCKED 0x800704F7 struct vmbuspipe_hdr { - u32 flags; - u32 msgsize; + u32 flags; + u32 msgsize; } __attribute__((packed)); struct ic_version { - u16 major; - u16 minor; + u16 major; + u16 minor; } __attribute__((packed)); struct icmsg_hdr { - struct ic_version icverframe; - u16 icmsgtype; - struct ic_version icvermsg; - u16 icmsgsize; - u32 status; - u8 ictransaction_id; - u8 icflags; - u8 reserved[2]; + struct ic_version icverframe; + u16 icmsgtype; + struct ic_version icvermsg; + u16 icmsgsize; + u32 status; + u8 ictransaction_id; + u8 icflags; + u8 reserved[2]; } __attribute__((packed)); struct icmsg_negotiate { - u16 icframe_vercnt; - u16 icmsg_vercnt; - u32 reserved; - struct ic_version icversion_data[1]; /* any size array */ + u16 icframe_vercnt; + u16 icmsg_vercnt; + u32 reserved; + struct ic_version icversion_data[1]; /* any size array */ } __attribute__((packed)); struct shutdown_msg_data { @@ -75,7 +75,7 @@ struct shutdown_msg_data { u8 display_message[2048]; } __attribute__((packed)); -#define HV_SHUTDOWN_MSG 0 +#define HV_SHUTDOWN_MSG 0 struct hyperv_service_callback { u8 msg_type; @@ -86,9 +86,9 @@ struct hyperv_service_callback { }; extern void prep_negotiate_resp(struct icmsg_hdr *, - struct icmsg_negotiate *, u8 *); + struct icmsg_negotiate *, u8 *); extern void shutdown_linux_system(void); extern void chn_cb_negotiate(void *); extern struct hyperv_service_callback hv_cb_utils[]; -#endif /* _UTILS_H_ */ +#endif /* __HV_UTILS_H_ */ -- cgit v0.10.2 From 9e629075ac694ab4d4971d4e62dfb749118bce70 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 08:26:23 -0700 Subject: Staging: hv: delete ext_utils.c A whole file just for a single line function call is beyond silly. Delete it and move the call into where it is being called. Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index d2977ab..7a57a88 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -10,4 +10,4 @@ hv_vmbus-objs := vmbus_drv.o osd.o \ hv_storvsc-objs := storvsc_drv.o StorVsc.o hv_blkvsc-objs := blkvsc_drv.o BlkVsc.o hv_netvsc-objs := netvsc_drv.o NetVsc.o RndisFilter.o -hv_utils-objs := hyperv_utils.o ext_utils.o +hv_utils-objs := hyperv_utils.o diff --git a/drivers/staging/hv/ext_utils.c b/drivers/staging/hv/ext_utils.c deleted file mode 100644 index a44cd1b..0000000 --- a/drivers/staging/hv/ext_utils.c +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (c) 2010, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - */ -#include -#include "utils.h" - -void shutdown_linux_system() -{ - orderly_poweroff(false); -} diff --git a/drivers/staging/hv/hyperv_utils.c b/drivers/staging/hv/hyperv_utils.c index 2a48647..ca52fba 100644 --- a/drivers/staging/hv/hyperv_utils.c +++ b/drivers/staging/hv/hyperv_utils.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "logging.h" @@ -103,7 +104,7 @@ void shutdown_onchannelcallback(void *context) DPRINT_EXIT(VMBUS); if (execute_shutdown == true) - shutdown_linux_system(); + orderly_poweroff(false); } static int __init init_hyperv_utils(void) diff --git a/drivers/staging/hv/utils.h b/drivers/staging/hv/utils.h index 0f2507d..e404b21 100644 --- a/drivers/staging/hv/utils.h +++ b/drivers/staging/hv/utils.h @@ -87,7 +87,6 @@ struct hyperv_service_callback { extern void prep_negotiate_resp(struct icmsg_hdr *, struct icmsg_negotiate *, u8 *); -extern void shutdown_linux_system(void); extern void chn_cb_negotiate(void *); extern struct hyperv_service_callback hv_cb_utils[]; -- cgit v0.10.2 From 8566ea7c6f9660623a6f04bc73431f761dee32c7 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Mon, 3 May 2010 17:50:45 -0400 Subject: Staging: hv: move ASSERT(scmnd) to a more useful location There's not much point to make sure scmnd is not NULL after an assert that would dereference scmnd. The ASSERT()'s should be removed, but until they are at least they at least can be in the right order. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index 5e28e4c..26b35a6 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -386,9 +386,9 @@ static void storvsc_commmand_completion(struct hv_storvsc_request *request) struct scsi_sense_hdr sense_hdr; ASSERT(request == &cmd_request->request); + ASSERT(scmnd); ASSERT((unsigned long)scmnd->host_scribble == (unsigned long)cmd_request); - ASSERT(scmnd); ASSERT(scmnd->scsi_done); DPRINT_ENTER(STORVSC_DRV); -- cgit v0.10.2 From 694a98073f83ce1c14e3c0bba182bfeba5c44f01 Mon Sep 17 00:00:00 2001 From: Joe Perches Date: Mon, 3 May 2010 12:33:16 -0700 Subject: Staging: staging/cxt1e1: Convert bare printks to pr_ Added #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt A few line splits for long arguments A couple of embedded function names converted to "%s", __func__ Removed some uses of THIS_MODULE->name Signed-off-by: Joe Perches Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/cxt1e1/comet.c b/drivers/staging/cxt1e1/comet.c index b709099..dcbe6b6 100644 --- a/drivers/staging/cxt1e1/comet.c +++ b/drivers/staging/cxt1e1/comet.c @@ -11,6 +11,8 @@ * GNU General Public License for more details. */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include #include #include "pmcc4_sysdep.h" @@ -291,12 +293,12 @@ init_comet (void *ci, comet_t * comet, u_int32_t port_mode, int clockmaster, if ((moreParams & CFG_CLK_PORT_MASK) == CFG_CLK_PORT_INTERNAL) { if (log_level >= LOG_SBEBUG12) - printk (">> init_comet: clockmaster internal clock\n"); + pr_info(">> %s: clockmaster internal clock\n", __func__); pci_write_32 ((u_int32_t *) &comet->tx_time, 0x0d); /* internal oscillator */ } else /* external clock source */ { if (log_level >= LOG_SBEBUG12) - printk (">> init_comet: clockmaster external clock\n"); + pr_info(">> %s: clockmaster external clock\n", __func__); pci_write_32 ((u_int32_t *) &comet->tx_time, 0x09); /* loop timing * (external) */ } @@ -311,7 +313,7 @@ init_comet (void *ci, comet_t * comet, u_int32_t port_mode, int clockmaster, pci_write_32 ((u_int32_t *) &comet->brif_fpcfg, 0x20); /* Slave Mode i.e. * FPMODE=1 (@0x20) */ if (log_level >= LOG_SBEBUG12) - printk (">> init_comet: clockslave internal clock\n"); + pr_info(">> %s: clockslave internal clock\n", __func__); pci_write_32 ((u_int32_t *) &comet->tx_time, 0x0d); /* oscillator timing */ } diff --git a/drivers/staging/cxt1e1/functions.c b/drivers/staging/cxt1e1/functions.c index 738129d..86b4980 100644 --- a/drivers/staging/cxt1e1/functions.c +++ b/drivers/staging/cxt1e1/functions.c @@ -68,7 +68,7 @@ pci_read_32 (u_int32_t *p) FLUSH_PCI_READ (); v = le32_to_cpu (*p); if (log_level >= LOG_DEBUG) - printk ("pci_read : %x = %x\n", (u_int32_t) p, v); + pr_info("pci_read : %x = %x\n", (u_int32_t) p, v); return v; #else FLUSH_PCI_READ (); /* */ @@ -81,7 +81,7 @@ pci_write_32 (u_int32_t *p, u_int32_t v) { #ifdef FLOW_DEBUG if (log_level >= LOG_DEBUG) - printk ("pci_write: %x = %x\n", (u_int32_t) p, v); + pr_info("pci_write: %x = %x\n", (u_int32_t) p, v); #endif *p = cpu_to_le32 (v); FLUSH_PCI_WRITE (); /* This routine is called from routines diff --git a/drivers/staging/cxt1e1/hwprobe.c b/drivers/staging/cxt1e1/hwprobe.c index 571fa1f..8d4e8d2 100644 --- a/drivers/staging/cxt1e1/hwprobe.c +++ b/drivers/staging/cxt1e1/hwprobe.c @@ -83,17 +83,17 @@ show_two (hdw_info_t * hi, int brdno) (sn[5] & 0x0000ff), (u_int8_t) hi->revid[0]); - printk ("%s\n", banner); + pr_info("%s\n", banner); pdev = hi->pdev[0]; - printk ("%s: %s at v/p=%lx/%lx (%02x:%02x.%x) irq %d\n", + pr_info("%s: %s at v/p=%lx/%lx (%02x:%02x.%x) irq %d\n", hi->devname, "MUSYCC", (unsigned long) hi->addr_mapped[0], hi->addr[0], hi->pci_busno, (u_int8_t) PCI_SLOT (pdev->devfn), (u_int8_t) PCI_FUNC (pdev->devfn), pdev->irq); pdev = hi->pdev[1]; - printk ("%s: %s at v/p=%lx/%lx (%02x:%02x.%x) irq %d\n", + pr_info("%s: %s at v/p=%lx/%lx (%02x:%02x.%x) irq %d\n", hi->devname, "EBUS ", (unsigned long) hi->addr_mapped[1], hi->addr[1], hi->pci_busno, (u_int8_t) PCI_SLOT (pdev->devfn), @@ -116,22 +116,22 @@ hdw_sn_get (hdw_info_t * hi, int brdno) { unsigned char *ucp = (unsigned char *) &hi->mfg_info.data; - printk ("eeprom[00]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + pr_info("eeprom[00]: %02x %02x %02x %02x %02x %02x %02x %02x\n", *(ucp + 0), *(ucp + 1), *(ucp + 2), *(ucp + 3), *(ucp + 4), *(ucp + 5), *(ucp + 6), *(ucp + 7)); - printk ("eeprom[08]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + pr_info("eeprom[08]: %02x %02x %02x %02x %02x %02x %02x %02x\n", *(ucp + 8), *(ucp + 9), *(ucp + 10), *(ucp + 11), *(ucp + 12), *(ucp + 13), *(ucp + 14), *(ucp + 15)); - printk ("eeprom[16]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + pr_info("eeprom[16]: %02x %02x %02x %02x %02x %02x %02x %02x\n", *(ucp + 16), *(ucp + 17), *(ucp + 18), *(ucp + 19), *(ucp + 20), *(ucp + 21), *(ucp + 22), *(ucp + 23)); - printk ("eeprom[24]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + pr_info("eeprom[24]: %02x %02x %02x %02x %02x %02x %02x %02x\n", *(ucp + 24), *(ucp + 25), *(ucp + 26), *(ucp + 27), *(ucp + 28), *(ucp + 29), *(ucp + 30), *(ucp + 31)); - printk ("eeprom[32]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + pr_info("eeprom[32]: %02x %02x %02x %02x %02x %02x %02x %02x\n", *(ucp + 32), *(ucp + 33), *(ucp + 34), *(ucp + 35), *(ucp + 36), *(ucp + 37), *(ucp + 38), *(ucp + 39)); - printk ("eeprom[40]: %02x %02x %02x %02x %02x %02x %02x %02x\n", + pr_info("eeprom[40]: %02x %02x %02x %02x %02x %02x %02x %02x\n", *(ucp + 40), *(ucp + 41), *(ucp + 42), *(ucp + 43), *(ucp + 44), *(ucp + 45), *(ucp + 46), *(ucp + 47)); } #endif #if 0 - printk ("sn: %x %x %x %x %x %x\n", + pr_info("sn: %x %x %x %x %x %x\n", hi->mfg_info.Serial[0], hi->mfg_info.Serial[1], hi->mfg_info.Serial[2], @@ -144,7 +144,7 @@ hdw_sn_get (hdw_info_t * hi, int brdno) { /* bad crc, data is suspect */ if (log_level >= LOG_WARN) - printk ("%s: EEPROM cksum error\n", hi->devname); + pr_info("%s: EEPROM cksum error\n", hi->devname); hi->mfg_info_sts = EEPROM_CRCERR; } else hi->mfg_info_sts = EEPROM_OK; diff --git a/drivers/staging/cxt1e1/linux.c b/drivers/staging/cxt1e1/linux.c index ce2942c..134e756 100644 --- a/drivers/staging/cxt1e1/linux.c +++ b/drivers/staging/cxt1e1/linux.c @@ -195,7 +195,8 @@ c4_wk_chan_restart (mch_t * ch) mpi_t *pi = ch->up; #ifdef RLD_RESTART_DEBUG - printk (">> c4_wk_chan_restart: queueing Port %d Chan %d, mch_t @ %p\n", pi->portnum, ch->channum, ch); + pr_info(">> %s: queueing Port %d Chan %d, mch_t @ %p\n", + __func__, pi->portnum, ch->channum, ch); #endif /* create new entry w/in workqueue for this channel and let'er rip */ @@ -236,7 +237,8 @@ c4_wq_port_init (mpi_t * pi) sprintf (np, "%s%d", pi->up->devname, pi->portnum); /* IE pmcc4-01) */ #ifdef RLD_RESTART_DEBUG - printk (">> c4_wq_port_init: creating workqueue <%s> for Port %d.\n", name, pi->portnum); /* RLD DEBUG */ + pr_info(">> %s: creating workqueue <%s> for Port %d.\n", + __func__, name, pi->portnum); /* RLD DEBUG */ #endif if (!(pi->wq_port = create_singlethread_workqueue (name))) return ENOMEM; @@ -284,7 +286,7 @@ c4_ebus_interrupt (int irq, void *dev_instance) static int void_open (struct net_device * ndev) { - printk ("%s: trying to open master device !\n", ndev->name); + pr_info("%s: trying to open master device !\n", ndev->name); return -1; } @@ -317,7 +319,7 @@ chan_open (struct net_device * ndev) hdlc->proto = IF_PROTO_HDLC; if ((ret = hdlc_open (hdlc))) { - printk ("%s: hdlc_open failure, err %d.\n", THIS_MODULE->name, ret); + pr_info("hdlc_open failure, err %d.\n", ret); return ret; } if ((ret = c4_chan_up (DEV_TO_PRIV (hdlc)->ci, DEV_TO_PRIV (hdlc)->channum))) @@ -340,7 +342,7 @@ chan_open (struct net_device * ndev) if ((ret = hdlc_open (ndev))) { - printk ("%s: hdlc_open failure, err %d.\n", THIS_MODULE->name, ret); + pr_info("hdlc_open failure, err %d.\n", ret); return ret; } if ((ret = c4_chan_up (priv->ci, priv->channum))) @@ -629,7 +631,7 @@ create_chan (struct net_device * ndev, ci_t * ci, if (ret) { if (log_level >= LOG_WARN) - printk ("%s: create_chan[%d] registration error = %d.\n", + pr_info("%s: create_chan[%d] registration error = %d.\n", ci->devname, cp->channum, ret); free_netdev (dev); /* cleanup */ return 0; /* failed to register */ @@ -1018,7 +1020,7 @@ c4_ioctl (struct net_device * ndev, struct ifreq * ifr, int cmd) #endif #if 0 - printk ("c4_ioctl: iocmd %x, dir %x type %x nr %x iolen %d.\n", iocmd, + pr_info("c4_ioctl: iocmd %x, dir %x type %x nr %x iolen %d.\n", iocmd, _IOC_DIR (iocmd), _IOC_TYPE (iocmd), _IOC_NR (iocmd), _IOC_SIZE (iocmd)); #endif @@ -1031,23 +1033,23 @@ c4_ioctl (struct net_device * ndev, struct ifreq * ifr, int cmd) switch (iocmd) { case SBE_IOC_PORT_GET: - //printk (">> SBE_IOC_PORT_GET Ioctl...\n"); + //pr_info(">> SBE_IOC_PORT_GET Ioctl...\n"); ret = do_get_port (ndev, data); break; case SBE_IOC_PORT_SET: - //printk (">> SBE_IOC_PORT_SET Ioctl...\n"); + //pr_info(">> SBE_IOC_PORT_SET Ioctl...\n"); ret = do_set_port (ndev, data); break; case SBE_IOC_CHAN_GET: - //printk (">> SBE_IOC_CHAN_GET Ioctl...\n"); + //pr_info(">> SBE_IOC_CHAN_GET Ioctl...\n"); ret = do_get_chan (ndev, data); break; case SBE_IOC_CHAN_SET: - //printk (">> SBE_IOC_CHAN_SET Ioctl...\n"); + //pr_info(">> SBE_IOC_CHAN_SET Ioctl...\n"); ret = do_set_chan (ndev, data); break; case C4_DEL_CHAN: - //printk (">> C4_DEL_CHAN Ioctl...\n"); + //pr_info(">> C4_DEL_CHAN Ioctl...\n"); ret = do_del_chan (ndev, data); break; case SBE_IOC_CHAN_NEW: @@ -1084,7 +1086,7 @@ c4_ioctl (struct net_device * ndev, struct ifreq * ifr, int cmd) return -EFAULT; break; default: - //printk (">> c4_ioctl: EINVAL - unknown iocmd <%x>\n", iocmd); + //pr_info(">> c4_ioctl: EINVAL - unknown iocmd <%x>\n", iocmd); ret = -EINVAL; break; } diff --git a/drivers/staging/cxt1e1/musycc.c b/drivers/staging/cxt1e1/musycc.c index 7a6d92a..d3f5a5b 100644 --- a/drivers/staging/cxt1e1/musycc.c +++ b/drivers/staging/cxt1e1/musycc.c @@ -137,7 +137,7 @@ musycc_dump_rxbuffer_ring (mch_t * ch, int lockit) } if (ch->rxd_num == 0) { - printk (" ZERO receive buffers allocated for this channel."); + pr_info(" ZERO receive buffers allocated for this channel."); } else { FLUSH_MEM_READ (); @@ -146,7 +146,7 @@ musycc_dump_rxbuffer_ring (mch_t * ch, int lockit) { status = le32_to_cpu (m->status); { - printk ("%c %08lx[%2d]: sts %08x (%c%c%c%c:%d.) Data [%08x] Next [%08x]\n", + pr_info("%c %08lx[%2d]: sts %08x (%c%c%c%c:%d.) Data [%08x] Next [%08x]\n", (m == &ch->mdr[ch->rxix_irq_srv]) ? 'F' : ' ', (unsigned long) m, n, status, @@ -170,13 +170,13 @@ musycc_dump_rxbuffer_ring (mch_t * ch, int lockit) { dp = (u_int32_t *) OS_phystov ((void *) (le32_to_cpu (m->data))); if (len >= 0x10) - printk (" %x[%x]: %08X %08X %08X %08x\n", (u_int32_t) dp, len, + pr_info(" %x[%x]: %08X %08X %08X %08x\n", (u_int32_t) dp, len, *dp, *(dp + 1), *(dp + 2), *(dp + 3)); else if (len >= 0x08) - printk (" %x[%x]: %08X %08X\n", (u_int32_t) dp, len, + pr_info(" %x[%x]: %08X %08X\n", (u_int32_t) dp, len, *dp, *(dp + 1)); else - printk (" %x[%x]: %08X\n", (u_int32_t) dp, len, *dp); + pr_info(" %x[%x]: %08X\n", (u_int32_t) dp, len, *dp); } } #endif @@ -184,7 +184,7 @@ musycc_dump_rxbuffer_ring (mch_t * ch, int lockit) m = m->snext; } } /* -for- */ - printk ("\n"); + pr_info("\n"); if (lockit) { @@ -209,7 +209,7 @@ musycc_dump_txbuffer_ring (mch_t * ch, int lockit) } if (ch->txd_num == 0) { - printk (" ZERO transmit buffers allocated for this channel."); + pr_info(" ZERO transmit buffers allocated for this channel."); } else { FLUSH_MEM_READ (); @@ -218,7 +218,7 @@ musycc_dump_txbuffer_ring (mch_t * ch, int lockit) { status = le32_to_cpu (m->status); { - printk ("%c%c %08lx[%2d]: sts %08x (%c%c%c%c:%d.) Data [%08x] Next [%08x]\n", + pr_info("%c%c %08lx[%2d]: sts %08x (%c%c%c%c:%d.) Data [%08x] Next [%08x]\n", (m == ch->txd_usr_add) ? 'F' : ' ', (m == ch->txd_irq_srv) ? 'L' : ' ', (unsigned long) m, n, @@ -238,13 +238,13 @@ musycc_dump_txbuffer_ring (mch_t * ch, int lockit) { dp = (u_int32_t *) OS_phystov ((void *) (le32_to_cpu (m->data))); if (len >= 0x10) - printk (" %x[%x]: %08X %08X %08X %08x\n", (u_int32_t) dp, len, + pr_info(" %x[%x]: %08X %08X %08X %08x\n", (u_int32_t) dp, len, *dp, *(dp + 1), *(dp + 2), *(dp + 3)); else if (len >= 0x08) - printk (" %x[%x]: %08X %08X\n", (u_int32_t) dp, len, + pr_info(" %x[%x]: %08X %08X\n", (u_int32_t) dp, len, *dp, *(dp + 1)); else - printk (" %x[%x]: %08X\n", (u_int32_t) dp, len, *dp); + pr_info(" %x[%x]: %08X\n", (u_int32_t) dp, len, *dp); } } #endif @@ -252,7 +252,7 @@ musycc_dump_txbuffer_ring (mch_t * ch, int lockit) m = m->snext; } } /* -for- */ - printk ("\n"); + pr_info("\n"); if (lockit) { @@ -281,7 +281,7 @@ musycc_dump_ring (ci_t * ci, unsigned int chan) int bh; bh = atomic_read (&ci->bh_pending); - printk (">> bh_pend %d [%d] ihead %d itail %d [%d] th_cnt %d bh_cnt %d wdcnt %d note %d\n", + pr_info(">> bh_pend %d [%d] ihead %d itail %d [%d] th_cnt %d bh_cnt %d wdcnt %d note %d\n", bh, max_bh, ci->iqp_headx, ci->iqp_tailx, max_intcnt, ci->intlog.drvr_intr_thcount, ci->intlog.drvr_intr_bhcount, @@ -292,20 +292,20 @@ musycc_dump_ring (ci_t * ci, unsigned int chan) if (!(ch = sd_find_chan (dummy, chan))) { - printk (">> musycc_dump_ring: channel %d not up.\n", chan); + pr_info(">> musycc_dump_ring: channel %d not up.\n", chan); return ENOENT; } - printk (">> CI %p CHANNEL %3d @ %p: state %x status/p %x/%x\n", ci, chan, ch, ch->state, + pr_info(">> CI %p CHANNEL %3d @ %p: state %x status/p %x/%x\n", ci, chan, ch, ch->state, ch->status, ch->p.status); - printk ("--------------------------------\nTX Buffer Ring - Channel %d, txd_num %d. (bd/ch pend %d %d), TXD required %d, txpkt %lu\n", + pr_info("--------------------------------\nTX Buffer Ring - Channel %d, txd_num %d. (bd/ch pend %d %d), TXD required %d, txpkt %lu\n", chan, ch->txd_num, (u_int32_t) atomic_read (&ci->tx_pending), (u_int32_t) atomic_read (&ch->tx_pending), ch->txd_required, ch->s.tx_packets); - printk ("++ User 0x%p IRQ_SRV 0x%p USR_ADD 0x%p QStopped %x, start_tx %x tx_full %d txd_free %d mode %x\n", + pr_info("++ User 0x%p IRQ_SRV 0x%p USR_ADD 0x%p QStopped %x, start_tx %x tx_full %d txd_free %d mode %x\n", ch->user, ch->txd_irq_srv, ch->txd_usr_add, sd_queue_stopped (ch->user), ch->ch_start_tx, ch->tx_full, ch->txd_free, ch->p.chan_mode); musycc_dump_txbuffer_ring (ch, 1); - printk ("RX Buffer Ring - Channel %d, rxd_num %d. IRQ_SRV[%d] 0x%p, start_rx %x rxpkt %lu\n", + pr_info("RX Buffer Ring - Channel %d, rxd_num %d. IRQ_SRV[%d] 0x%p, start_rx %x rxpkt %lu\n", chan, ch->rxd_num, ch->rxix_irq_srv, &ch->mdr[ch->rxix_irq_srv], ch->ch_start_rx, ch->s.rx_packets); musycc_dump_rxbuffer_ring (ch, 1); @@ -400,7 +400,7 @@ musycc_update_tx_thp (mch_t * ch) spin_unlock_irqrestore (&ch->ch_txlock, flags); #ifdef RLD_TRANS_DEBUG - printk ("++ musycc_update_tx_thp[%d]: setting thp = %p, sts %x\n", ch->channum, md, md->status); + pr_info("++ musycc_update_tx_thp[%d]: setting thp = %p, sts %x\n", ch->channum, md, md->status); #endif } @@ -429,7 +429,7 @@ musycc_wq_chan_restart (void *arg) /* channel private structure */ pi = ch->up; #ifdef RLD_TRANS_DEBUG - printk ("wq_chan_restart[%d]: start_RT[%d/%d] status %x\n", + pr_info("wq_chan_restart[%d]: start_RT[%d/%d] status %x\n", ch->channum, ch->ch_start_rx, ch->ch_start_tx, ch->status); #endif @@ -451,12 +451,12 @@ musycc_wq_chan_restart (void *arg) /* channel private structure */ hereb4--; #ifdef RLD_TRANS_DEBUG md = &ch->mdr[ch->rxix_irq_srv]; - printk ("++ musycc_wq_chan_restart[%d] CHAN RX ACTIVATE: rxix_irq_srv %d, md %p sts %x, rxpkt %lu\n", + pr_info("++ musycc_wq_chan_restart[%d] CHAN RX ACTIVATE: rxix_irq_srv %d, md %p sts %x, rxpkt %lu\n", ch->channum, ch->rxix_irq_srv, md, le32_to_cpu (md->status), ch->s.rx_packets); #elif defined(RLD_RXACT_DEBUG) md = &ch->mdr[ch->rxix_irq_srv]; - printk ("++ musycc_wq_chan_restart[%d] CHAN RX ACTIVATE: rxix_irq_srv %d, md %p sts %x, rxpkt %lu\n", + pr_info("++ musycc_wq_chan_restart[%d] CHAN RX ACTIVATE: rxix_irq_srv %d, md %p sts %x, rxpkt %lu\n", ch->channum, ch->rxix_irq_srv, md, le32_to_cpu (md->status), ch->s.rx_packets); musycc_dump_rxbuffer_ring (ch, 1); /* RLD DEBUG */ @@ -482,7 +482,7 @@ musycc_wq_chan_restart (void *arg) /* channel private structure */ if (!md) { #ifdef RLD_TRANS_DEBUG - printk ("-- musycc_wq_chan_restart[%d]: WARNING, starting NULL md\n", ch->channum); + pr_info("-- musycc_wq_chan_restart[%d]: WARNING, starting NULL md\n", ch->channum); #endif #if 0 spin_unlock_irqrestore (&ch->ch_txlock, flags); @@ -494,7 +494,7 @@ musycc_wq_chan_restart (void *arg) /* channel private structure */ spin_unlock_irqrestore (&ch->ch_txlock, flags); /* allow interrupts for service request */ #endif #ifdef RLD_TRANS_DEBUG - printk ("++ musycc_wq_chan_restart() CHAN TX ACTIVATE: chan %d txd_irq_srv %p = sts %x, txpkt %lu\n", + pr_info("++ musycc_wq_chan_restart() CHAN TX ACTIVATE: chan %d txd_irq_srv %p = sts %x, txpkt %lu\n", ch->channum, ch->txd_irq_srv, ch->txd_irq_srv->status, ch->s.tx_packets); #endif musycc_serv_req (pi, SR_CHANNEL_ACTIVATE | SR_TX_DIRECTION | ch->gchan); @@ -503,7 +503,7 @@ musycc_wq_chan_restart (void *arg) /* channel private structure */ else { /* retain request to start until retried and we have data to xmit */ - printk ("-- musycc_wq_chan_restart[%d]: DELAYED due to md %p sts %x data %x, start_tx %x\n", + pr_info("-- musycc_wq_chan_restart[%d]: DELAYED due to md %p sts %x data %x, start_tx %x\n", ch->channum, md, le32_to_cpu (md->status), le32_to_cpu (md->data), ch->ch_start_tx); @@ -527,14 +527,14 @@ void musycc_chan_restart (mch_t * ch) { #ifdef RLD_RESTART_DEBUG - printk ("++ musycc_chan_restart[%d]: txd_irq_srv @ %p = sts %x\n", + pr_info("++ musycc_chan_restart[%d]: txd_irq_srv @ %p = sts %x\n", ch->channum, ch->txd_irq_srv, ch->txd_irq_srv->status); #endif #if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,41) /* 2.6 - find next unprocessed message, then set TX thp to it */ #ifdef RLD_RESTART_DEBUG - printk (">> musycc_chan_restart: scheduling Chan %x workQ @ %p\n", ch->channum, &ch->ch_work); + pr_info(">> musycc_chan_restart: scheduling Chan %x workQ @ %p\n", ch->channum, &ch->ch_work); #endif c4_wk_chan_restart (ch); /* work queue mechanism fires off: Ref: * musycc_wq_chan_restart () */ @@ -544,7 +544,7 @@ musycc_chan_restart (mch_t * ch) /* 2.4 - find next unprocessed message, then set TX thp to it */ #ifdef RLD_RESTART_DEBUG - printk (">> musycc_chan_restart: scheduling Chan %x start_tx %x\n", ch->channum, ch->ch_start_tx); + pr_info(">> musycc_chan_restart: scheduling Chan %x start_tx %x\n", ch->channum, ch->ch_start_tx); #endif /* restart transmission from background loop */ ch->up->up->wd_notify = WD_NOTIFY_1TX; @@ -620,7 +620,7 @@ musycc_serv_req (mpi_t * pi, u_int32_t req) if (pi->sr_last == req) { #ifdef RLD_TRANS_DEBUG - printk (">> same SR, Port %d Req %x\n", pi->portnum, req); + pr_info(">> same SR, Port %d Req %x\n", pi->portnum, req); #endif /* @@ -636,7 +636,7 @@ musycc_serv_req (mpi_t * pi, u_int32_t req) (r == (SR_CHANNEL_ACTIVATE | SR_RX_DIRECTION))) { #ifdef RLD_TRANS_DEBUG - printk (">> same CHAN ACT SR, Port %d Req %x => issue SR_NOOP CMD\n", pi->portnum, req); + pr_info(">> same CHAN ACT SR, Port %d Req %x => issue SR_NOOP CMD\n", pi->portnum, req); #endif SD_SEM_GIVE (&pi->sr_sem_busy); /* allow this next request */ musycc_serv_req (pi, SR_NOOP); @@ -646,7 +646,7 @@ musycc_serv_req (mpi_t * pi, u_int32_t req) { /* no need to issue back-to-back SR_NOOP commands at this time */ #ifdef RLD_TRANS_DEBUG - printk (">> same Port SR_NOOP skipped, Port %d\n", pi->portnum); + pr_info(">> same Port SR_NOOP skipped, Port %d\n", pi->portnum); #endif SD_SEM_GIVE (&pi->sr_sem_busy); /* allow this next request */ return; @@ -673,7 +673,7 @@ rewrite: if ((r != req) && (req != SR_CHIP_RESET) && (++rcnt <= MUSYCC_SR_RETRY_CNT)) { if (log_level >= LOG_MONITOR) - printk ("%s: %d - reissue srv req/last %x/%x (hdw reads %x), Chan %d.\n", + pr_info("%s: %d - reissue srv req/last %x/%x (hdw reads %x), Chan %d.\n", pi->up->devname, rcnt, req, pi->sr_last, r, (pi->portnum * MUSYCC_NCHANS) + (req & 0x1f)); OS_uwait_dummy (); /* this delay helps reduce reissue counts @@ -997,7 +997,8 @@ musycc_bh_tx_eom (mpi_t * pi, int gchan) if (ch == 0 || ch->state != UP) { if (log_level >= LOG_ERROR) - printk ("%s: intr: xmit EOM on uninitialized channel %d\n", pi->up->devname, gchan); + pr_info("%s: intr: xmit EOM on uninitialized channel %d\n", + pi->up->devname, gchan); } if (ch == 0 || ch->mdt == 0) return; /* note: mdt==0 implies a malloc() @@ -1048,9 +1049,10 @@ musycc_bh_tx_eom (mpi_t * pi, int gchan) { if (log_level >= LOG_MONITOR) { - printk ("%s: Port %d Chan %2d - unexpected TX msg ownership intr (md %p sts %x)\n", - pi->up->devname, pi->portnum, ch->channum, md, status); - printk ("++ User 0x%p IRQ_SRV 0x%p USR_ADD 0x%p QStopped %x, start_tx %x tx_full %d txd_free %d mode %x\n", + pr_info("%s: Port %d Chan %2d - unexpected TX msg ownership intr (md %p sts %x)\n", + pi->up->devname, pi->portnum, ch->channum, + md, status); + pr_info("++ User 0x%p IRQ_SRV 0x%p USR_ADD 0x%p QStopped %x, start_tx %x tx_full %d txd_free %d mode %x\n", ch->user, ch->txd_irq_srv, ch->txd_usr_add, sd_queue_stopped (ch->user), ch->ch_start_tx, ch->tx_full, ch->txd_free, ch->p.chan_mode); @@ -1060,7 +1062,7 @@ musycc_bh_tx_eom (mpi_t * pi, int gchan) } else { if (log_level >= LOG_MONITOR) - printk ("%s: Port %d Chan %2d - recovered TX msg ownership [%d] (md %p sts %x)\n", + pr_info("%s: Port %d Chan %2d - recovered TX msg ownership [%d] (md %p sts %x)\n", pi->up->devname, pi->portnum, ch->channum, readCount, md, status); } } @@ -1098,7 +1100,8 @@ musycc_bh_tx_eom (mpi_t * pi, int gchan) md->status = 0; #ifdef RLD_TXFULL_DEBUG if (log_level >= LOG_MONITOR2) - printk ("~~ tx_eom: tx_full %x txd_free %d -> %d\n", ch->tx_full, ch->txd_free, ch->txd_free + 1); + pr_info("~~ tx_eom: tx_full %x txd_free %d -> %d\n", + ch->tx_full, ch->txd_free, ch->txd_free + 1); #endif ++ch->txd_free; FLUSH_MEM_WRITE (); @@ -1106,7 +1109,7 @@ musycc_bh_tx_eom (mpi_t * pi, int gchan) if ((ch->p.chan_mode != CFG_CH_PROTO_TRANS) && (status & EOBIRQ_ENABLE)) { if (log_level >= LOG_MONITOR) - printk ("%s: Mode (%x) incorrect EOB status (%x)\n", + pr_info("%s: Mode (%x) incorrect EOB status (%x)\n", pi->up->devname, ch->p.chan_mode, status); if ((status & EOMIRQ_ENABLE) == 0) break; @@ -1137,7 +1140,7 @@ musycc_bh_tx_eom (mpi_t * pi, int gchan) #ifdef RLD_TXFULL_DEBUG if (log_level >= LOG_MONITOR2) - printk ("tx_eom[%d]: enable xmit tx_full no more, txd_free %d txd_num/2 %d\n", + pr_info("tx_eom[%d]: enable xmit tx_full no more, txd_free %d txd_num/2 %d\n", ch->channum, ch->txd_free, ch->txd_num / 2); #endif @@ -1151,7 +1154,7 @@ musycc_bh_tx_eom (mpi_t * pi, int gchan) else if (ch->tx_full) { if (log_level >= LOG_MONITOR2) - printk ("tx_eom[%d]: bypass TX enable though room available? (txd_free %d txd_num/2 %d)\n", + pr_info("tx_eom[%d]: bypass TX enable though room available? (txd_free %d txd_num/2 %d)\n", ch->channum, ch->txd_free, ch->txd_num / 2); } @@ -1181,7 +1184,8 @@ musycc_bh_rx_eom (mpi_t * pi, int gchan) if (ch == 0 || ch->state != UP) { if (log_level > LOG_ERROR) - printk ("%s: intr: receive EOM on uninitialized channel %d\n", pi->up->devname, gchan); + pr_info("%s: intr: receive EOM on uninitialized channel %d\n", + pi->up->devname, gchan); return; } if (ch->mdr == 0) @@ -1312,7 +1316,7 @@ musycc_intr_th_handler (void *devp) { if (log_level >= LOG_MONITOR) { - printk ("%s: note - updated ISD from %08x to %08x\n", + pr_info("%s: note - updated ISD from %08x to %08x\n", ci->devname, status, (status & (~INTRPTS_NEXTINT_M)) | ci->intlog.this_status_new); } @@ -1366,7 +1370,7 @@ musycc_intr_th_handler (void *devp) */ #if 0 /* chained interrupt = not ours */ - printk (">> %s: intCnt NULL, sts %x, possibly a chained interrupt!\n", + pr_info(">> %s: intCnt NULL, sts %x, possibly a chained interrupt!\n", ci->devname, status); #endif return IRQ_NONE; @@ -1380,10 +1384,10 @@ musycc_intr_th_handler (void *devp) if ((log_level >= LOG_WARN) && (status & INTRPTS_INTFULL_M)) { - printk ("%s: Interrupt queue full condition occurred\n", ci->devname); + pr_info("%s: Interrupt queue full condition occurred\n", ci->devname); } if (log_level >= LOG_DEBUG) - printk ("%s: interrupts pending, isd @ 0x%p: %x curr %d cnt %d NEXT %d\n", + pr_info("%s: interrupts pending, isd @ 0x%p: %x curr %d cnt %d NEXT %d\n", ci->devname, &ci->reg->isd, status, nextInt, intCnt, (intCnt + nextInt) & (INT_QUEUE_SIZE - 1)); @@ -1490,7 +1494,7 @@ musycc_intr_bh_tasklet (ci_t * ci) * Fix checking */ { if (log_level >= LOG_WARN) - printk ("%s: Illegal Interrupt Detected @ 0x%p, mod %d.)\n", + pr_info("%s: Illegal Interrupt Detected @ 0x%p, mod %d.)\n", ci->devname, &ci->iqd_p[headx], headx); /* @@ -1527,9 +1531,9 @@ musycc_intr_bh_tasklet (ci_t * ci) if (log_level >= LOG_DEBUG) { if (err != 0) - printk (" %08x -> err: %2d,", currInt, err); + pr_info(" %08x -> err: %2d,", currInt, err); - printk ("+ interrupt event: %d, grp: %d, chan: %2d, side: %cX\n", + pr_info("+ interrupt event: %d, grp: %d, chan: %2d, side: %cX\n", event, group, gchan, tx ? 'T' : 'R'); } pi = &ci->port[group]; /* notice that here we assume 1-1 group - @@ -1543,7 +1547,7 @@ musycc_intr_bh_tasklet (ci_t * ci) volatile u_int32_t r; r = pci_read_32 ((u_int32_t *) &pi->reg->srd); - printk ("- SACK cmd: %08x (hdw= %08x)\n", pi->sr_last, r); + pr_info("- SACK cmd: %08x (hdw= %08x)\n", pi->sr_last, r); } SD_SEM_GIVE (&pi->sr_sem_wait); /* wake up waiting process */ break; @@ -1576,7 +1580,7 @@ musycc_intr_bh_tasklet (ci_t * ci) break; default: if (log_level >= LOG_WARN) - printk ("%s: unexpected interrupt event: %d, iqd[%d]: %08x, port: %d\n", ci->devname, + pr_info("%s: unexpected interrupt event: %d, iqd[%d]: %08x, port: %d\n", ci->devname, event, headx, currInt, group); break; } /* switch on event */ @@ -1619,13 +1623,13 @@ musycc_intr_bh_tasklet (ci_t * ci) if (log_level >= LOG_MONITOR) #endif { - printk ("%s: TX buffer underflow [ONR] on channel %d, mode %x QStopped %x free %d\n", + pr_info("%s: TX buffer underflow [ONR] on channel %d, mode %x QStopped %x free %d\n", ci->devname, ch->channum, ch->p.chan_mode, sd_queue_stopped (ch->user), ch->txd_free); #ifdef RLD_DEBUG if (ch->p.chan_mode == 2) /* problem = ONR on HDLC * mode */ { - printk ("++ Failed Last %x Next %x QStopped %x, start_tx %x tx_full %d txd_free %d mode %x\n", + pr_info("++ Failed Last %x Next %x QStopped %x, start_tx %x tx_full %d txd_free %d mode %x\n", (u_int32_t) ch->txd_irq_srv, (u_int32_t) ch->txd_usr_add, sd_queue_stopped (ch->user), ch->ch_start_tx, ch->tx_full, ch->txd_free, ch->p.chan_mode); @@ -1648,7 +1652,7 @@ musycc_intr_bh_tasklet (ci_t * ci) if (log_level >= LOG_WARN) { - printk ("%s: RX buffer overflow [ONR] on channel %d, mode %x\n", + pr_info("%s: RX buffer overflow [ONR] on channel %d, mode %x\n", ci->devname, ch->channum, ch->p.chan_mode); //musycc_dump_rxbuffer_ring (ch, 0); /* RLD DEBUG */ } @@ -1665,7 +1669,7 @@ musycc_intr_bh_tasklet (ci_t * ci) * this BUFF error requires Transmit channel reactivation. */ if (log_level >= LOG_MONITOR) - printk ("%s: TX buffer underrun [BUFF] on channel %d, mode %x\n", + pr_info("%s: TX buffer underrun [BUFF] on channel %d, mode %x\n", ci->devname, ch->channum, ch->p.chan_mode); } else /* RX buffer overrun */ { @@ -1678,7 +1682,7 @@ musycc_intr_bh_tasklet (ci_t * ci) * not required, but data has been lost. */ if (log_level >= LOG_WARN) - printk ("%s: RX buffer overrun [BUFF] on channel %d, mode %x\n", + pr_info("%s: RX buffer overrun [BUFF] on channel %d, mode %x\n", ci->devname, ch->channum, ch->p.chan_mode); /* * Per MUSYCC manual, Section 6.4.9.4 [Receive Errors], @@ -1701,7 +1705,7 @@ musycc_intr_bh_tasklet (ci_t * ci) /* Check for interrupt lost condition */ if ((currInt & INTRPT_ILOST_M) && (log_level >= LOG_ERROR)) { - printk ("%s: Interrupt queue overflow - ILOST asserted\n", + pr_info("%s: Interrupt queue overflow - ILOST asserted\n", ci->devname); } ci->iqp_headx = (headx + 1) & (INT_QUEUE_SIZE - 1); /* insure wrapness */ @@ -1713,7 +1717,7 @@ musycc_intr_bh_tasklet (ci_t * ci) int bh; bh = atomic_read (&CI->bh_pending); - printk ("_bh_: late arrivals, head %d != tail %d, pending %d\n", + pr_info("_bh_: late arrivals, head %d != tail %d, pending %d\n", ci->iqp_headx, ci->iqp_tailx, bh); } #if defined(SBE_ISR_IMMEDIATE) @@ -1867,7 +1871,7 @@ musycc_start_xmit (ci_t * ci, int channum, void *mem_token) if (log_level >= LOG_MONITOR2) #endif { - printk ("++ start_xmt[%d]: state %x start %x full %d free %d required %d stopped %x\n", + pr_info("++ start_xmt[%d]: state %x start %x full %d free %d required %d stopped %x\n", channum, ch->state, ch->ch_start_tx, ch->tx_full, ch->txd_free, ch->txd_required, sd_queue_stopped (ch->user)); } @@ -1888,7 +1892,7 @@ musycc_start_xmit (ci_t * ci, int channum, void *mem_token) if (txd_need_cnt == 0) { if (log_level >= LOG_MONITOR2) - printk ("%s channel %d: no TX data in User buffer\n", ci->devname, channum); + pr_info("%s channel %d: no TX data in User buffer\n", ci->devname, channum); OS_mem_token_free (mem_token); return 0; /* no data to send */ } @@ -1900,7 +1904,7 @@ musycc_start_xmit (ci_t * ci, int channum, void *mem_token) { if (log_level >= LOG_DEBUG) { - printk ("start_xmit: discarding buffer, insufficient descriptor cnt %d, need %d.\n", + pr_info("start_xmit: discarding buffer, insufficient descriptor cnt %d, need %d.\n", ch->txd_num, txd_need_cnt + 1); } ch->s.tx_dropped++; @@ -1917,7 +1921,7 @@ musycc_start_xmit (ci_t * ci, int channum, void *mem_token) { if (log_level >= LOG_MONITOR2) { - printk ("start_xmit[%d]: EBUSY - need more descriptors, have %d of %d need %d\n", + pr_info("start_xmit[%d]: EBUSY - need more descriptors, have %d of %d need %d\n", channum, ch->txd_free, ch->txd_num, txd_need_cnt); } ch->tx_full = 1; diff --git a/drivers/staging/cxt1e1/pmc93x6_eeprom.c b/drivers/staging/cxt1e1/pmc93x6_eeprom.c index 02c829b..1c8dfb8 100644 --- a/drivers/staging/cxt1e1/pmc93x6_eeprom.c +++ b/drivers/staging/cxt1e1/pmc93x6_eeprom.c @@ -21,6 +21,8 @@ * GNU General Public License for more details. */ +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + #include #include "pmcc4_sysdep.h" #include "sbecom_inline_linux.h" @@ -448,7 +450,7 @@ pmcCalcCrc_T01 (void *bufp) (u_int32_t *) &crc); #ifdef EEPROM_TYPE_DEBUG - printk ("sbeCrc: crc 1 calculated as %08x\n", crc); /* RLD DEBUG */ + pr_info("sbeCrc: crc 1 calculated as %08x\n", crc); /* RLD DEBUG */ #endif return ~crc; } @@ -474,7 +476,7 @@ pmcCalcCrc_T02 (void *bufp) (u_int32_t *) &crc); #ifdef EEPROM_TYPE_DEBUG - printk ("sbeCrc: crc 2 calculated as %08x\n", crc); /* RLD DEBUG */ + pr_info("sbeCrc: crc 2 calculated as %08x\n", crc); /* RLD DEBUG */ #endif return crc; } @@ -520,7 +522,7 @@ pmc_init_seeprom (u_int32_t addr, u_int32_t serialNum) #ifdef DEBUG for (i = 0; i < sizeof (FLD_TYPE2); ++i) - printk ("[%02X] = %02X\n", i, buffer.bytes[i] & 0xFF); + pr_info("[%02X] = %02X\n", i, buffer.bytes[i] & 0xFF); #endif /* Write structure to serial EEPROM */ @@ -538,7 +540,7 @@ pmc_verify_cksum (void *bufp) /* Retrieve contents of CRC field */ crc1 = pmcGetBuffValue (&buf1->Crc32[0], sizeof (buf1->Crc32)); #ifdef EEPROM_TYPE_DEBUG - printk ("EEPROM: chksum 1 reads as %08x\n", crc1); /* RLD DEBUG */ + pr_info("EEPROM: chksum 1 reads as %08x\n", crc1); /* RLD DEBUG */ #endif if ((buf1->type == PROM_FORMAT_TYPE1) && (pmcCalcCrc_T01 ((void *) buf1) == crc1)) @@ -546,7 +548,7 @@ pmc_verify_cksum (void *bufp) crc2 = pmcGetBuffValue (&buf2->Crc32[0], sizeof (buf2->Crc32)); #ifdef EEPROM_TYPE_DEBUG - printk ("EEPROM: chksum 2 reads as %08x\n", crc2); /* RLD DEBUG */ + pr_info("EEPROM: chksum 2 reads as %08x\n", crc2); /* RLD DEBUG */ #endif if ((buf2->type == PROM_FORMAT_TYPE2) && (pmcCalcCrc_T02 ((void *) buf2) == crc2)) diff --git a/drivers/staging/cxt1e1/pmcc4_drv.c b/drivers/staging/cxt1e1/pmcc4_drv.c index 1617333..333cf26 100644 --- a/drivers/staging/cxt1e1/pmcc4_drv.c +++ b/drivers/staging/cxt1e1/pmcc4_drv.c @@ -172,10 +172,10 @@ sbecom_set_loglevel (int d) { if (log_level != d) { - printk ("%s: log level changed from %d to %d\n", THIS_MODULE->name, log_level, d); + pr_info("log level changed from %d to %d\n", log_level, d); log_level = d; /* set new */ } else - printk ("%s: log level is %d\n", THIS_MODULE->name, log_level); + pr_info("log level is %d\n", log_level); } } @@ -292,19 +292,18 @@ checkPorts (ci_t * ci) if (!(((copyVal >> 3) & sbeLinkDown) ^ (value & sbeLinkDown))) { if (value & sbeLinkDown) - printk (KERN_WARN "%s: Port %d momentarily recovered.\n", - ci->devname, portnum); + pr_warning("%s: Port %d momentarily recovered.\n", + ci->devname, portnum); else - printk (KERN_WARN - "%s: Warning: Port %d link was briefly down.\n", - ci->devname, portnum); + pr_warning("%s: Warning: Port %d link was briefly down.\n", + ci->devname, portnum); } else if (value & sbeLinkDown) - printk (KERN_WARN "%s: Warning: Port %d link is down.\n", - ci->devname, portnum); + pr_warning("%s: Warning: Port %d link is down.\n", + ci->devname, portnum); else { - printk (KERN_WARN "%s: Port %d link has recovered.\n", - ci->devname, portnum); + pr_warning("%s: Port %d link has recovered.\n", + ci->devname, portnum); copyVal |= 0x20; /* record link transition to up */ } copyVal |= 0x10; /* change (link) --> update LEDs */ @@ -331,35 +330,30 @@ checkPorts (ci_t * ci) if (value & 0x1f) { /* if errors (crc or smf only) */ if (value & 0x10) - printk (KERN_WARN - "%s: E1 Port %d Codeword Sa4 change detected.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d Codeword Sa4 change detected.\n", + ci->devname, portnum); if (value & 0x08) - printk (KERN_WARN - "%s: E1 Port %d Codeword Sa5 change detected.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d Codeword Sa5 change detected.\n", + ci->devname, portnum); if (value & 0x04) - printk (KERN_WARN - "%s: E1 Port %d Codeword Sa6 change detected.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d Codeword Sa6 change detected.\n", + ci->devname, portnum); if (value & 0x02) - printk (KERN_WARN - "%s: E1 Port %d Codeword Sa7 change detected.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d Codeword Sa7 change detected.\n", + ci->devname, portnum); if (value & 0x01) - printk (KERN_WARN - "%s: E1 Port %d Codeword Sa8 change detected.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d Codeword Sa8 change detected.\n", + ci->devname, portnum); } value = pci_read_32 ((u_int32_t *) &comet->e1_frmr_mists); /* crc & smf */ if (value & 0x3) { /* if errors (crc or smf only) */ if (value & sbeE1CRC) - printk (KERN_WARN "%s: E1 Port %d CRC-4 error(s) detected.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d CRC-4 error(s) detected.\n", + ci->devname, portnum); if (value & sbeE1errSMF) /* error in sub-multiframe */ - printk (KERN_WARN "%s: E1 Port %d received errored SMF.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d received errored SMF.\n", + ci->devname, portnum); } value = pci_read_32 ((u_int32_t *) &comet->e1_frmr_masts) & 0xcc; /* alarms */ /* @@ -383,43 +377,43 @@ checkPorts (ci_t * ci) if ((copyVal & sbeRedAlm) && !(value & sbeRedAlm)) { copyVal &= ~sbeRedAlm; - printk (KERN_WARN "%s: E1 Port %d LOF alarm ended.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d LOF alarm ended.\n", + ci->devname, portnum); } else if (!(copyVal & sbeRedAlm) && (value & sbeRedAlm)) { copyVal |= sbeRedAlm; - printk (KERN_WARN "%s: E1 Warning: Port %d LOF alarm.\n", - ci->devname, portnum); + pr_warning("%s: E1 Warning: Port %d LOF alarm.\n", + ci->devname, portnum); } else if ((copyVal & sbeYelAlm) && !(value & sbeYelAlm)) { copyVal &= ~sbeYelAlm; - printk (KERN_WARN "%s: E1 Port %d RAI alarm ended.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d RAI alarm ended.\n", + ci->devname, portnum); } else if (!(copyVal & sbeYelAlm) && (value & sbeYelAlm)) { copyVal |= sbeYelAlm; - printk (KERN_WARN "%s: E1 Warning: Port %d RAI alarm.\n", - ci->devname, portnum); + pr_warning("%s: E1 Warning: Port %d RAI alarm.\n", + ci->devname, portnum); } else if ((copyVal & sbeE1RMAI) && !(value & sbeE1RMAI)) { copyVal &= ~sbeE1RMAI; - printk (KERN_WARN "%s: E1 Port %d RMAI alarm ended.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d RMAI alarm ended.\n", + ci->devname, portnum); } else if (!(copyVal & sbeE1RMAI) && (value & sbeE1RMAI)) { copyVal |= sbeE1RMAI; - printk (KERN_WARN "%s: E1 Warning: Port %d RMAI alarm.\n", - ci->devname, portnum); + pr_warning("%s: E1 Warning: Port %d RMAI alarm.\n", + ci->devname, portnum); } else if ((copyVal & sbeAISAlm) && !(value & sbeAISAlm)) { copyVal &= ~sbeAISAlm; - printk (KERN_WARN "%s: E1 Port %d AIS alarm ended.\n", - ci->devname, portnum); + pr_warning("%s: E1 Port %d AIS alarm ended.\n", + ci->devname, portnum); } else if (!(copyVal & sbeAISAlm) && (value & sbeAISAlm)) { copyVal |= sbeAISAlm; - printk (KERN_WARN "%s: E1 Warning: Port %d AIS alarm.\n", - ci->devname, portnum); + pr_warning("%s: E1 Warning: Port %d AIS alarm.\n", + ci->devname, portnum); } } /* end of E1 alarm code */ @@ -433,33 +427,33 @@ checkPorts (ci_t * ci) if ((copyVal & sbeRedAlm) && !(value & sbeRedAlm)) { copyVal &= ~sbeRedAlm; - printk (KERN_WARN "%s: Port %d red alarm ended.\n", - ci->devname, portnum); + pr_warning("%s: Port %d red alarm ended.\n", + ci->devname, portnum); } else if (!(copyVal & sbeRedAlm) && (value & sbeRedAlm)) { copyVal |= sbeRedAlm; - printk (KERN_WARN "%s: Warning: Port %d red alarm.\n", - ci->devname, portnum); + pr_warning("%s: Warning: Port %d red alarm.\n", + ci->devname, portnum); } else if ((copyVal & sbeYelAlm) && !(value & sbeYelAlm)) { copyVal &= ~sbeYelAlm; - printk (KERN_WARN "%s: Port %d yellow (RAI) alarm ended.\n", - ci->devname, portnum); + pr_warning("%s: Port %d yellow (RAI) alarm ended.\n", + ci->devname, portnum); } else if (!(copyVal & sbeYelAlm) && (value & sbeYelAlm)) { copyVal |= sbeYelAlm; - printk (KERN_WARN "%s: Warning: Port %d yellow (RAI) alarm.\n", - ci->devname, portnum); + pr_warning("%s: Warning: Port %d yellow (RAI) alarm.\n", + ci->devname, portnum); } else if ((copyVal & sbeAISAlm) && !(value & sbeAISAlm)) { copyVal &= ~sbeAISAlm; - printk (KERN_WARN "%s: Port %d blue (AIS) alarm ended.\n", - ci->devname, portnum); + pr_warning("%s: Port %d blue (AIS) alarm ended.\n", + ci->devname, portnum); } else if (!(copyVal & sbeAISAlm) && (value & sbeAISAlm)) { copyVal |= sbeAISAlm; - printk (KERN_WARN "%s: Warning: Port %d blue (AIS) alarm.\n", - ci->devname, portnum); + pr_warning("%s: Warning: Port %d blue (AIS) alarm.\n", + ci->devname, portnum); } } } /* end T1 mode alarm checks */ @@ -523,8 +517,8 @@ checkPorts (ci_t * ci) * loopbk mode */ if (log_level >= LOG_DEBUG) if (value != 0x3f) - printk (KERN_WARN "%s: BOC value = %x on Port %d\n", - ci->devname, value, portnum); + pr_warning("%s: BOC value = %x on Port %d\n", + ci->devname, value, portnum); /* end ESF loopback code */ } } @@ -546,7 +540,7 @@ c4_watchdog (ci_t * ci) if (drvr_state != SBE_DRVR_AVAILABLE) { if (log_level >= LOG_MONITOR) - printk ("%s: drvr not available (%x)\n", THIS_MODULE->name, drvr_state); + pr_info("drvr not available (%x)\n", drvr_state); return; } #if 0 @@ -579,7 +573,7 @@ c4_watchdog (ci_t * ci) #else if (log_level >= LOG_MONITOR) #endif - printk ("%s: watchdog reviving Port %d Channel %d [%d] sts %x/%x, start_TX %x free %x start_RX %x\n", + pr_info("%s: watchdog reviving Port %d Channel %d [%d] sts %x/%x, start_TX %x free %x start_RX %x\n", ci->devname, ch->channum, port, gchan, ch->channum, ch->p.status, ch->status, ch->ch_start_tx, ch->txd_free, ch->ch_start_rx); @@ -595,7 +589,8 @@ c4_watchdog (ci_t * ci) { ch->ch_start_rx = 0; /* we are restarting RX... */ #ifdef RLD_TRANS_DEBUG - printk ("++ c4_watchdog() CHAN RX ACTIVATE: chan %d\n", ch->channum); + pr_info("++ c4_watchdog() CHAN RX ACTIVATE: chan %d\n", + ch->channum); #endif #ifdef RLD_RXACT_DEBUG { @@ -606,7 +601,7 @@ c4_watchdog (ci_t * ci) { hereb4--; md = &ch->mdr[ch->rxix_irq_srv]; - printk ("++ c4_watchdog[%d] CHAN RX ACTIVATE: rxix_irq_srv %d, md %p sts %x, rxpkt %lu\n", + pr_info("++ c4_watchdog[%d] CHAN RX ACTIVATE: rxix_irq_srv %d, md %p sts %x, rxpkt %lu\n", ch->channum, ch->rxix_irq_srv, md, le32_to_cpu (md->status), ch->s.rx_packets); musycc_dump_rxbuffer_ring (ch, 1); /* RLD DEBUG */ } @@ -636,8 +631,9 @@ c4_watchdog (ci_t * ci) md = ch->txd_irq_srv; if (!md) { - printk ("-- c4_watchdog[%d]: WARNING, starting NULL md\n", ch->channum); - printk ("-- chan %d txd_irq_srv %p sts %x usr_add %p sts %x, txpkt %lu\n", + pr_info("-- c4_watchdog[%d]: WARNING, starting NULL md\n", + ch->channum); + pr_info("-- chan %d txd_irq_srv %p sts %x usr_add %p sts %x, txpkt %lu\n", ch->channum, ch->txd_irq_srv, le32_to_cpu ((struct mdesc *) (ch->txd_irq_srv)->status), ch->txd_usr_add, le32_to_cpu ((struct mdesc *) (ch->txd_usr_add)->status), ch->s.tx_packets); @@ -647,7 +643,8 @@ c4_watchdog (ci_t * ci) } else if (md->data && ((le32_to_cpu (md->status)) & MUSYCC_TX_OWNED)) { #ifdef RLD_TRANS_DEBUG - printk ("++ c4_watchdog[%d] CHAN TX ACTIVATE: start_tx %x\n", ch->channum, ch->ch_start_tx); + pr_info("++ c4_watchdog[%d] CHAN TX ACTIVATE: start_tx %x\n", + ch->channum, ch->ch_start_tx); #endif ch->ch_start_tx = 0; /* we are restarting * TX... */ @@ -661,7 +658,8 @@ c4_watchdog (ci_t * ci) #else if (log_level >= LOG_MONITOR) #endif - printk ("++ SACK[P%d/C%d] ack'd, continuing...\n", ch->up->portnum, ch->channum); + pr_info("++ SACK[P%d/C%d] ack'd, continuing...\n", + ch->up->portnum, ch->channum); } } } @@ -784,7 +782,7 @@ c4_init (ci_t * ci, u_char *func0, u_char *func1) pi->p.portnum = portnum; pi->openchans = 0; #ifdef SBE_MAP_DEBUG - printk ("Comet-%d: addr = %p\n", portnum, pi->cometbase); + pr_info("Comet-%d: addr = %p\n", portnum, pi->cometbase); #endif } pmsk = c4_get_portcfg (ci); @@ -811,7 +809,8 @@ c4_init (ci_t * ci, u_char *func0, u_char *func1) return SBE_DRVR_FAIL; } #ifdef SBE_MAP_DEBUG - printk (">> %s: c4_get_build - pmsk %x max_port %x\n", ci->devname, pmsk, ci->max_port); + pr_info(">> %s: c4_get_build - pmsk %x max_port %x\n", + ci->devname, pmsk, ci->max_port); #endif } @@ -934,19 +933,20 @@ c4_loop_port (ci_t * ci, int portnum, u_int8_t cmd) pci_write_32 ((u_int32_t *) &comet->mdiag, cmd); if (log_level >= LOG_WARN) - printk ("%s: loopback mode changed to %2x from %2x on Port %d\n", + pr_info("%s: loopback mode changed to %2x from %2x on Port %d\n", ci->devname, cmd, loopValue, portnum); loopValue = pci_read_32 ((u_int32_t *) &comet->mdiag) & COMET_MDIAG_LBMASK; if (loopValue != cmd) { if (log_level >= LOG_ERROR) - printk ("%s: write to loop register failed, unknown state for Port %d\n", + pr_info("%s: write to loop register failed, unknown state for Port %d\n", ci->devname, portnum); } } else { if (log_level >= LOG_WARN) - printk ("%s: loopback already in that mode (%2x)\n", ci->devname, loopValue); + pr_info("%s: loopback already in that mode (%2x)\n", + ci->devname, loopValue); } return 0; } @@ -980,7 +980,7 @@ c4_frame_rw (ci_t * ci, struct sbecom_port_param * pp) { /* control says this is a register * _write_ */ if (pp->portStatus == data) - printk ("%s: Port %d already that value! Writing again anyhow.\n", + pr_info("%s: Port %d already that value! Writing again anyhow.\n", ci->devname, pp->portnum); pp->portP = (u_int8_t) data; pci_write_32 ((u_int32_t *) comet + pp->port_mode, @@ -1080,11 +1080,11 @@ c4_musycc_rw (ci_t * ci, struct c4_musycc_param * mcp) if (ramread) { data = *dpr; - //printk ("c4_musycc_rw: RAM addr %p read data %x (portno %x offset %x RAM ramread %x)\n", dpr, data, portnum, offset, ramread); /* RLD DEBUG */ + //pr_info("c4_musycc_rw: RAM addr %p read data %x (portno %x offset %x RAM ramread %x)\n", dpr, data, portnum, offset, ramread); /* RLD DEBUG */ } else { data = pci_read_32 ((u_int32_t *) dph); - //printk ("c4_musycc_rw: REG addr %p read data %x (portno %x offset %x RAM ramread %x)\n", dph, data, portnum, offset, ramread); /* RLD DEBUG */ + //pr_info("c4_musycc_rw: REG addr %p read data %x (portno %x offset %x RAM ramread %x)\n", dph, data, portnum, offset, ramread); /* RLD DEBUG */ } @@ -1092,7 +1092,7 @@ c4_musycc_rw (ci_t * ci, struct c4_musycc_param * mcp) { /* control says this is a register * _write_ */ if (mcp->value == data) - printk ("%s: musycc grp%d already that value! writing again anyhow.\n", + pr_info("%s: musycc grp%d already that value! writing again anyhow.\n", ci->devname, (mcp->RWportnum & 0x7)); /* write register RAM */ if (ramread) @@ -1137,7 +1137,7 @@ c4_set_port (ci_t * ci, int portnum) e1mode = IS_FRAME_ANY_E1 (pp->port_mode); if (log_level >= LOG_MONITOR2) { - printk ("%s: c4_set_port[%d]: entered, e1mode = %x, openchans %d.\n", + pr_info("%s: c4_set_port[%d]: entered, e1mode = %x, openchans %d.\n", ci->devname, portnum, e1mode, pi->openchans); } @@ -1421,13 +1421,12 @@ c4_fifo_alloc (mpi_t * pi, int chan, int *len) if (max != *len) { if (log_level >= LOG_WARN) - printk ( - "%s: wanted to allocate %d fifo space, but got only %d\n", + pr_info("%s: wanted to allocate %d fifo space, but got only %d\n", pi->up->devname, *len, max); *len = max; } if (log_level >= LOG_DEBUG) - printk ("%s: allocated %d fifo at %d for channel %d/%d\n", + pr_info("%s: allocated %d fifo at %d for channel %d/%d\n", pi->up->devname, max, start, chan, pi->p.portnum); for (i = maxstart; i < (maxstart + max); i++) pi->fifomap[i] = chan; @@ -1440,7 +1439,7 @@ c4_fifo_free (mpi_t * pi, int chan) int i; if (log_level >= LOG_DEBUG) - printk ("%s: deallocated fifo for channel %d/%d\n", + pr_info("%s: deallocated fifo for channel %d/%d\n", pi->up->devname, chan, pi->p.portnum); for (i = 0; i < 32; i++) if (pi->fifomap[i] == chan) @@ -1465,7 +1464,8 @@ c4_chan_up (ci_t * ci, int channum) if (ch->state == UP) { if (log_level >= LOG_MONITOR) - printk ("%s: channel already UP, graceful early exit\n", ci->devname); + pr_info("%s: channel already UP, graceful early exit\n", + ci->devname); return 0; } pi = ch->up; @@ -1478,9 +1478,10 @@ c4_chan_up (ci_t * ci, int channum) { if (1 || log_level >= LOG_WARN) { - printk ("%s: c4_chan_up[%d] EINVAL (attempt to cfg in-use or unavailable TimeSlot[%d])\n", + pr_info("%s: c4_chan_up[%d] EINVAL (attempt to cfg in-use or unavailable TimeSlot[%d])\n", ci->devname, channum, i); - printk ("+ ask4 %x, currently %x\n", ch->p.bitmask[i], pi->tsm[i]); + pr_info("+ ask4 %x, currently %x\n", + ch->p.bitmask[i], pi->tsm[i]); } return EINVAL; } @@ -1493,7 +1494,8 @@ c4_chan_up (ci_t * ci, int channum) if (!nbuf) { /* if( log_level >= LOG_WARN) */ - printk ("%s: c4_chan_up[%d] ENOBUFS (no TimeSlots assigned)\n", ci->devname, channum); + pr_info("%s: c4_chan_up[%d] ENOBUFS (no TimeSlots assigned)\n", + ci->devname, channum); return ENOBUFS; /* this should not happen */ } addr = c4_fifo_alloc (pi, gchan, &nbuf); @@ -1561,7 +1563,7 @@ c4_chan_up (ci_t * ci, int channum) #if 0 /* DEBUG INFO */ if (log_level >= LOG_MONITOR) - printk ("%s: mode %x rxnum %d (rxused %d def %d) txnum %d (txused %d def %d)\n", + pr_info("%s: mode %x rxnum %d (rxused %d def %d) txnum %d (txused %d def %d)\n", ci->devname, ch->p.chan_mode, rxnum, max_rxdesc_used, max_rxdesc_default, txnum, max_txdesc_used, max_txdesc_default); @@ -1592,7 +1594,8 @@ c4_chan_up (ci_t * ci, int channum) if (!(m = OS_mem_token_alloc (max_mru))) { if (log_level >= LOG_MONITOR) - printk ("%s: c4_chan_up[%d] - token alloc failure, size = %d.\n", ci->devname, channum, max_mru); + pr_info("%s: c4_chan_up[%d] - token alloc failure, size = %d.\n", + ci->devname, channum, max_mru); goto errfree; } md->mem_token = m; @@ -1638,7 +1641,7 @@ c4_chan_up (ci_t * ci, int channum) if (ch->p.status & RX_ENABLED) { #ifdef RLD_TRANS_DEBUG - printk ("++ c4_chan_up() CHAN RX ACTIVATE: chan %d\n", ch->channum); + pr_info("++ c4_chan_up() CHAN RX ACTIVATE: chan %d\n", ch->channum); #endif ch->ch_start_rx = 0; /* we are restarting RX... */ musycc_serv_req (pi, SR_CHANNEL_ACTIVATE | SR_RX_DIRECTION | gchan); @@ -1646,7 +1649,7 @@ c4_chan_up (ci_t * ci, int channum) if (ch->p.status & TX_ENABLED) { #ifdef RLD_TRANS_DEBUG - printk ("++ c4_chan_up() CHAN TX ACTIVATE: chan %d \n", ch->channum); + pr_info("++ c4_chan_up() CHAN TX ACTIVATE: chan %d \n", ch->channum); #endif ch->ch_start_tx = CH_START_TX_1ST; /* we are delaying start * until receipt from user of diff --git a/drivers/staging/cxt1e1/sbecom_inline_linux.h b/drivers/staging/cxt1e1/sbecom_inline_linux.h index 44229a9..c65172d 100644 --- a/drivers/staging/cxt1e1/sbecom_inline_linux.h +++ b/drivers/staging/cxt1e1/sbecom_inline_linux.h @@ -94,7 +94,7 @@ pci_read_32 (u_int32_t *p) FLUSH_PCI_READ (); v = le32_to_cpu (*p); if (log_level >= LOG_DEBUG) - printk ("pci_read : %x = %x\n", (u_int32_t) p, v); + pr_info("pci_read : %x = %x\n", (u_int32_t) p, v); return v; #else FLUSH_PCI_READ (); /* */ @@ -107,7 +107,7 @@ pci_write_32 (u_int32_t *p, u_int32_t v) { #ifdef FLOW_DEBUG if (log_level >= LOG_DEBUG) - printk ("pci_write: %x = %x\n", (u_int32_t) p, v); + pr_info("pci_write: %x = %x\n", (u_int32_t) p, v); #endif *p = cpu_to_le32 (v); FLUSH_PCI_WRITE (); /* This routine is called from routines diff --git a/drivers/staging/cxt1e1/sbeproc.c b/drivers/staging/cxt1e1/sbeproc.c index 92f6f5c..4f4dcd3 100644 --- a/drivers/staging/cxt1e1/sbeproc.c +++ b/drivers/staging/cxt1e1/sbeproc.c @@ -66,7 +66,7 @@ sbecom_proc_get_sbe_info (char *buffer, char **start, off_t offset, } #if 0 /** RLD DEBUG **/ - printk (">> sbecom_proc_get_sbe_info: entered, offset %d. length %d.\n", + pr_info(">> sbecom_proc_get_sbe_info: entered, offset %d. length %d.\n", (int) offset, (int) length); #endif @@ -90,7 +90,7 @@ sbecom_proc_get_sbe_info (char *buffer, char **start, off_t offset, #if 0 /** RLD DEBUG **/ - printk (">> sbecom_get_brdinfo: returned, first_if %p <%s> last_if %p <%s>\n", + pr_info(">> sbecom_get_brdinfo: returned, first_if %p <%s> last_if %p <%s>\n", (char *) &bip->first_iname, (char *) &bip->first_iname, (char *) &bip->last_iname, (char *) &bip->last_iname); #endif @@ -293,7 +293,7 @@ sbecom_proc_get_sbe_info (char *buffer, char **start, off_t offset, #endif #if 0 - printk (">> proc_fs: returned len = %d., start %p\n", len, start); /* RLD DEBUG */ + pr_info(">> proc_fs: returned len = %d., start %p\n", len, start); /* RLD DEBUG */ #endif /*** -- cgit v0.10.2 From 199ef62a287b429a8fa3b7dc5ae6b69f607bf324 Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Tue, 4 May 2010 14:23:43 +0200 Subject: Staging: rtl8192su: check for skb == NULL added 2 checks for skb == NULL. plus cosmetics Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192S_firmware.c b/drivers/staging/rtl8192su/r8192S_firmware.c index b6ae854..37d164c 100644 --- a/drivers/staging/rtl8192su/r8192S_firmware.c +++ b/drivers/staging/rtl8192su/r8192S_firmware.c @@ -31,44 +31,46 @@ // Code size // Created by Roger, 2008.04.10. // -bool FirmwareDownloadCode(struct net_device *dev, u8 * code_virtual_address,u32 buffer_len) +bool FirmwareDownloadCode(struct net_device *dev, + u8 *code_virtual_address, + u32 buffer_len) { - struct r8192_priv *priv = ieee80211_priv(dev); - bool rt_status = true; - u16 frag_threshold = MAX_FIRMWARE_CODE_SIZE; //Fragmentation might be required in 90/92 but not in 92S - u16 frag_length, frag_offset = 0; - struct sk_buff *skb; - unsigned char *seg_ptr; - cb_desc *tcb_desc; - u8 bLastIniPkt = 0; - u16 ExtraDescOffset = 0; - - - RT_TRACE(COMP_FIRMWARE, "--->FirmwareDownloadCode()\n" ); - - //MAX_TRANSMIT_BUFFER_SIZE - if(buffer_len >= MAX_FIRMWARE_CODE_SIZE-USB_HWDESC_HEADER_LEN) - { - RT_TRACE(COMP_ERR, "Size over MAX_FIRMWARE_CODE_SIZE! \n"); + struct r8192_priv *priv = ieee80211_priv(dev); + bool rt_status = true; + /* Fragmentation might be required in 90/92 but not in 92S */ + u16 frag_threshold = MAX_FIRMWARE_CODE_SIZE; + u16 frag_length, frag_offset = 0; + struct sk_buff *skb; + unsigned char *seg_ptr; + cb_desc *tcb_desc; + u8 bLastIniPkt = 0; + u16 ExtraDescOffset = 0; + + if (buffer_len >= MAX_FIRMWARE_CODE_SIZE - USB_HWDESC_HEADER_LEN) { + RT_TRACE(COMP_ERR, "(%s): Firmware exceeds" + " MAX_FIRMWARE_CODE_SIZE\n", __func__); goto cmdsend_downloadcode_fail; } - ExtraDescOffset = USB_HWDESC_HEADER_LEN; - do { if((buffer_len-frag_offset) > frag_threshold) - { frag_length = frag_threshold + ExtraDescOffset; + else { + frag_length = (u16)(buffer_len - + frag_offset + ExtraDescOffset); + bLastIniPkt = 1; } - else - { - frag_length = (u16)(buffer_len - frag_offset + ExtraDescOffset); - bLastIniPkt = 1; - } - - /* Allocate skb buffer to contain firmware info and tx descriptor info. */ + /* + * Allocate skb buffer to contain firmware info + * and tx descriptor info. + */ skb = dev_alloc_skb(frag_length); - memcpy((unsigned char *)(skb->cb),&dev,sizeof(dev)); + if (skb == NULL) { + RT_TRACE(COMP_ERR, "(%s): unable to alloc skb buffer\n", + __func__); + goto cmdsend_downloadcode_fail; + } + memcpy((unsigned char *)(skb->cb), &dev, sizeof(dev)); tcb_desc = (cb_desc*)(skb->cb + MAX_DEV_ADDR_SIZE); tcb_desc->queue_index = TXCMD_QUEUE; @@ -76,73 +78,60 @@ bool FirmwareDownloadCode(struct net_device *dev, u8 * code_virtual_address,u32 tcb_desc->bLastIniPkt = bLastIniPkt; skb_reserve(skb, ExtraDescOffset); - seg_ptr = (u8 *)skb_put(skb, (u32)(frag_length-ExtraDescOffset)); - memcpy(seg_ptr, code_virtual_address+frag_offset, (u32)(frag_length-ExtraDescOffset)); - tcb_desc->txbuf_size= frag_length; + seg_ptr = (u8 *)skb_put(skb, + (u32)(frag_length - ExtraDescOffset)); - if(!priv->ieee80211->check_nic_enough_desc(dev,tcb_desc->queue_index)|| - (!skb_queue_empty(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index]))||\ - (priv->ieee80211->queue_stop) ) - { + memcpy(seg_ptr, code_virtual_address + frag_offset, + (u32)(frag_length-ExtraDescOffset)); + + tcb_desc->txbuf_size = frag_length; + + if (!priv->ieee80211->check_nic_enough_desc(dev, tcb_desc->queue_index) || + (!skb_queue_empty(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index])) || + (priv->ieee80211->queue_stop)) { RT_TRACE(COMP_FIRMWARE,"=====================================================> tx full!\n"); skb_queue_tail(&priv->ieee80211->skb_waitQ[tcb_desc->queue_index], skb); - } - else - { - priv->ieee80211->softmac_hard_start_xmit(skb,dev); - } + } else + priv->ieee80211->softmac_hard_start_xmit(skb, dev); frag_offset += (frag_length - ExtraDescOffset); - }while(frag_offset < buffer_len); - + } while (frag_offset < buffer_len); return rt_status ; - cmdsend_downloadcode_fail: rt_status = false; - RT_TRACE(COMP_ERR, "CmdSendDownloadCode fail !!\n"); + RT_TRACE(COMP_ERR, "(%s): failed\n", __func__); return rt_status; - } -RT_STATUS -FirmwareEnableCPU(struct net_device *dev) +RT_STATUS FirmwareEnableCPU(struct net_device *dev) { + RT_STATUS rtStatus = RT_STATUS_SUCCESS; + u8 tmpU1b, CPUStatus = 0; + u16 tmpU2b; + u32 iCheckTime = 200; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - u8 tmpU1b, CPUStatus = 0; - u16 tmpU2b; - u32 iCheckTime = 200; - - RT_TRACE(COMP_FIRMWARE, "-->FirmwareEnableCPU()\n" ); - // Enable CPU. + /* Enable CPU. */ tmpU1b = read_nic_byte(dev, SYS_CLKR); - write_nic_byte(dev, SYS_CLKR, (tmpU1b|SYS_CPU_CLKSEL)); //AFE source - + /* AFE source */ + write_nic_byte(dev, SYS_CLKR, (tmpU1b|SYS_CPU_CLKSEL)); tmpU2b = read_nic_word(dev, SYS_FUNC_EN); write_nic_word(dev, SYS_FUNC_EN, (tmpU2b|FEN_CPUEN)); - - //Polling IMEM Ready after CPU has refilled. - do - { + /* Poll IMEM Ready after CPU has refilled. */ + do { CPUStatus = read_nic_byte(dev, TCR); - if(CPUStatus& IMEM_RDY) - { - RT_TRACE(COMP_FIRMWARE, "IMEM Ready after CPU has refilled.\n"); + if (CPUStatus & IMEM_RDY) + /* success */ break; - } - - //usleep(100); udelay(100); - }while(iCheckTime--); - - if(!(CPUStatus & IMEM_RDY)) - return RT_STATUS_FAILURE; - - RT_TRACE(COMP_FIRMWARE, "<--FirmwareEnableCPU(): rtStatus(%#x)\n", rtStatus); + } while (iCheckTime--); + if (!(CPUStatus & IMEM_RDY)) { + RT_TRACE(COMP_ERR, "(%s): failed to enable CPU\n", __func__); + rtStatus = RT_STATUS_FAILURE; + } return rtStatus; } diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index efba608..5696b00 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -1296,7 +1296,6 @@ static int rtl8192_rx_initiate(struct net_device*dev) kfree_skb(skb); break; } -// printk("nomal packet IN request!\n"); usb_fill_bulk_urb(entry, priv->udev, usb_rcvbulkpipe(priv->udev, 3), skb_tail_pointer(skb), RX_URB_SIZE, rtl8192_rx_isr, skb); @@ -1310,7 +1309,6 @@ static int rtl8192_rx_initiate(struct net_device*dev) /* command packet rx procedure */ while (skb_queue_len(&priv->rx_queue) < MAX_RX_URB + 3) { -// printk("command packet IN request!\n"); skb = __dev_alloc_skb(RX_URB_SIZE ,GFP_KERNEL); if (!skb) break; diff --git a/drivers/staging/rtl8192su/r819xU_cmdpkt.c b/drivers/staging/rtl8192su/r819xU_cmdpkt.c index 43b68a0..a8e9d2d 100644 --- a/drivers/staging/rtl8192su/r819xU_cmdpkt.c +++ b/drivers/staging/rtl8192su/r819xU_cmdpkt.c @@ -26,6 +26,12 @@ bool SendTxCommandPacket(struct net_device *dev, void *pData, u32 DataLen) * (It is shared by CmdQ, MgntQ, and USB coalesce DataQ) */ skb = dev_alloc_skb(USB_HWDESC_HEADER_LEN + DataLen + 4); + if (skb == NULL) { + RT_TRACE(COMP_ERR, "(%s): unable to alloc skb buffer\n", + __func__); + rtStatus = false; + return rtStatus; + } memcpy((unsigned char *)(skb->cb), &dev, sizeof(dev)); tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); tcb_desc->queue_index = TXCMD_QUEUE; -- cgit v0.10.2 From e695b470b30fbaf41d6aab0f9ed99be1ad4aa3af Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Tue, 4 May 2010 14:24:12 +0200 Subject: Staging: rtl8192su: refactored FirmwareCheckReady replaced if..else if..else by a switch. this is hopefully easier to read. plus cosmetics. Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192S_firmware.c b/drivers/staging/rtl8192su/r8192S_firmware.c index 37d164c..5036d54 100644 --- a/drivers/staging/rtl8192su/r8192S_firmware.c +++ b/drivers/staging/rtl8192su/r8192S_firmware.c @@ -107,9 +107,9 @@ cmdsend_downloadcode_fail: } -RT_STATUS FirmwareEnableCPU(struct net_device *dev) +bool FirmwareEnableCPU(struct net_device *dev) { - RT_STATUS rtStatus = RT_STATUS_SUCCESS; + bool rtStatus = true; u8 tmpU1b, CPUStatus = 0; u16 tmpU2b; u32 iCheckTime = 200; @@ -129,8 +129,8 @@ RT_STATUS FirmwareEnableCPU(struct net_device *dev) udelay(100); } while (iCheckTime--); if (!(CPUStatus & IMEM_RDY)) { - RT_TRACE(COMP_ERR, "(%s): failed to enable CPU\n", __func__); - rtStatus = RT_STATUS_FAILURE; + RT_TRACE(COMP_ERR, "%s(): failed to enable CPU", __func__); + rtStatus = false; } return rtStatus; } @@ -165,106 +165,87 @@ FirmwareGetNextStatus(FIRMWARE_8192S_STATUS FWCurrentStatus) return NextFWStatus; } -bool -FirmwareCheckReady(struct net_device *dev, u8 LoadFWStatus) +bool FirmwareCheckReady(struct net_device *dev, u8 LoadFWStatus) { - struct r8192_priv *priv = ieee80211_priv(dev); - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - rt_firmware *pFirmware = priv->pFirmware; - int PollingCnt = 1000; - //u8 tmpU1b, CPUStatus = 0; - u8 CPUStatus = 0; - u32 tmpU4b; - //bool bOrgIMREnable; - - RT_TRACE(COMP_FIRMWARE, "--->FirmwareCheckReady(): LoadStaus(%d),", LoadFWStatus); + struct r8192_priv *priv = ieee80211_priv(dev); + bool rtStatus = true; + rt_firmware *pFirmware = priv->pFirmware; + int PollingCnt = 1000; + u8 CPUStatus = 0; + u32 tmpU4b; pFirmware->FWStatus = (FIRMWARE_8192S_STATUS)LoadFWStatus; - if( LoadFWStatus == FW_STATUS_LOAD_IMEM) - { - do - {//Polling IMEM code done. + switch (LoadFWStatus) { + case FW_STATUS_LOAD_IMEM: + do { /* Polling IMEM code done. */ CPUStatus = read_nic_byte(dev, TCR); if(CPUStatus& IMEM_CODE_DONE) break; - udelay(5); - }while(PollingCnt--); - if(!(CPUStatus & IMEM_CHK_RPT) || PollingCnt <= 0) - { + } while (PollingCnt--); + if (!(CPUStatus & IMEM_CHK_RPT) || PollingCnt <= 0) { RT_TRACE(COMP_ERR, "FW_STATUS_LOAD_IMEM FAIL CPU, Status=%x\r\n", CPUStatus); - return false; + goto FirmwareCheckReadyFail; } - } - else if( LoadFWStatus == FW_STATUS_LOAD_EMEM) - {//Check Put Code OK and Turn On CPU - do - {//Polling EMEM code done. + break; + case FW_STATUS_LOAD_EMEM: /* Check Put Code OK and Turn On CPU */ + do { /* Polling EMEM code done. */ CPUStatus = read_nic_byte(dev, TCR); if(CPUStatus& EMEM_CODE_DONE) break; - udelay(5); - }while(PollingCnt--); - if(!(CPUStatus & EMEM_CHK_RPT)) - { + } while (PollingCnt--); + if (!(CPUStatus & EMEM_CHK_RPT)) { RT_TRACE(COMP_ERR, "FW_STATUS_LOAD_EMEM FAIL CPU, Status=%x\r\n", CPUStatus); - return false; + goto FirmwareCheckReadyFail; } - - // Turn On CPU - rtStatus = FirmwareEnableCPU(dev); - if(rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_ERR, "Enable CPU fail ! \n" ); - return false; + /* Turn On CPU */ + if (FirmwareEnableCPU(dev) != true) { + RT_TRACE(COMP_ERR, "%s(): failed to enable CPU", + __func__); + goto FirmwareCheckReadyFail; } - } - else if( LoadFWStatus == FW_STATUS_LOAD_DMEM) - { - do - {//Polling DMEM code done + break; + case FW_STATUS_LOAD_DMEM: + do { /* Polling DMEM code done */ CPUStatus = read_nic_byte(dev, TCR); if(CPUStatus& DMEM_CODE_DONE) break; udelay(5); - }while(PollingCnt--); + } while (PollingCnt--); - if(!(CPUStatus & DMEM_CODE_DONE)) - { + if (!(CPUStatus & DMEM_CODE_DONE)) { RT_TRACE(COMP_ERR, "Polling DMEM code done fail ! CPUStatus(%#x)\n", CPUStatus); - return false; + goto FirmwareCheckReadyFail; } - RT_TRACE(COMP_FIRMWARE, "DMEM code download success, CPUStatus(%#x)\n", CPUStatus); + RT_TRACE(COMP_FIRMWARE, "%s(): DMEM code download success, " + "CPUStatus(%#x)", + __func__, CPUStatus); -// PollingCnt = 100; // Set polling cycle to 10ms. - PollingCnt = 10000; // Set polling cycle to 10ms. + PollingCnt = 10000; /* Set polling cycle to 10ms. */ - do - {//Polling Load Firmware ready + do { /* Polling Load Firmware ready */ CPUStatus = read_nic_byte(dev, TCR); if(CPUStatus & FWRDY) break; - udelay(100); - }while(PollingCnt--); + } while (PollingCnt--); - RT_TRACE(COMP_FIRMWARE, "Polling Load Firmware ready, CPUStatus(%x)\n", CPUStatus); + RT_TRACE(COMP_FIRMWARE, "%s(): polling load firmware ready, " + "CPUStatus(%x)", + __func__, CPUStatus); - //if(!(CPUStatus & LOAD_FW_READY)) - //if((CPUStatus & LOAD_FW_READY) != 0xff) - if((CPUStatus & LOAD_FW_READY) != LOAD_FW_READY) - { - RT_TRACE(COMP_ERR, "Polling Load Firmware ready fail ! CPUStatus(%x)\n", CPUStatus); - return false; + if ((CPUStatus & LOAD_FW_READY) != LOAD_FW_READY) { + RT_TRACE(COMP_ERR, "Polling Load Firmware ready failed " + "CPUStatus(%x)\n", CPUStatus); + goto FirmwareCheckReadyFail; } - - // - // USB interface will update reserved followings parameters later!! - // 2008.08.28. - // + /* + * USB interface will update + * reserved followings parameters later + */ // // If right here, we can set TCR/RCR to desired value @@ -277,16 +258,23 @@ FirmwareCheckReady(struct net_device *dev, u8 LoadFWStatus) write_nic_dword(dev, RCR, (tmpU4b|RCR_APPFCS|RCR_APP_ICV|RCR_APP_MIC)); - RT_TRACE(COMP_FIRMWARE, "FirmwareCheckReady(): Current RCR settings(%#x)\n", tmpU4b); - - + RT_TRACE(COMP_FIRMWARE, "%s(): Current RCR settings(%#x)", + __func__, tmpU4b); // Set to normal mode. write_nic_byte(dev, LBKMD_SEL, LBK_NORMAL); - + break; + default: + break; } + RT_TRACE(COMP_FIRMWARE, "%s(): LoadFWStatus(%d), success", + __func__, LoadFWStatus); + return rtStatus; - RT_TRACE(COMP_FIRMWARE, "<---FirmwareCheckReady(): LoadFWStatus(%d), rtStatus(%x)\n", LoadFWStatus, rtStatus); - return (rtStatus == RT_STATUS_SUCCESS) ? true:false; +FirmwareCheckReadyFail: + rtStatus = false; + RT_TRACE(COMP_FIRMWARE, "%s(): LoadFWStatus(%d), failed", + __func__, LoadFWStatus); + return rtStatus; } // -- cgit v0.10.2 From 495c57f5f0af9e6075e86f5fb2249d60bc8cdb34 Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Tue, 4 May 2010 14:24:35 +0200 Subject: Staging: rtl8192su: all rtl8192su chips have the 93c46 eprom all rtl8192su chips have the 93c46 eprom. (no 93c56) it it theoretically safe to remove the 93c56 definitions and some unneeded code. if your device stops working after this patch, please send me a mail and include some information about your device: * dmesg * lsusb -v * _exact_ chipset (version) * vendor * everything else, that may help plus cosmetics. Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192S_phy.c b/drivers/staging/rtl8192su/r8192S_phy.c index 83c8aaa..69ede47 100644 --- a/drivers/staging/rtl8192su/r8192S_phy.c +++ b/drivers/staging/rtl8192su/r8192S_phy.c @@ -1873,10 +1873,9 @@ PHY_GetTxPowerLevel8192S( if(priv->bTXPowerDataReadFromEEPORM == FALSE) return; - // - // Read predefined TX power index in EEPROM - // -// if(priv->epromtype == EPROM_93c46) + /* + * Read predefined TX power index in EEPROM + */ { // // Mainly we use RF-A Tx Power to write the Tx Power registers, but the RF-B Tx diff --git a/drivers/staging/rtl8192su/r8192U.h b/drivers/staging/rtl8192su/r8192U.h index 8306252..4112e14 100644 --- a/drivers/staging/rtl8192su/r8192U.h +++ b/drivers/staging/rtl8192su/r8192U.h @@ -741,11 +741,6 @@ typedef enum _RTL8192SUSB_LOOPBACK{ #define RSVD_FW_QUEUE_PAGE_CMD_SHIFT 0x08 #define RSVD_FW_QUEUE_PAGE_BCN_SHIFT 0x00 #define RSVD_FW_QUEUE_PAGE_PUB_SHIFT 0x08 -//================================================================= -//================================================================= - -#define EPROM_93c46 0 -#define EPROM_93c56 1 #define DEFAULT_FRAG_THRESHOLD 2342U #define MIN_FRAG_THRESHOLD 256U @@ -1129,8 +1124,7 @@ typedef struct r8192_priv { struct rtl819x_ops* ops; struct usb_device *udev; - //added for maintain info from eeprom - short epromtype; + /* added for maintain info from eeprom */ u16 eeprom_vid; u16 eeprom_pid; u8 eeprom_CustomerID; diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index 5696b00..d372ff2 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -3309,18 +3309,6 @@ static void rtl8192_init_priv_task(struct net_device* dev) (unsigned long)priv); } -static void rtl8192_get_eeprom_size(struct net_device* dev) -{ - u16 curCR = 0; - struct r8192_priv *priv = ieee80211_priv(dev); - RT_TRACE(COMP_EPROM, "===========>%s()\n", __FUNCTION__); - curCR = read_nic_word_E(dev,EPROM_CMD); - RT_TRACE(COMP_EPROM, "read from Reg EPROM_CMD(%x):%x\n", EPROM_CMD, curCR); - //whether need I consider BIT5? - priv->epromtype = (curCR & Cmd9346CR_9356SEL) ? EPROM_93c56 : EPROM_93c46; - RT_TRACE(COMP_EPROM, "<===========%s(), epromtype:%d\n", __FUNCTION__, priv->epromtype); -} - //used to swap endian. as ntohl & htonl are not neccessary to swap endian, so use this instead. static inline u16 endian_swap(u16* data) { @@ -3523,46 +3511,40 @@ void rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(struct net_device *dev) RT_TRACE(COMP_INIT, "<==== ConfigAdapterInfo8192SForAutoLoadFail\n"); } -// -// Description: -// Read HW adapter information by E-Fuse or EEPROM according CR9346 reported. -// -// Assumption: -// 1. CR9346 regiser has verified. -// 2. PASSIVE_LEVEL (USB interface) -// -// Created by Roger, 2008.10.21. -// -void rtl8192SU_ReadAdapterInfo8192SUsb(struct net_device* dev) +/* + * Description: + * Read HW adapter information by E-Fuse + * or EEPROM according CR9346 reported. + * + * Assumption: + * 1. CR9346 regiser has verified. + * 2. PASSIVE_LEVEL (USB interface) + */ +void rtl8192SU_ReadAdapterInfo8192SUsb(struct net_device *dev) { struct r8192_priv *priv = ieee80211_priv(dev); u16 i; u8 tmpU1b, tempval; u16 EEPROMId; u8 hwinfo[HWSET_MAX_SIZE_92S]; - u8 rf_path, index; // For EEPROM/EFUSE After V0.6_1117 + u8 rf_path, index; /* For EEPROM/EFUSE After V0.6_1117 */ struct eeprom_93cx6 eeprom; u16 eeprom_val; eeprom.data = dev; eeprom.register_read = rtl819x_eeprom_register_read; eeprom.register_write = rtl819x_eeprom_register_write; - if (priv->epromtype == EPROM_93c46) - eeprom.width = PCI_EEPROM_WIDTH_93C46; - else - eeprom.width = PCI_EEPROM_WIDTH_93C56; - - RT_TRACE(COMP_INIT, "====> ReadAdapterInfo8192SUsb\n"); + eeprom.width = PCI_EEPROM_WIDTH_93C46; /* - * The following operation are prevent Efuse leakage by turn on 2.5V.. + * The following operation are prevent Efuse leakage by turn on 2.5V. */ tmpU1b = read_nic_byte(dev, EFUSE_TEST+3); write_nic_byte(dev, EFUSE_TEST+3, tmpU1b|0x80); mdelay(10); write_nic_byte(dev, EFUSE_TEST+3, (tmpU1b&(~BIT7))); - // Retrieve Chip version. + /* Retrieve Chip version. */ priv->card_8192_version = (VERSION_8192S)((read_nic_dword(dev, PMC_FSM)>>16)&0xF); RT_TRACE(COMP_INIT, "Chip Version ID: 0x%2x\n", priv->card_8192_version); @@ -3582,103 +3564,59 @@ void rtl8192SU_ReadAdapterInfo8192SUsb(struct net_device* dev) break; } - //if (IS_BOOT_FROM_EEPROM(Adapter)) - if(priv->EepromOrEfuse) - { // Read frin EEPROM - write_nic_byte(dev, SYS_ISO_CTRL+1, 0xE8); // Isolation signals from Loader - //PlatformStallExecution(10000); + if (priv->EepromOrEfuse) { /* Read from EEPROM */ + /* Isolation signals from Loader */ + write_nic_byte(dev, SYS_ISO_CTRL+1, 0xE8); mdelay(10); - write_nic_byte(dev, PMC_FSM, 0x02); // Enable Loader Data Keep - // Read all Content from EEPROM or EFUSE. - for(i = 0; i < HWSET_MAX_SIZE_92S; i += 2) - { + /* Enable Loader Data Keep */ + write_nic_byte(dev, PMC_FSM, 0x02); + /* Read all Content from EEPROM or EFUSE. */ + for (i = 0; i < HWSET_MAX_SIZE_92S; i += 2) { eeprom_93cx6_read(&eeprom, (u16) (i>>1), &eeprom_val); *((u16 *)(&hwinfo[i])) = eeprom_val; } - } - else if (!(priv->EepromOrEfuse)) - { // Read from EFUSE - - // - // We set Isolation signals from Loader and reset EEPROM after system resuming - // from suspend mode. - // 2008.10.21. - // - //PlatformEFIOWrite1Byte(Adapter, SYS_ISO_CTRL+1, 0xE8); // Isolation signals from Loader - //PlatformStallExecution(10000); - //PlatformEFIOWrite1Byte(Adapter, SYS_FUNC_EN+1, 0x40); - //PlatformEFIOWrite1Byte(Adapter, SYS_FUNC_EN+1, 0x50); - - //tmpU1b = PlatformEFIORead1Byte(Adapter, EFUSE_TEST+3); - //PlatformEFIOWrite1Byte(Adapter, EFUSE_TEST+3, (tmpU1b | 0x80)); - //PlatformEFIOWrite1Byte(Adapter, EFUSE_TEST+3, 0x72); - //PlatformEFIOWrite1Byte(Adapter, EFUSE_CLK, 0x03); - - // Read EFUSE real map to shadow. + } else if (!(priv->EepromOrEfuse)) { /* Read from EFUSE */ + /* Read EFUSE real map to shadow. */ EFUSE_ShadowMapUpdate(dev); memcpy(hwinfo, &priv->EfuseMap[EFUSE_INIT_MAP][0], HWSET_MAX_SIZE_92S); + } else { + RT_TRACE(COMP_INIT, "%s(): Invalid boot type", __func__); } - else - { - RT_TRACE(COMP_INIT, "ReadAdapterInfo8192SUsb(): Invalid boot type!!\n"); - } - - //YJ,test,090106 - //dump_buf(hwinfo,HWSET_MAX_SIZE_92S); - // - // The following are EFUSE/EEPROM independent operations!! - // - //RT_PRINT_DATA(COMP_EFUSE, DBG_LOUD, ("MAP: \n"), hwinfo, HWSET_MAX_SIZE_92S); - // - // Event though CR9346 regiser can verify whether Autoload is success or not, but we still - // double check ID codes for 92S here(e.g., due to HW GPIO polling fail issue). - // 2008.10.21. - // + /* + * Even though CR9346 regiser can verify whether Autoload + * is success or not, but we still double check ID codes for 92S here + * (e.g., due to HW GPIO polling fail issue) + */ EEPROMId = *((u16 *)&hwinfo[0]); - - if( EEPROMId != RTL8190_EEPROM_ID ) - { + if (EEPROMId != RTL8190_EEPROM_ID) { RT_TRACE(COMP_INIT, "ID(%#x) is invalid!!\n", EEPROMId); priv->bTXPowerDataReadFromEEPORM = FALSE; priv->AutoloadFailFlag=TRUE; - } - else - { + } else { priv->AutoloadFailFlag=FALSE; priv->bTXPowerDataReadFromEEPORM = TRUE; } - // Read IC Version && Channel Plan - if(!priv->AutoloadFailFlag) - { - // VID, PID + /* Read IC Version && Channel Plan */ + if (!priv->AutoloadFailFlag) { + /* VID, PID */ priv->eeprom_vid = *(u16 *)&hwinfo[EEPROM_VID]; priv->eeprom_pid = *(u16 *)&hwinfo[EEPROM_PID]; priv->bIgnoreDiffRateTxPowerOffset = false; //cosa for test - // EEPROM Version ID, Channel plan + /* EEPROM Version ID, Channel plan */ priv->EEPROMVersion = *(u8 *)&hwinfo[EEPROM_Version]; priv->eeprom_ChannelPlan = *(u8 *)&hwinfo[EEPROM_ChannelPlan]; - // Customer ID, 0x00 and 0xff are reserved for Realtek. + /* Customer ID, 0x00 and 0xff are reserved for Realtek. */ priv->eeprom_CustomerID = *(u8 *)&hwinfo[EEPROM_CustomID]; priv->eeprom_SubCustomerID = *(u8 *)&hwinfo[EEPROM_SubCustomID]; - } - else - { - //priv->eeprom_vid = 0; - //priv->eeprom_pid = 0; - //priv->EEPROMVersion = 0; - //priv->eeprom_ChannelPlan = 0; - //priv->eeprom_CustomerID = 0; - //priv->eeprom_SubCustomerID = 0; - + } else { rtl8192SU_ConfigAdapterInfo8192SForAutoLoadFail(dev); return; } - RT_TRACE(COMP_INIT, "EEPROM Id = 0x%4x\n", EEPROMId); RT_TRACE(COMP_INIT, "EEPROM VID = 0x%4x\n", priv->eeprom_vid); RT_TRACE(COMP_INIT, "EEPROM PID = 0x%4x\n", priv->eeprom_pid); @@ -3688,18 +3626,13 @@ void rtl8192SU_ReadAdapterInfo8192SUsb(struct net_device* dev) RT_TRACE(COMP_INIT, "EEPROM ChannelPlan = 0x%4x\n", priv->eeprom_ChannelPlan); RT_TRACE(COMP_INIT, "bIgnoreDiffRateTxPowerOffset = %d\n", priv->bIgnoreDiffRateTxPowerOffset); - - // Read USB optional function. - if(!priv->AutoloadFailFlag) - { + /* Read USB optional function. */ + if (!priv->AutoloadFailFlag) { priv->EEPROMUsbOption = *(u8 *)&hwinfo[EEPROM_USB_OPTIONAL]; - } - else - { + } else { priv->EEPROMUsbOption = EEPROM_USB_Default_OPTIONAL_FUNC; } - priv->EEPROMUsbEndPointNumber = rtl8192SU_UsbOptionToEndPointNumber((priv->EEPROMUsbOption&EEPROM_EP_NUMBER)>>3); RT_TRACE(COMP_INIT, "USB Option = %#x\n", priv->EEPROMUsbOption); @@ -4138,7 +4071,6 @@ short rtl8192_init(struct net_device *dev) rtl8192_init_priv_variable(dev); rtl8192_init_priv_lock(priv); rtl8192_init_priv_task(dev); - rtl8192_get_eeprom_size(dev); priv->ops->rtl819x_read_eeprom_info(dev); rtl8192_get_channel_map(dev); init_hal_dm(dev); -- cgit v0.10.2 From ad313b1062f0e16e5fa64e1a34eec37e1b8a3341 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:42:56 +0100 Subject: staging:iio: Add new in_raw definitions for adc channels. Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/adc/adc.h b/drivers/staging/iio/adc/adc.h index d925b2c..46f0d08 100644 --- a/drivers/staging/iio/adc/adc.h +++ b/drivers/staging/iio/adc/adc.h @@ -9,5 +9,17 @@ * */ +/* Deprecated */ #define IIO_DEV_ATTR_ADC(_num, _show, _addr) \ IIO_DEVICE_ATTR(adc_##_num, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_IN_RAW(_num, _show, _addr) \ + IIO_DEVICE_ATTR(in##_num##_raw, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_IN_DIFF_RAW(_nump, _numn, _show, _addr) \ + IIO_DEVICE_ATTR_NAMED(in##_nump##min##_numn##_raw, \ + in##_nump-in##_numn##_raw, \ + S_IRUGO, \ + _show, \ + NULL, \ + _addr) diff --git a/drivers/staging/iio/sysfs.h b/drivers/staging/iio/sysfs.h index e501e13..d8fe0e2 100644 --- a/drivers/staging/iio/sysfs.h +++ b/drivers/staging/iio/sysfs.h @@ -98,6 +98,9 @@ struct iio_const_attr { struct iio_dev_attr iio_dev_attr_##_name \ = IIO_ATTR(_name, _mode, _show, _store, _addr) +#define IIO_DEVICE_ATTR_NAMED(_vname, _name, _mode, _show, _store, _addr) \ + struct iio_dev_attr iio_dev_attr_##_vname \ + = IIO_ATTR(_name, _mode, _show, _store, _addr) #define IIO_DEVICE_ATTR_2(_name, _mode, _show, _store, _addr, _val2) \ struct iio_dev_attr iio_dev_attr_##_name \ -- cgit v0.10.2 From ff7723e203349c18d7149e7cf2a4ae928bb9da69 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:42:57 +0100 Subject: staging:iio: Add new attrs for sampling frequency available and temp_raw Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/sysfs.h b/drivers/staging/iio/sysfs.h index d8fe0e2..afcf5ab 100644 --- a/drivers/staging/iio/sysfs.h +++ b/drivers/staging/iio/sysfs.h @@ -144,18 +144,25 @@ struct iio_const_attr { * * May be mode dependent on some devices **/ +/* Deprecated */ #define IIO_DEV_ATTR_AVAIL_SAMP_FREQ(_show) \ IIO_DEVICE_ATTR(available_sampling_frequency, S_IRUGO, _show, NULL, 0) +#define IIO_DEV_ATTR_SAMP_FREQ_AVAIL(_show) \ + IIO_DEVICE_ATTR(sampling_frequency_available, S_IRUGO, _show, NULL, 0) /** * IIO_CONST_ATTR_AVAIL_SAMP_FREQ - list available sampling frequencies * @_string: frequency string for the attribute * * Constant version **/ -#define IIO_CONST_ATTR_AVAIL_SAMP_FREQ(_string) \ +/* Deprecated */ +#define IIO_CONST_ATTR_AVAIL_SAMP_FREQ(_string) \ IIO_CONST_ATTR(available_sampling_frequency, _string) +#define IIO_CONST_ATTR_SAMP_FREQ_AVAIL(_string) \ + IIO_CONST_ATTR(sampling_frequency_available, _string) + /** * IIO_DEV_ATTR_SCAN_MODE - select a scan mode * @_mode: sysfs file mode/permissions @@ -234,6 +241,9 @@ struct iio_const_attr { #define IIO_DEV_ATTR_TEMP(_show) \ IIO_DEVICE_ATTR(temp, S_IRUGO, _show, NULL, 0) +#define IIO_DEV_ATTR_TEMP_RAW(_show) \ + IIO_DEVICE_ATTR(temp_raw, S_IRUGO, _show, NULL, 0) + /** * IIO_EVENT_SH - generic shared event handler * @_name: event name -- cgit v0.10.2 From f3fb001191a38a81bbc3cb363af2c279609ecc7c Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:42:58 +0100 Subject: iio:staging:accelerometers move towards the new abi Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/accel/accel.h b/drivers/staging/iio/accel/accel.h index d7fc7f9..059209c 100644 --- a/drivers/staging/iio/accel/accel.h +++ b/drivers/staging/iio/accel/accel.h @@ -2,7 +2,6 @@ #include "../sysfs.h" /* Accelerometer types of attribute */ - #define IIO_DEV_ATTR_ACCEL_X_OFFSET(_mode, _show, _store, _addr) \ IIO_DEVICE_ATTR(accel_x_offset, _mode, _show, _store, _addr) @@ -22,13 +21,13 @@ IIO_DEVICE_ATTR(accel_z_gain, _mode, _show, _store, _addr) #define IIO_DEV_ATTR_ACCEL_X(_show, _addr) \ - IIO_DEVICE_ATTR(accel_x, S_IRUGO, _show, NULL, _addr) + IIO_DEVICE_ATTR(accel_x_raw, S_IRUGO, _show, NULL, _addr) #define IIO_DEV_ATTR_ACCEL_Y(_show, _addr) \ - IIO_DEVICE_ATTR(accel_y, S_IRUGO, _show, NULL, _addr) + IIO_DEVICE_ATTR(accel_y_raw, S_IRUGO, _show, NULL, _addr) #define IIO_DEV_ATTR_ACCEL_Z(_show, _addr) \ - IIO_DEVICE_ATTR(accel_z, S_IRUGO, _show, NULL, _addr) + IIO_DEVICE_ATTR(accel_z_raw, S_IRUGO, _show, NULL, _addr) /* Thresholds are somewhat chip dependent - may need quite a few defs here */ /* For unified thresholds (shared across all directions */ @@ -61,7 +60,6 @@ #define IIO_DEV_ATTR_ACCEL_THRESH_Z(_mode, _show, _store, _addr) \ IIO_DEVICE_ATTR(thresh_accel_z, _mode, _show, _store, _addr) - /** * IIO_EVENT_ATTR_ACCEL_X_HIGH: threshold event, x acceleration * @_show: read x acceleration high threshold diff --git a/drivers/staging/iio/accel/kxsd9.c b/drivers/staging/iio/accel/kxsd9.c index db2dd53..ae7ffe1 100644 --- a/drivers/staging/iio/accel/kxsd9.c +++ b/drivers/staging/iio/accel/kxsd9.c @@ -26,6 +26,7 @@ #include #include #include +#include #include "../iio.h" #include "../sysfs.h" @@ -51,8 +52,10 @@ #define KXSD9_READ(a) (0x80 | (a)) #define KXSD9_WRITE(a) (a) -#define IIO_DEV_ATTR_ACCEL_SET_RANGE(_mode, _show, _store) \ - IIO_DEVICE_ATTR(accel_range, _mode, _show, _store, 0) +#define KXSD9_SCALE_2G "0.011978" +#define KXSD9_SCALE_4G "0.023927" +#define KXSD9_SCALE_6G "0.035934" +#define KXSD9_SCALE_8G "0.047853" #define KXSD9_STATE_RX_SIZE 2 #define KXSD9_STATE_TX_SIZE 4 @@ -73,9 +76,9 @@ struct kxsd9_state { }; /* This may want to move to mili g to allow for non integer ranges */ -static ssize_t kxsd9_read_accel_range(struct device *dev, - struct device_attribute *attr, - char *buf) +static ssize_t kxsd9_read_scale(struct device *dev, + struct device_attribute *attr, + char *buf) { int ret; ssize_t len = 0; @@ -101,16 +104,16 @@ static ssize_t kxsd9_read_accel_range(struct device *dev, switch (st->rx[1] & KXSD9_FS_MASK) { case KXSD9_FS_8: - len += sprintf(buf, "8\n"); + len += sprintf(buf, "%s\n", KXSD9_SCALE_8G); break; case KXSD9_FS_6: - len += sprintf(buf, "6\n"); + len += sprintf(buf, "%s\n", KXSD9_SCALE_6G); break; case KXSD9_FS_4: - len += sprintf(buf, "4\n"); + len += sprintf(buf, "%s\n", KXSD9_SCALE_4G); break; case KXSD9_FS_2: - len += sprintf(buf, "2\n"); + len += sprintf(buf, "%s\n", KXSD9_SCALE_2G); break; } @@ -119,12 +122,12 @@ error_ret: return ret ? ret : len; } -static ssize_t kxsd9_write_accel_range(struct device *dev, - struct device_attribute *attr, - const char *buf, - size_t len) +static ssize_t kxsd9_write_scale(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) { - long readin; + struct spi_message msg; int ret; struct iio_dev *indio_dev = dev_get_drvdata(dev); @@ -145,25 +148,25 @@ static ssize_t kxsd9_write_accel_range(struct device *dev, }, }; - ret = strict_strtol(buf, 10, &readin); - if (ret) - return ret; - switch (readin) { - case 8: + if (!strncmp(buf, KXSD9_SCALE_8G, + strlen(buf) < strlen(KXSD9_SCALE_8G) + ? strlen(buf) : strlen(KXSD9_SCALE_8G))) val = KXSD9_FS_8; - break; - case 6: + else if (!strncmp(buf, KXSD9_SCALE_6G, + strlen(buf) < strlen(KXSD9_SCALE_6G) + ? strlen(buf) : strlen(KXSD9_SCALE_6G))) val = KXSD9_FS_6; - break; - case 4: + else if (!strncmp(buf, KXSD9_SCALE_4G, + strlen(buf) < strlen(KXSD9_SCALE_4G) + ? strlen(buf) : strlen(KXSD9_SCALE_4G))) val = KXSD9_FS_4; - break; - case 2: + else if (!strncmp(buf, KXSD9_SCALE_2G, + strlen(buf) < strlen(KXSD9_SCALE_2G) + ? strlen(buf) : strlen(KXSD9_SCALE_2G))) val = KXSD9_FS_2; - break; - default: + else return -EINVAL; - } + mutex_lock(&st->buf_lock); st->tx[0] = KXSD9_READ(KXSD9_REG_CTRL_C); st->tx[1] = 0; @@ -182,6 +185,7 @@ error_ret: mutex_unlock(&st->buf_lock); return ret ? ret : len; } + static ssize_t kxsd9_read_accel(struct device *dev, struct device_attribute *attr, char *buf) @@ -227,17 +231,27 @@ error_ret: static IIO_DEV_ATTR_ACCEL_X(kxsd9_read_accel, KXSD9_REG_X); static IIO_DEV_ATTR_ACCEL_Y(kxsd9_read_accel, KXSD9_REG_Y); static IIO_DEV_ATTR_ACCEL_Z(kxsd9_read_accel, KXSD9_REG_Z); -static IIO_DEV_ATTR_ADC(0, kxsd9_read_accel, KXSD9_REG_AUX); -static IIO_DEV_ATTR_ACCEL_SET_RANGE(S_IRUGO | S_IWUSR, - kxsd9_read_accel_range, - kxsd9_write_accel_range); +static IIO_DEV_ATTR_IN_RAW(0, kxsd9_read_accel, KXSD9_REG_AUX); + +static IIO_DEVICE_ATTR(accel_scale, + S_IRUGO | S_IWUSR, + kxsd9_read_scale, + kxsd9_write_scale, + 0); + +static IIO_CONST_ATTR(accel_scale_available, + KXSD9_SCALE_2G " " + KXSD9_SCALE_4G " " + KXSD9_SCALE_6G " " + KXSD9_SCALE_8G); static struct attribute *kxsd9_attributes[] = { - &iio_dev_attr_accel_x.dev_attr.attr, - &iio_dev_attr_accel_y.dev_attr.attr, - &iio_dev_attr_accel_z.dev_attr.attr, - &iio_dev_attr_adc_0.dev_attr.attr, - &iio_dev_attr_accel_range.dev_attr.attr, + &iio_dev_attr_accel_x_raw.dev_attr.attr, + &iio_dev_attr_accel_y_raw.dev_attr.attr, + &iio_dev_attr_accel_z_raw.dev_attr.attr, + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_dev_attr_accel_scale.dev_attr.attr, + &iio_const_attr_accel_scale_available.dev_attr.attr, NULL, }; diff --git a/drivers/staging/iio/accel/lis3l02dq.h b/drivers/staging/iio/accel/lis3l02dq.h index 91a5375..e76a979 100644 --- a/drivers/staging/iio/accel/lis3l02dq.h +++ b/drivers/staging/iio/accel/lis3l02dq.h @@ -179,10 +179,6 @@ int lis3l02dq_spi_read_reg_8(struct device *dev, int lis3l02dq_spi_write_reg_8(struct device *dev, u8 reg_address, u8 *val); -#define LIS3L02DQ_SCAN_ACC_X 0 -#define LIS3L02DQ_SCAN_ACC_Y 1 -#define LIS3L02DQ_SCAN_ACC_Z 2 - #ifdef CONFIG_IIO_RING_BUFFER /* At the moment triggers are only used for ring buffer diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c index ea76902..6b5577d 100644 --- a/drivers/staging/iio/accel/lis3l02dq_core.c +++ b/drivers/staging/iio/accel/lis3l02dq_core.c @@ -458,41 +458,39 @@ err_ret: return ret; } -static IIO_DEV_ATTR_ACCEL_X_OFFSET(S_IWUSR | S_IRUGO, - lis3l02dq_read_signed, - lis3l02dq_write_signed, - LIS3L02DQ_REG_OFFSET_X_ADDR); - -static IIO_DEV_ATTR_ACCEL_Y_OFFSET(S_IWUSR | S_IRUGO, - lis3l02dq_read_signed, - lis3l02dq_write_signed, - LIS3L02DQ_REG_OFFSET_Y_ADDR); - -static IIO_DEV_ATTR_ACCEL_Z_OFFSET(S_IWUSR | S_IRUGO, - lis3l02dq_read_signed, - lis3l02dq_write_signed, - LIS3L02DQ_REG_OFFSET_Z_ADDR); - -static IIO_DEV_ATTR_ACCEL_X_GAIN(S_IWUSR | S_IRUGO, - lis3l02dq_read_unsigned, - lis3l02dq_write_unsigned, - LIS3L02DQ_REG_GAIN_X_ADDR); - -static IIO_DEV_ATTR_ACCEL_Y_GAIN(S_IWUSR | S_IRUGO, - lis3l02dq_read_unsigned, - lis3l02dq_write_unsigned, - LIS3L02DQ_REG_GAIN_Y_ADDR); - -static IIO_DEV_ATTR_ACCEL_Z_GAIN(S_IWUSR | S_IRUGO, - lis3l02dq_read_unsigned, - lis3l02dq_write_unsigned, - LIS3L02DQ_REG_GAIN_Z_ADDR); - -static IIO_DEV_ATTR_ACCEL_THRESH(S_IWUSR | S_IRUGO, - lis3l02dq_read_16bit_signed, - lis3l02dq_write_16bit_signed, - LIS3L02DQ_REG_THS_L_ADDR); - +#define LIS3L02DQ_SIGNED_ATTR(name, reg) \ + IIO_DEVICE_ATTR(name, \ + S_IWUSR | S_IRUGO, \ + lis3l02dq_read_signed, \ + lis3l02dq_write_signed, \ + reg); + +#define LIS3L02DQ_UNSIGNED_ATTR(name, reg) \ + IIO_DEVICE_ATTR(name, \ + S_IWUSR | S_IRUGO, \ + lis3l02dq_read_unsigned, \ + lis3l02dq_write_unsigned, \ + reg); + +static LIS3L02DQ_SIGNED_ATTR(accel_x_calibbias, + LIS3L02DQ_REG_OFFSET_X_ADDR); +static LIS3L02DQ_SIGNED_ATTR(accel_y_calibbias, + LIS3L02DQ_REG_OFFSET_Y_ADDR); +static LIS3L02DQ_SIGNED_ATTR(accel_z_calibbias, + LIS3L02DQ_REG_OFFSET_Z_ADDR); + +static LIS3L02DQ_UNSIGNED_ATTR(accel_x_calibscale, + LIS3L02DQ_REG_GAIN_X_ADDR); +static LIS3L02DQ_UNSIGNED_ATTR(accel_y_calibscale, + LIS3L02DQ_REG_GAIN_Y_ADDR); +static LIS3L02DQ_UNSIGNED_ATTR(accel_z_calibscale, + LIS3L02DQ_REG_GAIN_Z_ADDR); + +static IIO_DEVICE_ATTR(accel_mag_either_rising_value, + S_IWUSR | S_IRUGO, + lis3l02dq_read_16bit_signed, + lis3l02dq_write_16bit_signed, + LIS3L02DQ_REG_THS_L_ADDR); /* RFC The reading method for these will change depending on whether * ring buffer capture is in use. Is it worth making these take two * functions and let the core handle which to call, or leave as in this @@ -512,7 +510,7 @@ static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, lis3l02dq_read_frequency, lis3l02dq_write_frequency); -static IIO_CONST_ATTR_AVAIL_SAMP_FREQ("280 560 1120 4480"); +static IIO_CONST_ATTR_SAMP_FREQ_AVAIL("280 560 1120 4480"); static ssize_t lis3l02dq_read_interrupt_config(struct device *dev, struct device_attribute *attr, @@ -522,7 +520,7 @@ static ssize_t lis3l02dq_read_interrupt_config(struct device *dev, s8 val; struct iio_event_attr *this_attr = to_iio_event_attr(attr); - ret = lis3l02dq_spi_read_reg_8(dev, + ret = lis3l02dq_spi_read_reg_8(dev->parent, LIS3L02DQ_REG_WAKE_UP_CFG_ADDR, (u8 *)&val); @@ -545,7 +543,7 @@ static ssize_t lis3l02dq_write_interrupt_config(struct device *dev, mutex_lock(&indio_dev->mlock); /* read current value */ - ret = lis3l02dq_spi_read_reg_8(dev, + ret = lis3l02dq_spi_read_reg_8(dev->parent, LIS3L02DQ_REG_WAKE_UP_CFG_ADDR, &valold); if (ret) @@ -618,7 +616,7 @@ static int lis3l02dq_thresh_handler_th(struct iio_dev *dev_info, static void lis3l02dq_thresh_handler_bh_no_check(struct work_struct *work_s) { struct iio_work_cont *wc - = container_of(work_s, struct iio_work_cont, ws_nocheck); + = container_of(work_s, struct iio_work_cont, ws); struct lis3l02dq_state *st = wc->st; u8 t; @@ -668,43 +666,51 @@ static void lis3l02dq_thresh_handler_bh_no_check(struct work_struct *work_s) /* A shared handler for a number of threshold types */ IIO_EVENT_SH(threshold, &lis3l02dq_thresh_handler_th); -IIO_EVENT_ATTR_ACCEL_X_HIGH_SH(iio_event_threshold, - lis3l02dq_read_interrupt_config, - lis3l02dq_write_interrupt_config, - LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_X_HIGH); - -IIO_EVENT_ATTR_ACCEL_Y_HIGH_SH(iio_event_threshold, - lis3l02dq_read_interrupt_config, - lis3l02dq_write_interrupt_config, - LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_Y_HIGH); - -IIO_EVENT_ATTR_ACCEL_Z_HIGH_SH(iio_event_threshold, - lis3l02dq_read_interrupt_config, - lis3l02dq_write_interrupt_config, - LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_Z_HIGH); - -IIO_EVENT_ATTR_ACCEL_X_LOW_SH(iio_event_threshold, - lis3l02dq_read_interrupt_config, - lis3l02dq_write_interrupt_config, - LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_X_LOW); - -IIO_EVENT_ATTR_ACCEL_Y_LOW_SH(iio_event_threshold, - lis3l02dq_read_interrupt_config, - lis3l02dq_write_interrupt_config, - LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_Y_LOW); +IIO_EVENT_ATTR_SH(accel_x_mag_pos_rising_en, + iio_event_threshold, + lis3l02dq_read_interrupt_config, + lis3l02dq_write_interrupt_config, + LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_X_HIGH); + +IIO_EVENT_ATTR_SH(accel_y_mag_pos_rising_en, + iio_event_threshold, + lis3l02dq_read_interrupt_config, + lis3l02dq_write_interrupt_config, + LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_Y_HIGH); + +IIO_EVENT_ATTR_SH(accel_z_mag_pos_rising_en, + iio_event_threshold, + lis3l02dq_read_interrupt_config, + lis3l02dq_write_interrupt_config, + LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_Z_HIGH); + +IIO_EVENT_ATTR_SH(accel_x_mag_neg_rising_en, + iio_event_threshold, + lis3l02dq_read_interrupt_config, + lis3l02dq_write_interrupt_config, + LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_X_LOW); + +IIO_EVENT_ATTR_SH(accel_y_mag_neg_rising_en, + iio_event_threshold, + lis3l02dq_read_interrupt_config, + lis3l02dq_write_interrupt_config, + LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_Y_LOW); + +IIO_EVENT_ATTR_SH(accel_z_mag_neg_rising_en, + iio_event_threshold, + lis3l02dq_read_interrupt_config, + lis3l02dq_write_interrupt_config, + LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_Z_LOW); -IIO_EVENT_ATTR_ACCEL_Z_LOW_SH(iio_event_threshold, - lis3l02dq_read_interrupt_config, - lis3l02dq_write_interrupt_config, - LIS3L02DQ_REG_WAKE_UP_CFG_INTERRUPT_Z_LOW); static struct attribute *lis3l02dq_event_attributes[] = { - &iio_event_attr_accel_x_high.dev_attr.attr, - &iio_event_attr_accel_y_high.dev_attr.attr, - &iio_event_attr_accel_z_high.dev_attr.attr, - &iio_event_attr_accel_x_low.dev_attr.attr, - &iio_event_attr_accel_y_low.dev_attr.attr, - &iio_event_attr_accel_z_low.dev_attr.attr, + &iio_event_attr_accel_x_mag_pos_rising_en.dev_attr.attr, + &iio_event_attr_accel_y_mag_pos_rising_en.dev_attr.attr, + &iio_event_attr_accel_z_mag_pos_rising_en.dev_attr.attr, + &iio_event_attr_accel_x_mag_neg_rising_en.dev_attr.attr, + &iio_event_attr_accel_y_mag_neg_rising_en.dev_attr.attr, + &iio_event_attr_accel_z_mag_neg_rising_en.dev_attr.attr, + &iio_dev_attr_accel_mag_either_rising_value.dev_attr.attr, NULL }; @@ -713,20 +719,21 @@ static struct attribute_group lis3l02dq_event_attribute_group = { }; static IIO_CONST_ATTR(name, "lis3l02dq"); +static IIO_CONST_ATTR(accel_scale, "0.00958"); static struct attribute *lis3l02dq_attributes[] = { - &iio_dev_attr_accel_x_offset.dev_attr.attr, - &iio_dev_attr_accel_y_offset.dev_attr.attr, - &iio_dev_attr_accel_z_offset.dev_attr.attr, - &iio_dev_attr_accel_x_gain.dev_attr.attr, - &iio_dev_attr_accel_y_gain.dev_attr.attr, - &iio_dev_attr_accel_z_gain.dev_attr.attr, - &iio_dev_attr_thresh.dev_attr.attr, - &iio_dev_attr_accel_x.dev_attr.attr, - &iio_dev_attr_accel_y.dev_attr.attr, - &iio_dev_attr_accel_z.dev_attr.attr, + &iio_dev_attr_accel_x_calibbias.dev_attr.attr, + &iio_dev_attr_accel_y_calibbias.dev_attr.attr, + &iio_dev_attr_accel_z_calibbias.dev_attr.attr, + &iio_dev_attr_accel_x_calibscale.dev_attr.attr, + &iio_dev_attr_accel_y_calibscale.dev_attr.attr, + &iio_dev_attr_accel_z_calibscale.dev_attr.attr, + &iio_const_attr_accel_scale.dev_attr.attr, + &iio_dev_attr_accel_x_raw.dev_attr.attr, + &iio_dev_attr_accel_y_raw.dev_attr.attr, + &iio_dev_attr_accel_z_raw.dev_attr.attr, &iio_dev_attr_sampling_frequency.dev_attr.attr, - &iio_const_attr_available_sampling_frequency.dev_attr.attr, + &iio_const_attr_sampling_frequency_available.dev_attr.attr, &iio_const_attr_name.dev_attr.attr, NULL }; diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c index 9371243..bba4b09 100644 --- a/drivers/staging/iio/accel/lis3l02dq_ring.c +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c @@ -75,16 +75,16 @@ error_ret: return ret; } -static IIO_SCAN_EL_C(accel_x, LIS3L02DQ_SCAN_ACC_X, IIO_SIGNED(16), +static IIO_SCAN_EL_C(accel_x, 0, IIO_SIGNED(16), LIS3L02DQ_REG_OUT_X_L_ADDR, &lis3l02dq_scan_el_set_state); -static IIO_SCAN_EL_C(accel_y, LIS3L02DQ_SCAN_ACC_Y, IIO_SIGNED(16), +static IIO_SCAN_EL_C(accel_y, 1, IIO_SIGNED(16), LIS3L02DQ_REG_OUT_Y_L_ADDR, &lis3l02dq_scan_el_set_state); -static IIO_SCAN_EL_C(accel_z, LIS3L02DQ_SCAN_ACC_Z, IIO_SIGNED(16), +static IIO_SCAN_EL_C(accel_z, 2, IIO_SIGNED(16), LIS3L02DQ_REG_OUT_Z_L_ADDR, &lis3l02dq_scan_el_set_state); -static IIO_SCAN_EL_TIMESTAMP; +static IIO_SCAN_EL_TIMESTAMP(3); static struct attribute *lis3l02dq_scan_el_attrs[] = { &iio_scan_el_accel_x.dev_attr.attr, diff --git a/drivers/staging/iio/accel/sca3000.h b/drivers/staging/iio/accel/sca3000.h index da7d3cb..e532199 100644 --- a/drivers/staging/iio/accel/sca3000.h +++ b/drivers/staging/iio/accel/sca3000.h @@ -187,6 +187,7 @@ struct sca3000_state { /** * struct sca3000_chip_info - model dependant parameters * @name: model identification + * @scale: string containing floating point scale factor * @temp_output: some devices have temperature sensors. * @measurement_mode_freq: normal mode sampling frequency * @option_mode_1: first optional mode. Not all models have one @@ -199,6 +200,7 @@ struct sca3000_state { **/ struct sca3000_chip_info { const char *name; + const char *scale; bool temp_output; int measurement_mode_freq; int option_mode_1; diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c index 1c22986..45e4777 100644 --- a/drivers/staging/iio/accel/sca3000_core.c +++ b/drivers/staging/iio/accel/sca3000_core.c @@ -27,11 +27,9 @@ enum sca3000_variant { d01, - d03, e02, e04, e05, - l01, }; /* Note where option modes are not defined, the chip simply does not @@ -44,21 +42,20 @@ enum sca3000_variant { static const struct sca3000_chip_info sca3000_spi_chip_info_tbl[] = { { .name = "sca3000-d01", + .scale = " 0.0073575", .temp_output = true, .measurement_mode_freq = 250, .option_mode_1 = SCA3000_OP_MODE_BYPASS, .option_mode_1_freq = 250, }, { - /* No data sheet available - may be the same as the 3100-d03?*/ - .name = "sca3000-d03", - .temp_output = true, - }, { .name = "sca3000-e02", + .scale = "0.00981", .measurement_mode_freq = 125, .option_mode_1 = SCA3000_OP_MODE_NARROW, .option_mode_1_freq = 63, }, { .name = "sca3000-e04", + .scale = "0.01962", .measurement_mode_freq = 100, .option_mode_1 = SCA3000_OP_MODE_NARROW, .option_mode_1_freq = 50, @@ -66,18 +63,12 @@ static const struct sca3000_chip_info sca3000_spi_chip_info_tbl[] = { .option_mode_2_freq = 400, }, { .name = "sca3000-e05", + .scale = "0.0613125", .measurement_mode_freq = 200, .option_mode_1 = SCA3000_OP_MODE_NARROW, .option_mode_1_freq = 50, .option_mode_2 = SCA3000_OP_MODE_WIDE, .option_mode_2_freq = 400, - }, { - /* No data sheet available. - * Frequencies are unknown. - */ - .name = "sca3000-l01", - .temp_output = true, - .option_mode_1 = SCA3000_OP_MODE_BYPASS, }, }; @@ -327,6 +318,14 @@ error_ret: return ret ? ret : len; } +static ssize_t sca3000_show_scale(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *dev_info = dev_get_drvdata(dev); + struct sca3000_state *st = dev_info->dev_data; + return sprintf(buf, "%s\n", st->info->scale); +} static ssize_t sca3000_show_name(struct device *dev, struct device_attribute *attr, @@ -495,7 +494,7 @@ error_ret: /* Not even vaguely standard attributes so defined here rather than * in the relevant IIO core headers */ -static IIO_DEVICE_ATTR(available_measurement_modes, S_IRUGO, +static IIO_DEVICE_ATTR(measurement_mode_available, S_IRUGO, sca3000_show_available_measurement_modes, NULL, 0); @@ -508,6 +507,8 @@ static IIO_DEVICE_ATTR(measurement_mode, S_IRUGO | S_IWUSR, static IIO_DEV_ATTR_NAME(sca3000_show_name); static IIO_DEV_ATTR_REV(sca3000_show_rev); +static IIO_DEVICE_ATTR(accel_scale, S_IRUGO, sca3000_show_scale, + NULL, 0); static IIO_DEV_ATTR_ACCEL_X(sca3000_read_13bit_signed, SCA3000_REG_ADDR_X_MSB); @@ -683,7 +684,7 @@ error_free_lock: /* Should only really be registered if ring buffer support is compiled in. * Does no harm however and doing it right would add a fair bit of complexity */ -static IIO_DEV_ATTR_AVAIL_SAMP_FREQ(sca3000_read_av_freq); +static IIO_DEV_ATTR_SAMP_FREQ_AVAIL(sca3000_read_av_freq); static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, sca3000_read_frequency, @@ -718,7 +719,10 @@ static ssize_t sca3000_read_temp(struct device *dev, error_ret: return ret; } -static IIO_DEV_ATTR_TEMP(sca3000_read_temp); +static IIO_DEV_ATTR_TEMP_RAW(sca3000_read_temp); + +static IIO_CONST_ATTR(temp_scale, "0.555556"); +static IIO_CONST_ATTR(temp_offset, "-214.6"); /** * sca3000_show_thresh() sysfs query of a threshold @@ -770,31 +774,34 @@ static ssize_t sca3000_write_thresh(struct device *dev, return ret ? ret : len; } -static IIO_DEV_ATTR_ACCEL_THRESH_X(S_IRUGO | S_IWUSR, - sca3000_show_thresh, - sca3000_write_thresh, - SCA3000_REG_CTRL_SEL_MD_X_TH); -static IIO_DEV_ATTR_ACCEL_THRESH_Y(S_IRUGO | S_IWUSR, - sca3000_show_thresh, - sca3000_write_thresh, - SCA3000_REG_CTRL_SEL_MD_Y_TH); -static IIO_DEV_ATTR_ACCEL_THRESH_Z(S_IRUGO | S_IWUSR, - sca3000_show_thresh, - sca3000_write_thresh, - SCA3000_REG_CTRL_SEL_MD_Z_TH); +static IIO_DEVICE_ATTR(accel_x_mag_either_rising_value, + S_IRUGO | S_IWUSR, + sca3000_show_thresh, + sca3000_write_thresh, + SCA3000_REG_CTRL_SEL_MD_X_TH); + +static IIO_DEVICE_ATTR(accel_y_mag_either_rising_value, + S_IRUGO | S_IWUSR, + sca3000_show_thresh, + sca3000_write_thresh, + SCA3000_REG_CTRL_SEL_MD_Y_TH); + +static IIO_DEVICE_ATTR(accel_z_mag_either_rising_value, + S_IRUGO | S_IWUSR, + sca3000_show_thresh, + sca3000_write_thresh, + SCA3000_REG_CTRL_SEL_MD_Z_TH); static struct attribute *sca3000_attributes[] = { &iio_dev_attr_name.dev_attr.attr, &iio_dev_attr_revision.dev_attr.attr, - &iio_dev_attr_accel_x.dev_attr.attr, - &iio_dev_attr_accel_y.dev_attr.attr, - &iio_dev_attr_accel_z.dev_attr.attr, - &iio_dev_attr_thresh_accel_x.dev_attr.attr, - &iio_dev_attr_thresh_accel_y.dev_attr.attr, - &iio_dev_attr_thresh_accel_z.dev_attr.attr, - &iio_dev_attr_available_measurement_modes.dev_attr.attr, + &iio_dev_attr_accel_scale.dev_attr.attr, + &iio_dev_attr_accel_x_raw.dev_attr.attr, + &iio_dev_attr_accel_y_raw.dev_attr.attr, + &iio_dev_attr_accel_z_raw.dev_attr.attr, + &iio_dev_attr_measurement_mode_available.dev_attr.attr, &iio_dev_attr_measurement_mode.dev_attr.attr, - &iio_dev_attr_available_sampling_frequency.dev_attr.attr, + &iio_dev_attr_sampling_frequency_available.dev_attr.attr, &iio_dev_attr_sampling_frequency.dev_attr.attr, NULL, }; @@ -802,18 +809,18 @@ static struct attribute *sca3000_attributes[] = { static struct attribute *sca3000_attributes_with_temp[] = { &iio_dev_attr_name.dev_attr.attr, &iio_dev_attr_revision.dev_attr.attr, - &iio_dev_attr_accel_x.dev_attr.attr, - &iio_dev_attr_accel_y.dev_attr.attr, - &iio_dev_attr_accel_z.dev_attr.attr, - &iio_dev_attr_thresh_accel_x.dev_attr.attr, - &iio_dev_attr_thresh_accel_y.dev_attr.attr, - &iio_dev_attr_thresh_accel_z.dev_attr.attr, - &iio_dev_attr_available_measurement_modes.dev_attr.attr, + &iio_dev_attr_accel_scale.dev_attr.attr, + &iio_dev_attr_accel_x_raw.dev_attr.attr, + &iio_dev_attr_accel_y_raw.dev_attr.attr, + &iio_dev_attr_accel_z_raw.dev_attr.attr, + &iio_dev_attr_measurement_mode_available.dev_attr.attr, &iio_dev_attr_measurement_mode.dev_attr.attr, - &iio_dev_attr_available_sampling_frequency.dev_attr.attr, + &iio_dev_attr_sampling_frequency_available.dev_attr.attr, &iio_dev_attr_sampling_frequency.dev_attr.attr, /* Only present if temp sensor is */ - &iio_dev_attr_temp.dev_attr.attr, + &iio_dev_attr_temp_raw.dev_attr.attr, + &iio_const_attr_temp_offset.dev_attr.attr, + &iio_const_attr_temp_scale.dev_attr.attr, NULL, }; @@ -910,7 +917,7 @@ static ssize_t sca3000_query_mo_det(struct device *dev, struct device_attribute *attr, char *buf) { - struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct iio_dev *indio_dev = dev_get_drvdata(dev->parent); struct sca3000_state *st = indio_dev->dev_data; struct iio_event_attr *this_attr = to_iio_event_attr(attr); int ret, len = 0; @@ -975,7 +982,7 @@ static ssize_t sca3000_query_ring_int(struct device *dev, struct iio_event_attr *this_attr = to_iio_event_attr(attr); int ret, len; u8 *rx; - struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct iio_dev *indio_dev = dev_get_drvdata(dev->parent); struct sca3000_state *st = indio_dev->dev_data; mutex_lock(&st->lock); ret = sca3000_read_data(st, SCA3000_REG_ADDR_INT_MASK, &rx, 1); @@ -995,7 +1002,7 @@ static ssize_t sca3000_set_ring_int(struct device *dev, const char *buf, size_t len) { - struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct iio_dev *indio_dev = dev_get_drvdata(dev->parent); struct sca3000_state *st = indio_dev->dev_data; struct iio_event_attr *this_attr = to_iio_event_attr(attr); @@ -1085,7 +1092,7 @@ static ssize_t sca3000_set_mo_det(struct device *dev, const char *buf, size_t len) { - struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct iio_dev *indio_dev = dev_get_drvdata(dev->parent); struct sca3000_state *st = indio_dev->dev_data; struct iio_event_attr *this_attr = to_iio_event_attr(attr); long val; @@ -1155,20 +1162,23 @@ IIO_EVENT_ATTR_FREE_FALL_DETECT_SH(iio_event_all, 0) /* Motion detector related event attributes */ -IIO_EVENT_ATTR_ACCEL_X_HIGH_SH(iio_event_all, - sca3000_query_mo_det, - sca3000_set_mo_det, - SCA3000_MD_CTRL_OR_X); - -IIO_EVENT_ATTR_ACCEL_Y_HIGH_SH(iio_event_all, - sca3000_query_mo_det, - sca3000_set_mo_det, - SCA3000_MD_CTRL_OR_Y); - -IIO_EVENT_ATTR_ACCEL_Z_HIGH_SH(iio_event_all, - sca3000_query_mo_det, - sca3000_set_mo_det, - SCA3000_MD_CTRL_OR_Z); +IIO_EVENT_ATTR_SH(accel_x_mag_either_rising_en, + iio_event_all, + sca3000_query_mo_det, + sca3000_set_mo_det, + SCA3000_MD_CTRL_OR_X); + +IIO_EVENT_ATTR_SH(accel_y_mag_either_rising_en, + iio_event_all, + sca3000_query_mo_det, + sca3000_set_mo_det, + SCA3000_MD_CTRL_OR_Y); + +IIO_EVENT_ATTR_SH(accel_z_mag_either_rising_en, + iio_event_all, + sca3000_query_mo_det, + sca3000_set_mo_det, + SCA3000_MD_CTRL_OR_Z); /* Hardware ring buffer related event attributes */ IIO_EVENT_ATTR_RING_50_FULL_SH(iio_event_all, @@ -1183,11 +1193,14 @@ IIO_EVENT_ATTR_RING_75_FULL_SH(iio_event_all, static struct attribute *sca3000_event_attributes[] = { &iio_event_attr_free_fall.dev_attr.attr, - &iio_event_attr_accel_x_high.dev_attr.attr, - &iio_event_attr_accel_y_high.dev_attr.attr, - &iio_event_attr_accel_z_high.dev_attr.attr, + &iio_event_attr_accel_x_mag_either_rising_en.dev_attr.attr, + &iio_event_attr_accel_y_mag_either_rising_en.dev_attr.attr, + &iio_event_attr_accel_z_mag_either_rising_en.dev_attr.attr, &iio_event_attr_ring_50_full.dev_attr.attr, &iio_event_attr_ring_75_full.dev_attr.attr, + &iio_dev_attr_accel_x_mag_either_rising_value.dev_attr.attr, + &iio_dev_attr_accel_y_mag_either_rising_value.dev_attr.attr, + &iio_dev_attr_accel_z_mag_either_rising_value.dev_attr.attr, NULL, }; @@ -1344,9 +1357,10 @@ static int __devinit __sca3000_probe(struct spi_device *spi, * is overkill. At very least a simpler registration method * might be worthwhile. */ - iio_add_event_to_list(iio_event_attr_accel_z_high.listel, - &st->indio_dev - ->interrupts[0]->ev_list); + iio_add_event_to_list( + iio_event_attr_accel_z_mag_either_rising_en.listel, + &st->indio_dev + ->interrupts[0]->ev_list); } sca3000_register_ring_funcs(st->indio_dev); ret = sca3000_clean_setup(st); @@ -1437,9 +1451,6 @@ static int sca3000_remove(struct spi_device *spi) SCA3000_VARIANT_PROBE(d01); static SCA3000_VARIANT_SPI_DRIVER(d01); -SCA3000_VARIANT_PROBE(d03); -static SCA3000_VARIANT_SPI_DRIVER(d03); - SCA3000_VARIANT_PROBE(e02); static SCA3000_VARIANT_SPI_DRIVER(e02); @@ -1449,9 +1460,6 @@ static SCA3000_VARIANT_SPI_DRIVER(e04); SCA3000_VARIANT_PROBE(e05); static SCA3000_VARIANT_SPI_DRIVER(e05); -SCA3000_VARIANT_PROBE(l01); -static SCA3000_VARIANT_SPI_DRIVER(l01); - static __init int sca3000_init(void) { int ret; @@ -1459,32 +1467,22 @@ static __init int sca3000_init(void) ret = spi_register_driver(&sca3000_d01_driver); if (ret) goto error_ret; - ret = spi_register_driver(&sca3000_d03_driver); - if (ret) - goto error_unreg_d01; ret = spi_register_driver(&sca3000_e02_driver); if (ret) - goto error_unreg_d03; + goto error_unreg_d01; ret = spi_register_driver(&sca3000_e04_driver); if (ret) goto error_unreg_e02; ret = spi_register_driver(&sca3000_e05_driver); if (ret) goto error_unreg_e04; - ret = spi_register_driver(&sca3000_l01_driver); - if (ret) - goto error_unreg_e05; return 0; -error_unreg_e05: - spi_unregister_driver(&sca3000_e05_driver); error_unreg_e04: spi_unregister_driver(&sca3000_e04_driver); error_unreg_e02: spi_unregister_driver(&sca3000_e02_driver); -error_unreg_d03: - spi_unregister_driver(&sca3000_d03_driver); error_unreg_d01: spi_unregister_driver(&sca3000_d01_driver); error_ret: @@ -1494,11 +1492,9 @@ error_ret: static __exit void sca3000_exit(void) { - spi_unregister_driver(&sca3000_l01_driver); spi_unregister_driver(&sca3000_e05_driver); spi_unregister_driver(&sca3000_e04_driver); spi_unregister_driver(&sca3000_e02_driver); - spi_unregister_driver(&sca3000_d03_driver); spi_unregister_driver(&sca3000_d01_driver); } diff --git a/drivers/staging/iio/accel/sca3000_ring.c b/drivers/staging/iio/accel/sca3000_ring.c index 40cbab2..2b39e6f 100644 --- a/drivers/staging/iio/accel/sca3000_ring.c +++ b/drivers/staging/iio/accel/sca3000_ring.c @@ -186,11 +186,29 @@ static ssize_t sca3000_store_ring_bpse(struct device *dev, return ret ? ret : len; } -static IIO_CONST_ATTR(bpse_available, "8 11"); +static IIO_SCAN_EL_C(accel_x, 0, 0, 0, 0); +static IIO_SCAN_EL_C(accel_y, 1, 0, 0, 0); +static IIO_SCAN_EL_C(accel_z, 2, 0, 0, 0); +static IIO_CONST_ATTR(accel_precision_available, "8 11"); +static IIO_DEVICE_ATTR(accel_precision, + S_IRUGO | S_IWUSR, + sca3000_show_ring_bpse, + sca3000_store_ring_bpse, + 0); + +static struct attribute *sca3000_scan_el_attrs[] = { + &iio_scan_el_accel_x.dev_attr.attr, + &iio_scan_el_accel_y.dev_attr.attr, + &iio_scan_el_accel_z.dev_attr.attr, + &iio_const_attr_accel_precision_available.dev_attr.attr, + &iio_dev_attr_accel_precision.dev_attr.attr, + NULL +}; -static IIO_DEV_ATTR_BPSE(S_IRUGO | S_IWUSR, - sca3000_show_ring_bpse, - sca3000_store_ring_bpse); +static struct attribute_group sca3000_scan_el_group = { + .attrs = sca3000_scan_el_attrs, + .name = "scan_elements", +}; /* * Ring buffer attributes @@ -198,17 +216,15 @@ static IIO_DEV_ATTR_BPSE(S_IRUGO | S_IWUSR, * only apply to the ring buffer. At all times full rate and accuracy * is available via direct reading from registers. */ -static struct attribute *iio_ring_attributes[] = { +static struct attribute *sca3000_ring_attributes[] = { &dev_attr_length.attr, &dev_attr_bps.attr, &dev_attr_ring_enable.attr, - &iio_dev_attr_bpse.dev_attr.attr, - &iio_const_attr_bpse_available.dev_attr.attr, NULL, }; static struct attribute_group sca3000_ring_attr = { - .attrs = iio_ring_attributes, + .attrs = sca3000_ring_attributes, }; static const struct attribute_group *sca3000_ring_attr_groups[] = { @@ -248,6 +264,7 @@ static inline void sca3000_rb_free(struct iio_ring_buffer *r) int sca3000_configure_ring(struct iio_dev *indio_dev) { + indio_dev->scan_el_attrs = &sca3000_scan_el_group; indio_dev->ring = sca3000_rb_allocate(indio_dev); if (indio_dev->ring == NULL) return -ENOMEM; diff --git a/drivers/staging/iio/ring_generic.h b/drivers/staging/iio/ring_generic.h index 75e0fc0..c482074 100644 --- a/drivers/staging/iio/ring_generic.h +++ b/drivers/staging/iio/ring_generic.h @@ -248,9 +248,9 @@ ssize_t iio_scan_el_ts_show(struct device *dev, struct device_attribute *attr, * * Odd one out. Handled slightly differently from other scan elements. **/ -#define IIO_SCAN_EL_TIMESTAMP \ +#define IIO_SCAN_EL_TIMESTAMP(number) \ struct iio_scan_el iio_scan_el_timestamp = { \ - .dev_attr = __ATTR(scan_en_timestamp, \ + .dev_attr = __ATTR(number##_timestamp_en, \ S_IRUGO | S_IWUSR, \ iio_scan_el_ts_show, \ iio_scan_el_ts_store), \ -- cgit v0.10.2 From e5c003ae82865c43feca9e11fb291ec2304a63d1 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:42:59 +0100 Subject: staging:iio: Support functions for scan mask matching Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/iio.h b/drivers/staging/iio/iio.h index 71dbfe1..a12072a 100644 --- a/drivers/staging/iio/iio.h +++ b/drivers/staging/iio/iio.h @@ -96,6 +96,7 @@ void iio_remove_event_from_list(struct iio_event_handler_list *el, * control method is used * @scan_count: [INTERN] the number of elements in the current scan mode * @scan_mask: [INTERN] bitmask used in masking scan mode elements + * @available_scan_masks: [DRIVER] optional array of allowed bitmasks * @scan_timestamp: [INTERN] does the scan mode include a timestamp * @trig: [INTERN] current device trigger (ring buffer modes) * @pollfunc: [DRIVER] function run on trigger being recieved @@ -122,7 +123,8 @@ struct iio_dev { struct attribute_group *scan_el_attrs; int scan_count; - u16 scan_mask; + u32 scan_mask; + u32 *available_scan_masks; bool scan_timestamp; struct iio_trigger *trig; struct iio_poll_func *pollfunc; @@ -132,22 +134,57 @@ struct iio_dev { * These are mainly provided to allow for a change of implementation if a device * has a large number of scan elements */ -#define IIO_MAX_SCAN_LENGTH 15 +#define IIO_MAX_SCAN_LENGTH 31 + +/* note 0 used as error indicator as it doesn't make sense. */ +static inline u32 iio_scan_mask_match(u32 *av_masks, u32 mask) +{ + while (*av_masks) { + if (!(~*av_masks & mask)) + return *av_masks; + av_masks++; + } + return 0; +} static inline int iio_scan_mask_query(struct iio_dev *dev_info, int bit) { + u32 mask; + if (bit > IIO_MAX_SCAN_LENGTH) return -EINVAL; + + if (!dev_info->scan_mask) + return 0; + + if (dev_info->available_scan_masks) + mask = iio_scan_mask_match(dev_info->available_scan_masks, + dev_info->scan_mask); else - return !!(dev_info->scan_mask & (1 << bit)); + mask = dev_info->scan_mask; + + if (!mask) + return -EINVAL; + + return !!(mask & (1 << bit)); }; static inline int iio_scan_mask_set(struct iio_dev *dev_info, int bit) { + u32 mask; + u32 trialmask = dev_info->scan_mask | (1 << bit); + if (bit > IIO_MAX_SCAN_LENGTH) return -EINVAL; - dev_info->scan_mask |= (1 << bit); + if (dev_info->available_scan_masks) { + mask = iio_scan_mask_match(dev_info->available_scan_masks, + trialmask); + if (!mask) + return -EINVAL; + } + dev_info->scan_mask = trialmask; dev_info->scan_count++; + return 0; }; -- cgit v0.10.2 From 5aaaeba82e00958ecb2c890b4953a249bbde9426 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:00 +0100 Subject: staging: iio: Move from class to bus Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/iio.h b/drivers/staging/iio/iio.h index a12072a..fcee47c 100644 --- a/drivers/staging/iio/iio.h +++ b/drivers/staging/iio/iio.h @@ -377,7 +377,7 @@ void iio_deallocate_chrdev(struct iio_handler *handler); #define IIO_UNSIGNED(a) (a) extern dev_t iio_devt; -extern struct class iio_class; +extern struct bus_type iio_bus_type; /** * iio_put_device() - reference counted deallocation of struct device diff --git a/drivers/staging/iio/industrialio-core.c b/drivers/staging/iio/industrialio-core.c index 7c9a12e..ad830b6 100644 --- a/drivers/staging/iio/industrialio-core.c +++ b/drivers/staging/iio/industrialio-core.c @@ -42,16 +42,10 @@ dev_t iio_devt; EXPORT_SYMBOL(iio_devt); #define IIO_DEV_MAX 256 -static char *iio_devnode(struct device *dev, mode_t *mode) -{ - return kasprintf(GFP_KERNEL, "iio/%s", dev_name(dev)); -} - -struct class iio_class = { +struct bus_type iio_bus_type = { .name = "iio", - .devnode = iio_devnode, }; -EXPORT_SYMBOL(iio_class); +EXPORT_SYMBOL(iio_bus_type); void __iio_change_event(struct iio_detected_event_list *ev, int ev_code, @@ -405,7 +399,7 @@ int iio_setup_ev_int(struct iio_event_interface *ev_int, { int ret, minor; - ev_int->dev.class = &iio_class; + ev_int->dev.bus = &iio_bus_type; ev_int->dev.parent = dev; ev_int->dev.type = &iio_event_type; device_initialize(&ev_int->dev); @@ -478,23 +472,23 @@ static int __init iio_init(void) { int ret; - /* Create sysfs class */ - ret = class_register(&iio_class); + /* Register sysfs bus */ + ret = bus_register(&iio_bus_type); if (ret < 0) { printk(KERN_ERR - "%s could not create sysfs class\n", + "%s could not register bus type\n", __FILE__); goto error_nothing; } ret = iio_dev_init(); if (ret < 0) - goto error_unregister_class; + goto error_unregister_bus_type; return 0; -error_unregister_class: - class_unregister(&iio_class); +error_unregister_bus_type: + bus_unregister(&iio_bus_type); error_nothing: return ret; } @@ -502,7 +496,7 @@ error_nothing: static void __exit iio_exit(void) { iio_dev_exit(); - class_unregister(&iio_class); + bus_unregister(&iio_bus_type); } static int iio_device_register_sysfs(struct iio_dev *dev_info) @@ -768,7 +762,7 @@ struct iio_dev *iio_allocate_device(void) if (dev) { dev->dev.type = &iio_dev_type; - dev->dev.class = &iio_class; + dev->dev.bus = &iio_bus_type; device_initialize(&dev->dev); dev_set_drvdata(&dev->dev, (void *)dev); mutex_init(&dev->mlock); diff --git a/drivers/staging/iio/industrialio-ring.c b/drivers/staging/iio/industrialio-ring.c index 5f48632..690df91 100644 --- a/drivers/staging/iio/industrialio-ring.c +++ b/drivers/staging/iio/industrialio-ring.c @@ -210,7 +210,7 @@ __iio_request_ring_buffer_access_chrdev(struct iio_ring_buffer *buf, buf->access_handler.flags = 0; buf->access_dev.parent = &buf->dev; - buf->access_dev.class = &iio_class; + buf->access_dev.bus = &iio_bus_type; buf->access_dev.type = &iio_ring_access_type; device_initialize(&buf->access_dev); diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c index 3c8f6ff..918b0fd 100644 --- a/drivers/staging/iio/industrialio-trigger.c +++ b/drivers/staging/iio/industrialio-trigger.c @@ -365,7 +365,7 @@ struct iio_trigger *iio_allocate_trigger(void) trig = kzalloc(sizeof *trig, GFP_KERNEL); if (trig) { trig->dev.type = &iio_trig_type; - trig->dev.class = &iio_class; + trig->dev.bus = &iio_bus_type; device_initialize(&trig->dev); dev_set_drvdata(&trig->dev, (void *)trig); spin_lock_init(&trig->pollfunc_list_lock); diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c index e9570e3..f8de45d 100644 --- a/drivers/staging/iio/ring_sw.c +++ b/drivers/staging/iio/ring_sw.c @@ -419,7 +419,7 @@ struct iio_ring_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev) buf->dev.type = &iio_sw_ring_type; device_initialize(&buf->dev); buf->dev.parent = &indio_dev->dev; - buf->dev.class = &iio_class; + buf->dev.bus = &iio_bus_type; dev_set_drvdata(&buf->dev, (void *)buf); return buf; -- cgit v0.10.2 From 5cba220b0a3211befd5514cbd822a97578ef5ed4 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:01 +0100 Subject: staging:iio: Move event attributes into the event[n] device in sysfs Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/industrialio-core.c b/drivers/staging/iio/industrialio-core.c index ad830b6..a4ce221 100644 --- a/drivers/staging/iio/industrialio-core.c +++ b/drivers/staging/iio/industrialio-core.c @@ -676,16 +676,14 @@ static int iio_device_register_eventset(struct iio_dev *dev_info) dev_info->event_interfaces[i].id); goto error_free_setup_ev_ints; } - } - for (i = 0; i < dev_info->num_interrupt_lines; i++) { - snprintf(dev_info->event_interfaces[i]._attrname, 20, - "event_line%d_sources", i); - dev_info->event_attrs[i].name - = (const char *) - (dev_info->event_interfaces[i]._attrname); - ret = sysfs_create_group(&dev_info->dev.kobj, - &dev_info->event_attrs[i]); + dev_set_drvdata(&dev_info->event_interfaces[i].dev, + (void *)dev_info); + ret = sysfs_create_group(&dev_info + ->event_interfaces[i] + .dev.kobj, + &dev_info->event_attrs[i]); + if (ret) { dev_err(&dev_info->dev, "Failed to register sysfs for event attrs"); @@ -707,13 +705,13 @@ error_unregister_config_attrs: i = dev_info->num_interrupt_lines - 1; error_remove_sysfs_interfaces: for (j = 0; j < i; j++) - sysfs_remove_group(&dev_info->dev.kobj, + sysfs_remove_group(&dev_info + ->event_interfaces[j].dev.kobj, &dev_info->event_attrs[j]); - i = dev_info->num_interrupt_lines - 1; error_free_setup_ev_ints: for (j = 0; j < i; j++) { iio_free_idr_val(&iio_event_idr, - dev_info->event_interfaces[i].id); + dev_info->event_interfaces[j].id); iio_free_ev_int(&dev_info->event_interfaces[j]); } kfree(dev_info->interrupts); @@ -731,7 +729,8 @@ static void iio_device_unregister_eventset(struct iio_dev *dev_info) if (dev_info->num_interrupt_lines == 0) return; for (i = 0; i < dev_info->num_interrupt_lines; i++) - sysfs_remove_group(&dev_info->dev.kobj, + sysfs_remove_group(&dev_info + ->event_interfaces[i].dev.kobj, &dev_info->event_attrs[i]); for (i = 0; i < dev_info->num_interrupt_lines; i++) { -- cgit v0.10.2 From 1722762cead933994883fa57464efd45cf892ed7 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:02 +0100 Subject: staging:iio: Clean out unused IIO_SCAN_EL and add IIO_SCAN_NAMED_EL_C Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/ring_generic.h b/drivers/staging/iio/ring_generic.h index c482074..d74b5ae 100644 --- a/drivers/staging/iio/ring_generic.h +++ b/drivers/staging/iio/ring_generic.h @@ -196,25 +196,6 @@ ssize_t iio_scan_el_store(struct device *dev, struct device_attribute *attr, **/ ssize_t iio_scan_el_show(struct device *dev, struct device_attribute *attr, char *buf); -/** - * IIO_SCAN_EL - declare and initialize a scan element without control func - * @_name: identifying name. Resulting struct is iio_scan_el_##_name, - * sysfs element, scan_en_##_name. - * @_number: unique id number for the scan element. - * @_bits: number of bits in the scan element result (used in mixed bit - * length devices). - * @_label: indentification variable used by drivers. Often a reg address. - **/ -#define IIO_SCAN_EL(_name, _number, _bits, _label) \ - struct iio_scan_el iio_scan_el_##_name = { \ - .dev_attr = __ATTR(scan_en_##_name, \ - S_IRUGO | S_IWUSR, \ - iio_scan_el_show, \ - iio_scan_el_store), \ - .mask = (1 << _number), \ - .bit_count = _bits, \ - .label = _label, \ - } ssize_t iio_scan_el_ts_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t len); @@ -225,7 +206,7 @@ ssize_t iio_scan_el_ts_show(struct device *dev, struct device_attribute *attr, * IIO_SCAN_EL_C - declare and initialize a scan element with a control func * * @_name: identifying name. Resulting struct is iio_scan_el_##_name, - * sysfs element, scan_en_##_name. + * sysfs element, _name##_en. * @_number: unique id number for the scan element. * @_bits: number of bits in the scan element result (used in mixed bit * length devices). @@ -234,7 +215,7 @@ ssize_t iio_scan_el_ts_show(struct device *dev, struct device_attribute *attr, **/ #define IIO_SCAN_EL_C(_name, _number, _bits, _label, _controlfunc) \ struct iio_scan_el iio_scan_el_##_name = { \ - .dev_attr = __ATTR(scan_en_##_name, \ + .dev_attr = __ATTR(_number##_##_name##_en, \ S_IRUGO | S_IWUSR, \ iio_scan_el_show, \ iio_scan_el_store), \ @@ -243,6 +224,19 @@ ssize_t iio_scan_el_ts_show(struct device *dev, struct device_attribute *attr, .label = _label, \ .set_state = _controlfunc, \ } + +#define IIO_SCAN_NAMED_EL_C(_name, _string, _number, _bits, _label, _cf) \ + struct iio_scan_el iio_scan_el_##_name = { \ + .dev_attr = __ATTR(_number##_##_string##_en, \ + S_IRUGO | S_IWUSR, \ + iio_scan_el_show, \ + iio_scan_el_store), \ + .number = _number, \ + .bit_count = _bits, \ + .label = _label, \ + .set_state = _cf, \ + } + /** * IIO_SCAN_EL_TIMESTAMP - declare a special scan element for timestamps * -- cgit v0.10.2 From 82020b0ef15de0cde1082ba0ff427c2f47a9a011 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:03 +0100 Subject: staging:iio:max1363 move to new abi. Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/adc/Kconfig b/drivers/staging/iio/adc/Kconfig index 3989c0c..101ea4b 100644 --- a/drivers/staging/iio/adc/Kconfig +++ b/drivers/staging/iio/adc/Kconfig @@ -7,6 +7,7 @@ config MAX1363 tristate "MAXIM max1363 ADC driver" depends on I2C select IIO_TRIGGER if IIO_RING_BUFFER + select MAX1363_RING_BUFFER help Say yes here to build support for many MAXIM i2c analog to digital convertors (ADC). (max1361, max1362, max1363, max1364, max1136, diff --git a/drivers/staging/iio/adc/Makefile b/drivers/staging/iio/adc/Makefile index 08cee5c2..18c9376 100644 --- a/drivers/staging/iio/adc/Makefile +++ b/drivers/staging/iio/adc/Makefile @@ -3,6 +3,6 @@ # max1363-y := max1363_core.o -max1363-$(CONFIG_MAX1363_RING_BUFFER) += max1363_ring.o +max1363-y += max1363_ring.o obj-$(CONFIG_MAX1363) += max1363.o diff --git a/drivers/staging/iio/adc/max1363.h b/drivers/staging/iio/adc/max1363.h index c112fbe..72cf367 100644 --- a/drivers/staging/iio/adc/max1363.h +++ b/drivers/staging/iio/adc/max1363.h @@ -72,77 +72,54 @@ * @numvals: The number of values returned by a single scan */ struct max1363_mode { - const char *name; int8_t conf; - int numvals; + long modemask; }; -#define MAX1363_MODE_SINGLE(_num) { \ - .name = #_num, \ - .conf = MAX1363_CHANNEL_SEL(_num) \ +#define MAX1363_MODE_SINGLE(_num, _mask) { \ + .conf = MAX1363_CHANNEL_SEL(_num) \ | MAX1363_CONFIG_SCAN_SINGLE_1 \ | MAX1363_CONFIG_SE, \ - .numvals = 1, \ + .modemask = _mask, \ } -#define MAX1363_MODE_SINGLE_TIMES_8(_num) { \ - .name = #_num"x8", \ - .conf = MAX1363_CHANNEL_SEL(_num) \ - | MAX1363_CONFIG_SCAN_SINGLE_8 \ - | MAX1363_CONFIG_SE, \ - .numvals = 8, \ - } - -#define MAX1363_MODE_SCAN_TO_CHANNEL(_num) { \ - .name = "0..."#_num, \ - .conf = MAX1363_CHANNEL_SEL(_num) \ +#define MAX1363_MODE_SCAN_TO_CHANNEL(_num, _mask) { \ + .conf = MAX1363_CHANNEL_SEL(_num) \ | MAX1363_CONFIG_SCAN_TO_CS \ | MAX1363_CONFIG_SE, \ - .numvals = _num + 1, \ + .modemask = _mask, \ } /* note not available for max1363 hence naming */ -#define MAX1236_MODE_SCAN_MID_TO_CHANNEL(_mid, _num) { \ - .name = #_mid"..."#_num, \ - .conf = MAX1363_CHANNEL_SEL(_num) \ +#define MAX1236_MODE_SCAN_MID_TO_CHANNEL(_mid, _num, _mask) { \ + .conf = MAX1363_CHANNEL_SEL(_num) \ | MAX1236_SCAN_MID_TO_CHANNEL \ | MAX1363_CONFIG_SE, \ - .numvals = _num - _mid + 1 \ + .modemask = _mask \ } -#define MAX1363_MODE_DIFF_SINGLE(_nump, _numm) { \ - .name = #_nump"-"#_numm, \ - .conf = MAX1363_CHANNEL_SEL(_nump) \ +#define MAX1363_MODE_DIFF_SINGLE(_nump, _numm, _mask) { \ + .conf = MAX1363_CHANNEL_SEL(_nump) \ | MAX1363_CONFIG_SCAN_SINGLE_1 \ | MAX1363_CONFIG_DE, \ - .numvals = 1, \ - } - -#define MAX1363_MODE_DIFF_SINGLE_TIMES_8(_nump, _numm) { \ - .name = #_nump"-"#_numm, \ - .conf = MAX1363_CHANNEL_SEL(_nump) \ - | MAX1363_CONFIG_SCAN_SINGLE_8 \ - | MAX1363_CONFIG_DE, \ - .numvals = 1, \ + .modemask = _mask \ } /* Can't think how to automate naming so specify for now */ -#define MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(_name, _num, _numvals) { \ - .name = #_name, \ - .conf = MAX1363_CHANNEL_SEL(_num) \ +#define MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(_num, _numvals, _mask) { \ + .conf = MAX1363_CHANNEL_SEL(_num) \ | MAX1363_CONFIG_SCAN_TO_CS \ | MAX1363_CONFIG_DE, \ - .numvals = _numvals, \ + .modemask = _mask \ } /* note only available for max1363 hence naming */ -#define MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL_NAMED(_name, _num, _numvals) { \ - .name = #_name, \ - .conf = MAX1363_CHANNEL_SEL(_num) \ +#define MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(_num, _numvals, _mask) { \ + .conf = MAX1363_CHANNEL_SEL(_num) \ | MAX1236_SCAN_MID_TO_CHANNEL \ | MAX1363_CONFIG_SE, \ - .numvals = _numvals, \ + .modemask = _mask \ } /* Not currently handled */ @@ -158,35 +135,43 @@ struct max1363_mode { * clear what all the various options actually do. Alternative suggestions * that don't require user to have intimate knowledge of the chip welcomed. */ +enum max1363_channels { + max1363_in0, max1363_in1, max1363_in2, max1363_in3, + max1363_in4, max1363_in5, max1363_in6, max1363_in7, + max1363_in8, max1363_in9, max1363_in10, max1363_in11, + + max1363_in0min1, max1363_in2min3, + max1363_in4min5, max1363_in6min7, + max1363_in8min9, max1363_in10min11, + + max1363_in1min0, max1363_in3min2, + max1363_in5min4, max1363_in7min6, + max1363_in9min8, max1363_in11min10, + }; /* This must be maintained along side the max1363_mode_table in max1363_core */ enum max1363_modes { /* Single read of a single channel */ _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11, - /* Eight reads of a single channel */ - se0, se1, se2, se3, se4, se5, se6, se7, se8, se9, se10, se11, - /* Scan to channel */ - s0to1, s0to2, s0to3, s0to4, s0to5, s0to6, - s0to7, s0to8, s0to9, s0to10, s0to11, /* Differential single read */ d0m1, d2m3, d4m5, d6m7, d8m9, d10m11, d1m0, d3m2, d5m4, d7m6, d9m8, d11m10, - /* Differential single read 8 times */ - de0m1, de2m3, de4m5, de6m7, de8m9, de10m11, - de1m0, de3m2, de5m4, de7m6, de9m8, de11m10, - /* Differential scan to channel */ - d0m1to2m3, d0m1to4m5, d0m1to6m7, d0m1to8m9, d0m1to10m11, - d1m0to3m2, d1m0to5m4, d1m0to7m6, d1m0to9m8, d1m0to11m10, - /* Scan mid to channel max123{6-9} only */ - s2to3, s6to7, s6to8, s6to9, s6to10, s6to11, - /* Differential scan mid to channel */ - s6m7to8m9, s6m7to10m11, s7m6to9m8, s7m6to11m10, + /* Scan to channel and mid to channel where overlapping */ + s0to1, s0to2, s2to3, s0to3, s0to4, s0to5, s0to6, + s6to7, s0to7, s6to8, s0to8, s6to9, + s0to9, s6to10, s0to10, s6to11, s0to11, + /* Differential scan to channel and mid to channel where overlapping */ + d0m1to2m3, d0m1to4m5, d0m1to6m7, d6m7to8m9, + d0m1to8m9, d6m7to10m11, d0m1to10m11, d1m0to3m2, + d1m0to5m4, d1m0to7m6, d7m6to9m8, d1m0to9m8, + d7m6to11m10, d1m0to11m10, }; /** * struct max1363_chip_info - chip specifc information * @name: indentification string for chip * @num_inputs: number of physical inputs on chip + * @bits: accuracy of the adc in bits * @int_vref_mv: the internal reference voltage * @monitor_mode: whether the chip supports monitor interrupts * @mode_list: array of available scan modes @@ -196,11 +181,14 @@ enum max1363_modes { struct max1363_chip_info { const char *name; u8 num_inputs; + u8 bits; u16 int_vref_mv; bool monitor_mode; const enum max1363_modes *mode_list; int num_modes; enum max1363_modes default_mode; + struct attribute_group *dev_attrs; + struct attribute_group *scan_attrs; }; @@ -212,6 +200,7 @@ struct max1363_chip_info { * @configbyte: cache of current device config byte * @chip_info: chip model specific constants, available modes etc * @current_mode: the scan mode of this chip + * @requestedmask: a valid requested set of channels * @poll_work: bottom half of polling interrupt handler * @protect_ring: used to ensure only one polling bh running at a time * @reg: supply regulator @@ -223,16 +212,21 @@ struct max1363_state { char configbyte; const struct max1363_chip_info *chip_info; const struct max1363_mode *current_mode; + u32 requestedmask; struct work_struct poll_work; atomic_t protect_ring; struct iio_trigger *trig; struct regulator *reg; }; + +const struct max1363_mode +*max1363_match_mode(u32 mask, const struct max1363_chip_info *ci); + +int max1363_set_scan_mode(struct max1363_state *st); + #ifdef CONFIG_MAX1363_RING_BUFFER -ssize_t max1363_scan_from_ring(struct device *dev, - struct device_attribute *attr, - char *buf); +int max1363_single_channel_from_ring(long mask, struct max1363_state *st); int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev); void max1363_ring_cleanup(struct iio_dev *indio_dev); @@ -250,14 +244,12 @@ static inline int max1363_initialize_ring(struct iio_ring_buffer *ring) return 0; }; - -static inline ssize_t max1363_scan_from_ring(struct device *dev, - struct device_attribute *attr, - char *buf) +int max1363_single_channel_from_ring(long mask, struct max1363_state *st) { - return 0; + return -EINVAL; }; + static inline int max1363_register_ring_funcs_and_init(struct iio_dev *indio_dev) { diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c index 790d1cc..e82f3e7 100644 --- a/drivers/staging/iio/adc/max1363_core.c +++ b/drivers/staging/iio/adc/max1363_core.c @@ -1,27 +1,26 @@ /* - * linux/drivers/industrialio/adc/max1363.c - * Copyright (C) 2008 Jonathan Cameron - * - * based on linux/drivers/i2c/chips/max123x - * Copyright (C) 2002-2004 Stefan Eletzhofer - * - * based on linux/drivers/acron/char/pcf8583.c - * Copyright (C) 2000 Russell King - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * max1363.c - * - * Partial support for max1363 and similar chips. - * - * Not currently implemented. - * - * - Monitor interrrupt generation. - * - Control of internal reference. - * - Sysfs scan interface currently assumes unipolar mode. - */ + * iio/adc/max1363.c + * Copyright (C) 2008-2010 Jonathan Cameron + * + * based on linux/drivers/i2c/chips/max123x + * Copyright (C) 2002-2004 Stefan Eletzhofer + * + * based on linux/drivers/acron/char/pcf8583.c + * Copyright (C) 2000 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * max1363.c + * + * Partial support for max1363 and similar chips. + * + * Not currently implemented. + * + * - Monitor interrrupt generation. + * - Control of internal reference. + */ #include #include @@ -38,118 +37,318 @@ #include "../iio.h" #include "../sysfs.h" +#include "../ring_generic.h" +#include "adc.h" #include "max1363.h" -/* Available scan modes. - * Awkwardly the associated enum is in the header so it is available to - * the ring buffer code. - */ -static const struct max1363_mode max1363_mode_table[] = { - MAX1363_MODE_SINGLE(0), - MAX1363_MODE_SINGLE(1), - MAX1363_MODE_SINGLE(2), - MAX1363_MODE_SINGLE(3), - MAX1363_MODE_SINGLE(4), - MAX1363_MODE_SINGLE(5), - MAX1363_MODE_SINGLE(6), - MAX1363_MODE_SINGLE(7), - MAX1363_MODE_SINGLE(8), - MAX1363_MODE_SINGLE(9), - MAX1363_MODE_SINGLE(10), - MAX1363_MODE_SINGLE(11), - - MAX1363_MODE_SINGLE_TIMES_8(0), - MAX1363_MODE_SINGLE_TIMES_8(1), - MAX1363_MODE_SINGLE_TIMES_8(2), - MAX1363_MODE_SINGLE_TIMES_8(3), - MAX1363_MODE_SINGLE_TIMES_8(4), - MAX1363_MODE_SINGLE_TIMES_8(5), - MAX1363_MODE_SINGLE_TIMES_8(6), - MAX1363_MODE_SINGLE_TIMES_8(7), - MAX1363_MODE_SINGLE_TIMES_8(8), - MAX1363_MODE_SINGLE_TIMES_8(9), - MAX1363_MODE_SINGLE_TIMES_8(10), - MAX1363_MODE_SINGLE_TIMES_8(11), - - MAX1363_MODE_SCAN_TO_CHANNEL(1), - MAX1363_MODE_SCAN_TO_CHANNEL(2), - MAX1363_MODE_SCAN_TO_CHANNEL(3), - MAX1363_MODE_SCAN_TO_CHANNEL(4), - MAX1363_MODE_SCAN_TO_CHANNEL(5), - MAX1363_MODE_SCAN_TO_CHANNEL(6), - MAX1363_MODE_SCAN_TO_CHANNEL(7), - MAX1363_MODE_SCAN_TO_CHANNEL(8), - MAX1363_MODE_SCAN_TO_CHANNEL(9), - MAX1363_MODE_SCAN_TO_CHANNEL(10), - MAX1363_MODE_SCAN_TO_CHANNEL(11), - - MAX1363_MODE_DIFF_SINGLE(0, 1), - MAX1363_MODE_DIFF_SINGLE(2, 3), - MAX1363_MODE_DIFF_SINGLE(4, 5), - MAX1363_MODE_DIFF_SINGLE(6, 7), - MAX1363_MODE_DIFF_SINGLE(8, 9), - MAX1363_MODE_DIFF_SINGLE(10, 11), - MAX1363_MODE_DIFF_SINGLE(1, 0), - MAX1363_MODE_DIFF_SINGLE(3, 2), - MAX1363_MODE_DIFF_SINGLE(5, 4), - MAX1363_MODE_DIFF_SINGLE(7, 6), - MAX1363_MODE_DIFF_SINGLE(9, 8), - MAX1363_MODE_DIFF_SINGLE(11, 10), - - MAX1363_MODE_DIFF_SINGLE_TIMES_8(0, 1), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(2, 3), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(4, 5), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(6, 7), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(8, 9), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(10, 11), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(1, 0), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(3, 2), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(5, 4), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(7, 6), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(9, 8), - MAX1363_MODE_DIFF_SINGLE_TIMES_8(11, 10), - - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...2-3, 2, 2), - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...4-5, 4, 3), - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...6-7, 6, 4), - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...8-9, 8, 5), - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(0-1...10-11, 10, 6), - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...3-2, 3, 2), - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...5-4, 5, 3), - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...7-6, 7, 4), - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...9-8, 9, 5), - MAX1363_MODE_DIFF_SCAN_TO_CHANNEL_NAMED(1-0...11-10, 11, 6), - - MAX1236_MODE_SCAN_MID_TO_CHANNEL(2, 3), - MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 7), - MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 8), - MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 9), - MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 10), - MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 11), - - MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL_NAMED(6-7...8-9, 8, 2), - MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL_NAMED(6-7...10-11, 10, 3), - MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL_NAMED(7-6...9-8, 9, 2), - MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL_NAMED(7-6...11-10, 11, 3), +/* Here we claim all are 16 bits. This currently does no harm and saves + * us a lot of scan element listings */ + +#define MAX1363_SCAN_EL(number) \ + IIO_SCAN_EL_C(in##number, number, IIO_UNSIGNED(16), 0, NULL); +#define MAX1363_SCAN_EL_D(p, n, number) \ + IIO_SCAN_NAMED_EL_C(in##p##m##in##n, in##p-in##n, \ + number, IIO_SIGNED(16), 0 , NULL); + +static MAX1363_SCAN_EL(0); +static MAX1363_SCAN_EL(1); +static MAX1363_SCAN_EL(2); +static MAX1363_SCAN_EL(3); +static MAX1363_SCAN_EL(4); +static MAX1363_SCAN_EL(5); +static MAX1363_SCAN_EL(6); +static MAX1363_SCAN_EL(7); +static MAX1363_SCAN_EL(8); +static MAX1363_SCAN_EL(9); +static MAX1363_SCAN_EL(10); +static MAX1363_SCAN_EL(11); +static MAX1363_SCAN_EL_D(0, 1, 12); +static MAX1363_SCAN_EL_D(2, 3, 13); +static MAX1363_SCAN_EL_D(4, 5, 14); +static MAX1363_SCAN_EL_D(6, 7, 15); +static MAX1363_SCAN_EL_D(8, 9, 16); +static MAX1363_SCAN_EL_D(10, 11, 17); +static MAX1363_SCAN_EL_D(1, 0, 18); +static MAX1363_SCAN_EL_D(3, 2, 19); +static MAX1363_SCAN_EL_D(5, 4, 20); +static MAX1363_SCAN_EL_D(7, 6, 21); +static MAX1363_SCAN_EL_D(9, 8, 22); +static MAX1363_SCAN_EL_D(11, 10, 23); + +static const struct max1363_mode max1363_mode_table[] = { + /* All of the single channel options first */ + MAX1363_MODE_SINGLE(0, 1 << 0), + MAX1363_MODE_SINGLE(1, 1 << 1), + MAX1363_MODE_SINGLE(2, 1 << 2), + MAX1363_MODE_SINGLE(3, 1 << 3), + MAX1363_MODE_SINGLE(4, 1 << 4), + MAX1363_MODE_SINGLE(5, 1 << 5), + MAX1363_MODE_SINGLE(6, 1 << 6), + MAX1363_MODE_SINGLE(7, 1 << 7), + MAX1363_MODE_SINGLE(8, 1 << 8), + MAX1363_MODE_SINGLE(9, 1 << 9), + MAX1363_MODE_SINGLE(10, 1 << 10), + MAX1363_MODE_SINGLE(11, 1 << 11), + + MAX1363_MODE_DIFF_SINGLE(0, 1, 1 << 12), + MAX1363_MODE_DIFF_SINGLE(2, 3, 1 << 13), + MAX1363_MODE_DIFF_SINGLE(4, 5, 1 << 14), + MAX1363_MODE_DIFF_SINGLE(6, 7, 1 << 15), + MAX1363_MODE_DIFF_SINGLE(8, 9, 1 << 16), + MAX1363_MODE_DIFF_SINGLE(10, 11, 1 << 17), + MAX1363_MODE_DIFF_SINGLE(1, 0, 1 << 18), + MAX1363_MODE_DIFF_SINGLE(3, 2, 1 << 19), + MAX1363_MODE_DIFF_SINGLE(5, 4, 1 << 20), + MAX1363_MODE_DIFF_SINGLE(7, 6, 1 << 21), + MAX1363_MODE_DIFF_SINGLE(9, 8, 1 << 22), + MAX1363_MODE_DIFF_SINGLE(11, 10, 1 << 23), + + /* The multichannel scans next */ + MAX1363_MODE_SCAN_TO_CHANNEL(1, 0x003), + MAX1363_MODE_SCAN_TO_CHANNEL(2, 0x007), + MAX1236_MODE_SCAN_MID_TO_CHANNEL(2, 3, 0x00C), + MAX1363_MODE_SCAN_TO_CHANNEL(3, 0x00F), + MAX1363_MODE_SCAN_TO_CHANNEL(4, 0x01F), + MAX1363_MODE_SCAN_TO_CHANNEL(5, 0x03F), + MAX1363_MODE_SCAN_TO_CHANNEL(6, 0x07F), + MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 7, 0x0C0), + MAX1363_MODE_SCAN_TO_CHANNEL(7, 0x0FF), + MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 8, 0x1C0), + MAX1363_MODE_SCAN_TO_CHANNEL(8, 0x1FF), + MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 9, 0x3C0), + MAX1363_MODE_SCAN_TO_CHANNEL(9, 0x3FF), + MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 10, 0x7C0), + MAX1363_MODE_SCAN_TO_CHANNEL(10, 0x7FF), + MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 11, 0xFC0), + MAX1363_MODE_SCAN_TO_CHANNEL(11, 0xFFF), + + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(2, 2, 0x003000), + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(4, 3, 0x007000), + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(6, 4, 0x00F000), + MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(8, 2, 0x018000), + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(8, 5, 0x01F000), + MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(10, 3, 0x038000), + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(10, 6, 0x3F000), + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(3, 2, 0x0C0000), + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(5, 3, 0x1C0000), + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(7, 4, 0x3C0000), + MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(9, 2, 0x600000), + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(9, 5, 0x7C0000), + MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(11, 3, 0xE00000), + MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(11, 6, 0xFC0000), }; +const struct max1363_mode +*max1363_match_mode(u32 mask, const struct max1363_chip_info *ci) { + int i; + if (mask) + for (i = 0; i < ci->num_modes; i++) + if (!((~max1363_mode_table[ci->mode_list[i]] + .modemask) & + mask)) + return &max1363_mode_table[ci + ->mode_list[i]]; + return 0; +}; + +static ssize_t max1363_show_precision(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *dev_info = dev_get_drvdata(dev); + struct max1363_state *st = iio_dev_get_devdata(dev_info); + return sprintf(buf, "%d\n", st->chip_info->bits); +} + +static IIO_DEVICE_ATTR(in_precision, S_IRUGO, max1363_show_precision, + NULL, 0); + +static int max1363_write_basic_config(struct i2c_client *client, + unsigned char d1, + unsigned char d2) +{ + int ret; + u8 *tx_buf = kmalloc(2 , GFP_KERNEL); + + if (!tx_buf) + return -ENOMEM; + tx_buf[0] = d1; + tx_buf[1] = d2; + + ret = i2c_master_send(client, tx_buf, 2); + kfree(tx_buf); + + return (ret > 0) ? 0 : ret; +} + +int max1363_set_scan_mode(struct max1363_state *st) +{ + st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK + | MAX1363_SCAN_MASK + | MAX1363_SE_DE_MASK); + st->configbyte |= st->current_mode->conf; + + return max1363_write_basic_config(st->client, + st->setupbyte, + st->configbyte); +} + +static ssize_t max1363_read_single_channel(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *dev_info = dev_get_drvdata(dev); + struct max1363_state *st = iio_dev_get_devdata(dev_info); + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + struct i2c_client *client = st->client; + int ret = 0, len = 0; + s32 data ; + char rxbuf[2]; + long mask; + + mutex_lock(&dev_info->mlock); + /* If ring buffer capture is occuring, query the buffer */ + if (iio_ring_enabled(dev_info)) { + mask = max1363_mode_table[this_attr->address].modemask; + data = max1363_single_channel_from_ring(mask, st); + if (data < 0) { + ret = data; + goto error_ret; + } + } else { + /* Check to see if current scan mode is correct */ + if (st->current_mode != + &max1363_mode_table[this_attr->address]) { + /* Update scan mode if needed */ + st->current_mode + = &max1363_mode_table[this_attr->address]; + ret = max1363_set_scan_mode(st); + if (ret) + goto error_ret; + } + /* Get reading */ + data = i2c_master_recv(client, rxbuf, 2); + if (data < 0) { + ret = data; + goto error_ret; + } + data = (s32)(rxbuf[1]) | ((s32)(rxbuf[0] & 0x0F)) << 8; + } + /* Pretty print the result */ + len = sprintf(buf, "%u\n", data); + +error_ret: + mutex_unlock(&dev_info->mlock); + return ret ? ret : len; +} + +/* Direct read attribtues */ +static IIO_DEV_ATTR_IN_RAW(0, max1363_read_single_channel, _s0); +static IIO_DEV_ATTR_IN_RAW(1, max1363_read_single_channel, _s1); +static IIO_DEV_ATTR_IN_RAW(2, max1363_read_single_channel, _s2); +static IIO_DEV_ATTR_IN_RAW(3, max1363_read_single_channel, _s3); +static IIO_DEV_ATTR_IN_RAW(4, max1363_read_single_channel, _s4); +static IIO_DEV_ATTR_IN_RAW(5, max1363_read_single_channel, _s5); +static IIO_DEV_ATTR_IN_RAW(6, max1363_read_single_channel, _s6); +static IIO_DEV_ATTR_IN_RAW(7, max1363_read_single_channel, _s7); +static IIO_DEV_ATTR_IN_RAW(8, max1363_read_single_channel, _s8); +static IIO_DEV_ATTR_IN_RAW(9, max1363_read_single_channel, _s9); +static IIO_DEV_ATTR_IN_RAW(10, max1363_read_single_channel, _s10); +static IIO_DEV_ATTR_IN_RAW(11, max1363_read_single_channel, _s11); + +static IIO_DEV_ATTR_IN_DIFF_RAW(0, 1, max1363_read_single_channel, d0m1); +static IIO_DEV_ATTR_IN_DIFF_RAW(2, 3, max1363_read_single_channel, d2m3); +static IIO_DEV_ATTR_IN_DIFF_RAW(4, 5, max1363_read_single_channel, d4m5); +static IIO_DEV_ATTR_IN_DIFF_RAW(6, 7, max1363_read_single_channel, d6m7); +static IIO_DEV_ATTR_IN_DIFF_RAW(8, 9, max1363_read_single_channel, d8m9); +static IIO_DEV_ATTR_IN_DIFF_RAW(10, 11, max1363_read_single_channel, d10m11); +static IIO_DEV_ATTR_IN_DIFF_RAW(1, 0, max1363_read_single_channel, d1m0); +static IIO_DEV_ATTR_IN_DIFF_RAW(3, 2, max1363_read_single_channel, d3m2); +static IIO_DEV_ATTR_IN_DIFF_RAW(5, 4, max1363_read_single_channel, d5m4); +static IIO_DEV_ATTR_IN_DIFF_RAW(7, 6, max1363_read_single_channel, d7m6); +static IIO_DEV_ATTR_IN_DIFF_RAW(9, 8, max1363_read_single_channel, d9m8); +static IIO_DEV_ATTR_IN_DIFF_RAW(11, 10, max1363_read_single_channel, d11m10); + + +static ssize_t max1363_show_scale(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + /* Driver currently only support internal vref */ + struct iio_dev *dev_info = dev_get_drvdata(dev); + struct max1363_state *st = iio_dev_get_devdata(dev_info); + /* Corresponds to Vref / 2^(bits) */ + + if ((1 << (st->chip_info->bits + 1)) + > st->chip_info->int_vref_mv) + return sprintf(buf, "0.5\n"); + else + return sprintf(buf, "%d\n", + st->chip_info->int_vref_mv >> st->chip_info->bits); +} + +IIO_DEVICE_ATTR(in_scale, S_IRUGO, max1363_show_scale, NULL, 0); + +static ssize_t max1363_show_name(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *dev_info = dev_get_drvdata(dev); + struct max1363_state *st = iio_dev_get_devdata(dev_info); + return sprintf(buf, "%s\n", st->chip_info->name); +} + +IIO_DEVICE_ATTR(name, S_IRUGO, max1363_show_name, NULL, 0); + /* Applies to max1363 */ static const enum max1363_modes max1363_mode_list[] = { _s0, _s1, _s2, _s3, - se0, se1, se2, se3, s0to1, s0to2, s0to3, d0m1, d2m3, d1m0, d3m2, - de0m1, de2m3, de1m0, de3m2, d0m1to2m3, d1m0to3m2, }; +static struct attribute *max1363_device_attrs[] = { + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_dev_attr_in1_raw.dev_attr.attr, + &iio_dev_attr_in2_raw.dev_attr.attr, + &iio_dev_attr_in3_raw.dev_attr.attr, + &iio_dev_attr_in0min1_raw.dev_attr.attr, + &iio_dev_attr_in2min3_raw.dev_attr.attr, + &iio_dev_attr_in1min0_raw.dev_attr.attr, + &iio_dev_attr_in3min2_raw.dev_attr.attr, + &iio_dev_attr_name.dev_attr.attr, + &iio_dev_attr_in_scale.dev_attr.attr, + NULL +}; + +static struct attribute_group max1363_dev_attr_group = { + .attrs = max1363_device_attrs, +}; + +static struct attribute *max1363_scan_el_attrs[] = { + &iio_scan_el_in0.dev_attr.attr, + &iio_scan_el_in1.dev_attr.attr, + &iio_scan_el_in2.dev_attr.attr, + &iio_scan_el_in3.dev_attr.attr, + &iio_scan_el_in0min1.dev_attr.attr, + &iio_scan_el_in2min3.dev_attr.attr, + &iio_scan_el_in1min0.dev_attr.attr, + &iio_scan_el_in3min2.dev_attr.attr, + &iio_dev_attr_in_precision.dev_attr.attr, + NULL, +}; + +static struct attribute_group max1363_scan_el_group = { + .name = "scan_elements", + .attrs = max1363_scan_el_attrs, +}; + /* Appies to max1236, max1237 */ static const enum max1363_modes max1236_mode_list[] = { _s0, _s1, _s2, _s3, - se0, se1, se2, se3, s0to1, s0to2, s0to3, d0m1, d2m3, d1m0, d3m2, - de0m1, de2m3, de1m0, de3m2, d0m1to2m3, d1m0to3m2, s2to3, }; @@ -157,19 +356,83 @@ static const enum max1363_modes max1236_mode_list[] = { /* Applies to max1238, max1239 */ static const enum max1363_modes max1238_mode_list[] = { _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11, - se0, se1, se2, se3, se4, se5, se6, se7, se8, se9, se10, se11, s0to1, s0to2, s0to3, s0to4, s0to5, s0to6, s0to7, s0to8, s0to9, s0to10, s0to11, d0m1, d2m3, d4m5, d6m7, d8m9, d10m11, d1m0, d3m2, d5m4, d7m6, d9m8, d11m10, - de0m1, de2m3, de4m5, de6m7, de8m9, de10m11, - de1m0, de3m2, de5m4, de7m6, de9m8, de11m10, d0m1to2m3, d0m1to4m5, d0m1to6m7, d0m1to8m9, d0m1to10m11, d1m0to3m2, d1m0to5m4, d1m0to7m6, d1m0to9m8, d1m0to11m10, s6to7, s6to8, s6to9, s6to10, s6to11, - s6m7to8m9, s6m7to10m11, s7m6to9m8, s7m6to11m10, + d6m7to8m9, d6m7to10m11, d7m6to9m8, d7m6to11m10, }; +static struct attribute *max1238_device_attrs[] = { + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_dev_attr_in1_raw.dev_attr.attr, + &iio_dev_attr_in2_raw.dev_attr.attr, + &iio_dev_attr_in3_raw.dev_attr.attr, + &iio_dev_attr_in4_raw.dev_attr.attr, + &iio_dev_attr_in5_raw.dev_attr.attr, + &iio_dev_attr_in6_raw.dev_attr.attr, + &iio_dev_attr_in7_raw.dev_attr.attr, + &iio_dev_attr_in8_raw.dev_attr.attr, + &iio_dev_attr_in9_raw.dev_attr.attr, + &iio_dev_attr_in10_raw.dev_attr.attr, + &iio_dev_attr_in11_raw.dev_attr.attr, + &iio_dev_attr_in0min1_raw.dev_attr.attr, + &iio_dev_attr_in2min3_raw.dev_attr.attr, + &iio_dev_attr_in4min5_raw.dev_attr.attr, + &iio_dev_attr_in6min7_raw.dev_attr.attr, + &iio_dev_attr_in8min9_raw.dev_attr.attr, + &iio_dev_attr_in10min11_raw.dev_attr.attr, + &iio_dev_attr_in1min0_raw.dev_attr.attr, + &iio_dev_attr_in3min2_raw.dev_attr.attr, + &iio_dev_attr_in5min4_raw.dev_attr.attr, + &iio_dev_attr_in7min6_raw.dev_attr.attr, + &iio_dev_attr_in9min8_raw.dev_attr.attr, + &iio_dev_attr_in11min10_raw.dev_attr.attr, + &iio_dev_attr_name.dev_attr.attr, + &iio_dev_attr_in_scale.dev_attr.attr, + NULL +}; + +static struct attribute_group max1238_dev_attr_group = { + .attrs = max1238_device_attrs, +}; + +static struct attribute *max1238_scan_el_attrs[] = { + &iio_scan_el_in0.dev_attr.attr, + &iio_scan_el_in1.dev_attr.attr, + &iio_scan_el_in2.dev_attr.attr, + &iio_scan_el_in3.dev_attr.attr, + &iio_scan_el_in4.dev_attr.attr, + &iio_scan_el_in5.dev_attr.attr, + &iio_scan_el_in6.dev_attr.attr, + &iio_scan_el_in7.dev_attr.attr, + &iio_scan_el_in8.dev_attr.attr, + &iio_scan_el_in9.dev_attr.attr, + &iio_scan_el_in10.dev_attr.attr, + &iio_scan_el_in11.dev_attr.attr, + &iio_scan_el_in0min1.dev_attr.attr, + &iio_scan_el_in2min3.dev_attr.attr, + &iio_scan_el_in4min5.dev_attr.attr, + &iio_scan_el_in6min7.dev_attr.attr, + &iio_scan_el_in8min9.dev_attr.attr, + &iio_scan_el_in10min11.dev_attr.attr, + &iio_scan_el_in1min0.dev_attr.attr, + &iio_scan_el_in3min2.dev_attr.attr, + &iio_scan_el_in5min4.dev_attr.attr, + &iio_scan_el_in7min6.dev_attr.attr, + &iio_scan_el_in9min8.dev_attr.attr, + &iio_scan_el_in11min10.dev_attr.attr, + &iio_dev_attr_in_precision.dev_attr.attr, + NULL, +}; + +static struct attribute_group max1238_scan_el_group = { + .name = "scan_elements", + .attrs = max1238_scan_el_attrs, +}; enum { max1361, max1362, @@ -190,118 +453,130 @@ static const struct max1363_chip_info max1363_chip_info_tbl[] = { { .name = "max1361", .num_inputs = 4, + .bits = 10, + .int_vref_mv = 2048, .monitor_mode = 1, .mode_list = max1363_mode_list, .num_modes = ARRAY_SIZE(max1363_mode_list), .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, }, { .name = "max1362", .num_inputs = 4, + .bits = 10, + .int_vref_mv = 4096, .monitor_mode = 1, .mode_list = max1363_mode_list, .num_modes = ARRAY_SIZE(max1363_mode_list), .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, }, { .name = "max1363", .num_inputs = 4, + .bits = 12, + .int_vref_mv = 2048, .monitor_mode = 1, .mode_list = max1363_mode_list, .num_modes = ARRAY_SIZE(max1363_mode_list), .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, }, { .name = "max1364", .num_inputs = 4, + .bits = 12, + .int_vref_mv = 4096, .monitor_mode = 1, .mode_list = max1363_mode_list, .num_modes = ARRAY_SIZE(max1363_mode_list), .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, }, { .name = "max1136", .num_inputs = 4, + .bits = 10, .int_vref_mv = 4096, .mode_list = max1236_mode_list, .num_modes = ARRAY_SIZE(max1236_mode_list), .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, }, { .name = "max1137", .num_inputs = 4, + .bits = 10, .int_vref_mv = 2048, .mode_list = max1236_mode_list, .num_modes = ARRAY_SIZE(max1236_mode_list), .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, }, { .name = "max1138", .num_inputs = 12, + .bits = 10, .int_vref_mv = 4096, .mode_list = max1238_mode_list, .num_modes = ARRAY_SIZE(max1238_mode_list), .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, }, { .name = "max1139", .num_inputs = 12, + .bits = 10, .int_vref_mv = 2048, .mode_list = max1238_mode_list, .num_modes = ARRAY_SIZE(max1238_mode_list), .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, }, { .name = "max1236", .num_inputs = 4, + .bits = 12, .int_vref_mv = 4096, .mode_list = max1236_mode_list, .num_modes = ARRAY_SIZE(max1236_mode_list), .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, }, { .name = "max1237", .num_inputs = 4, + .bits = 12, .int_vref_mv = 2048, .mode_list = max1236_mode_list, .num_modes = ARRAY_SIZE(max1236_mode_list), .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, }, { .name = "max1238", .num_inputs = 12, + .bits = 12, .int_vref_mv = 4096, .mode_list = max1238_mode_list, .num_modes = ARRAY_SIZE(max1238_mode_list), .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, }, { .name = "max1239", .num_inputs = 12, + .bits = 12, .int_vref_mv = 2048, .mode_list = max1238_mode_list, .num_modes = ARRAY_SIZE(max1238_mode_list), .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, }, }; -static int max1363_write_basic_config(struct i2c_client *client, - unsigned char d1, - unsigned char d2) -{ - int ret; - u8 *tx_buf = kmalloc(2 , GFP_KERNEL); - if (!tx_buf) - return -ENOMEM; - tx_buf[0] = d1; - tx_buf[1] = d2; - - ret = i2c_master_send(client, tx_buf, 2); - kfree(tx_buf); - return (ret > 0) ? 0 : ret; -} - -static int max1363_set_scan_mode(struct max1363_state *st) -{ - st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK - | MAX1363_SCAN_MASK - | MAX1363_SE_DE_MASK); - st->configbyte |= st->current_mode->conf; - - return max1363_write_basic_config(st->client, - st->setupbyte, - st->configbyte); -} - static int max1363_initial_setup(struct max1363_state *st) { st->setupbyte = MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD @@ -318,167 +593,6 @@ static int max1363_initial_setup(struct max1363_state *st) return max1363_set_scan_mode(st); } -static ssize_t max1363_show_av_scan_modes(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct iio_dev *dev_info = dev_get_drvdata(dev); - struct max1363_state *st = dev_info->dev_data; - int i, len = 0; - - for (i = 0; i < st->chip_info->num_modes; i++) - len += sprintf(buf + len, "%s ", - max1363_mode_table[st->chip_info - ->mode_list[i]].name); - len += sprintf(buf + len, "\n"); - - return len; -} - - -/* The dev here is the sysfs related one, not the underlying i2c one */ -static ssize_t max1363_scan_direct(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct iio_dev *dev_info = dev_get_drvdata(dev); - struct max1363_state *st = dev_info->dev_data; - int len = 0, ret, i; - struct i2c_client *client = st->client; - char *rxbuf; - - if (st->current_mode->numvals == 0) - return 0; - rxbuf = kmalloc(st->current_mode->numvals*2, GFP_KERNEL); - if (rxbuf == NULL) - return -ENOMEM; - - /* Interpretation depends on whether these are signed or not!*/ - /* Assume not for now */ - ret = i2c_master_recv(client, rxbuf, st->current_mode->numvals*2); - - if (ret < 0) - return ret; - for (i = 0; i < st->current_mode->numvals; i++) - len += sprintf(buf+len, "%d ", - ((int)(rxbuf[i*2+0]&0x0F) << 8) - + ((int)(rxbuf[i*2+1]))); - kfree(rxbuf); - len += sprintf(buf + len, "\n"); - - return len; -} - -static ssize_t max1363_scan(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct iio_dev *dev_info = dev_get_drvdata(dev); - int ret; - - mutex_lock(&dev_info->mlock); - if (dev_info->currentmode == INDIO_RING_TRIGGERED) - ret = max1363_scan_from_ring(dev, attr, buf); - else - ret = max1363_scan_direct(dev, attr, buf); - mutex_unlock(&dev_info->mlock); - - return ret; -} - -/* Cannot query the device, so use local copy of state */ -static ssize_t max1363_show_scan_mode(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct iio_dev *dev_info = dev_get_drvdata(dev); - struct max1363_state *st = dev_info->dev_data; - - return sprintf(buf, "%s\n", st->current_mode->name); -} - -static const struct max1363_mode -*__max1363_find_mode_in_ci(const struct max1363_chip_info *info, - const char *buf) -{ - int i; - for (i = 0; i < info->num_modes; i++) - if (strcmp(max1363_mode_table[info->mode_list[i]].name, buf) - == 0) - return &max1363_mode_table[info->mode_list[i]]; - return NULL; -} - -static ssize_t max1363_store_scan_mode(struct device *dev, - struct device_attribute *attr, - const char *buf, - size_t len) -{ - struct iio_dev *dev_info = dev_get_drvdata(dev); - struct max1363_state *st = dev_info->dev_data; - const struct max1363_mode *new_mode; - int ret; - - mutex_lock(&dev_info->mlock); - new_mode = NULL; - /* Avoid state changes if a ring buffer is enabled */ - if (!iio_ring_enabled(dev_info)) { - new_mode - = __max1363_find_mode_in_ci(st->chip_info, buf); - if (!new_mode) { - ret = -EINVAL; - goto error_ret; - } - st->current_mode = new_mode; - ret = max1363_set_scan_mode(st); - if (ret) - goto error_ret; - } else { - ret = -EBUSY; - goto error_ret; - } - mutex_unlock(&dev_info->mlock); - - return len; - -error_ret: - mutex_unlock(&dev_info->mlock); - - return ret; -} - -IIO_DEV_ATTR_AVAIL_SCAN_MODES(max1363_show_av_scan_modes); -IIO_DEV_ATTR_SCAN_MODE(S_IRUGO | S_IWUSR, - max1363_show_scan_mode, - max1363_store_scan_mode); - -IIO_DEV_ATTR_SCAN(max1363_scan); - -static ssize_t max1363_show_name(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct iio_dev *dev_info = dev_get_drvdata(dev); - struct max1363_state *st = dev_info->dev_data; - return sprintf(buf, "%s\n", st->chip_info->name); -} - -IIO_DEVICE_ATTR(name, S_IRUGO, max1363_show_name, NULL, 0); - -/*name export */ - -static struct attribute *max1363_attributes[] = { - &iio_dev_attr_available_scan_modes.dev_attr.attr, - &iio_dev_attr_scan_mode.dev_attr.attr, - &iio_dev_attr_scan.dev_attr.attr, - &iio_dev_attr_name.dev_attr.attr, - NULL, -}; - -static const struct attribute_group max1363_attribute_group = { - .attrs = max1363_attributes, -}; - static int __devinit max1363_probe(struct i2c_client *client, const struct i2c_device_id *id) { @@ -506,6 +620,7 @@ static int __devinit max1363_probe(struct i2c_client *client, ret = -ENODEV; goto error_free_st; } + st->reg = regulator_get(&client->dev, "vcc"); if (!IS_ERR(st->reg)) { ret = regulator_enable(st->reg); @@ -520,20 +635,36 @@ static int __devinit max1363_probe(struct i2c_client *client, goto error_disable_reg; } + st->indio_dev->available_scan_masks + = kzalloc(GFP_KERNEL, + sizeof(*st->indio_dev->available_scan_masks)* + (st->chip_info->num_modes + 1)); + if (!st->indio_dev->available_scan_masks) { + ret = -ENOMEM; + goto error_free_device; + } + + for (i = 0; i < st->chip_info->num_modes; i++) + st->indio_dev->available_scan_masks[i] = + max1363_mode_table[st->chip_info->mode_list[i]] + .modemask; /* Estabilish that the iio_dev is a child of the i2c device */ st->indio_dev->dev.parent = &client->dev; - st->indio_dev->attrs = &max1363_attribute_group; + st->indio_dev->attrs = st->chip_info->dev_attrs; + + /* Todo: this shouldn't be here. */ + st->indio_dev->scan_el_attrs = st->chip_info->scan_attrs; st->indio_dev->dev_data = (void *)(st); st->indio_dev->driver_module = THIS_MODULE; st->indio_dev->modes = INDIO_DIRECT_MODE; ret = max1363_initial_setup(st); if (ret) - goto error_free_device; + goto error_free_available_scan_masks; ret = max1363_register_ring_funcs_and_init(st->indio_dev); if (ret) - goto error_free_device; + goto error_free_available_scan_masks; ret = iio_device_register(st->indio_dev); if (ret) @@ -545,6 +676,8 @@ static int __devinit max1363_probe(struct i2c_client *client, return 0; error_cleanup_ring: max1363_ring_cleanup(st->indio_dev); +error_free_available_scan_masks: + kfree(st->indio_dev->available_scan_masks); error_free_device: if (!regdone) iio_free_device(st->indio_dev); @@ -569,6 +702,7 @@ static int max1363_remove(struct i2c_client *client) struct iio_dev *indio_dev = st->indio_dev; max1363_uninitialize_ring(indio_dev->ring); max1363_ring_cleanup(indio_dev); + kfree(st->indio_dev->available_scan_masks); iio_device_unregister(indio_dev); if (!IS_ERR(st->reg)) { regulator_disable(st->reg); diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c index f94fe2d..6003f7e 100644 --- a/drivers/staging/iio/adc/max1363_ring.c +++ b/drivers/staging/iio/adc/max1363_ring.c @@ -17,6 +17,7 @@ #include #include #include +#include #include "../iio.h" #include "../ring_generic.h" @@ -26,32 +27,36 @@ #include "max1363.h" -ssize_t max1363_scan_from_ring(struct device *dev, - struct device_attribute *attr, - char *buf) +/* Todo: test this */ +int max1363_single_channel_from_ring(long mask, struct max1363_state *st) { - struct iio_dev *dev_info = dev_get_drvdata(dev); - struct max1363_state *info = dev_info->dev_data; - int i, ret, len = 0; - char *ring_data; + unsigned long numvals; + int count = 0, ret; + u8 *ring_data; + if (!(st->current_mode->modemask & mask)) { + ret = -EBUSY; + goto error_ret; + } + numvals = hweight_long(st->current_mode->modemask); - ring_data = kmalloc(info->current_mode->numvals*2, GFP_KERNEL); + ring_data = kmalloc(numvals*2, GFP_KERNEL); if (ring_data == NULL) { ret = -ENOMEM; goto error_ret; } - ret = dev_info->ring->access.read_last(dev_info->ring, ring_data); + ret = st->indio_dev->ring->access.read_last(st->indio_dev->ring, + ring_data); if (ret) goto error_free_ring_data; - len += sprintf(buf+len, "ring "); - for (i = 0; i < info->current_mode->numvals; i++) - len += sprintf(buf + len, "%d ", - ((int)(ring_data[i*2 + 0] & 0x0F) << 8) - + ((int)(ring_data[i*2 + 1]))); - len += sprintf(buf + len, "\n"); - kfree(ring_data); - - return len; + /* Need a count of channels prior to this one */ + mask >>= 1; + while (mask) { + if (mask && st->current_mode->modemask) + count++; + mask >>= 1; + } + return ((int)(ring_data[count*2 + 0] & 0x0F) << 8) + + (int)(ring_data[count*2 + 1]); error_free_ring_data: kfree(ring_data); @@ -70,9 +75,22 @@ static int max1363_ring_preenable(struct iio_dev *indio_dev) { struct max1363_state *st = indio_dev->dev_data; size_t d_size; + unsigned long numvals; + + /* + * Need to figure out the current mode based upon the requested + * scan mask in iio_dev + */ + st->current_mode = max1363_match_mode(st->indio_dev->scan_mask, + st->chip_info); + if (!st->current_mode) + return -EINVAL; + + max1363_set_scan_mode(st); + numvals = hweight_long(st->current_mode->modemask); if (indio_dev->ring->access.set_bpd) { - d_size = st->current_mode->numvals*2 + sizeof(s64); + d_size = numvals*2 + sizeof(s64); if (d_size % 8) d_size += 8 - (d_size % 8); indio_dev->ring->access.set_bpd(indio_dev->ring, d_size); @@ -145,9 +163,10 @@ static void max1363_poll_bh_to_ring(struct work_struct *work_s) __u8 *rxbuf; int b_sent; size_t d_size; + unsigned long numvals = hweight_long(st->current_mode->modemask); /* Ensure the timestamp is 8 byte aligned */ - d_size = st->current_mode->numvals*2 + sizeof(s64); + d_size = numvals*2 + sizeof(s64); if (d_size % sizeof(s64)) d_size += sizeof(s64) - (d_size % sizeof(s64)); @@ -159,16 +178,14 @@ static void max1363_poll_bh_to_ring(struct work_struct *work_s) * might as well have this test in here in the meantime as it does * no harm. */ - if (st->current_mode->numvals == 0) + if (numvals == 0) return; rxbuf = kmalloc(d_size, GFP_KERNEL); if (rxbuf == NULL) return; - b_sent = i2c_master_recv(st->client, - rxbuf, - st->current_mode->numvals*2); + b_sent = i2c_master_recv(st->client, rxbuf, numvals*2); if (b_sent < 0) goto done; -- cgit v0.10.2 From eaf86ff9390d4d9c34d88d75fc7bcb784afc697a Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:04 +0100 Subject: staging:iio: Documentation, update iio_utils.h for the move to a bus Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/Documentation/iio_utils.h b/drivers/staging/iio/Documentation/iio_utils.h index 74d3124..d24006a 100644 --- a/drivers/staging/iio/Documentation/iio_utils.h +++ b/drivers/staging/iio/Documentation/iio_utils.h @@ -47,7 +47,7 @@ inline char *find_ring_subelement(const char *directory, const char *subelement) char *find_type_by_name(const char *name, const char *type) { - const char *iio_dir = "/sys/class/iio/"; + const char *iio_dir = "/sys/bus/iio/devices/"; const struct dirent *ent; int cnt, pos, pos2; @@ -112,6 +112,35 @@ int write_sysfs_int(char *filename, char *basedir, int val) return 0; } +int write_sysfs_int_and_verify(char *filename, char *basedir, int val) +{ + int ret; + FILE *sysfsfp; + char temp[100]; + int test; + + sprintf(temp, "%s%s", basedir, filename); + sysfsfp = fopen(temp, "w"); + if (sysfsfp == NULL) + return -1; + fprintf(sysfsfp, "%d", val); + fclose(sysfsfp); + + sysfsfp = fopen(temp, "r"); + if (sysfsfp == NULL) + return -1; + fscanf(sysfsfp, "%d", &test); + if (test != val) { + printf("Possible failure in int write %d to %s%s\n", + val, + basedir, + filename); + return -1; + } + + return 0; +} + /** * write_sysfs_string_and_verify() - string write, readback and verify * @filename: name of file to write to -- cgit v0.10.2 From e34d2c5fa2254197b0a01925cc6f77e12552f9b9 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:05 +0100 Subject: staging:iio: ABI documentation (partial) Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/Documentation/sysfs-class-iio b/drivers/staging/iio/Documentation/sysfs-class-iio new file mode 100644 index 0000000..7238582 --- /dev/null +++ b/drivers/staging/iio/Documentation/sysfs-class-iio @@ -0,0 +1,285 @@ + +What: /sys/bus/iio/devices/device[n] +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Hardware chip or device accessed by on communication port. + Corresponds to a grouping of sensor channels. + +What: /sys/bus/iio/devices/trigger[n] +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + An event driven driver of data capture to an in kernel buffer. + May be provided by a device driver that also has an IIO device + based on hardware generated events (e.g. data ready) or + provided by a separate driver for other hardware (e.g. + periodic timer, gpio or high resolution timer). + Contains trigger type specific elements. These do not + generalize well and hence are not documented in this file. + +What: /sys/bus/iio/devices/device[n]:buffer +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Link to /sys/class/iio/device[n]/device[n]:buffer. n indicates the + device with which this buffer buffer is associated. + +What: /sys/.../device[n]/name +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Description of the physical chip / device. Typically a part + number. + +What: /sys/.../device[n]/sampling_frequency +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Some devices have internal clocks. This parameter sets the + resulting sampling frequency. In many devices this + parameter has an effect on input filters etc rather than + simply controlling when the input is sampled. As this + effects datardy triggers, hardware buffers and the sysfs + direct access interfaces, it may be found in any of the + relevant directories. If it effects all of the above + then it is to be found in the base device directory as here. + +What: /sys/.../device[n]/sampling_frequency_available +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + When the internal sampling clock can only take a small + discrete set of values, this file lists those availale. + +What: /sys/.../device[n]/in[_name][m]_raw +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Raw (unscaled no bias removal etc) voltage measurement from + channel m. name is used in special cases where this does + not correspond to externally available input (e.g. supply + voltage monitoring in which case the file is in_supply_raw). + +What: /sys/.../device[n]/in[_name][m]_offset +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + If known for a device, offset to be added to in[m]_raw prior + to scaling by volt[m]_scale in order to obtain voltage in + millivolts. Not present if the offset is always 0 or unknown. + If m is not present, then voltage offset applies to all in + channels. May be writable if a variable offset is controlled + by the device. Note that this is different to calibbias which + is for devices that apply offsets to compensate for variation + between different instances of the part, typically adjusted by + using some hardware supported calibration procedure. + +What: /sys/.../device[n]/in[_name][m]_offset_available +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + If a small number of discrete offset values are available, this + will be a space separated list. If these are independant (but + options the same) for individual offsets then m should not be + present. + +What: /sys/.../device[n]/in[_name][m]_offset_[min|max] +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + If a more or less continuous range of voltage offsets are supported + then these specify the minimum and maximum. If shared by all + in channels then m is not present. + +What: /sys/.../device[n]/in[_name][m]_calibbias +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Hardware applied calibration offset. (assumed to fix production + inaccuracies) + +What /sys/.../device[n]/in[_name][m]_calibscale +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Hardware applied calibration scale factor. (assumed to fix production + inaccuracies) + +What: /sys/.../device[n]/in[_name][m]_scale +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + If known for a device, scale to be applied to volt[m]_raw post + addition of volt[m]_offset in order to obtain the measured voltage + in millivolts. If shared across all in channels then m is not present. + +What: /sys/.../device[n]/in[m]-in[o]_raw +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Raw (unscaled) differential voltage measurement equivalent to + channel m - channel o where these channel numbers apply to the physically + equivalent inputs when non differential readings are separately available. + In differential only parts, then all that is required is a consistent + labelling. + +What: /sys/.../device[n]/accel[_x|_y|_z][m]_raw +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Acceleration in direction x, y or z (may be arbitrarily assigned + but should match other such assignments on device) + channel m (not present if only one accelerometer channel at + this orientation). Has all of the equivalent parameters as per in[m]. + Units after application of scale and offset are m/s^2. + +What: /sys/.../device[n]/gyro[_x|_y|_z][m]_raw +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Angular velocity about axis x, y or z (may be arbitrarily assigned) + channel m (not present if only one gyroscope at this orientation). + Data converted by application of offset then scale to + radians per second. Has all the equivalent parameters as per in[m]. + +What: /sys/.../device[n]/mag[_x|_y|_z][m]_raw +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Magnetic field along axis x, y or z (may be arbitrarily assigned) + channel m (not present if only one magnetometer at this orientation). + Data converted by application of offset then scale to Gauss + Has all the equivalent modifiers as per in[m]. + +What: /sys/.../device[n]/device[n]:event[m] +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Configuration of which hardware generated events are passed up to + userspace. Some of these are a bit complex to generalize so this + section is a work in progress. + +What: /sys/.../device[n]:event[m]/dev +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + major:minor character device numbers for the event line. + +Taking accel_x0 as an example + +What: /sys/.../device[n]:event[m]/accel_x0_thresh[_high|_low]_en +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Event generated when accel_x0 passes a threshold in correction direction + (or stays beyond one). If direction isn't specified, either triggers it. + Note driver will assume last p events requested are enabled where p is + however many it supports. So if you want to be sure you have + set what you think you have, check the contents of these. Drivers + may have to buffer any parameters so that they are consistent when a + given event type is enabled a future point (and not those for whatever + alarm was previously enabled). + +What: /sys/.../device[n]:event[m]/accel_x0_roc[_high|_low]_en +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Same as above but based on the first differential of the value. + + +What: /sys/.../device[n]:event[m]/accel_x0[_thresh|_roc][_high|_low]_period +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + A period of time (microsecs) for which the condition must be broken + before an interrupt is triggered. Applies to all alarms if type is not + specified. + +What: /sys/.../device[n]:event[m]/accel_x0[_thresh|_roc][_high|_low]_value +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + The actual value of the threshold in raw device units obtained by + reverse application of scale and offfset to the acceleration in m/s^2. + +What: /sys/.../device[n]/scan_elements +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Directory containing interfaces for elements that will be captured + for a single triggered sample set in the buffer. + +What: /sys/.../device[n]/scan_elements/[m]_accel_x0_en +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Scan element control for triggered data capture. m implies the + ordering within the buffer. Next the type is specified with + modifier and channel number as per the sysfs single channel + access above. + +What: /sys/.../device[n]/scan_elements/accel[_x0]_precision +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Scan element precision within the buffer. Note that the + data alignment must restrictions must be read from within + buffer to work out full data alignment for data read + via buffer_access chrdev. _x0 dropped if shared across all + acceleration channels. + +What: /sys/.../device[n]/scan_elements/accel[_x0]_shift +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + A bit shift (to right) that must be applied prior to + extracting the bits specified by accel[_x0]_precision. + +What: /sys/.../device[n]/device[n]:buffer:event/dev +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Buffer for device n event character device major:minor numbers. + +What: /sys/.../device[n]/device[n]:buffer:access/dev +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Buffer for device n access character device o major:minor numbers. + +What: /sys/.../device[n]:buffer/trigger +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + The name of the trigger source being used, as per string given + in /sys/class/iio/trigger[n]/name. + +What: /sys/.../device[n]:buffer/length +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Number of scans contained by the buffer. + +What: /sys/.../device[n]:buffer/bps +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Bytes per scan. Due to alignment fun, the scan may be larger + than implied directly by the scan_element parameters. + +What: /sys/.../device[n]:buffer/enable +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Actually start the buffer capture up. Will start trigger + if first device and appropriate. + +What: /sys/.../device[n]:buffer/alignment +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Minimum data alignment. Scan elements larger than this are aligned + to the nearest power of 2 times this. (may not be true in weird + hardware buffers that pack data well) + -- cgit v0.10.2 From ba5c6fbac6682240ac209a209b88a30be4a464fb Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:06 +0100 Subject: staging:iio: Directory name changes to match new ABI. Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/chrdev.h b/drivers/staging/iio/chrdev.h index f42bafb..3f96f86 100644 --- a/drivers/staging/iio/chrdev.h +++ b/drivers/staging/iio/chrdev.h @@ -94,7 +94,7 @@ struct iio_event_interface { struct iio_chrdev_minor_attr attr; struct module *owner; void *private; - char _name[20]; + char _name[35]; char _attrname[20]; }; diff --git a/drivers/staging/iio/industrialio-core.c b/drivers/staging/iio/industrialio-core.c index a4ce221..c55d0f3 100644 --- a/drivers/staging/iio/industrialio-core.c +++ b/drivers/staging/iio/industrialio-core.c @@ -660,8 +660,9 @@ static int iio_device_register_eventset(struct iio_dev *dev_info) dev_info->event_interfaces[i].id = ret; snprintf(dev_info->event_interfaces[i]._name, 20, - "event_line%d", - dev_info->event_interfaces[i].id); + "%s:event%d", + dev_name(&dev_info->dev), + dev_info->event_interfaces[i].id); ret = iio_setup_ev_int(&dev_info->event_interfaces[i], (const char *)(dev_info diff --git a/drivers/staging/iio/industrialio-ring.c b/drivers/staging/iio/industrialio-ring.c index 690df91..0f19bd1 100644 --- a/drivers/staging/iio/industrialio-ring.c +++ b/drivers/staging/iio/industrialio-ring.c @@ -164,8 +164,9 @@ __iio_request_ring_buffer_event_chrdev(struct iio_ring_buffer *buf, else buf->ev_int.id = ret; - snprintf(buf->ev_int._name, 20, - "ring_event_line%d", + snprintf(buf->ev_int._name, sizeof(buf->ev_int._name), + "%s:event%d", + dev_name(&buf->dev), buf->ev_int.id); ret = iio_setup_ev_int(&(buf->ev_int), buf->ev_int._name, @@ -226,7 +227,9 @@ __iio_request_ring_buffer_access_chrdev(struct iio_ring_buffer *buf, goto error_device_put; else buf->access_id = ret; - dev_set_name(&buf->access_dev, "ring_access%d", buf->access_id); + dev_set_name(&buf->access_dev, "%s:access%d", + dev_name(&buf->dev), + buf->access_id); ret = device_add(&buf->access_dev); if (ret < 0) { printk(KERN_ERR "failed to add the ring access dev\n"); @@ -280,7 +283,9 @@ int iio_ring_buffer_register(struct iio_ring_buffer *ring) else ring->id = ret; - dev_set_name(&ring->dev, "ring_buffer%d", ring->id); + dev_set_name(&ring->dev, "%s:buffer%d", + dev_name(ring->dev.parent), + ring->id); ret = device_add(&ring->dev); if (ret) goto error_free_id; -- cgit v0.10.2 From 2a6a255494605f5906222687fba5b45c03594d71 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:07 +0100 Subject: staging:iio:tsl2563: change lux to illuminance0_input to match new abi Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/light/tsl2563.c b/drivers/staging/iio/light/tsl2563.c index 1ba4aa3..911c898 100644 --- a/drivers/staging/iio/light/tsl2563.c +++ b/drivers/staging/iio/light/tsl2563.c @@ -592,7 +592,7 @@ static ssize_t tsl2563_calib1_store(struct device *dev, * once I understand what they mean */ static DEVICE_ATTR(adc0, S_IRUGO, tsl2563_adc0_show, NULL); static DEVICE_ATTR(adc1, S_IRUGO, tsl2563_adc1_show, NULL); -static DEVICE_ATTR(lux, S_IRUGO, tsl2563_lux_show, NULL); +static DEVICE_ATTR(illuminance0_input, S_IRUGO, tsl2563_lux_show, NULL); static DEVICE_ATTR(calib0, S_IRUGO | S_IWUSR, tsl2563_calib0_show, tsl2563_calib0_store); static DEVICE_ATTR(calib1, S_IRUGO | S_IWUSR, @@ -601,7 +601,7 @@ static DEVICE_ATTR(calib1, S_IRUGO | S_IWUSR, static struct attribute *tsl2563_attributes[] = { &dev_attr_adc0.attr, &dev_attr_adc1.attr, - &dev_attr_lux.attr, + &dev_attr_illuminance0_input.attr, &dev_attr_calib0.attr, &dev_attr_calib1.attr, NULL -- cgit v0.10.2 From 758d988ce089ac7345bc03a9116b5ebf10dbfa9e Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:08 +0100 Subject: staging:iio: Remove naming via IDR's where no longer necessary under new abi. Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c index bba4b09..7617da8 100644 --- a/drivers/staging/iio/accel/lis3l02dq_ring.c +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c @@ -581,7 +581,7 @@ error_iio_sw_rb_free: int lis3l02dq_initialize_ring(struct iio_ring_buffer *ring) { - return iio_ring_buffer_register(ring); + return iio_ring_buffer_register(ring, 0); } void lis3l02dq_uninitialize_ring(struct iio_ring_buffer *ring) diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c index 45e4777..9485b13 100644 --- a/drivers/staging/iio/accel/sca3000_core.c +++ b/drivers/staging/iio/accel/sca3000_core.c @@ -1338,7 +1338,7 @@ static int __devinit __sca3000_probe(struct spi_device *spi, if (ret < 0) goto error_free_dev; regdone = 1; - ret = iio_ring_buffer_register(st->indio_dev->ring); + ret = iio_ring_buffer_register(st->indio_dev->ring, 0); if (ret < 0) goto error_unregister_dev; if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) { diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c index 6003f7e..f1e37f2 100644 --- a/drivers/staging/iio/adc/max1363_ring.c +++ b/drivers/staging/iio/adc/max1363_ring.c @@ -255,5 +255,5 @@ void max1363_uninitialize_ring(struct iio_ring_buffer *ring) int max1363_initialize_ring(struct iio_ring_buffer *ring) { - return iio_ring_buffer_register(ring); + return iio_ring_buffer_register(ring, 0); }; diff --git a/drivers/staging/iio/industrialio-ring.c b/drivers/staging/iio/industrialio-ring.c index 0f19bd1..fc27d22 100644 --- a/drivers/staging/iio/industrialio-ring.c +++ b/drivers/staging/iio/industrialio-ring.c @@ -20,19 +20,11 @@ #include #include #include -#include #include #include "iio.h" #include "ring_generic.h" -/* IDR for ring buffer identifier */ -static DEFINE_IDR(iio_ring_idr); -/* IDR for ring event identifier */ -static DEFINE_IDR(iio_ring_event_idr); -/* IDR for ring access identifier */ -static DEFINE_IDR(iio_ring_access_idr); - int iio_push_ring_event(struct iio_ring_buffer *ring_buf, int event_code, s64 timestamp) @@ -158,11 +150,8 @@ __iio_request_ring_buffer_event_chrdev(struct iio_ring_buffer *buf, struct device *dev) { int ret; - ret = iio_get_new_idr_val(&iio_ring_event_idr); - if (ret < 0) - goto error_ret; - else - buf->ev_int.id = ret; + + buf->ev_int.id = id; snprintf(buf->ev_int._name, sizeof(buf->ev_int._name), "%s:event%d", @@ -173,11 +162,9 @@ __iio_request_ring_buffer_event_chrdev(struct iio_ring_buffer *buf, owner, dev); if (ret) - goto error_free_id; + goto error_ret; return 0; -error_free_id: - iio_free_idr_val(&iio_ring_event_idr, buf->ev_int.id); error_ret: return ret; } @@ -186,7 +173,6 @@ static inline void __iio_free_ring_buffer_event_chrdev(struct iio_ring_buffer *buf) { iio_free_ev_int(&(buf->ev_int)); - iio_free_idr_val(&iio_ring_event_idr, buf->ev_int.id); } static void iio_ring_access_release(struct device *dev) @@ -222,18 +208,16 @@ __iio_request_ring_buffer_access_chrdev(struct iio_ring_buffer *buf, } buf->access_dev.devt = MKDEV(MAJOR(iio_devt), minor); - ret = iio_get_new_idr_val(&iio_ring_access_idr); - if (ret < 0) - goto error_device_put; - else - buf->access_id = ret; + + buf->access_id = id; + dev_set_name(&buf->access_dev, "%s:access%d", dev_name(&buf->dev), buf->access_id); ret = device_add(&buf->access_dev); if (ret < 0) { printk(KERN_ERR "failed to add the ring access dev\n"); - goto error_free_idr; + goto error_device_put; } cdev_init(&buf->access_handler.chrdev, &iio_ring_fileops); @@ -245,10 +229,9 @@ __iio_request_ring_buffer_access_chrdev(struct iio_ring_buffer *buf, goto error_device_unregister; } return 0; + error_device_unregister: device_unregister(&buf->access_dev); -error_free_idr: - iio_free_idr_val(&iio_ring_access_idr, buf->access_id); error_device_put: put_device(&buf->access_dev); @@ -257,7 +240,6 @@ error_device_put: static void __iio_free_ring_buffer_access_chrdev(struct iio_ring_buffer *buf) { - iio_free_idr_val(&iio_ring_access_idr, buf->access_id); device_unregister(&buf->access_dev); } @@ -274,21 +256,18 @@ void iio_ring_buffer_init(struct iio_ring_buffer *ring, } EXPORT_SYMBOL(iio_ring_buffer_init); -int iio_ring_buffer_register(struct iio_ring_buffer *ring) +int iio_ring_buffer_register(struct iio_ring_buffer *ring, int id) { int ret; - ret = iio_get_new_idr_val(&iio_ring_idr); - if (ret < 0) - goto error_ret; - else - ring->id = ret; + + ring->id = id; dev_set_name(&ring->dev, "%s:buffer%d", dev_name(ring->dev.parent), ring->id); ret = device_add(&ring->dev); if (ret) - goto error_free_id; + goto error_ret; ret = __iio_request_ring_buffer_event_chrdev(ring, 0, @@ -309,8 +288,6 @@ error_free_ring_buffer_event_chrdev: __iio_free_ring_buffer_event_chrdev(ring); error_remove_device: device_del(&ring->dev); -error_free_id: - iio_free_idr_val(&iio_ring_idr, ring->id); error_ret: return ret; } @@ -321,7 +298,6 @@ void iio_ring_buffer_unregister(struct iio_ring_buffer *ring) __iio_free_ring_buffer_access_chrdev(ring); __iio_free_ring_buffer_event_chrdev(ring); device_del(&ring->dev); - iio_free_idr_val(&iio_ring_idr, ring->id); } EXPORT_SYMBOL(iio_ring_buffer_unregister); diff --git a/drivers/staging/iio/ring_generic.h b/drivers/staging/iio/ring_generic.h index d74b5ae..0e44375 100644 --- a/drivers/staging/iio/ring_generic.h +++ b/drivers/staging/iio/ring_generic.h @@ -259,7 +259,7 @@ static inline void iio_put_ring_buffer(struct iio_ring_buffer *ring) container_of(d, struct iio_ring_buffer, dev) #define access_dev_to_iio_ring_buffer(d) \ container_of(d, struct iio_ring_buffer, access_dev) -int iio_ring_buffer_register(struct iio_ring_buffer *ring); +int iio_ring_buffer_register(struct iio_ring_buffer *ring, int id); void iio_ring_buffer_unregister(struct iio_ring_buffer *ring); ssize_t iio_read_ring_length(struct device *dev, -- cgit v0.10.2 From c3fa0fddd6fed10eda57de8912a634890ee27a31 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:09 +0100 Subject: staging:iio:max1363 add support for max11606-max11617 Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/adc/Kconfig b/drivers/staging/iio/adc/Kconfig index 101ea4b..afc8318 100644 --- a/drivers/staging/iio/adc/Kconfig +++ b/drivers/staging/iio/adc/Kconfig @@ -12,7 +12,9 @@ config MAX1363 Say yes here to build support for many MAXIM i2c analog to digital convertors (ADC). (max1361, max1362, max1363, max1364, max1136, max1136, max1137, max1138, max1139, max1236, max1237, max11238, - max1239) Provides direct access via sysfs. + max1239, max11606, max11607, max11608, max11609, max11610, + max11611, max11612, max11613, max11614, max11615, max11616, + max11617) Provides direct access via sysfs. config MAX1363_RING_BUFFER bool "MAXIM max1363: use ring buffer" diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c index e82f3e7..c53bf6d 100644 --- a/drivers/staging/iio/adc/max1363_core.c +++ b/drivers/staging/iio/adc/max1363_core.c @@ -434,6 +434,76 @@ static struct attribute_group max1238_scan_el_group = { .attrs = max1238_scan_el_attrs, }; + +static const enum max1363_modes max11607_mode_list[] = { + _s0, _s1, _s2, _s3, + s0to1, s0to2, s0to3, + s2to3, + d0m1, d2m3, d1m0, d3m2, + d0m1to2m3, d1m0to3m2, +}; + +static const enum max1363_modes max11608_mode_list[] = { + _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, + s0to1, s0to2, s0to3, s0to4, s0to5, s0to6, s0to7, + s6to7, + d0m1, d2m3, d4m5, d6m7, + d1m0, d3m2, d5m4, d7m6, + d0m1to2m3, d0m1to4m5, d0m1to6m7, + d1m0to3m2, d1m0to5m4, d1m0to7m6, +}; + +static struct attribute *max11608_device_attrs[] = { + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_dev_attr_in1_raw.dev_attr.attr, + &iio_dev_attr_in2_raw.dev_attr.attr, + &iio_dev_attr_in3_raw.dev_attr.attr, + &iio_dev_attr_in4_raw.dev_attr.attr, + &iio_dev_attr_in5_raw.dev_attr.attr, + &iio_dev_attr_in6_raw.dev_attr.attr, + &iio_dev_attr_in7_raw.dev_attr.attr, + &iio_dev_attr_in0min1_raw.dev_attr.attr, + &iio_dev_attr_in2min3_raw.dev_attr.attr, + &iio_dev_attr_in4min5_raw.dev_attr.attr, + &iio_dev_attr_in6min7_raw.dev_attr.attr, + &iio_dev_attr_in1min0_raw.dev_attr.attr, + &iio_dev_attr_in3min2_raw.dev_attr.attr, + &iio_dev_attr_in5min4_raw.dev_attr.attr, + &iio_dev_attr_in7min6_raw.dev_attr.attr, + &iio_dev_attr_name.dev_attr.attr, + &iio_dev_attr_in_scale.dev_attr.attr, + NULL +}; + +static struct attribute_group max11608_dev_attr_group = { + .attrs = max11608_device_attrs, +}; + +static struct attribute *max11608_scan_el_attrs[] = { + &iio_scan_el_in0.dev_attr.attr, + &iio_scan_el_in1.dev_attr.attr, + &iio_scan_el_in2.dev_attr.attr, + &iio_scan_el_in3.dev_attr.attr, + &iio_scan_el_in4.dev_attr.attr, + &iio_scan_el_in5.dev_attr.attr, + &iio_scan_el_in6.dev_attr.attr, + &iio_scan_el_in7.dev_attr.attr, + &iio_scan_el_in0min1.dev_attr.attr, + &iio_scan_el_in2min3.dev_attr.attr, + &iio_scan_el_in4min5.dev_attr.attr, + &iio_scan_el_in6min7.dev_attr.attr, + &iio_scan_el_in1min0.dev_attr.attr, + &iio_scan_el_in3min2.dev_attr.attr, + &iio_scan_el_in5min4.dev_attr.attr, + &iio_scan_el_in7min6.dev_attr.attr, + &iio_dev_attr_in_precision.dev_attr.attr, +}; + +static struct attribute_group max11608_scan_el_group = { + .name = "scan_elements", + .attrs = max11608_scan_el_attrs, +}; + enum { max1361, max1362, max1363, @@ -446,6 +516,18 @@ enum { max1361, max1237, max1238, max1239, + max11606, + max11607, + max11608, + max11609, + max11610, + max11611, + max11612, + max11613, + max11614, + max11615, + max11616, + max11617, }; /* max1363 and max1368 tested - rest from data sheet */ @@ -574,7 +656,127 @@ static const struct max1363_chip_info max1363_chip_info_tbl[] = { .default_mode = s0to11, .dev_attrs = &max1238_dev_attr_group, .scan_attrs = &max1238_scan_el_group, - }, + }, { + .name = "max11606", + .num_inputs = 4, + .bits = 10, + .int_vref_mv = 4096, + .mode_list = max11607_mode_list, + .num_modes = ARRAY_SIZE(max11607_mode_list), + .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, + }, { + .name = "max11607", + .num_inputs = 4, + .bits = 10, + .int_vref_mv = 2048, + .mode_list = max11607_mode_list, + .num_modes = ARRAY_SIZE(max11607_mode_list), + .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, + }, { + .name = "max11608", + .num_inputs = 8, + .bits = 10, + .int_vref_mv = 4096, + .mode_list = max11608_mode_list, + .num_modes = ARRAY_SIZE(max11608_mode_list), + .default_mode = s0to7, + .dev_attrs = &max11608_dev_attr_group, + .scan_attrs = &max11608_scan_el_group, + }, { + .name = "max11609", + .num_inputs = 8, + .bits = 10, + .int_vref_mv = 2048, + .mode_list = max11608_mode_list, + .num_modes = ARRAY_SIZE(max11608_mode_list), + .default_mode = s0to7, + .dev_attrs = &max11608_dev_attr_group, + .scan_attrs = &max11608_scan_el_group, + }, { + .name = "max11610", + .num_inputs = 12, + .bits = 10, + .int_vref_mv = 4098, + .mode_list = max1238_mode_list, + .num_modes = ARRAY_SIZE(max1238_mode_list), + .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, + }, { + .name = "max11611", + .num_inputs = 12, + .bits = 10, + .int_vref_mv = 2048, + .mode_list = max1238_mode_list, + .num_modes = ARRAY_SIZE(max1238_mode_list), + .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, + }, { + .name = "max11612", + .num_inputs = 4, + .bits = 12, + .int_vref_mv = 4096, + .mode_list = max11607_mode_list, + .num_modes = ARRAY_SIZE(max11607_mode_list), + .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, + }, { + .name = "max11613", + .num_inputs = 4, + .bits = 12, + .int_vref_mv = 2048, + .mode_list = max11607_mode_list, + .num_modes = ARRAY_SIZE(max11607_mode_list), + .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, + }, { + .name = "max11614", + .num_inputs = 8, + .bits = 12, + .int_vref_mv = 4096, + .mode_list = max11608_mode_list, + .num_modes = ARRAY_SIZE(max11608_mode_list), + .default_mode = s0to7, + .dev_attrs = &max11608_dev_attr_group, + .scan_attrs = &max11608_scan_el_group, + }, { + .name = "max11615", + .num_inputs = 8, + .bits = 12, + .int_vref_mv = 2048, + .mode_list = max11608_mode_list, + .num_modes = ARRAY_SIZE(max11608_mode_list), + .default_mode = s0to7, + .dev_attrs = &max11608_dev_attr_group, + .scan_attrs = &max11608_scan_el_group, + }, { + .name = "max11616", + .num_inputs = 12, + .bits = 12, + .int_vref_mv = 4098, + .mode_list = max1238_mode_list, + .num_modes = ARRAY_SIZE(max1238_mode_list), + .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, + }, { + .name = "max11617", + .num_inputs = 12, + .bits = 12, + .int_vref_mv = 2048, + .mode_list = max1238_mode_list, + .num_modes = ARRAY_SIZE(max1238_mode_list), + .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, + } }; static int max1363_initial_setup(struct max1363_state *st) @@ -726,6 +928,18 @@ static const struct i2c_device_id max1363_id[] = { { "max1237", max1237 }, { "max1238", max1238 }, { "max1239", max1239 }, + { "max11606", max11606 }, + { "max11607", max11607 }, + { "max11608", max11608 }, + { "max11609", max11609 }, + { "max11610", max11610 }, + { "max11611", max11611 }, + { "max11612", max11612 }, + { "max11613", max11613 }, + { "max11614", max11614 }, + { "max11615", max11615 }, + { "max11616", max11616 }, + { "max11617", max11617 }, {} }; -- cgit v0.10.2 From 3bf877c1cc0d17ef471f21ae319fcb9c9211df61 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:10 +0100 Subject: staging:iio:max1363 add support for 8 bit equivalent devices, max1036-9, max11600-5 Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/adc/Kconfig b/drivers/staging/iio/adc/Kconfig index afc8318..0835fbc 100644 --- a/drivers/staging/iio/adc/Kconfig +++ b/drivers/staging/iio/adc/Kconfig @@ -10,11 +10,13 @@ config MAX1363 select MAX1363_RING_BUFFER help Say yes here to build support for many MAXIM i2c analog to digital - convertors (ADC). (max1361, max1362, max1363, max1364, max1136, - max1136, max1137, max1138, max1139, max1236, max1237, max11238, - max1239, max11606, max11607, max11608, max11609, max11610, - max11611, max11612, max11613, max11614, max11615, max11616, - max11617) Provides direct access via sysfs. + convertors (ADC). (max1361, max1362, max1363, max1364, max1036, + max1037, max1038, max1039, max1136, max1136, max1137, max1138, + max1139, max1236, max1237, max11238, max1239, max11600, max11601, + max11602, max11603, max11604, max11605, max11606, max11607, + max11608, max11609, max11610, max11611, max11612, max11613, + max11614, max11615, max11616, max11617) Provides direct access + via sysfs. config MAX1363_RING_BUFFER bool "MAXIM max1363: use ring buffer" diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c index c53bf6d..fa91cc1 100644 --- a/drivers/staging/iio/adc/max1363_core.c +++ b/drivers/staging/iio/adc/max1363_core.c @@ -226,13 +226,24 @@ static ssize_t max1363_read_single_channel(struct device *dev, if (ret) goto error_ret; } - /* Get reading */ - data = i2c_master_recv(client, rxbuf, 2); - if (data < 0) { - ret = data; - goto error_ret; + if (st->chip_info->bits != 8) { + /* Get reading */ + data = i2c_master_recv(client, rxbuf, 2); + if (data < 0) { + ret = data; + goto error_ret; + } + + data = (s32)(rxbuf[1]) | ((s32)(rxbuf[0] & 0x0F)) << 8; + } else { + /* Get reading */ + data = i2c_master_recv(client, rxbuf, 1); + if (data < 0) { + ret = data; + goto error_ret; + } + data = rxbuf[0]; } - data = (s32)(rxbuf[1]) | ((s32)(rxbuf[0] & 0x0F)) << 8; } /* Pretty print the result */ len = sprintf(buf, "%u\n", data); @@ -508,6 +519,10 @@ enum { max1361, max1362, max1363, max1364, + max1036, + max1037, + max1038, + max1039, max1136, max1137, max1138, @@ -516,6 +531,12 @@ enum { max1361, max1237, max1238, max1239, + max11600, + max11601, + max11602, + max11603, + max11604, + max11605, max11606, max11607, max11608, @@ -577,6 +598,46 @@ static const struct max1363_chip_info max1363_chip_info_tbl[] = { .dev_attrs = &max1363_dev_attr_group, .scan_attrs = &max1363_scan_el_group, }, { + .name = "max1036", + .num_inputs = 4, + .bits = 8, + .int_vref_mv = 4096, + .mode_list = max1236_mode_list, + .num_modes = ARRAY_SIZE(max1236_mode_list), + .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, + }, { + .name = "max1037", + .num_inputs = 4, + .bits = 8, + .int_vref_mv = 2048, + .mode_list = max1236_mode_list, + .num_modes = ARRAY_SIZE(max1236_mode_list), + .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, + }, { + .name = "max1038", + .num_inputs = 12, + .bits = 8, + .int_vref_mv = 4096, + .mode_list = max1238_mode_list, + .num_modes = ARRAY_SIZE(max1238_mode_list), + .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, + }, { + .name = "max1039", + .num_inputs = 12, + .bits = 8, + .int_vref_mv = 2048, + .mode_list = max1238_mode_list, + .num_modes = ARRAY_SIZE(max1238_mode_list), + .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, + }, { .name = "max1136", .num_inputs = 4, .bits = 10, @@ -657,6 +718,66 @@ static const struct max1363_chip_info max1363_chip_info_tbl[] = { .dev_attrs = &max1238_dev_attr_group, .scan_attrs = &max1238_scan_el_group, }, { + .name = "max11600", + .num_inputs = 4, + .bits = 8, + .int_vref_mv = 4096, + .mode_list = max11607_mode_list, + .num_modes = ARRAY_SIZE(max11607_mode_list), + .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, + }, { + .name = "max11601", + .num_inputs = 4, + .bits = 8, + .int_vref_mv = 2048, + .mode_list = max11607_mode_list, + .num_modes = ARRAY_SIZE(max11607_mode_list), + .default_mode = s0to3, + .dev_attrs = &max1363_dev_attr_group, + .scan_attrs = &max1363_scan_el_group, + }, { + .name = "max11602", + .num_inputs = 8, + .bits = 8, + .int_vref_mv = 4096, + .mode_list = max11608_mode_list, + .num_modes = ARRAY_SIZE(max11608_mode_list), + .default_mode = s0to7, + .dev_attrs = &max11608_dev_attr_group, + .scan_attrs = &max11608_scan_el_group, + }, { + .name = "max11603", + .num_inputs = 8, + .bits = 8, + .int_vref_mv = 2048, + .mode_list = max11608_mode_list, + .num_modes = ARRAY_SIZE(max11608_mode_list), + .default_mode = s0to7, + .dev_attrs = &max11608_dev_attr_group, + .scan_attrs = &max11608_scan_el_group, + }, { + .name = "max11604", + .num_inputs = 12, + .bits = 8, + .int_vref_mv = 4098, + .mode_list = max1238_mode_list, + .num_modes = ARRAY_SIZE(max1238_mode_list), + .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, + }, { + .name = "max11605", + .num_inputs = 12, + .bits = 8, + .int_vref_mv = 2048, + .mode_list = max1238_mode_list, + .num_modes = ARRAY_SIZE(max1238_mode_list), + .default_mode = s0to11, + .dev_attrs = &max1238_dev_attr_group, + .scan_attrs = &max1238_scan_el_group, + }, { .name = "max11606", .num_inputs = 4, .bits = 10, @@ -920,6 +1041,10 @@ static const struct i2c_device_id max1363_id[] = { { "max1362", max1362 }, { "max1363", max1363 }, { "max1364", max1364 }, + { "max1036", max1036 }, + { "max1037", max1037 }, + { "max1038", max1038 }, + { "max1039", max1039 }, { "max1136", max1136 }, { "max1137", max1137 }, { "max1138", max1138 }, @@ -928,6 +1053,12 @@ static const struct i2c_device_id max1363_id[] = { { "max1237", max1237 }, { "max1238", max1238 }, { "max1239", max1239 }, + { "max11600", max11600 }, + { "max11601", max11601 }, + { "max11602", max11602 }, + { "max11603", max11603 }, + { "max11604", max11604 }, + { "max11605", max11605 }, { "max11606", max11606 }, { "max11607", max11607 }, { "max11608", max11608 }, diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c index f1e37f2..85fde75 100644 --- a/drivers/staging/iio/adc/max1363_ring.c +++ b/drivers/staging/iio/adc/max1363_ring.c @@ -55,8 +55,11 @@ int max1363_single_channel_from_ring(long mask, struct max1363_state *st) count++; mask >>= 1; } - return ((int)(ring_data[count*2 + 0] & 0x0F) << 8) - + (int)(ring_data[count*2 + 1]); + if (st->chip_info->bits != 8) + return ((int)(ring_data[count*2 + 0] & 0x0F) << 8) + + (int)(ring_data[count*2 + 1]); + else + return ring_data[count]; error_free_ring_data: kfree(ring_data); @@ -90,7 +93,10 @@ static int max1363_ring_preenable(struct iio_dev *indio_dev) numvals = hweight_long(st->current_mode->modemask); if (indio_dev->ring->access.set_bpd) { - d_size = numvals*2 + sizeof(s64); + if (st->chip_info->bits != 8) + d_size = numvals*2 + sizeof(s64); + else + d_size = numvals + sizeof(s64); if (d_size % 8) d_size += 8 - (d_size % 8); indio_dev->ring->access.set_bpd(indio_dev->ring, d_size); @@ -166,7 +172,10 @@ static void max1363_poll_bh_to_ring(struct work_struct *work_s) unsigned long numvals = hweight_long(st->current_mode->modemask); /* Ensure the timestamp is 8 byte aligned */ - d_size = numvals*2 + sizeof(s64); + if (st->chip_info->bits != 8) + d_size = numvals*2 + sizeof(s64); + else + d_size = numvals + sizeof(s64); if (d_size % sizeof(s64)) d_size += sizeof(s64) - (d_size % sizeof(s64)); @@ -184,8 +193,10 @@ static void max1363_poll_bh_to_ring(struct work_struct *work_s) rxbuf = kmalloc(d_size, GFP_KERNEL); if (rxbuf == NULL) return; - - b_sent = i2c_master_recv(st->client, rxbuf, numvals*2); + if (st->chip_info->bits != 8) + b_sent = i2c_master_recv(st->client, rxbuf, numvals*2); + else + b_sent = i2c_master_recv(st->client, rxbuf, numvals); if (b_sent < 0) goto done; -- cgit v0.10.2 From 8474ddd7cba04c2e8d8691abda32ae0f4a684137 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:11 +0100 Subject: staging:iio:ring_sw: Fix incorrect test on successful read of last value, causes infinite loop Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c index f8de45d..5ee3e45 100644 --- a/drivers/staging/iio/ring_sw.c +++ b/drivers/staging/iio/ring_sw.c @@ -295,7 +295,7 @@ again: return -EAGAIN; memcpy(data, last_written_p_copy, ring->buf.bpd); - if (unlikely(ring->last_written_p >= last_written_p_copy)) + if (unlikely(ring->last_written_p != last_written_p_copy)) goto again; iio_unmark_sw_rb_in_use(&ring->buf); -- cgit v0.10.2 From e9124afad3d419213b1cd80e40bcf65445ba11f9 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:12 +0100 Subject: staging:iio:tsl2563 add a name attribute under the iio Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/light/tsl2563.c b/drivers/staging/iio/light/tsl2563.c index 911c898..da3d51c 100644 --- a/drivers/staging/iio/light/tsl2563.c +++ b/drivers/staging/iio/light/tsl2563.c @@ -598,12 +598,24 @@ static DEVICE_ATTR(calib0, S_IRUGO | S_IWUSR, static DEVICE_ATTR(calib1, S_IRUGO | S_IWUSR, tsl2563_calib1_show, tsl2563_calib1_store); +static ssize_t tsl2563_show_name(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct tsl2563_chip *chip = indio_dev->dev_data; + return sprintf(buf, "%s\n", chip->client->name); +} + +DEVICE_ATTR(name, S_IRUGO, tsl2563_show_name, NULL); + static struct attribute *tsl2563_attributes[] = { &dev_attr_adc0.attr, &dev_attr_adc1.attr, &dev_attr_illuminance0_input.attr, &dev_attr_calib0.attr, &dev_attr_calib1.attr, + &dev_attr_name.attr, NULL }; -- cgit v0.10.2 From 9d8ae6c884ef855c4cb0e423caa993e73b29ef67 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 14:43:13 +0100 Subject: staging:iio:Documentation: Rewrite example for new abi. Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/Documentation/iio_utils.h b/drivers/staging/iio/Documentation/iio_utils.h index d24006a..a4555e6 100644 --- a/drivers/staging/iio/Documentation/iio_utils.h +++ b/drivers/staging/iio/Documentation/iio_utils.h @@ -7,140 +7,173 @@ * the Free Software Foundation. */ +/* Made up value to limit allocation sizes */ +#include +#include + +#define IIO_MAX_NAME_LENGTH 30 + #define IIO_EVENT_CODE_RING_50_FULL 200 #define IIO_EVENT_CODE_RING_75_FULL 201 #define IIO_EVENT_CODE_RING_100_FULL 202 +const char *iio_dir = "/sys/bus/iio/devices/"; + struct iio_event_data { int id; __s64 timestamp; }; - -inline char *find_ring_subelement(const char *directory, const char *subelement) -{ - DIR *dp; - const struct dirent *ent; - int pos; - char temp[100]; - char *returnstring; - dp = opendir(directory); - if (dp == NULL) { - printf("could not directory: %s\n", directory); - return NULL; - } - while (ent = readdir(dp), ent != NULL) { - if (strcmp(ent->d_name, ".") != 0 && - strcmp(ent->d_name, "..") != 0) { - if (strncmp(ent->d_name, subelement, strlen(subelement)) == 0) { - int length = sprintf(temp, "%s%s%s", directory, ent->d_name, "/"); - returnstring = malloc(length+1); - strncpy(returnstring, temp, length+1); - return returnstring; - - } - } - } - return 0; -} - - -char *find_type_by_name(const char *name, const char *type) +/** + * find_type_by_name() - function to match top level types by name + * @name: top level type instance name + * @type: the type of top level instance being sort + * + * Typical types this is used for are device and trigger. + **/ +inline int find_type_by_name(const char *name, const char *type) { - const char *iio_dir = "/sys/bus/iio/devices/"; const struct dirent *ent; - int cnt, pos, pos2; + int number, numstrlen; FILE *nameFile; DIR *dp; - char thisname[100]; - char temp[100]; - - char *returnstring = NULL; + char thisname[IIO_MAX_NAME_LENGTH]; + char *filename; struct stat Stat; - pos = sprintf(temp, "%s", iio_dir); + dp = opendir(iio_dir); if (dp == NULL) { printf("No industrialio devices available"); - return NULL; + return -ENODEV; } + while (ent = readdir(dp), ent != NULL) { - cnt++; - /*reject . and .. */ if (strcmp(ent->d_name, ".") != 0 && - strcmp(ent->d_name, "..") != 0) { - /*make sure it isn't a trigger!*/ - if (strncmp(ent->d_name, type, strlen(type)) == 0) { - /* build full path to new file */ - pos2 = pos + sprintf(temp + pos, "%s/", ent->d_name); - sprintf(temp + pos2, "name"); - printf("search location %s\n", temp); - nameFile = fopen(temp, "r"); - if (!nameFile) { - sprintf(temp + pos2, "modalias", ent->d_name); - nameFile = fopen(temp, "r"); - if (!nameFile) { - printf("Failed to find a name for device\n"); - return NULL; - } - } + strcmp(ent->d_name, "..") != 0 && + strlen(ent->d_name) > strlen(type) && + strncmp(ent->d_name, type, strlen(type)) == 0) { + numstrlen = sscanf(ent->d_name + strlen(type), + "%d", + &number); + /* verify the next character is not a colon */ + if (strncmp(ent->d_name + strlen(type) + numstrlen, + ":", + 1) != 0) { + filename = malloc(strlen(iio_dir) + + strlen(type) + + 1 + + numstrlen + + 1); + if (filename == NULL) + return -ENOMEM; + sprintf(filename, "%s%s%d/name", + iio_dir, + type, + number); + nameFile = fopen(filename, "r"); + if (!nameFile) + continue; + free(filename); fscanf(nameFile, "%s", thisname); - if (strcmp(name, thisname) == 0) { - returnstring = malloc(strlen(temp) + 1); - sprintf(temp + pos2, ""); - strcpy(returnstring, temp); - return returnstring; - } + if (strcmp(name, thisname) == 0) + return number; fclose(nameFile); - } } } + return -ENODEV; } -int write_sysfs_int(char *filename, char *basedir, int val) +inline int _write_sysfs_int(char *filename, char *basedir, int val, int verify) { int ret; - FILE *sysfsfp; - char temp[100]; - sprintf(temp, "%s%s", basedir, filename); + FILE *sysfsfp; + int test; + char *temp = malloc(strlen(basedir) + strlen(filename) + 2); + if (temp == NULL) + return -ENOMEM; + sprintf(temp, "%s/%s", basedir, filename); sysfsfp = fopen(temp, "w"); - if (sysfsfp == NULL) - return -1; + if (sysfsfp == NULL) { + printf("failed to open %s\n", temp); + ret = -errno; + goto error_free; + } fprintf(sysfsfp, "%d", val); fclose(sysfsfp); - return 0; + if (verify) { + sysfsfp = fopen(temp, "r"); + if (sysfsfp == NULL) { + printf("failed to open %s\n", temp); + ret = -errno; + goto error_free; + } + fscanf(sysfsfp, "%d", &test); + if (test != val) { + printf("Possible failure in int write %d to %s%s\n", + val, + basedir, + filename); + ret = -1; + } + } +error_free: + free(temp); + return ret; +} + +int write_sysfs_int(char *filename, char *basedir, int val) +{ + return _write_sysfs_int(filename, basedir, val, 0); } int write_sysfs_int_and_verify(char *filename, char *basedir, int val) { + return _write_sysfs_int(filename, basedir, val, 1); +} + +int _write_sysfs_string(char *filename, char *basedir, char *val, int verify) +{ int ret; FILE *sysfsfp; - char temp[100]; - int test; - - sprintf(temp, "%s%s", basedir, filename); + char *temp = malloc(strlen(basedir) + strlen(filename) + 2); + if (temp == NULL) { + printf("Memory allocation failed\n"); + return -ENOMEM; + } + sprintf(temp, "%s/%s", basedir, filename); sysfsfp = fopen(temp, "w"); - if (sysfsfp == NULL) - return -1; - fprintf(sysfsfp, "%d", val); + if (sysfsfp == NULL) { + printf("Could not open %s\n", temp); + ret = -errno; + goto error_free; + } + fprintf(sysfsfp, "%s", val); fclose(sysfsfp); - - sysfsfp = fopen(temp, "r"); - if (sysfsfp == NULL) - return -1; - fscanf(sysfsfp, "%d", &test); - if (test != val) { - printf("Possible failure in int write %d to %s%s\n", - val, - basedir, - filename); - return -1; + if (verify) { + sysfsfp = fopen(temp, "r"); + if (sysfsfp == NULL) { + ret = -errno; + goto error_free; + } + fscanf(sysfsfp, "%s", temp); + if (strcmp(temp, val) != 0) { + printf("Possible failure in string write of %s " + "Should be %s " + "writen to %s\%s\n", + temp, + val, + basedir, + filename); + ret = -1; + } } +error_free: + free(temp); - return 0; + return ret; } - /** * write_sysfs_string_and_verify() - string write, readback and verify * @filename: name of file to write to @@ -149,40 +182,54 @@ int write_sysfs_int_and_verify(char *filename, char *basedir, int val) **/ int write_sysfs_string_and_verify(char *filename, char *basedir, char *val) { - int ret; - FILE *sysfsfp; - char temp[100]; - sprintf(temp, "%s%s", basedir, filename); - sysfsfp = fopen(temp, "w"); - if (sysfsfp == NULL) - return -1; - fprintf(sysfsfp, "%s", val); - fclose(sysfsfp); + return _write_sysfs_string(filename, basedir, val, 1); +} - sysfsfp = fopen(temp, "r"); - if (sysfsfp == NULL) - return -1; - fscanf(sysfsfp, "%s", temp); - if (strcmp(temp, val) != 0) { - printf("Possible failure in string write %s to %s%s \n", - val, - basedir, - filename); - return -1; - } - return 0; +int write_sysfs_string(char *filename, char *basedir, char *val) +{ + return _write_sysfs_string(filename, basedir, val, 0); } int read_sysfs_posint(char *filename, char *basedir) { int ret; FILE *sysfsfp; - char temp[100]; - sprintf(temp, "%s%s", basedir, filename); + char *temp = malloc(strlen(basedir) + strlen(filename) + 2); + if (temp == NULL) { + printf("Memory allocation failed"); + return -ENOMEM; + } + sprintf(temp, "%s/%s", basedir, filename); sysfsfp = fopen(temp, "r"); - if (sysfsfp == NULL) - return -1; + if (sysfsfp == NULL) { + ret = -errno; + goto error_free; + } fscanf(sysfsfp, "%d\n", &ret); fclose(sysfsfp); +error_free: + free(temp); + return ret; +} + +int read_sysfs_float(char *filename, char *basedir, float *val) +{ + float ret = 0; + FILE *sysfsfp; + char *temp = malloc(strlen(basedir) + strlen(filename) + 2); + if (temp == NULL) { + printf("Memory allocation failed"); + return -ENOMEM; + } + sprintf(temp, "%s/%s", basedir, filename); + sysfsfp = fopen(temp, "r"); + if (sysfsfp == NULL) { + ret = -errno; + goto error_free; + } + fscanf(sysfsfp, "%f\n", val); + fclose(sysfsfp); +error_free: + free(temp); return ret; } diff --git a/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c b/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c index 08e012f..3a58028 100644 --- a/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c +++ b/drivers/staging/iio/Documentation/lis3l02dqbuffersimple.c @@ -1,4 +1,4 @@ -/* Industrialio test ring buffer with a lis3l02dq acceleromter +/* Industrialio ring buffer with a lis3l02dq accelerometer * * Copyright (c) 2008 Jonathan Cameron * @@ -6,125 +6,181 @@ * under the terms of the GNU General Public License version 2 as published by * the Free Software Foundation. * - * Assumes suitable udev rules are used to create the dev nodes as named here. + * This program is primarily intended as an example application. */ #include #include #include #include -#include -#include #include #include - #include #include "iio_utils.h" -static const char *ring_access = "/dev/iio/lis3l02dq_ring_access"; -static const char *ring_event = "/dev/iio/lis3l02dq_ring_event"; -static const char *device_name = "lis3l02dq"; -static const char *trigger_name = "lis3l02dq-dev0"; -static int NumVals = 3; -static int scan_ts = 1; -static int RingLength = 128; +const char *device_name = "lis3l02dq"; +const char *trigger_name_base = "lis3l02dq-dev"; +const int num_vals = 3; +const int scan_ts = 1; +const int buf_len = 128; +const int num_loops = 10; /* * Could get this from ring bps, but only after starting the ring - * which is a bit late for it to be useful + * which is a bit late for it to be useful. + * + * Todo: replace with much more generic version based on scan_elements + * directory. */ -int size_from_scanmode(int numVals, int timestamp) +int size_from_scanmode(int num_vals, int timestamp) { - if (numVals && timestamp) + if (num_vals && timestamp) return 16; else if (timestamp) return 8; else - return numVals*2; + return num_vals*2; } int main(int argc, char **argv) { + int ret; int i, j, k, toread; FILE *fp_ev; int fp; + + char *trigger_name, *dev_dir_name, *buf_dir_name; char *data; size_t read_size; struct iio_event_data dat; + int dev_num, trig_num; + + char *buffer_access, *buffer_event; + const char *iio_dir = "/sys/bus/iio/devices/"; + int scan_size; + float gain = 1; - char *BaseDirectoryName, - *TriggerDirectoryName, - *RingBufferDirectoryName; - BaseDirectoryName = find_type_by_name(device_name, "device"); - if (BaseDirectoryName == NULL) { - printf("Failed to find the %s \n", device_name); - return -1; + /* Find out which iio device is the accelerometer. */ + dev_num = find_type_by_name(device_name, "device"); + if (dev_num < 0) { + printf("Failed to find the %s\n", device_name); + ret = -ENODEV; + goto error_ret; } - TriggerDirectoryName = find_type_by_name(trigger_name, "trigger"); - if (TriggerDirectoryName == NULL) { + printf("iio device number being used is %d\n", dev_num); + asprintf(&dev_dir_name, "%sdevice%d", iio_dir, dev_num); + + /* + * Build the trigger name. + * In this case we want the lis3l02dq's data ready trigger + * for this lis3l02dq. The naming is lis3l02dq_dev[n], where + * n matches the device number found above. + */ + ret = asprintf(&trigger_name, "%s%d", trigger_name_base, dev_num); + if (ret < 0) { + ret = -ENOMEM; + goto error_free_dev_dir_name; + } + + /* + * Find the trigger by name. + * This is techically unecessary here as we only need to + * refer to the trigger by name and that name is already + * known. + */ + trig_num = find_type_by_name(trigger_name, "trigger"); + if (trig_num < 0) { printf("Failed to find the %s\n", trigger_name); - return -1; + ret = -ENODEV; + goto error_free_triggername; } - RingBufferDirectoryName = find_ring_subelement(BaseDirectoryName, - "ring_buffer"); - if (RingBufferDirectoryName == NULL) { - printf("Failed to find ring buffer\n"); - return -1; + printf("iio trigger number being used is %d\n", trig_num); + + /* + * Read in the scale value - in a more generic case, first + * check for accel_scale, then the indivual channel scales + */ + ret = read_sysfs_float("accel_scale", dev_dir_name, &gain); + if (ret) + goto error_free_triggername;; + + /* + * Construct the directory name for the associated buffer. + * As we know that the lis3l02dq has only one buffer this may + * be built rather than found. + */ + ret = asprintf(&buf_dir_name, "%sdevice%d:buffer0", iio_dir, dev_num); + if (ret < 0) { + ret = -ENOMEM; + goto error_free_triggername; } - - if (write_sysfs_string_and_verify("trigger/current_trigger", - BaseDirectoryName, - (char *)trigger_name) < 0) { - printf("Failed to write current_trigger file \n"); - return -1; + /* Set the device trigger to be the data rdy trigger found above */ + ret = write_sysfs_string_and_verify("trigger/current_trigger", + dev_dir_name, + trigger_name); + if (ret < 0) { + printf("Failed to write current_trigger file\n"); + goto error_free_buf_dir_name; } /* Setup ring buffer parameters */ - if (write_sysfs_int("length", RingBufferDirectoryName, - RingLength) < 0) { - printf("Failed to open the ring buffer length file \n"); - return -1; - } + ret = write_sysfs_int("length", buf_dir_name, buf_len); + if (ret < 0) + goto error_free_buf_dir_name; - /* Enable the ring buffer */ - if (write_sysfs_int("ring_enable", RingBufferDirectoryName, 1) < 0) { - printf("Failed to open the ring buffer control file \n"); - return -1; - }; + /* Enable the buffer */ + ret = write_sysfs_int("ring_enable", buf_dir_name, 1); + if (ret < 0) + goto error_free_buf_dir_name; - data = malloc(size_from_scanmode(NumVals, scan_ts)*RingLength); + data = malloc(size_from_scanmode(num_vals, scan_ts)*buf_len); if (!data) { - printf("Could not allocate space for usespace data store\n"); - return -1; + ret = -ENOMEM; + goto error_free_buf_dir_name; + } + + ret = asprintf(&buffer_access, + "/dev/device%d:buffer0:access0", + dev_num); + if (ret < 0) { + ret = -ENOMEM; + goto error_free_data; } + ret = asprintf(&buffer_event, "/dev/device%d:buffer0:event0", dev_num); + if (ret < 0) { + ret = -ENOMEM; + goto error_free_data; + } /* Attempt to open non blocking the access dev */ - fp = open(ring_access, O_RDONLY | O_NONBLOCK); + fp = open(buffer_access, O_RDONLY | O_NONBLOCK); if (fp == -1) { /*If it isn't there make the node */ - printf("Failed to open %s\n", ring_access); - return -1; + printf("Failed to open %s\n", buffer_access); + ret = -errno; + goto error_free_buffer_event; } /* Attempt to open the event access dev (blocking this time) */ - fp_ev = fopen(ring_event, "rb"); + fp_ev = fopen(buffer_event, "rb"); if (fp_ev == NULL) { - printf("Failed to open %s\n", ring_event); - return -1; + printf("Failed to open %s\n", buffer_event); + ret = -errno; + goto error_close_buffer_access; } /* Wait for events 10 times */ - for (j = 0; j < 10; j++) { + for (j = 0; j < num_loops; j++) { read_size = fread(&dat, 1, sizeof(struct iio_event_data), fp_ev); switch (dat.id) { case IIO_EVENT_CODE_RING_100_FULL: - toread = RingLength; + toread = buf_len; break; case IIO_EVENT_CODE_RING_75_FULL: - toread = RingLength*3/4; + toread = buf_len*3/4; break; case IIO_EVENT_CODE_RING_50_FULL: - toread = RingLength/2; + toread = buf_len/2; break; default: printf("Unexpecteded event code\n"); @@ -132,39 +188,51 @@ int main(int argc, char **argv) } read_size = read(fp, data, - toread*size_from_scanmode(NumVals, scan_ts)); + toread*size_from_scanmode(num_vals, scan_ts)); if (read_size == -EAGAIN) { - printf("nothing available \n"); + printf("nothing available\n"); continue; } - - for (i = 0; - i < read_size/size_from_scanmode(NumVals, scan_ts); - i++) { - for (k = 0; k < NumVals; k++) { - __s16 val = *(__s16 *)(&data[i*size_from_scanmode(NumVals, scan_ts) + scan_size = size_from_scanmode(num_vals, scan_ts); + for (i = 0; i < read_size/scan_size; i++) { + for (k = 0; k < num_vals; k++) { + __s16 val = *(__s16 *)(&data[i*scan_size + (k)*2]); - printf("%05d ", val); + printf("%05f ", (float)val*gain); } printf(" %lld\n", - *(__s64 *)(&data[(i+1)*size_from_scanmode(NumVals, scan_ts) + *(__s64 *)(&data[(i + 1) + *size_from_scanmode(num_vals, + scan_ts) - sizeof(__s64)])); } } /* Stop the ring buffer */ - if (write_sysfs_int("ring_enable", RingBufferDirectoryName, 0) < 0) { - printf("Failed to open the ring buffer control file \n"); - return -1; - }; - - /* Disconnect from the trigger - writing something that doesn't exist.*/ - write_sysfs_string_and_verify("trigger/current_trigger", - BaseDirectoryName, "NULL"); - free(BaseDirectoryName); - free(TriggerDirectoryName); - free(RingBufferDirectoryName); + ret = write_sysfs_int("ring_enable", buf_dir_name, 0); + if (ret < 0) + goto error_close_buffer_event; + + /* Disconnect from the trigger - just write a dummy name.*/ + write_sysfs_string("trigger/current_trigger", + dev_dir_name, "NULL"); + +error_close_buffer_event: + fclose(fp_ev); +error_close_buffer_access: + close(fp); +error_free_data: free(data); - - return 0; +error_free_buffer_access: + free(buffer_access); +error_free_buffer_event: + free(buffer_event); +error_free_buf_dir_name: + free(buf_dir_name); +error_free_triggername: + free(trigger_name); +error_free_dev_dir_name: + free(dev_dir_name); +error_ret: + return ret; } -- cgit v0.10.2 From 1e3864e63576e33dd1b26ab750ffaab3066aaba9 Mon Sep 17 00:00:00 2001 From: Barry Song Date: Tue, 4 May 2010 14:43:14 +0100 Subject: staging:iio:imu ADIS16300 driver Signed-off-by: Barry Song Acked-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig index ace99f6..ed38ef4 100644 --- a/drivers/staging/iio/Kconfig +++ b/drivers/staging/iio/Kconfig @@ -41,6 +41,7 @@ config IIO_TRIGGER source "drivers/staging/iio/accel/Kconfig" source "drivers/staging/iio/adc/Kconfig" +source "drivers/staging/iio/imu/Kconfig" source "drivers/staging/iio/light/Kconfig" source "drivers/staging/iio/trigger/Kconfig" diff --git a/drivers/staging/iio/Makefile b/drivers/staging/iio/Makefile index 7ec0218..92b81c2 100644 --- a/drivers/staging/iio/Makefile +++ b/drivers/staging/iio/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_IIO_SW_RING) += ring_sw.o obj-y += accel/ obj-y += adc/ +obj-y += imu/ obj-y += light/ obj-y += trigger/ \ No newline at end of file diff --git a/drivers/staging/iio/adc/adc.h b/drivers/staging/iio/adc/adc.h index 46f0d08..04eb16f 100644 --- a/drivers/staging/iio/adc/adc.h +++ b/drivers/staging/iio/adc/adc.h @@ -16,6 +16,9 @@ #define IIO_DEV_ATTR_IN_RAW(_num, _show, _addr) \ IIO_DEVICE_ATTR(in##_num##_raw, S_IRUGO, _show, NULL, _addr) +#define IIO_DEV_ATTR_IN_NAMED_RAW(_name, _show, _addr) \ + IIO_DEVICE_ATTR(in_##_name##_raw, S_IRUGO, _show, NULL, _addr) + #define IIO_DEV_ATTR_IN_DIFF_RAW(_nump, _numn, _show, _addr) \ IIO_DEVICE_ATTR_NAMED(in##_nump##min##_numn##_raw, \ in##_nump-in##_numn##_raw, \ diff --git a/drivers/staging/iio/gyro/gyro.h b/drivers/staging/iio/gyro/gyro.h new file mode 100644 index 0000000..7c4dcf2 --- /dev/null +++ b/drivers/staging/iio/gyro/gyro.h @@ -0,0 +1,76 @@ + +#include "../sysfs.h" + +/* Gyroscope types of attribute */ + +#define IIO_DEV_ATTR_GYRO_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(gyro_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_GYRO_X_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(gyro_x_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_GYRO_Y_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(gyro_y_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_GYRO_Z_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(gyro_z_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_GYRO_X_GAIN(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(gyro_x_gain, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_GYRO_Y_GAIN(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(gyro_y_gain, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_GYRO_Z_GAIN(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(gyro_z_gain, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_GYRO_SCALE(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(gyro_scale, S_IRUGO, _show, _store, _addr) + +#define IIO_DEV_ATTR_GYRO(_show, _addr) \ + IIO_DEVICE_ATTR(gyro, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_GYRO_X(_show, _addr) \ + IIO_DEVICE_ATTR(gyro_x, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_GYRO_Y(_show, _addr) \ + IIO_DEVICE_ATTR(gyro_y, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_GYRO_Z(_show, _addr) \ + IIO_DEVICE_ATTR(gyro_z, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_TEMP_X(_show, _addr) \ + IIO_DEVICE_ATTR(temp_x, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_TEMP_Y(_show, _addr) \ + IIO_DEVICE_ATTR(temp_y, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_TEMP_Z(_show, _addr) \ + IIO_DEVICE_ATTR(temp_z, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_INCLI_X(_show, _addr) \ + IIO_DEVICE_ATTR(incli_x, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_INCLI_Y(_show, _addr) \ + IIO_DEVICE_ATTR(incli_y, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_INCLI_Z(_show, _addr) \ + IIO_DEVICE_ATTR(incli_z, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_INCLI_X_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(incli_x_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_INCLI_Y_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(incli_y_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_INCLI_Z_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(incli_z_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_ROT(_show, _addr) \ + IIO_DEVICE_ATTR(rot, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_ROT_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(rot_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_ANGL(_show, _addr) \ + IIO_DEVICE_ATTR(angl, S_IRUGO, _show, NULL, _addr) diff --git a/drivers/staging/iio/imu/Kconfig b/drivers/staging/iio/imu/Kconfig new file mode 100644 index 0000000..3fe4716 --- /dev/null +++ b/drivers/staging/iio/imu/Kconfig @@ -0,0 +1,14 @@ +# +# IIO imu drivers configuration +# +comment "Inertial measurement units" + +config ADIS16300 + tristate "Analog Devices ADIS16300 IMU SPI driver" + depends on SPI + select IIO_SW_RING + select IIO_RING_BUFFER + select IIO_TRIGGER + help + Say yes here to build support for Analog Devices adis16300 four degrees + of freedom inertial sensor. diff --git a/drivers/staging/iio/imu/Makefile b/drivers/staging/iio/imu/Makefile new file mode 100644 index 0000000..4cd5984 --- /dev/null +++ b/drivers/staging/iio/imu/Makefile @@ -0,0 +1,6 @@ +# +# Makefile for Inertial Measurement Units +# +adis16300-y := adis16300_core.o +adis16300-$(CONFIG_IIO_RING_BUFFER) += adis16300_ring.o adis16300_trigger.o +obj-$(CONFIG_ADIS16300) += adis16300.o diff --git a/drivers/staging/iio/imu/adis16300.h b/drivers/staging/iio/imu/adis16300.h new file mode 100644 index 0000000..77d890d --- /dev/null +++ b/drivers/staging/iio/imu/adis16300.h @@ -0,0 +1,203 @@ +#ifndef SPI_ADIS16300_H_ +#define SPI_ADIS16300_H_ + +#define ADIS16300_STARTUP_DELAY 220 /* ms */ + +#define ADIS16300_READ_REG(a) a +#define ADIS16300_WRITE_REG(a) ((a) | 0x80) + +#define ADIS16300_FLASH_CNT 0x00 /* Flash memory write count */ +#define ADIS16300_SUPPLY_OUT 0x02 /* Power supply measurement */ +#define ADIS16300_XGYRO_OUT 0x04 /* X-axis gyroscope output */ +#define ADIS16300_XACCL_OUT 0x0A /* X-axis accelerometer output */ +#define ADIS16300_YACCL_OUT 0x0C /* Y-axis accelerometer output */ +#define ADIS16300_ZACCL_OUT 0x0E /* Z-axis accelerometer output */ +#define ADIS16300_TEMP_OUT 0x10 /* Temperature output */ +#define ADIS16300_XINCLI_OUT 0x12 /* X-axis inclinometer output measurement */ +#define ADIS16300_YINCLI_OUT 0x14 /* Y-axis inclinometer output measurement */ +#define ADIS16300_AUX_ADC 0x16 /* Auxiliary ADC measurement */ + +/* Calibration parameters */ +#define ADIS16300_XGYRO_OFF 0x1A /* X-axis gyroscope bias offset factor */ +#define ADIS16300_XACCL_OFF 0x20 /* X-axis acceleration bias offset factor */ +#define ADIS16300_YACCL_OFF 0x22 /* Y-axis acceleration bias offset factor */ +#define ADIS16300_ZACCL_OFF 0x24 /* Z-axis acceleration bias offset factor */ + +#define ADIS16300_GPIO_CTRL 0x32 /* Auxiliary digital input/output control */ +#define ADIS16300_MSC_CTRL 0x34 /* Miscellaneous control */ +#define ADIS16300_SMPL_PRD 0x36 /* Internal sample period (rate) control */ +#define ADIS16300_SENS_AVG 0x38 /* Dynamic range and digital filter control */ +#define ADIS16300_SLP_CNT 0x3A /* Sleep mode control */ +#define ADIS16300_DIAG_STAT 0x3C /* System status */ + +/* Alarm functions */ +#define ADIS16300_GLOB_CMD 0x3E /* System command */ +#define ADIS16300_ALM_MAG1 0x26 /* Alarm 1 amplitude threshold */ +#define ADIS16300_ALM_MAG2 0x28 /* Alarm 2 amplitude threshold */ +#define ADIS16300_ALM_SMPL1 0x2A /* Alarm 1 sample size */ +#define ADIS16300_ALM_SMPL2 0x2C /* Alarm 2 sample size */ +#define ADIS16300_ALM_CTRL 0x2E /* Alarm control */ +#define ADIS16300_AUX_DAC 0x30 /* Auxiliary DAC data */ + +#define ADIS16300_ERROR_ACTIVE (1<<14) +#define ADIS16300_NEW_DATA (1<<15) + +/* MSC_CTRL */ +#define ADIS16300_MSC_CTRL_MEM_TEST (1<<11) +#define ADIS16300_MSC_CTRL_INT_SELF_TEST (1<<10) +#define ADIS16300_MSC_CTRL_NEG_SELF_TEST (1<<9) +#define ADIS16300_MSC_CTRL_POS_SELF_TEST (1<<8) +#define ADIS16300_MSC_CTRL_GYRO_BIAS (1<<7) +#define ADIS16300_MSC_CTRL_ACCL_ALIGN (1<<6) +#define ADIS16300_MSC_CTRL_DATA_RDY_EN (1<<2) +#define ADIS16300_MSC_CTRL_DATA_RDY_POL_HIGH (1<<1) +#define ADIS16300_MSC_CTRL_DATA_RDY_DIO2 (1<<0) + +/* SMPL_PRD */ +#define ADIS16300_SMPL_PRD_TIME_BASE (1<<7) +#define ADIS16300_SMPL_PRD_DIV_MASK 0x7F + +/* DIAG_STAT */ +#define ADIS16300_DIAG_STAT_ZACCL_FAIL (1<<15) +#define ADIS16300_DIAG_STAT_YACCL_FAIL (1<<14) +#define ADIS16300_DIAG_STAT_XACCL_FAIL (1<<13) +#define ADIS16300_DIAG_STAT_XGYRO_FAIL (1<<10) +#define ADIS16300_DIAG_STAT_ALARM2 (1<<9) +#define ADIS16300_DIAG_STAT_ALARM1 (1<<8) +#define ADIS16300_DIAG_STAT_FLASH_CHK (1<<6) +#define ADIS16300_DIAG_STAT_SELF_TEST (1<<5) +#define ADIS16300_DIAG_STAT_OVERFLOW (1<<4) +#define ADIS16300_DIAG_STAT_SPI_FAIL (1<<3) +#define ADIS16300_DIAG_STAT_FLASH_UPT (1<<2) +#define ADIS16300_DIAG_STAT_POWER_HIGH (1<<1) +#define ADIS16300_DIAG_STAT_POWER_LOW (1<<0) + +/* GLOB_CMD */ +#define ADIS16300_GLOB_CMD_SW_RESET (1<<7) +#define ADIS16300_GLOB_CMD_P_AUTO_NULL (1<<4) +#define ADIS16300_GLOB_CMD_FLASH_UPD (1<<3) +#define ADIS16300_GLOB_CMD_DAC_LATCH (1<<2) +#define ADIS16300_GLOB_CMD_FAC_CALIB (1<<1) +#define ADIS16300_GLOB_CMD_AUTO_NULL (1<<0) + +/* SLP_CNT */ +#define ADIS16300_SLP_CNT_POWER_OFF (1<<8) + +#define ADIS16300_MAX_TX 18 +#define ADIS16300_MAX_RX 18 + +#define ADIS16300_SPI_SLOW (u32)(300 * 1000) +#define ADIS16300_SPI_BURST (u32)(1000 * 1000) +#define ADIS16300_SPI_FAST (u32)(2000 * 1000) + +/** + * struct adis16300_state - device instance specific data + * @us: actual spi_device + * @work_trigger_to_ring: bh for triggered event handling + * @work_cont_thresh: CLEAN + * @inter: used to check if new interrupt has been triggered + * @last_timestamp: passing timestamp from th to bh of interrupt handler + * @indio_dev: industrial I/O device structure + * @trig: data ready trigger registered with iio + * @tx: transmit buffer + * @rx: recieve buffer + * @buf_lock: mutex to protect tx and rx + **/ +struct adis16300_state { + struct spi_device *us; + struct work_struct work_trigger_to_ring; + struct iio_work_cont work_cont_thresh; + s64 last_timestamp; + struct iio_dev *indio_dev; + struct iio_trigger *trig; + u8 *tx; + u8 *rx; + struct mutex buf_lock; +}; + +int adis16300_spi_write_reg_8(struct device *dev, + u8 reg_address, + u8 val); + +int adis16300_spi_read_burst(struct device *dev, u8 *rx); + +int adis16300_spi_read_sequence(struct device *dev, + u8 *tx, u8 *rx, int num); + +int adis16300_set_irq(struct device *dev, bool enable); + +int adis16300_reset(struct device *dev); + +int adis16300_stop_device(struct device *dev); + +int adis16300_check_status(struct device *dev); + +#ifdef CONFIG_IIO_RING_BUFFER +/* At the moment triggers are only used for ring buffer + * filling. This may change! + */ + +enum adis16300_scan { + ADIS16300_SCAN_SUPPLY, + ADIS16300_SCAN_GYRO_X, + ADIS16300_SCAN_ACC_X, + ADIS16300_SCAN_ACC_Y, + ADIS16300_SCAN_ACC_Z, + ADIS16300_SCAN_TEMP, + ADIS16300_SCAN_ADC_0, + ADIS16300_SCAN_INCLI_X, + ADIS16300_SCAN_INCLI_Y, +}; + +void adis16300_remove_trigger(struct iio_dev *indio_dev); +int adis16300_probe_trigger(struct iio_dev *indio_dev); + +ssize_t adis16300_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf); + + +int adis16300_configure_ring(struct iio_dev *indio_dev); +void adis16300_unconfigure_ring(struct iio_dev *indio_dev); + +int adis16300_initialize_ring(struct iio_ring_buffer *ring); +void adis16300_uninitialize_ring(struct iio_ring_buffer *ring); +#else /* CONFIG_IIO_RING_BUFFER */ + +static inline void adis16300_remove_trigger(struct iio_dev *indio_dev) +{ +} + +static inline int adis16300_probe_trigger(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline ssize_t +adis16300_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return 0; +} + +static int adis16300_configure_ring(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline void adis16300_unconfigure_ring(struct iio_dev *indio_dev) +{ +} + +static inline int adis16300_initialize_ring(struct iio_ring_buffer *ring) +{ + return 0; +} + +static inline void adis16300_uninitialize_ring(struct iio_ring_buffer *ring) +{ +} + +#endif /* CONFIG_IIO_RING_BUFFER */ +#endif /* SPI_ADIS16300_H_ */ diff --git a/drivers/staging/iio/imu/adis16300_core.c b/drivers/staging/iio/imu/adis16300_core.c new file mode 100644 index 0000000..9f5f8cb --- /dev/null +++ b/drivers/staging/iio/imu/adis16300_core.c @@ -0,0 +1,833 @@ +/* + * ADIS16300 Four Degrees of Freedom Inertial Sensor Driver + * + * Copyright 2010 Analog Devices Inc. + * + * Licensed under the GPL-2 or later. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../accel/accel.h" +#include "../gyro/gyro.h" +#include "../adc/adc.h" + +#include "adis16300.h" + +#define DRIVER_NAME "adis16300" + +/* At the moment the spi framework doesn't allow global setting of cs_change. + * It's in the likely to be added comment at the top of spi.h. + * This means that use cannot be made of spi_write etc. + */ + +/** + * adis16300_spi_write_reg_8() - write single byte to a register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the register to be written + * @val: the value to write + **/ +int adis16300_spi_write_reg_8(struct device *dev, + u8 reg_address, + u8 val) +{ + int ret; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16300_state *st = iio_dev_get_devdata(indio_dev); + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16300_WRITE_REG(reg_address); + st->tx[1] = val; + + ret = spi_write(st->us, st->tx, 2); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16300_spi_write_reg_16() - write 2 bytes to a pair of registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: value to be written + **/ +static int adis16300_spi_write_reg_16(struct device *dev, + u8 lower_reg_address, + u16 value) +{ + int ret; + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16300_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + }, { + .tx_buf = st->tx + 2, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16300_WRITE_REG(lower_reg_address); + st->tx[1] = value & 0xFF; + st->tx[2] = ADIS16300_WRITE_REG(lower_reg_address + 1); + st->tx[3] = (value >> 8) & 0xFF; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16300_spi_read_reg_16() - read 2 bytes from a 16-bit register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: somewhere to pass back the value read + **/ +static int adis16300_spi_read_reg_16(struct device *dev, + u8 lower_reg_address, + u16 *val) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16300_state *st = iio_dev_get_devdata(indio_dev); + int ret; + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 0, + }, { + .rx_buf = st->rx, + .bits_per_word = 8, + .len = 2, + .cs_change = 0, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16300_READ_REG(lower_reg_address); + st->tx[1] = 0; + st->tx[2] = 0; + st->tx[3] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + if (ret) { + dev_err(&st->us->dev, + "problem when reading 16 bit register 0x%02X", + lower_reg_address); + goto error_ret; + } + *val = (st->rx[0] << 8) | st->rx[1]; + +error_ret: + mutex_unlock(&st->buf_lock); + return ret; +} + +/** + * adis16300_spi_read_burst() - read all data registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @rx: somewhere to pass back the value read (min size is 24 bytes) + **/ +int adis16300_spi_read_burst(struct device *dev, u8 *rx) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16300_state *st = iio_dev_get_devdata(indio_dev); + u32 old_speed_hz = st->us->max_speed_hz; + int ret; + + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 0, + }, { + .rx_buf = rx, + .bits_per_word = 8, + .len = 18, + .cs_change = 0, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16300_READ_REG(ADIS16300_GLOB_CMD); + st->tx[1] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + + st->us->max_speed_hz = min(ADIS16300_SPI_BURST, old_speed_hz); + spi_setup(st->us); + + ret = spi_sync(st->us, &msg); + if (ret) + dev_err(&st->us->dev, "problem when burst reading"); + + st->us->max_speed_hz = old_speed_hz; + spi_setup(st->us); + mutex_unlock(&st->buf_lock); + return ret; +} + +/** + * adis16300_spi_read_sequence() - read a sequence of 16-bit registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @tx: register addresses in bytes 0,2,4,6... (min size is 2*num bytes) + * @rx: somewhere to pass back the value read (min size is 2*num bytes) + **/ +int adis16300_spi_read_sequence(struct device *dev, + u8 *tx, u8 *rx, int num) +{ + struct spi_message msg; + struct spi_transfer *xfers; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16300_state *st = iio_dev_get_devdata(indio_dev); + int ret, i; + + xfers = kzalloc(num + 1, GFP_KERNEL); + if (xfers == NULL) { + dev_err(&st->us->dev, "memory alloc failed"); + ret = -ENOMEM; + goto error_ret; + } + + /* tx: |add1|addr2|addr3|...|addrN |zero| + * rx: |zero|res1 |res2 |...|resN-1|resN| */ + spi_message_init(&msg); + for (i = 0; i < num + 1; i++) { + if (i > 0) + xfers[i].rx_buf = st->rx + 2*(i - 1); + if (i < num) + xfers[i].tx_buf = st->tx + 2*i; + xfers[i].bits_per_word = 8; + xfers[i].len = 2; + xfers[i].cs_change = 1; + spi_message_add_tail(&xfers[i], &msg); + } + + mutex_lock(&st->buf_lock); + + ret = spi_sync(st->us, &msg); + if (ret) + dev_err(&st->us->dev, "problem when reading sequence"); + + mutex_unlock(&st->buf_lock); + kfree(xfers); + +error_ret: + return ret; +} + +static ssize_t adis16300_spi_read_signed(struct device *dev, + struct device_attribute *attr, + char *buf, + unsigned bits) +{ + int ret; + s16 val = 0; + unsigned shift = 16 - bits; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16300_spi_read_reg_16(dev, this_attr->address, (u16 *)&val); + if (ret) + return ret; + + if (val & ADIS16300_ERROR_ACTIVE) + adis16300_check_status(dev); + val = ((s16)(val << shift) >> shift); + return sprintf(buf, "%d\n", val); +} + +static ssize_t adis16300_read_12bit_unsigned(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret; + u16 val = 0; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16300_spi_read_reg_16(dev, this_attr->address, &val); + if (ret) + return ret; + + if (val & ADIS16300_ERROR_ACTIVE) + adis16300_check_status(dev); + + return sprintf(buf, "%u\n", val & 0x0FFF); +} + +static ssize_t adis16300_read_14bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16300_spi_read_signed(dev, attr, buf, 14); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16300_read_12bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16300_spi_read_signed(dev, attr, buf, 12); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16300_read_13bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16300_spi_read_signed(dev, attr, buf, 13); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16300_write_16bit(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + int ret; + long val; + + ret = strict_strtol(buf, 10, &val); + if (ret) + goto error_ret; + ret = adis16300_spi_write_reg_16(dev, this_attr->address, val); + +error_ret: + return ret ? ret : len; +} + +static ssize_t adis16300_read_frequency(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret, len = 0; + u16 t; + int sps; + ret = adis16300_spi_read_reg_16(dev, + ADIS16300_SMPL_PRD, + &t); + if (ret) + return ret; + sps = (t & ADIS16300_SMPL_PRD_TIME_BASE) ? 53 : 1638; + sps /= (t & ADIS16300_SMPL_PRD_DIV_MASK) + 1; + len = sprintf(buf, "%d SPS\n", sps); + return len; +} + +static ssize_t adis16300_write_frequency(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16300_state *st = iio_dev_get_devdata(indio_dev); + long val; + int ret; + u8 t; + + ret = strict_strtol(buf, 10, &val); + if (ret) + return ret; + + mutex_lock(&indio_dev->mlock); + + t = (1638 / val); + if (t > 0) + t--; + t &= ADIS16300_SMPL_PRD_DIV_MASK; + if ((t & ADIS16300_SMPL_PRD_DIV_MASK) >= 0x0A) + st->us->max_speed_hz = ADIS16300_SPI_SLOW; + else + st->us->max_speed_hz = ADIS16300_SPI_FAST; + + ret = adis16300_spi_write_reg_8(dev, + ADIS16300_SMPL_PRD, + t); + + mutex_unlock(&indio_dev->mlock); + + return ret ? ret : len; +} + +static ssize_t adis16300_write_reset(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + if (len < 1) + return -1; + switch (buf[0]) { + case '1': + case 'y': + case 'Y': + return adis16300_reset(dev); + } + return -1; +} + + + +int adis16300_set_irq(struct device *dev, bool enable) +{ + int ret; + u16 msc; + ret = adis16300_spi_read_reg_16(dev, ADIS16300_MSC_CTRL, &msc); + if (ret) + goto error_ret; + + msc |= ADIS16300_MSC_CTRL_DATA_RDY_POL_HIGH; + msc &= ~ADIS16300_MSC_CTRL_DATA_RDY_DIO2; + if (enable) + msc |= ADIS16300_MSC_CTRL_DATA_RDY_EN; + else + msc &= ~ADIS16300_MSC_CTRL_DATA_RDY_EN; + + ret = adis16300_spi_write_reg_16(dev, ADIS16300_MSC_CTRL, msc); + if (ret) + goto error_ret; + +error_ret: + return ret; +} + +int adis16300_reset(struct device *dev) +{ + int ret; + ret = adis16300_spi_write_reg_8(dev, + ADIS16300_GLOB_CMD, + ADIS16300_GLOB_CMD_SW_RESET); + if (ret) + dev_err(dev, "problem resetting device"); + + return ret; +} + +/* Power down the device */ +int adis16300_stop_device(struct device *dev) +{ + int ret; + u16 val = ADIS16300_SLP_CNT_POWER_OFF; + + ret = adis16300_spi_write_reg_16(dev, ADIS16300_SLP_CNT, val); + if (ret) + dev_err(dev, "problem with turning device off: SLP_CNT"); + + return ret; +} + +int adis16300_self_test(struct device *dev) +{ + int ret; + ret = adis16300_spi_write_reg_16(dev, + ADIS16300_MSC_CTRL, + ADIS16300_MSC_CTRL_MEM_TEST); + if (ret) { + dev_err(dev, "problem starting self test"); + goto err_ret; + } + + adis16300_check_status(dev); + +err_ret: + return ret; +} + +int adis16300_check_status(struct device *dev) +{ + u16 status; + int ret; + + ret = adis16300_spi_read_reg_16(dev, ADIS16300_DIAG_STAT, &status); + + if (ret < 0) { + dev_err(dev, "Reading status failed\n"); + goto error_ret; + } + ret = status; + if (status & ADIS16300_DIAG_STAT_ZACCL_FAIL) + dev_err(dev, "Z-axis accelerometer self-test failure\n"); + if (status & ADIS16300_DIAG_STAT_YACCL_FAIL) + dev_err(dev, "Y-axis accelerometer self-test failure\n"); + if (status & ADIS16300_DIAG_STAT_XACCL_FAIL) + dev_err(dev, "X-axis accelerometer self-test failure\n"); + if (status & ADIS16300_DIAG_STAT_XGYRO_FAIL) + dev_err(dev, "X-axis gyroscope self-test failure\n"); + if (status & ADIS16300_DIAG_STAT_ALARM2) + dev_err(dev, "Alarm 2 active\n"); + if (status & ADIS16300_DIAG_STAT_ALARM1) + dev_err(dev, "Alarm 1 active\n"); + if (status & ADIS16300_DIAG_STAT_FLASH_CHK) + dev_err(dev, "Flash checksum error\n"); + if (status & ADIS16300_DIAG_STAT_SELF_TEST) + dev_err(dev, "Self test error\n"); + if (status & ADIS16300_DIAG_STAT_OVERFLOW) + dev_err(dev, "Sensor overrange\n"); + if (status & ADIS16300_DIAG_STAT_SPI_FAIL) + dev_err(dev, "SPI failure\n"); + if (status & ADIS16300_DIAG_STAT_FLASH_UPT) + dev_err(dev, "Flash update failed\n"); + if (status & ADIS16300_DIAG_STAT_POWER_HIGH) + dev_err(dev, "Power supply above 5.25V\n"); + if (status & ADIS16300_DIAG_STAT_POWER_LOW) + dev_err(dev, "Power supply below 4.75V\n"); + +error_ret: + return ret; +} + +static int adis16300_initial_setup(struct adis16300_state *st) +{ + int ret; + u16 smp_prd; + struct device *dev = &st->indio_dev->dev; + + /* use low spi speed for init */ + st->us->max_speed_hz = ADIS16300_SPI_SLOW; + st->us->mode = SPI_MODE_3; + spi_setup(st->us); + + /* Disable IRQ */ + ret = adis16300_set_irq(dev, false); + if (ret) { + dev_err(dev, "disable irq failed"); + goto err_ret; + } + + /* Do self test */ + + /* Read status register to check the result */ + ret = adis16300_check_status(dev); + if (ret) { + adis16300_reset(dev); + dev_err(dev, "device not playing ball -> reset"); + msleep(ADIS16300_STARTUP_DELAY); + ret = adis16300_check_status(dev); + if (ret) { + dev_err(dev, "giving up"); + goto err_ret; + } + } + + printk(KERN_INFO DRIVER_NAME ": at CS%d (irq %d)\n", + st->us->chip_select, st->us->irq); + + /* use high spi speed if possible */ + ret = adis16300_spi_read_reg_16(dev, ADIS16300_SMPL_PRD, &smp_prd); + if (!ret && (smp_prd & ADIS16300_SMPL_PRD_DIV_MASK) < 0x0A) { + st->us->max_speed_hz = ADIS16300_SPI_SLOW; + spi_setup(st->us); + } + +err_ret: + return ret; +} + +static IIO_DEV_ATTR_ACCEL_X_OFFSET(S_IWUSR | S_IRUGO, + adis16300_read_12bit_signed, + adis16300_write_16bit, + ADIS16300_XACCL_OFF); + +static IIO_DEV_ATTR_ACCEL_Y_OFFSET(S_IWUSR | S_IRUGO, + adis16300_read_12bit_signed, + adis16300_write_16bit, + ADIS16300_YACCL_OFF); + +static IIO_DEV_ATTR_ACCEL_Z_OFFSET(S_IWUSR | S_IRUGO, + adis16300_read_12bit_signed, + adis16300_write_16bit, + ADIS16300_ZACCL_OFF); + +static IIO_DEV_ATTR_IN_NAMED_RAW(supply, adis16300_read_14bit_signed, + ADIS16300_SUPPLY_OUT); +static IIO_CONST_ATTR(in_supply_scale, "0.00242"); + +static IIO_DEV_ATTR_GYRO_X(adis16300_read_14bit_signed, + ADIS16300_XGYRO_OUT); +static IIO_CONST_ATTR(gyro_scale, "0.05 deg/s"); + +static IIO_DEV_ATTR_ACCEL_X(adis16300_read_14bit_signed, + ADIS16300_XACCL_OUT); +static IIO_DEV_ATTR_ACCEL_Y(adis16300_read_14bit_signed, + ADIS16300_YACCL_OUT); +static IIO_DEV_ATTR_ACCEL_Z(adis16300_read_14bit_signed, + ADIS16300_ZACCL_OUT); +static IIO_CONST_ATTR(accel_scale, "0.0006 g"); + +static IIO_DEV_ATTR_INCLI_X(adis16300_read_13bit_signed, + ADIS16300_XINCLI_OUT); +static IIO_DEV_ATTR_INCLI_Y(adis16300_read_13bit_signed, + ADIS16300_YINCLI_OUT); +static IIO_CONST_ATTR(incli_scale, "0.044 d"); + +static IIO_DEV_ATTR_TEMP(adis16300_read_12bit_signed); +static IIO_CONST_ATTR(temp_offset, "198.16 K"); +static IIO_CONST_ATTR(temp_scale, "0.14 K"); + +static IIO_DEV_ATTR_IN_RAW(0, adis16300_read_12bit_unsigned, + ADIS16300_AUX_ADC); +static IIO_CONST_ATTR(in0_scale, "0.000806"); + +static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, + adis16300_read_frequency, + adis16300_write_frequency); + +static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16300_write_reset, 0); + +static IIO_CONST_ATTR_AVAIL_SAMP_FREQ("409 546 819 1638"); + +static IIO_CONST_ATTR(name, "adis16300"); + +static struct attribute *adis16300_event_attributes[] = { + NULL +}; + +static struct attribute_group adis16300_event_attribute_group = { + .attrs = adis16300_event_attributes, +}; + +static struct attribute *adis16300_attributes[] = { + &iio_dev_attr_accel_x_offset.dev_attr.attr, + &iio_dev_attr_accel_y_offset.dev_attr.attr, + &iio_dev_attr_accel_z_offset.dev_attr.attr, + &iio_dev_attr_in_supply_raw.dev_attr.attr, + &iio_const_attr_in_supply_scale.dev_attr.attr, + &iio_dev_attr_gyro_x.dev_attr.attr, + &iio_const_attr_gyro_scale.dev_attr.attr, + &iio_dev_attr_accel_x_raw.dev_attr.attr, + &iio_dev_attr_accel_y_raw.dev_attr.attr, + &iio_dev_attr_accel_z_raw.dev_attr.attr, + &iio_const_attr_accel_scale.dev_attr.attr, + &iio_dev_attr_incli_x.dev_attr.attr, + &iio_dev_attr_incli_y.dev_attr.attr, + &iio_const_attr_incli_scale.dev_attr.attr, + &iio_dev_attr_temp.dev_attr.attr, + &iio_const_attr_temp_offset.dev_attr.attr, + &iio_const_attr_temp_scale.dev_attr.attr, + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_const_attr_in0_scale.dev_attr.attr, + &iio_dev_attr_sampling_frequency.dev_attr.attr, + &iio_const_attr_available_sampling_frequency.dev_attr.attr, + &iio_dev_attr_reset.dev_attr.attr, + &iio_const_attr_name.dev_attr.attr, + NULL +}; + +static const struct attribute_group adis16300_attribute_group = { + .attrs = adis16300_attributes, +}; + +static int __devinit adis16300_probe(struct spi_device *spi) +{ + int ret, regdone = 0; + struct adis16300_state *st = kzalloc(sizeof *st, GFP_KERNEL); + if (!st) { + ret = -ENOMEM; + goto error_ret; + } + /* this is only used for removal purposes */ + spi_set_drvdata(spi, st); + + /* Allocate the comms buffers */ + st->rx = kzalloc(sizeof(*st->rx)*ADIS16300_MAX_RX, GFP_KERNEL); + if (st->rx == NULL) { + ret = -ENOMEM; + goto error_free_st; + } + st->tx = kzalloc(sizeof(*st->tx)*ADIS16300_MAX_TX, GFP_KERNEL); + if (st->tx == NULL) { + ret = -ENOMEM; + goto error_free_rx; + } + st->us = spi; + mutex_init(&st->buf_lock); + /* setup the industrialio driver allocated elements */ + st->indio_dev = iio_allocate_device(); + if (st->indio_dev == NULL) { + ret = -ENOMEM; + goto error_free_tx; + } + + st->indio_dev->dev.parent = &spi->dev; + st->indio_dev->num_interrupt_lines = 1; + st->indio_dev->event_attrs = &adis16300_event_attribute_group; + st->indio_dev->attrs = &adis16300_attribute_group; + st->indio_dev->dev_data = (void *)(st); + st->indio_dev->driver_module = THIS_MODULE; + st->indio_dev->modes = INDIO_DIRECT_MODE; + + ret = adis16300_configure_ring(st->indio_dev); + if (ret) + goto error_free_dev; + + ret = iio_device_register(st->indio_dev); + if (ret) + goto error_unreg_ring_funcs; + regdone = 1; + + ret = adis16300_initialize_ring(st->indio_dev->ring); + if (ret) { + printk(KERN_ERR "failed to initialize the ring\n"); + goto error_unreg_ring_funcs; + } + + if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) { +#if 0 /* fixme: here we should support */ + iio_init_work_cont(&st->work_cont_thresh, + NULL, + adis16300_thresh_handler_bh_no_check, + 0, + 0, + st); +#endif + ret = iio_register_interrupt_line(spi->irq, + st->indio_dev, + 0, + IRQF_TRIGGER_RISING, + "adis16300"); + if (ret) + goto error_uninitialize_ring; + + ret = adis16300_probe_trigger(st->indio_dev); + if (ret) + goto error_unregister_line; + } + + /* Get the device into a sane initial state */ + ret = adis16300_initial_setup(st); + if (ret) + goto error_remove_trigger; + return 0; + +error_remove_trigger: + if (st->indio_dev->modes & INDIO_RING_TRIGGERED) + adis16300_remove_trigger(st->indio_dev); +error_unregister_line: + if (st->indio_dev->modes & INDIO_RING_TRIGGERED) + iio_unregister_interrupt_line(st->indio_dev, 0); +error_uninitialize_ring: + adis16300_uninitialize_ring(st->indio_dev->ring); +error_unreg_ring_funcs: + adis16300_unconfigure_ring(st->indio_dev); +error_free_dev: + if (regdone) + iio_device_unregister(st->indio_dev); + else + iio_free_device(st->indio_dev); +error_free_tx: + kfree(st->tx); +error_free_rx: + kfree(st->rx); +error_free_st: + kfree(st); +error_ret: + return ret; +} + +/* fixme, confirm ordering in this function */ +static int adis16300_remove(struct spi_device *spi) +{ + int ret; + struct adis16300_state *st = spi_get_drvdata(spi); + struct iio_dev *indio_dev = st->indio_dev; + + ret = adis16300_stop_device(&(indio_dev->dev)); + if (ret) + goto err_ret; + + flush_scheduled_work(); + + adis16300_remove_trigger(indio_dev); + if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) + iio_unregister_interrupt_line(indio_dev, 0); + + adis16300_uninitialize_ring(indio_dev->ring); + adis16300_unconfigure_ring(indio_dev); + iio_device_unregister(indio_dev); + kfree(st->tx); + kfree(st->rx); + kfree(st); + + return 0; + +err_ret: + return ret; +} + +static struct spi_driver adis16300_driver = { + .driver = { + .name = "adis16300", + .owner = THIS_MODULE, + }, + .probe = adis16300_probe, + .remove = __devexit_p(adis16300_remove), +}; + +static __init int adis16300_init(void) +{ + return spi_register_driver(&adis16300_driver); +} +module_init(adis16300_init); + +static __exit void adis16300_exit(void) +{ + spi_unregister_driver(&adis16300_driver); +} +module_exit(adis16300_exit); + +MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>"); +MODULE_DESCRIPTION("Analog Devices ADIS16300 IMU SPI driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/iio/imu/adis16300_ring.c b/drivers/staging/iio/imu/adis16300_ring.c new file mode 100644 index 0000000..76cf8a6 --- /dev/null +++ b/drivers/staging/iio/imu/adis16300_ring.c @@ -0,0 +1,233 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../ring_sw.h" +#include "../accel/accel.h" +#include "../trigger.h" +#include "adis16300.h" + +/** + * combine_8_to_16() utility function to munge to u8s into u16 + **/ +static inline u16 combine_8_to_16(u8 lower, u8 upper) +{ + u16 _lower = lower; + u16 _upper = upper; + return _lower | (_upper << 8); +} + +static IIO_SCAN_EL_C(supply, ADIS16300_SCAN_SUPPLY, IIO_SIGNED(14), + ADIS16300_SUPPLY_OUT, NULL); + +static IIO_SCAN_EL_C(gyro_x, ADIS16300_SCAN_GYRO_X, IIO_SIGNED(14), + ADIS16300_XGYRO_OUT, NULL); + +static IIO_SCAN_EL_C(accel_x, ADIS16300_SCAN_ACC_X, IIO_SIGNED(14), + ADIS16300_XACCL_OUT, NULL); +static IIO_SCAN_EL_C(accel_y, ADIS16300_SCAN_ACC_Y, IIO_SIGNED(14), + ADIS16300_YACCL_OUT, NULL); +static IIO_SCAN_EL_C(accel_z, ADIS16300_SCAN_ACC_Z, IIO_SIGNED(14), + ADIS16300_ZACCL_OUT, NULL); + +static IIO_SCAN_EL_C(temp, ADIS16300_SCAN_TEMP, IIO_SIGNED(12), + ADIS16300_TEMP_OUT, NULL); +static IIO_SCAN_EL_C(adc_0, ADIS16300_SCAN_ADC_0, IIO_SIGNED(12), + ADIS16300_AUX_ADC, NULL); + +static IIO_SCAN_EL_C(incli_x, ADIS16300_SCAN_INCLI_X, IIO_SIGNED(12), + ADIS16300_XINCLI_OUT, NULL); +static IIO_SCAN_EL_C(incli_y, ADIS16300_SCAN_INCLI_Y, IIO_SIGNED(12), + ADIS16300_YINCLI_OUT, NULL); + +static IIO_SCAN_EL_TIMESTAMP(9); + +static struct attribute *adis16300_scan_el_attrs[] = { + &iio_scan_el_supply.dev_attr.attr, + &iio_scan_el_gyro_x.dev_attr.attr, + &iio_scan_el_temp.dev_attr.attr, + &iio_scan_el_accel_x.dev_attr.attr, + &iio_scan_el_accel_y.dev_attr.attr, + &iio_scan_el_accel_z.dev_attr.attr, + &iio_scan_el_incli_x.dev_attr.attr, + &iio_scan_el_incli_y.dev_attr.attr, + &iio_scan_el_adc_0.dev_attr.attr, + &iio_scan_el_timestamp.dev_attr.attr, + NULL, +}; + +static struct attribute_group adis16300_scan_el_group = { + .attrs = adis16300_scan_el_attrs, + .name = "scan_elements", +}; + +/** + * adis16300_poll_func_th() top half interrupt handler called by trigger + * @private_data: iio_dev + **/ +static void adis16300_poll_func_th(struct iio_dev *indio_dev) +{ + struct adis16300_state *st = iio_dev_get_devdata(indio_dev); + st->last_timestamp = indio_dev->trig->timestamp; + schedule_work(&st->work_trigger_to_ring); + /* Indicate that this interrupt is being handled */ + + /* Technically this is trigger related, but without this + * handler running there is currently no way for the interrupt + * to clear. + */ +} + +/* Whilst this makes a lot of calls to iio_sw_ring functions - it is to device + * specific to be rolled into the core. + */ +static void adis16300_trigger_bh_to_ring(struct work_struct *work_s) +{ + struct adis16300_state *st + = container_of(work_s, struct adis16300_state, + work_trigger_to_ring); + + int i = 0; + s16 *data; + size_t datasize = st->indio_dev + ->ring->access.get_bpd(st->indio_dev->ring); + + data = kmalloc(datasize , GFP_KERNEL); + if (data == NULL) { + dev_err(&st->us->dev, "memory alloc failed in ring bh"); + return; + } + + if (st->indio_dev->scan_count) + if (adis16300_spi_read_burst(&st->indio_dev->dev, st->rx) >= 0) + for (; i < st->indio_dev->scan_count; i++) { + data[i] = combine_8_to_16(st->rx[i*2+1], + st->rx[i*2]); + } + + /* Guaranteed to be aligned with 8 byte boundary */ + if (st->indio_dev->scan_timestamp) + *((s64 *)(data + ((i + 3)/4)*4)) = st->last_timestamp; + + st->indio_dev->ring->access.store_to(st->indio_dev->ring, + (u8 *)data, + st->last_timestamp); + + iio_trigger_notify_done(st->indio_dev->trig); + kfree(data); + + return; +} +/* in these circumstances is it better to go with unaligned packing and + * deal with the cost?*/ +static int adis16300_data_rdy_ring_preenable(struct iio_dev *indio_dev) +{ + size_t size; + dev_dbg(&indio_dev->dev, "%s\n", __func__); + /* Check if there are any scan elements enabled, if not fail*/ + if (!(indio_dev->scan_count || indio_dev->scan_timestamp)) + return -EINVAL; + + if (indio_dev->ring->access.set_bpd) { + if (indio_dev->scan_timestamp) + if (indio_dev->scan_count) /* Timestamp and data */ + size = 4*sizeof(s64); + else /* Timestamp only */ + size = sizeof(s64); + else /* Data only */ + size = indio_dev->scan_count*sizeof(s16); + indio_dev->ring->access.set_bpd(indio_dev->ring, size); + } + + return 0; +} + +static int adis16300_data_rdy_ring_postenable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_attach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +static int adis16300_data_rdy_ring_predisable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_dettach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +void adis16300_unconfigure_ring(struct iio_dev *indio_dev) +{ + kfree(indio_dev->pollfunc); + iio_sw_rb_free(indio_dev->ring); +} + +int adis16300_configure_ring(struct iio_dev *indio_dev) +{ + int ret = 0; + struct adis16300_state *st = indio_dev->dev_data; + struct iio_ring_buffer *ring; + INIT_WORK(&st->work_trigger_to_ring, adis16300_trigger_bh_to_ring); + /* Set default scan mode */ + + iio_scan_mask_set(indio_dev, iio_scan_el_supply.number); + iio_scan_mask_set(indio_dev, iio_scan_el_gyro_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_y.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_z.number); + iio_scan_mask_set(indio_dev, iio_scan_el_temp.number); + iio_scan_mask_set(indio_dev, iio_scan_el_adc_0.number); + iio_scan_mask_set(indio_dev, iio_scan_el_incli_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_incli_y.number); + indio_dev->scan_timestamp = true; + + indio_dev->scan_el_attrs = &adis16300_scan_el_group; + + ring = iio_sw_rb_allocate(indio_dev); + if (!ring) { + ret = -ENOMEM; + return ret; + } + indio_dev->ring = ring; + /* Effectively select the ring buffer implementation */ + iio_ring_sw_register_funcs(&ring->access); + ring->preenable = &adis16300_data_rdy_ring_preenable; + ring->postenable = &adis16300_data_rdy_ring_postenable; + ring->predisable = &adis16300_data_rdy_ring_predisable; + ring->owner = THIS_MODULE; + + indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); + if (indio_dev->pollfunc == NULL) { + ret = -ENOMEM; + goto error_iio_sw_rb_free;; + } + indio_dev->pollfunc->poll_func_main = &adis16300_poll_func_th; + indio_dev->pollfunc->private_data = indio_dev; + indio_dev->modes |= INDIO_RING_TRIGGERED; + return 0; + +error_iio_sw_rb_free: + iio_sw_rb_free(indio_dev->ring); + return ret; +} + +int adis16300_initialize_ring(struct iio_ring_buffer *ring) +{ + return iio_ring_buffer_register(ring, 0); +} + +void adis16300_uninitialize_ring(struct iio_ring_buffer *ring) +{ + iio_ring_buffer_unregister(ring); +} diff --git a/drivers/staging/iio/imu/adis16300_trigger.c b/drivers/staging/iio/imu/adis16300_trigger.c new file mode 100644 index 0000000..54edb20b --- /dev/null +++ b/drivers/staging/iio/imu/adis16300_trigger.c @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../trigger.h" +#include "adis16300.h" + +/** + * adis16300_data_rdy_trig_poll() the event handler for the data rdy trig + **/ +static int adis16300_data_rdy_trig_poll(struct iio_dev *dev_info, + int index, + s64 timestamp, + int no_test) +{ + struct adis16300_state *st = iio_dev_get_devdata(dev_info); + struct iio_trigger *trig = st->trig; + + trig->timestamp = timestamp; + iio_trigger_poll(trig); + + return IRQ_HANDLED; +} + +IIO_EVENT_SH(data_rdy_trig, &adis16300_data_rdy_trig_poll); + +static DEVICE_ATTR(name, S_IRUGO, iio_trigger_read_name, NULL); + +static struct attribute *adis16300_trigger_attrs[] = { + &dev_attr_name.attr, + NULL, +}; + +static const struct attribute_group adis16300_trigger_attr_group = { + .attrs = adis16300_trigger_attrs, +}; + +/** + * adis16300_data_rdy_trigger_set_state() set datardy interrupt state + **/ +static int adis16300_data_rdy_trigger_set_state(struct iio_trigger *trig, + bool state) +{ + struct adis16300_state *st = trig->private_data; + struct iio_dev *indio_dev = st->indio_dev; + int ret = 0; + + dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state); + ret = adis16300_set_irq(&st->indio_dev->dev, state); + if (state == false) { + iio_remove_event_from_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0] + ->ev_list); + /* possible quirk with handler currently worked around + by ensuring the work queue is empty */ + flush_scheduled_work(); + } else { + iio_add_event_to_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0]->ev_list); + } + return ret; +} + +/** + * adis16300_trig_try_reen() try renabling irq for data rdy trigger + * @trig: the datardy trigger + **/ +static int adis16300_trig_try_reen(struct iio_trigger *trig) +{ + struct adis16300_state *st = trig->private_data; + enable_irq(st->us->irq); + /* irq reenabled so success! */ + return 0; +} + +int adis16300_probe_trigger(struct iio_dev *indio_dev) +{ + int ret; + struct adis16300_state *st = indio_dev->dev_data; + + st->trig = iio_allocate_trigger(); + st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL); + if (!st->trig->name) { + ret = -ENOMEM; + goto error_free_trig; + } + snprintf((char *)st->trig->name, + IIO_TRIGGER_NAME_LENGTH, + "adis16300-dev%d", indio_dev->id); + st->trig->dev.parent = &st->us->dev; + st->trig->owner = THIS_MODULE; + st->trig->private_data = st; + st->trig->set_trigger_state = &adis16300_data_rdy_trigger_set_state; + st->trig->try_reenable = &adis16300_trig_try_reen; + st->trig->control_attrs = &adis16300_trigger_attr_group; + ret = iio_trigger_register(st->trig); + + /* select default trigger */ + indio_dev->trig = st->trig; + if (ret) + goto error_free_trig_name; + + return 0; + +error_free_trig_name: + kfree(st->trig->name); +error_free_trig: + iio_free_trigger(st->trig); + + return ret; +} + +void adis16300_remove_trigger(struct iio_dev *indio_dev) +{ + struct adis16300_state *state = indio_dev->dev_data; + + iio_trigger_unregister(state->trig); + kfree(state->trig->name); + iio_free_trigger(state->trig); +} -- cgit v0.10.2 From a9d26f00b8b1b2a79e42cfa4ca20ec9a1c11c1d2 Mon Sep 17 00:00:00 2001 From: Barry Song Date: Tue, 4 May 2010 14:43:15 +0100 Subject: staging:iio:imu ADIS16400 and ADIS16405 driver Signed-off-by: Manuel Stahl Signed-off-by: Barry Song Acked-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/imu/Kconfig b/drivers/staging/iio/imu/Kconfig index 3fe4716..411804f 100644 --- a/drivers/staging/iio/imu/Kconfig +++ b/drivers/staging/iio/imu/Kconfig @@ -12,3 +12,13 @@ config ADIS16300 help Say yes here to build support for Analog Devices adis16300 four degrees of freedom inertial sensor. + +config ADIS16400 + tristate "Analog Devices ADIS16400/5 IMU SPI driver" + depends on SPI + select IIO_SW_RING + select IIO_RING_BUFFER + select IIO_TRIGGER + help + Say yes here to build support for Analog Devices adis16400/5 triaxial + inertial sensor with Magnetometer. \ No newline at end of file diff --git a/drivers/staging/iio/imu/Makefile b/drivers/staging/iio/imu/Makefile index 4cd5984..de454dd 100644 --- a/drivers/staging/iio/imu/Makefile +++ b/drivers/staging/iio/imu/Makefile @@ -4,3 +4,7 @@ adis16300-y := adis16300_core.o adis16300-$(CONFIG_IIO_RING_BUFFER) += adis16300_ring.o adis16300_trigger.o obj-$(CONFIG_ADIS16300) += adis16300.o + +adis16400-y := adis16400_core.o +adis16400-$(CONFIG_IIO_RING_BUFFER) += adis16400_ring.o adis16400_trigger.o +obj-$(CONFIG_ADIS16400) += adis16400.o \ No newline at end of file diff --git a/drivers/staging/iio/imu/adis16400.h b/drivers/staging/iio/imu/adis16400.h new file mode 100644 index 0000000..a8062f6 --- /dev/null +++ b/drivers/staging/iio/imu/adis16400.h @@ -0,0 +1,238 @@ +/* + * adis16400.h support Analog Devices ADIS16400 + * 3d 18g accelerometers, + * 3d gyroscopes, + * 3d 2.5gauss magnetometers via SPI + * + * Copyright (c) 2009 Manuel Stahl + * Copyright (c) 2007 Jonathan Cameron + * + * Loosely based upon lis3l02dq.h + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#ifndef SPI_ADIS16400_H_ +#define SPI_ADIS16400_H_ + +#define ADIS16400_STARTUP_DELAY 220 /* ms */ + +#define ADIS16400_READ_REG(a) a +#define ADIS16400_WRITE_REG(a) ((a) | 0x80) + +#define ADIS16400_FLASH_CNT 0x00 /* Flash memory write count */ +#define ADIS16400_SUPPLY_OUT 0x02 /* Power supply measurement */ +#define ADIS16400_XGYRO_OUT 0x04 /* X-axis gyroscope output */ +#define ADIS16400_YGYRO_OUT 0x06 /* Y-axis gyroscope output */ +#define ADIS16400_ZGYRO_OUT 0x08 /* Z-axis gyroscope output */ +#define ADIS16400_XACCL_OUT 0x0A /* X-axis accelerometer output */ +#define ADIS16400_YACCL_OUT 0x0C /* Y-axis accelerometer output */ +#define ADIS16400_ZACCL_OUT 0x0E /* Z-axis accelerometer output */ +#define ADIS16400_XMAGN_OUT 0x10 /* X-axis magnetometer measurement */ +#define ADIS16400_YMAGN_OUT 0x12 /* Y-axis magnetometer measurement */ +#define ADIS16400_ZMAGN_OUT 0x14 /* Z-axis magnetometer measurement */ +#define ADIS16400_TEMP_OUT 0x16 /* Temperature output */ +#define ADIS16400_AUX_ADC 0x18 /* Auxiliary ADC measurement */ + +/* Calibration parameters */ +#define ADIS16400_XGYRO_OFF 0x1A /* X-axis gyroscope bias offset factor */ +#define ADIS16400_YGYRO_OFF 0x1C /* Y-axis gyroscope bias offset factor */ +#define ADIS16400_ZGYRO_OFF 0x1E /* Z-axis gyroscope bias offset factor */ +#define ADIS16400_XACCL_OFF 0x20 /* X-axis acceleration bias offset factor */ +#define ADIS16400_YACCL_OFF 0x22 /* Y-axis acceleration bias offset factor */ +#define ADIS16400_ZACCL_OFF 0x24 /* Z-axis acceleration bias offset factor */ +#define ADIS16400_XMAGN_HIF 0x26 /* X-axis magnetometer, hard-iron factor */ +#define ADIS16400_YMAGN_HIF 0x28 /* Y-axis magnetometer, hard-iron factor */ +#define ADIS16400_ZMAGN_HIF 0x2A /* Z-axis magnetometer, hard-iron factor */ +#define ADIS16400_XMAGN_SIF 0x2C /* X-axis magnetometer, soft-iron factor */ +#define ADIS16400_YMAGN_SIF 0x2E /* Y-axis magnetometer, soft-iron factor */ +#define ADIS16400_ZMAGN_SIF 0x30 /* Z-axis magnetometer, soft-iron factor */ + +#define ADIS16400_GPIO_CTRL 0x32 /* Auxiliary digital input/output control */ +#define ADIS16400_MSC_CTRL 0x34 /* Miscellaneous control */ +#define ADIS16400_SMPL_PRD 0x36 /* Internal sample period (rate) control */ +#define ADIS16400_SENS_AVG 0x38 /* Dynamic range and digital filter control */ +#define ADIS16400_SLP_CNT 0x3A /* Sleep mode control */ +#define ADIS16400_DIAG_STAT 0x3C /* System status */ + +/* Alarm functions */ +#define ADIS16400_GLOB_CMD 0x3E /* System command */ +#define ADIS16400_ALM_MAG1 0x40 /* Alarm 1 amplitude threshold */ +#define ADIS16400_ALM_MAG2 0x42 /* Alarm 2 amplitude threshold */ +#define ADIS16400_ALM_SMPL1 0x44 /* Alarm 1 sample size */ +#define ADIS16400_ALM_SMPL2 0x46 /* Alarm 2 sample size */ +#define ADIS16400_ALM_CTRL 0x48 /* Alarm control */ +#define ADIS16400_AUX_DAC 0x4A /* Auxiliary DAC data */ + +#define ADIS16400_PRODUCT_ID 0x56 /* Product identifier */ +#define ADIS16400_PRODUCT_ID_DEFAULT 0x4015 /* Datasheet says 0x4105, I get 0x4015 */ + +#define ADIS16400_ERROR_ACTIVE (1<<14) +#define ADIS16400_NEW_DATA (1<<14) + +/* MSC_CTRL */ +#define ADIS16400_MSC_CTRL_MEM_TEST (1<<11) +#define ADIS16400_MSC_CTRL_INT_SELF_TEST (1<<10) +#define ADIS16400_MSC_CTRL_NEG_SELF_TEST (1<<9) +#define ADIS16400_MSC_CTRL_POS_SELF_TEST (1<<8) +#define ADIS16400_MSC_CTRL_GYRO_BIAS (1<<7) +#define ADIS16400_MSC_CTRL_ACCL_ALIGN (1<<6) +#define ADIS16400_MSC_CTRL_DATA_RDY_EN (1<<2) +#define ADIS16400_MSC_CTRL_DATA_RDY_POL_HIGH (1<<1) +#define ADIS16400_MSC_CTRL_DATA_RDY_DIO2 (1<<0) + +/* SMPL_PRD */ +#define ADIS16400_SMPL_PRD_TIME_BASE (1<<7) +#define ADIS16400_SMPL_PRD_DIV_MASK 0x7F + +/* DIAG_STAT */ +#define ADIS16400_DIAG_STAT_ZACCL_FAIL (1<<15) +#define ADIS16400_DIAG_STAT_YACCL_FAIL (1<<14) +#define ADIS16400_DIAG_STAT_XACCL_FAIL (1<<13) +#define ADIS16400_DIAG_STAT_XGYRO_FAIL (1<<12) +#define ADIS16400_DIAG_STAT_YGYRO_FAIL (1<<11) +#define ADIS16400_DIAG_STAT_ZGYRO_FAIL (1<<10) +#define ADIS16400_DIAG_STAT_ALARM2 (1<<9) +#define ADIS16400_DIAG_STAT_ALARM1 (1<<8) +#define ADIS16400_DIAG_STAT_FLASH_CHK (1<<6) +#define ADIS16400_DIAG_STAT_SELF_TEST (1<<5) +#define ADIS16400_DIAG_STAT_OVERFLOW (1<<4) +#define ADIS16400_DIAG_STAT_SPI_FAIL (1<<3) +#define ADIS16400_DIAG_STAT_FLASH_UPT (1<<2) +#define ADIS16400_DIAG_STAT_POWER_HIGH (1<<1) +#define ADIS16400_DIAG_STAT_POWER_LOW (1<<0) + +/* GLOB_CMD */ +#define ADIS16400_GLOB_CMD_SW_RESET (1<<7) +#define ADIS16400_GLOB_CMD_P_AUTO_NULL (1<<4) +#define ADIS16400_GLOB_CMD_FLASH_UPD (1<<3) +#define ADIS16400_GLOB_CMD_DAC_LATCH (1<<2) +#define ADIS16400_GLOB_CMD_FAC_CALIB (1<<1) +#define ADIS16400_GLOB_CMD_AUTO_NULL (1<<0) + +/* SLP_CNT */ +#define ADIS16400_SLP_CNT_POWER_OFF (1<<8) + +#define ADIS16400_MAX_TX 24 +#define ADIS16400_MAX_RX 24 + +#define ADIS16400_SPI_SLOW (u32)(300 * 1000) +#define ADIS16400_SPI_BURST (u32)(1000 * 1000) +#define ADIS16400_SPI_FAST (u32)(2000 * 1000) + +/** + * struct adis16400_state - device instance specific data + * @us: actual spi_device + * @work_trigger_to_ring: bh for triggered event handling + * @work_cont_thresh: CLEAN + * @inter: used to check if new interrupt has been triggered + * @last_timestamp: passing timestamp from th to bh of interrupt handler + * @indio_dev: industrial I/O device structure + * @trig: data ready trigger registered with iio + * @tx: transmit buffer + * @rx: recieve buffer + * @buf_lock: mutex to protect tx and rx + **/ +struct adis16400_state { + struct spi_device *us; + struct work_struct work_trigger_to_ring; + struct iio_work_cont work_cont_thresh; + s64 last_timestamp; + struct iio_dev *indio_dev; + struct iio_trigger *trig; + u8 *tx; + u8 *rx; + struct mutex buf_lock; +}; + +int adis16400_spi_write_reg_8(struct device *dev, + u8 reg_address, + u8 val); + +int adis16400_spi_read_burst(struct device *dev, u8 *rx); + +int adis16400_spi_read_sequence(struct device *dev, + u8 *tx, u8 *rx, int num); + +int adis16400_set_irq(struct device *dev, bool enable); + +int adis16400_reset(struct device *dev); + +int adis16400_stop_device(struct device *dev); + +int adis16400_check_status(struct device *dev); + +#ifdef CONFIG_IIO_RING_BUFFER +/* At the moment triggers are only used for ring buffer + * filling. This may change! + */ + +enum adis16400_scan { + ADIS16400_SCAN_SUPPLY, + ADIS16400_SCAN_GYRO_X, + ADIS16400_SCAN_GYRO_Y, + ADIS16400_SCAN_GYRO_Z, + ADIS16400_SCAN_ACC_X, + ADIS16400_SCAN_ACC_Y, + ADIS16400_SCAN_ACC_Z, + ADIS16400_SCAN_MAGN_X, + ADIS16400_SCAN_MAGN_Y, + ADIS16400_SCAN_MAGN_Z, + ADIS16400_SCAN_TEMP, + ADIS16400_SCAN_ADC_0 +}; + +void adis16400_remove_trigger(struct iio_dev *indio_dev); +int adis16400_probe_trigger(struct iio_dev *indio_dev); + +ssize_t adis16400_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf); + + +int adis16400_configure_ring(struct iio_dev *indio_dev); +void adis16400_unconfigure_ring(struct iio_dev *indio_dev); + +int adis16400_initialize_ring(struct iio_ring_buffer *ring); +void adis16400_uninitialize_ring(struct iio_ring_buffer *ring); +#else /* CONFIG_IIO_RING_BUFFER */ + +static inline void adis16400_remove_trigger(struct iio_dev *indio_dev) +{ +} + +static inline int adis16400_probe_trigger(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline ssize_t +adis16400_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return 0; +} + +static int adis16400_configure_ring(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline void adis16400_unconfigure_ring(struct iio_dev *indio_dev) +{ +} + +static inline int adis16400_initialize_ring(struct iio_ring_buffer *ring) +{ + return 0; +} + +static inline void adis16400_uninitialize_ring(struct iio_ring_buffer *ring) +{ +} + +#endif /* CONFIG_IIO_RING_BUFFER */ +#endif /* SPI_ADIS16400_H_ */ diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c new file mode 100644 index 0000000..27e4a73 --- /dev/null +++ b/drivers/staging/iio/imu/adis16400_core.c @@ -0,0 +1,849 @@ +/* + * adis16400.c support Analog Devices ADIS16400/5 + * 3d 2g Linear Accelerometers, + * 3d Gyroscopes, + * 3d Magnetometers via SPI + * + * Copyright (c) 2009 Manuel Stahl + * Copyright (c) 2007 Jonathan Cameron + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../accel/accel.h" +#include "../adc/adc.h" +#include "../gyro/gyro.h" +#include "../magnetometer/magnet.h" + +#include "adis16400.h" + +#define DRIVER_NAME "adis16400" + +/* At the moment the spi framework doesn't allow global setting of cs_change. + * It's in the likely to be added comment at the top of spi.h. + * This means that use cannot be made of spi_write etc. + */ + +/** + * adis16400_spi_write_reg_8() - write single byte to a register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the register to be written + * @val: the value to write + **/ +int adis16400_spi_write_reg_8(struct device *dev, + u8 reg_address, + u8 val) +{ + int ret; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16400_state *st = iio_dev_get_devdata(indio_dev); + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16400_WRITE_REG(reg_address); + st->tx[1] = val; + + ret = spi_write(st->us, st->tx, 2); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16400_spi_write_reg_16() - write 2 bytes to a pair of registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: value to be written + **/ +static int adis16400_spi_write_reg_16(struct device *dev, + u8 lower_reg_address, + u16 value) +{ + int ret; + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16400_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + }, { + .tx_buf = st->tx + 2, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16400_WRITE_REG(lower_reg_address); + st->tx[1] = value & 0xFF; + st->tx[2] = ADIS16400_WRITE_REG(lower_reg_address + 1); + st->tx[3] = (value >> 8) & 0xFF; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16400_spi_read_reg_16() - read 2 bytes from a 16-bit register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: somewhere to pass back the value read + **/ +static int adis16400_spi_read_reg_16(struct device *dev, + u8 lower_reg_address, + u16 *val) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16400_state *st = iio_dev_get_devdata(indio_dev); + int ret; + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + }, { + .rx_buf = st->rx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16400_READ_REG(lower_reg_address); + st->tx[1] = 0; + st->tx[2] = 0; + st->tx[3] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + if (ret) { + dev_err(&st->us->dev, + "problem when reading 16 bit register 0x%02X", + lower_reg_address); + goto error_ret; + } + *val = (st->rx[0] << 8) | st->rx[1]; + +error_ret: + mutex_unlock(&st->buf_lock); + return ret; +} + +/** + * adis16400_spi_read_burst() - read all data registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @rx: somewhere to pass back the value read (min size is 24 bytes) + **/ +int adis16400_spi_read_burst(struct device *dev, u8 *rx) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16400_state *st = iio_dev_get_devdata(indio_dev); + u32 old_speed_hz = st->us->max_speed_hz; + int ret; + + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 0, + }, { + .rx_buf = rx, + .bits_per_word = 8, + .len = 24, + .cs_change = 1, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16400_READ_REG(ADIS16400_GLOB_CMD); + st->tx[1] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + + st->us->max_speed_hz = min(ADIS16400_SPI_BURST, old_speed_hz); + spi_setup(st->us); + + ret = spi_sync(st->us, &msg); + if (ret) + dev_err(&st->us->dev, "problem when burst reading"); + + st->us->max_speed_hz = old_speed_hz; + spi_setup(st->us); + mutex_unlock(&st->buf_lock); + return ret; +} + +/** + * adis16400_spi_read_sequence() - read a sequence of 16-bit registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @tx: register addresses in bytes 0,2,4,6... (min size is 2*num bytes) + * @rx: somewhere to pass back the value read (min size is 2*num bytes) + **/ +int adis16400_spi_read_sequence(struct device *dev, + u8 *tx, u8 *rx, int num) +{ + struct spi_message msg; + struct spi_transfer *xfers; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16400_state *st = iio_dev_get_devdata(indio_dev); + int ret, i; + + xfers = kzalloc(num + 1, GFP_KERNEL); + if (xfers == NULL) { + dev_err(&st->us->dev, "memory alloc failed"); + ret = -ENOMEM; + goto error_ret; + } + + /* tx: |add1|addr2|addr3|...|addrN |zero| + * rx: |zero|res1 |res2 |...|resN-1|resN| */ + spi_message_init(&msg); + for (i = 0; i < num + 1; i++) { + if (i > 0) + xfers[i].rx_buf = st->rx + 2*(i - 1); + if (i < num) + xfers[i].tx_buf = st->tx + 2*i; + xfers[i].bits_per_word = 8; + xfers[i].len = 2; + xfers[i].cs_change = 1; + spi_message_add_tail(&xfers[i], &msg); + } + + mutex_lock(&st->buf_lock); + + ret = spi_sync(st->us, &msg); + if (ret) + dev_err(&st->us->dev, "problem when reading sequence"); + + mutex_unlock(&st->buf_lock); + kfree(xfers); + +error_ret: + return ret; +} + +static ssize_t adis16400_spi_read_signed(struct device *dev, + struct device_attribute *attr, + char *buf, + unsigned bits) +{ + int ret; + s16 val = 0; + unsigned shift = 16 - bits; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16400_spi_read_reg_16(dev, this_attr->address, (u16 *)&val); + if (ret) + return ret; + + if (val & ADIS16400_ERROR_ACTIVE) + adis16400_check_status(dev); + val = ((s16)(val << shift) >> shift); + return sprintf(buf, "%d\n", val); +} + +static ssize_t adis16400_read_12bit_unsigned(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret; + u16 val = 0; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16400_spi_read_reg_16(dev, this_attr->address, &val); + if (ret) + return ret; + + if (val & ADIS16400_ERROR_ACTIVE) + adis16400_check_status(dev); + + return sprintf(buf, "%u\n", val & 0x0FFF); +} + +static ssize_t adis16400_read_14bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16400_spi_read_signed(dev, attr, buf, 14); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16400_read_12bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16400_spi_read_signed(dev, attr, buf, 12); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + + +static ssize_t adis16400_write_16bit(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + int ret; + long val; + + ret = strict_strtol(buf, 10, &val); + if (ret) + goto error_ret; + ret = adis16400_spi_write_reg_16(dev, this_attr->address, val); + +error_ret: + return ret ? ret : len; +} + +static ssize_t adis16400_read_frequency(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret, len = 0; + u16 t; + int sps; + ret = adis16400_spi_read_reg_16(dev, + ADIS16400_SMPL_PRD, + &t); + if (ret) + return ret; + sps = (t & ADIS16400_SMPL_PRD_TIME_BASE) ? 53 : 1638; + sps /= (t & ADIS16400_SMPL_PRD_DIV_MASK) + 1; + len = sprintf(buf, "%d SPS\n", sps); + return len; +} + +static ssize_t adis16400_write_frequency(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16400_state *st = iio_dev_get_devdata(indio_dev); + long val; + int ret; + u8 t; + + ret = strict_strtol(buf, 10, &val); + if (ret) + return ret; + + mutex_lock(&indio_dev->mlock); + + t = (1638 / val); + if (t > 0) + t--; + t &= ADIS16400_SMPL_PRD_DIV_MASK; + if ((t & ADIS16400_SMPL_PRD_DIV_MASK) >= 0x0A) + st->us->max_speed_hz = ADIS16400_SPI_SLOW; + else + st->us->max_speed_hz = ADIS16400_SPI_FAST; + + ret = adis16400_spi_write_reg_8(dev, + ADIS16400_SMPL_PRD, + t); + + mutex_unlock(&indio_dev->mlock); + + return ret ? ret : len; +} + +static ssize_t adis16400_write_reset(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + if (len < 1) + return -1; + switch (buf[0]) { + case '1': + case 'y': + case 'Y': + return adis16400_reset(dev); + } + return -1; +} + + + +int adis16400_set_irq(struct device *dev, bool enable) +{ + int ret; + u16 msc; + ret = adis16400_spi_read_reg_16(dev, ADIS16400_MSC_CTRL, &msc); + if (ret) + goto error_ret; + + msc |= ADIS16400_MSC_CTRL_DATA_RDY_POL_HIGH; + if (enable) + msc |= ADIS16400_MSC_CTRL_DATA_RDY_EN; + else + msc &= ~ADIS16400_MSC_CTRL_DATA_RDY_EN; + + ret = adis16400_spi_write_reg_16(dev, ADIS16400_MSC_CTRL, msc); + if (ret) + goto error_ret; + +error_ret: + return ret; +} + +int adis16400_reset(struct device *dev) +{ + int ret; + ret = adis16400_spi_write_reg_8(dev, + ADIS16400_GLOB_CMD, + ADIS16400_GLOB_CMD_SW_RESET); + if (ret) + dev_err(dev, "problem resetting device"); + + return ret; +} + +/* Power down the device */ +int adis16400_stop_device(struct device *dev) +{ + int ret; + u16 val = ADIS16400_SLP_CNT_POWER_OFF; + + ret = adis16400_spi_write_reg_16(dev, ADIS16400_SLP_CNT, val); + if (ret) + dev_err(dev, "problem with turning device off: SLP_CNT"); + + return ret; +} + +int adis16400_self_test(struct device *dev) +{ + int ret; + ret = adis16400_spi_write_reg_16(dev, + ADIS16400_MSC_CTRL, + ADIS16400_MSC_CTRL_MEM_TEST); + if (ret) { + dev_err(dev, "problem starting self test"); + goto err_ret; + } + + adis16400_check_status(dev); + +err_ret: + return ret; +} + +int adis16400_check_status(struct device *dev) +{ + u16 status; + int ret; + + ret = adis16400_spi_read_reg_16(dev, ADIS16400_DIAG_STAT, &status); + + if (ret < 0) { + dev_err(dev, "Reading status failed\n"); + goto error_ret; + } + ret = status; + if (status & ADIS16400_DIAG_STAT_ZACCL_FAIL) + dev_err(dev, "Z-axis accelerometer self-test failure\n"); + if (status & ADIS16400_DIAG_STAT_YACCL_FAIL) + dev_err(dev, "Y-axis accelerometer self-test failure\n"); + if (status & ADIS16400_DIAG_STAT_XACCL_FAIL) + dev_err(dev, "X-axis accelerometer self-test failure\n"); + if (status & ADIS16400_DIAG_STAT_XGYRO_FAIL) + dev_err(dev, "X-axis gyroscope self-test failure\n"); + if (status & ADIS16400_DIAG_STAT_YGYRO_FAIL) + dev_err(dev, "Y-axis gyroscope self-test failure\n"); + if (status & ADIS16400_DIAG_STAT_ZGYRO_FAIL) + dev_err(dev, "Z-axis gyroscope self-test failure\n"); + if (status & ADIS16400_DIAG_STAT_ALARM2) + dev_err(dev, "Alarm 2 active\n"); + if (status & ADIS16400_DIAG_STAT_ALARM1) + dev_err(dev, "Alarm 1 active\n"); + if (status & ADIS16400_DIAG_STAT_FLASH_CHK) + dev_err(dev, "Flash checksum error\n"); + if (status & ADIS16400_DIAG_STAT_SELF_TEST) + dev_err(dev, "Self test error\n"); + if (status & ADIS16400_DIAG_STAT_OVERFLOW) + dev_err(dev, "Sensor overrange\n"); + if (status & ADIS16400_DIAG_STAT_SPI_FAIL) + dev_err(dev, "SPI failure\n"); + if (status & ADIS16400_DIAG_STAT_FLASH_UPT) + dev_err(dev, "Flash update failed\n"); + if (status & ADIS16400_DIAG_STAT_POWER_HIGH) + dev_err(dev, "Power supply above 5.25V\n"); + if (status & ADIS16400_DIAG_STAT_POWER_LOW) + dev_err(dev, "Power supply below 4.75V\n"); + +error_ret: + return ret; +} + +static int adis16400_initial_setup(struct adis16400_state *st) +{ + int ret; + u16 prod_id, smp_prd; + struct device *dev = &st->indio_dev->dev; + + /* use low spi speed for init */ + st->us->max_speed_hz = ADIS16400_SPI_SLOW; + st->us->mode = SPI_MODE_3; + spi_setup(st->us); + + /* Disable IRQ */ + ret = adis16400_set_irq(dev, false); + if (ret) { + dev_err(dev, "disable irq failed"); + goto err_ret; + } + + /* Do self test */ + + /* Read status register to check the result */ + ret = adis16400_check_status(dev); + if (ret) { + adis16400_reset(dev); + dev_err(dev, "device not playing ball -> reset"); + msleep(ADIS16400_STARTUP_DELAY); + ret = adis16400_check_status(dev); + if (ret) { + dev_err(dev, "giving up"); + goto err_ret; + } + } + + ret = adis16400_spi_read_reg_16(dev, ADIS16400_PRODUCT_ID, &prod_id); + if (ret) + goto err_ret; + + if (prod_id != ADIS16400_PRODUCT_ID_DEFAULT) + dev_warn(dev, "unknown product id"); + + printk(KERN_INFO DRIVER_NAME ": prod_id 0x%04x at CS%d (irq %d)\n", + prod_id, st->us->chip_select, st->us->irq); + + /* use high spi speed if possible */ + ret = adis16400_spi_read_reg_16(dev, ADIS16400_SMPL_PRD, &smp_prd); + if (!ret && (smp_prd & ADIS16400_SMPL_PRD_DIV_MASK) < 0x0A) { + st->us->max_speed_hz = ADIS16400_SPI_SLOW; + spi_setup(st->us); + } + + +err_ret: + + return ret; +} + +static IIO_DEV_ATTR_ACCEL_X_OFFSET(S_IWUSR | S_IRUGO, + adis16400_read_12bit_signed, + adis16400_write_16bit, + ADIS16400_XACCL_OFF); + +static IIO_DEV_ATTR_ACCEL_Y_OFFSET(S_IWUSR | S_IRUGO, + adis16400_read_12bit_signed, + adis16400_write_16bit, + ADIS16400_YACCL_OFF); + +static IIO_DEV_ATTR_ACCEL_Z_OFFSET(S_IWUSR | S_IRUGO, + adis16400_read_12bit_signed, + adis16400_write_16bit, + ADIS16400_ZACCL_OFF); + +static IIO_DEV_ATTR_IN_NAMED_RAW(supply, adis16400_read_14bit_signed, + ADIS16400_SUPPLY_OUT); +static IIO_CONST_ATTR(in_supply_scale, "0.002418"); + +static IIO_DEV_ATTR_GYRO_X(adis16400_read_14bit_signed, + ADIS16400_XGYRO_OUT); +static IIO_DEV_ATTR_GYRO_Y(adis16400_read_14bit_signed, + ADIS16400_YGYRO_OUT); +static IIO_DEV_ATTR_GYRO_Z(adis16400_read_14bit_signed, + ADIS16400_ZGYRO_OUT); +static IIO_CONST_ATTR(gyro_scale, "0.05 deg/s"); + +static IIO_DEV_ATTR_ACCEL_X(adis16400_read_14bit_signed, + ADIS16400_XACCL_OUT); +static IIO_DEV_ATTR_ACCEL_Y(adis16400_read_14bit_signed, + ADIS16400_YACCL_OUT); +static IIO_DEV_ATTR_ACCEL_Z(adis16400_read_14bit_signed, + ADIS16400_ZACCL_OUT); +static IIO_CONST_ATTR(accel_scale, "0.00333 g"); + +static IIO_DEV_ATTR_MAGN_X(adis16400_read_14bit_signed, + ADIS16400_XMAGN_OUT); +static IIO_DEV_ATTR_MAGN_Y(adis16400_read_14bit_signed, + ADIS16400_YMAGN_OUT); +static IIO_DEV_ATTR_MAGN_Z(adis16400_read_14bit_signed, + ADIS16400_ZMAGN_OUT); +static IIO_CONST_ATTR(magn_scale, "0.0005 Gs"); + + +static IIO_DEV_ATTR_TEMP(adis16400_read_12bit_signed); +static IIO_CONST_ATTR(temp_offset, "198.16 K"); +static IIO_CONST_ATTR(temp_scale, "0.14 K"); + +static IIO_DEV_ATTR_IN_RAW(0, adis16400_read_12bit_unsigned, + ADIS16400_AUX_ADC); +static IIO_CONST_ATTR(in0_scale, "0.000806"); + +static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, + adis16400_read_frequency, + adis16400_write_frequency); + +static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16400_write_reset, 0); + +static IIO_CONST_ATTR_AVAIL_SAMP_FREQ("409 546 819 1638"); + +static IIO_CONST_ATTR(name, "adis16400"); + +static struct attribute *adis16400_event_attributes[] = { + NULL +}; + +static struct attribute_group adis16400_event_attribute_group = { + .attrs = adis16400_event_attributes, +}; + +static struct attribute *adis16400_attributes[] = { + &iio_dev_attr_accel_x_offset.dev_attr.attr, + &iio_dev_attr_accel_y_offset.dev_attr.attr, + &iio_dev_attr_accel_z_offset.dev_attr.attr, + &iio_dev_attr_in_supply_raw.dev_attr.attr, + &iio_const_attr_in_supply_scale.dev_attr.attr, + &iio_dev_attr_gyro_x.dev_attr.attr, + &iio_dev_attr_gyro_y.dev_attr.attr, + &iio_dev_attr_gyro_z.dev_attr.attr, + &iio_const_attr_gyro_scale.dev_attr.attr, + &iio_dev_attr_accel_x_raw.dev_attr.attr, + &iio_dev_attr_accel_y_raw.dev_attr.attr, + &iio_dev_attr_accel_z_raw.dev_attr.attr, + &iio_const_attr_accel_scale.dev_attr.attr, + &iio_dev_attr_magn_x.dev_attr.attr, + &iio_dev_attr_magn_y.dev_attr.attr, + &iio_dev_attr_magn_z.dev_attr.attr, + &iio_const_attr_magn_scale.dev_attr.attr, + &iio_dev_attr_temp.dev_attr.attr, + &iio_const_attr_temp_offset.dev_attr.attr, + &iio_const_attr_temp_scale.dev_attr.attr, + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_const_attr_in0_scale.dev_attr.attr, + &iio_dev_attr_sampling_frequency.dev_attr.attr, + &iio_const_attr_available_sampling_frequency.dev_attr.attr, + &iio_dev_attr_reset.dev_attr.attr, + &iio_const_attr_name.dev_attr.attr, + NULL +}; + +static const struct attribute_group adis16400_attribute_group = { + .attrs = adis16400_attributes, +}; + +static int __devinit adis16400_probe(struct spi_device *spi) +{ + int ret, regdone = 0; + struct adis16400_state *st = kzalloc(sizeof *st, GFP_KERNEL); + if (!st) { + ret = -ENOMEM; + goto error_ret; + } + /* this is only used for removal purposes */ + spi_set_drvdata(spi, st); + + /* Allocate the comms buffers */ + st->rx = kzalloc(sizeof(*st->rx)*ADIS16400_MAX_RX, GFP_KERNEL); + if (st->rx == NULL) { + ret = -ENOMEM; + goto error_free_st; + } + st->tx = kzalloc(sizeof(*st->tx)*ADIS16400_MAX_TX, GFP_KERNEL); + if (st->tx == NULL) { + ret = -ENOMEM; + goto error_free_rx; + } + st->us = spi; + mutex_init(&st->buf_lock); + /* setup the industrialio driver allocated elements */ + st->indio_dev = iio_allocate_device(); + if (st->indio_dev == NULL) { + ret = -ENOMEM; + goto error_free_tx; + } + + st->indio_dev->dev.parent = &spi->dev; + st->indio_dev->num_interrupt_lines = 1; + st->indio_dev->event_attrs = &adis16400_event_attribute_group; + st->indio_dev->attrs = &adis16400_attribute_group; + st->indio_dev->dev_data = (void *)(st); + st->indio_dev->driver_module = THIS_MODULE; + st->indio_dev->modes = INDIO_DIRECT_MODE; + + ret = adis16400_configure_ring(st->indio_dev); + if (ret) + goto error_free_dev; + + ret = iio_device_register(st->indio_dev); + if (ret) + goto error_unreg_ring_funcs; + regdone = 1; + + ret = adis16400_initialize_ring(st->indio_dev->ring); + if (ret) { + printk(KERN_ERR "failed to initialize the ring\n"); + goto error_unreg_ring_funcs; + } + + if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) { +#if 0 /* fixme: here we should support */ + iio_init_work_cont(&st->work_cont_thresh, + NULL, + adis16400_thresh_handler_bh_no_check, + 0, + 0, + st); +#endif + ret = iio_register_interrupt_line(spi->irq, + st->indio_dev, + 0, + IRQF_TRIGGER_RISING, + "adis16400"); + if (ret) + goto error_uninitialize_ring; + + ret = adis16400_probe_trigger(st->indio_dev); + if (ret) + goto error_unregister_line; + } + + /* Get the device into a sane initial state */ + ret = adis16400_initial_setup(st); + if (ret) + goto error_remove_trigger; + return 0; + +error_remove_trigger: + if (st->indio_dev->modes & INDIO_RING_TRIGGERED) + adis16400_remove_trigger(st->indio_dev); +error_unregister_line: + if (st->indio_dev->modes & INDIO_RING_TRIGGERED) + iio_unregister_interrupt_line(st->indio_dev, 0); +error_uninitialize_ring: + adis16400_uninitialize_ring(st->indio_dev->ring); +error_unreg_ring_funcs: + adis16400_unconfigure_ring(st->indio_dev); +error_free_dev: + if (regdone) + iio_device_unregister(st->indio_dev); + else + iio_free_device(st->indio_dev); +error_free_tx: + kfree(st->tx); +error_free_rx: + kfree(st->rx); +error_free_st: + kfree(st); +error_ret: + return ret; +} + +/* fixme, confirm ordering in this function */ +static int adis16400_remove(struct spi_device *spi) +{ + int ret; + struct adis16400_state *st = spi_get_drvdata(spi); + struct iio_dev *indio_dev = st->indio_dev; + + ret = adis16400_stop_device(&(indio_dev->dev)); + if (ret) + goto err_ret; + + flush_scheduled_work(); + + adis16400_remove_trigger(indio_dev); + if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0) + iio_unregister_interrupt_line(indio_dev, 0); + + adis16400_uninitialize_ring(indio_dev->ring); + adis16400_unconfigure_ring(indio_dev); + iio_device_unregister(indio_dev); + kfree(st->tx); + kfree(st->rx); + kfree(st); + + return 0; + +err_ret: + return ret; +} + +static struct spi_driver adis16400_driver = { + .driver = { + .name = "adis16400", + .owner = THIS_MODULE, + }, + .probe = adis16400_probe, + .remove = __devexit_p(adis16400_remove), +}; + +static __init int adis16400_init(void) +{ + return spi_register_driver(&adis16400_driver); +} +module_init(adis16400_init); + +static __exit void adis16400_exit(void) +{ + spi_unregister_driver(&adis16400_driver); +} +module_exit(adis16400_exit); + +MODULE_AUTHOR("Manuel Stahl "); +MODULE_DESCRIPTION("Analog Devices ADIS16400/5 IMU SPI driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/iio/imu/adis16400_ring.c b/drivers/staging/iio/imu/adis16400_ring.c new file mode 100644 index 0000000..5529b32 --- /dev/null +++ b/drivers/staging/iio/imu/adis16400_ring.c @@ -0,0 +1,245 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../ring_sw.h" +#include "../accel/accel.h" +#include "../trigger.h" +#include "adis16400.h" + +/** + * combine_8_to_16() utility function to munge to u8s into u16 + **/ +static inline u16 combine_8_to_16(u8 lower, u8 upper) +{ + u16 _lower = lower; + u16 _upper = upper; + return _lower | (_upper << 8); +} + +static IIO_SCAN_EL_C(supply, ADIS16400_SCAN_SUPPLY, IIO_SIGNED(14), + ADIS16400_SUPPLY_OUT, NULL); + +static IIO_SCAN_EL_C(gyro_x, ADIS16400_SCAN_GYRO_X, IIO_SIGNED(14), + ADIS16400_XGYRO_OUT, NULL); +static IIO_SCAN_EL_C(gyro_y, ADIS16400_SCAN_GYRO_Y, IIO_SIGNED(14), + ADIS16400_YGYRO_OUT, NULL); +static IIO_SCAN_EL_C(gyro_z, ADIS16400_SCAN_GYRO_Z, IIO_SIGNED(14), + ADIS16400_ZGYRO_OUT, NULL); + +static IIO_SCAN_EL_C(accel_x, ADIS16400_SCAN_ACC_X, IIO_SIGNED(14), + ADIS16400_XACCL_OUT, NULL); +static IIO_SCAN_EL_C(accel_y, ADIS16400_SCAN_ACC_Y, IIO_SIGNED(14), + ADIS16400_YACCL_OUT, NULL); +static IIO_SCAN_EL_C(accel_z, ADIS16400_SCAN_ACC_Z, IIO_SIGNED(14), + ADIS16400_ZACCL_OUT, NULL); + +static IIO_SCAN_EL_C(magn_x, ADIS16400_SCAN_MAGN_X, IIO_SIGNED(14), + ADIS16400_XMAGN_OUT, NULL); +static IIO_SCAN_EL_C(magn_y, ADIS16400_SCAN_MAGN_Y, IIO_SIGNED(14), + ADIS16400_YMAGN_OUT, NULL); +static IIO_SCAN_EL_C(magn_z, ADIS16400_SCAN_MAGN_Z, IIO_SIGNED(14), + ADIS16400_ZMAGN_OUT, NULL); + +static IIO_SCAN_EL_C(temp, ADIS16400_SCAN_TEMP, IIO_SIGNED(12), + ADIS16400_TEMP_OUT, NULL); +static IIO_SCAN_EL_C(adc_0, ADIS16400_SCAN_ADC_0, IIO_SIGNED(12), + ADIS16400_AUX_ADC, NULL); + +static IIO_SCAN_EL_TIMESTAMP(12); + +static struct attribute *adis16400_scan_el_attrs[] = { + &iio_scan_el_supply.dev_attr.attr, + &iio_scan_el_gyro_x.dev_attr.attr, + &iio_scan_el_gyro_y.dev_attr.attr, + &iio_scan_el_gyro_z.dev_attr.attr, + &iio_scan_el_accel_x.dev_attr.attr, + &iio_scan_el_accel_y.dev_attr.attr, + &iio_scan_el_accel_z.dev_attr.attr, + &iio_scan_el_magn_x.dev_attr.attr, + &iio_scan_el_magn_y.dev_attr.attr, + &iio_scan_el_magn_z.dev_attr.attr, + &iio_scan_el_temp.dev_attr.attr, + &iio_scan_el_adc_0.dev_attr.attr, + &iio_scan_el_timestamp.dev_attr.attr, + NULL, +}; + +static struct attribute_group adis16400_scan_el_group = { + .attrs = adis16400_scan_el_attrs, + .name = "scan_elements", +}; + +/** + * adis16400_poll_func_th() top half interrupt handler called by trigger + * @private_data: iio_dev + **/ +static void adis16400_poll_func_th(struct iio_dev *indio_dev) +{ + struct adis16400_state *st = iio_dev_get_devdata(indio_dev); + st->last_timestamp = indio_dev->trig->timestamp; + schedule_work(&st->work_trigger_to_ring); + /* Indicate that this interrupt is being handled */ + + /* Technically this is trigger related, but without this + * handler running there is currently no way for the interrupt + * to clear. + */ +} + +/* Whilst this makes a lot of calls to iio_sw_ring functions - it is to device + * specific to be rolled into the core. + */ +static void adis16400_trigger_bh_to_ring(struct work_struct *work_s) +{ + struct adis16400_state *st + = container_of(work_s, struct adis16400_state, + work_trigger_to_ring); + + int i = 0; + s16 *data; + size_t datasize = st->indio_dev + ->ring->access.get_bpd(st->indio_dev->ring); + + data = kmalloc(datasize , GFP_KERNEL); + if (data == NULL) { + dev_err(&st->us->dev, "memory alloc failed in ring bh"); + return; + } + + if (st->indio_dev->scan_count) + if (adis16400_spi_read_burst(&st->indio_dev->dev, st->rx) >= 0) + for (; i < st->indio_dev->scan_count; i++) { + data[i] = combine_8_to_16(st->rx[i*2+1], + st->rx[i*2]); + } + + /* Guaranteed to be aligned with 8 byte boundary */ + if (st->indio_dev->scan_timestamp) + *((s64 *)(data + ((i + 3)/4)*4)) = st->last_timestamp; + + st->indio_dev->ring->access.store_to(st->indio_dev->ring, + (u8 *)data, + st->last_timestamp); + + iio_trigger_notify_done(st->indio_dev->trig); + kfree(data); + + return; +} +/* in these circumstances is it better to go with unaligned packing and + * deal with the cost?*/ +static int adis16400_data_rdy_ring_preenable(struct iio_dev *indio_dev) +{ + size_t size; + dev_dbg(&indio_dev->dev, "%s\n", __func__); + /* Check if there are any scan elements enabled, if not fail*/ + if (!(indio_dev->scan_count || indio_dev->scan_timestamp)) + return -EINVAL; + + if (indio_dev->ring->access.set_bpd) { + if (indio_dev->scan_timestamp) + if (indio_dev->scan_count) /* Timestamp and data */ + size = 6*sizeof(s64); + else /* Timestamp only */ + size = sizeof(s64); + else /* Data only */ + size = indio_dev->scan_count*sizeof(s16); + indio_dev->ring->access.set_bpd(indio_dev->ring, size); + } + + return 0; +} + +static int adis16400_data_rdy_ring_postenable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_attach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +static int adis16400_data_rdy_ring_predisable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_dettach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +void adis16400_unconfigure_ring(struct iio_dev *indio_dev) +{ + kfree(indio_dev->pollfunc); + iio_sw_rb_free(indio_dev->ring); +} + +int adis16400_configure_ring(struct iio_dev *indio_dev) +{ + int ret = 0; + struct adis16400_state *st = indio_dev->dev_data; + struct iio_ring_buffer *ring; + INIT_WORK(&st->work_trigger_to_ring, adis16400_trigger_bh_to_ring); + /* Set default scan mode */ + + iio_scan_mask_set(indio_dev, iio_scan_el_supply.number); + iio_scan_mask_set(indio_dev, iio_scan_el_gyro_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_gyro_y.number); + iio_scan_mask_set(indio_dev, iio_scan_el_gyro_z.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_y.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_z.number); + iio_scan_mask_set(indio_dev, iio_scan_el_magn_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_magn_y.number); + iio_scan_mask_set(indio_dev, iio_scan_el_magn_z.number); + iio_scan_mask_set(indio_dev, iio_scan_el_temp.number); + iio_scan_mask_set(indio_dev, iio_scan_el_adc_0.number); + indio_dev->scan_timestamp = true; + + indio_dev->scan_el_attrs = &adis16400_scan_el_group; + + ring = iio_sw_rb_allocate(indio_dev); + if (!ring) { + ret = -ENOMEM; + return ret; + } + indio_dev->ring = ring; + /* Effectively select the ring buffer implementation */ + iio_ring_sw_register_funcs(&ring->access); + ring->preenable = &adis16400_data_rdy_ring_preenable; + ring->postenable = &adis16400_data_rdy_ring_postenable; + ring->predisable = &adis16400_data_rdy_ring_predisable; + ring->owner = THIS_MODULE; + + indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); + if (indio_dev->pollfunc == NULL) { + ret = -ENOMEM; + goto error_iio_sw_rb_free;; + } + indio_dev->pollfunc->poll_func_main = &adis16400_poll_func_th; + indio_dev->pollfunc->private_data = indio_dev; + indio_dev->modes |= INDIO_RING_TRIGGERED; + return 0; + +error_iio_sw_rb_free: + iio_sw_rb_free(indio_dev->ring); + return ret; +} + +int adis16400_initialize_ring(struct iio_ring_buffer *ring) +{ + return iio_ring_buffer_register(ring, 0); +} + +void adis16400_uninitialize_ring(struct iio_ring_buffer *ring) +{ + iio_ring_buffer_unregister(ring); +} diff --git a/drivers/staging/iio/imu/adis16400_trigger.c b/drivers/staging/iio/imu/adis16400_trigger.c new file mode 100644 index 0000000..3b3250a --- /dev/null +++ b/drivers/staging/iio/imu/adis16400_trigger.c @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../trigger.h" +#include "adis16400.h" + +/** + * adis16400_data_rdy_trig_poll() the event handler for the data rdy trig + **/ +static int adis16400_data_rdy_trig_poll(struct iio_dev *dev_info, + int index, + s64 timestamp, + int no_test) +{ + struct adis16400_state *st = iio_dev_get_devdata(dev_info); + struct iio_trigger *trig = st->trig; + + trig->timestamp = timestamp; + iio_trigger_poll(trig); + + return IRQ_HANDLED; +} + +IIO_EVENT_SH(data_rdy_trig, &adis16400_data_rdy_trig_poll); + +static DEVICE_ATTR(name, S_IRUGO, iio_trigger_read_name, NULL); + +static struct attribute *adis16400_trigger_attrs[] = { + &dev_attr_name.attr, + NULL, +}; + +static const struct attribute_group adis16400_trigger_attr_group = { + .attrs = adis16400_trigger_attrs, +}; + +/** + * adis16400_data_rdy_trigger_set_state() set datardy interrupt state + **/ +static int adis16400_data_rdy_trigger_set_state(struct iio_trigger *trig, + bool state) +{ + struct adis16400_state *st = trig->private_data; + struct iio_dev *indio_dev = st->indio_dev; + int ret = 0; + + dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state); + ret = adis16400_set_irq(&st->indio_dev->dev, state); + if (state == false) { + iio_remove_event_from_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0] + ->ev_list); + /* possible quirk with handler currently worked around + by ensuring the work queue is empty */ + flush_scheduled_work(); + } else { + iio_add_event_to_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0]->ev_list); + } + return ret; +} + +/** + * adis16400_trig_try_reen() try renabling irq for data rdy trigger + * @trig: the datardy trigger + **/ +static int adis16400_trig_try_reen(struct iio_trigger *trig) +{ + struct adis16400_state *st = trig->private_data; + enable_irq(st->us->irq); + /* irq reenabled so success! */ + return 0; +} + +int adis16400_probe_trigger(struct iio_dev *indio_dev) +{ + int ret; + struct adis16400_state *st = indio_dev->dev_data; + + st->trig = iio_allocate_trigger(); + st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL); + if (!st->trig->name) { + ret = -ENOMEM; + goto error_free_trig; + } + snprintf((char *)st->trig->name, + IIO_TRIGGER_NAME_LENGTH, + "adis16400-dev%d", indio_dev->id); + st->trig->dev.parent = &st->us->dev; + st->trig->owner = THIS_MODULE; + st->trig->private_data = st; + st->trig->set_trigger_state = &adis16400_data_rdy_trigger_set_state; + st->trig->try_reenable = &adis16400_trig_try_reen; + st->trig->control_attrs = &adis16400_trigger_attr_group; + ret = iio_trigger_register(st->trig); + + /* select default trigger */ + indio_dev->trig = st->trig; + if (ret) + goto error_free_trig_name; + + return 0; + +error_free_trig_name: + kfree(st->trig->name); +error_free_trig: + iio_free_trigger(st->trig); + + return ret; +} + +void adis16400_remove_trigger(struct iio_dev *indio_dev) +{ + struct adis16400_state *state = indio_dev->dev_data; + + iio_trigger_unregister(state->trig); + kfree(state->trig->name); + iio_free_trigger(state->trig); +} diff --git a/drivers/staging/iio/magnetometer/magnet.h b/drivers/staging/iio/magnetometer/magnet.h new file mode 100644 index 0000000..6f6c6ed --- /dev/null +++ b/drivers/staging/iio/magnetometer/magnet.h @@ -0,0 +1,31 @@ + +#include "../sysfs.h" + +/* Magnetometer types of attribute */ + +#define IIO_DEV_ATTR_MAGN_X_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(magn_x_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_MAGN_Y_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(magn_y_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_MAGN_Z_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(magn_z_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_MAGN_X_GAIN(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(magn_x_gain, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_MAGN_Y_GAIN(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(magn_y_gain, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_MAGN_Z_GAIN(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(magn_z_gain, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_MAGN_X(_show, _addr) \ + IIO_DEVICE_ATTR(magn_x, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_MAGN_Y(_show, _addr) \ + IIO_DEVICE_ATTR(magn_y, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_MAGN_Z(_show, _addr) \ + IIO_DEVICE_ATTR(magn_z, S_IRUGO, _show, NULL, _addr) -- cgit v0.10.2 From 375d65db27544a183aed5e14aa2ed487c796c78d Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Tue, 4 May 2010 20:40:12 +0100 Subject: Staging: rar and memrar updates rar: perform a clean up pass - Move to a registration model where each RAR is claimed/unclaimed - Use that to fix the client stuff (one client per RAR so no need to queue stuff) - Support unregister so drivers can rmmod themselves safely - Fix locking hang on calling rar lock from rar callback - Clean up - Kerneldoc Folded in the memrar update as Greg asked - Fix various unload related bugs - Use the per RAR allocator/deallocator - Add kerneldoc Signed-off-by: Alan Cox Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/memrar/memrar_handler.c b/drivers/staging/memrar/memrar_handler.c index 3e0dfe3..efa7fd6 100644 --- a/drivers/staging/memrar/memrar_handler.c +++ b/drivers/staging/memrar/memrar_handler.c @@ -114,6 +114,7 @@ struct memrar_rar_info { struct memrar_allocator *allocator; struct memrar_buffer_info buffers; struct mutex lock; + int allocated; /* True if we own this RAR */ }; /* @@ -150,11 +151,13 @@ static struct memrar_rar_info *memrar_get_rar_info(u32 vaddr) return NULL; } -/* - * Retrieve bus address from given handle. +/** + * memrar_get_bus address - handle to bus address + * + * Retrieve bus address from given handle. * - * Returns address corresponding to given handle. Zero if handle is - * invalid. + * Returns address corresponding to given handle. Zero if handle is + * invalid. */ static dma_addr_t memrar_get_bus_address( struct memrar_rar_info *rar, @@ -176,11 +179,13 @@ static dma_addr_t memrar_get_bus_address( return rar->base + (vaddr - iobase); } -/* - * Retrieve physical address from given handle. +/** + * memrar_get_physical_address - handle to physical address + * + * Retrieve physical address from given handle. * - * Returns address corresponding to given handle. Zero if handle is - * invalid. + * Returns address corresponding to given handle. Zero if handle is + * invalid. */ static dma_addr_t memrar_get_physical_address( struct memrar_rar_info *rar, @@ -195,11 +200,15 @@ static dma_addr_t memrar_get_physical_address( return memrar_get_bus_address(rar, vaddr); } -/* - * Core block release code. +/** + * memrar_release_block - release a block to the pool + * @kref: kref of block + * + * Core block release code. A node has hit zero references so can + * be released and the lists must be updated. * - * Note: This code removes the node from a list. Make sure any list - * iteration is performed using list_for_each_safe(). + * Note: This code removes the node from a list. Make sure any list + * iteration is performed using list_for_each_safe(). */ static void memrar_release_block_i(struct kref *ref) { @@ -224,10 +233,15 @@ static void memrar_release_block_i(struct kref *ref) kfree(node); } -/* - * Initialize RAR parameters, such as bus addresses, etc. +/** + * memrar_init_rar_resources - configure a RAR + * @rarnum: rar that has been allocated + * @devname: name of our device + * + * Initialize RAR parameters, such as bus addresses, etc and make + * the resource accessible. */ -static int memrar_init_rar_resources(char const *devname) +static int memrar_init_rar_resources(int rarnum, char const *devname) { /* ---- Sanity Checks ---- * 1. RAR bus addresses in both Lincroft and Langwell RAR @@ -258,162 +272,95 @@ static int memrar_init_rar_resources(char const *devname) */ static size_t const RAR_BLOCK_SIZE = PAGE_SIZE; - int z; - int found_rar = 0; + dma_addr_t low, high; + struct memrar_rar_info * const rar = &memrars[rarnum]; BUG_ON(MRST_NUM_RAR != ARRAY_SIZE(memrars)); + BUG_ON(!memrar_is_valid_rar_type(rarnum)); + BUG_ON(rar->allocated); - for (z = 0; z != MRST_NUM_RAR; ++z) { - dma_addr_t low, high; - struct memrar_rar_info * const rar = &memrars[z]; - - BUG_ON(!memrar_is_valid_rar_type(z)); - - mutex_init(&rar->lock); - - /* - * Initialize the process table before we reach any - * code that exit on failure since the finalization - * code requires an initialized list. - */ - INIT_LIST_HEAD(&rar->buffers.list); - - if (rar_get_address(z, &low, &high) != 0) { - /* No RAR is available. */ - break; - } else if (low == 0 || high == 0) { - /* - * We don't immediately break out of the loop - * since the next type of RAR may be enabled. - */ - rar->base = 0; - rar->length = 0; - rar->iobase = NULL; - rar->allocator = NULL; - continue; - } - - /* - * @todo Verify that LNC and LNW RAR register contents - * addresses, security, etc are compatible and - * consistent). - */ - - rar->length = high - low + 1; - - /* Claim RAR memory as our own. */ - if (request_mem_region(low, rar->length, devname) == NULL) { - rar->length = 0; - - pr_err("%s: Unable to claim RAR[%d] memory.\n", - devname, - z); - pr_err("%s: RAR[%d] disabled.\n", devname, z); - - /* - * Rather than break out of the loop by - * returning -EBUSY, for example, we may be - * able to claim memory of the next RAR region - * as our own. - */ - continue; - } - - rar->base = low; - - /* - * Now map it into the kernel address space. - * - * Note that the RAR memory may only be accessed by IA - * when debugging. Otherwise attempts to access the - * RAR memory when it is locked down will result in - * behavior similar to writing to /dev/null and - * reading from /dev/zero. This behavior is enforced - * by the hardware. Even if we don't access the - * memory, mapping it into the kernel provides us with - * a convenient RAR handle to bus address mapping. - */ - rar->iobase = ioremap_nocache(rar->base, rar->length); - if (rar->iobase == NULL) { - pr_err("%s: Unable to map RAR memory.\n", - devname); - return -ENOMEM; - } - - /* Initialize corresponding memory allocator. */ - rar->allocator = memrar_create_allocator( - (unsigned long) rar->iobase, - rar->length, - RAR_BLOCK_SIZE); - if (rar->allocator == NULL) - return -1; + mutex_init(&rar->lock); - /* - * ------------------------------------------------- - * Make sure all RARs handled by us are locked down. - * ------------------------------------------------- - */ + /* + * Initialize the process table before we reach any + * code that exit on failure since the finalization + * code requires an initialized list. + */ + INIT_LIST_HEAD(&rar->buffers.list); - /* Enable RAR protection on the Lincroft side. */ - if (0) { - /* - * This is mostly a sanity check since the - * vendor should have locked down RAR in the - * SMIP header RAR configuration. - */ - rar_lock(z); - } else { - pr_warning("%s: LNC RAR[%d] no lock sanity check.\n", - devname, - z); - } + if (rar_get_address(rarnum, &low, &high) != 0) + /* No RAR is available. */ + return -ENODEV; + + if (low == 0 || high == 0) { + rar->base = 0; + rar->length = 0; + rar->iobase = NULL; + rar->allocator = NULL; + return -ENOSPC; + } - /* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ */ - /* |||||||||||||||||||||||||||||||||||||||||||||||||| */ + /* + * @todo Verify that LNC and LNW RAR register contents + * addresses, security, etc are compatible and + * consistent). + */ - /* - * It would be nice if we could verify that RAR - * protection on the Langwell side is enabled, but - * there is no way to do that from here. The - * necessary Langwell RAR registers are not accessible - * from the Lincroft (IA) side. - * - * Hopefully the ODM did the right thing and enabled - * Langwell side RAR protection in the integrated - * firmware SMIP header. - */ + rar->length = high - low + 1; - pr_info("%s: BRAR[%d] bus address range = " - "[0x%lx, 0x%lx]\n", - devname, - z, - (unsigned long) low, - (unsigned long) high); + /* Claim RAR memory as our own. */ + if (request_mem_region(low, rar->length, devname) == NULL) { + rar->length = 0; + pr_err("%s: Unable to claim RAR[%d] memory.\n", devname, rarnum); + pr_err("%s: RAR[%d] disabled.\n", devname, rarnum); + return -EBUSY; + } - pr_info("%s: BRAR[%d] size = %zu KiB\n", - devname, - z, - rar->allocator->capacity / 1024); + rar->base = low; - found_rar = 1; + /* + * Now map it into the kernel address space. + * + * Note that the RAR memory may only be accessed by IA + * when debugging. Otherwise attempts to access the + * RAR memory when it is locked down will result in + * behavior similar to writing to /dev/null and + * reading from /dev/zero. This behavior is enforced + * by the hardware. Even if we don't access the + * memory, mapping it into the kernel provides us with + * a convenient RAR handle to bus address mapping. + */ + rar->iobase = ioremap_nocache(rar->base, rar->length); + if (rar->iobase == NULL) { + pr_err("%s: Unable to map RAR memory.\n", devname); + release_mem_region(low, rar->length); + return -ENOMEM; } - if (!found_rar) { - /* - * No RAR support. Don't bother continuing. - * - * Note that this is not a failure. - */ - pr_info("%s: No Moorestown RAR support available.\n", - devname); - return -ENODEV; + /* Initialize corresponding memory allocator. */ + rar->allocator = memrar_create_allocator((unsigned long) rar->iobase, + rar->length, RAR_BLOCK_SIZE); + if (rar->allocator == NULL) { + iounmap(rar->iobase); + release_mem_region(low, rar->length); + return -ENOMEM; } + pr_info("%s: BRAR[%d] bus address range = [0x%lx, 0x%lx]\n", + devname, rarnum, (unsigned long) low, (unsigned long) high); + + pr_info("%s: BRAR[%d] size = %zu KiB\n", + devname, rarnum, rar->allocator->capacity / 1024); + + rar->allocated = 1; return 0; } -/* - * Finalize RAR resources. +/** + * memrar_fini_rar_resources - free up RAR resources + * + * Finalize RAR resources. Free up the resource tables, hand the memory + * back to the kernel, unmap the device and release the address space. */ static void memrar_fini_rar_resources(void) { @@ -429,6 +376,9 @@ static void memrar_fini_rar_resources(void) for (z = MRST_NUM_RAR; z-- != 0; ) { struct memrar_rar_info * const rar = &memrars[z]; + if (!rar->allocated) + continue; + /* Clean up remaining resources. */ list_for_each_entry_safe(pos, @@ -442,15 +392,25 @@ static void memrar_fini_rar_resources(void) rar->allocator = NULL; iounmap(rar->iobase); - rar->iobase = NULL; - release_mem_region(rar->base, rar->length); - rar->base = 0; + rar->iobase = NULL; + rar->base = 0; rar->length = 0; + + unregister_rar(z); } } +/** + * memrar_reserve_block - handle an allocation request + * @request: block being requested + * @filp: owner it is tied to + * + * Allocate a block of the requested RAR. If successful return the + * request object filled in and zero, if not report an error code + */ + static long memrar_reserve_block(struct RAR_buffer *request, struct file *filp) { @@ -465,6 +425,8 @@ static long memrar_reserve_block(struct RAR_buffer *request, return -EINVAL; rar = &memrars[rinfo->type]; + if (!rar->allocated) + return -ENODEV; /* Reserve memory in RAR. */ handle = memrar_allocator_alloc(rar->allocator, rinfo->size); @@ -504,6 +466,14 @@ static long memrar_reserve_block(struct RAR_buffer *request, return 0; } +/** + * memrar_release_block - release a RAR block + * @addr: address in RAR space + * + * Release a previously allocated block. Releases act on complete + * blocks, partially freeing a block is not supported + */ + static long memrar_release_block(u32 addr) { struct memrar_buffer_info *pos; @@ -512,7 +482,7 @@ static long memrar_release_block(u32 addr) long result = -EINVAL; if (rar == NULL) - return -EFAULT; + return -ENOENT; mutex_lock(&rar->lock); @@ -550,34 +520,48 @@ static long memrar_release_block(u32 addr) return result; } +/** + * memrar_get_stats - read statistics for a RAR + * @r: statistics to be filled in + * + * Returns the statistics data for the RAR, or an error code if + * the request cannot be completed + */ static long memrar_get_stat(struct RAR_stat *r) { - long result = -EINVAL; - - if (likely(r != NULL) && memrar_is_valid_rar_type(r->type)) { - struct memrar_allocator * const allocator = - memrars[r->type].allocator; - - BUG_ON(allocator == NULL); + struct memrar_allocator *allocator; - /* - * Allocator capacity doesn't change over time. No - * need to synchronize. - */ - r->capacity = allocator->capacity; + if (!memrar_is_valid_rar_type(r->type)) + return -EINVAL; - mutex_lock(&allocator->lock); + if (!memrars[r->type].allocated) + return -ENODEV; - r->largest_block_size = allocator->largest_free_area; + allocator = memrars[r->type].allocator; - mutex_unlock(&allocator->lock); + BUG_ON(allocator == NULL); - result = 0; - } + /* + * Allocator capacity doesn't change over time. No + * need to synchronize. + */ + r->capacity = allocator->capacity; - return result; + mutex_lock(&allocator->lock); + r->largest_block_size = allocator->largest_free_area; + mutex_unlock(&allocator->lock); + return 0; } +/** + * memrar_ioctl - ioctl callback + * @filp: file issuing the request + * @cmd: command + * @arg: pointer to control information + * + * Perform one of the ioctls supported by the memrar device + */ + static long memrar_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) @@ -640,6 +624,15 @@ static long memrar_ioctl(struct file *filp, return 0; } +/** + * memrar_mmap - mmap helper for deubgging + * @filp: handle doing the mapping + * @vma: memory area + * + * Support the mmap operation on the RAR space for debugging systems + * when the memory is not locked down. + */ + static int memrar_mmap(struct file *filp, struct vm_area_struct *vma) { /* @@ -660,9 +653,12 @@ static int memrar_mmap(struct file *filp, struct vm_area_struct *vma) unsigned long const handle = vma->vm_pgoff << PAGE_SHIFT; struct memrar_rar_info * const rar = memrar_get_rar_info(handle); - unsigned long pfn; + /* Only allow priviledged apps to go poking around this way */ + if (!capable(CAP_SYS_RAWIO)) + return -EPERM; + /* Invalid RAR handle or size passed to mmap(). */ if (rar == NULL || handle == 0 @@ -698,13 +694,32 @@ static int memrar_mmap(struct file *filp, struct vm_area_struct *vma) return 0; } +/** + * memrar_open - device open method + * @inode: inode to open + * @filp: file handle + * + * As we support multiple arbitary opens there is no work to be done + * really. + */ + static int memrar_open(struct inode *inode, struct file *filp) { - /* Nothing to do yet. */ - + nonseekable_open(inode, filp); return 0; } +/** + * memrar_release - close method for miscev + * @inode: inode of device + * @filp: handle that is going away + * + * Free up all the regions that belong to this file handle. We use + * the handle as a natural Linux style 'lifetime' indicator and to + * ensure resources are not leaked when their owner explodes in an + * unplanned fashion. + */ + static int memrar_release(struct inode *inode, struct file *filp) { /* Free all regions associated with the given file handle. */ @@ -733,9 +748,15 @@ static int memrar_release(struct inode *inode, struct file *filp) return 0; } -/* - * This function is part of the kernel space memrar driver API. +/** + * rar_reserve - reserve RAR memory + * @buffers: buffers to reserve + * @count: number wanted + * + * Reserve a series of buffers in the RAR space. Returns the number of + * buffers successfully allocated */ + size_t rar_reserve(struct RAR_buffer *buffers, size_t count) { struct RAR_buffer * const end = @@ -755,9 +776,14 @@ size_t rar_reserve(struct RAR_buffer *buffers, size_t count) } EXPORT_SYMBOL(rar_reserve); -/* - * This function is part of the kernel space memrar driver API. +/** + * rar_release - return RAR buffers + * @buffers: buffers to release + * @size: size of released block + * + * Return a set of buffers to the RAR pool */ + size_t rar_release(struct RAR_buffer *buffers, size_t count) { struct RAR_buffer * const end = @@ -786,9 +812,16 @@ size_t rar_release(struct RAR_buffer *buffers, size_t count) } EXPORT_SYMBOL(rar_release); -/* - * This function is part of the kernel space driver API. +/** + * rar_handle_to_bus - RAR to bus address + * @buffers: RAR buffer structure + * @count: number of buffers to convert + * + * Turn a list of RAR handle mappings into actual bus addresses. Note + * that when the device is locked down the bus addresses in question + * are not CPU accessible. */ + size_t rar_handle_to_bus(struct RAR_buffer *buffers, size_t count) { struct RAR_buffer * const end = @@ -878,43 +911,70 @@ static char const banner[] __initdata = KERN_INFO "Intel RAR Handler: " MEMRAR_VER " initialized.\n"; -static int memrar_registration_callback(void *ctx) +/** + * memrar_registration_callback - RAR obtained + * @rar: RAR number + * + * We have been granted ownership of the RAR. Add it to our memory + * management tables + */ + +static int memrar_registration_callback(unsigned long rar) { /* * We initialize the RAR parameters early on so that we can * discontinue memrar device initialization and registration * if suitably configured RARs are not available. */ - int result = memrar_init_rar_resources(memrar_miscdev.name); + return memrar_init_rar_resources(rar, memrar_miscdev.name); +} - if (result != 0) - return result; +/** + * memrar_init - initialise RAR support + * + * Initialise support for RAR handlers. This may get loaded before + * the RAR support is activated, but the callbacks on the registration + * will handle that situation for us anyway. + */ - result = misc_register(&memrar_miscdev); +static int __init memrar_init(void) +{ + int err; - if (result != 0) { - pr_err("%s: misc_register() failed.\n", - memrar_miscdev.name); + printk(banner); - /* Clean up resources previously reserved. */ - memrar_fini_rar_resources(); - } + err = misc_register(&memrar_miscdev); + if (err) + return err; - return result; -} + /* Now claim the two RARs we want */ + err = register_rar(0, memrar_registration_callback, 0); + if (err) + goto fail; -static int __init memrar_init(void) -{ - printk(banner); + err = register_rar(1, memrar_registration_callback, 1); + if (err == 0) + return 0; - return register_rar(&memrar_registration_callback, 0); + /* It is possible rar 0 registered and allocated resources then rar 1 + failed so do a full resource free */ + memrar_fini_rar_resources(); +fail: + misc_deregister(&memrar_miscdev); + return err; } +/** + * memrar_exit - unregister and unload + * + * Unregister the device and then unload any mappings and release + * the RAR resources + */ + static void __exit memrar_exit(void) { - memrar_fini_rar_resources(); - misc_deregister(&memrar_miscdev); + memrar_fini_rar_resources(); } @@ -925,7 +985,6 @@ module_exit(memrar_exit); MODULE_AUTHOR("Ossama Othman "); MODULE_DESCRIPTION("Intel Restricted Access Region Handler"); MODULE_LICENSE("GPL"); -MODULE_ALIAS_MISCDEV(MISC_DYNAMIC_MINOR); MODULE_VERSION(MEMRAR_VER); diff --git a/drivers/staging/rar_register/rar_register.c b/drivers/staging/rar_register/rar_register.c index bfc0e31..618503f 100644 --- a/drivers/staging/rar_register/rar_register.c +++ b/drivers/staging/rar_register/rar_register.c @@ -51,98 +51,159 @@ #include /* === Lincroft Message Bus Interface === */ -/* Message Control Register */ -#define LNC_MCR_OFFSET 0xD0 - -/* Maximum number of clients (other drivers using this driver) */ -#define MAX_RAR_CLIENTS 10 - -/* Message Data Register */ -#define LNC_MDR_OFFSET 0xD4 +#define LNC_MCR_OFFSET 0xD0 /* Message Control Register */ +#define LNC_MDR_OFFSET 0xD4 /* Message Data Register */ /* Message Opcodes */ -#define LNC_MESSAGE_READ_OPCODE 0xD0 +#define LNC_MESSAGE_READ_OPCODE 0xD0 #define LNC_MESSAGE_WRITE_OPCODE 0xE0 /* Message Write Byte Enables */ -#define LNC_MESSAGE_BYTE_WRITE_ENABLES 0xF +#define LNC_MESSAGE_BYTE_WRITE_ENABLES 0xF /* B-unit Port */ -#define LNC_BUNIT_PORT 0x3 +#define LNC_BUNIT_PORT 0x3 /* === Lincroft B-Unit Registers - Programmed by IA32 firmware === */ -#define LNC_BRAR0L 0x10 -#define LNC_BRAR0H 0x11 -#define LNC_BRAR1L 0x12 -#define LNC_BRAR1H 0x13 - +#define LNC_BRAR0L 0x10 +#define LNC_BRAR0H 0x11 +#define LNC_BRAR1L 0x12 +#define LNC_BRAR1H 0x13 /* Reserved for SeP */ -#define LNC_BRAR2L 0x14 -#define LNC_BRAR2H 0x15 +#define LNC_BRAR2L 0x14 +#define LNC_BRAR2H 0x15 /* Moorestown supports three restricted access regions. */ #define MRST_NUM_RAR 3 - /* RAR Bus Address Range */ -struct RAR_address_range { +struct rar_addr { dma_addr_t low; dma_addr_t high; }; -/* Structure containing low and high RAR register offsets. */ -struct RAR_offsets { - u32 low; /* Register offset for low RAR bus address. */ - u32 high; /* Register offset for high RAR bus address. */ -}; - +/* + * We create one of these for each RAR + */ struct client { - int (*client_callback)(void *client_data); - void *customer_data; - int client_called; - }; + int (*callback)(unsigned long data); + unsigned long driver_priv; + bool busy; +}; static DEFINE_MUTEX(rar_mutex); static DEFINE_MUTEX(lnc_reg_mutex); -struct RAR_device { - struct RAR_offsets const rar_offsets[MRST_NUM_RAR]; - struct RAR_address_range rar_addr[MRST_NUM_RAR]; +/* + * One per RAR device (currently only one device) + */ +struct rar_device { + struct rar_addr rar_addr[MRST_NUM_RAR]; struct pci_dev *rar_dev; bool registered; - }; - -/* this platform has only one rar_device for 3 rar regions */ -static struct RAR_device my_rar_device = { - .rar_offsets = { - [0].low = LNC_BRAR0L, - [0].high = LNC_BRAR0H, - [1].low = LNC_BRAR1L, - [1].high = LNC_BRAR1H, - [2].low = LNC_BRAR2L, - [2].high = LNC_BRAR2H - } + bool allocated; + struct client client[MRST_NUM_RAR]; }; -/* this data is for handling requests from other drivers which arrive - * prior to this driver initializing +/* Current platforms have only one rar_device for 3 rar regions */ +static struct rar_device my_rar_device; + +/* + * Abstract out multiple device support. Current platforms only + * have a single RAR device. */ -static struct client clients[MAX_RAR_CLIENTS]; -static int num_clients; +/** + * alloc_rar_device - return a new RAR structure + * + * Return a new (but not yet ready) RAR device object + */ +static struct rar_device *alloc_rar_device(void) +{ + if (my_rar_device.allocated) + return NULL; + my_rar_device.allocated = 1; + return &my_rar_device; +} -/* - * This function is used to retrieved RAR info using the Lincroft - * message bus interface. +/** + * free_rar_device - free a RAR object + * @rar: the RAR device being freed + * + * Release a RAR object and any attached resources */ -static int retrieve_rar_addr(struct pci_dev *pdev, - int offset, - dma_addr_t *addr) +static void free_rar_device(struct rar_device *rar) +{ + pci_dev_put(rar->rar_dev); + rar->allocated = 0; +} + +/** + * _rar_to_device - return the device handling this RAR + * @rar: RAR number + * @off: returned offset + * + * Internal helper for looking up RAR devices. This and alloc are the + * two functions that need touching to go to multiple RAR devices. + */ +static struct rar_device *_rar_to_device(int rar, int *off) +{ + if (rar >= 0 && rar <= 3) { + *off = rar; + return &my_rar_device; + } + return NULL; +} + + +/** + * rar_to_device - return the device handling this RAR + * @rar: RAR number + * @off: returned offset + * + * Return the device this RAR maps to if one is present, otherwise + * returns NULL. Reports the offset relative to the base of this + * RAR device in off. + */ +static struct rar_device *rar_to_device(int rar, int *off) +{ + struct rar_device *rar_dev = _rar_to_device(rar, off); + if (rar_dev == NULL || !rar_dev->registered) + return NULL; + return rar_dev; +} + +/** + * rar_to_client - return the client handling this RAR + * @rar: RAR number + * + * Return the client this RAR maps to if a mapping is known, otherwise + * returns NULL. + */ +static struct client *rar_to_client(int rar) +{ + int idx; + struct rar_device *r = _rar_to_device(rar, &idx); + if (r != NULL) + return &r->client[idx]; + return NULL; +} + +/** + * rar_read_addr - retrieve a RAR mapping + * @pdev: PCI device for the RAR + * @offset: offset for message + * @addr: returned address + * + * Reads the address of a given RAR register. Returns 0 on success + * or an error code on failure. + */ +static int rar_read_addr(struct pci_dev *pdev, int offset, dma_addr_t *addr) { /* * ======== The Lincroft Message Bus Interface ======== - * Lincroft registers may be obtained from the PCI - * (the Host Bridge) using the Lincroft Message Bus + * Lincroft registers may be obtained via PCI from + * the host bridge using the Lincroft Message Bus * Interface. That message bus interface is generally * comprised of two registers: a control register (MCR, 0xDO) * and a data register (MDR, 0xD4). @@ -182,6 +243,7 @@ static int retrieve_rar_addr(struct pci_dev *pdev, */ int result; + u32 addr32; /* Construct control message */ u32 const message = @@ -192,11 +254,6 @@ static int retrieve_rar_addr(struct pci_dev *pdev, dev_dbg(&pdev->dev, "Offset for 'get' LNC MSG is %x\n", offset); - if (addr == 0) { - WARN_ON(1); - return -EINVAL; - } - /* * We synchronize access to the Lincroft MCR and MDR registers * until BOTH the command is issued through the MCR register @@ -209,26 +266,25 @@ static int retrieve_rar_addr(struct pci_dev *pdev, /* Send the control message */ result = pci_write_config_dword(pdev, LNC_MCR_OFFSET, message); - - dev_dbg(&pdev->dev, "Result from send ctl register is %x\n", result); - if (!result) { - result = pci_read_config_dword(pdev, LNC_MDR_OFFSET, - (u32 *)addr); - dev_dbg(&pdev->dev, - "Result from read data register is %x\n", result); - - dev_dbg(&pdev->dev, - "Value read from data register is %lx\n", - (unsigned long)*addr); + /* Read back the address as a 32bit value */ + result = pci_read_config_dword(pdev, LNC_MDR_OFFSET, &addr32); + *addr = (dma_addr_t)addr32; } - mutex_unlock(&lnc_reg_mutex); - return result; } -static int set_rar_address(struct pci_dev *pdev, +/** + * rar_set_addr - Set a RAR mapping + * @pdev: PCI device for the RAR + * @offset: offset for message + * @addr: address to set + * + * Sets the address of a given RAR register. Returns 0 on success + * or an error code on failure. + */ +static int rar_set_addr(struct pci_dev *pdev, int offset, dma_addr_t addr) { @@ -236,11 +292,11 @@ static int set_rar_address(struct pci_dev *pdev, * Data being written to this register must be written before * writing the appropriate control message to the MCR * register. - * @note See rar_get_address() for a description of the + * See rar_get_addrs() for a description of the * message bus interface being used here. */ - int result = 0; + int result; /* Construct control message */ u32 const message = (LNC_MESSAGE_WRITE_OPCODE << 24) @@ -248,13 +304,6 @@ static int set_rar_address(struct pci_dev *pdev, | (offset << 8) | (LNC_MESSAGE_BYTE_WRITE_ENABLES << 4); - if (addr == 0) { - WARN_ON(1); - return -EINVAL; - } - - dev_dbg(&pdev->dev, "Offset for 'set' LNC MSG is %x\n", offset); - /* * We synchronize access to the Lincroft MCR and MDR registers * until BOTH the command is issued through the MCR register @@ -267,32 +316,27 @@ static int set_rar_address(struct pci_dev *pdev, /* Send the control message */ result = pci_write_config_dword(pdev, LNC_MDR_OFFSET, addr); - - dev_dbg(&pdev->dev, "Result from write data register is %x\n", result); - - if (!result) { - dev_dbg(&pdev->dev, - "Value written to data register is %lx\n", - (unsigned long)addr); - + if (!result) + /* And address */ result = pci_write_config_dword(pdev, LNC_MCR_OFFSET, message); - dev_dbg(&pdev->dev, "Result from send ctl register is %x\n", - result); - } - mutex_unlock(&lnc_reg_mutex); - return result; } /* -* Initialize RAR parameters, such as bus addresses, etc. -*/ -static int init_rar_params(struct pci_dev *pdev) + * rar_init_params - Initialize RAR parameters + * @rar: RAR device to initialise + * + * Initialize RAR parameters, such as bus addresses, etc. Returns 0 + * on success, or an error code on failure. + */ +static int init_rar_params(struct rar_device *rar) { + struct pci_dev *pdev = rar->rar_dev; unsigned int i; int result = 0; + int offset = 0x10; /* RAR 0 to 2 in order low/high/low/high/... */ /* Retrieve RAR start and end bus addresses. * Access the RAR registers through the Lincroft Message Bus @@ -300,15 +344,16 @@ static int init_rar_params(struct pci_dev *pdev) */ for (i = 0; i < MRST_NUM_RAR; ++i) { - struct RAR_offsets const *offset = - &my_rar_device.rar_offsets[i]; - struct RAR_address_range *addr = &my_rar_device.rar_addr[i]; - - if ((retrieve_rar_addr(pdev, offset->low, &addr->low) != 0) - || (retrieve_rar_addr(pdev, offset->high, &addr->high) != 0)) { - result = -1; - break; - } + struct rar_addr *addr = &rar->rar_addr[i]; + + result = rar_read_addr(pdev, offset++, &addr->low); + if (result != 0) + return result; + + result = rar_read_addr(pdev, offset++, &addr->high); + if (result != 0) + return result; + /* * Only the upper 22 bits of the RAR addresses are @@ -336,201 +381,237 @@ static int init_rar_params(struct pci_dev *pdev) /* Done accessing the device. */ if (result == 0) { - int z; - for (z = 0; z != MRST_NUM_RAR; ++z) { + for (i = 0; i != MRST_NUM_RAR; ++i) { /* * "BRAR" refers to the RAR registers in the * Lincroft B-unit. */ dev_info(&pdev->dev, "BRAR[%u] bus address range = " - "[%lx, %lx]\n", z, - (unsigned long)my_rar_device.rar_addr[z].low, - (unsigned long)my_rar_device.rar_addr[z].high); + "[%lx, %lx]\n", i, + (unsigned long)rar->rar_addr[i].low, + (unsigned long)rar->rar_addr[i].high); } } - return result; } -/* - * The rar_get_address function is used by other device drivers - * to obtain RAR address information on a RAR. It takes three - * parameters: +/** + * rar_get_address - get the bus address in a RAR + * @start: return value of start address of block + * @end: return value of end address of block * - * int rar_index - * The rar_index is an index to the rar for which you wish to retrieve - * the address information. - * Values can be 0,1, or 2. + * The rar_get_address function is used by other device drivers + * to obtain RAR address information on a RAR. It takes three + * parameters: * - * The function returns a 0 upon success or a -1 if there is no RAR - * facility on this system. + * The function returns a 0 upon success or an error if there is no RAR + * facility on this system. */ -int rar_get_address(int rar_index, - dma_addr_t *start_address, - dma_addr_t *end_address) +int rar_get_address(int rar_index, dma_addr_t *start, dma_addr_t *end) { - int result = -ENODEV; - - if (my_rar_device.registered) { - if (start_address == 0 || end_address == 0 - || rar_index >= MRST_NUM_RAR || rar_index < 0) { - result = -EINVAL; - } else { - *start_address = - my_rar_device.rar_addr[rar_index].low; - *end_address = - my_rar_device.rar_addr[rar_index].high; - - result = 0; - } + int idx; + struct rar_device *rar = rar_to_device(rar_index, &idx); + + if (rar == NULL) { + WARN_ON(1); + return -ENODEV; } - return result; + *start = rar->rar_addr[idx].low; + *end = rar->rar_addr[idx].high; + return 0; } EXPORT_SYMBOL(rar_get_address); -/* - * The rar_lock function is ued by other device drivers to lock an RAR. - * once an RAR is locked, it stays locked until the next system reboot. - * The function takes one parameter: +/** + * rar_lock - lock a RAR register + * @rar_index: RAR to lock (0-2) * - * int rar_index - * The rar_index is an index to the rar that you want to lock. - * Values can be 0,1, or 2. + * The rar_lock function is ued by other device drivers to lock an RAR. + * once a RAR is locked, it stays locked until the next system reboot. * - * The function returns a 0 upon success or a -1 if there is no RAR - * facility on this system. + * The function returns a 0 upon success or an error if there is no RAR + * facility on this system, or the locking fails */ int rar_lock(int rar_index) { - int result = -ENODEV; - - if (rar_index >= MRST_NUM_RAR || rar_index < 0) { - result = -EINVAL; - return result; - } - - dev_dbg(&my_rar_device.rar_dev->dev, "rar_lock mutex locking\n"); - mutex_lock(&rar_mutex); + struct rar_device *rar; + int result; + int idx; + dma_addr_t low, high; - if (my_rar_device.registered) { + rar = rar_to_device(rar_index, &idx); - dma_addr_t low = my_rar_device.rar_addr[rar_index].low & - 0xfffffc00u; + if (rar == NULL) { + WARN_ON(1); + return -EINVAL; + } - dma_addr_t high = my_rar_device.rar_addr[rar_index].high & - 0xfffffc00u; + low = rar->rar_addr[idx].low & 0xfffffc00u; + high = rar->rar_addr[idx].high & 0xfffffc00u; - /* - * Only allow I/O from the graphics and Langwell; - * Not from the x96 processor - */ - if (rar_index == (int)RAR_TYPE_VIDEO) { - low |= 0x00000009; - high |= 0x00000015; - } + /* + * Only allow I/O from the graphics and Langwell; + * not from the x86 processor + */ - else if (rar_index == (int)RAR_TYPE_AUDIO) { - /* Only allow I/O from Langwell; nothing from x86 */ - low |= 0x00000008; - high |= 0x00000018; - } + if (rar_index == RAR_TYPE_VIDEO) { + low |= 0x00000009; + high |= 0x00000015; + } else if (rar_index == RAR_TYPE_AUDIO) { + /* Only allow I/O from Langwell; nothing from x86 */ + low |= 0x00000008; + high |= 0x00000018; + } else + /* Read-only from all agents */ + high |= 0x00000018; - else - /* Read-only from all agents */ - high |= 0x00000018; + /* + * Now program the register using the Lincroft message + * bus interface. + */ + result = rar_set_addr(rar->rar_dev, + 2 * idx, low); - /* - * Now program the register using the Lincroft message - * bus interface. - */ - result = set_rar_address(my_rar_device.rar_dev, - my_rar_device.rar_offsets[rar_index].low, - low); - - if (result == 0) - result = set_rar_address( - my_rar_device.rar_dev, - my_rar_device.rar_offsets[rar_index].high, - high); - } + if (result == 0) + result = rar_set_addr(rar->rar_dev, + 2 * idx + 1, high); - dev_dbg(&my_rar_device.rar_dev->dev, "rar_lock mutex unlocking\n"); - mutex_unlock(&rar_mutex); return result; } EXPORT_SYMBOL(rar_lock); -/* The register_rar function is to used by other device drivers - * to ensure that this driver is ready. As we cannot be sure of - * the compile/execute order of dirvers in ther kernel, it is - * best to give this driver a callback function to call when - * it is ready to give out addresses. The callback function - * would have those steps that continue the initialization of - * a driver that do require a valid RAR address. One of those - * steps would be to call rar_get_address() - * This function return 0 on success an -1 on failure. -*/ -int register_rar(int (*callback)(void *yourparameter), void *yourparameter) +/** + * register_rar - register a RAR handler + * @num: RAR we wish to register for + * @callback: function to call when RAR support is available + * @data: data to pass to this function + * + * The register_rar function is to used by other device drivers + * to ensure that this driver is ready. As we cannot be sure of + * the compile/execute order of drivers in ther kernel, it is + * best to give this driver a callback function to call when + * it is ready to give out addresses. The callback function + * would have those steps that continue the initialization of + * a driver that do require a valid RAR address. One of those + * steps would be to call rar_get_address() + * + * This function return 0 on success an error code on failure. + */ +int register_rar(int num, int (*callback)(unsigned long data), + unsigned long data) { - - int result = -ENODEV; - - if (callback == NULL) - return -EINVAL; + /* For now we hardcode a single RAR device */ + struct rar_device *rar; + struct client *c; + int idx; + int retval = 0; mutex_lock(&rar_mutex); - if (my_rar_device.registered) { + /* Do we have a client mapping for this RAR number ? */ + c = rar_to_client(num); + if (c == NULL) { + retval = -ERANGE; + goto done; + } + /* Is it claimed ? */ + if (c->busy) { + retval = -EBUSY; + goto done; + } + c->busy = 1; + + /* See if we have a handler for this RAR yet, if we do then fire it */ + rar = rar_to_device(num, &idx); - mutex_unlock(&rar_mutex); + if (rar) { /* * if the driver already registered, then we can simply * call the callback right now */ - - return (*callback)(yourparameter); - } - - if (num_clients < MRST_NUM_RAR) { - - clients[num_clients].client_callback = callback; - clients[num_clients].customer_data = yourparameter; - num_clients += 1; - result = 0; + (*callback)(data); + goto done; } + /* Arrange to be called back when the hardware is found */ + c->callback = callback; + c->driver_priv = data; +done: mutex_unlock(&rar_mutex); - return result; - + return retval; } EXPORT_SYMBOL(register_rar); -/* Suspend - returns -ENOSYS */ -static int rar_suspend(struct pci_dev *dev, pm_message_t state) +/** + * unregister_rar - release a RAR allocation + * @num: RAR number + * + * Releases a RAR allocation, or pending allocation. If a callback is + * pending then this function will either complete before the unregister + * returns or not at all. + */ + +void unregister_rar(int num) { - return -ENOSYS; + struct client *c; + + mutex_lock(&rar_mutex); + c = rar_to_client(num); + if (c == NULL || !c->busy) + WARN_ON(1); + else + c->busy = 0; + mutex_unlock(&rar_mutex); } +EXPORT_SYMBOL(unregister_rar); -static int rar_resume(struct pci_dev *dev) +/** + * rar_callback - Process callbacks + * @rar: new RAR device + * + * Process the callbacks for a newly found RAR device. + */ + +static void rar_callback(struct rar_device *rar) { - return -ENOSYS; + struct client *c = &rar->client[0]; + int i; + + mutex_lock(&rar_mutex); + + rar->registered = 1; /* Ensure no more callbacks queue */ + + for (i = 0; i < MRST_NUM_RAR; i++) { + if (c->callback && c->busy) { + c->callback(c->driver_priv); + c->callback = NULL; + } + c++; + } + mutex_unlock(&rar_mutex); } -/* - * This function registers the driver with the device subsystem ( - * either PCI, USB, etc). - * Function that is activaed on the succesful probe of the RAR device - * (Moorestown host controller). +/** + * rar_probe - PCI probe callback + * @dev: PCI device + * @id: matching entry in the match table + * + * A RAR device has been discovered. Initialise it and if successful + * process any pending callbacks that can now be completed. */ static int rar_probe(struct pci_dev *dev, const struct pci_device_id *id) { int error; - int counter; + struct rar_device *rar; dev_dbg(&dev->dev, "PCI probe starting\n"); - /* enable the device */ + rar = alloc_rar_device(); + if (rar == NULL) + return -EBUSY; + + /* Enable the device */ error = pci_enable_device(dev); if (error) { dev_err(&dev->dev, @@ -538,50 +619,30 @@ static int rar_probe(struct pci_dev *dev, const struct pci_device_id *id) goto end_function; } - /* we have only one device; fill in the rar_device structure */ - my_rar_device.rar_dev = dev; + /* Fill in the rar_device structure */ + rar->rar_dev = pci_dev_get(dev); + pci_set_drvdata(dev, rar); /* - * Initialize the RAR parameters, which have to be retrieved - * via the message bus interface. - */ - error = init_rar_params(dev); + * Initialize the RAR parameters, which have to be retrieved + * via the message bus interface. + */ + error = init_rar_params(rar); if (error) { pci_disable_device(dev); - - dev_err(&dev->dev, - "Error retrieving RAR addresses\n"); - + dev_err(&dev->dev, "Error retrieving RAR addresses\n"); goto end_function; } - - dev_dbg(&dev->dev, "PCI probe locking\n"); - mutex_lock(&rar_mutex); - my_rar_device.registered = 1; - /* now call anyone who has registered (using callbacks) */ - for (counter = 0; counter < num_clients; counter += 1) { - if (clients[counter].client_callback) { - error = (*clients[counter].client_callback)( - clients[counter].customer_data); - /* set callback to NULL to indicate it has been done */ - clients[counter].client_callback = NULL; - dev_dbg(&my_rar_device.rar_dev->dev, - "Callback called for %d\n", - counter); - } - } - - dev_dbg(&dev->dev, "PCI probe unlocking\n"); - mutex_unlock(&rar_mutex); - + rar_callback(rar); + return 0; end_function: - + free_rar_device(rar); return error; } const struct pci_device_id rar_pci_id_tbl[] = { - { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_RAR_DEVICE_ID) }, + { PCI_VDEVICE(INTEL, 0x4110) }, { 0 } }; @@ -594,8 +655,7 @@ static struct pci_driver rar_pci_driver = { .name = "rar_register_driver", .id_table = rar_pci_id_tbl, .probe = rar_probe, - .suspend = rar_suspend, - .resume = rar_resume + /* Cannot be unplugged - no remove */ }; static int __init rar_init_handler(void) diff --git a/drivers/staging/rar_register/rar_register.h b/drivers/staging/rar_register/rar_register.h index 29ade0f..ffa8057 100644 --- a/drivers/staging/rar_register/rar_register.h +++ b/drivers/staging/rar_register/rar_register.h @@ -21,63 +21,23 @@ #ifndef _RAR_REGISTER_H #define _RAR_REGISTER_H -# include +#include /* following are used both in drivers as well as user space apps */ -enum RAR_type { - RAR_TYPE_VIDEO = 0, - RAR_TYPE_AUDIO, - RAR_TYPE_IMAGE, - RAR_TYPE_DATA -}; -#ifdef __KERNEL__ +#define RAR_TYPE_VIDEO 0 +#define RAR_TYPE_AUDIO 1 +#define RAR_TYPE_IMAGE 2 +#define RAR_TYPE_DATA 3 -/* PCI device id for controller */ -#define PCI_RAR_DEVICE_ID 0x4110 +#ifdef __KERNEL__ -/* The register_rar function is to used by other device drivers - * to ensure that this driver is ready. As we cannot be sure of - * the compile/execute order of dirvers in ther kernel, it is - * best to give this driver a callback function to call when - * it is ready to give out addresses. The callback function - * would have those steps that continue the initialization of - * a driver that do require a valid RAR address. One of those - * steps would be to call get_rar_address() - * This function return 0 on success an -1 on failure. - */ -int register_rar(int (*callback)(void *yourparameter), void *yourparameter); +struct rar_device; -/* The get_rar_address function is used by other device drivers - * to obtain RAR address information on a RAR. It takes two - * parameter: - * - * int rar_index - * The rar_index is an index to the rar for which you wish to retrieve - * the address information. - * Values can be 0,1, or 2. - * - * struct RAR_address_struct is a pointer to a place to which the function - * can return the address structure for the RAR. - * - * The function returns a 0 upon success or a -1 if there is no RAR - * facility on this system. - */ -int rar_get_address(int rar_index, - dma_addr_t *start_address, - dma_addr_t *end_address); - -/* The lock_rar function is ued by other device drivers to lock an RAR. - * once an RAR is locked, it stays locked until the next system reboot. - * The function takes one parameter: - * - * int rar_index - * The rar_index is an index to the rar that you want to lock. - * Values can be 0,1, or 2. - * - * The function returns a 0 upon success or a -1 if there is no RAR - * facility on this system. - */ +int register_rar(int num, + int (*callback)(unsigned long data), unsigned long data); +void unregister_rar(int num); +int rar_get_address(int rar_index, dma_addr_t *start, dma_addr_t *end); int rar_lock(int rar_index); #endif /* __KERNEL__ */ -- cgit v0.10.2 From 6610944a91079a4002da310d3d5488feaae4a74a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 14:31:18 -0700 Subject: Staging: hv: fix up sparse warning in hyperv_utils.c The function isn't called by anyone else, so mark it static. Also remove version.h, as it is not needed. Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/hyperv_utils.c b/drivers/staging/hv/hyperv_utils.c index ca52fba..cbebad3 100644 --- a/drivers/staging/hv/hyperv_utils.c +++ b/drivers/staging/hv/hyperv_utils.c @@ -24,7 +24,6 @@ #include #include #include -#include #include "logging.h" #include "osd.h" @@ -38,7 +37,7 @@ #include "utils.h" -void shutdown_onchannelcallback(void *context) +static void shutdown_onchannelcallback(void *context) { struct vmbus_channel *channel = context; u8 *buf; -- cgit v0.10.2 From 30162d690c3539594b6dcebd677c985c6a74249e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:00:02 -0700 Subject: Staging: comedi: mark a variable as __user This is really a userspace pointer, so mark it as such. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index 45272d8..8e4caaa 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -354,7 +354,7 @@ unsigned int __user *chanlist; /* channel/range list */ unsigned int chanlist_len; - short *data; /* data list, size depends on subd flags */ + short __user *data; /* data list, size depends on subd flags */ unsigned int data_len; }; -- cgit v0.10.2 From 135998cc006c764dcfa147df84185614012852e5 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:01:19 -0700 Subject: Staging: comedi: 8255.c: mark some functions static sparse pointed out that these functions should be static, so mark them as such. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/8255.c b/drivers/staging/comedi/drivers/8255.c index 2d54993..e777ddf 100644 --- a/drivers/staging/comedi/drivers/8255.c +++ b/drivers/staging/comedi/drivers/8255.c @@ -120,8 +120,8 @@ COMEDI_INITCLEANUP(driver_8255); static void do_config(struct comedi_device *dev, struct comedi_subdevice *s); -void subdev_8255_interrupt(struct comedi_device *dev, - struct comedi_subdevice *s) +static void subdev_8255_interrupt(struct comedi_device *dev, + struct comedi_subdevice *s) { short d; @@ -319,9 +319,10 @@ static int subdev_8255_cancel(struct comedi_device *dev, return 0; } -int subdev_8255_init(struct comedi_device *dev, struct comedi_subdevice *s, - int (*cb) (int, int, int, unsigned long), - unsigned long arg) +static int subdev_8255_init(struct comedi_device *dev, + struct comedi_subdevice *s, + int (*cb) (int, int, int, unsigned long), + unsigned long arg) { s->type = COMEDI_SUBD_DIO; s->subdev_flags = SDF_READABLE | SDF_WRITABLE; @@ -349,9 +350,10 @@ int subdev_8255_init(struct comedi_device *dev, struct comedi_subdevice *s, } EXPORT_SYMBOL(subdev_8255_init); -int subdev_8255_init_irq(struct comedi_device *dev, struct comedi_subdevice *s, - int (*cb) (int, int, int, unsigned long), - unsigned long arg) +static int subdev_8255_init_irq(struct comedi_device *dev, + struct comedi_subdevice *s, + int (*cb) (int, int, int, unsigned long), + unsigned long arg) { int ret; @@ -369,7 +371,8 @@ int subdev_8255_init_irq(struct comedi_device *dev, struct comedi_subdevice *s, } EXPORT_SYMBOL(subdev_8255_init_irq); -void subdev_8255_cleanup(struct comedi_device *dev, struct comedi_subdevice *s) +static void subdev_8255_cleanup(struct comedi_device *dev, + struct comedi_subdevice *s) { if (s->private) { /* this test does nothing, so comment it out -- cgit v0.10.2 From 643a5420f1df521e08efae7b15d377314b88cb70 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:02:00 -0700 Subject: Staging: comedi: usbduxfast.c: mark a function static It does not need to be global. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/usbduxfast.c b/drivers/staging/comedi/drivers/usbduxfast.c index 05b1973..0d72c41 100644 --- a/drivers/staging/comedi/drivers/usbduxfast.c +++ b/drivers/staging/comedi/drivers/usbduxfast.c @@ -525,7 +525,7 @@ static int usbduxfastsub_upload(struct usbduxfastsub_s *udfs, return 0; } -int usbduxfastsub_submit_InURBs(struct usbduxfastsub_s *udfs) +static int usbduxfastsub_submit_InURBs(struct usbduxfastsub_s *udfs) { int ret; -- cgit v0.10.2 From 6dd22814640bf04d2007489d8c1d1e0d24a09128 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:02:39 -0700 Subject: Staging: comedi: addi_common.h: properly mark this variable as __iomem It's not an unsigned long, it's a __iomem pointer, so mark it as such. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.h b/drivers/staging/comedi/drivers/addi-data/addi_common.h index caeb6fd..1a28169 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_common.h +++ b/drivers/staging/comedi/drivers/addi-data/addi_common.h @@ -351,7 +351,7 @@ struct addi_private { int i_IobaseAmcc; /* base+size for AMCC chip */ int i_IobaseAddon; /* addon base address */ int i_IobaseReserved; - unsigned long dw_AiBase; + void __iomem *dw_AiBase; struct pcilst_struct *amcc; /* ptr too AMCC data */ unsigned char allocated; /* we have blocked card */ unsigned char b_ValidDriver; /* driver is ok */ -- cgit v0.10.2 From 2f78c64255bc6e960bf822f65bd80830f053e182 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:03:35 -0700 Subject: Staging: comedi: addi_common.c: sparse cleanups Now that we are properly marking the variable as __iomem, don't cast it. Also fix up some other sparse warnings. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/addi_common.c b/drivers/staging/comedi/drivers/addi-data/addi_common.c index 6625fdc..2c98641 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_common.c +++ b/drivers/staging/comedi/drivers/addi-data/addi_common.c @@ -293,8 +293,8 @@ static const struct addi_board boardtypes[] = { 0, 0, 0, - 0, - 0, + NULL, + NULL, 32, 0, 0, @@ -2527,7 +2527,7 @@ static const struct addi_board boardtypes[] = { #define n_boardtypes (sizeof(boardtypes)/sizeof(struct addi_board)) -struct comedi_driver driver_addi = { +static struct comedi_driver driver_addi = { .driver_name = "addi_common", .module = THIS_MODULE, .attach = i_ADDI_Attach, @@ -2639,9 +2639,8 @@ static int i_ADDI_Attach(struct comedi_device *dev, struct comedi_devconfig *it) devpriv->ps_BoardInfo = this_board; devpriv->i_IobaseReserved = (int) io_addr[3]; printk("\nioremap begin"); - devpriv->dw_AiBase = - (unsigned long) ioremap(io_addr[3], - this_board->i_IorangeBase3); + devpriv->dw_AiBase = ioremap(io_addr[3], + this_board->i_IorangeBase3); printk("\nioremap end"); } @@ -2952,7 +2951,7 @@ static int i_ADDI_Detach(struct comedi_device *dev) devpriv->ui_DmaBufferPages[1]); } } else { - iounmap((void *)devpriv->dw_AiBase); + iounmap(devpriv->dw_AiBase); if (devpriv->allocated) { i_pci_card_free(devpriv->amcc); -- cgit v0.10.2 From ad2d4714a5468ff5fb6414d06b29c8d5ca31d6f9 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:04:19 -0700 Subject: Staging: comedi: addi_amcc_s5933.h: sparse cleanup Mark a variable static that does not need to be global. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/addi_amcc_s5933.h b/drivers/staging/comedi/drivers/addi-data/addi_amcc_s5933.h index f96b128..3682503 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_amcc_s5933.h +++ b/drivers/staging/comedi/drivers/addi-data/addi_amcc_s5933.h @@ -212,7 +212,7 @@ struct pcilst_struct { }; /* ptr to root list of all amcc devices */ -struct pcilst_struct *amcc_devices; +static struct pcilst_struct *amcc_devices; static const int i_ADDIDATADeviceID[] = { 0x15B8, 0x10E8 }; -- cgit v0.10.2 From e3752a1dfd8a003139dee2c80de3d915534e2b39 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:05:09 -0700 Subject: Staging: comedi: quatech_daqp_cs.c: fix up the irq The irq needs to return the correct type. Also fix up some other sparse warnings that were found. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/quatech_daqp_cs.c b/drivers/staging/comedi/drivers/quatech_daqp_cs.c index 3325f24..fb427dbe 100644 --- a/drivers/staging/comedi/drivers/quatech_daqp_cs.c +++ b/drivers/staging/comedi/drivers/quatech_daqp_cs.c @@ -244,8 +244,7 @@ static int daqp_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) * comedi kernel module, and signal various comedi callback routines, * which run pretty quick. */ - -static void daqp_interrupt(int irq, void *dev_id) +static enum irqreturn daqp_interrupt(int irq, void *dev_id) { struct local_info_t *local = (struct local_info_t *)dev_id; struct comedi_device *dev; @@ -256,32 +255,32 @@ static void daqp_interrupt(int irq, void *dev_id) if (local == NULL) { printk(KERN_WARNING "daqp_interrupt(): irq %d for unknown device.\n", irq); - return; + return IRQ_NONE; } dev = local->dev; if (dev == NULL) { printk(KERN_WARNING "daqp_interrupt(): NULL comedi_device.\n"); - return; + return IRQ_NONE; } if (!dev->attached) { printk(KERN_WARNING "daqp_interrupt(): struct comedi_device not yet attached.\n"); - return; + return IRQ_NONE; } s = local->s; if (s == NULL) { printk(KERN_WARNING "daqp_interrupt(): NULL comedi_subdevice.\n"); - return; + return IRQ_NONE; } if ((struct local_info_t *)s->private != local) { printk(KERN_WARNING "daqp_interrupt(): invalid comedi_subdevice.\n"); - return; + return IRQ_NONE; } switch (local->interrupt_mode) { @@ -340,6 +339,7 @@ static void daqp_interrupt(int irq, void *dev_id) comedi_event(dev, s); } + return IRQ_HANDLED; } /* One-shot analog data acquisition routine */ @@ -580,7 +580,7 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) { struct local_info_t *local = (struct local_info_t *)s->private; struct comedi_cmd *cmd = &s->async->cmd; - int counter = 100; + int counter; int scanlist_start_on_every_entry; int threshold; @@ -613,14 +613,14 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) */ if (cmd->convert_src == TRIG_TIMER) { - int counter = daqp_ns_to_timer(&cmd->convert_arg, + counter = daqp_ns_to_timer(&cmd->convert_arg, cmd->flags & TRIG_ROUND_MASK); outb(counter & 0xff, dev->iobase + DAQP_PACER_LOW); outb((counter >> 8) & 0xff, dev->iobase + DAQP_PACER_MID); outb((counter >> 16) & 0xff, dev->iobase + DAQP_PACER_HIGH); scanlist_start_on_every_entry = 1; } else { - int counter = daqp_ns_to_timer(&cmd->scan_begin_arg, + counter = daqp_ns_to_timer(&cmd->scan_begin_arg, cmd->flags & TRIG_ROUND_MASK); outb(counter & 0xff, dev->iobase + DAQP_PACER_LOW); outb((counter >> 8) & 0xff, dev->iobase + DAQP_PACER_MID); @@ -755,7 +755,7 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) /* Reset any pending interrupts (my card has a tendancy to require * require multiple reads on the status register to achieve this) */ - + counter = 100; while (--counter && (inb(dev->iobase + DAQP_STATUS) & DAQP_STATUS_EVENTS)) ; if (!counter) { @@ -1244,7 +1244,7 @@ static struct pcmcia_device_id daqp_cs_id_table[] = { MODULE_DEVICE_TABLE(pcmcia, daqp_cs_id_table); -struct pcmcia_driver daqp_cs_driver = { +static struct pcmcia_driver daqp_cs_driver = { .probe = daqp_cs_attach, .remove = daqp_cs_detach, .suspend = daqp_cs_suspend, -- cgit v0.10.2 From b74a9670857c2af74e36ecbd31bbc55ddd8e1311 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:05:52 -0700 Subject: Staging: comedi: plx9080.h: properly mark iomem variables It's a __iomem *, so mark it as such. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/plx9080.h b/drivers/staging/comedi/drivers/plx9080.h index 53bcdb7..485d63f 100644 --- a/drivers/staging/comedi/drivers/plx9080.h +++ b/drivers/staging/comedi/drivers/plx9080.h @@ -380,9 +380,9 @@ enum bigend_bits { #define MBX_ADDR_SPACE_360 0x80 /* wanXL100s/200/400 */ #define MBX_ADDR_MASK_360 (MBX_ADDR_SPACE_360-1) -static inline int plx9080_abort_dma(void *iobase, unsigned int channel) +static inline int plx9080_abort_dma(void __iomem *iobase, unsigned int channel) { - void *dma_cs_addr; + void __iomem *dma_cs_addr; uint8_t dma_status; const int timeout = 10000; unsigned int i; -- cgit v0.10.2 From d18c5906d0914d911a13d342ff61a6bca6aff597 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:06:33 -0700 Subject: Staging: comedi: das1800.c: fix a locking error on the error path. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/das1800.c b/drivers/staging/comedi/drivers/das1800.c index d91c2d9..de5e82f 100644 --- a/drivers/staging/comedi/drivers/das1800.c +++ b/drivers/staging/comedi/drivers/das1800.c @@ -1637,7 +1637,8 @@ static int das1800_ai_rinsn(struct comedi_device *dev, } if (i == timeout) { comedi_error(dev, "timeout"); - return -ETIME; + n = -ETIME; + goto exit; } dpnt = inw(dev->iobase + DAS1800_FIFO); /* shift data to offset binary for bipolar ranges */ @@ -1645,6 +1646,7 @@ static int das1800_ai_rinsn(struct comedi_device *dev, dpnt += 1 << (thisboard->resolution - 1); data[n] = dpnt; } +exit: spin_unlock_irqrestore(&dev->spinlock, irq_flags); return n; -- cgit v0.10.2 From f31d0008cef0df52d1a2662ef56a24bdd88b0105 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:07:03 -0700 Subject: Staging: comedi: cb_pcidas64.c: fix sparse warnings This fixes a bunch of iomem and other sparse warnings. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 0d9e92e..3443fc1 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1101,9 +1101,9 @@ struct pcidas64_private { resource_size_t main_phys_iobase; resource_size_t dio_counter_phys_iobase; /* base addresses (ioremapped) */ - void *plx9080_iobase; - void *main_iobase; - void *dio_counter_iobase; + void __iomem *plx9080_iobase; + void __iomem *main_iobase; + void __iomem *dio_counter_iobase; /* local address (used by dma controller) */ uint32_t local0_iobase; uint32_t local1_iobase; @@ -1183,8 +1183,8 @@ static int ao_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, static irqreturn_t handle_interrupt(int irq, void *d); static int ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s); static int ao_cancel(struct comedi_device *dev, struct comedi_subdevice *s); -static int dio_callback(int dir, int port, int data, unsigned long arg); -static int dio_callback_4020(int dir, int port, int data, unsigned long arg); +static int dio_callback(int dir, int port, int data, void __iomem *base); +static int dio_callback_4020(int dir, int port, int data, void __iomem *base); static int di_rbits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); static int do_wbits(struct comedi_device *dev, struct comedi_subdevice *s, @@ -1316,7 +1316,7 @@ static inline int ao_cmd_is_supported(const struct pcidas64_board *board) static void init_plx9080(struct comedi_device *dev) { uint32_t bits; - void *plx_iobase = priv(dev)->plx9080_iobase; + void __iomem *plx_iobase = priv(dev)->plx9080_iobase; priv(dev)->plx_control_bits = readl(priv(dev)->plx9080_iobase + PLX_CONTROL_REG); @@ -1406,7 +1406,7 @@ static void init_plx9080(struct comedi_device *dev) static int setup_subdevices(struct comedi_device *dev) { struct comedi_subdevice *s; - void *dio_8255_iobase; + void __iomem *dio_8255_iobase; int i; if (alloc_subdevices(dev, 10) < 0) @@ -1432,7 +1432,6 @@ static int setup_subdevices(struct comedi_device *dev) s->do_cmdtest = ai_cmdtest; s->cancel = ai_cancel; if (board(dev)->layout == LAYOUT_4020) { - unsigned int i; uint8_t data; /* set adc to read from inputs (not internal calibration sources) */ priv(dev)->i2c_cal_range_bits = adc_src_4020_bits(4); @@ -1614,7 +1613,7 @@ static void init_stc_registers(struct comedi_device *dev) disable_ai_pacing(dev); }; -int alloc_and_init_dma_members(struct comedi_device *dev) +static int alloc_and_init_dma_members(struct comedi_device *dev) { int i; @@ -1877,12 +1876,12 @@ static int detach(struct comedi_device *dev) if (priv(dev)->hw_dev) { if (priv(dev)->plx9080_iobase) { disable_plx_interrupts(dev); - iounmap((void *)priv(dev)->plx9080_iobase); + iounmap(priv(dev)->plx9080_iobase); } if (priv(dev)->main_iobase) - iounmap((void *)priv(dev)->main_iobase); + iounmap(priv(dev)->main_iobase); if (priv(dev)->dio_counter_iobase) - iounmap((void *)priv(dev)->dio_counter_iobase); + iounmap(priv(dev)->dio_counter_iobase); /* free pci dma buffers */ for (i = 0; i < ai_dma_ring_count(board(dev)); i++) { if (priv(dev)->ai_buffer[i]) @@ -2978,7 +2977,7 @@ static void drain_dma_buffers(struct comedi_device *dev, unsigned int channel) uint32_t next_transfer_addr; int j; int num_samples = 0; - void *pci_addr_reg; + void __iomem *pci_addr_reg; if (channel) pci_addr_reg = @@ -3018,8 +3017,9 @@ static void drain_dma_buffers(struct comedi_device *dev, unsigned int channel) * unused buffer) */ } -void handle_ai_interrupt(struct comedi_device *dev, unsigned short status, - unsigned int plx_status) +static void handle_ai_interrupt(struct comedi_device *dev, + unsigned short status, + unsigned int plx_status) { struct comedi_subdevice *s = dev->read_subdev; struct comedi_async *async = s->async; @@ -3229,7 +3229,7 @@ static irqreturn_t handle_interrupt(int irq, void *d) return IRQ_HANDLED; } -void abort_dma(struct comedi_device *dev, unsigned int channel) +static void abort_dma(struct comedi_device *dev, unsigned int channel) { unsigned long flags; @@ -3424,7 +3424,7 @@ static void load_ao_dma(struct comedi_device *dev, const struct comedi_cmd *cmd) { unsigned int num_bytes; unsigned int next_transfer_addr; - void *pci_addr_reg = + void __iomem *pci_addr_reg = priv(dev)->plx9080_iobase + PLX_DMA0_PCI_ADDRESS_REG; unsigned int buffer_index; @@ -3658,24 +3658,24 @@ static int ao_cancel(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -static int dio_callback(int dir, int port, int data, unsigned long iobase) +static int dio_callback(int dir, int port, int data, void __iomem *iobase) { if (dir) { - writeb(data, (void *)(iobase + port)); + writeb(data, iobase + port); DEBUG_PRINT("wrote 0x%x to port %i\n", data, port); return 0; } else { - return readb((void *)(iobase + port)); + return readb(iobase + port); } } -static int dio_callback_4020(int dir, int port, int data, unsigned long iobase) +static int dio_callback_4020(int dir, int port, int data, void __iomem *iobase) { if (dir) { - writew(data, (void *)(iobase + 2 * port)); + writew(data, iobase + 2 * port); return 0; } else { - return readw((void *)(iobase + 2 * port)); + return readw(iobase + 2 * port); } } @@ -3862,7 +3862,7 @@ static uint16_t read_eeprom(struct comedi_device *dev, uint8_t address) static const int read_command = 0x6; unsigned int bitstream = (read_command << 8) | address; unsigned int bit; - void *const plx_control_addr = + void __iomem * const plx_control_addr = priv(dev)->plx9080_iobase + PLX_CONTROL_REG; uint16_t value; static const int value_length = 16; @@ -4185,7 +4185,8 @@ static const int i2c_low_udelay = 10; static void i2c_set_sda(struct comedi_device *dev, int state) { static const int data_bit = CTL_EE_W; - void *plx_control_addr = priv(dev)->plx9080_iobase + PLX_CONTROL_REG; + void __iomem *plx_control_addr = priv(dev)->plx9080_iobase + + PLX_CONTROL_REG; if (state) { /* set data line high */ @@ -4204,7 +4205,8 @@ static void i2c_set_sda(struct comedi_device *dev, int state) static void i2c_set_scl(struct comedi_device *dev, int state) { static const int clock_bit = CTL_USERO; - void *plx_control_addr = priv(dev)->plx9080_iobase + PLX_CONTROL_REG; + void __iomem *plx_control_addr = priv(dev)->plx9080_iobase + + PLX_CONTROL_REG; if (state) { /* set clock line high */ -- cgit v0.10.2 From a7f22a84ba2e5a99b874bf36a772b5d7424cec11 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:07:43 -0700 Subject: Staging: comedi: amplc_dio200.c: fix NULL sparse warnings Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/amplc_dio200.c b/drivers/staging/comedi/drivers/amplc_dio200.c index 6a87652..8eb6765 100644 --- a/drivers/staging/comedi/drivers/amplc_dio200.c +++ b/drivers/staging/comedi/drivers/amplc_dio200.c @@ -661,7 +661,7 @@ dio200_inttrig_start_intr(struct comedi_device *dev, struct comedi_subdevice *s, subpriv = s->private; spin_lock_irqsave(&subpriv->spinlock, flags); - s->async->inttrig = 0; + s->async->inttrig = NULL; if (subpriv->active) event = dio200_start_intr(dev, s); @@ -1364,7 +1364,7 @@ static int dio200_attach(struct comedi_device *dev, struct comedi_devconfig *it) break; case sd_8255: /* digital i/o subdevice (8255) */ - ret = subdev_8255_init(dev, s, 0, + ret = subdev_8255_init(dev, s, NULL, iobase + layout->sdinfo[n]); if (ret < 0) return ret; -- cgit v0.10.2 From a8cb9ad9ad872dc600314c1c8d07c420b3cdefbb Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:08:24 -0700 Subject: Staging: comedi: adv_pci1710.c: fix unsigned problem with divisors Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adv_pci1710.c b/drivers/staging/comedi/drivers/adv_pci1710.c index 5c1ff77..67c4f11 100644 --- a/drivers/staging/comedi/drivers/adv_pci1710.c +++ b/drivers/staging/comedi/drivers/adv_pci1710.c @@ -937,7 +937,8 @@ static int pci171x_ai_cmdtest(struct comedi_device *dev, struct comedi_cmd *cmd) { int err = 0; - int tmp, divisor1 = 0, divisor2 = 0; + int tmp; + unsigned int divisor1 = 0, divisor2 = 0; DPRINTK("adv_pci1710 EDBG: BGN: pci171x_ai_cmdtest(...)\n"); #ifdef PCI171X_EXTDEBUG -- cgit v0.10.2 From 5f35f3f19fd12226482f8b57c70d9a0f82470c87 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:08:51 -0700 Subject: Staging: comedi: adl_pci9118.c: fix unsigned problem with divisors Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adl_pci9118.c b/drivers/staging/comedi/drivers/adl_pci9118.c index dc4bd04..ccef549 100644 --- a/drivers/staging/comedi/drivers/adl_pci9118.c +++ b/drivers/staging/comedi/drivers/adl_pci9118.c @@ -921,7 +921,8 @@ static int pci9118_ai_cmdtest(struct comedi_device *dev, struct comedi_cmd *cmd) { int err = 0; - int tmp, divisor1 = 0, divisor2 = 0; + int tmp; + unsigned int divisor1 = 0, divisor2 = 0; /* step 1: make sure trigger sources are trivially valid */ -- cgit v0.10.2 From 525d1b1395858606103d4663a570cc8725ff2ced Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:09:26 -0700 Subject: Staging: comedi: adl_pci9111.c: fix sparse warnings divisor and other problems fixed. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/adl_pci9111.c b/drivers/staging/comedi/drivers/adl_pci9111.c index bbe0e33..36a254c 100644 --- a/drivers/staging/comedi/drivers/adl_pci9111.c +++ b/drivers/staging/comedi/drivers/adl_pci9111.c @@ -358,8 +358,8 @@ struct pci9111_private_data { int ao_readback; /* Last written analog output data */ - int timer_divisor_1; /* Divisor values for the 8254 timer pacer */ - int timer_divisor_2; + unsigned int timer_divisor_1; /* Divisor values for the 8254 timer pacer */ + unsigned int timer_divisor_2; int is_valid; /* Is device valid */ @@ -1269,9 +1269,6 @@ found: /* TODO: Warn about non-tested boards. */ - switch (board->device_id) { - }; - /* Read local configuration register base address [PCI_BASE_ADDRESS #1]. */ lcr_io_base = pci_resource_start(pci_device, 1); @@ -1381,7 +1378,7 @@ static int pci9111_detach(struct comedi_device *dev) { /* Reset device */ - if (dev->private != 0) { + if (dev->private != NULL) { if (dev_private->is_valid) pci9111_reset(dev); @@ -1391,7 +1388,7 @@ static int pci9111_detach(struct comedi_device *dev) if (dev->irq != 0) free_irq(dev->irq, dev); - if (dev_private != 0 && dev_private->pci_device != 0) { + if (dev_private != NULL && dev_private->pci_device != NULL) { if (dev->iobase) comedi_pci_disable(dev_private->pci_device); pci_dev_put(dev_private->pci_device); -- cgit v0.10.2 From 08b93e7bda617a623ffae77940e4acfa31204367 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:09:53 -0700 Subject: Staging: comedi: hwdrv_apci035.c: fix sparse warnings Some variables should be static. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.c index 7912972..1369e22 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.c @@ -52,9 +52,9 @@ You should also find the complete GPL in the COPYING file accompanying this sour +----------------------------------------------------------------------------+ */ #include "hwdrv_apci035.h" -int i_WatchdogNbr = 0; -int i_Temp = 0; -int i_Flag = 1; +static int i_WatchdogNbr = 0; +static int i_Temp = 0; +static int i_Flag = 1; /* +----------------------------------------------------------------------------+ | Function Name : int i_APCI035_ConfigTimerWatchdog | -- cgit v0.10.2 From 1a538dfd16a4aa3a57a4c792c928fe83b05aacf0 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:10:36 -0700 Subject: Staging: comedi: hwdrv_apci035.h: fix sparse warnings This let us delete two variables and mark one as static. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.h b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.h index e0023c8..68db9c1 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.h +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci035.h @@ -19,22 +19,8 @@ #define APCI035_BOARD_VENDOR_ID 0x15B8 #define APCI035_ADDRESS_RANGE 255 -int i_TW_Number; -struct { - int i_Gain; - int i_Polarity; - int i_OffsetRange; - int i_Coupling; - int i_SingleDiff; - int i_AutoCalibration; - unsigned int ui_ReloadValue; - unsigned int ui_TimeUnitReloadVal; - int i_Interrupt; - int i_ModuleSelection; -} Config_Parameters_Main; - /* ANALOG INPUT RANGE */ -struct comedi_lrange range_apci035_ai = { 8, { +static struct comedi_lrange range_apci035_ai = { 8, { BIP_RANGE(10), BIP_RANGE(5), BIP_RANGE(2), -- cgit v0.10.2 From 2179b4c8b5435cde6bc5fb9d2411527c646ba14a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:11:26 -0700 Subject: Staging: comedi: hwdrv_apci1032.c: sparse warning fixups Mark a variable as static. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1032.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1032.c index fe06789..faea003 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1032.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1032.c @@ -53,8 +53,8 @@ You should also find the complete GPL in the COPYING file accompanying this sour */ #include "hwdrv_apci1032.h" #include -/* Global variables */ -unsigned int ui_InterruptStatus; + +static unsigned int ui_InterruptStatus; /* +----------------------------------------------------------------------------+ -- cgit v0.10.2 From a943532652914e5acfbbd2e099edabda667a9de1 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:12:00 -0700 Subject: Staging: comedi: hwdrv_apci1500.c: sparse static cleanups Mark a bunch of variables and functions as static. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.c index d5e06ad..b3b9218 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1500.c @@ -47,16 +47,16 @@ You should also find the complete GPL in the COPYING file accompanying this sour */ #include "hwdrv_apci1500.h" -int i_TimerCounter1Init = 0; -int i_TimerCounter2Init = 0; -int i_WatchdogCounter3Init = 0; -int i_Event1Status = 0, i_Event2Status = 0; -int i_TimerCounterWatchdogInterrupt = 0; -int i_Logic = 0, i_CounterLogic = 0; -int i_InterruptMask = 0; -int i_InputChannel = 0; -int i_TimerCounter1Enabled = 0, i_TimerCounter2Enabled = - 0, i_WatchdogCounter3Enabled = 0; +static int i_TimerCounter1Init = 0; +static int i_TimerCounter2Init = 0; +static int i_WatchdogCounter3Init = 0; +static int i_Event1Status = 0, i_Event2Status = 0; +static int i_TimerCounterWatchdogInterrupt = 0; +static int i_Logic = 0, i_CounterLogic = 0; +static int i_InterruptMask = 0; +static int i_InputChannel = 0; +static int i_TimerCounter1Enabled = 0, i_TimerCounter2Enabled = 0, + i_WatchdogCounter3Enabled = 0; /* +----------------------------------------------------------------------------+ @@ -136,9 +136,10 @@ int i_TimerCounter1Enabled = 0, i_TimerCounter2Enabled = | | +----------------------------------------------------------------------------+ */ - -int i_APCI1500_ConfigDigitalInputEvent(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_ConfigDigitalInputEvent(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_PatternPolarity = 0, i_PatternTransition = 0, i_PatternMask = 0; int i_MaxChannel = 0, i_Count = 0, i_EventMask = 0; @@ -519,8 +520,10 @@ int i_APCI1500_ConfigDigitalInputEvent(struct comedi_device *dev, | | +----------------------------------------------------------------------------+ */ -int i_APCI1500_StartStopInputEvent(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_StartStopInputEvent(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_Event1InterruptStatus = 0, i_Event2InterruptStatus = 0, i_RegValue; @@ -784,8 +787,10 @@ int i_APCI1500_StartStopInputEvent(struct comedi_device *dev, struct comedi_subd | | +----------------------------------------------------------------------------+ */ -int i_APCI1500_Initialisation(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_Initialisation(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_DummyRead = 0; /******************/ @@ -956,9 +961,10 @@ int i_APCI1500_Initialisation(struct comedi_device *dev, struct comedi_subdevice | | +----------------------------------------------------------------------------+ */ - -int i_APCI1500_ReadMoreDigitalInput(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_ReadMoreDigitalInput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { unsigned int ui_PortValue = data[1]; unsigned int ui_Mask = 0; @@ -1040,8 +1046,10 @@ int i_APCI1500_ReadMoreDigitalInput(struct comedi_device *dev, struct comedi_sub | | +----------------------------------------------------------------------------+ */ -int i_APCI1500_ConfigDigitalOutputErrorInterrupt(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_ConfigDigitalOutputErrorInterrupt(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { devpriv->b_OutputMemoryStatus = data[0]; return insn->n; @@ -1066,9 +1074,10 @@ int i_APCI1500_ConfigDigitalOutputErrorInterrupt(struct comedi_device *dev, | | +----------------------------------------------------------------------------+ */ - -int i_APCI1500_WriteDigitalOutput(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_WriteDigitalOutput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { static unsigned int ui_Temp = 0; unsigned int ui_Temp1; @@ -1260,9 +1269,10 @@ int i_APCI1500_WriteDigitalOutput(struct comedi_device *dev, struct comedi_subde | | +----------------------------------------------------------------------------+ */ - -int i_APCI1500_ConfigCounterTimerWatchdog(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_ConfigCounterTimerWatchdog(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_TimerCounterMode, i_MasterConfiguration; @@ -1860,8 +1870,10 @@ int i_APCI1500_ConfigCounterTimerWatchdog(struct comedi_device *dev, | | +----------------------------------------------------------------------------+ */ -int i_APCI1500_StartStopTriggerTimerCounterWatchdog(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_StartStopTriggerTimerCounterWatchdog(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_CommandAndStatusValue; @@ -2181,9 +2193,10 @@ int i_APCI1500_StartStopTriggerTimerCounterWatchdog(struct comedi_device *dev, | | +----------------------------------------------------------------------------+ */ - -int i_APCI1500_ReadCounterTimerWatchdog(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_ReadCounterTimerWatchdog(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_CommandAndStatusValue; switch (data[0]) { @@ -2370,8 +2383,10 @@ int i_APCI1500_ReadCounterTimerWatchdog(struct comedi_device *dev, | | +----------------------------------------------------------------------------+ */ -int i_APCI1500_ReadInterruptMask(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_ReadInterruptMask(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { data[0] = i_InterruptMask; data[1] = i_InputChannel; @@ -2401,8 +2416,10 @@ int i_APCI1500_ReadInterruptMask(struct comedi_device *dev, struct comedi_subdev | | +----------------------------------------------------------------------------+ */ -int i_APCI1500_ConfigureInterrupt(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) +static int i_APCI1500_ConfigureInterrupt(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { unsigned int ui_Status; int i_RegValue; @@ -2821,8 +2838,7 @@ static void v_APCI1500_Interrupt(int irq, void *d) | | +----------------------------------------------------------------------------+ */ - -int i_APCI1500_Reset(struct comedi_device *dev) +static int i_APCI1500_Reset(struct comedi_device *dev) { int i_DummyRead = 0; i_TimerCounter1Init = 0; -- cgit v0.10.2 From 0b437fc493621b07a1bc7dcfedbfd6e3b86a149e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:12:29 -0700 Subject: Staging: comedi: hwdrv_apci1564.c: static sparse cleanups. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c index 4413279..4299ff5 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci1564.c @@ -56,8 +56,8 @@ You should also find the complete GPL in the COPYING file accompanying this sour #include "hwdrv_apci1564.h" /* Global variables */ -unsigned int ui_InterruptStatus_1564 = 0; -unsigned int ui_InterruptData, ui_Type; +static unsigned int ui_InterruptStatus_1564 = 0; +static unsigned int ui_InterruptData, ui_Type; /* +----------------------------------------------------------------------------+ -- cgit v0.10.2 From 882980133d0d94ad060a727f17362e27b9fec263 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:12:53 -0700 Subject: Staging: comedi: hwdrv_apci2032.c: static sparse fix Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci2032.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci2032.c index 2d32516..d7d2223 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci2032.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci2032.c @@ -53,7 +53,7 @@ You should also find the complete GPL in the COPYING file accompanying this sour */ #include "hwdrv_apci2032.h" -unsigned int ui_InterruptData, ui_Type; +static unsigned int ui_InterruptData, ui_Type; /* +----------------------------------------------------------------------------+ | Function Name : int i_APCI2032_ConfigDigitalOutput | -- cgit v0.10.2 From a6dc6d0df2e87c18af3c8b47d3c29613f5c90d9f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:13:28 -0700 Subject: Staging: comedi: hwdrv_apci3501.h: make a variable static. Cleans up the sparse warning. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.h b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.h index c456d75..743523e 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.h +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3501.h @@ -32,7 +32,7 @@ #define MODE0 0 #define MODE1 1 /* ANALOG OUTPUT RANGE */ -struct comedi_lrange range_apci3501_ao = { 2, { +static struct comedi_lrange range_apci3501_ao = { 2, { BIP_RANGE(10), UNI_RANGE(10) } -- cgit v0.10.2 From 4e4b592cb51342878166a2ea2bcf6151f0a3a29d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 16:14:02 -0700 Subject: Staging: comedi: hwdrv_apci3xxx.c: loads of sparse cleanups __iomem pointer fixes, and static cleanups. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3xxx.c b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3xxx.c index 3692326..2e20bc7 100644 --- a/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3xxx.c +++ b/drivers/staging/comedi/drivers/addi-data/hwdrv_apci3xxx.c @@ -67,10 +67,9 @@ You should also find the complete GPL in the COPYING file accompanying this sour | 1 : Conversion started | +----------------------------------------------------------------------------+ */ - -int i_APCI3XXX_TestConversionStarted(struct comedi_device *dev) +static int i_APCI3XXX_TestConversionStarted(struct comedi_device *dev) { - if ((readl((void *)(devpriv->dw_AiBase + 8)) & 0x80000UL) == 0x80000UL) + if ((readl(devpriv->dw_AiBase + 8) & 0x80000UL) == 0x80000UL) return 1; else return 0; @@ -104,9 +103,10 @@ int i_APCI3XXX_TestConversionStarted(struct comedi_device *dev) | -101 : Data size error | +----------------------------------------------------------------------------+ */ - -int i_APCI3XXX_AnalogInputConfigOperatingMode(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_AnalogInputConfigOperatingMode(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned char b_TimeBase = 0; @@ -204,19 +204,14 @@ int i_APCI3XXX_AnalogInputConfigOperatingMode(struct comedi_device *dev, /* Set the convert timing unit */ /*******************************/ - writel((unsigned int) - b_TimeBase, - (void *) - (devpriv-> - dw_AiBase - + - 36)); + writel((unsigned int)b_TimeBase, + devpriv->dw_AiBase + 36); /**************************/ /* Set the convert timing */ /*************************/ - writel(dw_ReloadValue, (void *)(devpriv->dw_AiBase + 32)); + writel(dw_ReloadValue, devpriv->dw_AiBase + 32); } else { /**************************/ /* Any conversion started */ @@ -294,9 +289,10 @@ int i_APCI3XXX_AnalogInputConfigOperatingMode(struct comedi_device *dev, | -101 : Data size error | +----------------------------------------------------------------------------+ */ - -int i_APCI3XXX_InsnConfigAnalogInput(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnConfigAnalogInput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; @@ -354,9 +350,10 @@ int i_APCI3XXX_InsnConfigAnalogInput(struct comedi_device *dev, | -101 : Data size error | +----------------------------------------------------------------------------+ */ - -int i_APCI3XXX_InsnReadAnalogInput(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnReadAnalogInput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned char b_Configuration = (unsigned char) CR_RANGE(insn->chanspec); @@ -422,26 +419,20 @@ int i_APCI3XXX_InsnReadAnalogInput(struct comedi_device *dev, /* Clear the FIFO */ /******************/ - writel(0x10000UL, - (void *)(devpriv->dw_AiBase + - 12)); + writel(0x10000UL, devpriv->dw_AiBase + 12); /*******************************/ /* Get and save the delay mode */ /*******************************/ - dw_Temp = - readl((void *)(devpriv-> - dw_AiBase + 4)); + dw_Temp = readl(devpriv->dw_AiBase + 4); dw_Temp = dw_Temp & 0xFFFFFEF0UL; /***********************************/ /* Channel configuration selection */ /***********************************/ - writel(dw_Temp, - (void *)(devpriv->dw_AiBase + - 4)); + writel(dw_Temp, devpriv->dw_AiBase + 4); /**************************/ /* Make the configuration */ @@ -458,35 +449,28 @@ int i_APCI3XXX_InsnReadAnalogInput(struct comedi_device *dev, /***************************/ writel(dw_Configuration, - (void *)(devpriv->dw_AiBase + - 0)); + devpriv->dw_AiBase + 0); /*********************/ /* Channel selection */ /*********************/ writel(dw_Temp | 0x100UL, - (void *)(devpriv->dw_AiBase + - 4)); + devpriv->dw_AiBase + 4); writel((unsigned int) b_Channel, - (void *)(devpriv->dw_AiBase + - 0)); + devpriv->dw_AiBase + 0); /***********************/ /* Restaure delay mode */ /***********************/ - writel(dw_Temp, - (void *)(devpriv->dw_AiBase + - 4)); + writel(dw_Temp, devpriv->dw_AiBase + 4); /***********************************/ /* Set the number of sequence to 1 */ /***********************************/ - writel(1, - (void *)(devpriv->dw_AiBase + - 48)); + writel(1, devpriv->dw_AiBase + 48); /***************************/ /* Save the interrupt flag */ @@ -514,50 +498,29 @@ int i_APCI3XXX_InsnReadAnalogInput(struct comedi_device *dev, /* Start the conversion */ /************************/ - writel(0x80000UL, - (void *) - (devpriv-> - dw_AiBase - + 8)); + writel(0x80000UL, devpriv->dw_AiBase + 8); /****************/ /* Wait the EOS */ /****************/ do { - dw_Temp = - readl( - (void *) - (devpriv-> - dw_AiBase - + - 20)); - dw_Temp = - dw_Temp - & 1; + dw_Temp = readl(devpriv->dw_AiBase + 20); + dw_Temp = dw_Temp & 1; } while (dw_Temp != 1); /*************************/ /* Read the analog value */ /*************************/ - data[dw_AcquisitionCpt] - = - (unsigned int) - readl((void - *) - (devpriv-> - dw_AiBase - + 28)); + data[dw_AcquisitionCpt] = (unsigned int)readl(devpriv->dw_AiBase + 28); } } else { /************************/ /* Start the conversion */ /************************/ - writel(0x180000UL, - (void *)(devpriv-> - dw_AiBase + 8)); + writel(0x180000UL, devpriv->dw_AiBase + 8); } } else { /**************************/ @@ -603,7 +566,7 @@ int i_APCI3XXX_InsnReadAnalogInput(struct comedi_device *dev, +----------------------------------------------------------------------------+ */ -void v_APCI3XXX_Interrupt(int irq, void *d) +static void v_APCI3XXX_Interrupt(int irq, void *d) { struct comedi_device *dev = d; unsigned char b_CopyCpt = 0; @@ -613,13 +576,13 @@ void v_APCI3XXX_Interrupt(int irq, void *d) /* Test if interrupt occur */ /***************************/ - dw_Status = readl((void *)(devpriv->dw_AiBase + 16)); + dw_Status = readl(devpriv->dw_AiBase + 16); if ( (dw_Status & 0x2UL) == 0x2UL) { /***********************/ /* Reset the interrupt */ /***********************/ - writel(dw_Status, (void *)(devpriv->dw_AiBase + 16)); + writel(dw_Status, devpriv->dw_AiBase + 16); /*****************************/ /* Test if interrupt enabled */ @@ -634,8 +597,7 @@ void v_APCI3XXX_Interrupt(int irq, void *d) b_CopyCpt < devpriv->ui_AiNbrofChannels; b_CopyCpt++) { devpriv->ui_AiReadData[b_CopyCpt] = - (unsigned int) readl((void *)(devpriv-> - dw_AiBase + 28)); + (unsigned int)readl(devpriv->dw_AiBase + 28); } /**************************/ @@ -682,9 +644,10 @@ void v_APCI3XXX_Interrupt(int irq, void *d) | -101 : Data size error | +----------------------------------------------------------------------------+ */ - -int i_APCI3XXX_InsnWriteAnalogOutput(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnWriteAnalogOutput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { unsigned char b_Range = (unsigned char) CR_RANGE(insn->chanspec); unsigned char b_Channel = (unsigned char) CR_CHAN(insn->chanspec); @@ -710,24 +673,21 @@ int i_APCI3XXX_InsnWriteAnalogOutput(struct comedi_device *dev, /* Set the range selection */ /***************************/ - writel(b_Range, - (void *)(devpriv->dw_AiBase + 96)); + writel(b_Range, devpriv->dw_AiBase + 96); /**************************************************/ /* Write the analog value to the selected channel */ /**************************************************/ writel((data[0] << 8) | b_Channel, - (void *)(devpriv->dw_AiBase + 100)); + devpriv->dw_AiBase + 100); /****************************/ /* Wait the end of transfer */ /****************************/ do { - dw_Status = - readl((void *)(devpriv-> - dw_AiBase + 96)); + dw_Status = readl(devpriv->dw_AiBase + 96); } while ((dw_Status & 0x100) != 0x100); } else { /***************************/ @@ -788,9 +748,10 @@ int i_APCI3XXX_InsnWriteAnalogOutput(struct comedi_device *dev, | -101 : Data size error | +----------------------------------------------------------------------------+ */ - -int i_APCI3XXX_InsnConfigInitTTLIO(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnConfigInitTTLIO(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned char b_Command = 0; @@ -916,9 +877,10 @@ int i_APCI3XXX_InsnConfigInitTTLIO(struct comedi_device *dev, | -101 : Data size error | +----------------------------------------------------------------------------+ */ - -int i_APCI3XXX_InsnBitsTTLIO(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnBitsTTLIO(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned char b_ChannelCpt = 0; @@ -1071,9 +1033,10 @@ int i_APCI3XXX_InsnBitsTTLIO(struct comedi_device *dev, | -101 : Data size error | +----------------------------------------------------------------------------+ */ - -int i_APCI3XXX_InsnReadTTLIO(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnReadTTLIO(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { unsigned char b_Channel = (unsigned char) CR_CHAN(insn->chanspec); int i_ReturnValue = insn->n; @@ -1184,9 +1147,10 @@ int i_APCI3XXX_InsnReadTTLIO(struct comedi_device *dev, | -101 : Data size error | +----------------------------------------------------------------------------+ */ - -int i_APCI3XXX_InsnWriteTTLIO(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnWriteTTLIO(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned char b_Channel = (unsigned char) CR_CHAN(insn->chanspec); @@ -1296,8 +1260,10 @@ int i_APCI3XXX_InsnWriteTTLIO(struct comedi_device *dev, +----------------------------------------------------------------------------+ */ -int i_APCI3XXX_InsnReadDigitalInput(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnReadDigitalInput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned char b_Channel = (unsigned char) CR_CHAN(insn->chanspec); @@ -1354,8 +1320,10 @@ int i_APCI3XXX_InsnReadDigitalInput(struct comedi_device *dev, | -101 : Data size error | +----------------------------------------------------------------------------+ */ -int i_APCI3XXX_InsnBitsDigitalInput(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnBitsDigitalInput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned int dw_Temp = 0; @@ -1407,8 +1375,10 @@ int i_APCI3XXX_InsnBitsDigitalInput(struct comedi_device *dev, | -101 : Data size error | +----------------------------------------------------------------------------+ */ -int i_APCI3XXX_InsnBitsDigitalOutput(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnBitsDigitalOutput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned char b_ChannelCpt = 0; @@ -1503,8 +1473,10 @@ int i_APCI3XXX_InsnBitsDigitalOutput(struct comedi_device *dev, +----------------------------------------------------------------------------+ */ -int i_APCI3XXX_InsnWriteDigitalOutput(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnWriteDigitalOutput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned char b_Channel = CR_CHAN(insn->chanspec); @@ -1578,8 +1550,10 @@ int i_APCI3XXX_InsnWriteDigitalOutput(struct comedi_device *dev, +----------------------------------------------------------------------------+ */ -int i_APCI3XXX_InsnReadDigitalOutput(struct comedi_device *dev, - struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) +static int i_APCI3XXX_InsnReadDigitalOutput(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int i_ReturnValue = insn->n; unsigned char b_Channel = CR_CHAN(insn->chanspec); @@ -1636,7 +1610,7 @@ int i_APCI3XXX_InsnReadDigitalOutput(struct comedi_device *dev, +----------------------------------------------------------------------------+ */ -int i_APCI3XXX_Reset(struct comedi_device *dev) +static int i_APCI3XXX_Reset(struct comedi_device *dev) { unsigned char b_Cpt = 0; @@ -1656,27 +1630,26 @@ int i_APCI3XXX_Reset(struct comedi_device *dev) /* Clear the start command */ /***************************/ - writel(0, (void *)(devpriv->dw_AiBase + 8)); + writel(0, devpriv->dw_AiBase + 8); /*****************************/ /* Reset the interrupt flags */ /*****************************/ - writel(readl((void *)(devpriv->dw_AiBase + 16)), - (void *)(devpriv->dw_AiBase + 16)); + writel(readl(devpriv->dw_AiBase + 16), devpriv->dw_AiBase + 16); /*****************/ /* clear the EOS */ /*****************/ - readl((void *)(devpriv->dw_AiBase + 20)); + readl(devpriv->dw_AiBase + 20); /******************/ /* Clear the FIFO */ /******************/ for (b_Cpt = 0; b_Cpt < 16; b_Cpt++) { - readl((void *)(devpriv->dw_AiBase + 28)); + readl(devpriv->dw_AiBase + 28); } /************************/ -- cgit v0.10.2 From 7880fc54c985b4fbc0fab77f81b7f09610194e1c Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 4 May 2010 09:58:52 -0700 Subject: Staging: hv: cleanup network driver Minor stuff: * Add module description * Remove variable set but never used. * Move variable inside conditional Signed-off-by: Stephen Hemminger Acked-by: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 51a56e2..2ce9437 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -111,14 +111,13 @@ static void netvsc_xmit_completion(void *context) struct hv_netvsc_packet *packet = (struct hv_netvsc_packet *)context; struct sk_buff *skb = (struct sk_buff *) (unsigned long)packet->Completion.Send.SendCompletionTid; - struct net_device *net; DPRINT_ENTER(NETVSC_DRV); kfree(packet); if (skb) { - net = skb->dev; + struct net_device *net = skb->dev; dev_kfree_skb_any(skb); if (netif_queue_stopped(net)) { @@ -291,7 +290,6 @@ static int netvsc_recv_callback(struct hv_device *device_obj, { struct vm_device *device_ctx = to_vm_device(device_obj); struct net_device *net = dev_get_drvdata(&device_ctx->device); - struct net_device_context *net_device_ctx; struct sk_buff *skb; void *data; int i; @@ -305,8 +303,6 @@ static int netvsc_recv_callback(struct hv_device *device_obj, return 0; } - net_device_ctx = netdev_priv(net); - /* Allocate a skb - TODO direct I/O to pages? */ skb = netdev_alloc_skb_ip_align(net, packet->TotalDataBufferLength); if (unlikely(!skb)) { @@ -585,6 +581,7 @@ static void __exit netvsc_exit(void) MODULE_LICENSE("GPL"); MODULE_VERSION(HV_DRV_VERSION); +MODULE_DESCRIPTION("Microsoft Hyper-V network driver"); module_param(netvsc_ringbuffer_size, int, S_IRUGO); module_init(netvsc_init); -- cgit v0.10.2 From 450d7a4b7ace20fb1cbb4d87ccbccbac3f8895d0 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 4 May 2010 09:58:53 -0700 Subject: Staging: hv: ring parameter The ring size parameter should be number of pages (not bytes). Add module parameter information as well. Signed-off-by: Stephen Hemminger Acked-by: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/NetVscApi.h b/drivers/staging/hv/NetVscApi.h index 95d7a32..c372c98 100644 --- a/drivers/staging/hv/NetVscApi.h +++ b/drivers/staging/hv/NetVscApi.h @@ -28,7 +28,6 @@ #include "VmbusApi.h" /* Defines */ -#define NETVSC_DEVICE_RING_BUFFER_SIZE (64*PAGE_SIZE) #define HW_MACADDR_LEN 6 /* Fwd declaration */ diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 2ce9437..b02455c 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -52,7 +52,11 @@ struct netvsc_driver_context { struct netvsc_driver drv_obj; }; -static int netvsc_ringbuffer_size = NETVSC_DEVICE_RING_BUFFER_SIZE; +/* Need at least MAX_SKB_FRAGS (18) + 1 + to handle worst case fragmented packet */ +static int ring_size = roundup_pow_of_two(2*MAX_SKB_FRAGS+1); +module_param(ring_size, int, S_IRUGO); +MODULE_PARM_DESC(ring_size, "Ring buffer size (# of pages)"); /* The one and only one */ static struct netvsc_driver_context g_netvsc_drv; @@ -536,7 +540,7 @@ static int netvsc_drv_init(int (*drv_init)(struct hv_driver *drv)) vmbus_get_interface(&net_drv_obj->Base.VmbusChannelInterface); - net_drv_obj->RingBufferSize = netvsc_ringbuffer_size; + net_drv_obj->RingBufferSize = ring_size * PAGE_SIZE; net_drv_obj->OnReceiveCallback = netvsc_recv_callback; net_drv_obj->OnLinkStatusChanged = netvsc_linkstatus_callback; @@ -582,7 +586,6 @@ static void __exit netvsc_exit(void) MODULE_LICENSE("GPL"); MODULE_VERSION(HV_DRV_VERSION); MODULE_DESCRIPTION("Microsoft Hyper-V network driver"); -module_param(netvsc_ringbuffer_size, int, S_IRUGO); module_init(netvsc_init); module_exit(netvsc_exit); -- cgit v0.10.2 From 9f8bd8bacf90c78e331ad63c38b0ea167e2ce639 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 4 May 2010 09:58:54 -0700 Subject: Staging: hv: use existing Ethernet header size Use ETH_ALEN to indicate that MAC address is Ethernet. Also use Linux printk format for mac addresses. Signed-off-by: Stephen Hemminger Acked-by: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/NetVscApi.h b/drivers/staging/hv/NetVscApi.h index c372c98..91a4cd9 100644 --- a/drivers/staging/hv/NetVscApi.h +++ b/drivers/staging/hv/NetVscApi.h @@ -27,9 +27,6 @@ #include "VmbusApi.h" -/* Defines */ -#define HW_MACADDR_LEN 6 - /* Fwd declaration */ struct hv_netvsc_packet; @@ -92,9 +89,6 @@ struct netvsc_driver { u32 RingBufferSize; u32 RequestExtSize; - /* Additional num of page buffers to allocate */ - u32 AdditionalRequestPageBufferCount; - /* * This is set by the caller to allow us to callback when we * receive a packet from the "wire" diff --git a/drivers/staging/hv/RndisFilter.c b/drivers/staging/hv/RndisFilter.c index cd2930d..8611396 100644 --- a/drivers/staging/hv/RndisFilter.c +++ b/drivers/staging/hv/RndisFilter.c @@ -22,6 +22,8 @@ #include #include #include +#include + #include "osd.h" #include "logging.h" #include "NetVscApi.h" @@ -50,7 +52,7 @@ struct rndis_device { spinlock_t request_lock; struct list_head RequestList; - unsigned char HwMacAddr[HW_MACADDR_LEN]; + unsigned char HwMacAddr[ETH_ALEN]; }; struct rndis_request { @@ -538,7 +540,7 @@ Cleanup: static int RndisFilterQueryDeviceMac(struct rndis_device *Device) { - u32 size = HW_MACADDR_LEN; + u32 size = ETH_ALEN; return RndisFilterQueryDevice(Device, RNDIS_OID_802_3_PERMANENT_ADDRESS, @@ -833,16 +835,10 @@ static int RndisFilterOnDeviceAdd(struct hv_device *Device, */ } - DPRINT_INFO(NETVSC, "Device 0x%p mac addr %02x%02x%02x%02x%02x%02x", - rndisDevice, - rndisDevice->HwMacAddr[0], - rndisDevice->HwMacAddr[1], - rndisDevice->HwMacAddr[2], - rndisDevice->HwMacAddr[3], - rndisDevice->HwMacAddr[4], - rndisDevice->HwMacAddr[5]); + DPRINT_INFO(NETVSC, "Device 0x%p mac addr %pM", + rndisDevice, rndisDevice->HwMacAddr); - memcpy(deviceInfo->MacAddr, rndisDevice->HwMacAddr, HW_MACADDR_LEN); + memcpy(deviceInfo->MacAddr, rndisDevice->HwMacAddr, ETH_ALEN); RndisFilterQueryDeviceLinkStatus(rndisDevice); -- cgit v0.10.2 From 6048718d719f460abba8eaff1c0122247b2c3d91 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 4 May 2010 09:58:55 -0700 Subject: Staging: hv: transmit scatter gather support The transmit management of pages was confusing for handling fragmented SKB's. (But since NETIF_F_SG was never set, the code was never hit). The parameter AdditionalRequestPageBufferCount is always one, (and leads to ugly code), so just inline and add comments. Signed-off-by: Stephen Hemminger Acked-by: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/RndisFilter.c b/drivers/staging/hv/RndisFilter.c index 8611396..de4bc80 100644 --- a/drivers/staging/hv/RndisFilter.c +++ b/drivers/staging/hv/RndisFilter.c @@ -624,7 +624,6 @@ int RndisFilterInit(struct netvsc_driver *Driver) sizeof(struct rndis_filter_packet)); Driver->RequestExtSize = sizeof(struct rndis_filter_packet); - Driver->AdditionalRequestPageBufferCount = 1; /* For rndis header */ /* Driver->Context = rndisDriver; */ diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index b02455c..4124979 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -144,27 +144,21 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) (struct netvsc_driver_context *)driver_ctx; struct netvsc_driver *net_drv_obj = &net_drv_ctx->drv_obj; struct hv_netvsc_packet *packet; - int i; int ret; - int num_frags; + unsigned int i, num_pages; int retries = 0; DPRINT_ENTER(NETVSC_DRV); - /* Support only 1 chain of frags */ - ASSERT(skb_shinfo(skb)->frag_list == NULL); - ASSERT(skb->dev == net); - DPRINT_DBG(NETVSC_DRV, "xmit packet - len %d data_len %d", skb->len, skb->data_len); - /* Add 1 for skb->data and any additional ones requested */ - num_frags = skb_shinfo(skb)->nr_frags + 1 + - net_drv_obj->AdditionalRequestPageBufferCount; + /* Add 1 for skb->data and additional one for RNDIS */ + num_pages = skb_shinfo(skb)->nr_frags + 1 + 1; /* Allocate a netvsc packet based on # of frags. */ packet = kzalloc(sizeof(struct hv_netvsc_packet) + - (num_frags * sizeof(struct hv_page_buffer)) + + (num_pages * sizeof(struct hv_page_buffer)) + net_drv_obj->RequestExtSize, GFP_ATOMIC); if (!packet) { DPRINT_ERR(NETVSC_DRV, "unable to allocate hv_netvsc_packet"); @@ -173,36 +167,30 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) packet->Extension = (void *)(unsigned long)packet + sizeof(struct hv_netvsc_packet) + - (num_frags * sizeof(struct hv_page_buffer)); + (num_pages * sizeof(struct hv_page_buffer)); /* Setup the rndis header */ - packet->PageBufferCount = num_frags; + packet->PageBufferCount = num_pages; /* TODO: Flush all write buffers/ memory fence ??? */ /* wmb(); */ /* Initialize it from the skb */ - ASSERT(skb->data); packet->TotalDataBufferLength = skb->len; - /* - * Start filling in the page buffers starting at - * AdditionalRequestPageBufferCount offset - */ - packet->PageBuffers[net_drv_obj->AdditionalRequestPageBufferCount].Pfn = virt_to_phys(skb->data) >> PAGE_SHIFT; - packet->PageBuffers[net_drv_obj->AdditionalRequestPageBufferCount].Offset = (unsigned long)skb->data & (PAGE_SIZE - 1); - packet->PageBuffers[net_drv_obj->AdditionalRequestPageBufferCount].Length = skb->len - skb->data_len; - - ASSERT((skb->len - skb->data_len) <= PAGE_SIZE); - - for (i = net_drv_obj->AdditionalRequestPageBufferCount + 1; - i < num_frags; i++) { - packet->PageBuffers[i].Pfn = - page_to_pfn(skb_shinfo(skb)->frags[i-(net_drv_obj->AdditionalRequestPageBufferCount+1)].page); - packet->PageBuffers[i].Offset = - skb_shinfo(skb)->frags[i-(net_drv_obj->AdditionalRequestPageBufferCount+1)].page_offset; - packet->PageBuffers[i].Length = - skb_shinfo(skb)->frags[i-(net_drv_obj->AdditionalRequestPageBufferCount+1)].size; + /* Start filling in the page buffers starting after RNDIS buffer. */ + packet->PageBuffers[1].Pfn = virt_to_phys(skb->data) >> PAGE_SHIFT; + packet->PageBuffers[1].Offset + = (unsigned long)skb->data & (PAGE_SIZE - 1); + packet->PageBuffers[1].Length = skb_headlen(skb); + + /* Additional fragments are after SKB data */ + for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) { + skb_frag_t *f = &skb_shinfo(skb)->frags[i]; + + packet->PageBuffers[i+2].Pfn = page_to_pfn(f->page); + packet->PageBuffers[i+2].Offset = f->page_offset; + packet->PageBuffers[i+2].Length = f->size; } /* Set the completion routine */ @@ -423,6 +411,9 @@ static int netvsc_probe(struct device *device) net->netdev_ops = &device_ops; + /* TODO: Add GSO and Checksum offload */ + net->features = NETIF_F_SG; + SET_NETDEV_DEV(net, device); ret = register_netdev(net); -- cgit v0.10.2 From b220f5f925b8938747bfe4a61e362d132bdd9544 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 4 May 2010 09:58:56 -0700 Subject: Staging: hv: add transmit flow control Keep track of the number of pages sent over transmit and stop before going over. Signed-off-by: Stephen Hemminger Acked-by: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 4124979..a6ca010 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -43,6 +43,7 @@ struct net_device_context { /* point back to our device context */ struct vm_device *device_ctx; + unsigned long avail; }; struct netvsc_driver_context { @@ -52,8 +53,10 @@ struct netvsc_driver_context { struct netvsc_driver drv_obj; }; -/* Need at least MAX_SKB_FRAGS (18) + 1 - to handle worst case fragmented packet */ +#define PACKET_PAGES_LOWATER 8 +/* Need this many pages to handle worst case fragmented packet */ +#define PACKET_PAGES_HIWATER (MAX_SKB_FRAGS + 2) + static int ring_size = roundup_pow_of_two(2*MAX_SKB_FRAGS+1); module_param(ring_size, int, S_IRUGO); MODULE_PARM_DESC(ring_size, "Ring buffer size (# of pages)"); @@ -122,14 +125,13 @@ static void netvsc_xmit_completion(void *context) if (skb) { struct net_device *net = skb->dev; - dev_kfree_skb_any(skb); + struct net_device_context *net_device_ctx = netdev_priv(net); + unsigned int num_pages = skb_shinfo(skb)->nr_frags + 2; - if (netif_queue_stopped(net)) { - DPRINT_INFO(NETVSC_DRV, "net device (%p) waking up...", - net); + dev_kfree_skb_any(skb); - netif_wake_queue(net); - } + if ((net_device_ctx->avail += num_pages) >= PACKET_PAGES_HIWATER) + netif_wake_queue(net); } DPRINT_EXIT(NETVSC_DRV); @@ -146,7 +148,6 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) struct hv_netvsc_packet *packet; int ret; unsigned int i, num_pages; - int retries = 0; DPRINT_ENTER(NETVSC_DRV); @@ -155,14 +156,20 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) /* Add 1 for skb->data and additional one for RNDIS */ num_pages = skb_shinfo(skb)->nr_frags + 1 + 1; + if (num_pages > net_device_ctx->avail) + return NETDEV_TX_BUSY; /* Allocate a netvsc packet based on # of frags. */ packet = kzalloc(sizeof(struct hv_netvsc_packet) + (num_pages * sizeof(struct hv_page_buffer)) + net_drv_obj->RequestExtSize, GFP_ATOMIC); if (!packet) { + /* out of memory, silently drop packet */ DPRINT_ERR(NETVSC_DRV, "unable to allocate hv_netvsc_packet"); - return -1; + + dev_kfree_skb(skb); + net->stats.tx_dropped++; + return NETDEV_TX_OK; } packet->Extension = (void *)(unsigned long)packet + @@ -198,52 +205,26 @@ static int netvsc_start_xmit(struct sk_buff *skb, struct net_device *net) packet->Completion.Send.SendCompletionContext = packet; packet->Completion.Send.SendCompletionTid = (unsigned long)skb; -retry_send: ret = net_drv_obj->OnSend(&net_device_ctx->device_ctx->device_obj, packet); - if (ret == 0) { - ret = NETDEV_TX_OK; net->stats.tx_bytes += skb->len; net->stats.tx_packets++; - } else { - retries++; - if (retries < 4) { - DPRINT_ERR(NETVSC_DRV, "unable to send..." - "retrying %d...", retries); - udelay(100); - goto retry_send; - } - /* no more room or we are shutting down */ - DPRINT_ERR(NETVSC_DRV, "unable to send (%d)..." - "marking net device (%p) busy", ret, net); - DPRINT_INFO(NETVSC_DRV, "net device (%p) stopping", net); + DPRINT_DBG(NETVSC_DRV, "# of xmits %lu total size %lu", + net->stats.tx_packets, + net->stats.tx_bytes); - ret = NETDEV_TX_BUSY; + if ((net_device_ctx->avail -= num_pages) < PACKET_PAGES_LOWATER) + netif_stop_queue(net); + } else { + /* we are shutting down or bus overloaded, just drop packet */ net->stats.tx_dropped++; - - netif_stop_queue(net); - - /* - * Null it since the caller will free it instead of the - * completion routine - */ - packet->Completion.Send.SendCompletionTid = 0; - - /* - * Release the resources since we will not get any send - * completion - */ - netvsc_xmit_completion((void *)packet); + netvsc_xmit_completion(packet); } - DPRINT_DBG(NETVSC_DRV, "# of xmits %lu total size %lu", - net->stats.tx_packets, - net->stats.tx_bytes); - DPRINT_EXIT(NETVSC_DRV); - return ret; + return NETDEV_TX_OK; } /* @@ -382,6 +363,7 @@ static int netvsc_probe(struct device *device) net_device_ctx = netdev_priv(net); net_device_ctx->device_ctx = device_ctx; + net_device_ctx->avail = ring_size; dev_set_drvdata(device, net); /* Notify the netvsc driver of the new device */ -- cgit v0.10.2 From f82f4ad7bf9dc3c7268080cc2afdff897e1d72ca Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Tue, 4 May 2010 09:58:57 -0700 Subject: Staging: hv: add basic ethtool support Ethtool allows querying device information and controlling parameters. For now just add ability to turn on/off scatter/gather. Signed-off-by: Stephen Hemminger Acked-by: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index a6ca010..a6584a8 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -326,6 +326,21 @@ static int netvsc_recv_callback(struct hv_device *device_obj, return 0; } +static void netvsc_get_drvinfo(struct net_device *net, + struct ethtool_drvinfo *info) +{ + strcpy(info->driver, "hv_netvsc"); + strcpy(info->version, HV_DRV_VERSION); + strcpy(info->fw_version, "N/A"); +} + +static const struct ethtool_ops ethtool_ops = { + .get_drvinfo = netvsc_get_drvinfo, + .get_sg = ethtool_op_get_sg, + .set_sg = ethtool_op_set_sg, + .get_link = ethtool_op_get_link, +}; + static const struct net_device_ops device_ops = { .ndo_open = netvsc_open, .ndo_stop = netvsc_close, @@ -396,6 +411,7 @@ static int netvsc_probe(struct device *device) /* TODO: Add GSO and Checksum offload */ net->features = NETIF_F_SG; + SET_ETHTOOL_OPS(net, ðtool_ops); SET_NETDEV_DEV(net, device); ret = register_netdev(net); -- cgit v0.10.2 From 5f87404dfce14b2a194d085b7bac4b8c3672ab00 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 22:20:54 +0100 Subject: Staging: iio: Trivial - remove pointless semi colon (checkpatch found) Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c index 918b0fd..46bd94a 100644 --- a/drivers/staging/iio/industrialio-trigger.c +++ b/drivers/staging/iio/industrialio-trigger.c @@ -169,7 +169,7 @@ struct iio_trigger *iio_trigger_find_by_name(const char *name, size_t len) mutex_unlock(&iio_trigger_list_lock); return found ? trig : NULL; -}; +} EXPORT_SYMBOL(iio_trigger_find_by_name); void iio_trigger_poll(struct iio_trigger *trig) -- cgit v0.10.2 From 26de7208281fd21606201ab3314f60e517d6c56f Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 22:34:36 +0100 Subject: Staging: iio: accelerometers trivial checkpatch related fixes Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c index 7617da8..9214d84 100644 --- a/drivers/staging/iio/accel/lis3l02dq_ring.c +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c @@ -192,8 +192,7 @@ error_ret: } -static const u8 read_all_tx_array[] = -{ +static const u8 read_all_tx_array[] = { LIS3L02DQ_READ_REG(LIS3L02DQ_REG_OUT_X_L_ADDR), 0, LIS3L02DQ_READ_REG(LIS3L02DQ_REG_OUT_X_H_ADDR), 0, LIS3L02DQ_READ_REG(LIS3L02DQ_REG_OUT_Y_L_ADDR), 0, @@ -358,10 +357,10 @@ static int lis3l02dq_data_rdy_ring_predisable(struct iio_dev *indio_dev) /* Caller responsible for locking as necessary. */ -static int __lis3l02dq_write_data_ready_config(struct device *dev, - struct - iio_event_handler_list *list, - bool state) +static int +__lis3l02dq_write_data_ready_config(struct device *dev, + struct iio_event_handler_list *list, + bool state) { int ret; u8 valold; diff --git a/drivers/staging/iio/accel/sca3000_core.c b/drivers/staging/iio/accel/sca3000_core.c index 9485b13..d4f82c3 100644 --- a/drivers/staging/iio/accel/sca3000_core.c +++ b/drivers/staging/iio/accel/sca3000_core.c @@ -277,7 +277,7 @@ static int sca3000_check_status(struct device *dev) if (ret < 0) goto error_ret; if (rx[1] & SCA3000_EEPROM_CS_ERROR) - dev_err(dev, "eeprom error \n"); + dev_err(dev, "eeprom error\n"); if (rx[1] & SCA3000_SPI_FRAME_ERROR) dev_err(dev, "Previous SPI Frame was corrupt\n"); kfree(rx); @@ -394,7 +394,7 @@ sca3000_show_available_measurement_modes(struct device *dev, break; } /* always supported */ - len += sprintf(buf + len, " 3 - motion detection \n"); + len += sprintf(buf + len, " 3 - motion detection\n"); return len; } -- cgit v0.10.2 From cb6405b15f7b2814f8f5170482b2e13ccfcb6376 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Tue, 4 May 2010 22:34:37 +0100 Subject: Staging: iio: light trivial whitespace fix Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/light/tsl2563.c b/drivers/staging/iio/light/tsl2563.c index da3d51c..f8a0836 100644 --- a/drivers/staging/iio/light/tsl2563.c +++ b/drivers/staging/iio/light/tsl2563.c @@ -646,7 +646,7 @@ static int __devinit tsl2563_probe(struct i2c_client *client, err = tsl2563_detect(chip); if (err) { - dev_err(&client->dev, "device not found, error %d \n", -err); + dev_err(&client->dev, "device not found, error %d\n", -err); goto fail1; } -- cgit v0.10.2 From 1b183e4b93c4e05160d2c8f08b9546dd4752084b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:24:05 -0700 Subject: Staging: iio: adc: max1363_core: fix up some sparse warnings Also fix a minor coding style issue. Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c index fa91cc1..4a77657 100644 --- a/drivers/staging/iio/adc/max1363_core.c +++ b/drivers/staging/iio/adc/max1363_core.c @@ -139,16 +139,15 @@ static const struct max1363_mode max1363_mode_table[] = { }; const struct max1363_mode -*max1363_match_mode(u32 mask, const struct max1363_chip_info *ci) { +*max1363_match_mode(u32 mask, const struct max1363_chip_info *ci) +{ int i; if (mask) for (i = 0; i < ci->num_modes; i++) - if (!((~max1363_mode_table[ci->mode_list[i]] - .modemask) & + if (!((~max1363_mode_table[ci->mode_list[i]].modemask) & mask)) - return &max1363_mode_table[ci - ->mode_list[i]]; - return 0; + return &max1363_mode_table[ci->mode_list[i]]; + return NULL; }; static ssize_t max1363_show_precision(struct device *dev, @@ -298,7 +297,7 @@ static ssize_t max1363_show_scale(struct device *dev, st->chip_info->int_vref_mv >> st->chip_info->bits); } -IIO_DEVICE_ATTR(in_scale, S_IRUGO, max1363_show_scale, NULL, 0); +static IIO_DEVICE_ATTR(in_scale, S_IRUGO, max1363_show_scale, NULL, 0); static ssize_t max1363_show_name(struct device *dev, struct device_attribute *attr, @@ -309,7 +308,7 @@ static ssize_t max1363_show_name(struct device *dev, return sprintf(buf, "%s\n", st->chip_info->name); } -IIO_DEVICE_ATTR(name, S_IRUGO, max1363_show_name, NULL, 0); +static IIO_DEVICE_ATTR(name, S_IRUGO, max1363_show_name, NULL, 0); /* Applies to max1363 */ static const enum max1363_modes max1363_mode_list[] = { -- cgit v0.10.2 From f03de82b3f10b2e8b7f75f3d4323ec38d131a99c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:26:19 -0700 Subject: Staging: iio: max1363_core: fix bug in kzalloc call The operands were switched around :( Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/adc/max1363_core.c b/drivers/staging/iio/adc/max1363_core.c index 4a77657..905f856 100644 --- a/drivers/staging/iio/adc/max1363_core.c +++ b/drivers/staging/iio/adc/max1363_core.c @@ -958,9 +958,8 @@ static int __devinit max1363_probe(struct i2c_client *client, } st->indio_dev->available_scan_masks - = kzalloc(GFP_KERNEL, - sizeof(*st->indio_dev->available_scan_masks)* - (st->chip_info->num_modes + 1)); + = kzalloc(sizeof(*st->indio_dev->available_scan_masks)* + (st->chip_info->num_modes + 1), GFP_KERNEL); if (!st->indio_dev->available_scan_masks) { ret = -ENOMEM; goto error_free_device; -- cgit v0.10.2 From acbbfe236eb6fa25fdfb2a8762d0ad260f6b667c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:28:37 -0700 Subject: Staging: iio: adc: max1363_ring.c: fix up sparse warnings Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c index 85fde75..c8aa011 100644 --- a/drivers/staging/iio/adc/max1363_ring.c +++ b/drivers/staging/iio/adc/max1363_ring.c @@ -142,7 +142,7 @@ static int max1363_ring_predisable(struct iio_dev *indio_dev) * then. Some triggers will generate their own time stamp. Currently * there is no way of notifying them when no one cares. **/ -void max1363_poll_func_th(struct iio_dev *indio_dev) +static void max1363_poll_func_th(struct iio_dev *indio_dev) { struct max1363_state *st = indio_dev->dev_data; -- cgit v0.10.2 From 341713f265950884d2edbbf55088127a915927ad Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:29:41 -0700 Subject: Staging: iio: light: tsl2563: fix static sparse warning Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/light/tsl2563.c b/drivers/staging/iio/light/tsl2563.c index f8a0836..e4b0a5e 100644 --- a/drivers/staging/iio/light/tsl2563.c +++ b/drivers/staging/iio/light/tsl2563.c @@ -607,7 +607,7 @@ static ssize_t tsl2563_show_name(struct device *dev, return sprintf(buf, "%s\n", chip->client->name); } -DEVICE_ATTR(name, S_IRUGO, tsl2563_show_name, NULL); +static DEVICE_ATTR(name, S_IRUGO, tsl2563_show_name, NULL); static struct attribute *tsl2563_attributes[] = { &dev_attr_adc0.attr, -- cgit v0.10.2 From d1d8abdb05bddce645649c17949b0bc62e6f096b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:31:22 -0700 Subject: Staging: iio: trigger: fix up some global variables These should be static. Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/trigger/iio-trig-gpio.c b/drivers/staging/iio/trigger/iio-trig-gpio.c index e40099f..1da285d 100644 --- a/drivers/staging/iio/trigger/iio-trig-gpio.c +++ b/drivers/staging/iio/trigger/iio-trig-gpio.c @@ -25,8 +25,8 @@ #include "../iio.h" #include "../trigger.h" -LIST_HEAD(iio_gpio_trigger_list); -DEFINE_MUTEX(iio_gpio_trigger_list_lock); +static LIST_HEAD(iio_gpio_trigger_list); +static DEFINE_MUTEX(iio_gpio_trigger_list_lock); struct iio_gpio_trigger_info { struct mutex in_use; diff --git a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c index 4295bbc..4ee3ae1 100644 --- a/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c +++ b/drivers/staging/iio/trigger/iio-trig-periodic-rtc.c @@ -19,8 +19,8 @@ #include "../iio.h" #include "../trigger.h" -LIST_HEAD(iio_prtc_trigger_list); -DEFINE_MUTEX(iio_prtc_trigger_list_lock); +static LIST_HEAD(iio_prtc_trigger_list); +static DEFINE_MUTEX(iio_prtc_trigger_list_lock); struct iio_prtc_trigger_info { struct rtc_device *rtc; -- cgit v0.10.2 From 7cfce527a2cec1a2757136eb44d8dfa473a82d37 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:32:01 -0700 Subject: Staging: iio: accel: fix up some sparse warnings. Minor stuff (static, NULL, etc.) Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c index 9214d84..78d8572 100644 --- a/drivers/staging/iio/accel/lis3l02dq_ring.c +++ b/drivers/staging/iio/accel/lis3l02dq_ring.c @@ -207,7 +207,7 @@ static const u8 read_all_tx_array[] = { * @rx_array: (dma capable) recieve array, must be at least * 4*number of channels **/ -int lis3l02dq_read_all(struct lis3l02dq_state *st, u8 *rx_array) +static int lis3l02dq_read_all(struct lis3l02dq_state *st, u8 *rx_array) { struct spi_transfer *xfers; struct spi_message msg; @@ -588,7 +588,6 @@ void lis3l02dq_uninitialize_ring(struct iio_ring_buffer *ring) iio_ring_buffer_unregister(ring); } - int lis3l02dq_set_ring_length(struct iio_dev *indio_dev, int length) { /* Set sensible defaults for the ring buffer */ diff --git a/drivers/staging/iio/accel/sca3000_ring.c b/drivers/staging/iio/accel/sca3000_ring.c index 2b39e6f..8e8c068 100644 --- a/drivers/staging/iio/accel/sca3000_ring.c +++ b/drivers/staging/iio/accel/sca3000_ring.c @@ -186,9 +186,9 @@ static ssize_t sca3000_store_ring_bpse(struct device *dev, return ret ? ret : len; } -static IIO_SCAN_EL_C(accel_x, 0, 0, 0, 0); -static IIO_SCAN_EL_C(accel_y, 1, 0, 0, 0); -static IIO_SCAN_EL_C(accel_z, 2, 0, 0, 0); +static IIO_SCAN_EL_C(accel_x, 0, 0, 0, NULL); +static IIO_SCAN_EL_C(accel_y, 1, 0, 0, NULL); +static IIO_SCAN_EL_C(accel_z, 2, 0, 0, NULL); static IIO_CONST_ATTR(accel_precision_available, "8 11"); static IIO_DEVICE_ATTR(accel_precision, S_IRUGO | S_IWUSR, @@ -244,7 +244,7 @@ static struct iio_ring_buffer *sca3000_rb_allocate(struct iio_dev *indio_dev) ring = kzalloc(sizeof *ring, GFP_KERNEL); if (!ring) - return 0; + return NULL; ring->private = indio_dev; buf = &ring->buf; iio_ring_buffer_init(buf, indio_dev); -- cgit v0.10.2 From 0deebb4fc4784699afec04231f981aaad3126ff9 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:32:43 -0700 Subject: Staging: iio: industrialio-ring.c: fix up sparse warnings Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/industrialio-ring.c b/drivers/staging/iio/industrialio-ring.c index fc27d22..ada159b 100644 --- a/drivers/staging/iio/industrialio-ring.c +++ b/drivers/staging/iio/industrialio-ring.c @@ -58,7 +58,7 @@ EXPORT_SYMBOL(iio_push_or_escallate_ring_event); * This function relies on all ring buffer implementations having an * iio_ring_buffer as their first element. **/ -int iio_ring_open(struct inode *inode, struct file *filp) +static int iio_ring_open(struct inode *inode, struct file *filp) { struct iio_handler *hand = container_of(inode->i_cdev, struct iio_handler, chrdev); @@ -77,7 +77,7 @@ int iio_ring_open(struct inode *inode, struct file *filp) * This function relies on all ring buffer implementations having an * iio_ring_buffer as their first element. **/ -int iio_ring_release(struct inode *inode, struct file *filp) +static int iio_ring_release(struct inode *inode, struct file *filp) { struct cdev *cd = inode->i_cdev; struct iio_handler *hand = iio_cdev_to_handler(cd); @@ -96,10 +96,8 @@ int iio_ring_release(struct inode *inode, struct file *filp) * This function relies on all ring buffer implementations having an * iio_ring _bufer as their first element. **/ -ssize_t iio_ring_rip_outer(struct file *filp, - char *buf, - size_t count, - loff_t *f_ps) +static ssize_t iio_ring_rip_outer(struct file *filp, char __user *buf, + size_t count, loff_t *f_ps) { struct iio_ring_buffer *rb = filp->private_data; int ret, dead_offset, copied; @@ -251,7 +249,7 @@ void iio_ring_buffer_init(struct iio_ring_buffer *ring, ring->indio_dev = dev_info; ring->ev_int.private = ring; ring->access_handler.private = ring; - ring->shared_ev_pointer.ev_p = 0; + ring->shared_ev_pointer.ev_p = NULL; spin_lock_init(&ring->shared_ev_pointer.lock); } EXPORT_SYMBOL(iio_ring_buffer_init); -- cgit v0.10.2 From 19ca92e0bca3499a12eb9b612b90bbe90d2cc895 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:33:27 -0700 Subject: Staging: iio: ring_sw.c: fix up sparse warnings NULL usage, static stuff, etc. Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/ring_sw.c b/drivers/staging/iio/ring_sw.c index 5ee3e45..1f14cd4 100644 --- a/drivers/staging/iio/ring_sw.c +++ b/drivers/staging/iio/ring_sw.c @@ -21,10 +21,10 @@ static inline int __iio_allocate_sw_ring_buffer(struct iio_sw_ring_buffer *ring, return -EINVAL; __iio_update_ring_buffer(&ring->buf, bytes_per_datum, length); ring->data = kmalloc(length*ring->buf.bpd, GFP_KERNEL); - ring->read_p = 0; - ring->write_p = 0; - ring->last_written_p = 0; - ring->half_p = 0; + ring->read_p = NULL; + ring->write_p = NULL; + ring->last_written_p = NULL; + ring->half_p = NULL; return ring->data ? 0 : -ENOMEM; } @@ -62,16 +62,15 @@ EXPORT_SYMBOL(iio_unmark_sw_rb_in_use); * in the device driver */ /* Lock always held if their is a chance this may be called */ /* Only one of these per ring may run concurrently - enforced by drivers */ -int iio_store_to_sw_ring(struct iio_sw_ring_buffer *ring, - unsigned char *data, - s64 timestamp) +static int iio_store_to_sw_ring(struct iio_sw_ring_buffer *ring, + unsigned char *data, s64 timestamp) { int ret = 0; int code; unsigned char *temp_ptr, *change_test_ptr; /* initial store */ - if (unlikely(ring->write_p == 0)) { + if (unlikely(ring->write_p == NULL)) { ring->write_p = ring->data; /* Doesn't actually matter if this is out of the set * as long as the read pointer is valid before this @@ -102,7 +101,7 @@ int iio_store_to_sw_ring(struct iio_sw_ring_buffer *ring, */ ring->write_p = temp_ptr; - if (ring->read_p == 0) + if (ring->read_p == NULL) ring->read_p = ring->data; /* Buffer full - move the read pointer and create / escalate * ring event */ @@ -182,7 +181,7 @@ int iio_rip_sw_rb(struct iio_ring_buffer *r, /* build local copy */ initial_read_p = ring->read_p; - if (unlikely(initial_read_p == 0)) { /* No data here as yet */ + if (unlikely(initial_read_p == NULL)) { /* No data here as yet */ ret = 0; goto error_free_data_cpy; } @@ -280,8 +279,8 @@ int iio_store_to_sw_rb(struct iio_ring_buffer *r, u8 *data, s64 timestamp) } EXPORT_SYMBOL(iio_store_to_sw_rb); -int iio_read_last_from_sw_ring(struct iio_sw_ring_buffer *ring, - unsigned char *data) +static int iio_read_last_from_sw_ring(struct iio_sw_ring_buffer *ring, + unsigned char *data) { unsigned char *last_written_p_copy; @@ -291,7 +290,7 @@ again: last_written_p_copy = ring->last_written_p; barrier(); /*unnessecary? */ /* Check there is anything here */ - if (last_written_p_copy == 0) + if (last_written_p_copy == NULL) return -EAGAIN; memcpy(data, last_written_p_copy, ring->buf.bpd); @@ -412,7 +411,7 @@ struct iio_ring_buffer *iio_sw_rb_allocate(struct iio_dev *indio_dev) ring = kzalloc(sizeof *ring, GFP_KERNEL); if (!ring) - return 0; + return NULL; buf = &ring->buf; iio_ring_buffer_init(buf, indio_dev); __iio_init_sw_ring_buffer(ring); -- cgit v0.10.2 From 74112d3f3a64afb98179169cf8af691ccc63434d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:34:00 -0700 Subject: Staging: iio: industrialio-trigger.c: minor fixups We needed to include a header file that declared the functions that are being exported in this file. Also fix up an indentation problem, and some sparse warnings. Cc: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/industrialio-trigger.c b/drivers/staging/iio/industrialio-trigger.c index 46bd94a..5682e61 100644 --- a/drivers/staging/iio/industrialio-trigger.c +++ b/drivers/staging/iio/industrialio-trigger.c @@ -18,6 +18,7 @@ #include "iio.h" #include "trigger.h" +#include "trigger_consumer.h" /* RFC - Question of approach * Make the common case (single sensor single trigger) @@ -92,9 +93,9 @@ idr_again: **/ static void iio_trigger_unregister_id(struct iio_trigger *trig_info) { - spin_lock(&iio_trigger_idr_lock); - idr_remove(&iio_trigger_idr, trig_info->id); - spin_unlock(&iio_trigger_idr_lock); + spin_lock(&iio_trigger_idr_lock); + idr_remove(&iio_trigger_idr, trig_info->id); + spin_unlock(&iio_trigger_idr_lock); } int iio_trigger_register(struct iio_trigger *trig_info) @@ -334,9 +335,9 @@ static ssize_t iio_trigger_write_current(struct device *dev, return len; } -DEVICE_ATTR(current_trigger, S_IRUGO | S_IWUSR, - iio_trigger_read_current, - iio_trigger_write_current); +static DEVICE_ATTR(current_trigger, S_IRUGO | S_IWUSR, + iio_trigger_read_current, + iio_trigger_write_current); static struct attribute *iio_trigger_consumer_attrs[] = { &dev_attr_current_trigger.attr, -- cgit v0.10.2 From 1e18c0d5b41ff2b482f1b5178da4f69d3223261c Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 4 May 2010 22:45:08 -0700 Subject: Staging: line6: driver: fix up sparse warnings minor stuff. Cc: Markus Grabner Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/line6/driver.c b/drivers/staging/line6/driver.c index 2585554..1d5a473 100644 --- a/drivers/staging/line6/driver.c +++ b/drivers/staging/line6/driver.c @@ -399,7 +399,7 @@ static void line6_data_received(struct urb *urb) static int line6_send(struct usb_line6 *line6, unsigned char *buf, size_t len) { int retval; - unsigned int partial; + int partial; #if DO_DUMP_URB_SEND line6_write_hexdump(line6, 'S', buf, len); @@ -684,11 +684,11 @@ static int line6_probe(struct usb_interface *interface, const struct usb_device_ /* check vendor and product id */ for (devtype = ARRAY_SIZE(line6_id_table) - 1; devtype--;) { - u16 vendor = le16_to_cpu(usbdev->descriptor.idVendor); - u16 product = le16_to_cpu(usbdev->descriptor.idProduct); + u16 idVendor = le16_to_cpu(usbdev->descriptor.idVendor); + u16 idProduct = le16_to_cpu(usbdev->descriptor.idProduct); - if (vendor == line6_id_table[devtype].idVendor - && product == line6_id_table[devtype].idProduct) + if (idVendor == line6_id_table[devtype].idVendor + && idProduct == line6_id_table[devtype].idProduct) break; } -- cgit v0.10.2 From c5efe58b83bc5c1d5811800faf03b1089d1ef054 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 09:10:31 -0700 Subject: Staging: comedi: 8255: fix up previous static markings. Ian pointed out that exported symbols should not be marked as static :) Fixed this up by properly including the 8255.h file, and fixing the function prototypes there, as the CONFIG variables were not getting set so users of the header file were seeing the incorrect function prototypes. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/8255.c b/drivers/staging/comedi/drivers/8255.c index e777ddf..b2e80dd 100644 --- a/drivers/staging/comedi/drivers/8255.c +++ b/drivers/staging/comedi/drivers/8255.c @@ -82,6 +82,7 @@ I/O port base address can be found in the output of 'lspci -v'. #include #include +#include "8255.h" #define _8255_SIZE 4 @@ -120,8 +121,8 @@ COMEDI_INITCLEANUP(driver_8255); static void do_config(struct comedi_device *dev, struct comedi_subdevice *s); -static void subdev_8255_interrupt(struct comedi_device *dev, - struct comedi_subdevice *s) +void subdev_8255_interrupt(struct comedi_device *dev, + struct comedi_subdevice *s) { short d; @@ -319,10 +320,9 @@ static int subdev_8255_cancel(struct comedi_device *dev, return 0; } -static int subdev_8255_init(struct comedi_device *dev, - struct comedi_subdevice *s, - int (*cb) (int, int, int, unsigned long), - unsigned long arg) +int subdev_8255_init(struct comedi_device *dev, struct comedi_subdevice *s, + int (*cb) (int, int, int, unsigned long), + unsigned long arg) { s->type = COMEDI_SUBD_DIO; s->subdev_flags = SDF_READABLE | SDF_WRITABLE; @@ -350,10 +350,9 @@ static int subdev_8255_init(struct comedi_device *dev, } EXPORT_SYMBOL(subdev_8255_init); -static int subdev_8255_init_irq(struct comedi_device *dev, - struct comedi_subdevice *s, - int (*cb) (int, int, int, unsigned long), - unsigned long arg) +int subdev_8255_init_irq(struct comedi_device *dev, struct comedi_subdevice *s, + int (*cb) (int, int, int, unsigned long), + unsigned long arg) { int ret; @@ -371,8 +370,7 @@ static int subdev_8255_init_irq(struct comedi_device *dev, } EXPORT_SYMBOL(subdev_8255_init_irq); -static void subdev_8255_cleanup(struct comedi_device *dev, - struct comedi_subdevice *s) +void subdev_8255_cleanup(struct comedi_device *dev, struct comedi_subdevice *s) { if (s->private) { /* this test does nothing, so comment it out diff --git a/drivers/staging/comedi/drivers/8255.h b/drivers/staging/comedi/drivers/8255.h index 02c5a36..b6314c9 100644 --- a/drivers/staging/comedi/drivers/8255.h +++ b/drivers/staging/comedi/drivers/8255.h @@ -26,8 +26,6 @@ #include "../comedidev.h" -#if defined(CONFIG_COMEDI_8255) || defined(CONFIG_COMEDI_8255_MODULE) - int subdev_8255_init(struct comedi_device *dev, struct comedi_subdevice *s, int (*cb) (int, int, int, unsigned long), unsigned long arg); @@ -38,24 +36,4 @@ void subdev_8255_cleanup(struct comedi_device *dev, struct comedi_subdevice *s); void subdev_8255_interrupt(struct comedi_device *dev, struct comedi_subdevice *s); -#else - -static inline int subdev_8255_init(struct comedi_device *dev, - struct comedi_subdevice *s, void *x, - unsigned long y) -{ - printk("8255 support not configured -- disabling subdevice\n"); - - s->type = COMEDI_SUBD_UNUSED; - - return 0; -} - -static inline void subdev_8255_cleanup(struct comedi_device *dev, - struct comedi_subdevice *s) -{ -} - -#endif - #endif -- cgit v0.10.2 From 318a5b2a505fe7a99f0d89889e7a84d57ec49b15 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 09:12:13 -0700 Subject: Staging: comedi: cb_pcidas64: fix up build warnings Now that the 8255.h file is being included properly, we were using the incorrect function prototypes, which causes a build warning now. This fixes it up and preserves the __iomem markings that sparse wants to see. Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/cb_pcidas64.c b/drivers/staging/comedi/drivers/cb_pcidas64.c index 3443fc1..79aa286 100644 --- a/drivers/staging/comedi/drivers/cb_pcidas64.c +++ b/drivers/staging/comedi/drivers/cb_pcidas64.c @@ -1183,8 +1183,8 @@ static int ao_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s, static irqreturn_t handle_interrupt(int irq, void *d); static int ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s); static int ao_cancel(struct comedi_device *dev, struct comedi_subdevice *s); -static int dio_callback(int dir, int port, int data, void __iomem *base); -static int dio_callback_4020(int dir, int port, int data, void __iomem *base); +static int dio_callback(int dir, int port, int data, unsigned long arg); +static int dio_callback_4020(int dir, int port, int data, unsigned long arg); static int di_rbits(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data); static int do_wbits(struct comedi_device *dev, struct comedi_subdevice *s, @@ -3658,8 +3658,9 @@ static int ao_cancel(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -static int dio_callback(int dir, int port, int data, void __iomem *iobase) +static int dio_callback(int dir, int port, int data, unsigned long arg) { + void __iomem *iobase = (void __iomem *)arg; if (dir) { writeb(data, iobase + port); DEBUG_PRINT("wrote 0x%x to port %i\n", data, port); @@ -3669,8 +3670,9 @@ static int dio_callback(int dir, int port, int data, void __iomem *iobase) } } -static int dio_callback_4020(int dir, int port, int data, void __iomem *iobase) +static int dio_callback_4020(int dir, int port, int data, unsigned long arg) { + void __iomem *iobase = (void __iomem *)arg; if (dir) { writew(data, iobase + 2 * port); return 0; -- cgit v0.10.2 From dde27e03cc964526531fdf2bd58c1e4ee4525074 Mon Sep 17 00:00:00 2001 From: "wzt.wzt@gmail.com" Date: Wed, 5 May 2010 14:56:52 +0800 Subject: Staging: rtl8192u: Check kmalloc return value before use the buffer in ieee80211_softmac.c Check kmalloc return value before use the buffer. Signed-off-by: Zhitong Wang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c index 148424a..e5e583e 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c @@ -1580,6 +1580,8 @@ static inline u16 auth_parse(struct sk_buff *skb, u8** challenge, int *chlen) if(*(t++) == MFIE_TYPE_CHALLENGE){ *chlen = *(t++); *challenge = (u8*)kmalloc(*chlen, GFP_ATOMIC); + if (!*challenge) + return -ENOMEM; memcpy(*challenge, t, *chlen); } } -- cgit v0.10.2 From 40447df803971a8663a7d5f96c8a19160dfd1776 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Peter=20H=C3=BCwe?= Date: Wed, 5 May 2010 14:21:14 +0200 Subject: Staging: cxt1e1: fix up one remaining THIS_MODULE usage Copied from original Patch by Randy Dunlap Signed-off-by: Peter Huewe Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/cxt1e1/hwprobe.c b/drivers/staging/cxt1e1/hwprobe.c index 8d4e8d2..4c86102 100644 --- a/drivers/staging/cxt1e1/hwprobe.c +++ b/drivers/staging/cxt1e1/hwprobe.c @@ -283,7 +283,7 @@ c4_hdw_init (struct pci_dev * pdev, int found) */ char *cp = hi->devname; - strcpy (cp, THIS_MODULE->name); + strcpy (cp, KBUILD_MODNAME); cp += strlen (cp); /* reposition */ *cp++ = '-'; *cp++ = '0' + (found / 2); /* there are two found interfaces per -- cgit v0.10.2 From d16e1834af457fdce62714e5207c259400e274f4 Mon Sep 17 00:00:00 2001 From: "Prashant P. Shah" Date: Wed, 5 May 2010 19:46:28 +0530 Subject: Staging: arlan: fixed unnecessary whitespace style issue in arlan-main.c This is a patch to the arlan-main.c file that fixes the unnecessary whitespace issues found by the checkpatch.pl tool. Signed-off-by: Prashant P. Shah Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/arlan/arlan-main.c b/drivers/staging/arlan/arlan-main.c index 58deb96..301b979 100644 --- a/drivers/staging/arlan/arlan-main.c +++ b/drivers/staging/arlan/arlan-main.c @@ -76,18 +76,18 @@ MODULE_PARM_DESC(entry_and_exit_debug, "Arlan driver function entry and exit deb struct arlan_conf_stru arlan_conf[MAX_ARLANS]; static int arlans_found; -static int arlan_open(struct net_device *dev); -static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev); -static irqreturn_t arlan_interrupt(int irq, void *dev_id); -static int arlan_close(struct net_device *dev); -static struct net_device_stats *arlan_statistics(struct net_device *dev); -static void arlan_set_multicast(struct net_device *dev); -static int arlan_hw_tx(struct net_device *dev, char *buf, int length); -static int arlan_hw_config(struct net_device *dev); -static void arlan_tx_done_interrupt(struct net_device *dev, int status); -static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short, u_short); -static void arlan_process_interrupt(struct net_device *dev); -static void arlan_tx_timeout(struct net_device *dev); +static int arlan_open(struct net_device *dev); +static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev); +static irqreturn_t arlan_interrupt(int irq, void *dev_id); +static int arlan_close(struct net_device *dev); +static struct net_device_stats *arlan_statistics(struct net_device *dev); +static void arlan_set_multicast(struct net_device *dev); +static int arlan_hw_tx(struct net_device *dev, char *buf, int length); +static int arlan_hw_config(struct net_device *dev); +static void arlan_tx_done_interrupt(struct net_device *dev, int status); +static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short, u_short); +static void arlan_process_interrupt(struct net_device *dev); +static void arlan_tx_timeout(struct net_device *dev); static inline long us2ticks(int us) { @@ -155,7 +155,7 @@ int arlan_command(struct net_device *dev, int command_p) priv->card_polling_interval = 1; if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) - printk(KERN_DEBUG "arlan_command, %lx commandByte %x waiting %lx incoming %x \n", + printk(KERN_DEBUG "arlan_command, %lx commandByte %x waiting %lx incoming %x\n", jiffies, READSHMB(arlan->commandByte), priv->waiting_command_mask, command_p); @@ -193,13 +193,13 @@ int arlan_command(struct net_device *dev, int command_p) if (priv->waiting_command_mask & ARLAN_COMMAND_LONG_WAIT_NOW) { if (udelayed * 40 > 1000000) { - printk(KERN_ERR "%s long wait too long \n", dev->name); + printk(KERN_ERR "%s long wait too long\n", dev->name); priv->waiting_command_mask |= ARLAN_COMMAND_RESET; break; } } else if (priv->waiting_command_mask & ARLAN_COMMAND_WAIT_NOW) { if (udelayed * 40 > 1000) { - printk(KERN_ERR "%s short wait too long \n", dev->name); + printk(KERN_ERR "%s short wait too long\n", dev->name); goto bad_end; } } @@ -258,7 +258,7 @@ int arlan_command(struct net_device *dev, int command_p) arlan_drop_tx(dev); if (priv->tx_command_given || priv->rx_command_given) - printk(KERN_ERR "%s: Reset under tx or rx command \n", dev->name); + printk(KERN_ERR "%s: Reset under tx or rx command\n", dev->name); netif_stop_queue(dev); if (arlan_debug & ARLAN_DEBUG_RESET) @@ -290,7 +290,7 @@ int arlan_command(struct net_device *dev, int command_p) priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_RENABLE; } else if (priv->waiting_command_mask & ARLAN_COMMAND_CONF) { if (priv->tx_command_given || priv->rx_command_given) - printk(KERN_ERR "%s: Reset under tx or rx command \n", dev->name); + printk(KERN_ERR "%s: Reset under tx or rx command\n", dev->name); arlan_drop_tx(dev); setInterruptEnable(dev); @@ -313,7 +313,7 @@ int arlan_command(struct net_device *dev, int command_p) } else { priv->card_polling_interval = 1; if (arlan_debug & ARLAN_DEBUG_TIMING) - printk(KERN_ERR "configure delayed \n"); + printk(KERN_ERR "configure delayed\n"); } } else if (priv->waiting_command_mask & ARLAN_COMMAND_RX) { if (!registrationBad(dev)) { @@ -354,7 +354,7 @@ int arlan_command(struct net_device *dev, int command_p) priv->card_polling_interval = 1; } } else if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) - printk(KERN_ERR "tx command when tx chain locked \n"); + printk(KERN_ERR "tx command when tx chain locked\n"); } else if (priv->waiting_command_mask & ARLAN_COMMAND_NOOPINT) { { WRITESHMB(arlan->commandByte, ARLAN_COM_NOP | ARLAN_COM_INT); @@ -396,13 +396,13 @@ card_busy_end: priv->waiting_command_mask |= ARLAN_COMMAND_CLEAN_AND_RESET; if (arlan_debug & ARLAN_DEBUG_CARD_STATE) - printk(KERN_ERR "%s arlan_command card busy end \n", dev->name); + printk(KERN_ERR "%s arlan_command card busy end\n", dev->name); spin_unlock_irqrestore(&priv->lock, flags); ARLAN_DEBUG_EXIT("arlan_command"); return 1; bad_end: - printk(KERN_ERR "%s arlan_command bad end \n", dev->name); + printk(KERN_ERR "%s arlan_command bad end\n", dev->name); spin_unlock_irqrestore(&priv->lock, flags); ARLAN_DEBUG_EXIT("arlan_command"); @@ -438,9 +438,9 @@ static inline void arlan_retransmit_now(struct net_device *dev) if (TXLAST(dev).offset == 0) { if (TXHEAD(dev).offset) { priv->txLast = 0; - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to head \n"); + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to head\n"); } else if (TXTAIL(dev).offset) { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to tail \n"); + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to tail\n"); priv->txLast = 1; } else IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "ReTransmit buff empty"); @@ -452,7 +452,7 @@ static inline void arlan_retransmit_now(struct net_device *dev) priv->Conf->driverRetransmissions++; priv->retransmissions++; - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk("Retransmit %d bytes \n", TXLAST(dev).length); + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk("Retransmit %d bytes\n", TXLAST(dev).length); ARLAN_DEBUG_EXIT("arlan_retransmit_now"); } @@ -471,7 +471,7 @@ static void arlan_registration_timer(unsigned long data) if (registrationBad(dev)) { priv->registrationLostCount++; if (lostTime > 7000 && lostTime < 7200) - printk(KERN_NOTICE "%s registration Lost \n", dev->name); + printk(KERN_NOTICE "%s registration Lost\n", dev->name); if (lostTime / priv->reRegisterExp > 2000) arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_CONF); @@ -504,7 +504,7 @@ static void arlan_registration_timer(unsigned long data) if (!registrationBad(dev) && priv->ReTransmitRequested) { IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk(KERN_ERR "Retransmit from timer \n"); + printk(KERN_ERR "Retransmit from timer\n"); priv->ReTransmitRequested = 0; arlan_retransmit_now(dev); } @@ -650,7 +650,7 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length) netif_start_queue(dev); IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) - printk(KERN_WARNING "%s Transmit t %2x:%2x:%2x:%2x:%2x:%2x f %2x:%2x:%2x:%2x:%2x:%2x \n", dev->name, + printk(KERN_WARNING "%s Transmit t %2x:%2x:%2x:%2x:%2x:%2x f %2x:%2x:%2x:%2x:%2x:%2x\n", dev->name, (unsigned char) buf[0], (unsigned char) buf[1], (unsigned char) buf[2], (unsigned char) buf[3], (unsigned char) buf[4], (unsigned char) buf[5], (unsigned char) buf[6], (unsigned char) buf[7], (unsigned char) buf[8], (unsigned char) buf[9], (unsigned char) buf[10], (unsigned char) buf[11]); @@ -661,7 +661,7 @@ static int arlan_hw_tx(struct net_device *dev, char *buf, int length) priv->tx_last_sent = jiffies; - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk("%s TX Qued %d bytes \n", dev->name, length); + IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk("%s TX Qued %d bytes\n", dev->name, length); ARLAN_DEBUG_EXIT("arlan_hw_tx"); @@ -677,9 +677,9 @@ static int arlan_hw_config(struct net_device *dev) ARLAN_DEBUG_ENTRY("arlan_hw_config"); - printk(KERN_NOTICE "%s arlan configure called \n", dev->name); + printk(KERN_NOTICE "%s arlan configure called\n", dev->name); if (arlan_EEPROM_bad) - printk(KERN_NOTICE "arlan configure with eeprom bad option \n"); + printk(KERN_NOTICE "arlan configure with eeprom bad option\n"); WRITESHM(arlan->spreadingCode, conf->spreadingCode, u_char); @@ -841,7 +841,7 @@ static int arlan_read_card_configuration(struct net_device *dev) READSHM(tlx415, arlan->configStatus, u_char); if (tlx415 != 0xA5) - printk(KERN_INFO "%s tlx415 chip \n", dev->name); + printk(KERN_INFO "%s tlx415 chip\n", dev->name); conf->txClear = 0; conf->txRetries = 1; @@ -885,7 +885,7 @@ static int __init arlan_check_fingerprint(unsigned long memaddr) ARLAN_DEBUG_ENTRY("arlan_check_fingerprint"); if (!request_mem_region(paddr, ARLAN_SHMEM_SIZE, "arlan")) { - /* printk(KERN_WARNING "arlan: memory region %lx excluded from probing \n",paddr); */ + /* printk(KERN_WARNING "arlan: memory region %lx excluded from probing\n",paddr); */ return -ENODEV; } @@ -898,7 +898,7 @@ static int __init arlan_check_fingerprint(unsigned long memaddr) return -ENODEV; } - /* printk(KERN_INFO "arlan found at 0x%x \n",memaddr); */ + /* printk(KERN_INFO "arlan found at 0x%x\n",memaddr); */ ARLAN_DEBUG_EXIT("arlan_check_fingerprint"); return 0; @@ -919,7 +919,7 @@ static int arlan_change_mtu(struct net_device *dev, int new_mtu) conf->maxFrameSize = new_mtu + 48; arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_CONF); - printk(KERN_NOTICE "%s mtu changed to %d \n", dev->name, new_mtu); + printk(KERN_NOTICE "%s mtu changed to %d\n", dev->name, new_mtu); ARLAN_DEBUG_EXIT("arlan_change_mtu"); @@ -997,7 +997,7 @@ static int __init arlan_probe_here(struct net_device *dev, if (arlan_check_fingerprint(memaddr)) return -ENODEV; - printk(KERN_NOTICE "%s: Arlan found at %llx, \n ", dev->name, + printk(KERN_NOTICE "%s: Arlan found at %llx,\n ", dev->name, (u64) virt_to_phys((void *)memaddr)); ap->card = (void *) memaddr; @@ -1090,7 +1090,7 @@ static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev) buf = skb->data; if (length + 0x12 > 0x800) { - printk(KERN_ERR "TX RING overflow \n"); + printk(KERN_ERR "TX RING overflow\n"); netif_stop_queue(dev); } @@ -1313,7 +1313,7 @@ static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short /* prohibited here arlan_command(dev, ARLAN_COMMAND_RX); */ if (pkt_len < 10 || pkt_len > 2048) { - printk(KERN_WARNING "%s: got too short or long packet, len %d \n", dev->name, pkt_len); + printk(KERN_WARNING "%s: got too short or long packet, len %d\n", dev->name, pkt_len); return; } if (rxOffset + pkt_len > 0x2000) { @@ -1345,8 +1345,8 @@ static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short struct sk_buff *skb; DEBUGSHM(50, "arlan recv pkt offs=%d\n", arlan->rxOffset, u_short); - DEBUGSHM(1, "arlan rxFrmType = %d \n", arlan->rxFrmType, u_char); - DEBUGSHM(1, KERN_INFO "arlan rx scrambled = %d \n", arlan->scrambled, u_char); + DEBUGSHM(1, "arlan rxFrmType = %d\n", arlan->rxFrmType, u_char); + DEBUGSHM(1, KERN_INFO "arlan rx scrambled = %d\n", arlan->scrambled, u_char); /* here we do multicast filtering to avoid slow 8-bit memcopy */ #ifdef ARLAN_MULTICAST @@ -1361,9 +1361,9 @@ static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short if (hw_dst_addr[0] == 0x01) { if (mdebug) if (hw_dst_addr[1] == 0x00) - printk(KERN_ERR "%s mcast 0x0100 \n", dev->name); + printk(KERN_ERR "%s mcast 0x0100\n", dev->name); else if (hw_dst_addr[1] == 0x40) - printk(KERN_ERR "%s m/bcast 0x0140 \n", dev->name); + printk(KERN_ERR "%s m/bcast 0x0140\n", dev->name); netdev_for_each_mc_entry(dmi, dev) { if (arlan_debug & ARLAN_DEBUG_HEADER_DUMP) printk(KERN_ERR "%s mcl %pM\n", @@ -1417,7 +1417,7 @@ static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short for (i = 0; i <= 22; i++) printk("%02x:", (u_char) skbtmp[i + 12]); printk(KERN_ERR "\n"); - printk(KERN_WARNING "arlan kernel pkt type trans %x \n", skb->protocol); + printk(KERN_WARNING "arlan kernel pkt type trans %x\n", skb->protocol); } netif_rx(skb); dev->stats.rx_packets++; @@ -1447,7 +1447,7 @@ static void arlan_process_interrupt(struct net_device *dev) if (test_and_set_bit(0, (void *) &priv->interrupt_processing_active)) { if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) - printk(KERN_ERR "interrupt chain reentering \n"); + printk(KERN_ERR "interrupt chain reentering\n"); goto end_int_process; } while ((rxStatus || txStatus || priv->interrupt_ack_requested) @@ -1459,7 +1459,7 @@ static void arlan_process_interrupt(struct net_device *dev) arlan_command(dev, ARLAN_COMMAND_INT_ENABLE); IFDEBUG(ARLAN_DEBUG_INTERRUPT) - printk(KERN_ERR "%s: got IRQ rx %x tx %x comm %x rxOff %x rxLen %x \n", + printk(KERN_ERR "%s: got IRQ rx %x tx %x comm %x rxOff %x rxLen %x\n", dev->name, rxStatus, txStatus, READSHMB(arlan->commandByte), rxOffset, pkt_len); @@ -1470,7 +1470,7 @@ static void arlan_process_interrupt(struct net_device *dev) dev->name, txStatus, rxStatus); } else { IFDEBUG(ARLAN_DEBUG_INTERRUPT) - printk(KERN_INFO "%s irq $%d test OK \n", dev->name, dev->irq); + printk(KERN_INFO "%s irq $%d test OK\n", dev->name, dev->irq); } priv->interrupt_ack_requested = 0; @@ -1693,7 +1693,7 @@ struct net_device * __init arlan_probe(int unit) } if (lastFoundAt == 0xbe000) - printk(KERN_ERR "arlan: No Arlan devices found \n"); + printk(KERN_ERR "arlan: No Arlan devices found\n"); not_found: free_netdev(dev); -- cgit v0.10.2 From fa10b25f8d13050c2e40ebf3fbfb5af587b6f914 Mon Sep 17 00:00:00 2001 From: Andres More Date: Tue, 4 May 2010 20:40:09 -0300 Subject: Staging: vt6656: removed SUCCESS define as it is not used Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index a773e58..53a50ad 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -64,11 +64,6 @@ typedef int BOOL; #define FALSE 0 #endif - -#if !defined(SUCCESS) -#define SUCCESS 0 -#endif - //2007-0809-01by MikeLiu #ifndef update_BssList #define update_BssList -- cgit v0.10.2 From 6f8c13c7dbe0d51e62bdb1aa11c1c38a8f8e3133 Mon Sep 17 00:00:00 2001 From: Andres More Date: Tue, 4 May 2010 20:40:10 -0300 Subject: Staging: vt6656: code cleanup, removed OUT definition Remoted empty OUT define in ttype.h and its usage across the code. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index a52a2d8..d8154f3 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -762,9 +762,9 @@ BBvCaculateParameter ( UINT cbFrameLength, WORD wRate, BYTE byPacketType, - OUT PWORD pwPhyLen, - OUT PBYTE pbyPhySrv, - OUT PBYTE pbyPhySgn + PWORD pwPhyLen, + PBYTE pbyPhySrv, + PBYTE pbyPhySgn ) { UINT cbBitCount; diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index 9a1999b..d54d415 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -110,9 +110,9 @@ BBvCaculateParameter ( UINT cbFrameLength, WORD wRate, BYTE byPacketType, - OUT PWORD pwPhyLen, - OUT PBYTE pbyPhySrv, - OUT PBYTE pbyPhySgn + PWORD pwPhyLen, + PBYTE pbyPhySrv, + PBYTE pbyPhySgn ); // timer for antenna diversity diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index 61841b4..7cc0d95 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -772,7 +772,7 @@ BOOL BSSbIsSTAInNodeDB( HANDLE hDeviceContext, PBYTE abyDstAddr, - OUT PUINT puNodeIndex + PUINT puNodeIndex ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -807,7 +807,7 @@ BSSbIsSTAInNodeDB( void BSSvCreateOneNode( HANDLE hDeviceContext, - OUT PUINT puNodeIndex + PUINT puNodeIndex ) { diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h index 2aaa933..48b34b5 100644 --- a/drivers/staging/vt6656/bssdb.h +++ b/drivers/staging/vt6656/bssdb.h @@ -301,13 +301,13 @@ BOOL BSSbIsSTAInNodeDB( HANDLE hDeviceContext, PBYTE abyDstAddr, - OUT PUINT puNodeIndex + PUINT puNodeIndex ); void BSSvCreateOneNode( HANDLE hDeviceContext, - OUT PUINT puNodeIndex + PUINT puNodeIndex ); void diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index c7562a0..6baf869 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -224,8 +224,8 @@ void CARDvCaculateOFDMRParameter ( WORD wRate, BYTE byBBType, - OUT PBYTE pbyTxRate, - OUT PBYTE pbyRsvTime + PBYTE pbyTxRate, + PBYTE pbyRsvTime ) { switch (wRate) { diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index 67392b8..06a213f 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -426,7 +426,7 @@ exit: BOOL CHvChannelGetList ( UINT uCountryCodeIdx, - OUT PBYTE pbyChannelTable + PBYTE pbyChannelTable ) { if (uCountryCodeIdx >= CCODE_MAX) { diff --git a/drivers/staging/vt6656/channel.h b/drivers/staging/vt6656/channel.h index 81b915d..26d12a0 100644 --- a/drivers/staging/vt6656/channel.h +++ b/drivers/staging/vt6656/channel.h @@ -51,7 +51,7 @@ BYTE CHbyGetChannelMapping(BYTE byChannelNumber); BOOL CHvChannelGetList ( UINT uCountryCodeIdx, - OUT PBYTE pbyChannelTable + PBYTE pbyChannelTable ); #endif /* _REGULATE_H_ */ diff --git a/drivers/staging/vt6656/datarate.c b/drivers/staging/vt6656/datarate.c index 348e1eb..4d2880b 100644 --- a/drivers/staging/vt6656/datarate.c +++ b/drivers/staging/vt6656/datarate.c @@ -193,11 +193,11 @@ void RATEvParseMaxRate( PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pItemExtRates, BOOL bUpdateBasicRate, - OUT PWORD pwMaxBasicRate, - OUT PWORD pwMaxSuppRate, - OUT PWORD pwSuppRate, - OUT PBYTE pbyTopCCKRate, - OUT PBYTE pbyTopOFDMRate + PWORD pwMaxBasicRate, + PWORD pwMaxSuppRate, + PWORD pwSuppRate, + PBYTE pbyTopCCKRate, + PBYTE pbyTopOFDMRate ) { PSDevice pDevice = (PSDevice) pDeviceHandler; diff --git a/drivers/staging/vt6656/datarate.h b/drivers/staging/vt6656/datarate.h index ae37eb6..7d73a3a 100644 --- a/drivers/staging/vt6656/datarate.h +++ b/drivers/staging/vt6656/datarate.h @@ -75,11 +75,11 @@ RATEvParseMaxRate( PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pItemExtRates, BOOL bUpdateBasicRate, - OUT PWORD pwMaxBasicRate, - OUT PWORD pwMaxSuppRate, - OUT PWORD pwSuppRate, - OUT PBYTE pbyTopCCKRate, - OUT PBYTE pbyTopOFDMRate + PWORD pwMaxBasicRate, + PWORD pwMaxSuppRate, + PWORD pwSuppRate, + PBYTE pbyTopCCKRate, + PBYTE pbyTopOFDMRate ); void diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 75be970..b18427b 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -80,8 +80,8 @@ static void s_vGetDASA( PBYTE pbyRxBufferAddr, - OUT PUINT pcbHeaderSize, - OUT PSEthernetHeader psEthHeader + PUINT pcbHeaderSize, + PSEthernetHeader psEthHeader ); static @@ -92,7 +92,7 @@ s_vProcessRxMACHeader ( UINT cbPacketSize, BOOL bIsWEP, BOOL bExtIV, - OUT PUINT pcbHeadSize + PUINT pcbHeadSize ); static BOOL s_bAPModeRxCtl( @@ -118,11 +118,11 @@ static BOOL s_bHandleRxEncryption( PBYTE pbyFrame, UINT FrameSize, PBYTE pbyRsr, - OUT PBYTE pbyNewRsr, - OUT PSKeyItem *pKeyOut, + PBYTE pbyNewRsr, + PSKeyItem * pKeyOut, int * pbExtIV, - OUT PWORD pwRxTSC15_0, - OUT PDWORD pdwRxTSC47_16 + PWORD pwRxTSC15_0, + PDWORD pdwRxTSC47_16 ); static BOOL s_bHostWepRxEncryption( @@ -133,10 +133,10 @@ static BOOL s_bHostWepRxEncryption( PBYTE pbyRsr, BOOL bOnFly, PSKeyItem pKey, - OUT PBYTE pbyNewRsr, + PBYTE pbyNewRsr, int * pbExtIV, - OUT PWORD pwRxTSC15_0, - OUT PDWORD pdwRxTSC47_16 + PWORD pwRxTSC15_0, + PDWORD pdwRxTSC47_16 ); @@ -167,7 +167,7 @@ s_vProcessRxMACHeader ( UINT cbPacketSize, BOOL bIsWEP, BOOL bExtIV, - OUT PUINT pcbHeadSize + PUINT pcbHeadSize ) { PBYTE pbyRxBuffer; @@ -262,8 +262,8 @@ static void s_vGetDASA ( PBYTE pbyRxBufferAddr, - OUT PUINT pcbHeaderSize, - OUT PSEthernetHeader psEthHeader + PUINT pcbHeaderSize, + PSEthernetHeader psEthHeader ) { UINT cbHeaderSize = 0; @@ -1147,11 +1147,11 @@ static BOOL s_bHandleRxEncryption ( PBYTE pbyFrame, UINT FrameSize, PBYTE pbyRsr, - OUT PBYTE pbyNewRsr, - OUT PSKeyItem *pKeyOut, + PBYTE pbyNewRsr, + PSKeyItem * pKeyOut, int * pbExtIV, - OUT PWORD pwRxTSC15_0, - OUT PDWORD pdwRxTSC47_16 + PWORD pwRxTSC15_0, + PDWORD pdwRxTSC47_16 ) { UINT PayloadLen = FrameSize; @@ -1295,10 +1295,10 @@ static BOOL s_bHostWepRxEncryption ( PBYTE pbyRsr, BOOL bOnFly, PSKeyItem pKey, - OUT PBYTE pbyNewRsr, + PBYTE pbyNewRsr, int * pbExtIV, - OUT PWORD pwRxTSC15_0, - OUT PDWORD pdwRxTSC47_16 + PWORD pwRxTSC15_0, + PDWORD pdwRxTSC47_16 ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 338ec08..7ff420d 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -164,12 +164,8 @@ void KeyvInitTable(void *pDeviceHandler, PSKeyManagement pTable) * Return Value: TRUE if found otherwise FALSE * */ -BOOL KeybGetKey ( - PSKeyManagement pTable, - PBYTE pbyBSSID, - DWORD dwKeyIndex, - OUT PSKeyItem *pKey - ) +BOOL KeybGetKey(PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex, + PSKeyItem *pKey) { int i; @@ -563,12 +559,8 @@ void KeyvRemoveAllWEPKey( * Return Value: TRUE if found otherwise FALSE * */ -BOOL KeybGetTransmitKey ( - PSKeyManagement pTable, - PBYTE pbyBSSID, - DWORD dwKeyType, - OUT PSKeyItem *pKey - ) +BOOL KeybGetTransmitKey(PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyType, + PSKeyItem *pKey) { int i, ii; @@ -643,10 +635,7 @@ BOOL KeybGetTransmitKey ( * Return Value: TRUE if found otherwise FALSE * */ -BOOL KeybCheckPairewiseKey ( - PSKeyManagement pTable, - OUT PSKeyItem *pKey - ) +BOOL KeybCheckPairewiseKey(PSKeyManagement pTable, PSKeyItem *pKey) { int i; diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index a108782..11fc41e 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -99,12 +99,8 @@ typedef struct tagSKeyManagement void KeyvInitTable(void *pDeviceHandler, PSKeyManagement pTable); -BOOL KeybGetKey( - PSKeyManagement pTable, - PBYTE pbyBSSID, - DWORD dwKeyIndex, - OUT PSKeyItem *pKey - ); +BOOL KeybGetKey(PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex, + PSKeyItem *pKey); BOOL KeybSetKey( void *pDeviceHandler, @@ -141,17 +137,10 @@ void KeyvRemoveAllWEPKey( PSKeyManagement pTable ); -BOOL KeybGetTransmitKey( - PSKeyManagement pTable, - PBYTE pbyBSSID, - DWORD dwKeyType, - OUT PSKeyItem *pKey - ); +BOOL KeybGetTransmitKey(PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyType, + PSKeyItem *pKey); -BOOL KeybCheckPairewiseKey( - PSKeyManagement pTable, - OUT PSKeyItem *pKey - ); +BOOL KeybCheckPairewiseKey(PSKeyManagement pTable, PSKeyItem *pKey); BOOL KeybSetDefaultKey( void *pDeviceHandler, diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 9ddb7e1..b9f6788 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -187,7 +187,7 @@ s_vFillTxKey( PSKeyItem pTransmitKey, PBYTE pbyHdrBuf, WORD wPayloadLen, - OUT PBYTE pMICHDR + PBYTE pMICHDR ); static @@ -339,7 +339,7 @@ s_vFillTxKey ( PSKeyItem pTransmitKey, PBYTE pbyHdrBuf, WORD wPayloadLen, - OUT PBYTE pMICHDR + PBYTE pMICHDR ) { PDWORD pdwIV = (PDWORD) pbyIVHead; @@ -1439,8 +1439,8 @@ s_bPacketToWirelessUsb( PSKeyItem pTransmitKey, UINT uNodeIndex, WORD wCurrentRate, - OUT UINT *pcbHeaderLen, - OUT UINT *pcbTotalLen + UINT *pcbHeaderLen, + UINT *pcbTotalLen ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 0269430..64df4a3 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -678,8 +678,8 @@ bPacketToWirelessUsb( PSKeyItem pTransmitKey, UINT uNodeIndex, WORD wCurrentRate, - OUT UINT *pcbHeaderLen, - OUT UINT *pcbTotalLen + UINT *pcbHeaderLen, + UINT *pcbTotalLen ); void vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb); diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index 53a50ad..692b63e4 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -33,10 +33,6 @@ /******* Common definitions and typedefs ***********************************/ -#ifndef OUT -#define OUT -#endif - //2007-0115-05by MikeLiu #ifndef TxInSleep #define TxInSleep diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index 7c32572..ce71f18 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -229,7 +229,7 @@ PIPEnsControlIn( WORD wValue, WORD wIndex, WORD wLength, - OUT PBYTE pbyBuffer + PBYTE pbyBuffer ) { NTSTATUS ntStatus = 0; diff --git a/drivers/staging/vt6656/usbpipe.h b/drivers/staging/vt6656/usbpipe.h index ee86d37..f852b39 100644 --- a/drivers/staging/vt6656/usbpipe.h +++ b/drivers/staging/vt6656/usbpipe.h @@ -70,7 +70,7 @@ PIPEnsControlIn( WORD wValue, WORD wIndex, WORD wLength, - OUT PBYTE pbyBuffer + PBYTE pbyBuffer ); diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 994022a..1824551 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -312,7 +312,7 @@ s_vMgrSynchBSS ( PSDevice pDevice, UINT uBSSMode, PKnownBSS pCurr, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); @@ -320,8 +320,8 @@ static BOOL s_bCipherMatch ( PKnownBSS pBSSNode, NDIS_802_11_ENCRYPTION_STATUS EncStatus, - OUT PBYTE pbyCCSPK, - OUT PBYTE pbyCCSGK + PBYTE pbyCCSPK, + PBYTE pbyCCSGK ); static void Encyption_Rebuild( @@ -419,7 +419,7 @@ void vMgrAssocBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -495,7 +495,7 @@ void vMgrReAssocBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -576,7 +576,7 @@ vMgrDisassocBeginSta( PSMgmtObject pMgmt, PBYTE abyDestAddress, WORD wReason, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1106,7 +1106,7 @@ void vMgrAuthenBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1166,7 +1166,7 @@ vMgrDeAuthenBeginSta( PSMgmtObject pMgmt, PBYTE abyDestAddress, WORD wReason, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -2358,7 +2358,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) void vMgrCreateOwnIBSS( HANDLE hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -2633,7 +2633,7 @@ vMgrCreateOwnIBSS( void vMgrJoinBSSBegin( HANDLE hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { @@ -2967,7 +2967,7 @@ s_vMgrSynchBSS ( PSDevice pDevice, UINT uBSSMode, PKnownBSS pCurr, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -4810,8 +4810,8 @@ static BOOL s_bCipherMatch ( PKnownBSS pBSSNode, NDIS_802_11_ENCRYPTION_STATUS EncStatus, - OUT PBYTE pbyCCSPK, - OUT PBYTE pbyCCSGK + PBYTE pbyCCSPK, + PBYTE pbyCCSGK ) { BYTE byMulticastCipher = KEY_CTL_INVALID; diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index 02ecec9..0eda12a 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -417,14 +417,14 @@ void vMgrAssocBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void vMgrReAssocBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void @@ -433,26 +433,26 @@ vMgrDisassocBeginSta( PSMgmtObject pMgmt, PBYTE abyDestAddress, WORD wReason, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void vMgrAuthenBeginSta( HANDLE hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void vMgrCreateOwnIBSS( HANDLE hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void vMgrJoinBSSBegin( HANDLE hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void @@ -466,7 +466,7 @@ vMgrRxManagePacket( void vMgrScanBegin( HANDLE hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); */ @@ -476,7 +476,7 @@ vMgrDeAuthenBeginSta( PSMgmtObject pMgmt, PBYTE abyDestAddress, WORD wReason, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); BOOL diff --git a/drivers/staging/vt6656/wpa2.c b/drivers/staging/vt6656/wpa2.c index 73bfb50..9bd6bf5 100644 --- a/drivers/staging/vt6656/wpa2.c +++ b/drivers/staging/vt6656/wpa2.c @@ -262,7 +262,7 @@ WPA2vParseRSN ( -*/ UINT WPA2uSetIEs(void *pMgmtHandle, - OUT PWLAN_IE_RSN pRSNIEs + PWLAN_IE_RSN pRSNIEs ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle; diff --git a/drivers/staging/vt6656/wpa2.h b/drivers/staging/vt6656/wpa2.h index 367aece..79305a7 100644 --- a/drivers/staging/vt6656/wpa2.h +++ b/drivers/staging/vt6656/wpa2.h @@ -72,7 +72,7 @@ WPA2vParseRSN ( UINT WPA2uSetIEs( void *pMgmtHandle, - OUT PWLAN_IE_RSN pRSNIEs + PWLAN_IE_RSN pRSNIEs ); #endif /* __WPA2_H__ */ -- cgit v0.10.2 From 6e1b4e24e6e4025b399159f3605bfa958464272a Mon Sep 17 00:00:00 2001 From: Andres More Date: Tue, 4 May 2010 20:40:11 -0300 Subject: Staging: vt6656: code cleanup, resolved sparse finding Cleared sparse warning 'Using plain integer as NULL pointer' Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 1824551..5af98e9 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -958,12 +958,12 @@ s_vMgrRxAssocResponse( sFrame.pBuf = (PBYTE)pRxPacket->p80211Header; // decode the frame vMgrDecodeAssocResponse(&sFrame); - if ((sFrame.pwCapInfo == 0) || - (sFrame.pwStatus == 0) || - (sFrame.pwAid == 0) || - (sFrame.pSuppRates == 0)){ - DBG_PORT80(0xCC); - return; + if ((sFrame.pwCapInfo == NULL) + || (sFrame.pwStatus == NULL) + || (sFrame.pwAid == NULL) + || (sFrame.pSuppRates == NULL)) { + DBG_PORT80(0xCC); + return; }; pMgmt->sAssocInfo.AssocInfo.ResponseFixedIEs.Capabilities = *(sFrame.pwCapInfo); @@ -1871,14 +1871,14 @@ s_vMgrRxBeacon( // decode the beacon frame vMgrDecodeBeacon(&sFrame); - if ((sFrame.pwBeaconInterval == 0) || - (sFrame.pwCapInfo == 0) || - (sFrame.pSSID == 0) || - (sFrame.pSuppRates == 0) ) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Rx beacon frame error\n"); - return; - }; + if ((sFrame.pwBeaconInterval == NULL) + || (sFrame.pwCapInfo == NULL) + || (sFrame.pSSID == NULL) + || (sFrame.pSuppRates == NULL)) { + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Rx beacon frame error\n"); + return; + }; if( byCurrChannel > CB_MAX_CHANNEL_24G ) { @@ -2152,9 +2152,9 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) if (bTSFLargeDiff) bUpdateTSF = TRUE; - if ((pDevice->bEnablePSMode == TRUE) &&(sFrame.pTIM != 0)) { + if ((pDevice->bEnablePSMode == TRUE) && (sFrame.pTIM)) { - // deal with DTIM, analysis TIM + /* deal with DTIM, analysis TIM */ pMgmt->bMulticastTIM = WLAN_MGMT_IS_MULTICAST_TIM(sFrame.pTIM->byBitMapCtl) ? TRUE : FALSE ; pMgmt->byDTIMCount = sFrame.pTIM->byDTIMCount; pMgmt->byDTIMPeriod = sFrame.pTIM->byDTIMPeriod; @@ -4246,14 +4246,16 @@ s_vMgrRxProbeResponse( sFrame.pBuf = (PBYTE)pRxPacket->p80211Header; vMgrDecodeProbeResponse(&sFrame); - if ((sFrame.pqwTimestamp == 0) || - (sFrame.pwBeaconInterval == 0) || - (sFrame.pwCapInfo == 0) || - (sFrame.pSSID == 0) || - (sFrame.pSuppRates == 0)) { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe resp:Fail addr:[%p] \n", pRxPacket->p80211Header); - DBG_PORT80(0xCC); - return; + if ((sFrame.pqwTimestamp == NULL) + || (sFrame.pwBeaconInterval == NULL) + || (sFrame.pwCapInfo == NULL) + || (sFrame.pSSID == NULL) + || (sFrame.pSuppRates == NULL)) { + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Probe resp:Fail addr:[%p]\n", + pRxPacket->p80211Header); + DBG_PORT80(0xCC); + return; }; if(sFrame.pSSID->len == 0) @@ -4263,22 +4265,23 @@ s_vMgrRxProbeResponse( //{{ RobertYu:20050201, 11a byCurrChannel != sFrame.pDSParms->byCurrChannel mapping if( byCurrChannel > CB_MAX_CHANNEL_24G ) { - if (sFrame.pDSParms != 0) { - if (byCurrChannel == RFaby11aChannelIndex[sFrame.pDSParms->byCurrChannel-1]) - bChannelHit = TRUE; - byCurrChannel = RFaby11aChannelIndex[sFrame.pDSParms->byCurrChannel-1]; + if (sFrame.pDSParms) { + if (byCurrChannel == + RFaby11aChannelIndex[sFrame.pDSParms->byCurrChannel-1]) + bChannelHit = TRUE; + byCurrChannel = + RFaby11aChannelIndex[sFrame.pDSParms->byCurrChannel-1]; } else { - bChannelHit = TRUE; + bChannelHit = TRUE; } - } else { - if (sFrame.pDSParms != 0) { - if (byCurrChannel == sFrame.pDSParms->byCurrChannel) - bChannelHit = TRUE; - byCurrChannel = sFrame.pDSParms->byCurrChannel; - } else { - bChannelHit = TRUE; - } + if (sFrame.pDSParms) { + if (byCurrChannel == sFrame.pDSParms->byCurrChannel) + bChannelHit = TRUE; + byCurrChannel = sFrame.pDSParms->byCurrChannel; + } else { + bChannelHit = TRUE; + } } //RobertYu:20050201 @@ -4286,7 +4289,7 @@ s_vMgrRxProbeResponse( if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) return; - if (sFrame.pERP != NULL) { + if (sFrame.pERP) { sERP.byERP = sFrame.pERP->byContext; sERP.bERPExist = TRUE; } else { -- cgit v0.10.2 From 7ec21181d22891ecebcd01075a819a4373c54362 Mon Sep 17 00:00:00 2001 From: Marin Mitov Date: Wed, 5 May 2010 20:31:38 +0300 Subject: Staging: dt3155v4l: Adding the missing linux/delay.h The prototypes of udelay() and msleep() are in linux/delay.h, so include it. Reported-by: Randy Dunlap Signed-off-by: Marin Mitov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155v4l/dt3155v4l.c b/drivers/staging/dt3155v4l/dt3155v4l.c index 6282b7b..d596e9d 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.c +++ b/drivers/staging/dt3155v4l/dt3155v4l.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #include -- cgit v0.10.2 From 2342df0e63f4ca9a4227ea06f951f09180497914 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 10:45:16 -0700 Subject: Staging: dt3155v4l: fix some sparse warnings Mostly some __iomem markings and some static functions as well. Cc: Marin Mitov diff --git a/drivers/staging/dt3155v4l/dt3155v4l.c b/drivers/staging/dt3155v4l/dt3155v4l.c index d596e9d..881c3e9 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.c +++ b/drivers/staging/dt3155v4l/dt3155v4l.c @@ -65,7 +65,7 @@ static u8 config_init = ACQ_MODE_EVEN; * in a byte pointed by data. */ static int -read_i2c_reg(void *addr, u8 index, u8 *data) +read_i2c_reg(void __iomem *addr, u8 index, u8 *data) { u32 tmp = index; @@ -102,7 +102,7 @@ read_i2c_reg(void *addr, u8 index, u8 *data) * and busy waits for the process to finish. */ static int -write_i2c_reg(void *addr, u8 index, u8 data) +write_i2c_reg(void __iomem *addr, u8 index, u8 data) { u32 tmp = index; @@ -134,8 +134,7 @@ write_i2c_reg(void *addr, u8 index, u8 data) * This function starts writting the specified (by index) register * and then returns. */ -void -write_i2c_reg_nowait(void *addr, u8 index, u8 data) +static void write_i2c_reg_nowait(void __iomem *addr, u8 index, u8 data) { u32 tmp = index; @@ -152,8 +151,7 @@ write_i2c_reg_nowait(void *addr, u8 index, u8 data) * * This function waits reading/writting to finish. */ -static int -wait_i2c_reg(void *addr) +static int wait_i2c_reg(void __iomem *addr) { if (ioread32(addr + IIC_CSR2) & NEW_CYCLE) udelay(65); /* wait at least 63 usec for NEW_CYCLE to clear */ -- cgit v0.10.2 From 1e19c054434c7d3ad618129c2ff5c3d81efa6949 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:29 -0400 Subject: Staging: hv: Remove check for NULL before calling kfree() kfree() knows how to deal with NULL, so there's no reason to check for NULL before passing something to it. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Hv.c b/drivers/staging/hv/Hv.c index bfcb750..2418651 100644 --- a/drivers/staging/hv/Hv.c +++ b/drivers/staging/hv/Hv.c @@ -305,11 +305,9 @@ void HvCleanup(void) DPRINT_ENTER(VMBUS); - if (gHvContext.SignalEventBuffer) { - gHvContext.SignalEventBuffer = NULL; - gHvContext.SignalEventParam = NULL; - kfree(gHvContext.SignalEventBuffer); - } + kfree(gHvContext.SignalEventBuffer); + gHvContext.SignalEventBuffer = NULL; + gHvContext.SignalEventParam = NULL; if (gHvContext.HypercallPage) { hypercallMsr.AsUINT64 = 0; -- cgit v0.10.2 From 75910f236a30bded00f078cab994f35a7171c39b Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:31 -0400 Subject: Staging: hv: remove ASSERT()s in ChannelMgt.c Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/ChannelMgmt.c b/drivers/staging/hv/ChannelMgmt.c index 445506d..05e6699 100644 --- a/drivers/staging/hv/ChannelMgmt.c +++ b/drivers/staging/hv/ChannelMgmt.c @@ -753,9 +753,15 @@ int VmbusChannelRequestOffers(void) msgInfo = kmalloc(sizeof(*msgInfo) + sizeof(struct vmbus_channel_message_header), GFP_KERNEL); - ASSERT(msgInfo != NULL); + if (!msgInfo) + return -ENOMEM; msgInfo->WaitEvent = osd_WaitEventCreate(); + if (!msgInfo->WaitEvent) { + kfree(msgInfo); + return -ENOMEM; + } + msg = (struct vmbus_channel_message_header *)msgInfo->Msg; msg->MessageType = ChannelMessageRequestOffers; -- cgit v0.10.2 From 7e052d98f2bbcaaaa6d509081d78e600927cfe60 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:30 -0400 Subject: Staging: hv: check return value of osd_PageAlloc() The return value of osd_PageAlloc() was checked using an ASSERT(). Change that to more useful behaviour. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index de2ccb1..d939723 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -192,7 +192,9 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, /* Allocate the ring buffer */ out = osd_PageAlloc((SendRingBufferSize + RecvRingBufferSize) >> PAGE_SHIFT); - ASSERT(out); + if (!out) + return -ENOMEM; + ASSERT(((unsigned long)out & (PAGE_SIZE-1)) == 0); in = (void *)((unsigned long)out + SendRingBufferSize); -- cgit v0.10.2 From 8cad0af9a1a1882cd00f12f8f7c79690f563b1d7 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:32 -0400 Subject: Staging: hv: return correct error values in Connection.c Also check the kzalloc call return value. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Connection.c b/drivers/staging/hv/Connection.c index dbf0056..1e41114 100644 --- a/drivers/staging/hv/Connection.c +++ b/drivers/staging/hv/Connection.c @@ -93,7 +93,7 @@ int VmbusConnect(void) sizeof(struct vmbus_channel_initiate_contact), GFP_KERNEL); if (msgInfo == NULL) { - ret = -1; + ret = -ENOMEM; goto Cleanup; } @@ -195,6 +195,8 @@ int VmbusDisconnect(void) return -1; msg = kzalloc(sizeof(struct vmbus_channel_message_header), GFP_KERNEL); + if (!msg) + return -ENOMEM; msg->MessageType = ChannelMessageUnload; -- cgit v0.10.2 From 80d11b2ae26543656f7226b44ed9d6a184766e85 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:33 -0400 Subject: Staging: hv: test return value of osd_WaitEventCreate() The return value of osd_WaitEventCreate() was not examined in some places. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Connection.c b/drivers/staging/hv/Connection.c index 1e41114..e590eb4 100644 --- a/drivers/staging/hv/Connection.c +++ b/drivers/staging/hv/Connection.c @@ -98,6 +98,11 @@ int VmbusConnect(void) } msgInfo->WaitEvent = osd_WaitEventCreate(); + if (!msgInfo->WaitEvent) { + ret = -ENOMEM; + goto Cleanup; + } + msg = (struct vmbus_channel_initiate_contact *)msgInfo->Msg; msg->Header.MessageType = ChannelMessageInitiateContact; diff --git a/drivers/staging/hv/NetVsc.c b/drivers/staging/hv/NetVsc.c index 27516d4..d3154e7 100644 --- a/drivers/staging/hv/NetVsc.c +++ b/drivers/staging/hv/NetVsc.c @@ -749,6 +749,10 @@ static int NetVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) &netDevice->ReceivePacketList); } netDevice->ChannelInitEvent = osd_WaitEventCreate(); + if (!netDevice->ChannelInitEvent) { + ret = -ENOMEM; + goto Cleanup; + } /* Open the channel */ ret = Device->Driver->VmbusChannelInterface.Open(Device, diff --git a/drivers/staging/hv/StorVsc.c b/drivers/staging/hv/StorVsc.c index 7372317..4d0fbce 100644 --- a/drivers/staging/hv/StorVsc.c +++ b/drivers/staging/hv/StorVsc.c @@ -199,6 +199,10 @@ static int StorVscChannelInit(struct hv_device *Device) */ memset(request, 0, sizeof(struct storvsc_request_extension)); request->WaitEvent = osd_WaitEventCreate(); + if (!request->WaitEvent) { + ret = -ENOMEM; + goto nomem; + } vstorPacket->Operation = VStorOperationBeginInitialization; vstorPacket->Flags = REQUEST_COMPLETION_FLAG; @@ -338,7 +342,7 @@ static int StorVscChannelInit(struct hv_device *Device) Cleanup: kfree(request->WaitEvent); request->WaitEvent = NULL; - +nomem: PutStorDevice(Device); DPRINT_EXIT(STORVSC); @@ -649,6 +653,10 @@ int StorVscOnHostReset(struct hv_device *Device) vstorPacket = &request->VStorPacket; request->WaitEvent = osd_WaitEventCreate(); + if (!request->WaitEvent) { + ret = -ENOMEM; + goto Cleanup; + } vstorPacket->Operation = VStorOperationResetBus; vstorPacket->Flags = REQUEST_COMPLETION_FLAG; -- cgit v0.10.2 From c3bf2e26b30f4ea54f3825e8ebda7cb10ec204de Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:34 -0400 Subject: Staging: hv: remove ASSERT()s in Channel.c Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index d939723..79c013b 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -178,7 +178,7 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, struct vmbus_channel_msginfo *openInfo; void *in, *out; unsigned long flags; - int ret; + int ret, err = 0; DPRINT_ENTER(VMBUS); @@ -218,6 +218,7 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, SendRingBufferSize + RecvRingBufferSize, &NewChannel->RingBufferGpadlHandle); +/* FIXME: the value of ret is not checked */ DPRINT_DBG(VMBUS, "channel %p ", @@ -233,9 +234,16 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, openInfo = kmalloc(sizeof(*openInfo) + sizeof(struct vmbus_channel_open_channel), GFP_KERNEL); - ASSERT(openInfo != NULL); + if (!openInfo) { + err = -ENOMEM; + goto errorout; + } openInfo->WaitEvent = osd_WaitEventCreate(); + if (!openInfo->WaitEvent) { + err = -ENOMEM; + goto errorout; + } openMsg = (struct vmbus_channel_open_channel *)openInfo->Msg; openMsg->Header.MessageType = ChannelMessageOpenChannel; @@ -285,6 +293,12 @@ Cleanup: DPRINT_EXIT(VMBUS); return 0; + +errorout: + osd_PageFree(out, (SendRingBufferSize + RecvRingBufferSize) + >> PAGE_SHIFT); + kfree(openInfo); + return err; } /* @@ -461,24 +475,29 @@ int VmbusChannelEstablishGpadl(struct vmbus_channel *Channel, void *Kbuffer, struct vmbus_channel_gpadl_header *gpadlMsg; struct vmbus_channel_gpadl_body *gpadlBody; /* struct vmbus_channel_gpadl_created *gpadlCreated; */ - struct vmbus_channel_msginfo *msgInfo; + struct vmbus_channel_msginfo *msgInfo = NULL; struct vmbus_channel_msginfo *subMsgInfo; u32 msgCount; struct list_head *curr; u32 nextGpadlHandle; unsigned long flags; - int ret; + int ret = 0; DPRINT_ENTER(VMBUS); nextGpadlHandle = atomic_read(&gVmbusConnection.NextGpadlHandle); atomic_inc(&gVmbusConnection.NextGpadlHandle); - VmbusChannelCreateGpadlHeader(Kbuffer, Size, &msgInfo, &msgCount); - ASSERT(msgInfo != NULL); - ASSERT(msgCount > 0); + ret = VmbusChannelCreateGpadlHeader(Kbuffer, Size, &msgInfo, &msgCount); + if (ret) + return ret; msgInfo->WaitEvent = osd_WaitEventCreate(); + if (!msgInfo->WaitEvent) { + ret = -ENOMEM; + goto Cleanup; + } + gpadlMsg = (struct vmbus_channel_gpadl_header *)msgInfo->Msg; gpadlMsg->Header.MessageType = ChannelMessageGpadlHeader; gpadlMsg->ChildRelId = Channel->OfferMsg.ChildRelId; @@ -567,9 +586,14 @@ int VmbusChannelTeardownGpadl(struct vmbus_channel *Channel, u32 GpadlHandle) info = kmalloc(sizeof(*info) + sizeof(struct vmbus_channel_gpadl_teardown), GFP_KERNEL); - ASSERT(info != NULL); + if (!info) + return -ENOMEM; info->WaitEvent = osd_WaitEventCreate(); + if (!info->WaitEvent) { + kfree(info); + return -ENOMEM; + } msg = (struct vmbus_channel_gpadl_teardown *)info->Msg; @@ -623,7 +647,10 @@ void VmbusChannelClose(struct vmbus_channel *Channel) /* Send a closing message */ info = kmalloc(sizeof(*info) + sizeof(struct vmbus_channel_close_channel), GFP_KERNEL); - ASSERT(info != NULL); + /* FIXME: can't do anything other than return here because the + * function is void */ + if (!info) + return; /* info->waitEvent = osd_WaitEventCreate(); */ -- cgit v0.10.2 From d1c250bb5df9afb5af3f290d1006dfe601a51e2e Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:35 -0400 Subject: Staging: hv: remove ASSERT() in Channel.c check memory allocation in VmbusChannelCreateGpadlHeader() and return -ENOMEM if it fails Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index 79c013b..2d8c086 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -382,6 +382,8 @@ static int VmbusChannelCreateGpadlHeader(void *Kbuffer, u32 Size, sizeof(struct vmbus_channel_gpadl_header) + sizeof(struct gpa_range) + pfnCount * sizeof(u64); msgHeader = kzalloc(msgSize, GFP_KERNEL); + if (!msgHeader) + goto nomem; INIT_LIST_HEAD(&msgHeader->SubMsgList); msgHeader->MessageSize = msgSize; @@ -416,7 +418,9 @@ static int VmbusChannelCreateGpadlHeader(void *Kbuffer, u32 Size, sizeof(struct vmbus_channel_gpadl_body) + pfnCurr * sizeof(u64); msgBody = kzalloc(msgSize, GFP_KERNEL); - ASSERT(msgBody); + /* FIXME: we probably need to more if this fails */ + if (!msgBody) + goto nomem; msgBody->MessageSize = msgSize; (*MessageCount)++; gpadlBody = @@ -459,6 +463,10 @@ static int VmbusChannelCreateGpadlHeader(void *Kbuffer, u32 Size, } return 0; +nomem: + kfree(msgHeader); + kfree(msgBody); + return -ENOMEM; } /* -- cgit v0.10.2 From 99259159c0eb58a539ed399677c8294e3792722b Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:36 -0400 Subject: Staging: hv: remove ASSERT() in Channel.c return an error instead of calling ASSERT() if VmbusPostMessage() fails. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index 2d8c086..8c30540 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -551,7 +551,9 @@ int VmbusChannelEstablishGpadl(struct vmbus_channel *Channel, void *Kbuffer, ret = VmbusPostMessage(gpadlBody, subMsgInfo->MessageSize - sizeof(*subMsgInfo)); - ASSERT(ret == 0); + if (!ret) + goto Cleanup; + } } osd_WaitEventWait(msgInfo->WaitEvent); -- cgit v0.10.2 From b94ef345b26b4d75e5028617e43fb51d7dd0162b Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:37 -0400 Subject: Staging: hv: test return value of VmbusChannelEstablishGpadl() The return value of VmbusChannelEstablishGpadl() was not examined in Channel.c Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index 8c30540..fdd4411 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -175,7 +175,7 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, void (*OnChannelCallback)(void *context), void *Context) { struct vmbus_channel_open_channel *openMsg; - struct vmbus_channel_msginfo *openInfo; + struct vmbus_channel_msginfo *openInfo = NULL; void *in, *out; unsigned long flags; int ret, err = 0; @@ -218,7 +218,11 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, SendRingBufferSize + RecvRingBufferSize, &NewChannel->RingBufferGpadlHandle); -/* FIXME: the value of ret is not checked */ + + if (!ret) { + err = ret; + goto errorout; + } DPRINT_DBG(VMBUS, "channel %p ", @@ -250,7 +254,6 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, openMsg->OpenId = NewChannel->OfferMsg.ChildRelId; /* FIXME */ openMsg->ChildRelId = NewChannel->OfferMsg.ChildRelId; openMsg->RingBufferGpadlHandle = NewChannel->RingBufferGpadlHandle; - ASSERT(openMsg->RingBufferGpadlHandle); openMsg->DownstreamRingBufferPageOffset = SendRingBufferSize >> PAGE_SHIFT; openMsg->ServerContextAreaGpadlHandle = 0; /* TODO */ @@ -295,6 +298,8 @@ Cleanup: return 0; errorout: + RingBufferCleanup(&NewChannel->Outbound); + RingBufferCleanup(&NewChannel->Inbound); osd_PageFree(out, (SendRingBufferSize + RecvRingBufferSize) >> PAGE_SHIFT); kfree(openInfo); -- cgit v0.10.2 From c827f944f51e02894d68f036da843783e622ec2a Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:38 -0400 Subject: Staging: hv: remove ASSERT() in Channel.c VmbusChannelOpen() will now return -EINVAL if UserDataLen is too big. Previously this was handled by an assert. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index fdd4411..bd1a336 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -258,7 +258,11 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, PAGE_SHIFT; openMsg->ServerContextAreaGpadlHandle = 0; /* TODO */ - ASSERT(UserDataLen <= MAX_USER_DEFINED_BYTES); + if (UserDataLen > MAX_USER_DEFINED_BYTES) { + err = -EINVAL; + goto errorout; + } + if (UserDataLen) memcpy(openMsg->UserData, UserData, UserDataLen); -- cgit v0.10.2 From 002b53ea5713910daf215037b72c5820413e2f95 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:39 -0400 Subject: Staging: hv: return -EINVAL instead of calling ASSERT() Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index bd1a336..0a9ca33 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -793,7 +793,8 @@ int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *Channel, DPRINT_ENTER(VMBUS); - ASSERT(PageCount <= MAX_PAGE_BUFFER_COUNT); + if (PageCount > MAX_PAGE_BUFFER_COUNT) + return -EINVAL; DumpVmbusChannel(Channel); @@ -864,8 +865,8 @@ int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *Channel, DPRINT_DBG(VMBUS, "data buffer - offset %u len %u pfn count %u", MultiPageBuffer->Offset, MultiPageBuffer->Length, PfnCount); - ASSERT(PfnCount > 0); - ASSERT(PfnCount <= MAX_MULTIPAGE_BUFFER_COUNT); + if ((PfnCount < 0) || (PfnCount > MAX_MULTIPAGE_BUFFER_COUNT)) + return -EINVAL; /* * Adjust the size down since VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER is -- cgit v0.10.2 From 0ace247ead760a6a56a7bb3b5926c28fef1d4c6c Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:40 -0400 Subject: staging: hv: remove ASSERT()s in Channel.c These ASSERT()s serve no purpose other than for debugging. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index 0a9ca33..a1431e4 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -183,8 +183,8 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, DPRINT_ENTER(VMBUS); /* Aligned to page size */ - ASSERT(!(SendRingBufferSize & (PAGE_SIZE - 1))); - ASSERT(!(RecvRingBufferSize & (PAGE_SIZE - 1))); + /* ASSERT(!(SendRingBufferSize & (PAGE_SIZE - 1))); */ + /* ASSERT(!(RecvRingBufferSize & (PAGE_SIZE - 1))); */ NewChannel->OnChannelCallback = OnChannelCallback; NewChannel->ChannelCallbackContext = Context; @@ -195,7 +195,7 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, if (!out) return -ENOMEM; - ASSERT(((unsigned long)out & (PAGE_SIZE-1)) == 0); + /* ASSERT(((unsigned long)out & (PAGE_SIZE-1)) == 0); */ in = (void *)((unsigned long)out + SendRingBufferSize); @@ -373,7 +373,7 @@ static int VmbusChannelCreateGpadlHeader(void *Kbuffer, u32 Size, int pfnSum, pfnCount, pfnLeft, pfnCurr, pfnSize; /* ASSERT((kbuffer & (PAGE_SIZE-1)) == 0); */ - ASSERT((Size & (PAGE_SIZE-1)) == 0); + /* ASSERT((Size & (PAGE_SIZE-1)) == 0); */ pageCount = Size >> PAGE_SHIFT; pfn = virt_to_phys(Kbuffer) >> PAGE_SHIFT; @@ -601,7 +601,7 @@ int VmbusChannelTeardownGpadl(struct vmbus_channel *Channel, u32 GpadlHandle) DPRINT_ENTER(VMBUS); - ASSERT(GpadlHandle != 0); + /* ASSERT(GpadlHandle != 0); */ info = kmalloc(sizeof(*info) + sizeof(struct vmbus_channel_gpadl_teardown), GFP_KERNEL); @@ -746,7 +746,7 @@ int VmbusChannelSendPacket(struct vmbus_channel *Channel, const void *Buffer, DumpVmbusChannel(Channel); - ASSERT((packetLenAligned - packetLen) < sizeof(u64)); + /* ASSERT((packetLenAligned - packetLen) < sizeof(u64)); */ /* Setup the descriptor */ desc.Type = Type; /* VmbusPacketTypeDataInBand; */ @@ -808,7 +808,7 @@ int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *Channel, packetLen = descSize + BufferLen; packetLenAligned = ALIGN_UP(packetLen, sizeof(u64)); - ASSERT((packetLenAligned - packetLen) < sizeof(u64)); + /* ASSERT((packetLenAligned - packetLen) < sizeof(u64)); */ /* Setup the descriptor */ desc.Type = VmbusPacketTypeDataUsingGpaDirect; @@ -878,7 +878,7 @@ int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *Channel, packetLen = descSize + BufferLen; packetLenAligned = ALIGN_UP(packetLen, sizeof(u64)); - ASSERT((packetLenAligned - packetLen) < sizeof(u64)); + /* ASSERT((packetLenAligned - packetLen) < sizeof(u64)); */ /* Setup the descriptor */ desc.Type = VmbusPacketTypeDataUsingGpaDirect; @@ -1056,7 +1056,7 @@ int VmbusChannelRecvPacketRaw(struct vmbus_channel *Channel, void *Buffer, void VmbusChannelOnChannelEvent(struct vmbus_channel *Channel) { DumpVmbusChannel(Channel); - ASSERT(Channel->OnChannelCallback); + /* ASSERT(Channel->OnChannelCallback); */ Channel->OnChannelCallback(Channel->ChannelCallbackContext); -- cgit v0.10.2 From b856e7382f7d1b184a3dac200275e23a27488ce1 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:41 -0400 Subject: staging: hv: remove ASSERT()s in storvsc_drv.c These ASSERT()s serve no purpose other than for debugging. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index 26b35a6..d9649e3 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -385,11 +385,11 @@ static void storvsc_commmand_completion(struct hv_storvsc_request *request) void (*scsi_done_fn)(struct scsi_cmnd *); struct scsi_sense_hdr sense_hdr; - ASSERT(request == &cmd_request->request); - ASSERT(scmnd); - ASSERT((unsigned long)scmnd->host_scribble == - (unsigned long)cmd_request); - ASSERT(scmnd->scsi_done); + /* ASSERT(request == &cmd_request->request); */ + /* ASSERT(scmnd); */ + /* ASSERT((unsigned long)scmnd->host_scribble == */ + /* (unsigned long)cmd_request); */ + /* ASSERT(scmnd->scsi_done); */ DPRINT_ENTER(STORVSC_DRV); @@ -413,7 +413,7 @@ static void storvsc_commmand_completion(struct hv_storvsc_request *request) scsi_print_sense_hdr("storvsc", &sense_hdr); } - ASSERT(request->BytesXfer <= request->DataBuffer.Length); + /* ASSERT(request->BytesXfer <= request->DataBuffer.Length); */ scsi_set_resid(scmnd, request->DataBuffer.Length - request->BytesXfer); scsi_done_fn = scmnd->scsi_done; @@ -522,7 +522,7 @@ static unsigned int copy_to_bounce_buffer(struct scatterlist *orig_sgl, src = src_addr; srclen = orig_sgl[i].length; - ASSERT(orig_sgl[i].offset + orig_sgl[i].length <= PAGE_SIZE); + /* ASSERT(orig_sgl[i].offset + orig_sgl[i].length <= PAGE_SIZE); */ if (j == 0) bounce_addr = (unsigned long)kmap_atomic(sg_page((&bounce_sgl[j])), KM_IRQ0); @@ -583,7 +583,7 @@ static unsigned int copy_from_bounce_buffer(struct scatterlist *orig_sgl, KM_IRQ0) + orig_sgl[i].offset; dest = dest_addr; destlen = orig_sgl[i].length; - ASSERT(orig_sgl[i].offset + orig_sgl[i].length <= PAGE_SIZE); + /* ASSERT(orig_sgl[i].offset + orig_sgl[i].length <= PAGE_SIZE); */ if (j == 0) bounce_addr = (unsigned long)kmap_atomic(sg_page((&bounce_sgl[j])), KM_IRQ0); @@ -655,7 +655,7 @@ static int storvsc_queuecommand(struct scsi_cmnd *scmnd, /* If retrying, no need to prep the cmd */ if (scmnd->host_scribble) { - ASSERT(scmnd->scsi_done != NULL); + /* ASSERT(scmnd->scsi_done != NULL); */ cmd_request = (struct storvsc_cmd_request *)scmnd->host_scribble; @@ -665,8 +665,8 @@ static int storvsc_queuecommand(struct scsi_cmnd *scmnd, goto retry_request; } - ASSERT(scmnd->scsi_done == NULL); - ASSERT(scmnd->host_scribble == NULL); + /* ASSERT(scmnd->scsi_done == NULL); */ + /* ASSERT(scmnd->host_scribble == NULL); */ scmnd->scsi_done = done; @@ -717,7 +717,7 @@ static int storvsc_queuecommand(struct scsi_cmnd *scmnd, request->TargetId = scmnd->device->id; request->LunId = scmnd->device->lun; - ASSERT(scmnd->cmd_len <= 16); + /* ASSERT(scmnd->cmd_len <= 16); */ request->CdbLen = scmnd->cmd_len; request->Cdb = scmnd->cmnd; @@ -773,13 +773,11 @@ static int storvsc_queuecommand(struct scsi_cmnd *scmnd, page_to_pfn(sg_page((&sgl[i]))); } } else if (scsi_sglist(scmnd)) { - ASSERT(scsi_bufflen(scmnd) <= PAGE_SIZE); + /* ASSERT(scsi_bufflen(scmnd) <= PAGE_SIZE); */ request->DataBuffer.Offset = virt_to_phys(scsi_sglist(scmnd)) & (PAGE_SIZE-1); request->DataBuffer.PfnArray[0] = virt_to_phys(scsi_sglist(scmnd)) >> PAGE_SHIFT; - } else { - ASSERT(scsi_bufflen(scmnd) == 0); } retry_request: -- cgit v0.10.2 From ee3503762d86c13bb94ed1db200d4601517b1b9b Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:42 -0400 Subject: staging: hv: return error instead calling ASSERT in blkvsc_drv.c Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index 8f8637e..b6a2cb8 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -1213,7 +1213,10 @@ static int blkvsc_cancel_pending_reqs(struct block_device_context *blkdev) (!comp_req->request.Status ? 0 : -EIO), comp_req->sector_count * blkdev->sector_size); - ASSERT(ret != 0); + + /* FIXME: shouldn't this do more than return? */ + if (ret) + goto out; } kmem_cache_free(blkdev->request_pool, comp_req); @@ -1245,6 +1248,7 @@ static int blkvsc_cancel_pending_reqs(struct block_device_context *blkdev) kmem_cache_free(blkdev->request_pool, pend_req); } +out: return ret; } -- cgit v0.10.2 From 5afd06ccd6b309f6a47d7e8fa4ea349b25738d97 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:43 -0400 Subject: staging: hv: make the block driver depend on LBDAF Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Kconfig b/drivers/staging/hv/Kconfig index 79afb1e..97480f5 100644 --- a/drivers/staging/hv/Kconfig +++ b/drivers/staging/hv/Kconfig @@ -17,7 +17,7 @@ config HYPERV_STORAGE config HYPERV_BLOCK tristate "Microsoft Hyper-V virtual block driver" - depends on BLOCK && SCSI + depends on BLOCK && SCSI && LBDAF default HYPERV help Select this option to enable the Hyper-V virtual block driver. diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index b6a2cb8..8a25154 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -1489,7 +1489,7 @@ static int __init blkvsc_init(void) { int ret; - ASSERT(sizeof(sector_t) == 8); /* Make sure CONFIG_LBD is set */ + BUILD_BUG_ON(sizeof(sector_t) != 8); DPRINT_ENTER(BLKVSC_DRV); -- cgit v0.10.2 From 4e5166b5d83e748014f6f22a4f8a3537294ced9b Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:44 -0400 Subject: staging: hv: remove ASSERT()s in blkvsc_drv.c These ASSERT()s serve no purpose other than for debugging. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index 8a25154..78fc348 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -288,8 +288,8 @@ static int blkvsc_probe(struct device *device) /* Initialize what we can here */ spin_lock_init(&blkdev->lock); - ASSERT(sizeof(struct blkvsc_request_group) <= - sizeof(struct blkvsc_request)); + /* ASSERT(sizeof(struct blkvsc_request_group) <= */ + /* sizeof(struct blkvsc_request)); */ blkdev->request_pool = kmem_cache_create(dev_name(&device_ctx->device), sizeof(struct blkvsc_request) + @@ -808,8 +808,8 @@ static int blkvsc_remove(struct device *device) static void blkvsc_init_rw(struct blkvsc_request *blkvsc_req) { - ASSERT(blkvsc_req->req); - ASSERT(blkvsc_req->sector_count <= (MAX_MULTIPAGE_BUFFER_COUNT*8)); + /* ASSERT(blkvsc_req->req); */ + /* ASSERT(blkvsc_req->sector_count <= (MAX_MULTIPAGE_BUFFER_COUNT*8)); */ blkvsc_req->cmd_len = 16; @@ -1116,7 +1116,7 @@ static void blkvsc_request_completion(struct hv_storvsc_request *request) unsigned long flags; struct blkvsc_request *comp_req, *tmp; - ASSERT(blkvsc_req->group); + /* ASSERT(blkvsc_req->group); */ DPRINT_DBG(BLKVSC_DRV, "blkdev %p blkvsc_req %p group %p type %s " "sect_start %lu sect_count %ld len %d group outstd %d " -- cgit v0.10.2 From e2e64432e9b76e8170d64b25a40feec991822555 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:45 -0400 Subject: staging: hv: remove ASSERT()s in StorVsc.c These ASSERT()s serve no purpose other than for debugging. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/StorVsc.c b/drivers/staging/hv/StorVsc.c index 4d0fbce..e73130e 100644 --- a/drivers/staging/hv/StorVsc.c +++ b/drivers/staging/hv/StorVsc.c @@ -100,7 +100,7 @@ static inline struct storvsc_device *AllocStorDevice(struct hv_device *Device) static inline void FreeStorDevice(struct storvsc_device *Device) { - ASSERT(atomic_read(&Device->RefCount) == 0); + /* ASSERT(atomic_read(&Device->RefCount) == 0); */ kfree(Device); } @@ -137,10 +137,10 @@ static inline void PutStorDevice(struct hv_device *Device) struct storvsc_device *storDevice; storDevice = (struct storvsc_device *)Device->Extension; - ASSERT(storDevice); + /* ASSERT(storDevice); */ atomic_dec(&storDevice->RefCount); - ASSERT(atomic_read(&storDevice->RefCount)); + /* ASSERT(atomic_read(&storDevice->RefCount)); */ } /* Drop ref count to 1 to effectively disable GetStorDevice() */ @@ -149,7 +149,7 @@ static inline struct storvsc_device *ReleaseStorDevice(struct hv_device *Device) struct storvsc_device *storDevice; storDevice = (struct storvsc_device *)Device->Extension; - ASSERT(storDevice); + /* ASSERT(storDevice); */ /* Busy wait until the ref drop to 2, then set it to 1 */ while (atomic_cmpxchg(&storDevice->RefCount, 2, 1) != 2) @@ -165,7 +165,7 @@ static inline struct storvsc_device *FinalReleaseStorDevice( struct storvsc_device *storDevice; storDevice = (struct storvsc_device *)Device->Extension; - ASSERT(storDevice); + /* ASSERT(storDevice); */ /* Busy wait until the ref drop to 1, then set it to 0 */ while (atomic_cmpxchg(&storDevice->RefCount, 1, 0) != 1) @@ -370,12 +370,12 @@ static void StorVscOnIOCompletion(struct hv_device *Device, "completed bytes xfer %u", RequestExt, VStorPacket->VmSrb.DataTransferLength); - ASSERT(RequestExt != NULL); - ASSERT(RequestExt->Request != NULL); + /* ASSERT(RequestExt != NULL); */ + /* ASSERT(RequestExt->Request != NULL); */ request = RequestExt->Request; - ASSERT(request->OnIOCompletion != NULL); + /* ASSERT(request->OnIOCompletion != NULL); */ /* Copy over the status...etc */ request->Status = VStorPacket->VmSrb.ScsiStatus; @@ -395,8 +395,8 @@ static void StorVscOnIOCompletion(struct hv_device *Device, "valid - len %d\n", RequestExt, VStorPacket->VmSrb.SenseInfoLength); - ASSERT(VStorPacket->VmSrb.SenseInfoLength <= - request->SenseBufferSize); + /* ASSERT(VStorPacket->VmSrb.SenseInfoLength <= */ + /* request->SenseBufferSize); */ memcpy(request->SenseBuffer, VStorPacket->VmSrb.SenseData, VStorPacket->VmSrb.SenseInfoLength); @@ -451,7 +451,7 @@ static void StorVscOnChannelCallback(void *context) DPRINT_ENTER(STORVSC); - ASSERT(device); + /* ASSERT(device); */ storDevice = MustGetStorDevice(device); if (!storDevice) { @@ -474,7 +474,7 @@ static void StorVscOnChannelCallback(void *context) request = (struct storvsc_request_extension *) (unsigned long)requestId; - ASSERT(request); + /* ASSERT(request);c */ /* if (vstorPacket.Flags & SYNTHETIC_FLAG) */ if ((request == &storDevice->InitRequest) || @@ -821,7 +821,7 @@ int StorVscInitialize(struct hv_driver *Driver) sizeof(struct vmscsi_request)); /* Make sure we are at least 2 pages since 1 page is used for control */ - ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); + /* ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); */ Driver->name = gDriverName; memcpy(&Driver->deviceType, &gStorVscDeviceType, -- cgit v0.10.2 From 45e4431468f24748ba089b741713c740e854fccc Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:46 -0400 Subject: staging: hv: remove ASSERT()s in RndisFilter.c These ASSERT()s serve no purpose other than for debugging. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/RndisFilter.c b/drivers/staging/hv/RndisFilter.c index de4bc80..f0aacc0 100644 --- a/drivers/staging/hv/RndisFilter.c +++ b/drivers/staging/hv/RndisFilter.c @@ -356,8 +356,8 @@ static void RndisFilterReceiveData(struct rndis_device *Device, DPRINT_ENTER(NETVSC); /* empty ethernet frame ?? */ - ASSERT(Packet->PageBuffers[0].Length > - RNDIS_MESSAGE_SIZE(struct rndis_packet)); + /* ASSERT(Packet->PageBuffers[0].Length > */ + /* RNDIS_MESSAGE_SIZE(struct rndis_packet)); */ rndisPacket = &Message->Message.Packet; @@ -567,8 +567,8 @@ static int RndisFilterSetPacketFilter(struct rndis_device *Device, DPRINT_ENTER(NETVSC); - ASSERT(RNDIS_MESSAGE_SIZE(struct rndis_set_request) + sizeof(u32) <= - sizeof(struct rndis_message)); + /* ASSERT(RNDIS_MESSAGE_SIZE(struct rndis_set_request) + sizeof(u32) <= */ + /* sizeof(struct rndis_message)); */ request = GetRndisRequest(Device, REMOTE_NDIS_SET_MSG, RNDIS_MESSAGE_SIZE(struct rndis_set_request) + @@ -640,8 +640,8 @@ int RndisFilterInit(struct netvsc_driver *Driver) Driver->Base.OnDeviceRemove; gRndisFilter.InnerDriver.Base.OnCleanup = Driver->Base.OnCleanup; - ASSERT(Driver->OnSend); - ASSERT(Driver->OnReceiveCallback); + /* ASSERT(Driver->OnSend); */ + /* ASSERT(Driver->OnReceiveCallback); */ gRndisFilter.InnerDriver.OnSend = Driver->OnSend; gRndisFilter.InnerDriver.OnReceiveCallback = Driver->OnReceiveCallback; gRndisFilter.InnerDriver.OnLinkStatusChanged = @@ -811,8 +811,8 @@ static int RndisFilterOnDeviceAdd(struct hv_device *Device, /* Initialize the rndis device */ netDevice = Device->Extension; - ASSERT(netDevice); - ASSERT(netDevice->Device); + /* ASSERT(netDevice); */ + /* ASSERT(netDevice->Device); */ netDevice->Extension = rndisDevice; rndisDevice->NetDevice = netDevice; @@ -921,7 +921,7 @@ static int RndisFilterOnSend(struct hv_device *Device, /* Add the rndis header */ filterPacket = (struct rndis_filter_packet *)Packet->Extension; - ASSERT(filterPacket); + /* ASSERT(filterPacket); */ memset(filterPacket, 0, sizeof(struct rndis_filter_packet)); -- cgit v0.10.2 From 8a62d7168af111bb80d041e6ccf74987056c79d3 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:47 -0400 Subject: staging: hv: remove ASSERT()s in RndisFilter.c return -EINVAL instead of calling ASSERT() for these conditionals. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/RndisFilter.c b/drivers/staging/hv/RndisFilter.c index f0aacc0..597c972 100644 --- a/drivers/staging/hv/RndisFilter.c +++ b/drivers/staging/hv/RndisFilter.c @@ -391,7 +391,9 @@ static int RndisFilterOnReceive(struct hv_device *Device, DPRINT_ENTER(NETVSC); - ASSERT(netDevice); + if (!netDevice) + return -EINVAL; + /* Make sure the rndis device state is initialized */ if (!netDevice->Extension) { DPRINT_ERR(NETVSC, "got rndis message but no rndis device..." @@ -492,7 +494,8 @@ static int RndisFilterQueryDevice(struct rndis_device *Device, u32 Oid, DPRINT_ENTER(NETVSC); - ASSERT(Result); + if (!Result) + return -EINVAL; *ResultSize = 0; request = GetRndisRequest(Device, REMOTE_NDIS_QUERY_MSG, @@ -885,7 +888,9 @@ int RndisFilterOnOpen(struct hv_device *Device) DPRINT_ENTER(NETVSC); - ASSERT(netDevice); + if (!netDevice) + return -EINVAL; + ret = RndisFilterOpenDevice(netDevice->Extension); DPRINT_EXIT(NETVSC); @@ -900,7 +905,9 @@ int RndisFilterOnClose(struct hv_device *Device) DPRINT_ENTER(NETVSC); - ASSERT(netDevice); + if (!netDevice) + return -EINVAL; + ret = RndisFilterCloseDevice(netDevice->Extension); DPRINT_EXIT(NETVSC); -- cgit v0.10.2 From 1bbdd7a5380239533c4bb648c5d5d9510f12974b Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:48 -0400 Subject: staging: hv: remove ASSERT()s in RingBuffer.c These ASSERT()s serve no purpose other than for debugging. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/RingBuffer.c b/drivers/staging/hv/RingBuffer.c index 08b3c55..ee481fd 100644 --- a/drivers/staging/hv/RingBuffer.c +++ b/drivers/staging/hv/RingBuffer.c @@ -72,7 +72,7 @@ GetNextWriteLocation(RING_BUFFER_INFO *RingInfo) { u32 next = RingInfo->RingBuffer->WriteIndex; - ASSERT(next < RingInfo->RingDataSize); + /* ASSERT(next < RingInfo->RingDataSize); */ return next; } @@ -106,7 +106,7 @@ GetNextReadLocation(RING_BUFFER_INFO *RingInfo) { u32 next = RingInfo->RingBuffer->ReadIndex; - ASSERT(next < RingInfo->RingDataSize); + /* ASSERT(next < RingInfo->RingDataSize); */ return next; } @@ -126,7 +126,7 @@ GetNextReadLocationWithOffset(RING_BUFFER_INFO *RingInfo, u32 Offset) { u32 next = RingInfo->RingBuffer->ReadIndex; - ASSERT(next < RingInfo->RingDataSize); + /* ASSERT(next < RingInfo->RingDataSize); */ next += Offset; next %= RingInfo->RingDataSize; -- cgit v0.10.2 From 3324fb405340cf52fe361697a86d235587402d9c Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:49 -0400 Subject: staging: hv: check return value of RingBufferInit() RingBufferInit() would always return sucess and instead relied on an ASSERT() to test for an error condition. Remove the ASSERT() and return -EINVAL instead. The return value of RingBufferInit() was also never checked, so check it. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index a1431e4..158f62d8 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -203,9 +203,18 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, NewChannel->RingBufferPageCount = (SendRingBufferSize + RecvRingBufferSize) >> PAGE_SHIFT; - RingBufferInit(&NewChannel->Outbound, out, SendRingBufferSize); + ret = RingBufferInit(&NewChannel->Outbound, out, SendRingBufferSize); + if (!ret) { + err = ret; + goto errorout; + } + + ret = RingBufferInit(&NewChannel->Inbound, in, RecvRingBufferSize); + if (!ret) { + err = ret; + goto errorout; + } - RingBufferInit(&NewChannel->Inbound, in, RecvRingBufferSize); /* Establish the gpadl for the ring buffer */ DPRINT_DBG(VMBUS, "Establishing ring buffer's gpadl for channel %p...", diff --git a/drivers/staging/hv/RingBuffer.c b/drivers/staging/hv/RingBuffer.c index ee481fd..69f3eba 100644 --- a/drivers/staging/hv/RingBuffer.c +++ b/drivers/staging/hv/RingBuffer.c @@ -301,7 +301,8 @@ Description: --*/ int RingBufferInit(RING_BUFFER_INFO *RingInfo, void *Buffer, u32 BufferLen) { - ASSERT(sizeof(RING_BUFFER) == PAGE_SIZE); + if (sizeof(RING_BUFFER) != PAGE_SIZE) + return -EINVAL; memset(RingInfo, 0, sizeof(RING_BUFFER_INFO)); -- cgit v0.10.2 From a16e1485c758c236915ac1956694d11bff5e5daa Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:50 -0400 Subject: staging: hv: remove ASSERT()s and return -EINVAL in RingBuffer.c return -EINVAL instead of calling ASSERT() for these conditionals. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/RingBuffer.c b/drivers/staging/hv/RingBuffer.c index 69f3eba..64f8d0f 100644 --- a/drivers/staging/hv/RingBuffer.c +++ b/drivers/staging/hv/RingBuffer.c @@ -490,7 +490,8 @@ int RingBufferRead(RING_BUFFER_INFO *InRingInfo, void *Buffer, u64 prevIndices = 0; unsigned long flags; - ASSERT(BufferLen > 0); + if (BufferLen <= 0) + return -EINVAL; spin_lock_irqsave(&InRingInfo->ring_lock, flags); -- cgit v0.10.2 From a3810b0ef61d23f37ace99ed0fb180b62fcb3f68 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:51 -0400 Subject: staging: hv: remove ASSERT()s in vmbus_drv.c These ASSERT()s serve no purpose other than for debugging. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c index d2a82aa..a715b3d 100644 --- a/drivers/staging/hv/vmbus_drv.c +++ b/drivers/staging/hv/vmbus_drv.c @@ -923,7 +923,7 @@ static void vmbus_msg_dpc(unsigned long data) DPRINT_ENTER(VMBUS_DRV); - ASSERT(vmbus_drv_obj->OnMsgDpc != NULL); + /* ASSERT(vmbus_drv_obj->OnMsgDpc != NULL); */ /* Call to bus driver to handle interrupt */ vmbus_drv_obj->OnMsgDpc(&vmbus_drv_obj->Base); @@ -940,7 +940,7 @@ static void vmbus_event_dpc(unsigned long data) DPRINT_ENTER(VMBUS_DRV); - ASSERT(vmbus_drv_obj->OnEventDpc != NULL); + /* ASSERT(vmbus_drv_obj->OnEventDpc != NULL); */ /* Call to bus driver to handle interrupt */ vmbus_drv_obj->OnEventDpc(&vmbus_drv_obj->Base); @@ -955,7 +955,7 @@ static irqreturn_t vmbus_isr(int irq, void *dev_id) DPRINT_ENTER(VMBUS_DRV); - ASSERT(vmbus_driver_obj->OnIsr != NULL); + /* ASSERT(vmbus_driver_obj->OnIsr != NULL); */ /* Call to bus driver to handle interrupt */ ret = vmbus_driver_obj->OnIsr(&vmbus_driver_obj->Base); -- cgit v0.10.2 From 972b9529ccfa604bd473c43589f5120066161edd Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:54 -0400 Subject: staging: hv: remove ASSERT()s These ASSERT()s serve no purpose other than for debugging. Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/BlkVsc.c b/drivers/staging/hv/BlkVsc.c index a48ee3a..b2f6005 100644 --- a/drivers/staging/hv/BlkVsc.c +++ b/drivers/staging/hv/BlkVsc.c @@ -78,7 +78,7 @@ int BlkVscInitialize(struct hv_driver *Driver) storDriver = (struct storvsc_driver_object *)Driver; /* Make sure we are at least 2 pages since 1 page is used for control */ - ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); + /* ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); */ Driver->name = gBlkDriverName; memcpy(&Driver->deviceType, &gBlkVscDeviceType, sizeof(struct hv_guid)); diff --git a/drivers/staging/hv/Connection.c b/drivers/staging/hv/Connection.c index e590eb4..3a01d3c 100644 --- a/drivers/staging/hv/Connection.c +++ b/drivers/staging/hv/Connection.c @@ -254,7 +254,7 @@ static void VmbusProcessChannelEvent(void *context) struct vmbus_channel *channel; u32 relId = (u32)(unsigned long)context; - ASSERT(relId > 0); + /* ASSERT(relId > 0); */ /* * Find the channel based on this relid and invokes the diff --git a/drivers/staging/hv/NetVsc.c b/drivers/staging/hv/NetVsc.c index d3154e7..9863ca2 100644 --- a/drivers/staging/hv/NetVsc.c +++ b/drivers/staging/hv/NetVsc.c @@ -131,7 +131,7 @@ static void PutNetDevice(struct hv_device *Device) struct netvsc_device *netDevice; netDevice = Device->Extension; - ASSERT(netDevice); + /* ASSERT(netDevice); */ atomic_dec(&netDevice->RefCount); } @@ -184,14 +184,15 @@ int NetVscInitialize(struct hv_driver *drv) sizeof(struct vmtransfer_page_packet_header)); /* Make sure we are at least 2 pages since 1 page is used for control */ - ASSERT(driver->RingBufferSize >= (PAGE_SIZE << 1)); + /* ASSERT(driver->RingBufferSize >= (PAGE_SIZE << 1)); */ drv->name = gDriverName; memcpy(&drv->deviceType, &gNetVscDeviceType, sizeof(struct hv_guid)); /* Make sure it is set by the caller */ - ASSERT(driver->OnReceiveCallback); - ASSERT(driver->OnLinkStatusChanged); + /* FIXME: These probably should still be tested in some way */ + /* ASSERT(driver->OnReceiveCallback); */ + /* ASSERT(driver->OnLinkStatusChanged); */ /* Setup the dispatch table */ driver->Base.OnDeviceAdd = NetVscOnDeviceAdd; @@ -222,9 +223,9 @@ static int NetVscInitializeReceiveBufferWithNetVsp(struct hv_device *Device) DPRINT_EXIT(NETVSC); return -1; } - ASSERT(netDevice->ReceiveBufferSize > 0); + /* ASSERT(netDevice->ReceiveBufferSize > 0); */ /* page-size grandularity */ - ASSERT((netDevice->ReceiveBufferSize & (PAGE_SIZE - 1)) == 0); + /* ASSERT((netDevice->ReceiveBufferSize & (PAGE_SIZE - 1)) == 0); */ netDevice->ReceiveBuffer = osd_PageAlloc(netDevice->ReceiveBufferSize >> PAGE_SHIFT); @@ -236,8 +237,8 @@ static int NetVscInitializeReceiveBufferWithNetVsp(struct hv_device *Device) goto Cleanup; } /* page-aligned buffer */ - ASSERT(((unsigned long)netDevice->ReceiveBuffer & (PAGE_SIZE - 1)) == - 0); + /* ASSERT(((unsigned long)netDevice->ReceiveBuffer & (PAGE_SIZE - 1)) == */ + /* 0); */ DPRINT_INFO(NETVSC, "Establishing receive buffer's GPADL..."); @@ -294,8 +295,8 @@ static int NetVscInitializeReceiveBufferWithNetVsp(struct hv_device *Device) } /* Parse the response */ - ASSERT(netDevice->ReceiveSectionCount == 0); - ASSERT(netDevice->ReceiveSections == NULL); + /* ASSERT(netDevice->ReceiveSectionCount == 0); */ + /* ASSERT(netDevice->ReceiveSections == NULL); */ netDevice->ReceiveSectionCount = initPacket->Messages.Version1Messages.SendReceiveBufferComplete.NumSections; @@ -355,7 +356,7 @@ static int NetVscInitializeSendBufferWithNetVsp(struct hv_device *Device) } ASSERT(netDevice->SendBufferSize > 0); /* page-size grandularity */ - ASSERT((netDevice->SendBufferSize & (PAGE_SIZE - 1)) == 0); + /* ASSERT((netDevice->SendBufferSize & (PAGE_SIZE - 1)) == 0); */ netDevice->SendBuffer = osd_PageAlloc(netDevice->SendBufferSize >> PAGE_SHIFT); @@ -366,7 +367,7 @@ static int NetVscInitializeSendBufferWithNetVsp(struct hv_device *Device) goto Cleanup; } /* page-aligned buffer */ - ASSERT(((unsigned long)netDevice->SendBuffer & (PAGE_SIZE - 1)) == 0); + /* ASSERT(((unsigned long)netDevice->SendBuffer & (PAGE_SIZE - 1)) == 0); */ DPRINT_INFO(NETVSC, "Establishing send buffer's GPADL..."); @@ -912,7 +913,7 @@ static void NetVscOnSendCompletion(struct hv_device *Device, NvspMessage1TypeSendRNDISPacketComplete) { /* Get the send context */ nvscPacket = (struct hv_netvsc_packet *)(unsigned long)Packet->TransactionId; - ASSERT(nvscPacket); + /* ASSERT(nvscPacket); */ /* Notify the layer above us */ nvscPacket->Completion.Send.OnSendCompletion(nvscPacket->Completion.Send.SendCompletionContext); @@ -1096,8 +1097,8 @@ static void NetVscOnReceive(struct hv_device *Device, /* This is how much we can satisfy */ xferpagePacket->Count = count - 1; - ASSERT(xferpagePacket->Count > 0 && xferpagePacket->Count <= - vmxferpagePacket->RangeCount); + /* ASSERT(xferpagePacket->Count > 0 && xferpagePacket->Count <= */ + /* vmxferpagePacket->RangeCount); */ if (xferpagePacket->Count != vmxferpagePacket->RangeCount) { DPRINT_INFO(NETVSC, "Needed %d netvsc pkts to satisy this xfer " @@ -1125,9 +1126,9 @@ static void NetVscOnReceive(struct hv_device *Device, vmxferpagePacket->Ranges[i].ByteCount; netvscPacket->PageBufferCount = 1; - ASSERT(vmxferpagePacket->Ranges[i].ByteOffset + - vmxferpagePacket->Ranges[i].ByteCount < - netDevice->ReceiveBufferSize); + /* ASSERT(vmxferpagePacket->Ranges[i].ByteOffset + */ + /* vmxferpagePacket->Ranges[i].ByteCount < */ + /* netDevice->ReceiveBufferSize); */ netvscPacket->PageBuffers[0].Length = vmxferpagePacket->Ranges[i].ByteCount; @@ -1165,7 +1166,7 @@ static void NetVscOnReceive(struct hv_device *Device, if (bytesRemain == 0) break; } - ASSERT(bytesRemain == 0); + /* ASSERT(bytesRemain == 0); */ } DPRINT_DBG(NETVSC, "[%d] - (abs offset %u len %u) => " "(pfn %llx, offset %u, len %u)", i, @@ -1181,7 +1182,7 @@ static void NetVscOnReceive(struct hv_device *Device, NetVscOnReceiveCompletion(netvscPacket->Completion.Recv.ReceiveCompletionContext); } - ASSERT(list_empty(&listHead)); + /* ASSERT(list_empty(&listHead)); */ PutNetDevice(Device); DPRINT_EXIT(NETVSC); @@ -1245,7 +1246,7 @@ static void NetVscOnReceiveCompletion(void *Context) DPRINT_ENTER(NETVSC); - ASSERT(packet->XferPagePacket); + /* ASSERT(packet->XferPagePacket); */ /* * Even though it seems logical to do a GetOutboundNetDevice() here to @@ -1263,7 +1264,7 @@ static void NetVscOnReceiveCompletion(void *Context) /* Overloading use of the lock. */ spin_lock_irqsave(&netDevice->receive_packet_list_lock, flags); - ASSERT(packet->XferPagePacket->Count > 0); + /* ASSERT(packet->XferPagePacket->Count > 0); */ packet->XferPagePacket->Count--; /* @@ -1305,7 +1306,7 @@ static void NetVscOnChannelCallback(void *Context) DPRINT_ENTER(NETVSC); - ASSERT(device); + /* ASSERT(device); */ packet = kzalloc(NETVSC_PACKET_SIZE * sizeof(unsigned char), GFP_KERNEL); @@ -1377,8 +1378,6 @@ static void NetVscOnChannelCallback(void *Context) } bufferlen = bytesRecvd; - } else { - ASSERT(0); } } while (1); -- cgit v0.10.2 From 7a09876d2a68aab6c7a7d9df60eb0eb13467af11 Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:55 -0400 Subject: staging: hv: replace ASSERT() with WARN_ON() in NetVsc.c Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/NetVsc.c b/drivers/staging/hv/NetVsc.c index 9863ca2..ddde391 100644 --- a/drivers/staging/hv/NetVsc.c +++ b/drivers/staging/hv/NetVsc.c @@ -92,7 +92,7 @@ static struct netvsc_device *AllocNetDevice(struct hv_device *Device) static void FreeNetDevice(struct netvsc_device *Device) { - ASSERT(atomic_read(&Device->RefCount) == 0); + WARN_ON(atomic_read(&Device->RefCount) == 0); Device->Device->Extension = NULL; kfree(Device); } -- cgit v0.10.2 From 790696847dfad8b2d968ce82cc1be58ebacefead Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:56 -0400 Subject: staging: hv: remove ASSERT() and return -EINVAL in NetVsc.c return -EINVAL instead of calling ASSERT() Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/NetVsc.c b/drivers/staging/hv/NetVsc.c index ddde391..f852984 100644 --- a/drivers/staging/hv/NetVsc.c +++ b/drivers/staging/hv/NetVsc.c @@ -354,7 +354,11 @@ static int NetVscInitializeSendBufferWithNetVsp(struct hv_device *Device) DPRINT_EXIT(NETVSC); return -1; } - ASSERT(netDevice->SendBufferSize > 0); + if (netDevice->SendBufferSize <= 0) { + ret = -EINVAL; + goto Cleanup; + } + /* page-size grandularity */ /* ASSERT((netDevice->SendBufferSize & (PAGE_SIZE - 1)) == 0); */ -- cgit v0.10.2 From e8d5373d664caacce2d7623810c91b43f08eabab Mon Sep 17 00:00:00 2001 From: Bill Pemberton Date: Wed, 5 May 2010 15:27:57 -0400 Subject: staging: hv: remove ASSERT in logging.h ASSERT is no longer used in hv, so remove the define Signed-off-by: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/logging.h b/drivers/staging/hv/logging.h index 9e55617..ad4cfcf 100644 --- a/drivers/staging/hv/logging.h +++ b/drivers/staging/hv/logging.h @@ -61,13 +61,6 @@ extern unsigned int vmbus_loglevel; -#define ASSERT(expr) \ - if (!(expr)) { \ - printk(KERN_CRIT "Assertion failed! %s,%s,%s,line=%d\n", \ - #expr, __FILE__, __func__, __LINE__); \ - __asm__ __volatile__("int3"); \ - } - #define DPRINT(mod, lvl, fmt, args...) do {\ if ((mod & (HIWORD(vmbus_loglevel))) && \ (lvl <= LOWORD(vmbus_loglevel))) \ -- cgit v0.10.2 From e61fbe66cbe10fed6bcc2d07ac802a7386b93673 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 21:04:19 -0700 Subject: Staging: hv: Channel.c: fix up compiler warning In the series of ASSERT removals, somehow we ended up with a compiler warning in Channel.c. This patch fixes that up. Cc: Bill Pemberton Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c index 158f62d8..eab7d16 100644 --- a/drivers/staging/hv/Channel.c +++ b/drivers/staging/hv/Channel.c @@ -376,7 +376,7 @@ static int VmbusChannelCreateGpadlHeader(void *Kbuffer, u32 Size, struct vmbus_channel_gpadl_header *gpaHeader; struct vmbus_channel_gpadl_body *gpadlBody; struct vmbus_channel_msginfo *msgHeader; - struct vmbus_channel_msginfo *msgBody; + struct vmbus_channel_msginfo *msgBody = NULL; u32 msgSize; int pfnSum, pfnCount, pfnLeft, pfnCurr, pfnSize; -- cgit v0.10.2 From 39c4e9c37894feb1525fac4bb75e8c919042473b Mon Sep 17 00:00:00 2001 From: Haiyang Zhang Date: Wed, 5 May 2010 19:23:46 +0000 Subject: Staging: hv: Add Time Sync feature to hv_utils module. The Time Sync feature synchronizes guest time to host UTC time after reboot, and restore from saved/paused state. Signed-off-by: Hank Janssen Signed-off-by: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/ChannelMgmt.c b/drivers/staging/hv/ChannelMgmt.c index 05e6699..3698230 100644 --- a/drivers/staging/hv/ChannelMgmt.c +++ b/drivers/staging/hv/ChannelMgmt.c @@ -33,8 +33,8 @@ struct vmbus_channel_message_table_entry { void (*messageHandler)(struct vmbus_channel_message_header *msg); }; -#define MAX_MSG_TYPES 1 -#define MAX_NUM_DEVICE_CLASSES_SUPPORTED 5 +#define MAX_MSG_TYPES 2 +#define MAX_NUM_DEVICE_CLASSES_SUPPORTED 6 static const struct hv_guid gSupportedDeviceClasses[MAX_NUM_DEVICE_CLASSES_SUPPORTED] = { @@ -81,6 +81,14 @@ static const struct hv_guid 0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB } }, + /* {9527E630-D0AE-497b-ADCE-E80AB0175CAF} */ + /* TimeSync */ + { + .data = { + 0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49, + 0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf + } + }, }; @@ -191,6 +199,18 @@ struct hyperv_service_callback hv_cb_utils[MAX_MSG_TYPES] = { .callback = chn_cb_negotiate, .log_msg = "Shutdown channel functionality initialized" }, + + /* {9527E630-D0AE-497b-ADCE-E80AB0175CAF} */ + /* TimeSync */ + { + .msg_type = HV_TIMESYNC_MSG, + .data = { + 0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49, + 0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf + }, + .callback = chn_cb_negotiate, + .log_msg = "Timesync channel functionality initialized" + }, }; EXPORT_SYMBOL(hv_cb_utils); diff --git a/drivers/staging/hv/hyperv_utils.c b/drivers/staging/hv/hyperv_utils.c index cbebad3..9174f79 100644 --- a/drivers/staging/hv/hyperv_utils.c +++ b/drivers/staging/hv/hyperv_utils.c @@ -106,6 +106,82 @@ static void shutdown_onchannelcallback(void *context) orderly_poweroff(false); } + +/* + * Synchronize time with host after reboot, restore, etc. + */ +static void adj_guesttime(winfiletime_t hosttime, u8 flags) +{ + s64 host_tns; + struct timespec host_ts; + static s32 scnt = 50; + + host_tns = (hosttime - WLTIMEDELTA) * 100; + host_ts = ns_to_timespec(host_tns); + + if ((flags & ICTIMESYNCFLAG_SYNC) != 0) { + do_settimeofday(&host_ts); + return; + } + + if ((flags & ICTIMESYNCFLAG_SAMPLE) != 0 && + scnt > 0) { + scnt--; + do_settimeofday(&host_ts); + } + + return; +} + +/* + * Time Sync Channel message handler. + */ +static void timesync_onchannelcallback(void *context) +{ + struct vmbus_channel *channel = context; + u8 *buf; + u32 buflen, recvlen; + u64 requestid; + struct icmsg_hdr *icmsghdrp; + struct ictimesync_data *timedatap; + + DPRINT_ENTER(VMBUS); + + buflen = PAGE_SIZE; + buf = kmalloc(buflen, GFP_ATOMIC); + + VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); + + if (recvlen > 0) { + DPRINT_DBG(VMBUS, "timesync packet: recvlen=%d, requestid=%lld", + recvlen, requestid); + + icmsghdrp = (struct icmsg_hdr *)&buf[ + sizeof(struct vmbuspipe_hdr)]; + + if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { + prep_negotiate_resp(icmsghdrp, NULL, buf); + } else { + timedatap = (struct ictimesync_data *)&buf[ + sizeof(struct vmbuspipe_hdr) + + sizeof(struct icmsg_hdr)]; + adj_guesttime(timedatap->parenttime, timedatap->flags); + } + + icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION + | ICMSGHDRFLAG_RESPONSE; + + VmbusChannelSendPacket(channel, buf, + recvlen, requestid, + VmbusPacketTypeDataInBand, 0); + } + + kfree(buf); + + DPRINT_EXIT(VMBUS); +} + + static int __init init_hyperv_utils(void) { printk(KERN_INFO "Registering HyperV Utility Driver\n"); @@ -114,6 +190,10 @@ static int __init init_hyperv_utils(void) &shutdown_onchannelcallback; hv_cb_utils[HV_SHUTDOWN_MSG].callback = &shutdown_onchannelcallback; + hv_cb_utils[HV_TIMESYNC_MSG].channel->OnChannelCallback = + ×ync_onchannelcallback; + hv_cb_utils[HV_TIMESYNC_MSG].callback = ×ync_onchannelcallback; + return 0; } @@ -124,6 +204,10 @@ static void exit_hyperv_utils(void) hv_cb_utils[HV_SHUTDOWN_MSG].channel->OnChannelCallback = &chn_cb_negotiate; hv_cb_utils[HV_SHUTDOWN_MSG].callback = &chn_cb_negotiate; + + hv_cb_utils[HV_TIMESYNC_MSG].channel->OnChannelCallback = + &chn_cb_negotiate; + hv_cb_utils[HV_TIMESYNC_MSG].callback = &chn_cb_negotiate; } module_init(init_hyperv_utils); diff --git a/drivers/staging/hv/utils.h b/drivers/staging/hv/utils.h index e404b21..d1d2f28 100644 --- a/drivers/staging/hv/utils.h +++ b/drivers/staging/hv/utils.h @@ -75,7 +75,30 @@ struct shutdown_msg_data { u8 display_message[2048]; } __attribute__((packed)); -#define HV_SHUTDOWN_MSG 0 + +/* Time Sync IC defs */ +#define ICTIMESYNCFLAG_PROBE 0 +#define ICTIMESYNCFLAG_SYNC 1 +#define ICTIMESYNCFLAG_SAMPLE 2 + +#ifdef __x86_64__ +#define WLTIMEDELTA 116444736000000000L /* in 100ns unit */ +#else +#define WLTIMEDELTA 116444736000000000LL +#endif + +typedef u64 winfiletime_t; /* Windows FILETIME type */ + +struct ictimesync_data{ + winfiletime_t parenttime; + winfiletime_t childtime; + winfiletime_t roundtriptime; + u8 flags; +} __attribute__((packed)); + +/* Index for each IC struct in array hv_cb_utils[] */ +#define HV_SHUTDOWN_MSG 0 +#define HV_TIMESYNC_MSG 1 struct hyperv_service_callback { u8 msg_type; -- cgit v0.10.2 From 733371df3db375cb66280911162b9746b0436d68 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:00:45 -0700 Subject: Staging: hv: remove typedef that was just added. It's a u64, so use a u64, it's not some special typedef. Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/hyperv_utils.c b/drivers/staging/hv/hyperv_utils.c index 9174f79..d3fc33e 100644 --- a/drivers/staging/hv/hyperv_utils.c +++ b/drivers/staging/hv/hyperv_utils.c @@ -110,7 +110,7 @@ static void shutdown_onchannelcallback(void *context) /* * Synchronize time with host after reboot, restore, etc. */ -static void adj_guesttime(winfiletime_t hosttime, u8 flags) +static void adj_guesttime(u64 hosttime, u8 flags) { s64 host_tns; struct timespec host_ts; diff --git a/drivers/staging/hv/utils.h b/drivers/staging/hv/utils.h index d1d2f28..ecbeab6 100644 --- a/drivers/staging/hv/utils.h +++ b/drivers/staging/hv/utils.h @@ -87,12 +87,10 @@ struct shutdown_msg_data { #define WLTIMEDELTA 116444736000000000LL #endif -typedef u64 winfiletime_t; /* Windows FILETIME type */ - struct ictimesync_data{ - winfiletime_t parenttime; - winfiletime_t childtime; - winfiletime_t roundtriptime; + u64 parenttime; + u64 childtime; + u64 roundtriptime; u8 flags; } __attribute__((packed)); -- cgit v0.10.2 From 25e2831dc459a45424f1dbdce7556d3ab5bc012d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:03:22 -0700 Subject: Staging: hv: util.h: fix up space mess again Again, use tabs, not spaces, it's not difficult to remember... Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/utils.h b/drivers/staging/hv/utils.h index ecbeab6..a4b9fd0 100644 --- a/drivers/staging/hv/utils.h +++ b/drivers/staging/hv/utils.h @@ -77,26 +77,26 @@ struct shutdown_msg_data { /* Time Sync IC defs */ -#define ICTIMESYNCFLAG_PROBE 0 -#define ICTIMESYNCFLAG_SYNC 1 -#define ICTIMESYNCFLAG_SAMPLE 2 +#define ICTIMESYNCFLAG_PROBE 0 +#define ICTIMESYNCFLAG_SYNC 1 +#define ICTIMESYNCFLAG_SAMPLE 2 #ifdef __x86_64__ -#define WLTIMEDELTA 116444736000000000L /* in 100ns unit */ +#define WLTIMEDELTA 116444736000000000L /* in 100ns unit */ #else -#define WLTIMEDELTA 116444736000000000LL +#define WLTIMEDELTA 116444736000000000LL #endif struct ictimesync_data{ - u64 parenttime; - u64 childtime; - u64 roundtriptime; - u8 flags; + u64 parenttime; + u64 childtime; + u64 roundtriptime; + u8 flags; } __attribute__((packed)); /* Index for each IC struct in array hv_cb_utils[] */ -#define HV_SHUTDOWN_MSG 0 -#define HV_TIMESYNC_MSG 1 +#define HV_SHUTDOWN_MSG 0 +#define HV_TIMESYNC_MSG 1 struct hyperv_service_callback { u8 msg_type; -- cgit v0.10.2 From d2124f293b77355669eaa880e85dd35f56ccab7e Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:10:26 -0700 Subject: Staging: hv: rename hyperv_utils.c to hv_utils.c As the module only has one .c file in it, just name the file the same as the desired module. Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 7a57a88..1ac5083 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -10,4 +10,3 @@ hv_vmbus-objs := vmbus_drv.o osd.o \ hv_storvsc-objs := storvsc_drv.o StorVsc.o hv_blkvsc-objs := blkvsc_drv.o BlkVsc.o hv_netvsc-objs := netvsc_drv.o NetVsc.o RndisFilter.o -hv_utils-objs := hyperv_utils.o diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c new file mode 100644 index 0000000..d3fc33e --- /dev/null +++ b/drivers/staging/hv/hv_utils.c @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2010, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + */ +#include +#include +#include +#include +#include +#include + +#include "logging.h" +#include "osd.h" +#include "vmbus.h" +#include "VmbusPacketFormat.h" +#include "VmbusChannelInterface.h" +#include "VersionInfo.h" +#include "Channel.h" +#include "VmbusPrivate.h" +#include "VmbusApi.h" +#include "utils.h" + + +static void shutdown_onchannelcallback(void *context) +{ + struct vmbus_channel *channel = context; + u8 *buf; + u32 buflen, recvlen; + u64 requestid; + u8 execute_shutdown = false; + + struct shutdown_msg_data *shutdown_msg; + + struct icmsg_hdr *icmsghdrp; + struct icmsg_negotiate *negop = NULL; + + DPRINT_ENTER(VMBUS); + + buflen = PAGE_SIZE; + buf = kmalloc(buflen, GFP_ATOMIC); + + VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); + + if (recvlen > 0) { + DPRINT_DBG(VMBUS, "shutdown packet: len=%d, requestid=%lld", + recvlen, requestid); + + icmsghdrp = (struct icmsg_hdr *)&buf[ + sizeof(struct vmbuspipe_hdr)]; + + if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { + prep_negotiate_resp(icmsghdrp, negop, buf); + } else { + shutdown_msg = (struct shutdown_msg_data *)&buf[ + sizeof(struct vmbuspipe_hdr) + + sizeof(struct icmsg_hdr)]; + + switch (shutdown_msg->flags) { + case 0: + case 1: + icmsghdrp->status = HV_S_OK; + execute_shutdown = true; + + DPRINT_INFO(VMBUS, "Shutdown request received -" + " gracefull shutdown initiated"); + break; + default: + icmsghdrp->status = HV_E_FAIL; + execute_shutdown = false; + + DPRINT_INFO(VMBUS, "Shutdown request received -" + " Invalid request"); + break; + }; + } + + icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION + | ICMSGHDRFLAG_RESPONSE; + + VmbusChannelSendPacket(channel, buf, + recvlen, requestid, + VmbusPacketTypeDataInBand, 0); + } + + kfree(buf); + + DPRINT_EXIT(VMBUS); + + if (execute_shutdown == true) + orderly_poweroff(false); +} + + +/* + * Synchronize time with host after reboot, restore, etc. + */ +static void adj_guesttime(u64 hosttime, u8 flags) +{ + s64 host_tns; + struct timespec host_ts; + static s32 scnt = 50; + + host_tns = (hosttime - WLTIMEDELTA) * 100; + host_ts = ns_to_timespec(host_tns); + + if ((flags & ICTIMESYNCFLAG_SYNC) != 0) { + do_settimeofday(&host_ts); + return; + } + + if ((flags & ICTIMESYNCFLAG_SAMPLE) != 0 && + scnt > 0) { + scnt--; + do_settimeofday(&host_ts); + } + + return; +} + +/* + * Time Sync Channel message handler. + */ +static void timesync_onchannelcallback(void *context) +{ + struct vmbus_channel *channel = context; + u8 *buf; + u32 buflen, recvlen; + u64 requestid; + struct icmsg_hdr *icmsghdrp; + struct ictimesync_data *timedatap; + + DPRINT_ENTER(VMBUS); + + buflen = PAGE_SIZE; + buf = kmalloc(buflen, GFP_ATOMIC); + + VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); + + if (recvlen > 0) { + DPRINT_DBG(VMBUS, "timesync packet: recvlen=%d, requestid=%lld", + recvlen, requestid); + + icmsghdrp = (struct icmsg_hdr *)&buf[ + sizeof(struct vmbuspipe_hdr)]; + + if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { + prep_negotiate_resp(icmsghdrp, NULL, buf); + } else { + timedatap = (struct ictimesync_data *)&buf[ + sizeof(struct vmbuspipe_hdr) + + sizeof(struct icmsg_hdr)]; + adj_guesttime(timedatap->parenttime, timedatap->flags); + } + + icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION + | ICMSGHDRFLAG_RESPONSE; + + VmbusChannelSendPacket(channel, buf, + recvlen, requestid, + VmbusPacketTypeDataInBand, 0); + } + + kfree(buf); + + DPRINT_EXIT(VMBUS); +} + + +static int __init init_hyperv_utils(void) +{ + printk(KERN_INFO "Registering HyperV Utility Driver\n"); + + hv_cb_utils[HV_SHUTDOWN_MSG].channel->OnChannelCallback = + &shutdown_onchannelcallback; + hv_cb_utils[HV_SHUTDOWN_MSG].callback = &shutdown_onchannelcallback; + + hv_cb_utils[HV_TIMESYNC_MSG].channel->OnChannelCallback = + ×ync_onchannelcallback; + hv_cb_utils[HV_TIMESYNC_MSG].callback = ×ync_onchannelcallback; + + return 0; +} + +static void exit_hyperv_utils(void) +{ + printk(KERN_INFO "De-Registered HyperV Utility Driver\n"); + + hv_cb_utils[HV_SHUTDOWN_MSG].channel->OnChannelCallback = + &chn_cb_negotiate; + hv_cb_utils[HV_SHUTDOWN_MSG].callback = &chn_cb_negotiate; + + hv_cb_utils[HV_TIMESYNC_MSG].channel->OnChannelCallback = + &chn_cb_negotiate; + hv_cb_utils[HV_TIMESYNC_MSG].callback = &chn_cb_negotiate; +} + +module_init(init_hyperv_utils); +module_exit(exit_hyperv_utils); + +MODULE_DESCRIPTION("Hyper-V Utilities"); +MODULE_VERSION(HV_DRV_VERSION); +MODULE_LICENSE("GPL"); diff --git a/drivers/staging/hv/hyperv_utils.c b/drivers/staging/hv/hyperv_utils.c deleted file mode 100644 index d3fc33e..0000000 --- a/drivers/staging/hv/hyperv_utils.c +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Copyright (c) 2010, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - */ -#include -#include -#include -#include -#include -#include - -#include "logging.h" -#include "osd.h" -#include "vmbus.h" -#include "VmbusPacketFormat.h" -#include "VmbusChannelInterface.h" -#include "VersionInfo.h" -#include "Channel.h" -#include "VmbusPrivate.h" -#include "VmbusApi.h" -#include "utils.h" - - -static void shutdown_onchannelcallback(void *context) -{ - struct vmbus_channel *channel = context; - u8 *buf; - u32 buflen, recvlen; - u64 requestid; - u8 execute_shutdown = false; - - struct shutdown_msg_data *shutdown_msg; - - struct icmsg_hdr *icmsghdrp; - struct icmsg_negotiate *negop = NULL; - - DPRINT_ENTER(VMBUS); - - buflen = PAGE_SIZE; - buf = kmalloc(buflen, GFP_ATOMIC); - - VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); - - if (recvlen > 0) { - DPRINT_DBG(VMBUS, "shutdown packet: len=%d, requestid=%lld", - recvlen, requestid); - - icmsghdrp = (struct icmsg_hdr *)&buf[ - sizeof(struct vmbuspipe_hdr)]; - - if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { - prep_negotiate_resp(icmsghdrp, negop, buf); - } else { - shutdown_msg = (struct shutdown_msg_data *)&buf[ - sizeof(struct vmbuspipe_hdr) + - sizeof(struct icmsg_hdr)]; - - switch (shutdown_msg->flags) { - case 0: - case 1: - icmsghdrp->status = HV_S_OK; - execute_shutdown = true; - - DPRINT_INFO(VMBUS, "Shutdown request received -" - " gracefull shutdown initiated"); - break; - default: - icmsghdrp->status = HV_E_FAIL; - execute_shutdown = false; - - DPRINT_INFO(VMBUS, "Shutdown request received -" - " Invalid request"); - break; - }; - } - - icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION - | ICMSGHDRFLAG_RESPONSE; - - VmbusChannelSendPacket(channel, buf, - recvlen, requestid, - VmbusPacketTypeDataInBand, 0); - } - - kfree(buf); - - DPRINT_EXIT(VMBUS); - - if (execute_shutdown == true) - orderly_poweroff(false); -} - - -/* - * Synchronize time with host after reboot, restore, etc. - */ -static void adj_guesttime(u64 hosttime, u8 flags) -{ - s64 host_tns; - struct timespec host_ts; - static s32 scnt = 50; - - host_tns = (hosttime - WLTIMEDELTA) * 100; - host_ts = ns_to_timespec(host_tns); - - if ((flags & ICTIMESYNCFLAG_SYNC) != 0) { - do_settimeofday(&host_ts); - return; - } - - if ((flags & ICTIMESYNCFLAG_SAMPLE) != 0 && - scnt > 0) { - scnt--; - do_settimeofday(&host_ts); - } - - return; -} - -/* - * Time Sync Channel message handler. - */ -static void timesync_onchannelcallback(void *context) -{ - struct vmbus_channel *channel = context; - u8 *buf; - u32 buflen, recvlen; - u64 requestid; - struct icmsg_hdr *icmsghdrp; - struct ictimesync_data *timedatap; - - DPRINT_ENTER(VMBUS); - - buflen = PAGE_SIZE; - buf = kmalloc(buflen, GFP_ATOMIC); - - VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); - - if (recvlen > 0) { - DPRINT_DBG(VMBUS, "timesync packet: recvlen=%d, requestid=%lld", - recvlen, requestid); - - icmsghdrp = (struct icmsg_hdr *)&buf[ - sizeof(struct vmbuspipe_hdr)]; - - if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { - prep_negotiate_resp(icmsghdrp, NULL, buf); - } else { - timedatap = (struct ictimesync_data *)&buf[ - sizeof(struct vmbuspipe_hdr) + - sizeof(struct icmsg_hdr)]; - adj_guesttime(timedatap->parenttime, timedatap->flags); - } - - icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION - | ICMSGHDRFLAG_RESPONSE; - - VmbusChannelSendPacket(channel, buf, - recvlen, requestid, - VmbusPacketTypeDataInBand, 0); - } - - kfree(buf); - - DPRINT_EXIT(VMBUS); -} - - -static int __init init_hyperv_utils(void) -{ - printk(KERN_INFO "Registering HyperV Utility Driver\n"); - - hv_cb_utils[HV_SHUTDOWN_MSG].channel->OnChannelCallback = - &shutdown_onchannelcallback; - hv_cb_utils[HV_SHUTDOWN_MSG].callback = &shutdown_onchannelcallback; - - hv_cb_utils[HV_TIMESYNC_MSG].channel->OnChannelCallback = - ×ync_onchannelcallback; - hv_cb_utils[HV_TIMESYNC_MSG].callback = ×ync_onchannelcallback; - - return 0; -} - -static void exit_hyperv_utils(void) -{ - printk(KERN_INFO "De-Registered HyperV Utility Driver\n"); - - hv_cb_utils[HV_SHUTDOWN_MSG].channel->OnChannelCallback = - &chn_cb_negotiate; - hv_cb_utils[HV_SHUTDOWN_MSG].callback = &chn_cb_negotiate; - - hv_cb_utils[HV_TIMESYNC_MSG].channel->OnChannelCallback = - &chn_cb_negotiate; - hv_cb_utils[HV_TIMESYNC_MSG].callback = &chn_cb_negotiate; -} - -module_init(init_hyperv_utils); -module_exit(exit_hyperv_utils); - -MODULE_DESCRIPTION("Hyper-V Utilities"); -MODULE_VERSION(HV_DRV_VERSION); -MODULE_LICENSE("GPL"); -- cgit v0.10.2 From 0d695f2b8fc8d6eaa85bd8317956a8307f9d0920 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:14:22 -0700 Subject: Staging: hv: rename Hv.c to hv.c No CamelCase in file names. Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Hv.c b/drivers/staging/hv/Hv.c deleted file mode 100644 index 2418651..0000000 --- a/drivers/staging/hv/Hv.c +++ /dev/null @@ -1,524 +0,0 @@ -/* - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ -#include -#include -#include -#include -#include "osd.h" -#include "logging.h" -#include "VmbusPrivate.h" - -/* The one and only */ -struct hv_context gHvContext = { - .SynICInitialized = false, - .HypercallPage = NULL, - .SignalEventParam = NULL, - .SignalEventBuffer = NULL, -}; - -/* - * HvQueryHypervisorPresence - Query the cpuid for presense of windows hypervisor - */ -static int HvQueryHypervisorPresence(void) -{ - unsigned int eax; - unsigned int ebx; - unsigned int ecx; - unsigned int edx; - unsigned int op; - - eax = 0; - ebx = 0; - ecx = 0; - edx = 0; - op = HvCpuIdFunctionVersionAndFeatures; - cpuid(op, &eax, &ebx, &ecx, &edx); - - return ecx & HV_PRESENT_BIT; -} - -/* - * HvQueryHypervisorInfo - Get version info of the windows hypervisor - */ -static int HvQueryHypervisorInfo(void) -{ - unsigned int eax; - unsigned int ebx; - unsigned int ecx; - unsigned int edx; - unsigned int maxLeaf; - unsigned int op; - - /* - * Its assumed that this is called after confirming that Viridian - * is present. Query id and revision. - */ - eax = 0; - ebx = 0; - ecx = 0; - edx = 0; - op = HvCpuIdFunctionHvVendorAndMaxFunction; - cpuid(op, &eax, &ebx, &ecx, &edx); - - DPRINT_INFO(VMBUS, "Vendor ID: %c%c%c%c%c%c%c%c%c%c%c%c", - (ebx & 0xFF), - ((ebx >> 8) & 0xFF), - ((ebx >> 16) & 0xFF), - ((ebx >> 24) & 0xFF), - (ecx & 0xFF), - ((ecx >> 8) & 0xFF), - ((ecx >> 16) & 0xFF), - ((ecx >> 24) & 0xFF), - (edx & 0xFF), - ((edx >> 8) & 0xFF), - ((edx >> 16) & 0xFF), - ((edx >> 24) & 0xFF)); - - maxLeaf = eax; - eax = 0; - ebx = 0; - ecx = 0; - edx = 0; - op = HvCpuIdFunctionHvInterface; - cpuid(op, &eax, &ebx, &ecx, &edx); - - DPRINT_INFO(VMBUS, "Interface ID: %c%c%c%c", - (eax & 0xFF), - ((eax >> 8) & 0xFF), - ((eax >> 16) & 0xFF), - ((eax >> 24) & 0xFF)); - - if (maxLeaf >= HvCpuIdFunctionMsHvVersion) { - eax = 0; - ebx = 0; - ecx = 0; - edx = 0; - op = HvCpuIdFunctionMsHvVersion; - cpuid(op, &eax, &ebx, &ecx, &edx); - DPRINT_INFO(VMBUS, "OS Build:%d-%d.%d-%d-%d.%d",\ - eax, - ebx >> 16, - ebx & 0xFFFF, - ecx, - edx >> 24, - edx & 0xFFFFFF); - } - return maxLeaf; -} - -/* - * HvDoHypercall - Invoke the specified hypercall - */ -static u64 HvDoHypercall(u64 Control, void *Input, void *Output) -{ -#ifdef CONFIG_X86_64 - u64 hvStatus = 0; - u64 inputAddress = (Input) ? virt_to_phys(Input) : 0; - u64 outputAddress = (Output) ? virt_to_phys(Output) : 0; - volatile void *hypercallPage = gHvContext.HypercallPage; - - DPRINT_DBG(VMBUS, "Hypercall ", - Control, inputAddress, Input, - outputAddress, Output, hypercallPage); - - __asm__ __volatile__("mov %0, %%r8" : : "r" (outputAddress) : "r8"); - __asm__ __volatile__("call *%3" : "=a" (hvStatus) : - "c" (Control), "d" (inputAddress), - "m" (hypercallPage)); - - DPRINT_DBG(VMBUS, "Hypercall ", hvStatus); - - return hvStatus; - -#else - - u32 controlHi = Control >> 32; - u32 controlLo = Control & 0xFFFFFFFF; - u32 hvStatusHi = 1; - u32 hvStatusLo = 1; - u64 inputAddress = (Input) ? virt_to_phys(Input) : 0; - u32 inputAddressHi = inputAddress >> 32; - u32 inputAddressLo = inputAddress & 0xFFFFFFFF; - u64 outputAddress = (Output) ? virt_to_phys(Output) : 0; - u32 outputAddressHi = outputAddress >> 32; - u32 outputAddressLo = outputAddress & 0xFFFFFFFF; - volatile void *hypercallPage = gHvContext.HypercallPage; - - DPRINT_DBG(VMBUS, "Hypercall ", - Control, Input, Output); - - __asm__ __volatile__ ("call *%8" : "=d"(hvStatusHi), - "=a"(hvStatusLo) : "d" (controlHi), - "a" (controlLo), "b" (inputAddressHi), - "c" (inputAddressLo), "D"(outputAddressHi), - "S"(outputAddressLo), "m" (hypercallPage)); - - DPRINT_DBG(VMBUS, "Hypercall ", - hvStatusLo | ((u64)hvStatusHi << 32)); - - return hvStatusLo | ((u64)hvStatusHi << 32); -#endif /* !x86_64 */ -} - -/* - * HvInit - Main initialization routine. - * - * This routine must be called before any other routines in here are called - */ -int HvInit(void) -{ - int ret = 0; - int maxLeaf; - union hv_x64_msr_hypercall_contents hypercallMsr; - void *virtAddr = NULL; - - DPRINT_ENTER(VMBUS); - - memset(gHvContext.synICEventPage, 0, sizeof(void *) * MAX_NUM_CPUS); - memset(gHvContext.synICMessagePage, 0, sizeof(void *) * MAX_NUM_CPUS); - - if (!HvQueryHypervisorPresence()) { - DPRINT_ERR(VMBUS, "No Windows hypervisor detected!!"); - goto Cleanup; - } - - DPRINT_INFO(VMBUS, - "Windows hypervisor detected! Retrieving more info..."); - - maxLeaf = HvQueryHypervisorInfo(); - /* HvQueryHypervisorFeatures(maxLeaf); */ - - /* - * We only support running on top of Hyper-V - */ - rdmsrl(HV_X64_MSR_GUEST_OS_ID, gHvContext.GuestId); - - if (gHvContext.GuestId != 0) { - DPRINT_ERR(VMBUS, "Unknown guest id (0x%llx)!!", - gHvContext.GuestId); - goto Cleanup; - } - - /* Write our OS info */ - wrmsrl(HV_X64_MSR_GUEST_OS_ID, HV_LINUX_GUEST_ID); - gHvContext.GuestId = HV_LINUX_GUEST_ID; - - /* See if the hypercall page is already set */ - rdmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); - - /* - * Allocate the hypercall page memory - * virtAddr = osd_PageAlloc(1); - */ - virtAddr = osd_VirtualAllocExec(PAGE_SIZE); - - if (!virtAddr) { - DPRINT_ERR(VMBUS, - "unable to allocate hypercall page!!"); - goto Cleanup; - } - - hypercallMsr.Enable = 1; - - hypercallMsr.GuestPhysicalAddress = vmalloc_to_pfn(virtAddr); - wrmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); - - /* Confirm that hypercall page did get setup. */ - hypercallMsr.AsUINT64 = 0; - rdmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); - - if (!hypercallMsr.Enable) { - DPRINT_ERR(VMBUS, "unable to set hypercall page!!"); - goto Cleanup; - } - - gHvContext.HypercallPage = virtAddr; - - DPRINT_INFO(VMBUS, "Hypercall page VA=%p, PA=0x%0llx", - gHvContext.HypercallPage, - (u64)hypercallMsr.GuestPhysicalAddress << PAGE_SHIFT); - - /* Setup the global signal event param for the signal event hypercall */ - gHvContext.SignalEventBuffer = - kmalloc(sizeof(struct hv_input_signal_event_buffer), - GFP_KERNEL); - if (!gHvContext.SignalEventBuffer) - goto Cleanup; - - gHvContext.SignalEventParam = - (struct hv_input_signal_event *) - (ALIGN_UP((unsigned long)gHvContext.SignalEventBuffer, - HV_HYPERCALL_PARAM_ALIGN)); - gHvContext.SignalEventParam->ConnectionId.Asu32 = 0; - gHvContext.SignalEventParam->ConnectionId.u.Id = - VMBUS_EVENT_CONNECTION_ID; - gHvContext.SignalEventParam->FlagNumber = 0; - gHvContext.SignalEventParam->RsvdZ = 0; - - DPRINT_EXIT(VMBUS); - - return ret; - -Cleanup: - if (virtAddr) { - if (hypercallMsr.Enable) { - hypercallMsr.AsUINT64 = 0; - wrmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); - } - - vfree(virtAddr); - } - ret = -1; - DPRINT_EXIT(VMBUS); - - return ret; -} - -/* - * HvCleanup - Cleanup routine. - * - * This routine is called normally during driver unloading or exiting. - */ -void HvCleanup(void) -{ - union hv_x64_msr_hypercall_contents hypercallMsr; - - DPRINT_ENTER(VMBUS); - - kfree(gHvContext.SignalEventBuffer); - gHvContext.SignalEventBuffer = NULL; - gHvContext.SignalEventParam = NULL; - - if (gHvContext.HypercallPage) { - hypercallMsr.AsUINT64 = 0; - wrmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); - vfree(gHvContext.HypercallPage); - gHvContext.HypercallPage = NULL; - } - - DPRINT_EXIT(VMBUS); -} - -/* - * HvPostMessage - Post a message using the hypervisor message IPC. - * - * This involves a hypercall. - */ -u16 HvPostMessage(union hv_connection_id connectionId, - enum hv_message_type messageType, - void *payload, size_t payloadSize) -{ - struct alignedInput { - u64 alignment8; - struct hv_input_post_message msg; - }; - - struct hv_input_post_message *alignedMsg; - u16 status; - unsigned long addr; - - if (payloadSize > HV_MESSAGE_PAYLOAD_BYTE_COUNT) - return -1; - - addr = (unsigned long)kmalloc(sizeof(struct alignedInput), GFP_ATOMIC); - if (!addr) - return -1; - - alignedMsg = (struct hv_input_post_message *) - (ALIGN_UP(addr, HV_HYPERCALL_PARAM_ALIGN)); - - alignedMsg->ConnectionId = connectionId; - alignedMsg->MessageType = messageType; - alignedMsg->PayloadSize = payloadSize; - memcpy((void *)alignedMsg->Payload, payload, payloadSize); - - status = HvDoHypercall(HvCallPostMessage, alignedMsg, NULL) & 0xFFFF; - - kfree((void *)addr); - - return status; -} - - -/* - * HvSignalEvent - Signal an event on the specified connection using the hypervisor event IPC. - * - * This involves a hypercall. - */ -u16 HvSignalEvent(void) -{ - u16 status; - - status = HvDoHypercall(HvCallSignalEvent, gHvContext.SignalEventParam, - NULL) & 0xFFFF; - return status; -} - -/* - * HvSynicInit - Initialize the Synthethic Interrupt Controller. - * - * If it is already initialized by another entity (ie x2v shim), we need to - * retrieve the initialized message and event pages. Otherwise, we create and - * initialize the message and event pages. - */ -void HvSynicInit(void *irqarg) -{ - u64 version; - union hv_synic_simp simp; - union hv_synic_siefp siefp; - union hv_synic_sint sharedSint; - union hv_synic_scontrol sctrl; - - u32 irqVector = *((u32 *)(irqarg)); - int cpu = smp_processor_id(); - - DPRINT_ENTER(VMBUS); - - if (!gHvContext.HypercallPage) { - DPRINT_EXIT(VMBUS); - return; - } - - /* Check the version */ - rdmsrl(HV_X64_MSR_SVERSION, version); - - DPRINT_INFO(VMBUS, "SynIC version: %llx", version); - - gHvContext.synICMessagePage[cpu] = (void *)get_zeroed_page(GFP_ATOMIC); - - if (gHvContext.synICMessagePage[cpu] == NULL) { - DPRINT_ERR(VMBUS, - "unable to allocate SYNIC message page!!"); - goto Cleanup; - } - - gHvContext.synICEventPage[cpu] = (void *)get_zeroed_page(GFP_ATOMIC); - - if (gHvContext.synICEventPage[cpu] == NULL) { - DPRINT_ERR(VMBUS, - "unable to allocate SYNIC event page!!"); - goto Cleanup; - } - - /* Setup the Synic's message page */ - rdmsrl(HV_X64_MSR_SIMP, simp.AsUINT64); - simp.SimpEnabled = 1; - simp.BaseSimpGpa = virt_to_phys(gHvContext.synICMessagePage[cpu]) - >> PAGE_SHIFT; - - DPRINT_DBG(VMBUS, "HV_X64_MSR_SIMP msr set to: %llx", simp.AsUINT64); - - wrmsrl(HV_X64_MSR_SIMP, simp.AsUINT64); - - /* Setup the Synic's event page */ - rdmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); - siefp.SiefpEnabled = 1; - siefp.BaseSiefpGpa = virt_to_phys(gHvContext.synICEventPage[cpu]) - >> PAGE_SHIFT; - - DPRINT_DBG(VMBUS, "HV_X64_MSR_SIEFP msr set to: %llx", siefp.AsUINT64); - - wrmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); - - /* Setup the interception SINT. */ - /* wrmsrl((HV_X64_MSR_SINT0 + HV_SYNIC_INTERCEPTION_SINT_INDEX), */ - /* interceptionSint.AsUINT64); */ - - /* Setup the shared SINT. */ - rdmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, sharedSint.AsUINT64); - - sharedSint.AsUINT64 = 0; - sharedSint.Vector = irqVector; /* HV_SHARED_SINT_IDT_VECTOR + 0x20; */ - sharedSint.Masked = false; - sharedSint.AutoEoi = true; - - DPRINT_DBG(VMBUS, "HV_X64_MSR_SINT1 msr set to: %llx", - sharedSint.AsUINT64); - - wrmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, sharedSint.AsUINT64); - - /* Enable the global synic bit */ - rdmsrl(HV_X64_MSR_SCONTROL, sctrl.AsUINT64); - sctrl.Enable = 1; - - wrmsrl(HV_X64_MSR_SCONTROL, sctrl.AsUINT64); - - gHvContext.SynICInitialized = true; - - DPRINT_EXIT(VMBUS); - - return; - -Cleanup: - if (gHvContext.synICEventPage[cpu]) - osd_PageFree(gHvContext.synICEventPage[cpu], 1); - - if (gHvContext.synICMessagePage[cpu]) - osd_PageFree(gHvContext.synICMessagePage[cpu], 1); - - DPRINT_EXIT(VMBUS); - return; -} - -/* - * HvSynicCleanup - Cleanup routine for HvSynicInit(). - */ -void HvSynicCleanup(void *arg) -{ - union hv_synic_sint sharedSint; - union hv_synic_simp simp; - union hv_synic_siefp siefp; - int cpu = smp_processor_id(); - - DPRINT_ENTER(VMBUS); - - if (!gHvContext.SynICInitialized) { - DPRINT_EXIT(VMBUS); - return; - } - - rdmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, sharedSint.AsUINT64); - - sharedSint.Masked = 1; - - /* Need to correctly cleanup in the case of SMP!!! */ - /* Disable the interrupt */ - wrmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, sharedSint.AsUINT64); - - rdmsrl(HV_X64_MSR_SIMP, simp.AsUINT64); - simp.SimpEnabled = 0; - simp.BaseSimpGpa = 0; - - wrmsrl(HV_X64_MSR_SIMP, simp.AsUINT64); - - rdmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); - siefp.SiefpEnabled = 0; - siefp.BaseSiefpGpa = 0; - - wrmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); - - osd_PageFree(gHvContext.synICMessagePage[cpu], 1); - osd_PageFree(gHvContext.synICEventPage[cpu], 1); - - DPRINT_EXIT(VMBUS); -} diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 1ac5083..42c5069 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -5,7 +5,7 @@ obj-$(CONFIG_HYPERV_NET) += hv_netvsc.o obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o hv_vmbus-objs := vmbus_drv.o osd.o \ - Vmbus.o Hv.o Connection.o Channel.o \ + Vmbus.o hv.o Connection.o Channel.o \ ChannelMgmt.o ChannelInterface.o RingBuffer.o hv_storvsc-objs := storvsc_drv.o StorVsc.o hv_blkvsc-objs := blkvsc_drv.o BlkVsc.o diff --git a/drivers/staging/hv/hv.c b/drivers/staging/hv/hv.c new file mode 100644 index 0000000..2418651 --- /dev/null +++ b/drivers/staging/hv/hv.c @@ -0,0 +1,524 @@ +/* + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ +#include +#include +#include +#include +#include "osd.h" +#include "logging.h" +#include "VmbusPrivate.h" + +/* The one and only */ +struct hv_context gHvContext = { + .SynICInitialized = false, + .HypercallPage = NULL, + .SignalEventParam = NULL, + .SignalEventBuffer = NULL, +}; + +/* + * HvQueryHypervisorPresence - Query the cpuid for presense of windows hypervisor + */ +static int HvQueryHypervisorPresence(void) +{ + unsigned int eax; + unsigned int ebx; + unsigned int ecx; + unsigned int edx; + unsigned int op; + + eax = 0; + ebx = 0; + ecx = 0; + edx = 0; + op = HvCpuIdFunctionVersionAndFeatures; + cpuid(op, &eax, &ebx, &ecx, &edx); + + return ecx & HV_PRESENT_BIT; +} + +/* + * HvQueryHypervisorInfo - Get version info of the windows hypervisor + */ +static int HvQueryHypervisorInfo(void) +{ + unsigned int eax; + unsigned int ebx; + unsigned int ecx; + unsigned int edx; + unsigned int maxLeaf; + unsigned int op; + + /* + * Its assumed that this is called after confirming that Viridian + * is present. Query id and revision. + */ + eax = 0; + ebx = 0; + ecx = 0; + edx = 0; + op = HvCpuIdFunctionHvVendorAndMaxFunction; + cpuid(op, &eax, &ebx, &ecx, &edx); + + DPRINT_INFO(VMBUS, "Vendor ID: %c%c%c%c%c%c%c%c%c%c%c%c", + (ebx & 0xFF), + ((ebx >> 8) & 0xFF), + ((ebx >> 16) & 0xFF), + ((ebx >> 24) & 0xFF), + (ecx & 0xFF), + ((ecx >> 8) & 0xFF), + ((ecx >> 16) & 0xFF), + ((ecx >> 24) & 0xFF), + (edx & 0xFF), + ((edx >> 8) & 0xFF), + ((edx >> 16) & 0xFF), + ((edx >> 24) & 0xFF)); + + maxLeaf = eax; + eax = 0; + ebx = 0; + ecx = 0; + edx = 0; + op = HvCpuIdFunctionHvInterface; + cpuid(op, &eax, &ebx, &ecx, &edx); + + DPRINT_INFO(VMBUS, "Interface ID: %c%c%c%c", + (eax & 0xFF), + ((eax >> 8) & 0xFF), + ((eax >> 16) & 0xFF), + ((eax >> 24) & 0xFF)); + + if (maxLeaf >= HvCpuIdFunctionMsHvVersion) { + eax = 0; + ebx = 0; + ecx = 0; + edx = 0; + op = HvCpuIdFunctionMsHvVersion; + cpuid(op, &eax, &ebx, &ecx, &edx); + DPRINT_INFO(VMBUS, "OS Build:%d-%d.%d-%d-%d.%d",\ + eax, + ebx >> 16, + ebx & 0xFFFF, + ecx, + edx >> 24, + edx & 0xFFFFFF); + } + return maxLeaf; +} + +/* + * HvDoHypercall - Invoke the specified hypercall + */ +static u64 HvDoHypercall(u64 Control, void *Input, void *Output) +{ +#ifdef CONFIG_X86_64 + u64 hvStatus = 0; + u64 inputAddress = (Input) ? virt_to_phys(Input) : 0; + u64 outputAddress = (Output) ? virt_to_phys(Output) : 0; + volatile void *hypercallPage = gHvContext.HypercallPage; + + DPRINT_DBG(VMBUS, "Hypercall ", + Control, inputAddress, Input, + outputAddress, Output, hypercallPage); + + __asm__ __volatile__("mov %0, %%r8" : : "r" (outputAddress) : "r8"); + __asm__ __volatile__("call *%3" : "=a" (hvStatus) : + "c" (Control), "d" (inputAddress), + "m" (hypercallPage)); + + DPRINT_DBG(VMBUS, "Hypercall ", hvStatus); + + return hvStatus; + +#else + + u32 controlHi = Control >> 32; + u32 controlLo = Control & 0xFFFFFFFF; + u32 hvStatusHi = 1; + u32 hvStatusLo = 1; + u64 inputAddress = (Input) ? virt_to_phys(Input) : 0; + u32 inputAddressHi = inputAddress >> 32; + u32 inputAddressLo = inputAddress & 0xFFFFFFFF; + u64 outputAddress = (Output) ? virt_to_phys(Output) : 0; + u32 outputAddressHi = outputAddress >> 32; + u32 outputAddressLo = outputAddress & 0xFFFFFFFF; + volatile void *hypercallPage = gHvContext.HypercallPage; + + DPRINT_DBG(VMBUS, "Hypercall ", + Control, Input, Output); + + __asm__ __volatile__ ("call *%8" : "=d"(hvStatusHi), + "=a"(hvStatusLo) : "d" (controlHi), + "a" (controlLo), "b" (inputAddressHi), + "c" (inputAddressLo), "D"(outputAddressHi), + "S"(outputAddressLo), "m" (hypercallPage)); + + DPRINT_DBG(VMBUS, "Hypercall ", + hvStatusLo | ((u64)hvStatusHi << 32)); + + return hvStatusLo | ((u64)hvStatusHi << 32); +#endif /* !x86_64 */ +} + +/* + * HvInit - Main initialization routine. + * + * This routine must be called before any other routines in here are called + */ +int HvInit(void) +{ + int ret = 0; + int maxLeaf; + union hv_x64_msr_hypercall_contents hypercallMsr; + void *virtAddr = NULL; + + DPRINT_ENTER(VMBUS); + + memset(gHvContext.synICEventPage, 0, sizeof(void *) * MAX_NUM_CPUS); + memset(gHvContext.synICMessagePage, 0, sizeof(void *) * MAX_NUM_CPUS); + + if (!HvQueryHypervisorPresence()) { + DPRINT_ERR(VMBUS, "No Windows hypervisor detected!!"); + goto Cleanup; + } + + DPRINT_INFO(VMBUS, + "Windows hypervisor detected! Retrieving more info..."); + + maxLeaf = HvQueryHypervisorInfo(); + /* HvQueryHypervisorFeatures(maxLeaf); */ + + /* + * We only support running on top of Hyper-V + */ + rdmsrl(HV_X64_MSR_GUEST_OS_ID, gHvContext.GuestId); + + if (gHvContext.GuestId != 0) { + DPRINT_ERR(VMBUS, "Unknown guest id (0x%llx)!!", + gHvContext.GuestId); + goto Cleanup; + } + + /* Write our OS info */ + wrmsrl(HV_X64_MSR_GUEST_OS_ID, HV_LINUX_GUEST_ID); + gHvContext.GuestId = HV_LINUX_GUEST_ID; + + /* See if the hypercall page is already set */ + rdmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); + + /* + * Allocate the hypercall page memory + * virtAddr = osd_PageAlloc(1); + */ + virtAddr = osd_VirtualAllocExec(PAGE_SIZE); + + if (!virtAddr) { + DPRINT_ERR(VMBUS, + "unable to allocate hypercall page!!"); + goto Cleanup; + } + + hypercallMsr.Enable = 1; + + hypercallMsr.GuestPhysicalAddress = vmalloc_to_pfn(virtAddr); + wrmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); + + /* Confirm that hypercall page did get setup. */ + hypercallMsr.AsUINT64 = 0; + rdmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); + + if (!hypercallMsr.Enable) { + DPRINT_ERR(VMBUS, "unable to set hypercall page!!"); + goto Cleanup; + } + + gHvContext.HypercallPage = virtAddr; + + DPRINT_INFO(VMBUS, "Hypercall page VA=%p, PA=0x%0llx", + gHvContext.HypercallPage, + (u64)hypercallMsr.GuestPhysicalAddress << PAGE_SHIFT); + + /* Setup the global signal event param for the signal event hypercall */ + gHvContext.SignalEventBuffer = + kmalloc(sizeof(struct hv_input_signal_event_buffer), + GFP_KERNEL); + if (!gHvContext.SignalEventBuffer) + goto Cleanup; + + gHvContext.SignalEventParam = + (struct hv_input_signal_event *) + (ALIGN_UP((unsigned long)gHvContext.SignalEventBuffer, + HV_HYPERCALL_PARAM_ALIGN)); + gHvContext.SignalEventParam->ConnectionId.Asu32 = 0; + gHvContext.SignalEventParam->ConnectionId.u.Id = + VMBUS_EVENT_CONNECTION_ID; + gHvContext.SignalEventParam->FlagNumber = 0; + gHvContext.SignalEventParam->RsvdZ = 0; + + DPRINT_EXIT(VMBUS); + + return ret; + +Cleanup: + if (virtAddr) { + if (hypercallMsr.Enable) { + hypercallMsr.AsUINT64 = 0; + wrmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); + } + + vfree(virtAddr); + } + ret = -1; + DPRINT_EXIT(VMBUS); + + return ret; +} + +/* + * HvCleanup - Cleanup routine. + * + * This routine is called normally during driver unloading or exiting. + */ +void HvCleanup(void) +{ + union hv_x64_msr_hypercall_contents hypercallMsr; + + DPRINT_ENTER(VMBUS); + + kfree(gHvContext.SignalEventBuffer); + gHvContext.SignalEventBuffer = NULL; + gHvContext.SignalEventParam = NULL; + + if (gHvContext.HypercallPage) { + hypercallMsr.AsUINT64 = 0; + wrmsrl(HV_X64_MSR_HYPERCALL, hypercallMsr.AsUINT64); + vfree(gHvContext.HypercallPage); + gHvContext.HypercallPage = NULL; + } + + DPRINT_EXIT(VMBUS); +} + +/* + * HvPostMessage - Post a message using the hypervisor message IPC. + * + * This involves a hypercall. + */ +u16 HvPostMessage(union hv_connection_id connectionId, + enum hv_message_type messageType, + void *payload, size_t payloadSize) +{ + struct alignedInput { + u64 alignment8; + struct hv_input_post_message msg; + }; + + struct hv_input_post_message *alignedMsg; + u16 status; + unsigned long addr; + + if (payloadSize > HV_MESSAGE_PAYLOAD_BYTE_COUNT) + return -1; + + addr = (unsigned long)kmalloc(sizeof(struct alignedInput), GFP_ATOMIC); + if (!addr) + return -1; + + alignedMsg = (struct hv_input_post_message *) + (ALIGN_UP(addr, HV_HYPERCALL_PARAM_ALIGN)); + + alignedMsg->ConnectionId = connectionId; + alignedMsg->MessageType = messageType; + alignedMsg->PayloadSize = payloadSize; + memcpy((void *)alignedMsg->Payload, payload, payloadSize); + + status = HvDoHypercall(HvCallPostMessage, alignedMsg, NULL) & 0xFFFF; + + kfree((void *)addr); + + return status; +} + + +/* + * HvSignalEvent - Signal an event on the specified connection using the hypervisor event IPC. + * + * This involves a hypercall. + */ +u16 HvSignalEvent(void) +{ + u16 status; + + status = HvDoHypercall(HvCallSignalEvent, gHvContext.SignalEventParam, + NULL) & 0xFFFF; + return status; +} + +/* + * HvSynicInit - Initialize the Synthethic Interrupt Controller. + * + * If it is already initialized by another entity (ie x2v shim), we need to + * retrieve the initialized message and event pages. Otherwise, we create and + * initialize the message and event pages. + */ +void HvSynicInit(void *irqarg) +{ + u64 version; + union hv_synic_simp simp; + union hv_synic_siefp siefp; + union hv_synic_sint sharedSint; + union hv_synic_scontrol sctrl; + + u32 irqVector = *((u32 *)(irqarg)); + int cpu = smp_processor_id(); + + DPRINT_ENTER(VMBUS); + + if (!gHvContext.HypercallPage) { + DPRINT_EXIT(VMBUS); + return; + } + + /* Check the version */ + rdmsrl(HV_X64_MSR_SVERSION, version); + + DPRINT_INFO(VMBUS, "SynIC version: %llx", version); + + gHvContext.synICMessagePage[cpu] = (void *)get_zeroed_page(GFP_ATOMIC); + + if (gHvContext.synICMessagePage[cpu] == NULL) { + DPRINT_ERR(VMBUS, + "unable to allocate SYNIC message page!!"); + goto Cleanup; + } + + gHvContext.synICEventPage[cpu] = (void *)get_zeroed_page(GFP_ATOMIC); + + if (gHvContext.synICEventPage[cpu] == NULL) { + DPRINT_ERR(VMBUS, + "unable to allocate SYNIC event page!!"); + goto Cleanup; + } + + /* Setup the Synic's message page */ + rdmsrl(HV_X64_MSR_SIMP, simp.AsUINT64); + simp.SimpEnabled = 1; + simp.BaseSimpGpa = virt_to_phys(gHvContext.synICMessagePage[cpu]) + >> PAGE_SHIFT; + + DPRINT_DBG(VMBUS, "HV_X64_MSR_SIMP msr set to: %llx", simp.AsUINT64); + + wrmsrl(HV_X64_MSR_SIMP, simp.AsUINT64); + + /* Setup the Synic's event page */ + rdmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); + siefp.SiefpEnabled = 1; + siefp.BaseSiefpGpa = virt_to_phys(gHvContext.synICEventPage[cpu]) + >> PAGE_SHIFT; + + DPRINT_DBG(VMBUS, "HV_X64_MSR_SIEFP msr set to: %llx", siefp.AsUINT64); + + wrmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); + + /* Setup the interception SINT. */ + /* wrmsrl((HV_X64_MSR_SINT0 + HV_SYNIC_INTERCEPTION_SINT_INDEX), */ + /* interceptionSint.AsUINT64); */ + + /* Setup the shared SINT. */ + rdmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, sharedSint.AsUINT64); + + sharedSint.AsUINT64 = 0; + sharedSint.Vector = irqVector; /* HV_SHARED_SINT_IDT_VECTOR + 0x20; */ + sharedSint.Masked = false; + sharedSint.AutoEoi = true; + + DPRINT_DBG(VMBUS, "HV_X64_MSR_SINT1 msr set to: %llx", + sharedSint.AsUINT64); + + wrmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, sharedSint.AsUINT64); + + /* Enable the global synic bit */ + rdmsrl(HV_X64_MSR_SCONTROL, sctrl.AsUINT64); + sctrl.Enable = 1; + + wrmsrl(HV_X64_MSR_SCONTROL, sctrl.AsUINT64); + + gHvContext.SynICInitialized = true; + + DPRINT_EXIT(VMBUS); + + return; + +Cleanup: + if (gHvContext.synICEventPage[cpu]) + osd_PageFree(gHvContext.synICEventPage[cpu], 1); + + if (gHvContext.synICMessagePage[cpu]) + osd_PageFree(gHvContext.synICMessagePage[cpu], 1); + + DPRINT_EXIT(VMBUS); + return; +} + +/* + * HvSynicCleanup - Cleanup routine for HvSynicInit(). + */ +void HvSynicCleanup(void *arg) +{ + union hv_synic_sint sharedSint; + union hv_synic_simp simp; + union hv_synic_siefp siefp; + int cpu = smp_processor_id(); + + DPRINT_ENTER(VMBUS); + + if (!gHvContext.SynICInitialized) { + DPRINT_EXIT(VMBUS); + return; + } + + rdmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, sharedSint.AsUINT64); + + sharedSint.Masked = 1; + + /* Need to correctly cleanup in the case of SMP!!! */ + /* Disable the interrupt */ + wrmsrl(HV_X64_MSR_SINT0 + VMBUS_MESSAGE_SINT, sharedSint.AsUINT64); + + rdmsrl(HV_X64_MSR_SIMP, simp.AsUINT64); + simp.SimpEnabled = 0; + simp.BaseSimpGpa = 0; + + wrmsrl(HV_X64_MSR_SIMP, simp.AsUINT64); + + rdmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); + siefp.SiefpEnabled = 0; + siefp.BaseSiefpGpa = 0; + + wrmsrl(HV_X64_MSR_SIEFP, siefp.AsUINT64); + + osd_PageFree(gHvContext.synICMessagePage[cpu], 1); + osd_PageFree(gHvContext.synICEventPage[cpu], 1); + + DPRINT_EXIT(VMBUS); +} -- cgit v0.10.2 From 7e8ad49f131cf9bf16b6e68237674e8f7c8dc6ca Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:16:10 -0700 Subject: Staging: hv: rename Hv.h to hv.h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Hv.h b/drivers/staging/hv/Hv.h deleted file mode 100644 index 41f5ebb..0000000 --- a/drivers/staging/hv/Hv.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef __HV_H__ -#define __HV_H__ - -#include "hv_api.h" - -enum { - VMBUS_MESSAGE_CONNECTION_ID = 1, - VMBUS_MESSAGE_PORT_ID = 1, - VMBUS_EVENT_CONNECTION_ID = 2, - VMBUS_EVENT_PORT_ID = 2, - VMBUS_MONITOR_CONNECTION_ID = 3, - VMBUS_MONITOR_PORT_ID = 3, - VMBUS_MESSAGE_SINT = 2, -}; - -/* #defines */ - -#define HV_PRESENT_BIT 0x80000000 - -#define HV_LINUX_GUEST_ID_LO 0x00000000 -#define HV_LINUX_GUEST_ID_HI 0xB16B00B5 -#define HV_LINUX_GUEST_ID (((u64)HV_LINUX_GUEST_ID_HI << 32) | \ - HV_LINUX_GUEST_ID_LO) - -#define HV_CPU_POWER_MANAGEMENT (1 << 0) -#define HV_RECOMMENDATIONS_MAX 4 - -#define HV_X64_MAX 5 -#define HV_CAPS_MAX 8 - - -#define HV_HYPERCALL_PARAM_ALIGN sizeof(u64) - - -/* Service definitions */ - -#define HV_SERVICE_PARENT_PORT (0) -#define HV_SERVICE_PARENT_CONNECTION (0) - -#define HV_SERVICE_CONNECT_RESPONSE_SUCCESS (0) -#define HV_SERVICE_CONNECT_RESPONSE_INVALID_PARAMETER (1) -#define HV_SERVICE_CONNECT_RESPONSE_UNKNOWN_SERVICE (2) -#define HV_SERVICE_CONNECT_RESPONSE_CONNECTION_REJECTED (3) - -#define HV_SERVICE_CONNECT_REQUEST_MESSAGE_ID (1) -#define HV_SERVICE_CONNECT_RESPONSE_MESSAGE_ID (2) -#define HV_SERVICE_DISCONNECT_REQUEST_MESSAGE_ID (3) -#define HV_SERVICE_DISCONNECT_RESPONSE_MESSAGE_ID (4) -#define HV_SERVICE_MAX_MESSAGE_ID (4) - -#define HV_SERVICE_PROTOCOL_VERSION (0x0010) -#define HV_CONNECT_PAYLOAD_BYTE_COUNT 64 - -/* #define VMBUS_REVISION_NUMBER 6 */ - -/* Our local vmbus's port and connection id. Anything >0 is fine */ -/* #define VMBUS_PORT_ID 11 */ - -/* 628180B8-308D-4c5e-B7DB-1BEB62E62EF4 */ -static const struct hv_guid VMBUS_SERVICE_ID = { - .data = { - 0xb8, 0x80, 0x81, 0x62, 0x8d, 0x30, 0x5e, 0x4c, - 0xb7, 0xdb, 0x1b, 0xeb, 0x62, 0xe6, 0x2e, 0xf4 - }, -}; - -#define MAX_NUM_CPUS 32 - - -struct hv_input_signal_event_buffer { - u64 Align8; - struct hv_input_signal_event Event; -}; - -struct hv_context { - /* We only support running on top of Hyper-V - * So at this point this really can only contain the Hyper-V ID - */ - u64 GuestId; - - void *HypercallPage; - - bool SynICInitialized; - - /* - * This is used as an input param to HvCallSignalEvent hypercall. The - * input param is immutable in our usage and must be dynamic mem (vs - * stack or global). */ - struct hv_input_signal_event_buffer *SignalEventBuffer; - /* 8-bytes aligned of the buffer above */ - struct hv_input_signal_event *SignalEventParam; - - void *synICMessagePage[MAX_NUM_CPUS]; - void *synICEventPage[MAX_NUM_CPUS]; -}; - -extern struct hv_context gHvContext; - - -/* Hv Interface */ - -extern int HvInit(void); - -extern void HvCleanup(void); - -extern u16 HvPostMessage(union hv_connection_id connectionId, - enum hv_message_type messageType, - void *payload, size_t payloadSize); - -extern u16 HvSignalEvent(void); - -extern void HvSynicInit(void *irqarg); - -extern void HvSynicCleanup(void *arg); - -#endif /* __HV_H__ */ diff --git a/drivers/staging/hv/VmbusPrivate.h b/drivers/staging/hv/VmbusPrivate.h index 05ad2c9..534aa64 100644 --- a/drivers/staging/hv/VmbusPrivate.h +++ b/drivers/staging/hv/VmbusPrivate.h @@ -25,7 +25,7 @@ #ifndef _VMBUS_PRIVATE_H_ #define _VMBUS_PRIVATE_H_ -#include "Hv.h" +#include "hv.h" #include "VmbusApi.h" #include "Channel.h" #include "ChannelMgmt.h" diff --git a/drivers/staging/hv/hv.h b/drivers/staging/hv/hv.h new file mode 100644 index 0000000..41f5ebb --- /dev/null +++ b/drivers/staging/hv/hv.h @@ -0,0 +1,140 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef __HV_H__ +#define __HV_H__ + +#include "hv_api.h" + +enum { + VMBUS_MESSAGE_CONNECTION_ID = 1, + VMBUS_MESSAGE_PORT_ID = 1, + VMBUS_EVENT_CONNECTION_ID = 2, + VMBUS_EVENT_PORT_ID = 2, + VMBUS_MONITOR_CONNECTION_ID = 3, + VMBUS_MONITOR_PORT_ID = 3, + VMBUS_MESSAGE_SINT = 2, +}; + +/* #defines */ + +#define HV_PRESENT_BIT 0x80000000 + +#define HV_LINUX_GUEST_ID_LO 0x00000000 +#define HV_LINUX_GUEST_ID_HI 0xB16B00B5 +#define HV_LINUX_GUEST_ID (((u64)HV_LINUX_GUEST_ID_HI << 32) | \ + HV_LINUX_GUEST_ID_LO) + +#define HV_CPU_POWER_MANAGEMENT (1 << 0) +#define HV_RECOMMENDATIONS_MAX 4 + +#define HV_X64_MAX 5 +#define HV_CAPS_MAX 8 + + +#define HV_HYPERCALL_PARAM_ALIGN sizeof(u64) + + +/* Service definitions */ + +#define HV_SERVICE_PARENT_PORT (0) +#define HV_SERVICE_PARENT_CONNECTION (0) + +#define HV_SERVICE_CONNECT_RESPONSE_SUCCESS (0) +#define HV_SERVICE_CONNECT_RESPONSE_INVALID_PARAMETER (1) +#define HV_SERVICE_CONNECT_RESPONSE_UNKNOWN_SERVICE (2) +#define HV_SERVICE_CONNECT_RESPONSE_CONNECTION_REJECTED (3) + +#define HV_SERVICE_CONNECT_REQUEST_MESSAGE_ID (1) +#define HV_SERVICE_CONNECT_RESPONSE_MESSAGE_ID (2) +#define HV_SERVICE_DISCONNECT_REQUEST_MESSAGE_ID (3) +#define HV_SERVICE_DISCONNECT_RESPONSE_MESSAGE_ID (4) +#define HV_SERVICE_MAX_MESSAGE_ID (4) + +#define HV_SERVICE_PROTOCOL_VERSION (0x0010) +#define HV_CONNECT_PAYLOAD_BYTE_COUNT 64 + +/* #define VMBUS_REVISION_NUMBER 6 */ + +/* Our local vmbus's port and connection id. Anything >0 is fine */ +/* #define VMBUS_PORT_ID 11 */ + +/* 628180B8-308D-4c5e-B7DB-1BEB62E62EF4 */ +static const struct hv_guid VMBUS_SERVICE_ID = { + .data = { + 0xb8, 0x80, 0x81, 0x62, 0x8d, 0x30, 0x5e, 0x4c, + 0xb7, 0xdb, 0x1b, 0xeb, 0x62, 0xe6, 0x2e, 0xf4 + }, +}; + +#define MAX_NUM_CPUS 32 + + +struct hv_input_signal_event_buffer { + u64 Align8; + struct hv_input_signal_event Event; +}; + +struct hv_context { + /* We only support running on top of Hyper-V + * So at this point this really can only contain the Hyper-V ID + */ + u64 GuestId; + + void *HypercallPage; + + bool SynICInitialized; + + /* + * This is used as an input param to HvCallSignalEvent hypercall. The + * input param is immutable in our usage and must be dynamic mem (vs + * stack or global). */ + struct hv_input_signal_event_buffer *SignalEventBuffer; + /* 8-bytes aligned of the buffer above */ + struct hv_input_signal_event *SignalEventParam; + + void *synICMessagePage[MAX_NUM_CPUS]; + void *synICEventPage[MAX_NUM_CPUS]; +}; + +extern struct hv_context gHvContext; + + +/* Hv Interface */ + +extern int HvInit(void); + +extern void HvCleanup(void); + +extern u16 HvPostMessage(union hv_connection_id connectionId, + enum hv_message_type messageType, + void *payload, size_t payloadSize); + +extern u16 HvSignalEvent(void); + +extern void HvSynicInit(void *irqarg); + +extern void HvSynicCleanup(void *arg); + +#endif /* __HV_H__ */ -- cgit v0.10.2 From 4df90be54d9bcd2ff55d3b4c720dbab32ca6d690 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:18:38 -0700 Subject: Staging: hv: rename Channel.c and .h to channel.c and .h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Channel.c b/drivers/staging/hv/Channel.c deleted file mode 100644 index eab7d16..0000000 --- a/drivers/staging/hv/Channel.c +++ /dev/null @@ -1,1094 +0,0 @@ -/* - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - */ -#include -#include -#include -#include -#include "osd.h" -#include "logging.h" -#include "VmbusPrivate.h" - -/* Internal routines */ -static int VmbusChannelCreateGpadlHeader( - void *Kbuffer, /* must be phys and virt contiguous */ - u32 Size, /* page-size multiple */ - struct vmbus_channel_msginfo **msgInfo, - u32 *MessageCount); -static void DumpVmbusChannel(struct vmbus_channel *channel); -static void VmbusChannelSetEvent(struct vmbus_channel *channel); - - -#if 0 -static void DumpMonitorPage(struct hv_monitor_page *MonitorPage) -{ - int i = 0; - int j = 0; - - DPRINT_DBG(VMBUS, "monitorPage - %p, trigger state - %d", - MonitorPage, MonitorPage->TriggerState); - - for (i = 0; i < 4; i++) - DPRINT_DBG(VMBUS, "trigger group (%d) - %llx", i, - MonitorPage->TriggerGroup[i].AsUINT64); - - for (i = 0; i < 4; i++) { - for (j = 0; j < 32; j++) { - DPRINT_DBG(VMBUS, "latency (%d)(%d) - %llx", i, j, - MonitorPage->Latency[i][j]); - } - } - for (i = 0; i < 4; i++) { - for (j = 0; j < 32; j++) { - DPRINT_DBG(VMBUS, "param-conn id (%d)(%d) - %d", i, j, - MonitorPage->Parameter[i][j].ConnectionId.Asu32); - DPRINT_DBG(VMBUS, "param-flag (%d)(%d) - %d", i, j, - MonitorPage->Parameter[i][j].FlagNumber); - } - } -} -#endif - -/* - * VmbusChannelSetEvent - Trigger an event notification on the specified - * channel. - */ -static void VmbusChannelSetEvent(struct vmbus_channel *Channel) -{ - struct hv_monitor_page *monitorPage; - - DPRINT_ENTER(VMBUS); - - if (Channel->OfferMsg.MonitorAllocated) { - /* Each u32 represents 32 channels */ - set_bit(Channel->OfferMsg.ChildRelId & 31, - (unsigned long *) gVmbusConnection.SendInterruptPage + - (Channel->OfferMsg.ChildRelId >> 5)); - - monitorPage = gVmbusConnection.MonitorPages; - monitorPage++; /* Get the child to parent monitor page */ - - set_bit(Channel->MonitorBit, - (unsigned long *)&monitorPage->TriggerGroup - [Channel->MonitorGroup].Pending); - - } else { - VmbusSetEvent(Channel->OfferMsg.ChildRelId); - } - - DPRINT_EXIT(VMBUS); -} - -#if 0 -static void VmbusChannelClearEvent(struct vmbus_channel *channel) -{ - struct hv_monitor_page *monitorPage; - - DPRINT_ENTER(VMBUS); - - if (Channel->OfferMsg.MonitorAllocated) { - /* Each u32 represents 32 channels */ - clear_bit(Channel->OfferMsg.ChildRelId & 31, - (unsigned long *)gVmbusConnection.SendInterruptPage + - (Channel->OfferMsg.ChildRelId >> 5)); - - monitorPage = - (struct hv_monitor_page *)gVmbusConnection.MonitorPages; - monitorPage++; /* Get the child to parent monitor page */ - - clear_bit(Channel->MonitorBit, - (unsigned long *)&monitorPage->TriggerGroup - [Channel->MonitorGroup].Pending); - } - - DPRINT_EXIT(VMBUS); -} - -#endif -/* - * VmbusChannelGetDebugInfo -Retrieve various channel debug info - */ -void VmbusChannelGetDebugInfo(struct vmbus_channel *Channel, - struct vmbus_channel_debug_info *DebugInfo) -{ - struct hv_monitor_page *monitorPage; - u8 monitorGroup = (u8)Channel->OfferMsg.MonitorId / 32; - u8 monitorOffset = (u8)Channel->OfferMsg.MonitorId % 32; - /* u32 monitorBit = 1 << monitorOffset; */ - - DebugInfo->RelId = Channel->OfferMsg.ChildRelId; - DebugInfo->State = Channel->State; - memcpy(&DebugInfo->InterfaceType, - &Channel->OfferMsg.Offer.InterfaceType, sizeof(struct hv_guid)); - memcpy(&DebugInfo->InterfaceInstance, - &Channel->OfferMsg.Offer.InterfaceInstance, - sizeof(struct hv_guid)); - - monitorPage = (struct hv_monitor_page *)gVmbusConnection.MonitorPages; - - DebugInfo->MonitorId = Channel->OfferMsg.MonitorId; - - DebugInfo->ServerMonitorPending = - monitorPage->TriggerGroup[monitorGroup].Pending; - DebugInfo->ServerMonitorLatency = - monitorPage->Latency[monitorGroup][monitorOffset]; - DebugInfo->ServerMonitorConnectionId = - monitorPage->Parameter[monitorGroup] - [monitorOffset].ConnectionId.u.Id; - - monitorPage++; - - DebugInfo->ClientMonitorPending = - monitorPage->TriggerGroup[monitorGroup].Pending; - DebugInfo->ClientMonitorLatency = - monitorPage->Latency[monitorGroup][monitorOffset]; - DebugInfo->ClientMonitorConnectionId = - monitorPage->Parameter[monitorGroup] - [monitorOffset].ConnectionId.u.Id; - - RingBufferGetDebugInfo(&Channel->Inbound, &DebugInfo->Inbound); - RingBufferGetDebugInfo(&Channel->Outbound, &DebugInfo->Outbound); -} - -/* - * VmbusChannelOpen - Open the specified channel. - */ -int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, - u32 RecvRingBufferSize, void *UserData, u32 UserDataLen, - void (*OnChannelCallback)(void *context), void *Context) -{ - struct vmbus_channel_open_channel *openMsg; - struct vmbus_channel_msginfo *openInfo = NULL; - void *in, *out; - unsigned long flags; - int ret, err = 0; - - DPRINT_ENTER(VMBUS); - - /* Aligned to page size */ - /* ASSERT(!(SendRingBufferSize & (PAGE_SIZE - 1))); */ - /* ASSERT(!(RecvRingBufferSize & (PAGE_SIZE - 1))); */ - - NewChannel->OnChannelCallback = OnChannelCallback; - NewChannel->ChannelCallbackContext = Context; - - /* Allocate the ring buffer */ - out = osd_PageAlloc((SendRingBufferSize + RecvRingBufferSize) - >> PAGE_SHIFT); - if (!out) - return -ENOMEM; - - /* ASSERT(((unsigned long)out & (PAGE_SIZE-1)) == 0); */ - - in = (void *)((unsigned long)out + SendRingBufferSize); - - NewChannel->RingBufferPages = out; - NewChannel->RingBufferPageCount = (SendRingBufferSize + - RecvRingBufferSize) >> PAGE_SHIFT; - - ret = RingBufferInit(&NewChannel->Outbound, out, SendRingBufferSize); - if (!ret) { - err = ret; - goto errorout; - } - - ret = RingBufferInit(&NewChannel->Inbound, in, RecvRingBufferSize); - if (!ret) { - err = ret; - goto errorout; - } - - - /* Establish the gpadl for the ring buffer */ - DPRINT_DBG(VMBUS, "Establishing ring buffer's gpadl for channel %p...", - NewChannel); - - NewChannel->RingBufferGpadlHandle = 0; - - ret = VmbusChannelEstablishGpadl(NewChannel, - NewChannel->Outbound.RingBuffer, - SendRingBufferSize + - RecvRingBufferSize, - &NewChannel->RingBufferGpadlHandle); - - if (!ret) { - err = ret; - goto errorout; - } - - DPRINT_DBG(VMBUS, "channel %p ", - NewChannel, NewChannel->OfferMsg.ChildRelId, - NewChannel->RingBufferGpadlHandle, - NewChannel->Outbound.RingBuffer, - NewChannel->Outbound.RingSize, - NewChannel->Inbound.RingBuffer, - NewChannel->Inbound.RingSize, - SendRingBufferSize); - - /* Create and init the channel open message */ - openInfo = kmalloc(sizeof(*openInfo) + - sizeof(struct vmbus_channel_open_channel), - GFP_KERNEL); - if (!openInfo) { - err = -ENOMEM; - goto errorout; - } - - openInfo->WaitEvent = osd_WaitEventCreate(); - if (!openInfo->WaitEvent) { - err = -ENOMEM; - goto errorout; - } - - openMsg = (struct vmbus_channel_open_channel *)openInfo->Msg; - openMsg->Header.MessageType = ChannelMessageOpenChannel; - openMsg->OpenId = NewChannel->OfferMsg.ChildRelId; /* FIXME */ - openMsg->ChildRelId = NewChannel->OfferMsg.ChildRelId; - openMsg->RingBufferGpadlHandle = NewChannel->RingBufferGpadlHandle; - openMsg->DownstreamRingBufferPageOffset = SendRingBufferSize >> - PAGE_SHIFT; - openMsg->ServerContextAreaGpadlHandle = 0; /* TODO */ - - if (UserDataLen > MAX_USER_DEFINED_BYTES) { - err = -EINVAL; - goto errorout; - } - - if (UserDataLen) - memcpy(openMsg->UserData, UserData, UserDataLen); - - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - list_add_tail(&openInfo->MsgListEntry, - &gVmbusConnection.ChannelMsgList); - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - DPRINT_DBG(VMBUS, "Sending channel open msg..."); - - ret = VmbusPostMessage(openMsg, - sizeof(struct vmbus_channel_open_channel)); - if (ret != 0) { - DPRINT_ERR(VMBUS, "unable to open channel - %d", ret); - goto Cleanup; - } - - /* FIXME: Need to time-out here */ - osd_WaitEventWait(openInfo->WaitEvent); - - if (openInfo->Response.OpenResult.Status == 0) - DPRINT_INFO(VMBUS, "channel <%p> open success!!", NewChannel); - else - DPRINT_INFO(VMBUS, "channel <%p> open failed - %d!!", - NewChannel, openInfo->Response.OpenResult.Status); - -Cleanup: - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - list_del(&openInfo->MsgListEntry); - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - kfree(openInfo->WaitEvent); - kfree(openInfo); - - DPRINT_EXIT(VMBUS); - - return 0; - -errorout: - RingBufferCleanup(&NewChannel->Outbound); - RingBufferCleanup(&NewChannel->Inbound); - osd_PageFree(out, (SendRingBufferSize + RecvRingBufferSize) - >> PAGE_SHIFT); - kfree(openInfo); - return err; -} - -/* - * DumpGpadlBody - Dump the gpadl body message to the console for - * debugging purposes. - */ -static void DumpGpadlBody(struct vmbus_channel_gpadl_body *Gpadl, u32 Len) -{ - int i; - int pfnCount; - - pfnCount = (Len - sizeof(struct vmbus_channel_gpadl_body)) / - sizeof(u64); - DPRINT_DBG(VMBUS, "gpadl body - len %d pfn count %d", Len, pfnCount); - - for (i = 0; i < pfnCount; i++) - DPRINT_DBG(VMBUS, "gpadl body - %d) pfn %llu", - i, Gpadl->Pfn[i]); -} - -/* - * DumpGpadlHeader - Dump the gpadl header message to the console for - * debugging purposes. - */ -static void DumpGpadlHeader(struct vmbus_channel_gpadl_header *Gpadl) -{ - int i, j; - int pageCount; - - DPRINT_DBG(VMBUS, - "gpadl header - relid %d, range count %d, range buflen %d", - Gpadl->ChildRelId, Gpadl->RangeCount, Gpadl->RangeBufLen); - for (i = 0; i < Gpadl->RangeCount; i++) { - pageCount = Gpadl->Range[i].ByteCount >> PAGE_SHIFT; - pageCount = (pageCount > 26) ? 26 : pageCount; - - DPRINT_DBG(VMBUS, "gpadl range %d - len %d offset %d " - "page count %d", i, Gpadl->Range[i].ByteCount, - Gpadl->Range[i].ByteOffset, pageCount); - - for (j = 0; j < pageCount; j++) - DPRINT_DBG(VMBUS, "%d) pfn %llu", j, - Gpadl->Range[i].PfnArray[j]); - } -} - -/* - * VmbusChannelCreateGpadlHeader - Creates a gpadl for the specified buffer - */ -static int VmbusChannelCreateGpadlHeader(void *Kbuffer, u32 Size, - struct vmbus_channel_msginfo **MsgInfo, - u32 *MessageCount) -{ - int i; - int pageCount; - unsigned long long pfn; - struct vmbus_channel_gpadl_header *gpaHeader; - struct vmbus_channel_gpadl_body *gpadlBody; - struct vmbus_channel_msginfo *msgHeader; - struct vmbus_channel_msginfo *msgBody = NULL; - u32 msgSize; - - int pfnSum, pfnCount, pfnLeft, pfnCurr, pfnSize; - - /* ASSERT((kbuffer & (PAGE_SIZE-1)) == 0); */ - /* ASSERT((Size & (PAGE_SIZE-1)) == 0); */ - - pageCount = Size >> PAGE_SHIFT; - pfn = virt_to_phys(Kbuffer) >> PAGE_SHIFT; - - /* do we need a gpadl body msg */ - pfnSize = MAX_SIZE_CHANNEL_MESSAGE - - sizeof(struct vmbus_channel_gpadl_header) - - sizeof(struct gpa_range); - pfnCount = pfnSize / sizeof(u64); - - if (pageCount > pfnCount) { - /* we need a gpadl body */ - /* fill in the header */ - msgSize = sizeof(struct vmbus_channel_msginfo) + - sizeof(struct vmbus_channel_gpadl_header) + - sizeof(struct gpa_range) + pfnCount * sizeof(u64); - msgHeader = kzalloc(msgSize, GFP_KERNEL); - if (!msgHeader) - goto nomem; - - INIT_LIST_HEAD(&msgHeader->SubMsgList); - msgHeader->MessageSize = msgSize; - - gpaHeader = (struct vmbus_channel_gpadl_header *)msgHeader->Msg; - gpaHeader->RangeCount = 1; - gpaHeader->RangeBufLen = sizeof(struct gpa_range) + - pageCount * sizeof(u64); - gpaHeader->Range[0].ByteOffset = 0; - gpaHeader->Range[0].ByteCount = Size; - for (i = 0; i < pfnCount; i++) - gpaHeader->Range[0].PfnArray[i] = pfn+i; - *MsgInfo = msgHeader; - *MessageCount = 1; - - pfnSum = pfnCount; - pfnLeft = pageCount - pfnCount; - - /* how many pfns can we fit */ - pfnSize = MAX_SIZE_CHANNEL_MESSAGE - - sizeof(struct vmbus_channel_gpadl_body); - pfnCount = pfnSize / sizeof(u64); - - /* fill in the body */ - while (pfnLeft) { - if (pfnLeft > pfnCount) - pfnCurr = pfnCount; - else - pfnCurr = pfnLeft; - - msgSize = sizeof(struct vmbus_channel_msginfo) + - sizeof(struct vmbus_channel_gpadl_body) + - pfnCurr * sizeof(u64); - msgBody = kzalloc(msgSize, GFP_KERNEL); - /* FIXME: we probably need to more if this fails */ - if (!msgBody) - goto nomem; - msgBody->MessageSize = msgSize; - (*MessageCount)++; - gpadlBody = - (struct vmbus_channel_gpadl_body *)msgBody->Msg; - - /* - * FIXME: - * Gpadl is u32 and we are using a pointer which could - * be 64-bit - */ - /* gpadlBody->Gpadl = kbuffer; */ - for (i = 0; i < pfnCurr; i++) - gpadlBody->Pfn[i] = pfn + pfnSum + i; - - /* add to msg header */ - list_add_tail(&msgBody->MsgListEntry, - &msgHeader->SubMsgList); - pfnSum += pfnCurr; - pfnLeft -= pfnCurr; - } - } else { - /* everything fits in a header */ - msgSize = sizeof(struct vmbus_channel_msginfo) + - sizeof(struct vmbus_channel_gpadl_header) + - sizeof(struct gpa_range) + pageCount * sizeof(u64); - msgHeader = kzalloc(msgSize, GFP_KERNEL); - msgHeader->MessageSize = msgSize; - - gpaHeader = (struct vmbus_channel_gpadl_header *)msgHeader->Msg; - gpaHeader->RangeCount = 1; - gpaHeader->RangeBufLen = sizeof(struct gpa_range) + - pageCount * sizeof(u64); - gpaHeader->Range[0].ByteOffset = 0; - gpaHeader->Range[0].ByteCount = Size; - for (i = 0; i < pageCount; i++) - gpaHeader->Range[0].PfnArray[i] = pfn+i; - - *MsgInfo = msgHeader; - *MessageCount = 1; - } - - return 0; -nomem: - kfree(msgHeader); - kfree(msgBody); - return -ENOMEM; -} - -/* - * VmbusChannelEstablishGpadl - Estabish a GPADL for the specified buffer - * - * @Channel: a channel - * @Kbuffer: from kmalloc - * @Size: page-size multiple - * @GpadlHandle: some funky thing - */ -int VmbusChannelEstablishGpadl(struct vmbus_channel *Channel, void *Kbuffer, - u32 Size, u32 *GpadlHandle) -{ - struct vmbus_channel_gpadl_header *gpadlMsg; - struct vmbus_channel_gpadl_body *gpadlBody; - /* struct vmbus_channel_gpadl_created *gpadlCreated; */ - struct vmbus_channel_msginfo *msgInfo = NULL; - struct vmbus_channel_msginfo *subMsgInfo; - u32 msgCount; - struct list_head *curr; - u32 nextGpadlHandle; - unsigned long flags; - int ret = 0; - - DPRINT_ENTER(VMBUS); - - nextGpadlHandle = atomic_read(&gVmbusConnection.NextGpadlHandle); - atomic_inc(&gVmbusConnection.NextGpadlHandle); - - ret = VmbusChannelCreateGpadlHeader(Kbuffer, Size, &msgInfo, &msgCount); - if (ret) - return ret; - - msgInfo->WaitEvent = osd_WaitEventCreate(); - if (!msgInfo->WaitEvent) { - ret = -ENOMEM; - goto Cleanup; - } - - gpadlMsg = (struct vmbus_channel_gpadl_header *)msgInfo->Msg; - gpadlMsg->Header.MessageType = ChannelMessageGpadlHeader; - gpadlMsg->ChildRelId = Channel->OfferMsg.ChildRelId; - gpadlMsg->Gpadl = nextGpadlHandle; - - DumpGpadlHeader(gpadlMsg); - - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - list_add_tail(&msgInfo->MsgListEntry, - &gVmbusConnection.ChannelMsgList); - - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - DPRINT_DBG(VMBUS, "buffer %p, size %d msg cnt %d", - Kbuffer, Size, msgCount); - - DPRINT_DBG(VMBUS, "Sending GPADL Header - len %zd", - msgInfo->MessageSize - sizeof(*msgInfo)); - - ret = VmbusPostMessage(gpadlMsg, msgInfo->MessageSize - - sizeof(*msgInfo)); - if (ret != 0) { - DPRINT_ERR(VMBUS, "Unable to open channel - %d", ret); - goto Cleanup; - } - - if (msgCount > 1) { - list_for_each(curr, &msgInfo->SubMsgList) { - - /* FIXME: should this use list_entry() instead ? */ - subMsgInfo = (struct vmbus_channel_msginfo *)curr; - gpadlBody = - (struct vmbus_channel_gpadl_body *)subMsgInfo->Msg; - - gpadlBody->Header.MessageType = ChannelMessageGpadlBody; - gpadlBody->Gpadl = nextGpadlHandle; - - DPRINT_DBG(VMBUS, "Sending GPADL Body - len %zd", - subMsgInfo->MessageSize - - sizeof(*subMsgInfo)); - - DumpGpadlBody(gpadlBody, subMsgInfo->MessageSize - - sizeof(*subMsgInfo)); - ret = VmbusPostMessage(gpadlBody, - subMsgInfo->MessageSize - - sizeof(*subMsgInfo)); - if (!ret) - goto Cleanup; - - } - } - osd_WaitEventWait(msgInfo->WaitEvent); - - /* At this point, we received the gpadl created msg */ - DPRINT_DBG(VMBUS, "Received GPADL created " - "(relid %d, status %d handle %x)", - Channel->OfferMsg.ChildRelId, - msgInfo->Response.GpadlCreated.CreationStatus, - gpadlMsg->Gpadl); - - *GpadlHandle = gpadlMsg->Gpadl; - -Cleanup: - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - list_del(&msgInfo->MsgListEntry); - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - kfree(msgInfo->WaitEvent); - kfree(msgInfo); - - DPRINT_EXIT(VMBUS); - - return ret; -} - -/* - * VmbusChannelTeardownGpadl -Teardown the specified GPADL handle - */ -int VmbusChannelTeardownGpadl(struct vmbus_channel *Channel, u32 GpadlHandle) -{ - struct vmbus_channel_gpadl_teardown *msg; - struct vmbus_channel_msginfo *info; - unsigned long flags; - int ret; - - DPRINT_ENTER(VMBUS); - - /* ASSERT(GpadlHandle != 0); */ - - info = kmalloc(sizeof(*info) + - sizeof(struct vmbus_channel_gpadl_teardown), GFP_KERNEL); - if (!info) - return -ENOMEM; - - info->WaitEvent = osd_WaitEventCreate(); - if (!info->WaitEvent) { - kfree(info); - return -ENOMEM; - } - - msg = (struct vmbus_channel_gpadl_teardown *)info->Msg; - - msg->Header.MessageType = ChannelMessageGpadlTeardown; - msg->ChildRelId = Channel->OfferMsg.ChildRelId; - msg->Gpadl = GpadlHandle; - - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - list_add_tail(&info->MsgListEntry, - &gVmbusConnection.ChannelMsgList); - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - ret = VmbusPostMessage(msg, - sizeof(struct vmbus_channel_gpadl_teardown)); - if (ret != 0) { - /* TODO: */ - /* something... */ - } - - osd_WaitEventWait(info->WaitEvent); - - /* Received a torndown response */ - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - list_del(&info->MsgListEntry); - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - kfree(info->WaitEvent); - kfree(info); - - DPRINT_EXIT(VMBUS); - - return ret; -} - -/* - * VmbusChannelClose - Close the specified channel - */ -void VmbusChannelClose(struct vmbus_channel *Channel) -{ - struct vmbus_channel_close_channel *msg; - struct vmbus_channel_msginfo *info; - unsigned long flags; - int ret; - - DPRINT_ENTER(VMBUS); - - /* Stop callback and cancel the timer asap */ - Channel->OnChannelCallback = NULL; - del_timer_sync(&Channel->poll_timer); - - /* Send a closing message */ - info = kmalloc(sizeof(*info) + - sizeof(struct vmbus_channel_close_channel), GFP_KERNEL); - /* FIXME: can't do anything other than return here because the - * function is void */ - if (!info) - return; - - /* info->waitEvent = osd_WaitEventCreate(); */ - - msg = (struct vmbus_channel_close_channel *)info->Msg; - msg->Header.MessageType = ChannelMessageCloseChannel; - msg->ChildRelId = Channel->OfferMsg.ChildRelId; - - ret = VmbusPostMessage(msg, sizeof(struct vmbus_channel_close_channel)); - if (ret != 0) { - /* TODO: */ - /* something... */ - } - - /* Tear down the gpadl for the channel's ring buffer */ - if (Channel->RingBufferGpadlHandle) - VmbusChannelTeardownGpadl(Channel, - Channel->RingBufferGpadlHandle); - - /* TODO: Send a msg to release the childRelId */ - - /* Cleanup the ring buffers for this channel */ - RingBufferCleanup(&Channel->Outbound); - RingBufferCleanup(&Channel->Inbound); - - osd_PageFree(Channel->RingBufferPages, Channel->RingBufferPageCount); - - kfree(info); - - /* - * If we are closing the channel during an error path in - * opening the channel, don't free the channel since the - * caller will free the channel - */ - - if (Channel->State == CHANNEL_OPEN_STATE) { - spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); - list_del(&Channel->ListEntry); - spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); - - FreeVmbusChannel(Channel); - } - - DPRINT_EXIT(VMBUS); -} - -/** - * VmbusChannelSendPacket() - Send the specified buffer on the given channel - * @Channel: Pointer to vmbus_channel structure. - * @Buffer: Pointer to the buffer you want to receive the data into. - * @BufferLen: Maximum size of what the the buffer will hold - * @RequestId: Identifier of the request - * @vmbus_packet_type: Type of packet that is being send e.g. negotiate, time - * packet etc. - * - * Sends data in @Buffer directly to hyper-v via the vmbus - * This will send the data unparsed to hyper-v. - * - * Mainly used by Hyper-V drivers. - */ -int VmbusChannelSendPacket(struct vmbus_channel *Channel, const void *Buffer, - u32 BufferLen, u64 RequestId, - enum vmbus_packet_type Type, u32 Flags) -{ - struct vmpacket_descriptor desc; - u32 packetLen = sizeof(struct vmpacket_descriptor) + BufferLen; - u32 packetLenAligned = ALIGN_UP(packetLen, sizeof(u64)); - struct scatterlist bufferList[3]; - u64 alignedData = 0; - int ret; - - DPRINT_ENTER(VMBUS); - DPRINT_DBG(VMBUS, "channel %p buffer %p len %d", - Channel, Buffer, BufferLen); - - DumpVmbusChannel(Channel); - - /* ASSERT((packetLenAligned - packetLen) < sizeof(u64)); */ - - /* Setup the descriptor */ - desc.Type = Type; /* VmbusPacketTypeDataInBand; */ - desc.Flags = Flags; /* VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED; */ - /* in 8-bytes granularity */ - desc.DataOffset8 = sizeof(struct vmpacket_descriptor) >> 3; - desc.Length8 = (u16)(packetLenAligned >> 3); - desc.TransactionId = RequestId; - - sg_init_table(bufferList, 3); - sg_set_buf(&bufferList[0], &desc, sizeof(struct vmpacket_descriptor)); - sg_set_buf(&bufferList[1], Buffer, BufferLen); - sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen); - - ret = RingBufferWrite(&Channel->Outbound, bufferList, 3); - - /* TODO: We should determine if this is optional */ - if (ret == 0 && !GetRingBufferInterruptMask(&Channel->Outbound)) - VmbusChannelSetEvent(Channel); - - DPRINT_EXIT(VMBUS); - - return ret; -} -EXPORT_SYMBOL(VmbusChannelSendPacket); - -/* - * VmbusChannelSendPacketPageBuffer - Send a range of single-page buffer - * packets using a GPADL Direct packet type. - */ -int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *Channel, - struct hv_page_buffer PageBuffers[], - u32 PageCount, void *Buffer, u32 BufferLen, - u64 RequestId) -{ - int ret; - int i; - struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER desc; - u32 descSize; - u32 packetLen; - u32 packetLenAligned; - struct scatterlist bufferList[3]; - u64 alignedData = 0; - - DPRINT_ENTER(VMBUS); - - if (PageCount > MAX_PAGE_BUFFER_COUNT) - return -EINVAL; - - DumpVmbusChannel(Channel); - - /* - * Adjust the size down since VMBUS_CHANNEL_PACKET_PAGE_BUFFER is the - * largest size we support - */ - descSize = sizeof(struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER) - - ((MAX_PAGE_BUFFER_COUNT - PageCount) * - sizeof(struct hv_page_buffer)); - packetLen = descSize + BufferLen; - packetLenAligned = ALIGN_UP(packetLen, sizeof(u64)); - - /* ASSERT((packetLenAligned - packetLen) < sizeof(u64)); */ - - /* Setup the descriptor */ - desc.Type = VmbusPacketTypeDataUsingGpaDirect; - desc.Flags = VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED; - desc.DataOffset8 = descSize >> 3; /* in 8-bytes grandularity */ - desc.Length8 = (u16)(packetLenAligned >> 3); - desc.TransactionId = RequestId; - desc.RangeCount = PageCount; - - for (i = 0; i < PageCount; i++) { - desc.Range[i].Length = PageBuffers[i].Length; - desc.Range[i].Offset = PageBuffers[i].Offset; - desc.Range[i].Pfn = PageBuffers[i].Pfn; - } - - sg_init_table(bufferList, 3); - sg_set_buf(&bufferList[0], &desc, descSize); - sg_set_buf(&bufferList[1], Buffer, BufferLen); - sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen); - - ret = RingBufferWrite(&Channel->Outbound, bufferList, 3); - - /* TODO: We should determine if this is optional */ - if (ret == 0 && !GetRingBufferInterruptMask(&Channel->Outbound)) - VmbusChannelSetEvent(Channel); - - DPRINT_EXIT(VMBUS); - - return ret; -} - -/* - * VmbusChannelSendPacketMultiPageBuffer - Send a multi-page buffer packet - * using a GPADL Direct packet type. - */ -int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *Channel, - struct hv_multipage_buffer *MultiPageBuffer, - void *Buffer, u32 BufferLen, u64 RequestId) -{ - int ret; - struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER desc; - u32 descSize; - u32 packetLen; - u32 packetLenAligned; - struct scatterlist bufferList[3]; - u64 alignedData = 0; - u32 PfnCount = NUM_PAGES_SPANNED(MultiPageBuffer->Offset, - MultiPageBuffer->Length); - - DPRINT_ENTER(VMBUS); - - DumpVmbusChannel(Channel); - - DPRINT_DBG(VMBUS, "data buffer - offset %u len %u pfn count %u", - MultiPageBuffer->Offset, MultiPageBuffer->Length, PfnCount); - - if ((PfnCount < 0) || (PfnCount > MAX_MULTIPAGE_BUFFER_COUNT)) - return -EINVAL; - - /* - * Adjust the size down since VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER is - * the largest size we support - */ - descSize = sizeof(struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER) - - ((MAX_MULTIPAGE_BUFFER_COUNT - PfnCount) * - sizeof(u64)); - packetLen = descSize + BufferLen; - packetLenAligned = ALIGN_UP(packetLen, sizeof(u64)); - - /* ASSERT((packetLenAligned - packetLen) < sizeof(u64)); */ - - /* Setup the descriptor */ - desc.Type = VmbusPacketTypeDataUsingGpaDirect; - desc.Flags = VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED; - desc.DataOffset8 = descSize >> 3; /* in 8-bytes grandularity */ - desc.Length8 = (u16)(packetLenAligned >> 3); - desc.TransactionId = RequestId; - desc.RangeCount = 1; - - desc.Range.Length = MultiPageBuffer->Length; - desc.Range.Offset = MultiPageBuffer->Offset; - - memcpy(desc.Range.PfnArray, MultiPageBuffer->PfnArray, - PfnCount * sizeof(u64)); - - sg_init_table(bufferList, 3); - sg_set_buf(&bufferList[0], &desc, descSize); - sg_set_buf(&bufferList[1], Buffer, BufferLen); - sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen); - - ret = RingBufferWrite(&Channel->Outbound, bufferList, 3); - - /* TODO: We should determine if this is optional */ - if (ret == 0 && !GetRingBufferInterruptMask(&Channel->Outbound)) - VmbusChannelSetEvent(Channel); - - DPRINT_EXIT(VMBUS); - - return ret; -} - - -/** - * VmbusChannelRecvPacket() - Retrieve the user packet on the specified channel - * @Channel: Pointer to vmbus_channel structure. - * @Buffer: Pointer to the buffer you want to receive the data into. - * @BufferLen: Maximum size of what the the buffer will hold - * @BufferActualLen: The actual size of the data after it was received - * @RequestId: Identifier of the request - * - * Receives directly from the hyper-v vmbus and puts the data it received - * into Buffer. This will receive the data unparsed from hyper-v. - * - * Mainly used by Hyper-V drivers. - */ -int VmbusChannelRecvPacket(struct vmbus_channel *Channel, void *Buffer, - u32 BufferLen, u32 *BufferActualLen, u64 *RequestId) -{ - struct vmpacket_descriptor desc; - u32 packetLen; - u32 userLen; - int ret; - unsigned long flags; - - DPRINT_ENTER(VMBUS); - - *BufferActualLen = 0; - *RequestId = 0; - - spin_lock_irqsave(&Channel->inbound_lock, flags); - - ret = RingBufferPeek(&Channel->Inbound, &desc, - sizeof(struct vmpacket_descriptor)); - if (ret != 0) { - spin_unlock_irqrestore(&Channel->inbound_lock, flags); - - /* DPRINT_DBG(VMBUS, "nothing to read!!"); */ - DPRINT_EXIT(VMBUS); - return 0; - } - - /* VmbusChannelClearEvent(Channel); */ - - packetLen = desc.Length8 << 3; - userLen = packetLen - (desc.DataOffset8 << 3); - /* ASSERT(userLen > 0); */ - - DPRINT_DBG(VMBUS, "packet received on channel %p relid %d ", - Channel, Channel->OfferMsg.ChildRelId, desc.Type, - desc.Flags, desc.TransactionId, packetLen, userLen); - - *BufferActualLen = userLen; - - if (userLen > BufferLen) { - spin_unlock_irqrestore(&Channel->inbound_lock, flags); - - DPRINT_ERR(VMBUS, "buffer too small - got %d needs %d", - BufferLen, userLen); - DPRINT_EXIT(VMBUS); - - return -1; - } - - *RequestId = desc.TransactionId; - - /* Copy over the packet to the user buffer */ - ret = RingBufferRead(&Channel->Inbound, Buffer, userLen, - (desc.DataOffset8 << 3)); - - spin_unlock_irqrestore(&Channel->inbound_lock, flags); - - DPRINT_EXIT(VMBUS); - - return 0; -} -EXPORT_SYMBOL(VmbusChannelRecvPacket); - -/* - * VmbusChannelRecvPacketRaw - Retrieve the raw packet on the specified channel - */ -int VmbusChannelRecvPacketRaw(struct vmbus_channel *Channel, void *Buffer, - u32 BufferLen, u32 *BufferActualLen, - u64 *RequestId) -{ - struct vmpacket_descriptor desc; - u32 packetLen; - u32 userLen; - int ret; - unsigned long flags; - - DPRINT_ENTER(VMBUS); - - *BufferActualLen = 0; - *RequestId = 0; - - spin_lock_irqsave(&Channel->inbound_lock, flags); - - ret = RingBufferPeek(&Channel->Inbound, &desc, - sizeof(struct vmpacket_descriptor)); - if (ret != 0) { - spin_unlock_irqrestore(&Channel->inbound_lock, flags); - - /* DPRINT_DBG(VMBUS, "nothing to read!!"); */ - DPRINT_EXIT(VMBUS); - return 0; - } - - /* VmbusChannelClearEvent(Channel); */ - - packetLen = desc.Length8 << 3; - userLen = packetLen - (desc.DataOffset8 << 3); - - DPRINT_DBG(VMBUS, "packet received on channel %p relid %d ", - Channel, Channel->OfferMsg.ChildRelId, desc.Type, - desc.Flags, desc.TransactionId, packetLen, userLen); - - *BufferActualLen = packetLen; - - if (packetLen > BufferLen) { - spin_unlock_irqrestore(&Channel->inbound_lock, flags); - - DPRINT_ERR(VMBUS, "buffer too small - needed %d bytes but " - "got space for only %d bytes", packetLen, BufferLen); - DPRINT_EXIT(VMBUS); - return -2; - } - - *RequestId = desc.TransactionId; - - /* Copy over the entire packet to the user buffer */ - ret = RingBufferRead(&Channel->Inbound, Buffer, packetLen, 0); - - spin_unlock_irqrestore(&Channel->inbound_lock, flags); - - DPRINT_EXIT(VMBUS); - - return 0; -} - -/* - * VmbusChannelOnChannelEvent - Channel event callback - */ -void VmbusChannelOnChannelEvent(struct vmbus_channel *Channel) -{ - DumpVmbusChannel(Channel); - /* ASSERT(Channel->OnChannelCallback); */ - - Channel->OnChannelCallback(Channel->ChannelCallbackContext); - - mod_timer(&Channel->poll_timer, jiffies + usecs_to_jiffies(100)); -} - -/* - * VmbusChannelOnTimer - Timer event callback - */ -void VmbusChannelOnTimer(unsigned long data) -{ - struct vmbus_channel *channel = (struct vmbus_channel *)data; - - if (channel->OnChannelCallback) - channel->OnChannelCallback(channel->ChannelCallbackContext); -} - -/* - * DumpVmbusChannel - Dump vmbus channel info to the console - */ -static void DumpVmbusChannel(struct vmbus_channel *Channel) -{ - DPRINT_DBG(VMBUS, "Channel (%d)", Channel->OfferMsg.ChildRelId); - DumpRingInfo(&Channel->Outbound, "Outbound "); - DumpRingInfo(&Channel->Inbound, "Inbound "); -} diff --git a/drivers/staging/hv/Channel.h b/drivers/staging/hv/Channel.h deleted file mode 100644 index 6b283ed..0000000 --- a/drivers/staging/hv/Channel.h +++ /dev/null @@ -1,112 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _CHANNEL_H_ -#define _CHANNEL_H_ - -#include "ChannelMgmt.h" - -/* The format must be the same as struct vmdata_gpa_direct */ -struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER { - u16 Type; - u16 DataOffset8; - u16 Length8; - u16 Flags; - u64 TransactionId; - u32 Reserved; - u32 RangeCount; - struct hv_page_buffer Range[MAX_PAGE_BUFFER_COUNT]; -} __attribute__((packed)); - -/* The format must be the same as struct vmdata_gpa_direct */ -struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER { - u16 Type; - u16 DataOffset8; - u16 Length8; - u16 Flags; - u64 TransactionId; - u32 Reserved; - u32 RangeCount; /* Always 1 in this case */ - struct hv_multipage_buffer Range; -} __attribute__((packed)); - - -extern int VmbusChannelOpen(struct vmbus_channel *channel, - u32 SendRingBufferSize, - u32 RecvRingBufferSize, - void *UserData, - u32 UserDataLen, - void(*OnChannelCallback)(void *context), - void *Context); - -extern void VmbusChannelClose(struct vmbus_channel *channel); - -extern int VmbusChannelSendPacket(struct vmbus_channel *channel, - const void *Buffer, - u32 BufferLen, - u64 RequestId, - enum vmbus_packet_type Type, - u32 Flags); - -extern int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *channel, - struct hv_page_buffer PageBuffers[], - u32 PageCount, - void *Buffer, - u32 BufferLen, - u64 RequestId); - -extern int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *channel, - struct hv_multipage_buffer *mpb, - void *Buffer, - u32 BufferLen, - u64 RequestId); - -extern int VmbusChannelEstablishGpadl(struct vmbus_channel *channel, - void *Kbuffer, - u32 Size, - u32 *GpadlHandle); - -extern int VmbusChannelTeardownGpadl(struct vmbus_channel *channel, - u32 GpadlHandle); - -extern int VmbusChannelRecvPacket(struct vmbus_channel *channel, - void *Buffer, - u32 BufferLen, - u32 *BufferActualLen, - u64 *RequestId); - -extern int VmbusChannelRecvPacketRaw(struct vmbus_channel *channel, - void *Buffer, - u32 BufferLen, - u32 *BufferActualLen, - u64 *RequestId); - -extern void VmbusChannelOnChannelEvent(struct vmbus_channel *channel); - -extern void VmbusChannelGetDebugInfo(struct vmbus_channel *channel, - struct vmbus_channel_debug_info *debug); - -extern void VmbusChannelOnTimer(unsigned long data); - -#endif /* _CHANNEL_H_ */ diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 42c5069..3c15c73 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -5,7 +5,7 @@ obj-$(CONFIG_HYPERV_NET) += hv_netvsc.o obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o hv_vmbus-objs := vmbus_drv.o osd.o \ - Vmbus.o hv.o Connection.o Channel.o \ + Vmbus.o hv.o Connection.o channel.o \ ChannelMgmt.o ChannelInterface.o RingBuffer.o hv_storvsc-objs := storvsc_drv.o StorVsc.o hv_blkvsc-objs := blkvsc_drv.o BlkVsc.o diff --git a/drivers/staging/hv/VmbusPrivate.h b/drivers/staging/hv/VmbusPrivate.h index 534aa64..f03db0b 100644 --- a/drivers/staging/hv/VmbusPrivate.h +++ b/drivers/staging/hv/VmbusPrivate.h @@ -27,7 +27,7 @@ #include "hv.h" #include "VmbusApi.h" -#include "Channel.h" +#include "channel.h" #include "ChannelMgmt.h" #include "ChannelInterface.h" #include "RingBuffer.h" diff --git a/drivers/staging/hv/channel.c b/drivers/staging/hv/channel.c new file mode 100644 index 0000000..eab7d16 --- /dev/null +++ b/drivers/staging/hv/channel.c @@ -0,0 +1,1094 @@ +/* + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + */ +#include +#include +#include +#include +#include "osd.h" +#include "logging.h" +#include "VmbusPrivate.h" + +/* Internal routines */ +static int VmbusChannelCreateGpadlHeader( + void *Kbuffer, /* must be phys and virt contiguous */ + u32 Size, /* page-size multiple */ + struct vmbus_channel_msginfo **msgInfo, + u32 *MessageCount); +static void DumpVmbusChannel(struct vmbus_channel *channel); +static void VmbusChannelSetEvent(struct vmbus_channel *channel); + + +#if 0 +static void DumpMonitorPage(struct hv_monitor_page *MonitorPage) +{ + int i = 0; + int j = 0; + + DPRINT_DBG(VMBUS, "monitorPage - %p, trigger state - %d", + MonitorPage, MonitorPage->TriggerState); + + for (i = 0; i < 4; i++) + DPRINT_DBG(VMBUS, "trigger group (%d) - %llx", i, + MonitorPage->TriggerGroup[i].AsUINT64); + + for (i = 0; i < 4; i++) { + for (j = 0; j < 32; j++) { + DPRINT_DBG(VMBUS, "latency (%d)(%d) - %llx", i, j, + MonitorPage->Latency[i][j]); + } + } + for (i = 0; i < 4; i++) { + for (j = 0; j < 32; j++) { + DPRINT_DBG(VMBUS, "param-conn id (%d)(%d) - %d", i, j, + MonitorPage->Parameter[i][j].ConnectionId.Asu32); + DPRINT_DBG(VMBUS, "param-flag (%d)(%d) - %d", i, j, + MonitorPage->Parameter[i][j].FlagNumber); + } + } +} +#endif + +/* + * VmbusChannelSetEvent - Trigger an event notification on the specified + * channel. + */ +static void VmbusChannelSetEvent(struct vmbus_channel *Channel) +{ + struct hv_monitor_page *monitorPage; + + DPRINT_ENTER(VMBUS); + + if (Channel->OfferMsg.MonitorAllocated) { + /* Each u32 represents 32 channels */ + set_bit(Channel->OfferMsg.ChildRelId & 31, + (unsigned long *) gVmbusConnection.SendInterruptPage + + (Channel->OfferMsg.ChildRelId >> 5)); + + monitorPage = gVmbusConnection.MonitorPages; + monitorPage++; /* Get the child to parent monitor page */ + + set_bit(Channel->MonitorBit, + (unsigned long *)&monitorPage->TriggerGroup + [Channel->MonitorGroup].Pending); + + } else { + VmbusSetEvent(Channel->OfferMsg.ChildRelId); + } + + DPRINT_EXIT(VMBUS); +} + +#if 0 +static void VmbusChannelClearEvent(struct vmbus_channel *channel) +{ + struct hv_monitor_page *monitorPage; + + DPRINT_ENTER(VMBUS); + + if (Channel->OfferMsg.MonitorAllocated) { + /* Each u32 represents 32 channels */ + clear_bit(Channel->OfferMsg.ChildRelId & 31, + (unsigned long *)gVmbusConnection.SendInterruptPage + + (Channel->OfferMsg.ChildRelId >> 5)); + + monitorPage = + (struct hv_monitor_page *)gVmbusConnection.MonitorPages; + monitorPage++; /* Get the child to parent monitor page */ + + clear_bit(Channel->MonitorBit, + (unsigned long *)&monitorPage->TriggerGroup + [Channel->MonitorGroup].Pending); + } + + DPRINT_EXIT(VMBUS); +} + +#endif +/* + * VmbusChannelGetDebugInfo -Retrieve various channel debug info + */ +void VmbusChannelGetDebugInfo(struct vmbus_channel *Channel, + struct vmbus_channel_debug_info *DebugInfo) +{ + struct hv_monitor_page *monitorPage; + u8 monitorGroup = (u8)Channel->OfferMsg.MonitorId / 32; + u8 monitorOffset = (u8)Channel->OfferMsg.MonitorId % 32; + /* u32 monitorBit = 1 << monitorOffset; */ + + DebugInfo->RelId = Channel->OfferMsg.ChildRelId; + DebugInfo->State = Channel->State; + memcpy(&DebugInfo->InterfaceType, + &Channel->OfferMsg.Offer.InterfaceType, sizeof(struct hv_guid)); + memcpy(&DebugInfo->InterfaceInstance, + &Channel->OfferMsg.Offer.InterfaceInstance, + sizeof(struct hv_guid)); + + monitorPage = (struct hv_monitor_page *)gVmbusConnection.MonitorPages; + + DebugInfo->MonitorId = Channel->OfferMsg.MonitorId; + + DebugInfo->ServerMonitorPending = + monitorPage->TriggerGroup[monitorGroup].Pending; + DebugInfo->ServerMonitorLatency = + monitorPage->Latency[monitorGroup][monitorOffset]; + DebugInfo->ServerMonitorConnectionId = + monitorPage->Parameter[monitorGroup] + [monitorOffset].ConnectionId.u.Id; + + monitorPage++; + + DebugInfo->ClientMonitorPending = + monitorPage->TriggerGroup[monitorGroup].Pending; + DebugInfo->ClientMonitorLatency = + monitorPage->Latency[monitorGroup][monitorOffset]; + DebugInfo->ClientMonitorConnectionId = + monitorPage->Parameter[monitorGroup] + [monitorOffset].ConnectionId.u.Id; + + RingBufferGetDebugInfo(&Channel->Inbound, &DebugInfo->Inbound); + RingBufferGetDebugInfo(&Channel->Outbound, &DebugInfo->Outbound); +} + +/* + * VmbusChannelOpen - Open the specified channel. + */ +int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, + u32 RecvRingBufferSize, void *UserData, u32 UserDataLen, + void (*OnChannelCallback)(void *context), void *Context) +{ + struct vmbus_channel_open_channel *openMsg; + struct vmbus_channel_msginfo *openInfo = NULL; + void *in, *out; + unsigned long flags; + int ret, err = 0; + + DPRINT_ENTER(VMBUS); + + /* Aligned to page size */ + /* ASSERT(!(SendRingBufferSize & (PAGE_SIZE - 1))); */ + /* ASSERT(!(RecvRingBufferSize & (PAGE_SIZE - 1))); */ + + NewChannel->OnChannelCallback = OnChannelCallback; + NewChannel->ChannelCallbackContext = Context; + + /* Allocate the ring buffer */ + out = osd_PageAlloc((SendRingBufferSize + RecvRingBufferSize) + >> PAGE_SHIFT); + if (!out) + return -ENOMEM; + + /* ASSERT(((unsigned long)out & (PAGE_SIZE-1)) == 0); */ + + in = (void *)((unsigned long)out + SendRingBufferSize); + + NewChannel->RingBufferPages = out; + NewChannel->RingBufferPageCount = (SendRingBufferSize + + RecvRingBufferSize) >> PAGE_SHIFT; + + ret = RingBufferInit(&NewChannel->Outbound, out, SendRingBufferSize); + if (!ret) { + err = ret; + goto errorout; + } + + ret = RingBufferInit(&NewChannel->Inbound, in, RecvRingBufferSize); + if (!ret) { + err = ret; + goto errorout; + } + + + /* Establish the gpadl for the ring buffer */ + DPRINT_DBG(VMBUS, "Establishing ring buffer's gpadl for channel %p...", + NewChannel); + + NewChannel->RingBufferGpadlHandle = 0; + + ret = VmbusChannelEstablishGpadl(NewChannel, + NewChannel->Outbound.RingBuffer, + SendRingBufferSize + + RecvRingBufferSize, + &NewChannel->RingBufferGpadlHandle); + + if (!ret) { + err = ret; + goto errorout; + } + + DPRINT_DBG(VMBUS, "channel %p ", + NewChannel, NewChannel->OfferMsg.ChildRelId, + NewChannel->RingBufferGpadlHandle, + NewChannel->Outbound.RingBuffer, + NewChannel->Outbound.RingSize, + NewChannel->Inbound.RingBuffer, + NewChannel->Inbound.RingSize, + SendRingBufferSize); + + /* Create and init the channel open message */ + openInfo = kmalloc(sizeof(*openInfo) + + sizeof(struct vmbus_channel_open_channel), + GFP_KERNEL); + if (!openInfo) { + err = -ENOMEM; + goto errorout; + } + + openInfo->WaitEvent = osd_WaitEventCreate(); + if (!openInfo->WaitEvent) { + err = -ENOMEM; + goto errorout; + } + + openMsg = (struct vmbus_channel_open_channel *)openInfo->Msg; + openMsg->Header.MessageType = ChannelMessageOpenChannel; + openMsg->OpenId = NewChannel->OfferMsg.ChildRelId; /* FIXME */ + openMsg->ChildRelId = NewChannel->OfferMsg.ChildRelId; + openMsg->RingBufferGpadlHandle = NewChannel->RingBufferGpadlHandle; + openMsg->DownstreamRingBufferPageOffset = SendRingBufferSize >> + PAGE_SHIFT; + openMsg->ServerContextAreaGpadlHandle = 0; /* TODO */ + + if (UserDataLen > MAX_USER_DEFINED_BYTES) { + err = -EINVAL; + goto errorout; + } + + if (UserDataLen) + memcpy(openMsg->UserData, UserData, UserDataLen); + + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + list_add_tail(&openInfo->MsgListEntry, + &gVmbusConnection.ChannelMsgList); + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + DPRINT_DBG(VMBUS, "Sending channel open msg..."); + + ret = VmbusPostMessage(openMsg, + sizeof(struct vmbus_channel_open_channel)); + if (ret != 0) { + DPRINT_ERR(VMBUS, "unable to open channel - %d", ret); + goto Cleanup; + } + + /* FIXME: Need to time-out here */ + osd_WaitEventWait(openInfo->WaitEvent); + + if (openInfo->Response.OpenResult.Status == 0) + DPRINT_INFO(VMBUS, "channel <%p> open success!!", NewChannel); + else + DPRINT_INFO(VMBUS, "channel <%p> open failed - %d!!", + NewChannel, openInfo->Response.OpenResult.Status); + +Cleanup: + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + list_del(&openInfo->MsgListEntry); + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + kfree(openInfo->WaitEvent); + kfree(openInfo); + + DPRINT_EXIT(VMBUS); + + return 0; + +errorout: + RingBufferCleanup(&NewChannel->Outbound); + RingBufferCleanup(&NewChannel->Inbound); + osd_PageFree(out, (SendRingBufferSize + RecvRingBufferSize) + >> PAGE_SHIFT); + kfree(openInfo); + return err; +} + +/* + * DumpGpadlBody - Dump the gpadl body message to the console for + * debugging purposes. + */ +static void DumpGpadlBody(struct vmbus_channel_gpadl_body *Gpadl, u32 Len) +{ + int i; + int pfnCount; + + pfnCount = (Len - sizeof(struct vmbus_channel_gpadl_body)) / + sizeof(u64); + DPRINT_DBG(VMBUS, "gpadl body - len %d pfn count %d", Len, pfnCount); + + for (i = 0; i < pfnCount; i++) + DPRINT_DBG(VMBUS, "gpadl body - %d) pfn %llu", + i, Gpadl->Pfn[i]); +} + +/* + * DumpGpadlHeader - Dump the gpadl header message to the console for + * debugging purposes. + */ +static void DumpGpadlHeader(struct vmbus_channel_gpadl_header *Gpadl) +{ + int i, j; + int pageCount; + + DPRINT_DBG(VMBUS, + "gpadl header - relid %d, range count %d, range buflen %d", + Gpadl->ChildRelId, Gpadl->RangeCount, Gpadl->RangeBufLen); + for (i = 0; i < Gpadl->RangeCount; i++) { + pageCount = Gpadl->Range[i].ByteCount >> PAGE_SHIFT; + pageCount = (pageCount > 26) ? 26 : pageCount; + + DPRINT_DBG(VMBUS, "gpadl range %d - len %d offset %d " + "page count %d", i, Gpadl->Range[i].ByteCount, + Gpadl->Range[i].ByteOffset, pageCount); + + for (j = 0; j < pageCount; j++) + DPRINT_DBG(VMBUS, "%d) pfn %llu", j, + Gpadl->Range[i].PfnArray[j]); + } +} + +/* + * VmbusChannelCreateGpadlHeader - Creates a gpadl for the specified buffer + */ +static int VmbusChannelCreateGpadlHeader(void *Kbuffer, u32 Size, + struct vmbus_channel_msginfo **MsgInfo, + u32 *MessageCount) +{ + int i; + int pageCount; + unsigned long long pfn; + struct vmbus_channel_gpadl_header *gpaHeader; + struct vmbus_channel_gpadl_body *gpadlBody; + struct vmbus_channel_msginfo *msgHeader; + struct vmbus_channel_msginfo *msgBody = NULL; + u32 msgSize; + + int pfnSum, pfnCount, pfnLeft, pfnCurr, pfnSize; + + /* ASSERT((kbuffer & (PAGE_SIZE-1)) == 0); */ + /* ASSERT((Size & (PAGE_SIZE-1)) == 0); */ + + pageCount = Size >> PAGE_SHIFT; + pfn = virt_to_phys(Kbuffer) >> PAGE_SHIFT; + + /* do we need a gpadl body msg */ + pfnSize = MAX_SIZE_CHANNEL_MESSAGE - + sizeof(struct vmbus_channel_gpadl_header) - + sizeof(struct gpa_range); + pfnCount = pfnSize / sizeof(u64); + + if (pageCount > pfnCount) { + /* we need a gpadl body */ + /* fill in the header */ + msgSize = sizeof(struct vmbus_channel_msginfo) + + sizeof(struct vmbus_channel_gpadl_header) + + sizeof(struct gpa_range) + pfnCount * sizeof(u64); + msgHeader = kzalloc(msgSize, GFP_KERNEL); + if (!msgHeader) + goto nomem; + + INIT_LIST_HEAD(&msgHeader->SubMsgList); + msgHeader->MessageSize = msgSize; + + gpaHeader = (struct vmbus_channel_gpadl_header *)msgHeader->Msg; + gpaHeader->RangeCount = 1; + gpaHeader->RangeBufLen = sizeof(struct gpa_range) + + pageCount * sizeof(u64); + gpaHeader->Range[0].ByteOffset = 0; + gpaHeader->Range[0].ByteCount = Size; + for (i = 0; i < pfnCount; i++) + gpaHeader->Range[0].PfnArray[i] = pfn+i; + *MsgInfo = msgHeader; + *MessageCount = 1; + + pfnSum = pfnCount; + pfnLeft = pageCount - pfnCount; + + /* how many pfns can we fit */ + pfnSize = MAX_SIZE_CHANNEL_MESSAGE - + sizeof(struct vmbus_channel_gpadl_body); + pfnCount = pfnSize / sizeof(u64); + + /* fill in the body */ + while (pfnLeft) { + if (pfnLeft > pfnCount) + pfnCurr = pfnCount; + else + pfnCurr = pfnLeft; + + msgSize = sizeof(struct vmbus_channel_msginfo) + + sizeof(struct vmbus_channel_gpadl_body) + + pfnCurr * sizeof(u64); + msgBody = kzalloc(msgSize, GFP_KERNEL); + /* FIXME: we probably need to more if this fails */ + if (!msgBody) + goto nomem; + msgBody->MessageSize = msgSize; + (*MessageCount)++; + gpadlBody = + (struct vmbus_channel_gpadl_body *)msgBody->Msg; + + /* + * FIXME: + * Gpadl is u32 and we are using a pointer which could + * be 64-bit + */ + /* gpadlBody->Gpadl = kbuffer; */ + for (i = 0; i < pfnCurr; i++) + gpadlBody->Pfn[i] = pfn + pfnSum + i; + + /* add to msg header */ + list_add_tail(&msgBody->MsgListEntry, + &msgHeader->SubMsgList); + pfnSum += pfnCurr; + pfnLeft -= pfnCurr; + } + } else { + /* everything fits in a header */ + msgSize = sizeof(struct vmbus_channel_msginfo) + + sizeof(struct vmbus_channel_gpadl_header) + + sizeof(struct gpa_range) + pageCount * sizeof(u64); + msgHeader = kzalloc(msgSize, GFP_KERNEL); + msgHeader->MessageSize = msgSize; + + gpaHeader = (struct vmbus_channel_gpadl_header *)msgHeader->Msg; + gpaHeader->RangeCount = 1; + gpaHeader->RangeBufLen = sizeof(struct gpa_range) + + pageCount * sizeof(u64); + gpaHeader->Range[0].ByteOffset = 0; + gpaHeader->Range[0].ByteCount = Size; + for (i = 0; i < pageCount; i++) + gpaHeader->Range[0].PfnArray[i] = pfn+i; + + *MsgInfo = msgHeader; + *MessageCount = 1; + } + + return 0; +nomem: + kfree(msgHeader); + kfree(msgBody); + return -ENOMEM; +} + +/* + * VmbusChannelEstablishGpadl - Estabish a GPADL for the specified buffer + * + * @Channel: a channel + * @Kbuffer: from kmalloc + * @Size: page-size multiple + * @GpadlHandle: some funky thing + */ +int VmbusChannelEstablishGpadl(struct vmbus_channel *Channel, void *Kbuffer, + u32 Size, u32 *GpadlHandle) +{ + struct vmbus_channel_gpadl_header *gpadlMsg; + struct vmbus_channel_gpadl_body *gpadlBody; + /* struct vmbus_channel_gpadl_created *gpadlCreated; */ + struct vmbus_channel_msginfo *msgInfo = NULL; + struct vmbus_channel_msginfo *subMsgInfo; + u32 msgCount; + struct list_head *curr; + u32 nextGpadlHandle; + unsigned long flags; + int ret = 0; + + DPRINT_ENTER(VMBUS); + + nextGpadlHandle = atomic_read(&gVmbusConnection.NextGpadlHandle); + atomic_inc(&gVmbusConnection.NextGpadlHandle); + + ret = VmbusChannelCreateGpadlHeader(Kbuffer, Size, &msgInfo, &msgCount); + if (ret) + return ret; + + msgInfo->WaitEvent = osd_WaitEventCreate(); + if (!msgInfo->WaitEvent) { + ret = -ENOMEM; + goto Cleanup; + } + + gpadlMsg = (struct vmbus_channel_gpadl_header *)msgInfo->Msg; + gpadlMsg->Header.MessageType = ChannelMessageGpadlHeader; + gpadlMsg->ChildRelId = Channel->OfferMsg.ChildRelId; + gpadlMsg->Gpadl = nextGpadlHandle; + + DumpGpadlHeader(gpadlMsg); + + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + list_add_tail(&msgInfo->MsgListEntry, + &gVmbusConnection.ChannelMsgList); + + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + DPRINT_DBG(VMBUS, "buffer %p, size %d msg cnt %d", + Kbuffer, Size, msgCount); + + DPRINT_DBG(VMBUS, "Sending GPADL Header - len %zd", + msgInfo->MessageSize - sizeof(*msgInfo)); + + ret = VmbusPostMessage(gpadlMsg, msgInfo->MessageSize - + sizeof(*msgInfo)); + if (ret != 0) { + DPRINT_ERR(VMBUS, "Unable to open channel - %d", ret); + goto Cleanup; + } + + if (msgCount > 1) { + list_for_each(curr, &msgInfo->SubMsgList) { + + /* FIXME: should this use list_entry() instead ? */ + subMsgInfo = (struct vmbus_channel_msginfo *)curr; + gpadlBody = + (struct vmbus_channel_gpadl_body *)subMsgInfo->Msg; + + gpadlBody->Header.MessageType = ChannelMessageGpadlBody; + gpadlBody->Gpadl = nextGpadlHandle; + + DPRINT_DBG(VMBUS, "Sending GPADL Body - len %zd", + subMsgInfo->MessageSize - + sizeof(*subMsgInfo)); + + DumpGpadlBody(gpadlBody, subMsgInfo->MessageSize - + sizeof(*subMsgInfo)); + ret = VmbusPostMessage(gpadlBody, + subMsgInfo->MessageSize - + sizeof(*subMsgInfo)); + if (!ret) + goto Cleanup; + + } + } + osd_WaitEventWait(msgInfo->WaitEvent); + + /* At this point, we received the gpadl created msg */ + DPRINT_DBG(VMBUS, "Received GPADL created " + "(relid %d, status %d handle %x)", + Channel->OfferMsg.ChildRelId, + msgInfo->Response.GpadlCreated.CreationStatus, + gpadlMsg->Gpadl); + + *GpadlHandle = gpadlMsg->Gpadl; + +Cleanup: + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + list_del(&msgInfo->MsgListEntry); + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + kfree(msgInfo->WaitEvent); + kfree(msgInfo); + + DPRINT_EXIT(VMBUS); + + return ret; +} + +/* + * VmbusChannelTeardownGpadl -Teardown the specified GPADL handle + */ +int VmbusChannelTeardownGpadl(struct vmbus_channel *Channel, u32 GpadlHandle) +{ + struct vmbus_channel_gpadl_teardown *msg; + struct vmbus_channel_msginfo *info; + unsigned long flags; + int ret; + + DPRINT_ENTER(VMBUS); + + /* ASSERT(GpadlHandle != 0); */ + + info = kmalloc(sizeof(*info) + + sizeof(struct vmbus_channel_gpadl_teardown), GFP_KERNEL); + if (!info) + return -ENOMEM; + + info->WaitEvent = osd_WaitEventCreate(); + if (!info->WaitEvent) { + kfree(info); + return -ENOMEM; + } + + msg = (struct vmbus_channel_gpadl_teardown *)info->Msg; + + msg->Header.MessageType = ChannelMessageGpadlTeardown; + msg->ChildRelId = Channel->OfferMsg.ChildRelId; + msg->Gpadl = GpadlHandle; + + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + list_add_tail(&info->MsgListEntry, + &gVmbusConnection.ChannelMsgList); + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + ret = VmbusPostMessage(msg, + sizeof(struct vmbus_channel_gpadl_teardown)); + if (ret != 0) { + /* TODO: */ + /* something... */ + } + + osd_WaitEventWait(info->WaitEvent); + + /* Received a torndown response */ + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + list_del(&info->MsgListEntry); + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + kfree(info->WaitEvent); + kfree(info); + + DPRINT_EXIT(VMBUS); + + return ret; +} + +/* + * VmbusChannelClose - Close the specified channel + */ +void VmbusChannelClose(struct vmbus_channel *Channel) +{ + struct vmbus_channel_close_channel *msg; + struct vmbus_channel_msginfo *info; + unsigned long flags; + int ret; + + DPRINT_ENTER(VMBUS); + + /* Stop callback and cancel the timer asap */ + Channel->OnChannelCallback = NULL; + del_timer_sync(&Channel->poll_timer); + + /* Send a closing message */ + info = kmalloc(sizeof(*info) + + sizeof(struct vmbus_channel_close_channel), GFP_KERNEL); + /* FIXME: can't do anything other than return here because the + * function is void */ + if (!info) + return; + + /* info->waitEvent = osd_WaitEventCreate(); */ + + msg = (struct vmbus_channel_close_channel *)info->Msg; + msg->Header.MessageType = ChannelMessageCloseChannel; + msg->ChildRelId = Channel->OfferMsg.ChildRelId; + + ret = VmbusPostMessage(msg, sizeof(struct vmbus_channel_close_channel)); + if (ret != 0) { + /* TODO: */ + /* something... */ + } + + /* Tear down the gpadl for the channel's ring buffer */ + if (Channel->RingBufferGpadlHandle) + VmbusChannelTeardownGpadl(Channel, + Channel->RingBufferGpadlHandle); + + /* TODO: Send a msg to release the childRelId */ + + /* Cleanup the ring buffers for this channel */ + RingBufferCleanup(&Channel->Outbound); + RingBufferCleanup(&Channel->Inbound); + + osd_PageFree(Channel->RingBufferPages, Channel->RingBufferPageCount); + + kfree(info); + + /* + * If we are closing the channel during an error path in + * opening the channel, don't free the channel since the + * caller will free the channel + */ + + if (Channel->State == CHANNEL_OPEN_STATE) { + spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); + list_del(&Channel->ListEntry); + spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); + + FreeVmbusChannel(Channel); + } + + DPRINT_EXIT(VMBUS); +} + +/** + * VmbusChannelSendPacket() - Send the specified buffer on the given channel + * @Channel: Pointer to vmbus_channel structure. + * @Buffer: Pointer to the buffer you want to receive the data into. + * @BufferLen: Maximum size of what the the buffer will hold + * @RequestId: Identifier of the request + * @vmbus_packet_type: Type of packet that is being send e.g. negotiate, time + * packet etc. + * + * Sends data in @Buffer directly to hyper-v via the vmbus + * This will send the data unparsed to hyper-v. + * + * Mainly used by Hyper-V drivers. + */ +int VmbusChannelSendPacket(struct vmbus_channel *Channel, const void *Buffer, + u32 BufferLen, u64 RequestId, + enum vmbus_packet_type Type, u32 Flags) +{ + struct vmpacket_descriptor desc; + u32 packetLen = sizeof(struct vmpacket_descriptor) + BufferLen; + u32 packetLenAligned = ALIGN_UP(packetLen, sizeof(u64)); + struct scatterlist bufferList[3]; + u64 alignedData = 0; + int ret; + + DPRINT_ENTER(VMBUS); + DPRINT_DBG(VMBUS, "channel %p buffer %p len %d", + Channel, Buffer, BufferLen); + + DumpVmbusChannel(Channel); + + /* ASSERT((packetLenAligned - packetLen) < sizeof(u64)); */ + + /* Setup the descriptor */ + desc.Type = Type; /* VmbusPacketTypeDataInBand; */ + desc.Flags = Flags; /* VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED; */ + /* in 8-bytes granularity */ + desc.DataOffset8 = sizeof(struct vmpacket_descriptor) >> 3; + desc.Length8 = (u16)(packetLenAligned >> 3); + desc.TransactionId = RequestId; + + sg_init_table(bufferList, 3); + sg_set_buf(&bufferList[0], &desc, sizeof(struct vmpacket_descriptor)); + sg_set_buf(&bufferList[1], Buffer, BufferLen); + sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen); + + ret = RingBufferWrite(&Channel->Outbound, bufferList, 3); + + /* TODO: We should determine if this is optional */ + if (ret == 0 && !GetRingBufferInterruptMask(&Channel->Outbound)) + VmbusChannelSetEvent(Channel); + + DPRINT_EXIT(VMBUS); + + return ret; +} +EXPORT_SYMBOL(VmbusChannelSendPacket); + +/* + * VmbusChannelSendPacketPageBuffer - Send a range of single-page buffer + * packets using a GPADL Direct packet type. + */ +int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *Channel, + struct hv_page_buffer PageBuffers[], + u32 PageCount, void *Buffer, u32 BufferLen, + u64 RequestId) +{ + int ret; + int i; + struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER desc; + u32 descSize; + u32 packetLen; + u32 packetLenAligned; + struct scatterlist bufferList[3]; + u64 alignedData = 0; + + DPRINT_ENTER(VMBUS); + + if (PageCount > MAX_PAGE_BUFFER_COUNT) + return -EINVAL; + + DumpVmbusChannel(Channel); + + /* + * Adjust the size down since VMBUS_CHANNEL_PACKET_PAGE_BUFFER is the + * largest size we support + */ + descSize = sizeof(struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER) - + ((MAX_PAGE_BUFFER_COUNT - PageCount) * + sizeof(struct hv_page_buffer)); + packetLen = descSize + BufferLen; + packetLenAligned = ALIGN_UP(packetLen, sizeof(u64)); + + /* ASSERT((packetLenAligned - packetLen) < sizeof(u64)); */ + + /* Setup the descriptor */ + desc.Type = VmbusPacketTypeDataUsingGpaDirect; + desc.Flags = VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED; + desc.DataOffset8 = descSize >> 3; /* in 8-bytes grandularity */ + desc.Length8 = (u16)(packetLenAligned >> 3); + desc.TransactionId = RequestId; + desc.RangeCount = PageCount; + + for (i = 0; i < PageCount; i++) { + desc.Range[i].Length = PageBuffers[i].Length; + desc.Range[i].Offset = PageBuffers[i].Offset; + desc.Range[i].Pfn = PageBuffers[i].Pfn; + } + + sg_init_table(bufferList, 3); + sg_set_buf(&bufferList[0], &desc, descSize); + sg_set_buf(&bufferList[1], Buffer, BufferLen); + sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen); + + ret = RingBufferWrite(&Channel->Outbound, bufferList, 3); + + /* TODO: We should determine if this is optional */ + if (ret == 0 && !GetRingBufferInterruptMask(&Channel->Outbound)) + VmbusChannelSetEvent(Channel); + + DPRINT_EXIT(VMBUS); + + return ret; +} + +/* + * VmbusChannelSendPacketMultiPageBuffer - Send a multi-page buffer packet + * using a GPADL Direct packet type. + */ +int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *Channel, + struct hv_multipage_buffer *MultiPageBuffer, + void *Buffer, u32 BufferLen, u64 RequestId) +{ + int ret; + struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER desc; + u32 descSize; + u32 packetLen; + u32 packetLenAligned; + struct scatterlist bufferList[3]; + u64 alignedData = 0; + u32 PfnCount = NUM_PAGES_SPANNED(MultiPageBuffer->Offset, + MultiPageBuffer->Length); + + DPRINT_ENTER(VMBUS); + + DumpVmbusChannel(Channel); + + DPRINT_DBG(VMBUS, "data buffer - offset %u len %u pfn count %u", + MultiPageBuffer->Offset, MultiPageBuffer->Length, PfnCount); + + if ((PfnCount < 0) || (PfnCount > MAX_MULTIPAGE_BUFFER_COUNT)) + return -EINVAL; + + /* + * Adjust the size down since VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER is + * the largest size we support + */ + descSize = sizeof(struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER) - + ((MAX_MULTIPAGE_BUFFER_COUNT - PfnCount) * + sizeof(u64)); + packetLen = descSize + BufferLen; + packetLenAligned = ALIGN_UP(packetLen, sizeof(u64)); + + /* ASSERT((packetLenAligned - packetLen) < sizeof(u64)); */ + + /* Setup the descriptor */ + desc.Type = VmbusPacketTypeDataUsingGpaDirect; + desc.Flags = VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED; + desc.DataOffset8 = descSize >> 3; /* in 8-bytes grandularity */ + desc.Length8 = (u16)(packetLenAligned >> 3); + desc.TransactionId = RequestId; + desc.RangeCount = 1; + + desc.Range.Length = MultiPageBuffer->Length; + desc.Range.Offset = MultiPageBuffer->Offset; + + memcpy(desc.Range.PfnArray, MultiPageBuffer->PfnArray, + PfnCount * sizeof(u64)); + + sg_init_table(bufferList, 3); + sg_set_buf(&bufferList[0], &desc, descSize); + sg_set_buf(&bufferList[1], Buffer, BufferLen); + sg_set_buf(&bufferList[2], &alignedData, packetLenAligned - packetLen); + + ret = RingBufferWrite(&Channel->Outbound, bufferList, 3); + + /* TODO: We should determine if this is optional */ + if (ret == 0 && !GetRingBufferInterruptMask(&Channel->Outbound)) + VmbusChannelSetEvent(Channel); + + DPRINT_EXIT(VMBUS); + + return ret; +} + + +/** + * VmbusChannelRecvPacket() - Retrieve the user packet on the specified channel + * @Channel: Pointer to vmbus_channel structure. + * @Buffer: Pointer to the buffer you want to receive the data into. + * @BufferLen: Maximum size of what the the buffer will hold + * @BufferActualLen: The actual size of the data after it was received + * @RequestId: Identifier of the request + * + * Receives directly from the hyper-v vmbus and puts the data it received + * into Buffer. This will receive the data unparsed from hyper-v. + * + * Mainly used by Hyper-V drivers. + */ +int VmbusChannelRecvPacket(struct vmbus_channel *Channel, void *Buffer, + u32 BufferLen, u32 *BufferActualLen, u64 *RequestId) +{ + struct vmpacket_descriptor desc; + u32 packetLen; + u32 userLen; + int ret; + unsigned long flags; + + DPRINT_ENTER(VMBUS); + + *BufferActualLen = 0; + *RequestId = 0; + + spin_lock_irqsave(&Channel->inbound_lock, flags); + + ret = RingBufferPeek(&Channel->Inbound, &desc, + sizeof(struct vmpacket_descriptor)); + if (ret != 0) { + spin_unlock_irqrestore(&Channel->inbound_lock, flags); + + /* DPRINT_DBG(VMBUS, "nothing to read!!"); */ + DPRINT_EXIT(VMBUS); + return 0; + } + + /* VmbusChannelClearEvent(Channel); */ + + packetLen = desc.Length8 << 3; + userLen = packetLen - (desc.DataOffset8 << 3); + /* ASSERT(userLen > 0); */ + + DPRINT_DBG(VMBUS, "packet received on channel %p relid %d ", + Channel, Channel->OfferMsg.ChildRelId, desc.Type, + desc.Flags, desc.TransactionId, packetLen, userLen); + + *BufferActualLen = userLen; + + if (userLen > BufferLen) { + spin_unlock_irqrestore(&Channel->inbound_lock, flags); + + DPRINT_ERR(VMBUS, "buffer too small - got %d needs %d", + BufferLen, userLen); + DPRINT_EXIT(VMBUS); + + return -1; + } + + *RequestId = desc.TransactionId; + + /* Copy over the packet to the user buffer */ + ret = RingBufferRead(&Channel->Inbound, Buffer, userLen, + (desc.DataOffset8 << 3)); + + spin_unlock_irqrestore(&Channel->inbound_lock, flags); + + DPRINT_EXIT(VMBUS); + + return 0; +} +EXPORT_SYMBOL(VmbusChannelRecvPacket); + +/* + * VmbusChannelRecvPacketRaw - Retrieve the raw packet on the specified channel + */ +int VmbusChannelRecvPacketRaw(struct vmbus_channel *Channel, void *Buffer, + u32 BufferLen, u32 *BufferActualLen, + u64 *RequestId) +{ + struct vmpacket_descriptor desc; + u32 packetLen; + u32 userLen; + int ret; + unsigned long flags; + + DPRINT_ENTER(VMBUS); + + *BufferActualLen = 0; + *RequestId = 0; + + spin_lock_irqsave(&Channel->inbound_lock, flags); + + ret = RingBufferPeek(&Channel->Inbound, &desc, + sizeof(struct vmpacket_descriptor)); + if (ret != 0) { + spin_unlock_irqrestore(&Channel->inbound_lock, flags); + + /* DPRINT_DBG(VMBUS, "nothing to read!!"); */ + DPRINT_EXIT(VMBUS); + return 0; + } + + /* VmbusChannelClearEvent(Channel); */ + + packetLen = desc.Length8 << 3; + userLen = packetLen - (desc.DataOffset8 << 3); + + DPRINT_DBG(VMBUS, "packet received on channel %p relid %d ", + Channel, Channel->OfferMsg.ChildRelId, desc.Type, + desc.Flags, desc.TransactionId, packetLen, userLen); + + *BufferActualLen = packetLen; + + if (packetLen > BufferLen) { + spin_unlock_irqrestore(&Channel->inbound_lock, flags); + + DPRINT_ERR(VMBUS, "buffer too small - needed %d bytes but " + "got space for only %d bytes", packetLen, BufferLen); + DPRINT_EXIT(VMBUS); + return -2; + } + + *RequestId = desc.TransactionId; + + /* Copy over the entire packet to the user buffer */ + ret = RingBufferRead(&Channel->Inbound, Buffer, packetLen, 0); + + spin_unlock_irqrestore(&Channel->inbound_lock, flags); + + DPRINT_EXIT(VMBUS); + + return 0; +} + +/* + * VmbusChannelOnChannelEvent - Channel event callback + */ +void VmbusChannelOnChannelEvent(struct vmbus_channel *Channel) +{ + DumpVmbusChannel(Channel); + /* ASSERT(Channel->OnChannelCallback); */ + + Channel->OnChannelCallback(Channel->ChannelCallbackContext); + + mod_timer(&Channel->poll_timer, jiffies + usecs_to_jiffies(100)); +} + +/* + * VmbusChannelOnTimer - Timer event callback + */ +void VmbusChannelOnTimer(unsigned long data) +{ + struct vmbus_channel *channel = (struct vmbus_channel *)data; + + if (channel->OnChannelCallback) + channel->OnChannelCallback(channel->ChannelCallbackContext); +} + +/* + * DumpVmbusChannel - Dump vmbus channel info to the console + */ +static void DumpVmbusChannel(struct vmbus_channel *Channel) +{ + DPRINT_DBG(VMBUS, "Channel (%d)", Channel->OfferMsg.ChildRelId); + DumpRingInfo(&Channel->Outbound, "Outbound "); + DumpRingInfo(&Channel->Inbound, "Inbound "); +} diff --git a/drivers/staging/hv/channel.h b/drivers/staging/hv/channel.h new file mode 100644 index 0000000..6b283ed --- /dev/null +++ b/drivers/staging/hv/channel.h @@ -0,0 +1,112 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _CHANNEL_H_ +#define _CHANNEL_H_ + +#include "ChannelMgmt.h" + +/* The format must be the same as struct vmdata_gpa_direct */ +struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER { + u16 Type; + u16 DataOffset8; + u16 Length8; + u16 Flags; + u64 TransactionId; + u32 Reserved; + u32 RangeCount; + struct hv_page_buffer Range[MAX_PAGE_BUFFER_COUNT]; +} __attribute__((packed)); + +/* The format must be the same as struct vmdata_gpa_direct */ +struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER { + u16 Type; + u16 DataOffset8; + u16 Length8; + u16 Flags; + u64 TransactionId; + u32 Reserved; + u32 RangeCount; /* Always 1 in this case */ + struct hv_multipage_buffer Range; +} __attribute__((packed)); + + +extern int VmbusChannelOpen(struct vmbus_channel *channel, + u32 SendRingBufferSize, + u32 RecvRingBufferSize, + void *UserData, + u32 UserDataLen, + void(*OnChannelCallback)(void *context), + void *Context); + +extern void VmbusChannelClose(struct vmbus_channel *channel); + +extern int VmbusChannelSendPacket(struct vmbus_channel *channel, + const void *Buffer, + u32 BufferLen, + u64 RequestId, + enum vmbus_packet_type Type, + u32 Flags); + +extern int VmbusChannelSendPacketPageBuffer(struct vmbus_channel *channel, + struct hv_page_buffer PageBuffers[], + u32 PageCount, + void *Buffer, + u32 BufferLen, + u64 RequestId); + +extern int VmbusChannelSendPacketMultiPageBuffer(struct vmbus_channel *channel, + struct hv_multipage_buffer *mpb, + void *Buffer, + u32 BufferLen, + u64 RequestId); + +extern int VmbusChannelEstablishGpadl(struct vmbus_channel *channel, + void *Kbuffer, + u32 Size, + u32 *GpadlHandle); + +extern int VmbusChannelTeardownGpadl(struct vmbus_channel *channel, + u32 GpadlHandle); + +extern int VmbusChannelRecvPacket(struct vmbus_channel *channel, + void *Buffer, + u32 BufferLen, + u32 *BufferActualLen, + u64 *RequestId); + +extern int VmbusChannelRecvPacketRaw(struct vmbus_channel *channel, + void *Buffer, + u32 BufferLen, + u32 *BufferActualLen, + u64 *RequestId); + +extern void VmbusChannelOnChannelEvent(struct vmbus_channel *channel); + +extern void VmbusChannelGetDebugInfo(struct vmbus_channel *channel, + struct vmbus_channel_debug_info *debug); + +extern void VmbusChannelOnTimer(unsigned long data); + +#endif /* _CHANNEL_H_ */ diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c index d3fc33e..6ccaea2 100644 --- a/drivers/staging/hv/hv_utils.c +++ b/drivers/staging/hv/hv_utils.c @@ -31,7 +31,7 @@ #include "VmbusPacketFormat.h" #include "VmbusChannelInterface.h" #include "VersionInfo.h" -#include "Channel.h" +#include "channel.h" #include "VmbusPrivate.h" #include "VmbusApi.h" #include "utils.h" -- cgit v0.10.2 From 55e9643e6c486b589279576877838ffd8ed04a68 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:19:40 -0700 Subject: Staging: hv: rename Connection.c to connection.c Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Connection.c b/drivers/staging/hv/Connection.c deleted file mode 100644 index 3a01d3c..0000000 --- a/drivers/staging/hv/Connection.c +++ /dev/null @@ -1,349 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ -#include -#include -#include -#include -#include "osd.h" -#include "logging.h" -#include "VmbusPrivate.h" - - -struct VMBUS_CONNECTION gVmbusConnection = { - .ConnectState = Disconnected, - .NextGpadlHandle = ATOMIC_INIT(0xE1E10), -}; - -/* - * VmbusConnect - Sends a connect request on the partition service connection - */ -int VmbusConnect(void) -{ - int ret = 0; - struct vmbus_channel_msginfo *msgInfo = NULL; - struct vmbus_channel_initiate_contact *msg; - unsigned long flags; - - DPRINT_ENTER(VMBUS); - - /* Make sure we are not connecting or connected */ - if (gVmbusConnection.ConnectState != Disconnected) - return -1; - - /* Initialize the vmbus connection */ - gVmbusConnection.ConnectState = Connecting; - gVmbusConnection.WorkQueue = create_workqueue("hv_vmbus_con"); - if (!gVmbusConnection.WorkQueue) { - ret = -1; - goto Cleanup; - } - - INIT_LIST_HEAD(&gVmbusConnection.ChannelMsgList); - spin_lock_init(&gVmbusConnection.channelmsg_lock); - - INIT_LIST_HEAD(&gVmbusConnection.ChannelList); - spin_lock_init(&gVmbusConnection.channel_lock); - - /* - * Setup the vmbus event connection for channel interrupt - * abstraction stuff - */ - gVmbusConnection.InterruptPage = osd_PageAlloc(1); - if (gVmbusConnection.InterruptPage == NULL) { - ret = -1; - goto Cleanup; - } - - gVmbusConnection.RecvInterruptPage = gVmbusConnection.InterruptPage; - gVmbusConnection.SendInterruptPage = - (void *)((unsigned long)gVmbusConnection.InterruptPage + - (PAGE_SIZE >> 1)); - - /* - * Setup the monitor notification facility. The 1st page for - * parent->child and the 2nd page for child->parent - */ - gVmbusConnection.MonitorPages = osd_PageAlloc(2); - if (gVmbusConnection.MonitorPages == NULL) { - ret = -1; - goto Cleanup; - } - - msgInfo = kzalloc(sizeof(*msgInfo) + - sizeof(struct vmbus_channel_initiate_contact), - GFP_KERNEL); - if (msgInfo == NULL) { - ret = -ENOMEM; - goto Cleanup; - } - - msgInfo->WaitEvent = osd_WaitEventCreate(); - if (!msgInfo->WaitEvent) { - ret = -ENOMEM; - goto Cleanup; - } - - msg = (struct vmbus_channel_initiate_contact *)msgInfo->Msg; - - msg->Header.MessageType = ChannelMessageInitiateContact; - msg->VMBusVersionRequested = VMBUS_REVISION_NUMBER; - msg->InterruptPage = virt_to_phys(gVmbusConnection.InterruptPage); - msg->MonitorPage1 = virt_to_phys(gVmbusConnection.MonitorPages); - msg->MonitorPage2 = virt_to_phys( - (void *)((unsigned long)gVmbusConnection.MonitorPages + - PAGE_SIZE)); - - /* - * Add to list before we send the request since we may - * receive the response before returning from this routine - */ - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - list_add_tail(&msgInfo->MsgListEntry, - &gVmbusConnection.ChannelMsgList); - - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - DPRINT_DBG(VMBUS, "Vmbus connection - interrupt pfn %llx, " - "monitor1 pfn %llx,, monitor2 pfn %llx", - msg->InterruptPage, msg->MonitorPage1, msg->MonitorPage2); - - DPRINT_DBG(VMBUS, "Sending channel initiate msg..."); - ret = VmbusPostMessage(msg, - sizeof(struct vmbus_channel_initiate_contact)); - if (ret != 0) { - list_del(&msgInfo->MsgListEntry); - goto Cleanup; - } - - /* Wait for the connection response */ - osd_WaitEventWait(msgInfo->WaitEvent); - - list_del(&msgInfo->MsgListEntry); - - /* Check if successful */ - if (msgInfo->Response.VersionResponse.VersionSupported) { - DPRINT_INFO(VMBUS, "Vmbus connected!!"); - gVmbusConnection.ConnectState = Connected; - - } else { - DPRINT_ERR(VMBUS, "Vmbus connection failed!!..." - "current version (%d) not supported", - VMBUS_REVISION_NUMBER); - ret = -1; - goto Cleanup; - } - - kfree(msgInfo->WaitEvent); - kfree(msgInfo); - DPRINT_EXIT(VMBUS); - - return 0; - -Cleanup: - gVmbusConnection.ConnectState = Disconnected; - - if (gVmbusConnection.WorkQueue) - destroy_workqueue(gVmbusConnection.WorkQueue); - - if (gVmbusConnection.InterruptPage) { - osd_PageFree(gVmbusConnection.InterruptPage, 1); - gVmbusConnection.InterruptPage = NULL; - } - - if (gVmbusConnection.MonitorPages) { - osd_PageFree(gVmbusConnection.MonitorPages, 2); - gVmbusConnection.MonitorPages = NULL; - } - - if (msgInfo) { - kfree(msgInfo->WaitEvent); - kfree(msgInfo); - } - - DPRINT_EXIT(VMBUS); - - return ret; -} - -/* - * VmbusDisconnect - Sends a disconnect request on the partition service connection - */ -int VmbusDisconnect(void) -{ - int ret = 0; - struct vmbus_channel_message_header *msg; - - DPRINT_ENTER(VMBUS); - - /* Make sure we are connected */ - if (gVmbusConnection.ConnectState != Connected) - return -1; - - msg = kzalloc(sizeof(struct vmbus_channel_message_header), GFP_KERNEL); - if (!msg) - return -ENOMEM; - - msg->MessageType = ChannelMessageUnload; - - ret = VmbusPostMessage(msg, - sizeof(struct vmbus_channel_message_header)); - if (ret != 0) - goto Cleanup; - - osd_PageFree(gVmbusConnection.InterruptPage, 1); - - /* TODO: iterate thru the msg list and free up */ - destroy_workqueue(gVmbusConnection.WorkQueue); - - gVmbusConnection.ConnectState = Disconnected; - - DPRINT_INFO(VMBUS, "Vmbus disconnected!!"); - -Cleanup: - kfree(msg); - DPRINT_EXIT(VMBUS); - return ret; -} - -/* - * GetChannelFromRelId - Get the channel object given its child relative id (ie channel id) - */ -struct vmbus_channel *GetChannelFromRelId(u32 relId) -{ - struct vmbus_channel *channel; - struct vmbus_channel *foundChannel = NULL; - unsigned long flags; - - spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); - list_for_each_entry(channel, &gVmbusConnection.ChannelList, ListEntry) { - if (channel->OfferMsg.ChildRelId == relId) { - foundChannel = channel; - break; - } - } - spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); - - return foundChannel; -} - -/* - * VmbusProcessChannelEvent - Process a channel event notification - */ -static void VmbusProcessChannelEvent(void *context) -{ - struct vmbus_channel *channel; - u32 relId = (u32)(unsigned long)context; - - /* ASSERT(relId > 0); */ - - /* - * Find the channel based on this relid and invokes the - * channel callback to process the event - */ - channel = GetChannelFromRelId(relId); - - if (channel) { - VmbusChannelOnChannelEvent(channel); - /* - * WorkQueueQueueWorkItem(channel->dataWorkQueue, - * VmbusChannelOnChannelEvent, - * (void*)channel); - */ - } else { - DPRINT_ERR(VMBUS, "channel not found for relid - %d.", relId); - } -} - -/* - * VmbusOnEvents - Handler for events - */ -void VmbusOnEvents(void) -{ - int dword; - int maxdword = MAX_NUM_CHANNELS_SUPPORTED >> 5; - int bit; - int relid; - u32 *recvInterruptPage = gVmbusConnection.RecvInterruptPage; - - DPRINT_ENTER(VMBUS); - - /* Check events */ - if (recvInterruptPage) { - for (dword = 0; dword < maxdword; dword++) { - if (recvInterruptPage[dword]) { - for (bit = 0; bit < 32; bit++) { - if (test_and_clear_bit(bit, (unsigned long *)&recvInterruptPage[dword])) { - relid = (dword << 5) + bit; - DPRINT_DBG(VMBUS, "event detected for relid - %d", relid); - - if (relid == 0) { - /* special case - vmbus channel protocol msg */ - DPRINT_DBG(VMBUS, "invalid relid - %d", relid); - continue; - } else { - /* QueueWorkItem(VmbusProcessEvent, (void*)relid); */ - /* ret = WorkQueueQueueWorkItem(gVmbusConnection.workQueue, VmbusProcessChannelEvent, (void*)relid); */ - VmbusProcessChannelEvent((void *)(unsigned long)relid); - } - } - } - } - } - } - DPRINT_EXIT(VMBUS); - - return; -} - -/* - * VmbusPostMessage - Send a msg on the vmbus's message connection - */ -int VmbusPostMessage(void *buffer, size_t bufferLen) -{ - union hv_connection_id connId; - - connId.Asu32 = 0; - connId.u.Id = VMBUS_MESSAGE_CONNECTION_ID; - return HvPostMessage(connId, 1, buffer, bufferLen); -} - -/* - * VmbusSetEvent - Send an event notification to the parent - */ -int VmbusSetEvent(u32 childRelId) -{ - int ret = 0; - - DPRINT_ENTER(VMBUS); - - /* Each u32 represents 32 channels */ - set_bit(childRelId & 31, - (unsigned long *)gVmbusConnection.SendInterruptPage + - (childRelId >> 5)); - - ret = HvSignalEvent(); - - DPRINT_EXIT(VMBUS); - - return ret; -} diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 3c15c73..9195509 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -5,7 +5,7 @@ obj-$(CONFIG_HYPERV_NET) += hv_netvsc.o obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o hv_vmbus-objs := vmbus_drv.o osd.o \ - Vmbus.o hv.o Connection.o channel.o \ + Vmbus.o hv.o connection.o channel.o \ ChannelMgmt.o ChannelInterface.o RingBuffer.o hv_storvsc-objs := storvsc_drv.o StorVsc.o hv_blkvsc-objs := blkvsc_drv.o BlkVsc.o diff --git a/drivers/staging/hv/connection.c b/drivers/staging/hv/connection.c new file mode 100644 index 0000000..3a01d3c --- /dev/null +++ b/drivers/staging/hv/connection.c @@ -0,0 +1,349 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ +#include +#include +#include +#include +#include "osd.h" +#include "logging.h" +#include "VmbusPrivate.h" + + +struct VMBUS_CONNECTION gVmbusConnection = { + .ConnectState = Disconnected, + .NextGpadlHandle = ATOMIC_INIT(0xE1E10), +}; + +/* + * VmbusConnect - Sends a connect request on the partition service connection + */ +int VmbusConnect(void) +{ + int ret = 0; + struct vmbus_channel_msginfo *msgInfo = NULL; + struct vmbus_channel_initiate_contact *msg; + unsigned long flags; + + DPRINT_ENTER(VMBUS); + + /* Make sure we are not connecting or connected */ + if (gVmbusConnection.ConnectState != Disconnected) + return -1; + + /* Initialize the vmbus connection */ + gVmbusConnection.ConnectState = Connecting; + gVmbusConnection.WorkQueue = create_workqueue("hv_vmbus_con"); + if (!gVmbusConnection.WorkQueue) { + ret = -1; + goto Cleanup; + } + + INIT_LIST_HEAD(&gVmbusConnection.ChannelMsgList); + spin_lock_init(&gVmbusConnection.channelmsg_lock); + + INIT_LIST_HEAD(&gVmbusConnection.ChannelList); + spin_lock_init(&gVmbusConnection.channel_lock); + + /* + * Setup the vmbus event connection for channel interrupt + * abstraction stuff + */ + gVmbusConnection.InterruptPage = osd_PageAlloc(1); + if (gVmbusConnection.InterruptPage == NULL) { + ret = -1; + goto Cleanup; + } + + gVmbusConnection.RecvInterruptPage = gVmbusConnection.InterruptPage; + gVmbusConnection.SendInterruptPage = + (void *)((unsigned long)gVmbusConnection.InterruptPage + + (PAGE_SIZE >> 1)); + + /* + * Setup the monitor notification facility. The 1st page for + * parent->child and the 2nd page for child->parent + */ + gVmbusConnection.MonitorPages = osd_PageAlloc(2); + if (gVmbusConnection.MonitorPages == NULL) { + ret = -1; + goto Cleanup; + } + + msgInfo = kzalloc(sizeof(*msgInfo) + + sizeof(struct vmbus_channel_initiate_contact), + GFP_KERNEL); + if (msgInfo == NULL) { + ret = -ENOMEM; + goto Cleanup; + } + + msgInfo->WaitEvent = osd_WaitEventCreate(); + if (!msgInfo->WaitEvent) { + ret = -ENOMEM; + goto Cleanup; + } + + msg = (struct vmbus_channel_initiate_contact *)msgInfo->Msg; + + msg->Header.MessageType = ChannelMessageInitiateContact; + msg->VMBusVersionRequested = VMBUS_REVISION_NUMBER; + msg->InterruptPage = virt_to_phys(gVmbusConnection.InterruptPage); + msg->MonitorPage1 = virt_to_phys(gVmbusConnection.MonitorPages); + msg->MonitorPage2 = virt_to_phys( + (void *)((unsigned long)gVmbusConnection.MonitorPages + + PAGE_SIZE)); + + /* + * Add to list before we send the request since we may + * receive the response before returning from this routine + */ + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + list_add_tail(&msgInfo->MsgListEntry, + &gVmbusConnection.ChannelMsgList); + + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + DPRINT_DBG(VMBUS, "Vmbus connection - interrupt pfn %llx, " + "monitor1 pfn %llx,, monitor2 pfn %llx", + msg->InterruptPage, msg->MonitorPage1, msg->MonitorPage2); + + DPRINT_DBG(VMBUS, "Sending channel initiate msg..."); + ret = VmbusPostMessage(msg, + sizeof(struct vmbus_channel_initiate_contact)); + if (ret != 0) { + list_del(&msgInfo->MsgListEntry); + goto Cleanup; + } + + /* Wait for the connection response */ + osd_WaitEventWait(msgInfo->WaitEvent); + + list_del(&msgInfo->MsgListEntry); + + /* Check if successful */ + if (msgInfo->Response.VersionResponse.VersionSupported) { + DPRINT_INFO(VMBUS, "Vmbus connected!!"); + gVmbusConnection.ConnectState = Connected; + + } else { + DPRINT_ERR(VMBUS, "Vmbus connection failed!!..." + "current version (%d) not supported", + VMBUS_REVISION_NUMBER); + ret = -1; + goto Cleanup; + } + + kfree(msgInfo->WaitEvent); + kfree(msgInfo); + DPRINT_EXIT(VMBUS); + + return 0; + +Cleanup: + gVmbusConnection.ConnectState = Disconnected; + + if (gVmbusConnection.WorkQueue) + destroy_workqueue(gVmbusConnection.WorkQueue); + + if (gVmbusConnection.InterruptPage) { + osd_PageFree(gVmbusConnection.InterruptPage, 1); + gVmbusConnection.InterruptPage = NULL; + } + + if (gVmbusConnection.MonitorPages) { + osd_PageFree(gVmbusConnection.MonitorPages, 2); + gVmbusConnection.MonitorPages = NULL; + } + + if (msgInfo) { + kfree(msgInfo->WaitEvent); + kfree(msgInfo); + } + + DPRINT_EXIT(VMBUS); + + return ret; +} + +/* + * VmbusDisconnect - Sends a disconnect request on the partition service connection + */ +int VmbusDisconnect(void) +{ + int ret = 0; + struct vmbus_channel_message_header *msg; + + DPRINT_ENTER(VMBUS); + + /* Make sure we are connected */ + if (gVmbusConnection.ConnectState != Connected) + return -1; + + msg = kzalloc(sizeof(struct vmbus_channel_message_header), GFP_KERNEL); + if (!msg) + return -ENOMEM; + + msg->MessageType = ChannelMessageUnload; + + ret = VmbusPostMessage(msg, + sizeof(struct vmbus_channel_message_header)); + if (ret != 0) + goto Cleanup; + + osd_PageFree(gVmbusConnection.InterruptPage, 1); + + /* TODO: iterate thru the msg list and free up */ + destroy_workqueue(gVmbusConnection.WorkQueue); + + gVmbusConnection.ConnectState = Disconnected; + + DPRINT_INFO(VMBUS, "Vmbus disconnected!!"); + +Cleanup: + kfree(msg); + DPRINT_EXIT(VMBUS); + return ret; +} + +/* + * GetChannelFromRelId - Get the channel object given its child relative id (ie channel id) + */ +struct vmbus_channel *GetChannelFromRelId(u32 relId) +{ + struct vmbus_channel *channel; + struct vmbus_channel *foundChannel = NULL; + unsigned long flags; + + spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); + list_for_each_entry(channel, &gVmbusConnection.ChannelList, ListEntry) { + if (channel->OfferMsg.ChildRelId == relId) { + foundChannel = channel; + break; + } + } + spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); + + return foundChannel; +} + +/* + * VmbusProcessChannelEvent - Process a channel event notification + */ +static void VmbusProcessChannelEvent(void *context) +{ + struct vmbus_channel *channel; + u32 relId = (u32)(unsigned long)context; + + /* ASSERT(relId > 0); */ + + /* + * Find the channel based on this relid and invokes the + * channel callback to process the event + */ + channel = GetChannelFromRelId(relId); + + if (channel) { + VmbusChannelOnChannelEvent(channel); + /* + * WorkQueueQueueWorkItem(channel->dataWorkQueue, + * VmbusChannelOnChannelEvent, + * (void*)channel); + */ + } else { + DPRINT_ERR(VMBUS, "channel not found for relid - %d.", relId); + } +} + +/* + * VmbusOnEvents - Handler for events + */ +void VmbusOnEvents(void) +{ + int dword; + int maxdword = MAX_NUM_CHANNELS_SUPPORTED >> 5; + int bit; + int relid; + u32 *recvInterruptPage = gVmbusConnection.RecvInterruptPage; + + DPRINT_ENTER(VMBUS); + + /* Check events */ + if (recvInterruptPage) { + for (dword = 0; dword < maxdword; dword++) { + if (recvInterruptPage[dword]) { + for (bit = 0; bit < 32; bit++) { + if (test_and_clear_bit(bit, (unsigned long *)&recvInterruptPage[dword])) { + relid = (dword << 5) + bit; + DPRINT_DBG(VMBUS, "event detected for relid - %d", relid); + + if (relid == 0) { + /* special case - vmbus channel protocol msg */ + DPRINT_DBG(VMBUS, "invalid relid - %d", relid); + continue; + } else { + /* QueueWorkItem(VmbusProcessEvent, (void*)relid); */ + /* ret = WorkQueueQueueWorkItem(gVmbusConnection.workQueue, VmbusProcessChannelEvent, (void*)relid); */ + VmbusProcessChannelEvent((void *)(unsigned long)relid); + } + } + } + } + } + } + DPRINT_EXIT(VMBUS); + + return; +} + +/* + * VmbusPostMessage - Send a msg on the vmbus's message connection + */ +int VmbusPostMessage(void *buffer, size_t bufferLen) +{ + union hv_connection_id connId; + + connId.Asu32 = 0; + connId.u.Id = VMBUS_MESSAGE_CONNECTION_ID; + return HvPostMessage(connId, 1, buffer, bufferLen); +} + +/* + * VmbusSetEvent - Send an event notification to the parent + */ +int VmbusSetEvent(u32 childRelId) +{ + int ret = 0; + + DPRINT_ENTER(VMBUS); + + /* Each u32 represents 32 channels */ + set_bit(childRelId & 31, + (unsigned long *)gVmbusConnection.SendInterruptPage + + (childRelId >> 5)); + + ret = HvSignalEvent(); + + DPRINT_EXIT(VMBUS); + + return ret; +} -- cgit v0.10.2 From 8f078ca6e7e1a5457aef5196e7154aa468094120 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:22:35 -0700 Subject: Staging: hv: rename RingBuffer.c and .h to ring_buffer.c and .h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/ChannelMgmt.h b/drivers/staging/hv/ChannelMgmt.h index fa973d8..9219199 100644 --- a/drivers/staging/hv/ChannelMgmt.h +++ b/drivers/staging/hv/ChannelMgmt.h @@ -27,7 +27,7 @@ #include #include -#include "RingBuffer.h" +#include "ring_buffer.h" #include "VmbusChannelInterface.h" #include "VmbusPacketFormat.h" diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 9195509..faa8db1 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -6,7 +6,7 @@ obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o hv_vmbus-objs := vmbus_drv.o osd.o \ Vmbus.o hv.o connection.o channel.o \ - ChannelMgmt.o ChannelInterface.o RingBuffer.o + ChannelMgmt.o ChannelInterface.o ring_buffer.o hv_storvsc-objs := storvsc_drv.o StorVsc.o hv_blkvsc-objs := blkvsc_drv.o BlkVsc.o hv_netvsc-objs := netvsc_drv.o NetVsc.o RndisFilter.o diff --git a/drivers/staging/hv/RingBuffer.c b/drivers/staging/hv/RingBuffer.c deleted file mode 100644 index 64f8d0f..0000000 --- a/drivers/staging/hv/RingBuffer.c +++ /dev/null @@ -1,627 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - -#include -#include -#include "osd.h" -#include "logging.h" -#include "RingBuffer.h" - - -/* #defines */ - - -/* Amount of space to write to */ -#define BYTES_AVAIL_TO_WRITE(r, w, z) ((w) >= (r)) ? ((z) - ((w) - (r))) : ((r) - (w)) - - -/*++ - -Name: - GetRingBufferAvailBytes() - -Description: - Get number of bytes available to read and to write to - for the specified ring buffer - ---*/ -static inline void -GetRingBufferAvailBytes(RING_BUFFER_INFO *rbi, u32 *read, u32 *write) -{ - u32 read_loc, write_loc; - - /* Capture the read/write indices before they changed */ - read_loc = rbi->RingBuffer->ReadIndex; - write_loc = rbi->RingBuffer->WriteIndex; - - *write = BYTES_AVAIL_TO_WRITE(read_loc, write_loc, rbi->RingDataSize); - *read = rbi->RingDataSize - *write; -} - -/*++ - -Name: - GetNextWriteLocation() - -Description: - Get the next write location for the specified ring buffer - ---*/ -static inline u32 -GetNextWriteLocation(RING_BUFFER_INFO *RingInfo) -{ - u32 next = RingInfo->RingBuffer->WriteIndex; - - /* ASSERT(next < RingInfo->RingDataSize); */ - - return next; -} - -/*++ - -Name: - SetNextWriteLocation() - -Description: - Set the next write location for the specified ring buffer - ---*/ -static inline void -SetNextWriteLocation(RING_BUFFER_INFO *RingInfo, u32 NextWriteLocation) -{ - RingInfo->RingBuffer->WriteIndex = NextWriteLocation; -} - -/*++ - -Name: - GetNextReadLocation() - -Description: - Get the next read location for the specified ring buffer - ---*/ -static inline u32 -GetNextReadLocation(RING_BUFFER_INFO *RingInfo) -{ - u32 next = RingInfo->RingBuffer->ReadIndex; - - /* ASSERT(next < RingInfo->RingDataSize); */ - - return next; -} - -/*++ - -Name: - GetNextReadLocationWithOffset() - -Description: - Get the next read location + offset for the specified ring buffer. - This allows the caller to skip - ---*/ -static inline u32 -GetNextReadLocationWithOffset(RING_BUFFER_INFO *RingInfo, u32 Offset) -{ - u32 next = RingInfo->RingBuffer->ReadIndex; - - /* ASSERT(next < RingInfo->RingDataSize); */ - next += Offset; - next %= RingInfo->RingDataSize; - - return next; -} - -/*++ - -Name: - SetNextReadLocation() - -Description: - Set the next read location for the specified ring buffer - ---*/ -static inline void -SetNextReadLocation(RING_BUFFER_INFO *RingInfo, u32 NextReadLocation) -{ - RingInfo->RingBuffer->ReadIndex = NextReadLocation; -} - - -/*++ - -Name: - GetRingBuffer() - -Description: - Get the start of the ring buffer - ---*/ -static inline void * -GetRingBuffer(RING_BUFFER_INFO *RingInfo) -{ - return (void *)RingInfo->RingBuffer->Buffer; -} - - -/*++ - -Name: - GetRingBufferSize() - -Description: - Get the size of the ring buffer - ---*/ -static inline u32 -GetRingBufferSize(RING_BUFFER_INFO *RingInfo) -{ - return RingInfo->RingDataSize; -} - -/*++ - -Name: - GetRingBufferIndices() - -Description: - Get the read and write indices as u64 of the specified ring buffer - ---*/ -static inline u64 -GetRingBufferIndices(RING_BUFFER_INFO *RingInfo) -{ - return ((u64)RingInfo->RingBuffer->WriteIndex << 32) - || RingInfo->RingBuffer->ReadIndex; -} - - -/*++ - -Name: - DumpRingInfo() - -Description: - Dump out to console the ring buffer info - ---*/ -void DumpRingInfo(RING_BUFFER_INFO *RingInfo, char *Prefix) -{ - u32 bytesAvailToWrite; - u32 bytesAvailToRead; - - GetRingBufferAvailBytes(RingInfo, - &bytesAvailToRead, - &bytesAvailToWrite); - - DPRINT(VMBUS, - DEBUG_RING_LVL, - "%s <>", - Prefix, - RingInfo, - RingInfo->RingBuffer->Buffer, - bytesAvailToWrite, - bytesAvailToRead, - RingInfo->RingBuffer->ReadIndex, - RingInfo->RingBuffer->WriteIndex); -} - - -/* Internal routines */ - -static u32 -CopyToRingBuffer( - RING_BUFFER_INFO *RingInfo, - u32 StartWriteOffset, - void *Src, - u32 SrcLen); - -static u32 -CopyFromRingBuffer( - RING_BUFFER_INFO *RingInfo, - void *Dest, - u32 DestLen, - u32 StartReadOffset); - - - -/*++ - -Name: - RingBufferGetDebugInfo() - -Description: - Get various debug metrics for the specified ring buffer - ---*/ -void RingBufferGetDebugInfo(RING_BUFFER_INFO *RingInfo, - RING_BUFFER_DEBUG_INFO *DebugInfo) -{ - u32 bytesAvailToWrite; - u32 bytesAvailToRead; - - if (RingInfo->RingBuffer) { - GetRingBufferAvailBytes(RingInfo, - &bytesAvailToRead, - &bytesAvailToWrite); - - DebugInfo->BytesAvailToRead = bytesAvailToRead; - DebugInfo->BytesAvailToWrite = bytesAvailToWrite; - DebugInfo->CurrentReadIndex = RingInfo->RingBuffer->ReadIndex; - DebugInfo->CurrentWriteIndex = RingInfo->RingBuffer->WriteIndex; - DebugInfo->CurrentInterruptMask = RingInfo->RingBuffer->InterruptMask; - } -} - - -/*++ - -Name: - GetRingBufferInterruptMask() - -Description: - Get the interrupt mask for the specified ring buffer - ---*/ -u32 GetRingBufferInterruptMask(RING_BUFFER_INFO *rbi) -{ - return rbi->RingBuffer->InterruptMask; -} - -/*++ - -Name: - RingBufferInit() - -Description: - Initialize the ring buffer - ---*/ -int RingBufferInit(RING_BUFFER_INFO *RingInfo, void *Buffer, u32 BufferLen) -{ - if (sizeof(RING_BUFFER) != PAGE_SIZE) - return -EINVAL; - - memset(RingInfo, 0, sizeof(RING_BUFFER_INFO)); - - RingInfo->RingBuffer = (RING_BUFFER *)Buffer; - RingInfo->RingBuffer->ReadIndex = RingInfo->RingBuffer->WriteIndex = 0; - - RingInfo->RingSize = BufferLen; - RingInfo->RingDataSize = BufferLen - sizeof(RING_BUFFER); - - spin_lock_init(&RingInfo->ring_lock); - - return 0; -} - -/*++ - -Name: - RingBufferCleanup() - -Description: - Cleanup the ring buffer - ---*/ -void RingBufferCleanup(RING_BUFFER_INFO *RingInfo) -{ -} - -/*++ - -Name: - RingBufferWrite() - -Description: - Write to the ring buffer - ---*/ -int RingBufferWrite(RING_BUFFER_INFO *OutRingInfo, - struct scatterlist *sglist, u32 sgcount) -{ - int i = 0; - u32 byteAvailToWrite; - u32 byteAvailToRead; - u32 totalBytesToWrite = 0; - - struct scatterlist *sg; - volatile u32 nextWriteLocation; - u64 prevIndices = 0; - unsigned long flags; - - DPRINT_ENTER(VMBUS); - - for_each_sg(sglist, sg, sgcount, i) - { - totalBytesToWrite += sg->length; - } - - totalBytesToWrite += sizeof(u64); - - spin_lock_irqsave(&OutRingInfo->ring_lock, flags); - - GetRingBufferAvailBytes(OutRingInfo, - &byteAvailToRead, - &byteAvailToWrite); - - DPRINT_DBG(VMBUS, "Writing %u bytes...", totalBytesToWrite); - - /* DumpRingInfo(OutRingInfo, "BEFORE "); */ - - /* If there is only room for the packet, assume it is full. */ - /* Otherwise, the next time around, we think the ring buffer */ - /* is empty since the read index == write index */ - if (byteAvailToWrite <= totalBytesToWrite) { - DPRINT_DBG(VMBUS, - "No more space left on outbound ring buffer " - "(needed %u, avail %u)", - totalBytesToWrite, - byteAvailToWrite); - - spin_unlock_irqrestore(&OutRingInfo->ring_lock, flags); - - DPRINT_EXIT(VMBUS); - - return -1; - } - - /* Write to the ring buffer */ - nextWriteLocation = GetNextWriteLocation(OutRingInfo); - - for_each_sg(sglist, sg, sgcount, i) - { - nextWriteLocation = CopyToRingBuffer(OutRingInfo, - nextWriteLocation, - sg_virt(sg), - sg->length); - } - - /* Set previous packet start */ - prevIndices = GetRingBufferIndices(OutRingInfo); - - nextWriteLocation = CopyToRingBuffer(OutRingInfo, - nextWriteLocation, - &prevIndices, - sizeof(u64)); - - /* Make sure we flush all writes before updating the writeIndex */ - mb(); - - /* Now, update the write location */ - SetNextWriteLocation(OutRingInfo, nextWriteLocation); - - /* DumpRingInfo(OutRingInfo, "AFTER "); */ - - spin_unlock_irqrestore(&OutRingInfo->ring_lock, flags); - - DPRINT_EXIT(VMBUS); - - return 0; -} - - -/*++ - -Name: - RingBufferPeek() - -Description: - Read without advancing the read index - ---*/ -int RingBufferPeek(RING_BUFFER_INFO *InRingInfo, void *Buffer, u32 BufferLen) -{ - u32 bytesAvailToWrite; - u32 bytesAvailToRead; - u32 nextReadLocation = 0; - unsigned long flags; - - spin_lock_irqsave(&InRingInfo->ring_lock, flags); - - GetRingBufferAvailBytes(InRingInfo, - &bytesAvailToRead, - &bytesAvailToWrite); - - /* Make sure there is something to read */ - if (bytesAvailToRead < BufferLen) { - /* DPRINT_DBG(VMBUS, - "got callback but not enough to read " - "!!", - bytesAvailToRead, - BufferLen); */ - - spin_unlock_irqrestore(&InRingInfo->ring_lock, flags); - - return -1; - } - - /* Convert to byte offset */ - nextReadLocation = GetNextReadLocation(InRingInfo); - - nextReadLocation = CopyFromRingBuffer(InRingInfo, - Buffer, - BufferLen, - nextReadLocation); - - spin_unlock_irqrestore(&InRingInfo->ring_lock, flags); - - return 0; -} - - -/*++ - -Name: - RingBufferRead() - -Description: - Read and advance the read index - ---*/ -int RingBufferRead(RING_BUFFER_INFO *InRingInfo, void *Buffer, - u32 BufferLen, u32 Offset) -{ - u32 bytesAvailToWrite; - u32 bytesAvailToRead; - u32 nextReadLocation = 0; - u64 prevIndices = 0; - unsigned long flags; - - if (BufferLen <= 0) - return -EINVAL; - - spin_lock_irqsave(&InRingInfo->ring_lock, flags); - - GetRingBufferAvailBytes(InRingInfo, - &bytesAvailToRead, - &bytesAvailToWrite); - - DPRINT_DBG(VMBUS, "Reading %u bytes...", BufferLen); - - /* DumpRingInfo(InRingInfo, "BEFORE "); */ - - /* Make sure there is something to read */ - if (bytesAvailToRead < BufferLen) { - DPRINT_DBG(VMBUS, - "got callback but not enough to read " - "!!", - bytesAvailToRead, - BufferLen); - - spin_unlock_irqrestore(&InRingInfo->ring_lock, flags); - - return -1; - } - - nextReadLocation = GetNextReadLocationWithOffset(InRingInfo, Offset); - - nextReadLocation = CopyFromRingBuffer(InRingInfo, - Buffer, - BufferLen, - nextReadLocation); - - nextReadLocation = CopyFromRingBuffer(InRingInfo, - &prevIndices, - sizeof(u64), - nextReadLocation); - - /* Make sure all reads are done before we update the read index since */ - /* the writer may start writing to the read area once the read index */ - /*is updated */ - mb(); - - /* Update the read index */ - SetNextReadLocation(InRingInfo, nextReadLocation); - - /* DumpRingInfo(InRingInfo, "AFTER "); */ - - spin_unlock_irqrestore(&InRingInfo->ring_lock, flags); - - return 0; -} - - -/*++ - -Name: - CopyToRingBuffer() - -Description: - Helper routine to copy from source to ring buffer. - Assume there is enough room. Handles wrap-around in dest case only!! - ---*/ -static u32 -CopyToRingBuffer( - RING_BUFFER_INFO *RingInfo, - u32 StartWriteOffset, - void *Src, - u32 SrcLen) -{ - void *ringBuffer = GetRingBuffer(RingInfo); - u32 ringBufferSize = GetRingBufferSize(RingInfo); - u32 fragLen; - - /* wrap-around detected! */ - if (SrcLen > ringBufferSize - StartWriteOffset) { - DPRINT_DBG(VMBUS, "wrap-around detected!"); - - fragLen = ringBufferSize - StartWriteOffset; - memcpy(ringBuffer + StartWriteOffset, Src, fragLen); - memcpy(ringBuffer, Src + fragLen, SrcLen - fragLen); - } else - memcpy(ringBuffer + StartWriteOffset, Src, SrcLen); - - StartWriteOffset += SrcLen; - StartWriteOffset %= ringBufferSize; - - return StartWriteOffset; -} - - -/*++ - -Name: - CopyFromRingBuffer() - -Description: - Helper routine to copy to source from ring buffer. - Assume there is enough room. Handles wrap-around in src case only!! - ---*/ -static u32 -CopyFromRingBuffer( - RING_BUFFER_INFO *RingInfo, - void *Dest, - u32 DestLen, - u32 StartReadOffset) -{ - void *ringBuffer = GetRingBuffer(RingInfo); - u32 ringBufferSize = GetRingBufferSize(RingInfo); - - u32 fragLen; - - /* wrap-around detected at the src */ - if (DestLen > ringBufferSize - StartReadOffset) { - DPRINT_DBG(VMBUS, "src wrap-around detected!"); - - fragLen = ringBufferSize - StartReadOffset; - - memcpy(Dest, ringBuffer + StartReadOffset, fragLen); - memcpy(Dest + fragLen, ringBuffer, DestLen - fragLen); - } else - - memcpy(Dest, ringBuffer + StartReadOffset, DestLen); - - - StartReadOffset += DestLen; - StartReadOffset %= ringBufferSize; - - return StartReadOffset; -} - - -/* eof */ diff --git a/drivers/staging/hv/RingBuffer.h b/drivers/staging/hv/RingBuffer.h deleted file mode 100644 index 6202157..0000000 --- a/drivers/staging/hv/RingBuffer.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _RING_BUFFER_H_ -#define _RING_BUFFER_H_ - -#include - -typedef struct _RING_BUFFER { - /* Offset in bytes from the start of ring data below */ - volatile u32 WriteIndex; - - /* Offset in bytes from the start of ring data below */ - volatile u32 ReadIndex; - - volatile u32 InterruptMask; - - /* Pad it to PAGE_SIZE so that data starts on page boundary */ - u8 Reserved[4084]; - - /* NOTE: - * The InterruptMask field is used only for channels but since our - * vmbus connection also uses this data structure and its data starts - * here, we commented out this field. - */ - /* volatile u32 InterruptMask; */ - - /* - * Ring data starts here + RingDataStartOffset - * !!! DO NOT place any fields below this !!! - */ - u8 Buffer[0]; -} __attribute__((packed)) RING_BUFFER; - -typedef struct _RING_BUFFER_INFO { - RING_BUFFER *RingBuffer; - u32 RingSize; /* Include the shared header */ - spinlock_t ring_lock; - - u32 RingDataSize; /* < ringSize */ - u32 RingDataStartOffset; - -} RING_BUFFER_INFO; - -typedef struct _RING_BUFFER_DEBUG_INFO { - u32 CurrentInterruptMask; - u32 CurrentReadIndex; - u32 CurrentWriteIndex; - u32 BytesAvailToRead; - u32 BytesAvailToWrite; -} RING_BUFFER_DEBUG_INFO; - - - -/* Interface */ - - -int RingBufferInit(RING_BUFFER_INFO *RingInfo, void *Buffer, u32 BufferLen); - -void RingBufferCleanup(RING_BUFFER_INFO *RingInfo); - -int RingBufferWrite(RING_BUFFER_INFO *RingInfo, - struct scatterlist *sglist, - u32 sgcount); - -int RingBufferPeek(RING_BUFFER_INFO *RingInfo, void *Buffer, u32 BufferLen); - -int RingBufferRead(RING_BUFFER_INFO *RingInfo, - void *Buffer, - u32 BufferLen, - u32 Offset); - -u32 GetRingBufferInterruptMask(RING_BUFFER_INFO *RingInfo); - -void DumpRingInfo(RING_BUFFER_INFO *RingInfo, char *Prefix); - -void RingBufferGetDebugInfo(RING_BUFFER_INFO *RingInfo, - RING_BUFFER_DEBUG_INFO *DebugInfo); - -#endif /* _RING_BUFFER_H_ */ diff --git a/drivers/staging/hv/VmbusPrivate.h b/drivers/staging/hv/VmbusPrivate.h index f03db0b..d73baff 100644 --- a/drivers/staging/hv/VmbusPrivate.h +++ b/drivers/staging/hv/VmbusPrivate.h @@ -30,7 +30,7 @@ #include "channel.h" #include "ChannelMgmt.h" #include "ChannelInterface.h" -#include "RingBuffer.h" +#include "ring_buffer.h" #include diff --git a/drivers/staging/hv/ring_buffer.c b/drivers/staging/hv/ring_buffer.c new file mode 100644 index 0000000..ae2a10e --- /dev/null +++ b/drivers/staging/hv/ring_buffer.c @@ -0,0 +1,627 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + +#include +#include +#include "osd.h" +#include "logging.h" +#include "ring_buffer.h" + + +/* #defines */ + + +/* Amount of space to write to */ +#define BYTES_AVAIL_TO_WRITE(r, w, z) ((w) >= (r)) ? ((z) - ((w) - (r))) : ((r) - (w)) + + +/*++ + +Name: + GetRingBufferAvailBytes() + +Description: + Get number of bytes available to read and to write to + for the specified ring buffer + +--*/ +static inline void +GetRingBufferAvailBytes(RING_BUFFER_INFO *rbi, u32 *read, u32 *write) +{ + u32 read_loc, write_loc; + + /* Capture the read/write indices before they changed */ + read_loc = rbi->RingBuffer->ReadIndex; + write_loc = rbi->RingBuffer->WriteIndex; + + *write = BYTES_AVAIL_TO_WRITE(read_loc, write_loc, rbi->RingDataSize); + *read = rbi->RingDataSize - *write; +} + +/*++ + +Name: + GetNextWriteLocation() + +Description: + Get the next write location for the specified ring buffer + +--*/ +static inline u32 +GetNextWriteLocation(RING_BUFFER_INFO *RingInfo) +{ + u32 next = RingInfo->RingBuffer->WriteIndex; + + /* ASSERT(next < RingInfo->RingDataSize); */ + + return next; +} + +/*++ + +Name: + SetNextWriteLocation() + +Description: + Set the next write location for the specified ring buffer + +--*/ +static inline void +SetNextWriteLocation(RING_BUFFER_INFO *RingInfo, u32 NextWriteLocation) +{ + RingInfo->RingBuffer->WriteIndex = NextWriteLocation; +} + +/*++ + +Name: + GetNextReadLocation() + +Description: + Get the next read location for the specified ring buffer + +--*/ +static inline u32 +GetNextReadLocation(RING_BUFFER_INFO *RingInfo) +{ + u32 next = RingInfo->RingBuffer->ReadIndex; + + /* ASSERT(next < RingInfo->RingDataSize); */ + + return next; +} + +/*++ + +Name: + GetNextReadLocationWithOffset() + +Description: + Get the next read location + offset for the specified ring buffer. + This allows the caller to skip + +--*/ +static inline u32 +GetNextReadLocationWithOffset(RING_BUFFER_INFO *RingInfo, u32 Offset) +{ + u32 next = RingInfo->RingBuffer->ReadIndex; + + /* ASSERT(next < RingInfo->RingDataSize); */ + next += Offset; + next %= RingInfo->RingDataSize; + + return next; +} + +/*++ + +Name: + SetNextReadLocation() + +Description: + Set the next read location for the specified ring buffer + +--*/ +static inline void +SetNextReadLocation(RING_BUFFER_INFO *RingInfo, u32 NextReadLocation) +{ + RingInfo->RingBuffer->ReadIndex = NextReadLocation; +} + + +/*++ + +Name: + GetRingBuffer() + +Description: + Get the start of the ring buffer + +--*/ +static inline void * +GetRingBuffer(RING_BUFFER_INFO *RingInfo) +{ + return (void *)RingInfo->RingBuffer->Buffer; +} + + +/*++ + +Name: + GetRingBufferSize() + +Description: + Get the size of the ring buffer + +--*/ +static inline u32 +GetRingBufferSize(RING_BUFFER_INFO *RingInfo) +{ + return RingInfo->RingDataSize; +} + +/*++ + +Name: + GetRingBufferIndices() + +Description: + Get the read and write indices as u64 of the specified ring buffer + +--*/ +static inline u64 +GetRingBufferIndices(RING_BUFFER_INFO *RingInfo) +{ + return ((u64)RingInfo->RingBuffer->WriteIndex << 32) + || RingInfo->RingBuffer->ReadIndex; +} + + +/*++ + +Name: + DumpRingInfo() + +Description: + Dump out to console the ring buffer info + +--*/ +void DumpRingInfo(RING_BUFFER_INFO *RingInfo, char *Prefix) +{ + u32 bytesAvailToWrite; + u32 bytesAvailToRead; + + GetRingBufferAvailBytes(RingInfo, + &bytesAvailToRead, + &bytesAvailToWrite); + + DPRINT(VMBUS, + DEBUG_RING_LVL, + "%s <>", + Prefix, + RingInfo, + RingInfo->RingBuffer->Buffer, + bytesAvailToWrite, + bytesAvailToRead, + RingInfo->RingBuffer->ReadIndex, + RingInfo->RingBuffer->WriteIndex); +} + + +/* Internal routines */ + +static u32 +CopyToRingBuffer( + RING_BUFFER_INFO *RingInfo, + u32 StartWriteOffset, + void *Src, + u32 SrcLen); + +static u32 +CopyFromRingBuffer( + RING_BUFFER_INFO *RingInfo, + void *Dest, + u32 DestLen, + u32 StartReadOffset); + + + +/*++ + +Name: + RingBufferGetDebugInfo() + +Description: + Get various debug metrics for the specified ring buffer + +--*/ +void RingBufferGetDebugInfo(RING_BUFFER_INFO *RingInfo, + RING_BUFFER_DEBUG_INFO *DebugInfo) +{ + u32 bytesAvailToWrite; + u32 bytesAvailToRead; + + if (RingInfo->RingBuffer) { + GetRingBufferAvailBytes(RingInfo, + &bytesAvailToRead, + &bytesAvailToWrite); + + DebugInfo->BytesAvailToRead = bytesAvailToRead; + DebugInfo->BytesAvailToWrite = bytesAvailToWrite; + DebugInfo->CurrentReadIndex = RingInfo->RingBuffer->ReadIndex; + DebugInfo->CurrentWriteIndex = RingInfo->RingBuffer->WriteIndex; + DebugInfo->CurrentInterruptMask = RingInfo->RingBuffer->InterruptMask; + } +} + + +/*++ + +Name: + GetRingBufferInterruptMask() + +Description: + Get the interrupt mask for the specified ring buffer + +--*/ +u32 GetRingBufferInterruptMask(RING_BUFFER_INFO *rbi) +{ + return rbi->RingBuffer->InterruptMask; +} + +/*++ + +Name: + RingBufferInit() + +Description: + Initialize the ring buffer + +--*/ +int RingBufferInit(RING_BUFFER_INFO *RingInfo, void *Buffer, u32 BufferLen) +{ + if (sizeof(RING_BUFFER) != PAGE_SIZE) + return -EINVAL; + + memset(RingInfo, 0, sizeof(RING_BUFFER_INFO)); + + RingInfo->RingBuffer = (RING_BUFFER *)Buffer; + RingInfo->RingBuffer->ReadIndex = RingInfo->RingBuffer->WriteIndex = 0; + + RingInfo->RingSize = BufferLen; + RingInfo->RingDataSize = BufferLen - sizeof(RING_BUFFER); + + spin_lock_init(&RingInfo->ring_lock); + + return 0; +} + +/*++ + +Name: + RingBufferCleanup() + +Description: + Cleanup the ring buffer + +--*/ +void RingBufferCleanup(RING_BUFFER_INFO *RingInfo) +{ +} + +/*++ + +Name: + RingBufferWrite() + +Description: + Write to the ring buffer + +--*/ +int RingBufferWrite(RING_BUFFER_INFO *OutRingInfo, + struct scatterlist *sglist, u32 sgcount) +{ + int i = 0; + u32 byteAvailToWrite; + u32 byteAvailToRead; + u32 totalBytesToWrite = 0; + + struct scatterlist *sg; + volatile u32 nextWriteLocation; + u64 prevIndices = 0; + unsigned long flags; + + DPRINT_ENTER(VMBUS); + + for_each_sg(sglist, sg, sgcount, i) + { + totalBytesToWrite += sg->length; + } + + totalBytesToWrite += sizeof(u64); + + spin_lock_irqsave(&OutRingInfo->ring_lock, flags); + + GetRingBufferAvailBytes(OutRingInfo, + &byteAvailToRead, + &byteAvailToWrite); + + DPRINT_DBG(VMBUS, "Writing %u bytes...", totalBytesToWrite); + + /* DumpRingInfo(OutRingInfo, "BEFORE "); */ + + /* If there is only room for the packet, assume it is full. */ + /* Otherwise, the next time around, we think the ring buffer */ + /* is empty since the read index == write index */ + if (byteAvailToWrite <= totalBytesToWrite) { + DPRINT_DBG(VMBUS, + "No more space left on outbound ring buffer " + "(needed %u, avail %u)", + totalBytesToWrite, + byteAvailToWrite); + + spin_unlock_irqrestore(&OutRingInfo->ring_lock, flags); + + DPRINT_EXIT(VMBUS); + + return -1; + } + + /* Write to the ring buffer */ + nextWriteLocation = GetNextWriteLocation(OutRingInfo); + + for_each_sg(sglist, sg, sgcount, i) + { + nextWriteLocation = CopyToRingBuffer(OutRingInfo, + nextWriteLocation, + sg_virt(sg), + sg->length); + } + + /* Set previous packet start */ + prevIndices = GetRingBufferIndices(OutRingInfo); + + nextWriteLocation = CopyToRingBuffer(OutRingInfo, + nextWriteLocation, + &prevIndices, + sizeof(u64)); + + /* Make sure we flush all writes before updating the writeIndex */ + mb(); + + /* Now, update the write location */ + SetNextWriteLocation(OutRingInfo, nextWriteLocation); + + /* DumpRingInfo(OutRingInfo, "AFTER "); */ + + spin_unlock_irqrestore(&OutRingInfo->ring_lock, flags); + + DPRINT_EXIT(VMBUS); + + return 0; +} + + +/*++ + +Name: + RingBufferPeek() + +Description: + Read without advancing the read index + +--*/ +int RingBufferPeek(RING_BUFFER_INFO *InRingInfo, void *Buffer, u32 BufferLen) +{ + u32 bytesAvailToWrite; + u32 bytesAvailToRead; + u32 nextReadLocation = 0; + unsigned long flags; + + spin_lock_irqsave(&InRingInfo->ring_lock, flags); + + GetRingBufferAvailBytes(InRingInfo, + &bytesAvailToRead, + &bytesAvailToWrite); + + /* Make sure there is something to read */ + if (bytesAvailToRead < BufferLen) { + /* DPRINT_DBG(VMBUS, + "got callback but not enough to read " + "!!", + bytesAvailToRead, + BufferLen); */ + + spin_unlock_irqrestore(&InRingInfo->ring_lock, flags); + + return -1; + } + + /* Convert to byte offset */ + nextReadLocation = GetNextReadLocation(InRingInfo); + + nextReadLocation = CopyFromRingBuffer(InRingInfo, + Buffer, + BufferLen, + nextReadLocation); + + spin_unlock_irqrestore(&InRingInfo->ring_lock, flags); + + return 0; +} + + +/*++ + +Name: + RingBufferRead() + +Description: + Read and advance the read index + +--*/ +int RingBufferRead(RING_BUFFER_INFO *InRingInfo, void *Buffer, + u32 BufferLen, u32 Offset) +{ + u32 bytesAvailToWrite; + u32 bytesAvailToRead; + u32 nextReadLocation = 0; + u64 prevIndices = 0; + unsigned long flags; + + if (BufferLen <= 0) + return -EINVAL; + + spin_lock_irqsave(&InRingInfo->ring_lock, flags); + + GetRingBufferAvailBytes(InRingInfo, + &bytesAvailToRead, + &bytesAvailToWrite); + + DPRINT_DBG(VMBUS, "Reading %u bytes...", BufferLen); + + /* DumpRingInfo(InRingInfo, "BEFORE "); */ + + /* Make sure there is something to read */ + if (bytesAvailToRead < BufferLen) { + DPRINT_DBG(VMBUS, + "got callback but not enough to read " + "!!", + bytesAvailToRead, + BufferLen); + + spin_unlock_irqrestore(&InRingInfo->ring_lock, flags); + + return -1; + } + + nextReadLocation = GetNextReadLocationWithOffset(InRingInfo, Offset); + + nextReadLocation = CopyFromRingBuffer(InRingInfo, + Buffer, + BufferLen, + nextReadLocation); + + nextReadLocation = CopyFromRingBuffer(InRingInfo, + &prevIndices, + sizeof(u64), + nextReadLocation); + + /* Make sure all reads are done before we update the read index since */ + /* the writer may start writing to the read area once the read index */ + /*is updated */ + mb(); + + /* Update the read index */ + SetNextReadLocation(InRingInfo, nextReadLocation); + + /* DumpRingInfo(InRingInfo, "AFTER "); */ + + spin_unlock_irqrestore(&InRingInfo->ring_lock, flags); + + return 0; +} + + +/*++ + +Name: + CopyToRingBuffer() + +Description: + Helper routine to copy from source to ring buffer. + Assume there is enough room. Handles wrap-around in dest case only!! + +--*/ +static u32 +CopyToRingBuffer( + RING_BUFFER_INFO *RingInfo, + u32 StartWriteOffset, + void *Src, + u32 SrcLen) +{ + void *ringBuffer = GetRingBuffer(RingInfo); + u32 ringBufferSize = GetRingBufferSize(RingInfo); + u32 fragLen; + + /* wrap-around detected! */ + if (SrcLen > ringBufferSize - StartWriteOffset) { + DPRINT_DBG(VMBUS, "wrap-around detected!"); + + fragLen = ringBufferSize - StartWriteOffset; + memcpy(ringBuffer + StartWriteOffset, Src, fragLen); + memcpy(ringBuffer, Src + fragLen, SrcLen - fragLen); + } else + memcpy(ringBuffer + StartWriteOffset, Src, SrcLen); + + StartWriteOffset += SrcLen; + StartWriteOffset %= ringBufferSize; + + return StartWriteOffset; +} + + +/*++ + +Name: + CopyFromRingBuffer() + +Description: + Helper routine to copy to source from ring buffer. + Assume there is enough room. Handles wrap-around in src case only!! + +--*/ +static u32 +CopyFromRingBuffer( + RING_BUFFER_INFO *RingInfo, + void *Dest, + u32 DestLen, + u32 StartReadOffset) +{ + void *ringBuffer = GetRingBuffer(RingInfo); + u32 ringBufferSize = GetRingBufferSize(RingInfo); + + u32 fragLen; + + /* wrap-around detected at the src */ + if (DestLen > ringBufferSize - StartReadOffset) { + DPRINT_DBG(VMBUS, "src wrap-around detected!"); + + fragLen = ringBufferSize - StartReadOffset; + + memcpy(Dest, ringBuffer + StartReadOffset, fragLen); + memcpy(Dest + fragLen, ringBuffer, DestLen - fragLen); + } else + + memcpy(Dest, ringBuffer + StartReadOffset, DestLen); + + + StartReadOffset += DestLen; + StartReadOffset %= ringBufferSize; + + return StartReadOffset; +} + + +/* eof */ diff --git a/drivers/staging/hv/ring_buffer.h b/drivers/staging/hv/ring_buffer.h new file mode 100644 index 0000000..6202157 --- /dev/null +++ b/drivers/staging/hv/ring_buffer.h @@ -0,0 +1,101 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _RING_BUFFER_H_ +#define _RING_BUFFER_H_ + +#include + +typedef struct _RING_BUFFER { + /* Offset in bytes from the start of ring data below */ + volatile u32 WriteIndex; + + /* Offset in bytes from the start of ring data below */ + volatile u32 ReadIndex; + + volatile u32 InterruptMask; + + /* Pad it to PAGE_SIZE so that data starts on page boundary */ + u8 Reserved[4084]; + + /* NOTE: + * The InterruptMask field is used only for channels but since our + * vmbus connection also uses this data structure and its data starts + * here, we commented out this field. + */ + /* volatile u32 InterruptMask; */ + + /* + * Ring data starts here + RingDataStartOffset + * !!! DO NOT place any fields below this !!! + */ + u8 Buffer[0]; +} __attribute__((packed)) RING_BUFFER; + +typedef struct _RING_BUFFER_INFO { + RING_BUFFER *RingBuffer; + u32 RingSize; /* Include the shared header */ + spinlock_t ring_lock; + + u32 RingDataSize; /* < ringSize */ + u32 RingDataStartOffset; + +} RING_BUFFER_INFO; + +typedef struct _RING_BUFFER_DEBUG_INFO { + u32 CurrentInterruptMask; + u32 CurrentReadIndex; + u32 CurrentWriteIndex; + u32 BytesAvailToRead; + u32 BytesAvailToWrite; +} RING_BUFFER_DEBUG_INFO; + + + +/* Interface */ + + +int RingBufferInit(RING_BUFFER_INFO *RingInfo, void *Buffer, u32 BufferLen); + +void RingBufferCleanup(RING_BUFFER_INFO *RingInfo); + +int RingBufferWrite(RING_BUFFER_INFO *RingInfo, + struct scatterlist *sglist, + u32 sgcount); + +int RingBufferPeek(RING_BUFFER_INFO *RingInfo, void *Buffer, u32 BufferLen); + +int RingBufferRead(RING_BUFFER_INFO *RingInfo, + void *Buffer, + u32 BufferLen, + u32 Offset); + +u32 GetRingBufferInterruptMask(RING_BUFFER_INFO *RingInfo); + +void DumpRingInfo(RING_BUFFER_INFO *RingInfo, char *Prefix); + +void RingBufferGetDebugInfo(RING_BUFFER_INFO *RingInfo, + RING_BUFFER_DEBUG_INFO *DebugInfo); + +#endif /* _RING_BUFFER_H_ */ -- cgit v0.10.2 From 376a045f3a90ce4ca02aa9c32ea3c81332c10ecc Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:24:25 -0700 Subject: Staging: hv: rename BlkVsc.c to blkvsc.c Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/BlkVsc.c b/drivers/staging/hv/BlkVsc.c deleted file mode 100644 index b2f6005..0000000 --- a/drivers/staging/hv/BlkVsc.c +++ /dev/null @@ -1,112 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ -#include -#include -#include "osd.h" -#include "StorVsc.c" - -static const char *gBlkDriverName = "blkvsc"; - -/* {32412632-86cb-44a2-9b5c-50d1417354f5} */ -static const struct hv_guid gBlkVscDeviceType = { - .data = { - 0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44, - 0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5 - } -}; - -static int BlkVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) -{ - struct storvsc_device_info *deviceInfo; - int ret = 0; - - DPRINT_ENTER(BLKVSC); - - deviceInfo = (struct storvsc_device_info *)AdditionalInfo; - - ret = StorVscOnDeviceAdd(Device, AdditionalInfo); - if (ret != 0) { - DPRINT_EXIT(BLKVSC); - return ret; - } - - /* - * We need to use the device instance guid to set the path and target - * id. For IDE devices, the device instance id is formatted as - * * - - 8899 - 000000000000. - */ - deviceInfo->PathId = Device->deviceInstance.data[3] << 24 | - Device->deviceInstance.data[2] << 16 | - Device->deviceInstance.data[1] << 8 | - Device->deviceInstance.data[0]; - - deviceInfo->TargetId = Device->deviceInstance.data[5] << 8 | - Device->deviceInstance.data[4]; - - DPRINT_EXIT(BLKVSC); - - return ret; -} - -int BlkVscInitialize(struct hv_driver *Driver) -{ - struct storvsc_driver_object *storDriver; - int ret = 0; - - DPRINT_ENTER(BLKVSC); - - storDriver = (struct storvsc_driver_object *)Driver; - - /* Make sure we are at least 2 pages since 1 page is used for control */ - /* ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); */ - - Driver->name = gBlkDriverName; - memcpy(&Driver->deviceType, &gBlkVscDeviceType, sizeof(struct hv_guid)); - - storDriver->RequestExtSize = sizeof(struct storvsc_request_extension); - - /* - * Divide the ring buffer data size (which is 1 page less than the ring - * buffer size since that page is reserved for the ring buffer indices) - * by the max request size (which is - * VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + struct vstor_packet + u64) - */ - storDriver->MaxOutstandingRequestsPerChannel = - ((storDriver->RingBufferSize - PAGE_SIZE) / - ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + - sizeof(struct vstor_packet) + sizeof(u64), - sizeof(u64))); - - DPRINT_INFO(BLKVSC, "max io outstd %u", - storDriver->MaxOutstandingRequestsPerChannel); - - /* Setup the dispatch table */ - storDriver->Base.OnDeviceAdd = BlkVscOnDeviceAdd; - storDriver->Base.OnDeviceRemove = StorVscOnDeviceRemove; - storDriver->Base.OnCleanup = StorVscOnCleanup; - storDriver->OnIORequest = StorVscOnIORequest; - - DPRINT_EXIT(BLKVSC); - - return ret; -} diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index faa8db1..6e8e8e8 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -8,5 +8,5 @@ hv_vmbus-objs := vmbus_drv.o osd.o \ Vmbus.o hv.o connection.o channel.o \ ChannelMgmt.o ChannelInterface.o ring_buffer.o hv_storvsc-objs := storvsc_drv.o StorVsc.o -hv_blkvsc-objs := blkvsc_drv.o BlkVsc.o +hv_blkvsc-objs := blkvsc_drv.o blkvsc.o hv_netvsc-objs := netvsc_drv.o NetVsc.o RndisFilter.o diff --git a/drivers/staging/hv/blkvsc.c b/drivers/staging/hv/blkvsc.c new file mode 100644 index 0000000..b2f6005 --- /dev/null +++ b/drivers/staging/hv/blkvsc.c @@ -0,0 +1,112 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ +#include +#include +#include "osd.h" +#include "StorVsc.c" + +static const char *gBlkDriverName = "blkvsc"; + +/* {32412632-86cb-44a2-9b5c-50d1417354f5} */ +static const struct hv_guid gBlkVscDeviceType = { + .data = { + 0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44, + 0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5 + } +}; + +static int BlkVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) +{ + struct storvsc_device_info *deviceInfo; + int ret = 0; + + DPRINT_ENTER(BLKVSC); + + deviceInfo = (struct storvsc_device_info *)AdditionalInfo; + + ret = StorVscOnDeviceAdd(Device, AdditionalInfo); + if (ret != 0) { + DPRINT_EXIT(BLKVSC); + return ret; + } + + /* + * We need to use the device instance guid to set the path and target + * id. For IDE devices, the device instance id is formatted as + * * - - 8899 - 000000000000. + */ + deviceInfo->PathId = Device->deviceInstance.data[3] << 24 | + Device->deviceInstance.data[2] << 16 | + Device->deviceInstance.data[1] << 8 | + Device->deviceInstance.data[0]; + + deviceInfo->TargetId = Device->deviceInstance.data[5] << 8 | + Device->deviceInstance.data[4]; + + DPRINT_EXIT(BLKVSC); + + return ret; +} + +int BlkVscInitialize(struct hv_driver *Driver) +{ + struct storvsc_driver_object *storDriver; + int ret = 0; + + DPRINT_ENTER(BLKVSC); + + storDriver = (struct storvsc_driver_object *)Driver; + + /* Make sure we are at least 2 pages since 1 page is used for control */ + /* ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); */ + + Driver->name = gBlkDriverName; + memcpy(&Driver->deviceType, &gBlkVscDeviceType, sizeof(struct hv_guid)); + + storDriver->RequestExtSize = sizeof(struct storvsc_request_extension); + + /* + * Divide the ring buffer data size (which is 1 page less than the ring + * buffer size since that page is reserved for the ring buffer indices) + * by the max request size (which is + * VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + struct vstor_packet + u64) + */ + storDriver->MaxOutstandingRequestsPerChannel = + ((storDriver->RingBufferSize - PAGE_SIZE) / + ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + + sizeof(struct vstor_packet) + sizeof(u64), + sizeof(u64))); + + DPRINT_INFO(BLKVSC, "max io outstd %u", + storDriver->MaxOutstandingRequestsPerChannel); + + /* Setup the dispatch table */ + storDriver->Base.OnDeviceAdd = BlkVscOnDeviceAdd; + storDriver->Base.OnDeviceRemove = StorVscOnDeviceRemove; + storDriver->Base.OnCleanup = StorVscOnCleanup; + storDriver->OnIORequest = StorVscOnIORequest; + + DPRINT_EXIT(BLKVSC); + + return ret; +} -- cgit v0.10.2 From 98109c5a961ba77e0910a5bec66bd57a673fad52 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:25:23 -0700 Subject: Staging: hv: rename Vmbus.c to vmbus.c Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 6e8e8e8..f58a4e7 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -5,7 +5,7 @@ obj-$(CONFIG_HYPERV_NET) += hv_netvsc.o obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o hv_vmbus-objs := vmbus_drv.o osd.o \ - Vmbus.o hv.o connection.o channel.o \ + vmbus.o hv.o connection.o channel.o \ ChannelMgmt.o ChannelInterface.o ring_buffer.o hv_storvsc-objs := storvsc_drv.o StorVsc.o hv_blkvsc-objs := blkvsc_drv.o blkvsc.o diff --git a/drivers/staging/hv/Vmbus.c b/drivers/staging/hv/Vmbus.c deleted file mode 100644 index 90b14be..0000000 --- a/drivers/staging/hv/Vmbus.c +++ /dev/null @@ -1,312 +0,0 @@ -/* - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ -#include -#include -#include -#include "osd.h" -#include "logging.h" -#include "VersionInfo.h" -#include "VmbusPrivate.h" - -static const char *gDriverName = "vmbus"; - -/* - * Windows vmbus does not defined this. - * We defined this to be consistent with other devices - */ -/* {c5295816-f63a-4d5f-8d1a-4daf999ca185} */ -static const struct hv_guid gVmbusDeviceType = { - .data = { - 0x16, 0x58, 0x29, 0xc5, 0x3a, 0xf6, 0x5f, 0x4d, - 0x8d, 0x1a, 0x4d, 0xaf, 0x99, 0x9c, 0xa1, 0x85 - } -}; - -/* {ac3760fc-9adf-40aa-9427-a70ed6de95c5} */ -static const struct hv_guid gVmbusDeviceId = { - .data = { - 0xfc, 0x60, 0x37, 0xac, 0xdf, 0x9a, 0xaa, 0x40, - 0x94, 0x27, 0xa7, 0x0e, 0xd6, 0xde, 0x95, 0xc5 - } -}; - -static struct hv_driver *gDriver; /* vmbus driver object */ -static struct hv_device *gDevice; /* vmbus root device */ - -/* - * VmbusGetChannelOffers - Retrieve the channel offers from the parent partition - */ -static void VmbusGetChannelOffers(void) -{ - DPRINT_ENTER(VMBUS); - VmbusChannelRequestOffers(); - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusGetChannelInterface - Get the channel interface - */ -static void VmbusGetChannelInterface(struct vmbus_channel_interface *Interface) -{ - GetChannelInterface(Interface); -} - -/* - * VmbusGetChannelInfo - Get the device info for the specified device object - */ -static void VmbusGetChannelInfo(struct hv_device *DeviceObject, - struct hv_device_info *DeviceInfo) -{ - GetChannelInfo(DeviceObject, DeviceInfo); -} - -/* - * VmbusCreateChildDevice - Creates the child device on the bus that represents the channel offer - */ -struct hv_device *VmbusChildDeviceCreate(struct hv_guid *DeviceType, - struct hv_guid *DeviceInstance, - void *Context) -{ - struct vmbus_driver *vmbusDriver = (struct vmbus_driver *)gDriver; - - return vmbusDriver->OnChildDeviceCreate(DeviceType, DeviceInstance, - Context); -} - -/* - * VmbusChildDeviceAdd - Registers the child device with the vmbus - */ -int VmbusChildDeviceAdd(struct hv_device *ChildDevice) -{ - struct vmbus_driver *vmbusDriver = (struct vmbus_driver *)gDriver; - - return vmbusDriver->OnChildDeviceAdd(gDevice, ChildDevice); -} - -/* - * VmbusChildDeviceRemove Unregisters the child device from the vmbus - */ -void VmbusChildDeviceRemove(struct hv_device *ChildDevice) -{ - struct vmbus_driver *vmbusDriver = (struct vmbus_driver *)gDriver; - - vmbusDriver->OnChildDeviceRemove(ChildDevice); -} - -/* - * VmbusOnDeviceAdd - Callback when the root bus device is added - */ -static int VmbusOnDeviceAdd(struct hv_device *dev, void *AdditionalInfo) -{ - u32 *irqvector = AdditionalInfo; - int ret; - - DPRINT_ENTER(VMBUS); - - gDevice = dev; - - memcpy(&gDevice->deviceType, &gVmbusDeviceType, sizeof(struct hv_guid)); - memcpy(&gDevice->deviceInstance, &gVmbusDeviceId, - sizeof(struct hv_guid)); - - /* strcpy(dev->name, "vmbus"); */ - /* SynIC setup... */ - on_each_cpu(HvSynicInit, (void *)irqvector, 1); - - /* Connect to VMBus in the root partition */ - ret = VmbusConnect(); - - /* VmbusSendEvent(device->localPortId+1); */ - DPRINT_EXIT(VMBUS); - - return ret; -} - -/* - * VmbusOnDeviceRemove - Callback when the root bus device is removed - */ -static int VmbusOnDeviceRemove(struct hv_device *dev) -{ - int ret = 0; - - DPRINT_ENTER(VMBUS); - VmbusChannelReleaseUnattachedChannels(); - VmbusDisconnect(); - on_each_cpu(HvSynicCleanup, NULL, 1); - DPRINT_EXIT(VMBUS); - - return ret; -} - -/* - * VmbusOnCleanup - Perform any cleanup when the driver is removed - */ -static void VmbusOnCleanup(struct hv_driver *drv) -{ - /* struct vmbus_driver *driver = (struct vmbus_driver *)drv; */ - - DPRINT_ENTER(VMBUS); - HvCleanup(); - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusOnMsgDPC - DPC routine to handle messages from the hypervisior - */ -static void VmbusOnMsgDPC(struct hv_driver *drv) -{ - int cpu = smp_processor_id(); - void *page_addr = gHvContext.synICMessagePage[cpu]; - struct hv_message *msg = (struct hv_message *)page_addr + - VMBUS_MESSAGE_SINT; - struct hv_message *copied; - - while (1) { - if (msg->Header.MessageType == HvMessageTypeNone) { - /* no msg */ - break; - } else { - copied = kmalloc(sizeof(*copied), GFP_ATOMIC); - if (copied == NULL) - continue; - - memcpy(copied, msg, sizeof(*copied)); - osd_schedule_callback(gVmbusConnection.WorkQueue, - VmbusOnChannelMessage, - (void *)copied); - } - - msg->Header.MessageType = HvMessageTypeNone; - - /* - * Make sure the write to MessageType (ie set to - * HvMessageTypeNone) happens before we read the - * MessagePending and EOMing. Otherwise, the EOMing - * will not deliver any more messages since there is - * no empty slot - */ - mb(); - - if (msg->Header.MessageFlags.MessagePending) { - /* - * This will cause message queue rescan to - * possibly deliver another msg from the - * hypervisor - */ - wrmsrl(HV_X64_MSR_EOM, 0); - } - } -} - -/* - * VmbusOnEventDPC - DPC routine to handle events from the hypervisior - */ -static void VmbusOnEventDPC(struct hv_driver *drv) -{ - /* TODO: Process any events */ - VmbusOnEvents(); -} - -/* - * VmbusOnISR - ISR routine - */ -static int VmbusOnISR(struct hv_driver *drv) -{ - int ret = 0; - int cpu = smp_processor_id(); - void *page_addr; - struct hv_message *msg; - union hv_synic_event_flags *event; - - page_addr = gHvContext.synICMessagePage[cpu]; - msg = (struct hv_message *)page_addr + VMBUS_MESSAGE_SINT; - - DPRINT_ENTER(VMBUS); - - /* Check if there are actual msgs to be process */ - if (msg->Header.MessageType != HvMessageTypeNone) { - DPRINT_DBG(VMBUS, "received msg type %d size %d", - msg->Header.MessageType, - msg->Header.PayloadSize); - ret |= 0x1; - } - - /* TODO: Check if there are events to be process */ - page_addr = gHvContext.synICEventPage[cpu]; - event = (union hv_synic_event_flags *)page_addr + VMBUS_MESSAGE_SINT; - - /* Since we are a child, we only need to check bit 0 */ - if (test_and_clear_bit(0, (unsigned long *) &event->Flags32[0])) { - DPRINT_DBG(VMBUS, "received event %d", event->Flags32[0]); - ret |= 0x2; - } - - DPRINT_EXIT(VMBUS); - return ret; -} - -/* - * VmbusInitialize - Main entry point - */ -int VmbusInitialize(struct hv_driver *drv) -{ - struct vmbus_driver *driver = (struct vmbus_driver *)drv; - int ret; - - DPRINT_ENTER(VMBUS); - - DPRINT_INFO(VMBUS, "+++++++ HV Driver version = %s +++++++", - HV_DRV_VERSION); - DPRINT_INFO(VMBUS, "+++++++ Vmbus supported version = %d +++++++", - VMBUS_REVISION_NUMBER); - DPRINT_INFO(VMBUS, "+++++++ Vmbus using SINT %d +++++++", - VMBUS_MESSAGE_SINT); - DPRINT_DBG(VMBUS, "sizeof(VMBUS_CHANNEL_PACKET_PAGE_BUFFER)=%zd, " - "sizeof(VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER)=%zd", - sizeof(struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER), - sizeof(struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER)); - - drv->name = gDriverName; - memcpy(&drv->deviceType, &gVmbusDeviceType, sizeof(struct hv_guid)); - - /* Setup dispatch table */ - driver->Base.OnDeviceAdd = VmbusOnDeviceAdd; - driver->Base.OnDeviceRemove = VmbusOnDeviceRemove; - driver->Base.OnCleanup = VmbusOnCleanup; - driver->OnIsr = VmbusOnISR; - driver->OnMsgDpc = VmbusOnMsgDPC; - driver->OnEventDpc = VmbusOnEventDPC; - driver->GetChannelOffers = VmbusGetChannelOffers; - driver->GetChannelInterface = VmbusGetChannelInterface; - driver->GetChannelInfo = VmbusGetChannelInfo; - - /* Hypervisor initialization...setup hypercall page..etc */ - ret = HvInit(); - if (ret != 0) - DPRINT_ERR(VMBUS, "Unable to initialize the hypervisor - 0x%x", - ret); - gDriver = drv; - - DPRINT_EXIT(VMBUS); - - return ret; -} diff --git a/drivers/staging/hv/vmbus.c b/drivers/staging/hv/vmbus.c new file mode 100644 index 0000000..90b14be --- /dev/null +++ b/drivers/staging/hv/vmbus.c @@ -0,0 +1,312 @@ +/* + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ +#include +#include +#include +#include "osd.h" +#include "logging.h" +#include "VersionInfo.h" +#include "VmbusPrivate.h" + +static const char *gDriverName = "vmbus"; + +/* + * Windows vmbus does not defined this. + * We defined this to be consistent with other devices + */ +/* {c5295816-f63a-4d5f-8d1a-4daf999ca185} */ +static const struct hv_guid gVmbusDeviceType = { + .data = { + 0x16, 0x58, 0x29, 0xc5, 0x3a, 0xf6, 0x5f, 0x4d, + 0x8d, 0x1a, 0x4d, 0xaf, 0x99, 0x9c, 0xa1, 0x85 + } +}; + +/* {ac3760fc-9adf-40aa-9427-a70ed6de95c5} */ +static const struct hv_guid gVmbusDeviceId = { + .data = { + 0xfc, 0x60, 0x37, 0xac, 0xdf, 0x9a, 0xaa, 0x40, + 0x94, 0x27, 0xa7, 0x0e, 0xd6, 0xde, 0x95, 0xc5 + } +}; + +static struct hv_driver *gDriver; /* vmbus driver object */ +static struct hv_device *gDevice; /* vmbus root device */ + +/* + * VmbusGetChannelOffers - Retrieve the channel offers from the parent partition + */ +static void VmbusGetChannelOffers(void) +{ + DPRINT_ENTER(VMBUS); + VmbusChannelRequestOffers(); + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusGetChannelInterface - Get the channel interface + */ +static void VmbusGetChannelInterface(struct vmbus_channel_interface *Interface) +{ + GetChannelInterface(Interface); +} + +/* + * VmbusGetChannelInfo - Get the device info for the specified device object + */ +static void VmbusGetChannelInfo(struct hv_device *DeviceObject, + struct hv_device_info *DeviceInfo) +{ + GetChannelInfo(DeviceObject, DeviceInfo); +} + +/* + * VmbusCreateChildDevice - Creates the child device on the bus that represents the channel offer + */ +struct hv_device *VmbusChildDeviceCreate(struct hv_guid *DeviceType, + struct hv_guid *DeviceInstance, + void *Context) +{ + struct vmbus_driver *vmbusDriver = (struct vmbus_driver *)gDriver; + + return vmbusDriver->OnChildDeviceCreate(DeviceType, DeviceInstance, + Context); +} + +/* + * VmbusChildDeviceAdd - Registers the child device with the vmbus + */ +int VmbusChildDeviceAdd(struct hv_device *ChildDevice) +{ + struct vmbus_driver *vmbusDriver = (struct vmbus_driver *)gDriver; + + return vmbusDriver->OnChildDeviceAdd(gDevice, ChildDevice); +} + +/* + * VmbusChildDeviceRemove Unregisters the child device from the vmbus + */ +void VmbusChildDeviceRemove(struct hv_device *ChildDevice) +{ + struct vmbus_driver *vmbusDriver = (struct vmbus_driver *)gDriver; + + vmbusDriver->OnChildDeviceRemove(ChildDevice); +} + +/* + * VmbusOnDeviceAdd - Callback when the root bus device is added + */ +static int VmbusOnDeviceAdd(struct hv_device *dev, void *AdditionalInfo) +{ + u32 *irqvector = AdditionalInfo; + int ret; + + DPRINT_ENTER(VMBUS); + + gDevice = dev; + + memcpy(&gDevice->deviceType, &gVmbusDeviceType, sizeof(struct hv_guid)); + memcpy(&gDevice->deviceInstance, &gVmbusDeviceId, + sizeof(struct hv_guid)); + + /* strcpy(dev->name, "vmbus"); */ + /* SynIC setup... */ + on_each_cpu(HvSynicInit, (void *)irqvector, 1); + + /* Connect to VMBus in the root partition */ + ret = VmbusConnect(); + + /* VmbusSendEvent(device->localPortId+1); */ + DPRINT_EXIT(VMBUS); + + return ret; +} + +/* + * VmbusOnDeviceRemove - Callback when the root bus device is removed + */ +static int VmbusOnDeviceRemove(struct hv_device *dev) +{ + int ret = 0; + + DPRINT_ENTER(VMBUS); + VmbusChannelReleaseUnattachedChannels(); + VmbusDisconnect(); + on_each_cpu(HvSynicCleanup, NULL, 1); + DPRINT_EXIT(VMBUS); + + return ret; +} + +/* + * VmbusOnCleanup - Perform any cleanup when the driver is removed + */ +static void VmbusOnCleanup(struct hv_driver *drv) +{ + /* struct vmbus_driver *driver = (struct vmbus_driver *)drv; */ + + DPRINT_ENTER(VMBUS); + HvCleanup(); + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusOnMsgDPC - DPC routine to handle messages from the hypervisior + */ +static void VmbusOnMsgDPC(struct hv_driver *drv) +{ + int cpu = smp_processor_id(); + void *page_addr = gHvContext.synICMessagePage[cpu]; + struct hv_message *msg = (struct hv_message *)page_addr + + VMBUS_MESSAGE_SINT; + struct hv_message *copied; + + while (1) { + if (msg->Header.MessageType == HvMessageTypeNone) { + /* no msg */ + break; + } else { + copied = kmalloc(sizeof(*copied), GFP_ATOMIC); + if (copied == NULL) + continue; + + memcpy(copied, msg, sizeof(*copied)); + osd_schedule_callback(gVmbusConnection.WorkQueue, + VmbusOnChannelMessage, + (void *)copied); + } + + msg->Header.MessageType = HvMessageTypeNone; + + /* + * Make sure the write to MessageType (ie set to + * HvMessageTypeNone) happens before we read the + * MessagePending and EOMing. Otherwise, the EOMing + * will not deliver any more messages since there is + * no empty slot + */ + mb(); + + if (msg->Header.MessageFlags.MessagePending) { + /* + * This will cause message queue rescan to + * possibly deliver another msg from the + * hypervisor + */ + wrmsrl(HV_X64_MSR_EOM, 0); + } + } +} + +/* + * VmbusOnEventDPC - DPC routine to handle events from the hypervisior + */ +static void VmbusOnEventDPC(struct hv_driver *drv) +{ + /* TODO: Process any events */ + VmbusOnEvents(); +} + +/* + * VmbusOnISR - ISR routine + */ +static int VmbusOnISR(struct hv_driver *drv) +{ + int ret = 0; + int cpu = smp_processor_id(); + void *page_addr; + struct hv_message *msg; + union hv_synic_event_flags *event; + + page_addr = gHvContext.synICMessagePage[cpu]; + msg = (struct hv_message *)page_addr + VMBUS_MESSAGE_SINT; + + DPRINT_ENTER(VMBUS); + + /* Check if there are actual msgs to be process */ + if (msg->Header.MessageType != HvMessageTypeNone) { + DPRINT_DBG(VMBUS, "received msg type %d size %d", + msg->Header.MessageType, + msg->Header.PayloadSize); + ret |= 0x1; + } + + /* TODO: Check if there are events to be process */ + page_addr = gHvContext.synICEventPage[cpu]; + event = (union hv_synic_event_flags *)page_addr + VMBUS_MESSAGE_SINT; + + /* Since we are a child, we only need to check bit 0 */ + if (test_and_clear_bit(0, (unsigned long *) &event->Flags32[0])) { + DPRINT_DBG(VMBUS, "received event %d", event->Flags32[0]); + ret |= 0x2; + } + + DPRINT_EXIT(VMBUS); + return ret; +} + +/* + * VmbusInitialize - Main entry point + */ +int VmbusInitialize(struct hv_driver *drv) +{ + struct vmbus_driver *driver = (struct vmbus_driver *)drv; + int ret; + + DPRINT_ENTER(VMBUS); + + DPRINT_INFO(VMBUS, "+++++++ HV Driver version = %s +++++++", + HV_DRV_VERSION); + DPRINT_INFO(VMBUS, "+++++++ Vmbus supported version = %d +++++++", + VMBUS_REVISION_NUMBER); + DPRINT_INFO(VMBUS, "+++++++ Vmbus using SINT %d +++++++", + VMBUS_MESSAGE_SINT); + DPRINT_DBG(VMBUS, "sizeof(VMBUS_CHANNEL_PACKET_PAGE_BUFFER)=%zd, " + "sizeof(VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER)=%zd", + sizeof(struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER), + sizeof(struct VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER)); + + drv->name = gDriverName; + memcpy(&drv->deviceType, &gVmbusDeviceType, sizeof(struct hv_guid)); + + /* Setup dispatch table */ + driver->Base.OnDeviceAdd = VmbusOnDeviceAdd; + driver->Base.OnDeviceRemove = VmbusOnDeviceRemove; + driver->Base.OnCleanup = VmbusOnCleanup; + driver->OnIsr = VmbusOnISR; + driver->OnMsgDpc = VmbusOnMsgDPC; + driver->OnEventDpc = VmbusOnEventDPC; + driver->GetChannelOffers = VmbusGetChannelOffers; + driver->GetChannelInterface = VmbusGetChannelInterface; + driver->GetChannelInfo = VmbusGetChannelInfo; + + /* Hypervisor initialization...setup hypercall page..etc */ + ret = HvInit(); + if (ret != 0) + DPRINT_ERR(VMBUS, "Unable to initialize the hypervisor - 0x%x", + ret); + gDriver = drv; + + DPRINT_EXIT(VMBUS); + + return ret; +} -- cgit v0.10.2 From af167ae9b27ee5ba19272739f9192709882ed4fa Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:27:31 -0700 Subject: Staging: hv: rename NetVsc.c and .h to netvsc.c and .h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index f58a4e7..385eb90 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -9,4 +9,4 @@ hv_vmbus-objs := vmbus_drv.o osd.o \ ChannelMgmt.o ChannelInterface.o ring_buffer.o hv_storvsc-objs := storvsc_drv.o StorVsc.o hv_blkvsc-objs := blkvsc_drv.o blkvsc.o -hv_netvsc-objs := netvsc_drv.o NetVsc.o RndisFilter.o +hv_netvsc-objs := netvsc_drv.o netvsc.o RndisFilter.o diff --git a/drivers/staging/hv/NetVsc.c b/drivers/staging/hv/NetVsc.c deleted file mode 100644 index f852984..0000000 --- a/drivers/staging/hv/NetVsc.c +++ /dev/null @@ -1,1393 +0,0 @@ -/* - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - */ -#include -#include -#include -#include -#include -#include "osd.h" -#include "logging.h" -#include "NetVsc.h" -#include "RndisFilter.h" - - -/* Globals */ -static const char *gDriverName = "netvsc"; - -/* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */ -static const struct hv_guid gNetVscDeviceType = { - .data = { - 0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46, - 0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E - } -}; - -static int NetVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo); - -static int NetVscOnDeviceRemove(struct hv_device *Device); - -static void NetVscOnCleanup(struct hv_driver *Driver); - -static void NetVscOnChannelCallback(void *context); - -static int NetVscInitializeSendBufferWithNetVsp(struct hv_device *Device); - -static int NetVscInitializeReceiveBufferWithNetVsp(struct hv_device *Device); - -static int NetVscDestroySendBuffer(struct netvsc_device *NetDevice); - -static int NetVscDestroyReceiveBuffer(struct netvsc_device *NetDevice); - -static int NetVscConnectToVsp(struct hv_device *Device); - -static void NetVscOnSendCompletion(struct hv_device *Device, - struct vmpacket_descriptor *Packet); - -static int NetVscOnSend(struct hv_device *Device, - struct hv_netvsc_packet *Packet); - -static void NetVscOnReceive(struct hv_device *Device, - struct vmpacket_descriptor *Packet); - -static void NetVscOnReceiveCompletion(void *Context); - -static void NetVscSendReceiveCompletion(struct hv_device *Device, - u64 TransactionId); - - -static struct netvsc_device *AllocNetDevice(struct hv_device *Device) -{ - struct netvsc_device *netDevice; - - netDevice = kzalloc(sizeof(struct netvsc_device), GFP_KERNEL); - if (!netDevice) - return NULL; - - /* Set to 2 to allow both inbound and outbound traffic */ - atomic_cmpxchg(&netDevice->RefCount, 0, 2); - - netDevice->Device = Device; - Device->Extension = netDevice; - - return netDevice; -} - -static void FreeNetDevice(struct netvsc_device *Device) -{ - WARN_ON(atomic_read(&Device->RefCount) == 0); - Device->Device->Extension = NULL; - kfree(Device); -} - - -/* Get the net device object iff exists and its refcount > 1 */ -static struct netvsc_device *GetOutboundNetDevice(struct hv_device *Device) -{ - struct netvsc_device *netDevice; - - netDevice = Device->Extension; - if (netDevice && atomic_read(&netDevice->RefCount) > 1) - atomic_inc(&netDevice->RefCount); - else - netDevice = NULL; - - return netDevice; -} - -/* Get the net device object iff exists and its refcount > 0 */ -static struct netvsc_device *GetInboundNetDevice(struct hv_device *Device) -{ - struct netvsc_device *netDevice; - - netDevice = Device->Extension; - if (netDevice && atomic_read(&netDevice->RefCount)) - atomic_inc(&netDevice->RefCount); - else - netDevice = NULL; - - return netDevice; -} - -static void PutNetDevice(struct hv_device *Device) -{ - struct netvsc_device *netDevice; - - netDevice = Device->Extension; - /* ASSERT(netDevice); */ - - atomic_dec(&netDevice->RefCount); -} - -static struct netvsc_device *ReleaseOutboundNetDevice(struct hv_device *Device) -{ - struct netvsc_device *netDevice; - - netDevice = Device->Extension; - if (netDevice == NULL) - return NULL; - - /* Busy wait until the ref drop to 2, then set it to 1 */ - while (atomic_cmpxchg(&netDevice->RefCount, 2, 1) != 2) - udelay(100); - - return netDevice; -} - -static struct netvsc_device *ReleaseInboundNetDevice(struct hv_device *Device) -{ - struct netvsc_device *netDevice; - - netDevice = Device->Extension; - if (netDevice == NULL) - return NULL; - - /* Busy wait until the ref drop to 1, then set it to 0 */ - while (atomic_cmpxchg(&netDevice->RefCount, 1, 0) != 1) - udelay(100); - - Device->Extension = NULL; - return netDevice; -} - -/* - * NetVscInitialize - Main entry point - */ -int NetVscInitialize(struct hv_driver *drv) -{ - struct netvsc_driver *driver = (struct netvsc_driver *)drv; - - DPRINT_ENTER(NETVSC); - - DPRINT_DBG(NETVSC, "sizeof(struct hv_netvsc_packet)=%zd, " - "sizeof(struct nvsp_message)=%zd, " - "sizeof(struct vmtransfer_page_packet_header)=%zd", - sizeof(struct hv_netvsc_packet), - sizeof(struct nvsp_message), - sizeof(struct vmtransfer_page_packet_header)); - - /* Make sure we are at least 2 pages since 1 page is used for control */ - /* ASSERT(driver->RingBufferSize >= (PAGE_SIZE << 1)); */ - - drv->name = gDriverName; - memcpy(&drv->deviceType, &gNetVscDeviceType, sizeof(struct hv_guid)); - - /* Make sure it is set by the caller */ - /* FIXME: These probably should still be tested in some way */ - /* ASSERT(driver->OnReceiveCallback); */ - /* ASSERT(driver->OnLinkStatusChanged); */ - - /* Setup the dispatch table */ - driver->Base.OnDeviceAdd = NetVscOnDeviceAdd; - driver->Base.OnDeviceRemove = NetVscOnDeviceRemove; - driver->Base.OnCleanup = NetVscOnCleanup; - - driver->OnSend = NetVscOnSend; - - RndisFilterInit(driver); - - DPRINT_EXIT(NETVSC); - - return 0; -} - -static int NetVscInitializeReceiveBufferWithNetVsp(struct hv_device *Device) -{ - int ret = 0; - struct netvsc_device *netDevice; - struct nvsp_message *initPacket; - - DPRINT_ENTER(NETVSC); - - netDevice = GetOutboundNetDevice(Device); - if (!netDevice) { - DPRINT_ERR(NETVSC, "unable to get net device..." - "device being destroyed?"); - DPRINT_EXIT(NETVSC); - return -1; - } - /* ASSERT(netDevice->ReceiveBufferSize > 0); */ - /* page-size grandularity */ - /* ASSERT((netDevice->ReceiveBufferSize & (PAGE_SIZE - 1)) == 0); */ - - netDevice->ReceiveBuffer = - osd_PageAlloc(netDevice->ReceiveBufferSize >> PAGE_SHIFT); - if (!netDevice->ReceiveBuffer) { - DPRINT_ERR(NETVSC, - "unable to allocate receive buffer of size %d", - netDevice->ReceiveBufferSize); - ret = -1; - goto Cleanup; - } - /* page-aligned buffer */ - /* ASSERT(((unsigned long)netDevice->ReceiveBuffer & (PAGE_SIZE - 1)) == */ - /* 0); */ - - DPRINT_INFO(NETVSC, "Establishing receive buffer's GPADL..."); - - /* - * Establish the gpadl handle for this buffer on this - * channel. Note: This call uses the vmbus connection rather - * than the channel to establish the gpadl handle. - */ - ret = Device->Driver->VmbusChannelInterface.EstablishGpadl(Device, - netDevice->ReceiveBuffer, - netDevice->ReceiveBufferSize, - &netDevice->ReceiveBufferGpadlHandle); - if (ret != 0) { - DPRINT_ERR(NETVSC, - "unable to establish receive buffer's gpadl"); - goto Cleanup; - } - - /* osd_WaitEventWait(ext->ChannelInitEvent); */ - - /* Notify the NetVsp of the gpadl handle */ - DPRINT_INFO(NETVSC, "Sending NvspMessage1TypeSendReceiveBuffer..."); - - initPacket = &netDevice->ChannelInitPacket; - - memset(initPacket, 0, sizeof(struct nvsp_message)); - - initPacket->Header.MessageType = NvspMessage1TypeSendReceiveBuffer; - initPacket->Messages.Version1Messages.SendReceiveBuffer.GpadlHandle = netDevice->ReceiveBufferGpadlHandle; - initPacket->Messages.Version1Messages.SendReceiveBuffer.Id = NETVSC_RECEIVE_BUFFER_ID; - - /* Send the gpadl notification request */ - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - initPacket, - sizeof(struct nvsp_message), - (unsigned long)initPacket, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - if (ret != 0) { - DPRINT_ERR(NETVSC, - "unable to send receive buffer's gpadl to netvsp"); - goto Cleanup; - } - - osd_WaitEventWait(netDevice->ChannelInitEvent); - - /* Check the response */ - if (initPacket->Messages.Version1Messages.SendReceiveBufferComplete.Status != NvspStatusSuccess) { - DPRINT_ERR(NETVSC, "Unable to complete receive buffer " - "initialzation with NetVsp - status %d", - initPacket->Messages.Version1Messages.SendReceiveBufferComplete.Status); - ret = -1; - goto Cleanup; - } - - /* Parse the response */ - /* ASSERT(netDevice->ReceiveSectionCount == 0); */ - /* ASSERT(netDevice->ReceiveSections == NULL); */ - - netDevice->ReceiveSectionCount = initPacket->Messages.Version1Messages.SendReceiveBufferComplete.NumSections; - - netDevice->ReceiveSections = kmalloc(netDevice->ReceiveSectionCount * sizeof(struct nvsp_1_receive_buffer_section), GFP_KERNEL); - if (netDevice->ReceiveSections == NULL) { - ret = -1; - goto Cleanup; - } - - memcpy(netDevice->ReceiveSections, - initPacket->Messages.Version1Messages.SendReceiveBufferComplete.Sections, - netDevice->ReceiveSectionCount * sizeof(struct nvsp_1_receive_buffer_section)); - - DPRINT_INFO(NETVSC, "Receive sections info (count %d, offset %d, " - "endoffset %d, suballoc size %d, num suballocs %d)", - netDevice->ReceiveSectionCount, - netDevice->ReceiveSections[0].Offset, - netDevice->ReceiveSections[0].EndOffset, - netDevice->ReceiveSections[0].SubAllocationSize, - netDevice->ReceiveSections[0].NumSubAllocations); - - /* - * For 1st release, there should only be 1 section that represents the - * entire receive buffer - */ - if (netDevice->ReceiveSectionCount != 1 || - netDevice->ReceiveSections->Offset != 0) { - ret = -1; - goto Cleanup; - } - - goto Exit; - -Cleanup: - NetVscDestroyReceiveBuffer(netDevice); - -Exit: - PutNetDevice(Device); - DPRINT_EXIT(NETVSC); - return ret; -} - -static int NetVscInitializeSendBufferWithNetVsp(struct hv_device *Device) -{ - int ret = 0; - struct netvsc_device *netDevice; - struct nvsp_message *initPacket; - - DPRINT_ENTER(NETVSC); - - netDevice = GetOutboundNetDevice(Device); - if (!netDevice) { - DPRINT_ERR(NETVSC, "unable to get net device..." - "device being destroyed?"); - DPRINT_EXIT(NETVSC); - return -1; - } - if (netDevice->SendBufferSize <= 0) { - ret = -EINVAL; - goto Cleanup; - } - - /* page-size grandularity */ - /* ASSERT((netDevice->SendBufferSize & (PAGE_SIZE - 1)) == 0); */ - - netDevice->SendBuffer = - osd_PageAlloc(netDevice->SendBufferSize >> PAGE_SHIFT); - if (!netDevice->SendBuffer) { - DPRINT_ERR(NETVSC, "unable to allocate send buffer of size %d", - netDevice->SendBufferSize); - ret = -1; - goto Cleanup; - } - /* page-aligned buffer */ - /* ASSERT(((unsigned long)netDevice->SendBuffer & (PAGE_SIZE - 1)) == 0); */ - - DPRINT_INFO(NETVSC, "Establishing send buffer's GPADL..."); - - /* - * Establish the gpadl handle for this buffer on this - * channel. Note: This call uses the vmbus connection rather - * than the channel to establish the gpadl handle. - */ - ret = Device->Driver->VmbusChannelInterface.EstablishGpadl(Device, - netDevice->SendBuffer, - netDevice->SendBufferSize, - &netDevice->SendBufferGpadlHandle); - if (ret != 0) { - DPRINT_ERR(NETVSC, "unable to establish send buffer's gpadl"); - goto Cleanup; - } - - /* osd_WaitEventWait(ext->ChannelInitEvent); */ - - /* Notify the NetVsp of the gpadl handle */ - DPRINT_INFO(NETVSC, "Sending NvspMessage1TypeSendSendBuffer..."); - - initPacket = &netDevice->ChannelInitPacket; - - memset(initPacket, 0, sizeof(struct nvsp_message)); - - initPacket->Header.MessageType = NvspMessage1TypeSendSendBuffer; - initPacket->Messages.Version1Messages.SendReceiveBuffer.GpadlHandle = netDevice->SendBufferGpadlHandle; - initPacket->Messages.Version1Messages.SendReceiveBuffer.Id = NETVSC_SEND_BUFFER_ID; - - /* Send the gpadl notification request */ - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - initPacket, sizeof(struct nvsp_message), - (unsigned long)initPacket, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - if (ret != 0) { - DPRINT_ERR(NETVSC, - "unable to send receive buffer's gpadl to netvsp"); - goto Cleanup; - } - - osd_WaitEventWait(netDevice->ChannelInitEvent); - - /* Check the response */ - if (initPacket->Messages.Version1Messages.SendSendBufferComplete.Status != NvspStatusSuccess) { - DPRINT_ERR(NETVSC, "Unable to complete send buffer " - "initialzation with NetVsp - status %d", - initPacket->Messages.Version1Messages.SendSendBufferComplete.Status); - ret = -1; - goto Cleanup; - } - - netDevice->SendSectionSize = initPacket->Messages.Version1Messages.SendSendBufferComplete.SectionSize; - - goto Exit; - -Cleanup: - NetVscDestroySendBuffer(netDevice); - -Exit: - PutNetDevice(Device); - DPRINT_EXIT(NETVSC); - return ret; -} - -static int NetVscDestroyReceiveBuffer(struct netvsc_device *NetDevice) -{ - struct nvsp_message *revokePacket; - int ret = 0; - - DPRINT_ENTER(NETVSC); - - /* - * If we got a section count, it means we received a - * SendReceiveBufferComplete msg (ie sent - * NvspMessage1TypeSendReceiveBuffer msg) therefore, we need - * to send a revoke msg here - */ - if (NetDevice->ReceiveSectionCount) { - DPRINT_INFO(NETVSC, - "Sending NvspMessage1TypeRevokeReceiveBuffer..."); - - /* Send the revoke receive buffer */ - revokePacket = &NetDevice->RevokePacket; - memset(revokePacket, 0, sizeof(struct nvsp_message)); - - revokePacket->Header.MessageType = NvspMessage1TypeRevokeReceiveBuffer; - revokePacket->Messages.Version1Messages.RevokeReceiveBuffer.Id = NETVSC_RECEIVE_BUFFER_ID; - - ret = NetDevice->Device->Driver->VmbusChannelInterface.SendPacket( - NetDevice->Device, - revokePacket, - sizeof(struct nvsp_message), - (unsigned long)revokePacket, - VmbusPacketTypeDataInBand, 0); - /* - * If we failed here, we might as well return and - * have a leak rather than continue and a bugchk - */ - if (ret != 0) { - DPRINT_ERR(NETVSC, "unable to send revoke receive " - "buffer to netvsp"); - DPRINT_EXIT(NETVSC); - return -1; - } - } - - /* Teardown the gpadl on the vsp end */ - if (NetDevice->ReceiveBufferGpadlHandle) { - DPRINT_INFO(NETVSC, "Tearing down receive buffer's GPADL..."); - - ret = NetDevice->Device->Driver->VmbusChannelInterface.TeardownGpadl( - NetDevice->Device, - NetDevice->ReceiveBufferGpadlHandle); - - /* If we failed here, we might as well return and have a leak rather than continue and a bugchk */ - if (ret != 0) { - DPRINT_ERR(NETVSC, - "unable to teardown receive buffer's gpadl"); - DPRINT_EXIT(NETVSC); - return -1; - } - NetDevice->ReceiveBufferGpadlHandle = 0; - } - - if (NetDevice->ReceiveBuffer) { - DPRINT_INFO(NETVSC, "Freeing up receive buffer..."); - - /* Free up the receive buffer */ - osd_PageFree(NetDevice->ReceiveBuffer, - NetDevice->ReceiveBufferSize >> PAGE_SHIFT); - NetDevice->ReceiveBuffer = NULL; - } - - if (NetDevice->ReceiveSections) { - NetDevice->ReceiveSectionCount = 0; - kfree(NetDevice->ReceiveSections); - NetDevice->ReceiveSections = NULL; - } - - DPRINT_EXIT(NETVSC); - - return ret; -} - -static int NetVscDestroySendBuffer(struct netvsc_device *NetDevice) -{ - struct nvsp_message *revokePacket; - int ret = 0; - - DPRINT_ENTER(NETVSC); - - /* - * If we got a section count, it means we received a - * SendReceiveBufferComplete msg (ie sent - * NvspMessage1TypeSendReceiveBuffer msg) therefore, we need - * to send a revoke msg here - */ - if (NetDevice->SendSectionSize) { - DPRINT_INFO(NETVSC, - "Sending NvspMessage1TypeRevokeSendBuffer..."); - - /* Send the revoke send buffer */ - revokePacket = &NetDevice->RevokePacket; - memset(revokePacket, 0, sizeof(struct nvsp_message)); - - revokePacket->Header.MessageType = NvspMessage1TypeRevokeSendBuffer; - revokePacket->Messages.Version1Messages.RevokeSendBuffer.Id = NETVSC_SEND_BUFFER_ID; - - ret = NetDevice->Device->Driver->VmbusChannelInterface.SendPacket(NetDevice->Device, - revokePacket, - sizeof(struct nvsp_message), - (unsigned long)revokePacket, - VmbusPacketTypeDataInBand, 0); - /* - * If we failed here, we might as well return and have a leak - * rather than continue and a bugchk - */ - if (ret != 0) { - DPRINT_ERR(NETVSC, "unable to send revoke send buffer " - "to netvsp"); - DPRINT_EXIT(NETVSC); - return -1; - } - } - - /* Teardown the gpadl on the vsp end */ - if (NetDevice->SendBufferGpadlHandle) { - DPRINT_INFO(NETVSC, "Tearing down send buffer's GPADL..."); - - ret = NetDevice->Device->Driver->VmbusChannelInterface.TeardownGpadl(NetDevice->Device, NetDevice->SendBufferGpadlHandle); - - /* - * If we failed here, we might as well return and have a leak - * rather than continue and a bugchk - */ - if (ret != 0) { - DPRINT_ERR(NETVSC, "unable to teardown send buffer's " - "gpadl"); - DPRINT_EXIT(NETVSC); - return -1; - } - NetDevice->SendBufferGpadlHandle = 0; - } - - if (NetDevice->SendBuffer) { - DPRINT_INFO(NETVSC, "Freeing up send buffer..."); - - /* Free up the receive buffer */ - osd_PageFree(NetDevice->SendBuffer, - NetDevice->SendBufferSize >> PAGE_SHIFT); - NetDevice->SendBuffer = NULL; - } - - DPRINT_EXIT(NETVSC); - - return ret; -} - - -static int NetVscConnectToVsp(struct hv_device *Device) -{ - int ret; - struct netvsc_device *netDevice; - struct nvsp_message *initPacket; - int ndisVersion; - - DPRINT_ENTER(NETVSC); - - netDevice = GetOutboundNetDevice(Device); - if (!netDevice) { - DPRINT_ERR(NETVSC, "unable to get net device..." - "device being destroyed?"); - DPRINT_EXIT(NETVSC); - return -1; - } - - initPacket = &netDevice->ChannelInitPacket; - - memset(initPacket, 0, sizeof(struct nvsp_message)); - initPacket->Header.MessageType = NvspMessageTypeInit; - initPacket->Messages.InitMessages.Init.MinProtocolVersion = NVSP_MIN_PROTOCOL_VERSION; - initPacket->Messages.InitMessages.Init.MaxProtocolVersion = NVSP_MAX_PROTOCOL_VERSION; - - DPRINT_INFO(NETVSC, "Sending NvspMessageTypeInit..."); - - /* Send the init request */ - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - initPacket, - sizeof(struct nvsp_message), - (unsigned long)initPacket, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - - if (ret != 0) { - DPRINT_ERR(NETVSC, "unable to send NvspMessageTypeInit"); - goto Cleanup; - } - - osd_WaitEventWait(netDevice->ChannelInitEvent); - - /* Now, check the response */ - /* ASSERT(initPacket->Messages.InitMessages.InitComplete.MaximumMdlChainLength <= MAX_MULTIPAGE_BUFFER_COUNT); */ - DPRINT_INFO(NETVSC, "NvspMessageTypeInit status(%d) max mdl chain (%d)", - initPacket->Messages.InitMessages.InitComplete.Status, - initPacket->Messages.InitMessages.InitComplete.MaximumMdlChainLength); - - if (initPacket->Messages.InitMessages.InitComplete.Status != - NvspStatusSuccess) { - DPRINT_ERR(NETVSC, - "unable to initialize with netvsp (status 0x%x)", - initPacket->Messages.InitMessages.InitComplete.Status); - ret = -1; - goto Cleanup; - } - - if (initPacket->Messages.InitMessages.InitComplete.NegotiatedProtocolVersion != NVSP_PROTOCOL_VERSION_1) { - DPRINT_ERR(NETVSC, "unable to initialize with netvsp " - "(version expected 1 got %d)", - initPacket->Messages.InitMessages.InitComplete.NegotiatedProtocolVersion); - ret = -1; - goto Cleanup; - } - DPRINT_INFO(NETVSC, "Sending NvspMessage1TypeSendNdisVersion..."); - - /* Send the ndis version */ - memset(initPacket, 0, sizeof(struct nvsp_message)); - - ndisVersion = 0x00050000; - - initPacket->Header.MessageType = NvspMessage1TypeSendNdisVersion; - initPacket->Messages.Version1Messages.SendNdisVersion.NdisMajorVersion = - (ndisVersion & 0xFFFF0000) >> 16; - initPacket->Messages.Version1Messages.SendNdisVersion.NdisMinorVersion = - ndisVersion & 0xFFFF; - - /* Send the init request */ - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - initPacket, - sizeof(struct nvsp_message), - (unsigned long)initPacket, - VmbusPacketTypeDataInBand, 0); - if (ret != 0) { - DPRINT_ERR(NETVSC, - "unable to send NvspMessage1TypeSendNdisVersion"); - ret = -1; - goto Cleanup; - } - /* - * BUGBUG - We have to wait for the above msg since the - * netvsp uses KMCL which acknowledges packet (completion - * packet) since our Vmbus always set the - * VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED flag - */ - /* osd_WaitEventWait(NetVscChannel->ChannelInitEvent); */ - - /* Post the big receive buffer to NetVSP */ - ret = NetVscInitializeReceiveBufferWithNetVsp(Device); - if (ret == 0) - ret = NetVscInitializeSendBufferWithNetVsp(Device); - -Cleanup: - PutNetDevice(Device); - DPRINT_EXIT(NETVSC); - return ret; -} - -static void NetVscDisconnectFromVsp(struct netvsc_device *NetDevice) -{ - DPRINT_ENTER(NETVSC); - - NetVscDestroyReceiveBuffer(NetDevice); - NetVscDestroySendBuffer(NetDevice); - - DPRINT_EXIT(NETVSC); -} - -/* - * NetVscOnDeviceAdd - Callback when the device belonging to this driver is added - */ -static int NetVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) -{ - int ret = 0; - int i; - struct netvsc_device *netDevice; - struct hv_netvsc_packet *packet, *pos; - struct netvsc_driver *netDriver = - (struct netvsc_driver *)Device->Driver; - - DPRINT_ENTER(NETVSC); - - netDevice = AllocNetDevice(Device); - if (!netDevice) { - ret = -1; - goto Cleanup; - } - - DPRINT_DBG(NETVSC, "netvsc channel object allocated - %p", netDevice); - - /* Initialize the NetVSC channel extension */ - netDevice->ReceiveBufferSize = NETVSC_RECEIVE_BUFFER_SIZE; - spin_lock_init(&netDevice->receive_packet_list_lock); - - netDevice->SendBufferSize = NETVSC_SEND_BUFFER_SIZE; - - INIT_LIST_HEAD(&netDevice->ReceivePacketList); - - for (i = 0; i < NETVSC_RECEIVE_PACKETLIST_COUNT; i++) { - packet = kzalloc(sizeof(struct hv_netvsc_packet) + - (NETVSC_RECEIVE_SG_COUNT * - sizeof(struct hv_page_buffer)), GFP_KERNEL); - if (!packet) { - DPRINT_DBG(NETVSC, "unable to allocate netvsc pkts " - "for receive pool (wanted %d got %d)", - NETVSC_RECEIVE_PACKETLIST_COUNT, i); - break; - } - list_add_tail(&packet->ListEntry, - &netDevice->ReceivePacketList); - } - netDevice->ChannelInitEvent = osd_WaitEventCreate(); - if (!netDevice->ChannelInitEvent) { - ret = -ENOMEM; - goto Cleanup; - } - - /* Open the channel */ - ret = Device->Driver->VmbusChannelInterface.Open(Device, - netDriver->RingBufferSize, - netDriver->RingBufferSize, - NULL, 0, - NetVscOnChannelCallback, - Device); - - if (ret != 0) { - DPRINT_ERR(NETVSC, "unable to open channel: %d", ret); - ret = -1; - goto Cleanup; - } - - /* Channel is opened */ - DPRINT_INFO(NETVSC, "*** NetVSC channel opened successfully! ***"); - - /* Connect with the NetVsp */ - ret = NetVscConnectToVsp(Device); - if (ret != 0) { - DPRINT_ERR(NETVSC, "unable to connect to NetVSP - %d", ret); - ret = -1; - goto Close; - } - - DPRINT_INFO(NETVSC, "*** NetVSC channel handshake result - %d ***", - ret); - - DPRINT_EXIT(NETVSC); - return ret; - -Close: - /* Now, we can close the channel safely */ - Device->Driver->VmbusChannelInterface.Close(Device); - -Cleanup: - - if (netDevice) { - kfree(netDevice->ChannelInitEvent); - - list_for_each_entry_safe(packet, pos, - &netDevice->ReceivePacketList, - ListEntry) { - list_del(&packet->ListEntry); - kfree(packet); - } - - ReleaseOutboundNetDevice(Device); - ReleaseInboundNetDevice(Device); - - FreeNetDevice(netDevice); - } - - DPRINT_EXIT(NETVSC); - return ret; -} - -/* - * NetVscOnDeviceRemove - Callback when the root bus device is removed - */ -static int NetVscOnDeviceRemove(struct hv_device *Device) -{ - struct netvsc_device *netDevice; - struct hv_netvsc_packet *netvscPacket, *pos; - - DPRINT_ENTER(NETVSC); - - DPRINT_INFO(NETVSC, "Disabling outbound traffic on net device (%p)...", - Device->Extension); - - /* Stop outbound traffic ie sends and receives completions */ - netDevice = ReleaseOutboundNetDevice(Device); - if (!netDevice) { - DPRINT_ERR(NETVSC, "No net device present!!"); - return -1; - } - - /* Wait for all send completions */ - while (atomic_read(&netDevice->NumOutstandingSends)) { - DPRINT_INFO(NETVSC, "waiting for %d requests to complete...", - atomic_read(&netDevice->NumOutstandingSends)); - udelay(100); - } - - DPRINT_INFO(NETVSC, "Disconnecting from netvsp..."); - - NetVscDisconnectFromVsp(netDevice); - - DPRINT_INFO(NETVSC, "Disabling inbound traffic on net device (%p)...", - Device->Extension); - - /* Stop inbound traffic ie receives and sends completions */ - netDevice = ReleaseInboundNetDevice(Device); - - /* At this point, no one should be accessing netDevice except in here */ - DPRINT_INFO(NETVSC, "net device (%p) safe to remove", netDevice); - - /* Now, we can close the channel safely */ - Device->Driver->VmbusChannelInterface.Close(Device); - - /* Release all resources */ - list_for_each_entry_safe(netvscPacket, pos, - &netDevice->ReceivePacketList, ListEntry) { - list_del(&netvscPacket->ListEntry); - kfree(netvscPacket); - } - - kfree(netDevice->ChannelInitEvent); - FreeNetDevice(netDevice); - - DPRINT_EXIT(NETVSC); - return 0; -} - -/* - * NetVscOnCleanup - Perform any cleanup when the driver is removed - */ -static void NetVscOnCleanup(struct hv_driver *drv) -{ - DPRINT_ENTER(NETVSC); - DPRINT_EXIT(NETVSC); -} - -static void NetVscOnSendCompletion(struct hv_device *Device, - struct vmpacket_descriptor *Packet) -{ - struct netvsc_device *netDevice; - struct nvsp_message *nvspPacket; - struct hv_netvsc_packet *nvscPacket; - - DPRINT_ENTER(NETVSC); - - netDevice = GetInboundNetDevice(Device); - if (!netDevice) { - DPRINT_ERR(NETVSC, "unable to get net device..." - "device being destroyed?"); - DPRINT_EXIT(NETVSC); - return; - } - - nvspPacket = (struct nvsp_message *)((unsigned long)Packet + (Packet->DataOffset8 << 3)); - - DPRINT_DBG(NETVSC, "send completion packet - type %d", - nvspPacket->Header.MessageType); - - if ((nvspPacket->Header.MessageType == NvspMessageTypeInitComplete) || - (nvspPacket->Header.MessageType == - NvspMessage1TypeSendReceiveBufferComplete) || - (nvspPacket->Header.MessageType == - NvspMessage1TypeSendSendBufferComplete)) { - /* Copy the response back */ - memcpy(&netDevice->ChannelInitPacket, nvspPacket, - sizeof(struct nvsp_message)); - osd_WaitEventSet(netDevice->ChannelInitEvent); - } else if (nvspPacket->Header.MessageType == - NvspMessage1TypeSendRNDISPacketComplete) { - /* Get the send context */ - nvscPacket = (struct hv_netvsc_packet *)(unsigned long)Packet->TransactionId; - /* ASSERT(nvscPacket); */ - - /* Notify the layer above us */ - nvscPacket->Completion.Send.OnSendCompletion(nvscPacket->Completion.Send.SendCompletionContext); - - atomic_dec(&netDevice->NumOutstandingSends); - } else { - DPRINT_ERR(NETVSC, "Unknown send completion packet type - " - "%d received!!", nvspPacket->Header.MessageType); - } - - PutNetDevice(Device); - DPRINT_EXIT(NETVSC); -} - -static int NetVscOnSend(struct hv_device *Device, - struct hv_netvsc_packet *Packet) -{ - struct netvsc_device *netDevice; - int ret = 0; - - struct nvsp_message sendMessage; - - DPRINT_ENTER(NETVSC); - - netDevice = GetOutboundNetDevice(Device); - if (!netDevice) { - DPRINT_ERR(NETVSC, "net device (%p) shutting down..." - "ignoring outbound packets", netDevice); - DPRINT_EXIT(NETVSC); - return -2; - } - - sendMessage.Header.MessageType = NvspMessage1TypeSendRNDISPacket; - if (Packet->IsDataPacket) { - /* 0 is RMC_DATA; */ - sendMessage.Messages.Version1Messages.SendRNDISPacket.ChannelType = 0; - } else { - /* 1 is RMC_CONTROL; */ - sendMessage.Messages.Version1Messages.SendRNDISPacket.ChannelType = 1; - } - - /* Not using send buffer section */ - sendMessage.Messages.Version1Messages.SendRNDISPacket.SendBufferSectionIndex = 0xFFFFFFFF; - sendMessage.Messages.Version1Messages.SendRNDISPacket.SendBufferSectionSize = 0; - - if (Packet->PageBufferCount) { - ret = Device->Driver->VmbusChannelInterface.SendPacketPageBuffer( - Device, Packet->PageBuffers, - Packet->PageBufferCount, - &sendMessage, - sizeof(struct nvsp_message), - (unsigned long)Packet); - } else { - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - &sendMessage, - sizeof(struct nvsp_message), - (unsigned long)Packet, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - - } - - if (ret != 0) - DPRINT_ERR(NETVSC, "Unable to send packet %p ret %d", - Packet, ret); - - atomic_inc(&netDevice->NumOutstandingSends); - PutNetDevice(Device); - - DPRINT_EXIT(NETVSC); - return ret; -} - -static void NetVscOnReceive(struct hv_device *Device, - struct vmpacket_descriptor *Packet) -{ - struct netvsc_device *netDevice; - struct vmtransfer_page_packet_header *vmxferpagePacket; - struct nvsp_message *nvspPacket; - struct hv_netvsc_packet *netvscPacket = NULL; - unsigned long start; - unsigned long end, endVirtual; - /* struct netvsc_driver *netvscDriver; */ - struct xferpage_packet *xferpagePacket = NULL; - int i, j; - int count = 0, bytesRemain = 0; - unsigned long flags; - LIST_HEAD(listHead); - - DPRINT_ENTER(NETVSC); - - netDevice = GetInboundNetDevice(Device); - if (!netDevice) { - DPRINT_ERR(NETVSC, "unable to get net device..." - "device being destroyed?"); - DPRINT_EXIT(NETVSC); - return; - } - - /* - * All inbound packets other than send completion should be xfer page - * packet - */ - if (Packet->Type != VmbusPacketTypeDataUsingTransferPages) { - DPRINT_ERR(NETVSC, "Unknown packet type received - %d", - Packet->Type); - PutNetDevice(Device); - return; - } - - nvspPacket = (struct nvsp_message *)((unsigned long)Packet + - (Packet->DataOffset8 << 3)); - - /* Make sure this is a valid nvsp packet */ - if (nvspPacket->Header.MessageType != NvspMessage1TypeSendRNDISPacket) { - DPRINT_ERR(NETVSC, "Unknown nvsp packet type received - %d", - nvspPacket->Header.MessageType); - PutNetDevice(Device); - return; - } - - DPRINT_DBG(NETVSC, "NVSP packet received - type %d", - nvspPacket->Header.MessageType); - - vmxferpagePacket = (struct vmtransfer_page_packet_header *)Packet; - - if (vmxferpagePacket->TransferPageSetId != NETVSC_RECEIVE_BUFFER_ID) { - DPRINT_ERR(NETVSC, "Invalid xfer page set id - " - "expecting %x got %x", NETVSC_RECEIVE_BUFFER_ID, - vmxferpagePacket->TransferPageSetId); - PutNetDevice(Device); - return; - } - - DPRINT_DBG(NETVSC, "xfer page - range count %d", - vmxferpagePacket->RangeCount); - - /* - * Grab free packets (range count + 1) to represent this xfer - * page packet. +1 to represent the xfer page packet itself. - * We grab it here so that we know exactly how many we can - * fulfil - */ - spin_lock_irqsave(&netDevice->receive_packet_list_lock, flags); - while (!list_empty(&netDevice->ReceivePacketList)) { - list_move_tail(netDevice->ReceivePacketList.next, &listHead); - if (++count == vmxferpagePacket->RangeCount + 1) - break; - } - spin_unlock_irqrestore(&netDevice->receive_packet_list_lock, flags); - - /* - * We need at least 2 netvsc pkts (1 to represent the xfer - * page and at least 1 for the range) i.e. we can handled - * some of the xfer page packet ranges... - */ - if (count < 2) { - DPRINT_ERR(NETVSC, "Got only %d netvsc pkt...needed %d pkts. " - "Dropping this xfer page packet completely!", - count, vmxferpagePacket->RangeCount + 1); - - /* Return it to the freelist */ - spin_lock_irqsave(&netDevice->receive_packet_list_lock, flags); - for (i = count; i != 0; i--) { - list_move_tail(listHead.next, - &netDevice->ReceivePacketList); - } - spin_unlock_irqrestore(&netDevice->receive_packet_list_lock, - flags); - - NetVscSendReceiveCompletion(Device, - vmxferpagePacket->d.TransactionId); - - PutNetDevice(Device); - return; - } - - /* Remove the 1st packet to represent the xfer page packet itself */ - xferpagePacket = (struct xferpage_packet *)listHead.next; - list_del(&xferpagePacket->ListEntry); - - /* This is how much we can satisfy */ - xferpagePacket->Count = count - 1; - /* ASSERT(xferpagePacket->Count > 0 && xferpagePacket->Count <= */ - /* vmxferpagePacket->RangeCount); */ - - if (xferpagePacket->Count != vmxferpagePacket->RangeCount) { - DPRINT_INFO(NETVSC, "Needed %d netvsc pkts to satisy this xfer " - "page...got %d", vmxferpagePacket->RangeCount, - xferpagePacket->Count); - } - - /* Each range represents 1 RNDIS pkt that contains 1 ethernet frame */ - for (i = 0; i < (count - 1); i++) { - netvscPacket = (struct hv_netvsc_packet *)listHead.next; - list_del(&netvscPacket->ListEntry); - - /* Initialize the netvsc packet */ - netvscPacket->XferPagePacket = xferpagePacket; - netvscPacket->Completion.Recv.OnReceiveCompletion = - NetVscOnReceiveCompletion; - netvscPacket->Completion.Recv.ReceiveCompletionContext = - netvscPacket; - netvscPacket->Device = Device; - /* Save this so that we can send it back */ - netvscPacket->Completion.Recv.ReceiveCompletionTid = - vmxferpagePacket->d.TransactionId; - - netvscPacket->TotalDataBufferLength = - vmxferpagePacket->Ranges[i].ByteCount; - netvscPacket->PageBufferCount = 1; - - /* ASSERT(vmxferpagePacket->Ranges[i].ByteOffset + */ - /* vmxferpagePacket->Ranges[i].ByteCount < */ - /* netDevice->ReceiveBufferSize); */ - - netvscPacket->PageBuffers[0].Length = - vmxferpagePacket->Ranges[i].ByteCount; - - start = virt_to_phys((void *)((unsigned long)netDevice->ReceiveBuffer + vmxferpagePacket->Ranges[i].ByteOffset)); - - netvscPacket->PageBuffers[0].Pfn = start >> PAGE_SHIFT; - endVirtual = (unsigned long)netDevice->ReceiveBuffer - + vmxferpagePacket->Ranges[i].ByteOffset - + vmxferpagePacket->Ranges[i].ByteCount - 1; - end = virt_to_phys((void *)endVirtual); - - /* Calculate the page relative offset */ - netvscPacket->PageBuffers[0].Offset = - vmxferpagePacket->Ranges[i].ByteOffset & (PAGE_SIZE - 1); - if ((end >> PAGE_SHIFT) != (start >> PAGE_SHIFT)) { - /* Handle frame across multiple pages: */ - netvscPacket->PageBuffers[0].Length = - (netvscPacket->PageBuffers[0].Pfn << PAGE_SHIFT) - + PAGE_SIZE - start; - bytesRemain = netvscPacket->TotalDataBufferLength - - netvscPacket->PageBuffers[0].Length; - for (j = 1; j < NETVSC_PACKET_MAXPAGE; j++) { - netvscPacket->PageBuffers[j].Offset = 0; - if (bytesRemain <= PAGE_SIZE) { - netvscPacket->PageBuffers[j].Length = bytesRemain; - bytesRemain = 0; - } else { - netvscPacket->PageBuffers[j].Length = PAGE_SIZE; - bytesRemain -= PAGE_SIZE; - } - netvscPacket->PageBuffers[j].Pfn = - virt_to_phys((void *)(endVirtual - bytesRemain)) >> PAGE_SHIFT; - netvscPacket->PageBufferCount++; - if (bytesRemain == 0) - break; - } - /* ASSERT(bytesRemain == 0); */ - } - DPRINT_DBG(NETVSC, "[%d] - (abs offset %u len %u) => " - "(pfn %llx, offset %u, len %u)", i, - vmxferpagePacket->Ranges[i].ByteOffset, - vmxferpagePacket->Ranges[i].ByteCount, - netvscPacket->PageBuffers[0].Pfn, - netvscPacket->PageBuffers[0].Offset, - netvscPacket->PageBuffers[0].Length); - - /* Pass it to the upper layer */ - ((struct netvsc_driver *)Device->Driver)->OnReceiveCallback(Device, netvscPacket); - - NetVscOnReceiveCompletion(netvscPacket->Completion.Recv.ReceiveCompletionContext); - } - - /* ASSERT(list_empty(&listHead)); */ - - PutNetDevice(Device); - DPRINT_EXIT(NETVSC); -} - -static void NetVscSendReceiveCompletion(struct hv_device *Device, - u64 TransactionId) -{ - struct nvsp_message recvcompMessage; - int retries = 0; - int ret; - - DPRINT_DBG(NETVSC, "Sending receive completion pkt - %llx", - TransactionId); - - recvcompMessage.Header.MessageType = - NvspMessage1TypeSendRNDISPacketComplete; - - /* FIXME: Pass in the status */ - recvcompMessage.Messages.Version1Messages.SendRNDISPacketComplete.Status = NvspStatusSuccess; - -retry_send_cmplt: - /* Send the completion */ - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - &recvcompMessage, - sizeof(struct nvsp_message), - TransactionId, - VmbusPacketTypeCompletion, 0); - if (ret == 0) { - /* success */ - /* no-op */ - } else if (ret == -1) { - /* no more room...wait a bit and attempt to retry 3 times */ - retries++; - DPRINT_ERR(NETVSC, "unable to send receive completion pkt " - "(tid %llx)...retrying %d", TransactionId, retries); - - if (retries < 4) { - udelay(100); - goto retry_send_cmplt; - } else { - DPRINT_ERR(NETVSC, "unable to send receive completion " - "pkt (tid %llx)...give up retrying", - TransactionId); - } - } else { - DPRINT_ERR(NETVSC, "unable to send receive completion pkt - " - "%llx", TransactionId); - } -} - -/* Send a receive completion packet to RNDIS device (ie NetVsp) */ -static void NetVscOnReceiveCompletion(void *Context) -{ - struct hv_netvsc_packet *packet = Context; - struct hv_device *device = (struct hv_device *)packet->Device; - struct netvsc_device *netDevice; - u64 transactionId = 0; - bool fSendReceiveComp = false; - unsigned long flags; - - DPRINT_ENTER(NETVSC); - - /* ASSERT(packet->XferPagePacket); */ - - /* - * Even though it seems logical to do a GetOutboundNetDevice() here to - * send out receive completion, we are using GetInboundNetDevice() - * since we may have disable outbound traffic already. - */ - netDevice = GetInboundNetDevice(device); - if (!netDevice) { - DPRINT_ERR(NETVSC, "unable to get net device..." - "device being destroyed?"); - DPRINT_EXIT(NETVSC); - return; - } - - /* Overloading use of the lock. */ - spin_lock_irqsave(&netDevice->receive_packet_list_lock, flags); - - /* ASSERT(packet->XferPagePacket->Count > 0); */ - packet->XferPagePacket->Count--; - - /* - * Last one in the line that represent 1 xfer page packet. - * Return the xfer page packet itself to the freelist - */ - if (packet->XferPagePacket->Count == 0) { - fSendReceiveComp = true; - transactionId = packet->Completion.Recv.ReceiveCompletionTid; - list_add_tail(&packet->XferPagePacket->ListEntry, - &netDevice->ReceivePacketList); - - } - - /* Put the packet back */ - list_add_tail(&packet->ListEntry, &netDevice->ReceivePacketList); - spin_unlock_irqrestore(&netDevice->receive_packet_list_lock, flags); - - /* Send a receive completion for the xfer page packet */ - if (fSendReceiveComp) - NetVscSendReceiveCompletion(device, transactionId); - - PutNetDevice(device); - DPRINT_EXIT(NETVSC); -} - -static void NetVscOnChannelCallback(void *Context) -{ - int ret; - struct hv_device *device = Context; - struct netvsc_device *netDevice; - u32 bytesRecvd; - u64 requestId; - unsigned char *packet; - struct vmpacket_descriptor *desc; - unsigned char *buffer; - int bufferlen = NETVSC_PACKET_SIZE; - - - DPRINT_ENTER(NETVSC); - - /* ASSERT(device); */ - - packet = kzalloc(NETVSC_PACKET_SIZE * sizeof(unsigned char), - GFP_KERNEL); - if (!packet) - return; - buffer = packet; - - netDevice = GetInboundNetDevice(device); - if (!netDevice) { - DPRINT_ERR(NETVSC, "net device (%p) shutting down..." - "ignoring inbound packets", netDevice); - DPRINT_EXIT(NETVSC); - goto out; - } - - do { - ret = device->Driver->VmbusChannelInterface.RecvPacketRaw( - device, buffer, bufferlen, - &bytesRecvd, &requestId); - if (ret == 0) { - if (bytesRecvd > 0) { - DPRINT_DBG(NETVSC, "receive %d bytes, tid %llx", - bytesRecvd, requestId); - - desc = (struct vmpacket_descriptor *)buffer; - switch (desc->Type) { - case VmbusPacketTypeCompletion: - NetVscOnSendCompletion(device, desc); - break; - - case VmbusPacketTypeDataUsingTransferPages: - NetVscOnReceive(device, desc); - break; - - default: - DPRINT_ERR(NETVSC, - "unhandled packet type %d, " - "tid %llx len %d\n", - desc->Type, requestId, - bytesRecvd); - break; - } - - /* reset */ - if (bufferlen > NETVSC_PACKET_SIZE) { - kfree(buffer); - buffer = packet; - bufferlen = NETVSC_PACKET_SIZE; - } - } else { - /* reset */ - if (bufferlen > NETVSC_PACKET_SIZE) { - kfree(buffer); - buffer = packet; - bufferlen = NETVSC_PACKET_SIZE; - } - - break; - } - } else if (ret == -2) { - /* Handle large packet */ - buffer = kmalloc(bytesRecvd, GFP_ATOMIC); - if (buffer == NULL) { - /* Try again next time around */ - DPRINT_ERR(NETVSC, - "unable to allocate buffer of size " - "(%d)!!", bytesRecvd); - break; - } - - bufferlen = bytesRecvd; - } - } while (1); - - PutNetDevice(device); - DPRINT_EXIT(NETVSC); -out: - kfree(buffer); - return; -} diff --git a/drivers/staging/hv/NetVsc.h b/drivers/staging/hv/NetVsc.h deleted file mode 100644 index a6264db..0000000 --- a/drivers/staging/hv/NetVsc.h +++ /dev/null @@ -1,331 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _NETVSC_H_ -#define _NETVSC_H_ - -#include -#include "VmbusPacketFormat.h" -#include "VmbusChannelInterface.h" -#include "NetVscApi.h" - - -#define NVSP_INVALID_PROTOCOL_VERSION ((u32)0xFFFFFFFF) - -#define NVSP_PROTOCOL_VERSION_1 2 -#define NVSP_MIN_PROTOCOL_VERSION NVSP_PROTOCOL_VERSION_1 -#define NVSP_MAX_PROTOCOL_VERSION NVSP_PROTOCOL_VERSION_1 - -enum { - NvspMessageTypeNone = 0, - - /* Init Messages */ - NvspMessageTypeInit = 1, - NvspMessageTypeInitComplete = 2, - - NvspVersionMessageStart = 100, - - /* Version 1 Messages */ - NvspMessage1TypeSendNdisVersion = NvspVersionMessageStart, - - NvspMessage1TypeSendReceiveBuffer, - NvspMessage1TypeSendReceiveBufferComplete, - NvspMessage1TypeRevokeReceiveBuffer, - - NvspMessage1TypeSendSendBuffer, - NvspMessage1TypeSendSendBufferComplete, - NvspMessage1TypeRevokeSendBuffer, - - NvspMessage1TypeSendRNDISPacket, - NvspMessage1TypeSendRNDISPacketComplete, - - /* - * This should be set to the number of messages for the version with - * the maximum number of messages. - */ - NvspNumMessagePerVersion = 9, -}; - -enum { - NvspStatusNone = 0, - NvspStatusSuccess, - NvspStatusFailure, - NvspStatusProtocolVersionRangeTooNew, - NvspStatusProtocolVersionRangeTooOld, - NvspStatusInvalidRndisPacket, - NvspStatusBusy, - NvspStatusMax, -}; - -struct nvsp_message_header { - u32 MessageType; -}; - -/* Init Messages */ - -/* - * This message is used by the VSC to initialize the channel after the channels - * has been opened. This message should never include anything other then - * versioning (i.e. this message will be the same for ever). - */ -struct nvsp_message_init { - u32 MinProtocolVersion; - u32 MaxProtocolVersion; -} __attribute__((packed)); - -/* - * This message is used by the VSP to complete the initialization of the - * channel. This message should never include anything other then versioning - * (i.e. this message will be the same for ever). - */ -struct nvsp_message_init_complete { - u32 NegotiatedProtocolVersion; - u32 MaximumMdlChainLength; - u32 Status; -} __attribute__((packed)); - -union nvsp_message_init_uber { - struct nvsp_message_init Init; - struct nvsp_message_init_complete InitComplete; -} __attribute__((packed)); - -/* Version 1 Messages */ - -/* - * This message is used by the VSC to send the NDIS version to the VSP. The VSP - * can use this information when handling OIDs sent by the VSC. - */ -struct nvsp_1_message_send_ndis_version { - u32 NdisMajorVersion; - u32 NdisMinorVersion; -} __attribute__((packed)); - -/* - * This message is used by the VSC to send a receive buffer to the VSP. The VSP - * can then use the receive buffer to send data to the VSC. - */ -struct nvsp_1_message_send_receive_buffer { - u32 GpadlHandle; - u16 Id; -} __attribute__((packed)); - -struct nvsp_1_receive_buffer_section { - u32 Offset; - u32 SubAllocationSize; - u32 NumSubAllocations; - u32 EndOffset; -} __attribute__((packed)); - -/* - * This message is used by the VSP to acknowledge a receive buffer send by the - * VSC. This message must be sent by the VSP before the VSP uses the receive - * buffer. - */ -struct nvsp_1_message_send_receive_buffer_complete { - u32 Status; - u32 NumSections; - - /* - * The receive buffer is split into two parts, a large suballocation - * section and a small suballocation section. These sections are then - * suballocated by a certain size. - */ - - /* - * For example, the following break up of the receive buffer has 6 - * large suballocations and 10 small suballocations. - */ - - /* - * | Large Section | | Small Section | - * ------------------------------------------------------------ - * | | | | | | | | | | | | | | | | | | - * | | - * LargeOffset SmallOffset - */ - - struct nvsp_1_receive_buffer_section Sections[1]; -} __attribute__((packed)); - -/* - * This message is sent by the VSC to revoke the receive buffer. After the VSP - * completes this transaction, the vsp should never use the receive buffer - * again. - */ -struct nvsp_1_message_revoke_receive_buffer { - u16 Id; -}; - -/* - * This message is used by the VSC to send a send buffer to the VSP. The VSC - * can then use the send buffer to send data to the VSP. - */ -struct nvsp_1_message_send_send_buffer { - u32 GpadlHandle; - u16 Id; -} __attribute__((packed)); - -/* - * This message is used by the VSP to acknowledge a send buffer sent by the - * VSC. This message must be sent by the VSP before the VSP uses the sent - * buffer. - */ -struct nvsp_1_message_send_send_buffer_complete { - u32 Status; - - /* - * The VSC gets to choose the size of the send buffer and the VSP gets - * to choose the sections size of the buffer. This was done to enable - * dynamic reconfigurations when the cost of GPA-direct buffers - * decreases. - */ - u32 SectionSize; -} __attribute__((packed)); - -/* - * This message is sent by the VSC to revoke the send buffer. After the VSP - * completes this transaction, the vsp should never use the send buffer again. - */ -struct nvsp_1_message_revoke_send_buffer { - u16 Id; -}; - -/* - * This message is used by both the VSP and the VSC to send a RNDIS message to - * the opposite channel endpoint. - */ -struct nvsp_1_message_send_rndis_packet { - /* - * This field is specified by RNIDS. They assume there's two different - * channels of communication. However, the Network VSP only has one. - * Therefore, the channel travels with the RNDIS packet. - */ - u32 ChannelType; - - /* - * This field is used to send part or all of the data through a send - * buffer. This values specifies an index into the send buffer. If the - * index is 0xFFFFFFFF, then the send buffer is not being used and all - * of the data was sent through other VMBus mechanisms. - */ - u32 SendBufferSectionIndex; - u32 SendBufferSectionSize; -} __attribute__((packed)); - -/* - * This message is used by both the VSP and the VSC to complete a RNDIS message - * to the opposite channel endpoint. At this point, the initiator of this - * message cannot use any resources associated with the original RNDIS packet. - */ -struct nvsp_1_message_send_rndis_packet_complete { - u32 Status; -}; - -union nvsp_1_message_uber { - struct nvsp_1_message_send_ndis_version SendNdisVersion; - - struct nvsp_1_message_send_receive_buffer SendReceiveBuffer; - struct nvsp_1_message_send_receive_buffer_complete - SendReceiveBufferComplete; - struct nvsp_1_message_revoke_receive_buffer RevokeReceiveBuffer; - - struct nvsp_1_message_send_send_buffer SendSendBuffer; - struct nvsp_1_message_send_send_buffer_complete SendSendBufferComplete; - struct nvsp_1_message_revoke_send_buffer RevokeSendBuffer; - - struct nvsp_1_message_send_rndis_packet SendRNDISPacket; - struct nvsp_1_message_send_rndis_packet_complete - SendRNDISPacketComplete; -} __attribute__((packed)); - -union nvsp_all_messages { - union nvsp_message_init_uber InitMessages; - union nvsp_1_message_uber Version1Messages; -} __attribute__((packed)); - -/* ALL Messages */ -struct nvsp_message { - struct nvsp_message_header Header; - union nvsp_all_messages Messages; -} __attribute__((packed)); - - - - -/* #define NVSC_MIN_PROTOCOL_VERSION 1 */ -/* #define NVSC_MAX_PROTOCOL_VERSION 1 */ - -#define NETVSC_SEND_BUFFER_SIZE (64*1024) /* 64K */ -#define NETVSC_SEND_BUFFER_ID 0xface - - -#define NETVSC_RECEIVE_BUFFER_SIZE (1024*1024) /* 1MB */ - -#define NETVSC_RECEIVE_BUFFER_ID 0xcafe - -#define NETVSC_RECEIVE_SG_COUNT 1 - -/* Preallocated receive packets */ -#define NETVSC_RECEIVE_PACKETLIST_COUNT 256 - -#define NETVSC_PACKET_SIZE 2048 - -/* Per netvsc channel-specific */ -struct netvsc_device { - struct hv_device *Device; - - atomic_t RefCount; - atomic_t NumOutstandingSends; - /* - * List of free preallocated hv_netvsc_packet to represent receive - * packet - */ - struct list_head ReceivePacketList; - spinlock_t receive_packet_list_lock; - - /* Send buffer allocated by us but manages by NetVSP */ - void *SendBuffer; - u32 SendBufferSize; - u32 SendBufferGpadlHandle; - u32 SendSectionSize; - - /* Receive buffer allocated by us but manages by NetVSP */ - void *ReceiveBuffer; - u32 ReceiveBufferSize; - u32 ReceiveBufferGpadlHandle; - u32 ReceiveSectionCount; - struct nvsp_1_receive_buffer_section *ReceiveSections; - - /* Used for NetVSP initialization protocol */ - struct osd_waitevent *ChannelInitEvent; - struct nvsp_message ChannelInitPacket; - - struct nvsp_message RevokePacket; - /* unsigned char HwMacAddr[HW_MACADDR_LEN]; */ - - /* Holds rndis device info */ - void *Extension; -}; - -#endif /* _NETVSC_H_ */ diff --git a/drivers/staging/hv/RndisFilter.h b/drivers/staging/hv/RndisFilter.h index fa7dd79..764b9bf 100644 --- a/drivers/staging/hv/RndisFilter.h +++ b/drivers/staging/hv/RndisFilter.h @@ -27,7 +27,7 @@ #define __struct_bcount(x) -#include "NetVsc.h" +#include "netvsc.h" #include "rndis.h" diff --git a/drivers/staging/hv/netvsc.c b/drivers/staging/hv/netvsc.c new file mode 100644 index 0000000..1000989 --- /dev/null +++ b/drivers/staging/hv/netvsc.c @@ -0,0 +1,1393 @@ +/* + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + */ +#include +#include +#include +#include +#include +#include "osd.h" +#include "logging.h" +#include "netvsc.h" +#include "RndisFilter.h" + + +/* Globals */ +static const char *gDriverName = "netvsc"; + +/* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */ +static const struct hv_guid gNetVscDeviceType = { + .data = { + 0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46, + 0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E + } +}; + +static int NetVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo); + +static int NetVscOnDeviceRemove(struct hv_device *Device); + +static void NetVscOnCleanup(struct hv_driver *Driver); + +static void NetVscOnChannelCallback(void *context); + +static int NetVscInitializeSendBufferWithNetVsp(struct hv_device *Device); + +static int NetVscInitializeReceiveBufferWithNetVsp(struct hv_device *Device); + +static int NetVscDestroySendBuffer(struct netvsc_device *NetDevice); + +static int NetVscDestroyReceiveBuffer(struct netvsc_device *NetDevice); + +static int NetVscConnectToVsp(struct hv_device *Device); + +static void NetVscOnSendCompletion(struct hv_device *Device, + struct vmpacket_descriptor *Packet); + +static int NetVscOnSend(struct hv_device *Device, + struct hv_netvsc_packet *Packet); + +static void NetVscOnReceive(struct hv_device *Device, + struct vmpacket_descriptor *Packet); + +static void NetVscOnReceiveCompletion(void *Context); + +static void NetVscSendReceiveCompletion(struct hv_device *Device, + u64 TransactionId); + + +static struct netvsc_device *AllocNetDevice(struct hv_device *Device) +{ + struct netvsc_device *netDevice; + + netDevice = kzalloc(sizeof(struct netvsc_device), GFP_KERNEL); + if (!netDevice) + return NULL; + + /* Set to 2 to allow both inbound and outbound traffic */ + atomic_cmpxchg(&netDevice->RefCount, 0, 2); + + netDevice->Device = Device; + Device->Extension = netDevice; + + return netDevice; +} + +static void FreeNetDevice(struct netvsc_device *Device) +{ + WARN_ON(atomic_read(&Device->RefCount) == 0); + Device->Device->Extension = NULL; + kfree(Device); +} + + +/* Get the net device object iff exists and its refcount > 1 */ +static struct netvsc_device *GetOutboundNetDevice(struct hv_device *Device) +{ + struct netvsc_device *netDevice; + + netDevice = Device->Extension; + if (netDevice && atomic_read(&netDevice->RefCount) > 1) + atomic_inc(&netDevice->RefCount); + else + netDevice = NULL; + + return netDevice; +} + +/* Get the net device object iff exists and its refcount > 0 */ +static struct netvsc_device *GetInboundNetDevice(struct hv_device *Device) +{ + struct netvsc_device *netDevice; + + netDevice = Device->Extension; + if (netDevice && atomic_read(&netDevice->RefCount)) + atomic_inc(&netDevice->RefCount); + else + netDevice = NULL; + + return netDevice; +} + +static void PutNetDevice(struct hv_device *Device) +{ + struct netvsc_device *netDevice; + + netDevice = Device->Extension; + /* ASSERT(netDevice); */ + + atomic_dec(&netDevice->RefCount); +} + +static struct netvsc_device *ReleaseOutboundNetDevice(struct hv_device *Device) +{ + struct netvsc_device *netDevice; + + netDevice = Device->Extension; + if (netDevice == NULL) + return NULL; + + /* Busy wait until the ref drop to 2, then set it to 1 */ + while (atomic_cmpxchg(&netDevice->RefCount, 2, 1) != 2) + udelay(100); + + return netDevice; +} + +static struct netvsc_device *ReleaseInboundNetDevice(struct hv_device *Device) +{ + struct netvsc_device *netDevice; + + netDevice = Device->Extension; + if (netDevice == NULL) + return NULL; + + /* Busy wait until the ref drop to 1, then set it to 0 */ + while (atomic_cmpxchg(&netDevice->RefCount, 1, 0) != 1) + udelay(100); + + Device->Extension = NULL; + return netDevice; +} + +/* + * NetVscInitialize - Main entry point + */ +int NetVscInitialize(struct hv_driver *drv) +{ + struct netvsc_driver *driver = (struct netvsc_driver *)drv; + + DPRINT_ENTER(NETVSC); + + DPRINT_DBG(NETVSC, "sizeof(struct hv_netvsc_packet)=%zd, " + "sizeof(struct nvsp_message)=%zd, " + "sizeof(struct vmtransfer_page_packet_header)=%zd", + sizeof(struct hv_netvsc_packet), + sizeof(struct nvsp_message), + sizeof(struct vmtransfer_page_packet_header)); + + /* Make sure we are at least 2 pages since 1 page is used for control */ + /* ASSERT(driver->RingBufferSize >= (PAGE_SIZE << 1)); */ + + drv->name = gDriverName; + memcpy(&drv->deviceType, &gNetVscDeviceType, sizeof(struct hv_guid)); + + /* Make sure it is set by the caller */ + /* FIXME: These probably should still be tested in some way */ + /* ASSERT(driver->OnReceiveCallback); */ + /* ASSERT(driver->OnLinkStatusChanged); */ + + /* Setup the dispatch table */ + driver->Base.OnDeviceAdd = NetVscOnDeviceAdd; + driver->Base.OnDeviceRemove = NetVscOnDeviceRemove; + driver->Base.OnCleanup = NetVscOnCleanup; + + driver->OnSend = NetVscOnSend; + + RndisFilterInit(driver); + + DPRINT_EXIT(NETVSC); + + return 0; +} + +static int NetVscInitializeReceiveBufferWithNetVsp(struct hv_device *Device) +{ + int ret = 0; + struct netvsc_device *netDevice; + struct nvsp_message *initPacket; + + DPRINT_ENTER(NETVSC); + + netDevice = GetOutboundNetDevice(Device); + if (!netDevice) { + DPRINT_ERR(NETVSC, "unable to get net device..." + "device being destroyed?"); + DPRINT_EXIT(NETVSC); + return -1; + } + /* ASSERT(netDevice->ReceiveBufferSize > 0); */ + /* page-size grandularity */ + /* ASSERT((netDevice->ReceiveBufferSize & (PAGE_SIZE - 1)) == 0); */ + + netDevice->ReceiveBuffer = + osd_PageAlloc(netDevice->ReceiveBufferSize >> PAGE_SHIFT); + if (!netDevice->ReceiveBuffer) { + DPRINT_ERR(NETVSC, + "unable to allocate receive buffer of size %d", + netDevice->ReceiveBufferSize); + ret = -1; + goto Cleanup; + } + /* page-aligned buffer */ + /* ASSERT(((unsigned long)netDevice->ReceiveBuffer & (PAGE_SIZE - 1)) == */ + /* 0); */ + + DPRINT_INFO(NETVSC, "Establishing receive buffer's GPADL..."); + + /* + * Establish the gpadl handle for this buffer on this + * channel. Note: This call uses the vmbus connection rather + * than the channel to establish the gpadl handle. + */ + ret = Device->Driver->VmbusChannelInterface.EstablishGpadl(Device, + netDevice->ReceiveBuffer, + netDevice->ReceiveBufferSize, + &netDevice->ReceiveBufferGpadlHandle); + if (ret != 0) { + DPRINT_ERR(NETVSC, + "unable to establish receive buffer's gpadl"); + goto Cleanup; + } + + /* osd_WaitEventWait(ext->ChannelInitEvent); */ + + /* Notify the NetVsp of the gpadl handle */ + DPRINT_INFO(NETVSC, "Sending NvspMessage1TypeSendReceiveBuffer..."); + + initPacket = &netDevice->ChannelInitPacket; + + memset(initPacket, 0, sizeof(struct nvsp_message)); + + initPacket->Header.MessageType = NvspMessage1TypeSendReceiveBuffer; + initPacket->Messages.Version1Messages.SendReceiveBuffer.GpadlHandle = netDevice->ReceiveBufferGpadlHandle; + initPacket->Messages.Version1Messages.SendReceiveBuffer.Id = NETVSC_RECEIVE_BUFFER_ID; + + /* Send the gpadl notification request */ + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + initPacket, + sizeof(struct nvsp_message), + (unsigned long)initPacket, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + if (ret != 0) { + DPRINT_ERR(NETVSC, + "unable to send receive buffer's gpadl to netvsp"); + goto Cleanup; + } + + osd_WaitEventWait(netDevice->ChannelInitEvent); + + /* Check the response */ + if (initPacket->Messages.Version1Messages.SendReceiveBufferComplete.Status != NvspStatusSuccess) { + DPRINT_ERR(NETVSC, "Unable to complete receive buffer " + "initialzation with NetVsp - status %d", + initPacket->Messages.Version1Messages.SendReceiveBufferComplete.Status); + ret = -1; + goto Cleanup; + } + + /* Parse the response */ + /* ASSERT(netDevice->ReceiveSectionCount == 0); */ + /* ASSERT(netDevice->ReceiveSections == NULL); */ + + netDevice->ReceiveSectionCount = initPacket->Messages.Version1Messages.SendReceiveBufferComplete.NumSections; + + netDevice->ReceiveSections = kmalloc(netDevice->ReceiveSectionCount * sizeof(struct nvsp_1_receive_buffer_section), GFP_KERNEL); + if (netDevice->ReceiveSections == NULL) { + ret = -1; + goto Cleanup; + } + + memcpy(netDevice->ReceiveSections, + initPacket->Messages.Version1Messages.SendReceiveBufferComplete.Sections, + netDevice->ReceiveSectionCount * sizeof(struct nvsp_1_receive_buffer_section)); + + DPRINT_INFO(NETVSC, "Receive sections info (count %d, offset %d, " + "endoffset %d, suballoc size %d, num suballocs %d)", + netDevice->ReceiveSectionCount, + netDevice->ReceiveSections[0].Offset, + netDevice->ReceiveSections[0].EndOffset, + netDevice->ReceiveSections[0].SubAllocationSize, + netDevice->ReceiveSections[0].NumSubAllocations); + + /* + * For 1st release, there should only be 1 section that represents the + * entire receive buffer + */ + if (netDevice->ReceiveSectionCount != 1 || + netDevice->ReceiveSections->Offset != 0) { + ret = -1; + goto Cleanup; + } + + goto Exit; + +Cleanup: + NetVscDestroyReceiveBuffer(netDevice); + +Exit: + PutNetDevice(Device); + DPRINT_EXIT(NETVSC); + return ret; +} + +static int NetVscInitializeSendBufferWithNetVsp(struct hv_device *Device) +{ + int ret = 0; + struct netvsc_device *netDevice; + struct nvsp_message *initPacket; + + DPRINT_ENTER(NETVSC); + + netDevice = GetOutboundNetDevice(Device); + if (!netDevice) { + DPRINT_ERR(NETVSC, "unable to get net device..." + "device being destroyed?"); + DPRINT_EXIT(NETVSC); + return -1; + } + if (netDevice->SendBufferSize <= 0) { + ret = -EINVAL; + goto Cleanup; + } + + /* page-size grandularity */ + /* ASSERT((netDevice->SendBufferSize & (PAGE_SIZE - 1)) == 0); */ + + netDevice->SendBuffer = + osd_PageAlloc(netDevice->SendBufferSize >> PAGE_SHIFT); + if (!netDevice->SendBuffer) { + DPRINT_ERR(NETVSC, "unable to allocate send buffer of size %d", + netDevice->SendBufferSize); + ret = -1; + goto Cleanup; + } + /* page-aligned buffer */ + /* ASSERT(((unsigned long)netDevice->SendBuffer & (PAGE_SIZE - 1)) == 0); */ + + DPRINT_INFO(NETVSC, "Establishing send buffer's GPADL..."); + + /* + * Establish the gpadl handle for this buffer on this + * channel. Note: This call uses the vmbus connection rather + * than the channel to establish the gpadl handle. + */ + ret = Device->Driver->VmbusChannelInterface.EstablishGpadl(Device, + netDevice->SendBuffer, + netDevice->SendBufferSize, + &netDevice->SendBufferGpadlHandle); + if (ret != 0) { + DPRINT_ERR(NETVSC, "unable to establish send buffer's gpadl"); + goto Cleanup; + } + + /* osd_WaitEventWait(ext->ChannelInitEvent); */ + + /* Notify the NetVsp of the gpadl handle */ + DPRINT_INFO(NETVSC, "Sending NvspMessage1TypeSendSendBuffer..."); + + initPacket = &netDevice->ChannelInitPacket; + + memset(initPacket, 0, sizeof(struct nvsp_message)); + + initPacket->Header.MessageType = NvspMessage1TypeSendSendBuffer; + initPacket->Messages.Version1Messages.SendReceiveBuffer.GpadlHandle = netDevice->SendBufferGpadlHandle; + initPacket->Messages.Version1Messages.SendReceiveBuffer.Id = NETVSC_SEND_BUFFER_ID; + + /* Send the gpadl notification request */ + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + initPacket, sizeof(struct nvsp_message), + (unsigned long)initPacket, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + if (ret != 0) { + DPRINT_ERR(NETVSC, + "unable to send receive buffer's gpadl to netvsp"); + goto Cleanup; + } + + osd_WaitEventWait(netDevice->ChannelInitEvent); + + /* Check the response */ + if (initPacket->Messages.Version1Messages.SendSendBufferComplete.Status != NvspStatusSuccess) { + DPRINT_ERR(NETVSC, "Unable to complete send buffer " + "initialzation with NetVsp - status %d", + initPacket->Messages.Version1Messages.SendSendBufferComplete.Status); + ret = -1; + goto Cleanup; + } + + netDevice->SendSectionSize = initPacket->Messages.Version1Messages.SendSendBufferComplete.SectionSize; + + goto Exit; + +Cleanup: + NetVscDestroySendBuffer(netDevice); + +Exit: + PutNetDevice(Device); + DPRINT_EXIT(NETVSC); + return ret; +} + +static int NetVscDestroyReceiveBuffer(struct netvsc_device *NetDevice) +{ + struct nvsp_message *revokePacket; + int ret = 0; + + DPRINT_ENTER(NETVSC); + + /* + * If we got a section count, it means we received a + * SendReceiveBufferComplete msg (ie sent + * NvspMessage1TypeSendReceiveBuffer msg) therefore, we need + * to send a revoke msg here + */ + if (NetDevice->ReceiveSectionCount) { + DPRINT_INFO(NETVSC, + "Sending NvspMessage1TypeRevokeReceiveBuffer..."); + + /* Send the revoke receive buffer */ + revokePacket = &NetDevice->RevokePacket; + memset(revokePacket, 0, sizeof(struct nvsp_message)); + + revokePacket->Header.MessageType = NvspMessage1TypeRevokeReceiveBuffer; + revokePacket->Messages.Version1Messages.RevokeReceiveBuffer.Id = NETVSC_RECEIVE_BUFFER_ID; + + ret = NetDevice->Device->Driver->VmbusChannelInterface.SendPacket( + NetDevice->Device, + revokePacket, + sizeof(struct nvsp_message), + (unsigned long)revokePacket, + VmbusPacketTypeDataInBand, 0); + /* + * If we failed here, we might as well return and + * have a leak rather than continue and a bugchk + */ + if (ret != 0) { + DPRINT_ERR(NETVSC, "unable to send revoke receive " + "buffer to netvsp"); + DPRINT_EXIT(NETVSC); + return -1; + } + } + + /* Teardown the gpadl on the vsp end */ + if (NetDevice->ReceiveBufferGpadlHandle) { + DPRINT_INFO(NETVSC, "Tearing down receive buffer's GPADL..."); + + ret = NetDevice->Device->Driver->VmbusChannelInterface.TeardownGpadl( + NetDevice->Device, + NetDevice->ReceiveBufferGpadlHandle); + + /* If we failed here, we might as well return and have a leak rather than continue and a bugchk */ + if (ret != 0) { + DPRINT_ERR(NETVSC, + "unable to teardown receive buffer's gpadl"); + DPRINT_EXIT(NETVSC); + return -1; + } + NetDevice->ReceiveBufferGpadlHandle = 0; + } + + if (NetDevice->ReceiveBuffer) { + DPRINT_INFO(NETVSC, "Freeing up receive buffer..."); + + /* Free up the receive buffer */ + osd_PageFree(NetDevice->ReceiveBuffer, + NetDevice->ReceiveBufferSize >> PAGE_SHIFT); + NetDevice->ReceiveBuffer = NULL; + } + + if (NetDevice->ReceiveSections) { + NetDevice->ReceiveSectionCount = 0; + kfree(NetDevice->ReceiveSections); + NetDevice->ReceiveSections = NULL; + } + + DPRINT_EXIT(NETVSC); + + return ret; +} + +static int NetVscDestroySendBuffer(struct netvsc_device *NetDevice) +{ + struct nvsp_message *revokePacket; + int ret = 0; + + DPRINT_ENTER(NETVSC); + + /* + * If we got a section count, it means we received a + * SendReceiveBufferComplete msg (ie sent + * NvspMessage1TypeSendReceiveBuffer msg) therefore, we need + * to send a revoke msg here + */ + if (NetDevice->SendSectionSize) { + DPRINT_INFO(NETVSC, + "Sending NvspMessage1TypeRevokeSendBuffer..."); + + /* Send the revoke send buffer */ + revokePacket = &NetDevice->RevokePacket; + memset(revokePacket, 0, sizeof(struct nvsp_message)); + + revokePacket->Header.MessageType = NvspMessage1TypeRevokeSendBuffer; + revokePacket->Messages.Version1Messages.RevokeSendBuffer.Id = NETVSC_SEND_BUFFER_ID; + + ret = NetDevice->Device->Driver->VmbusChannelInterface.SendPacket(NetDevice->Device, + revokePacket, + sizeof(struct nvsp_message), + (unsigned long)revokePacket, + VmbusPacketTypeDataInBand, 0); + /* + * If we failed here, we might as well return and have a leak + * rather than continue and a bugchk + */ + if (ret != 0) { + DPRINT_ERR(NETVSC, "unable to send revoke send buffer " + "to netvsp"); + DPRINT_EXIT(NETVSC); + return -1; + } + } + + /* Teardown the gpadl on the vsp end */ + if (NetDevice->SendBufferGpadlHandle) { + DPRINT_INFO(NETVSC, "Tearing down send buffer's GPADL..."); + + ret = NetDevice->Device->Driver->VmbusChannelInterface.TeardownGpadl(NetDevice->Device, NetDevice->SendBufferGpadlHandle); + + /* + * If we failed here, we might as well return and have a leak + * rather than continue and a bugchk + */ + if (ret != 0) { + DPRINT_ERR(NETVSC, "unable to teardown send buffer's " + "gpadl"); + DPRINT_EXIT(NETVSC); + return -1; + } + NetDevice->SendBufferGpadlHandle = 0; + } + + if (NetDevice->SendBuffer) { + DPRINT_INFO(NETVSC, "Freeing up send buffer..."); + + /* Free up the receive buffer */ + osd_PageFree(NetDevice->SendBuffer, + NetDevice->SendBufferSize >> PAGE_SHIFT); + NetDevice->SendBuffer = NULL; + } + + DPRINT_EXIT(NETVSC); + + return ret; +} + + +static int NetVscConnectToVsp(struct hv_device *Device) +{ + int ret; + struct netvsc_device *netDevice; + struct nvsp_message *initPacket; + int ndisVersion; + + DPRINT_ENTER(NETVSC); + + netDevice = GetOutboundNetDevice(Device); + if (!netDevice) { + DPRINT_ERR(NETVSC, "unable to get net device..." + "device being destroyed?"); + DPRINT_EXIT(NETVSC); + return -1; + } + + initPacket = &netDevice->ChannelInitPacket; + + memset(initPacket, 0, sizeof(struct nvsp_message)); + initPacket->Header.MessageType = NvspMessageTypeInit; + initPacket->Messages.InitMessages.Init.MinProtocolVersion = NVSP_MIN_PROTOCOL_VERSION; + initPacket->Messages.InitMessages.Init.MaxProtocolVersion = NVSP_MAX_PROTOCOL_VERSION; + + DPRINT_INFO(NETVSC, "Sending NvspMessageTypeInit..."); + + /* Send the init request */ + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + initPacket, + sizeof(struct nvsp_message), + (unsigned long)initPacket, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + + if (ret != 0) { + DPRINT_ERR(NETVSC, "unable to send NvspMessageTypeInit"); + goto Cleanup; + } + + osd_WaitEventWait(netDevice->ChannelInitEvent); + + /* Now, check the response */ + /* ASSERT(initPacket->Messages.InitMessages.InitComplete.MaximumMdlChainLength <= MAX_MULTIPAGE_BUFFER_COUNT); */ + DPRINT_INFO(NETVSC, "NvspMessageTypeInit status(%d) max mdl chain (%d)", + initPacket->Messages.InitMessages.InitComplete.Status, + initPacket->Messages.InitMessages.InitComplete.MaximumMdlChainLength); + + if (initPacket->Messages.InitMessages.InitComplete.Status != + NvspStatusSuccess) { + DPRINT_ERR(NETVSC, + "unable to initialize with netvsp (status 0x%x)", + initPacket->Messages.InitMessages.InitComplete.Status); + ret = -1; + goto Cleanup; + } + + if (initPacket->Messages.InitMessages.InitComplete.NegotiatedProtocolVersion != NVSP_PROTOCOL_VERSION_1) { + DPRINT_ERR(NETVSC, "unable to initialize with netvsp " + "(version expected 1 got %d)", + initPacket->Messages.InitMessages.InitComplete.NegotiatedProtocolVersion); + ret = -1; + goto Cleanup; + } + DPRINT_INFO(NETVSC, "Sending NvspMessage1TypeSendNdisVersion..."); + + /* Send the ndis version */ + memset(initPacket, 0, sizeof(struct nvsp_message)); + + ndisVersion = 0x00050000; + + initPacket->Header.MessageType = NvspMessage1TypeSendNdisVersion; + initPacket->Messages.Version1Messages.SendNdisVersion.NdisMajorVersion = + (ndisVersion & 0xFFFF0000) >> 16; + initPacket->Messages.Version1Messages.SendNdisVersion.NdisMinorVersion = + ndisVersion & 0xFFFF; + + /* Send the init request */ + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + initPacket, + sizeof(struct nvsp_message), + (unsigned long)initPacket, + VmbusPacketTypeDataInBand, 0); + if (ret != 0) { + DPRINT_ERR(NETVSC, + "unable to send NvspMessage1TypeSendNdisVersion"); + ret = -1; + goto Cleanup; + } + /* + * BUGBUG - We have to wait for the above msg since the + * netvsp uses KMCL which acknowledges packet (completion + * packet) since our Vmbus always set the + * VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED flag + */ + /* osd_WaitEventWait(NetVscChannel->ChannelInitEvent); */ + + /* Post the big receive buffer to NetVSP */ + ret = NetVscInitializeReceiveBufferWithNetVsp(Device); + if (ret == 0) + ret = NetVscInitializeSendBufferWithNetVsp(Device); + +Cleanup: + PutNetDevice(Device); + DPRINT_EXIT(NETVSC); + return ret; +} + +static void NetVscDisconnectFromVsp(struct netvsc_device *NetDevice) +{ + DPRINT_ENTER(NETVSC); + + NetVscDestroyReceiveBuffer(NetDevice); + NetVscDestroySendBuffer(NetDevice); + + DPRINT_EXIT(NETVSC); +} + +/* + * NetVscOnDeviceAdd - Callback when the device belonging to this driver is added + */ +static int NetVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) +{ + int ret = 0; + int i; + struct netvsc_device *netDevice; + struct hv_netvsc_packet *packet, *pos; + struct netvsc_driver *netDriver = + (struct netvsc_driver *)Device->Driver; + + DPRINT_ENTER(NETVSC); + + netDevice = AllocNetDevice(Device); + if (!netDevice) { + ret = -1; + goto Cleanup; + } + + DPRINT_DBG(NETVSC, "netvsc channel object allocated - %p", netDevice); + + /* Initialize the NetVSC channel extension */ + netDevice->ReceiveBufferSize = NETVSC_RECEIVE_BUFFER_SIZE; + spin_lock_init(&netDevice->receive_packet_list_lock); + + netDevice->SendBufferSize = NETVSC_SEND_BUFFER_SIZE; + + INIT_LIST_HEAD(&netDevice->ReceivePacketList); + + for (i = 0; i < NETVSC_RECEIVE_PACKETLIST_COUNT; i++) { + packet = kzalloc(sizeof(struct hv_netvsc_packet) + + (NETVSC_RECEIVE_SG_COUNT * + sizeof(struct hv_page_buffer)), GFP_KERNEL); + if (!packet) { + DPRINT_DBG(NETVSC, "unable to allocate netvsc pkts " + "for receive pool (wanted %d got %d)", + NETVSC_RECEIVE_PACKETLIST_COUNT, i); + break; + } + list_add_tail(&packet->ListEntry, + &netDevice->ReceivePacketList); + } + netDevice->ChannelInitEvent = osd_WaitEventCreate(); + if (!netDevice->ChannelInitEvent) { + ret = -ENOMEM; + goto Cleanup; + } + + /* Open the channel */ + ret = Device->Driver->VmbusChannelInterface.Open(Device, + netDriver->RingBufferSize, + netDriver->RingBufferSize, + NULL, 0, + NetVscOnChannelCallback, + Device); + + if (ret != 0) { + DPRINT_ERR(NETVSC, "unable to open channel: %d", ret); + ret = -1; + goto Cleanup; + } + + /* Channel is opened */ + DPRINT_INFO(NETVSC, "*** NetVSC channel opened successfully! ***"); + + /* Connect with the NetVsp */ + ret = NetVscConnectToVsp(Device); + if (ret != 0) { + DPRINT_ERR(NETVSC, "unable to connect to NetVSP - %d", ret); + ret = -1; + goto Close; + } + + DPRINT_INFO(NETVSC, "*** NetVSC channel handshake result - %d ***", + ret); + + DPRINT_EXIT(NETVSC); + return ret; + +Close: + /* Now, we can close the channel safely */ + Device->Driver->VmbusChannelInterface.Close(Device); + +Cleanup: + + if (netDevice) { + kfree(netDevice->ChannelInitEvent); + + list_for_each_entry_safe(packet, pos, + &netDevice->ReceivePacketList, + ListEntry) { + list_del(&packet->ListEntry); + kfree(packet); + } + + ReleaseOutboundNetDevice(Device); + ReleaseInboundNetDevice(Device); + + FreeNetDevice(netDevice); + } + + DPRINT_EXIT(NETVSC); + return ret; +} + +/* + * NetVscOnDeviceRemove - Callback when the root bus device is removed + */ +static int NetVscOnDeviceRemove(struct hv_device *Device) +{ + struct netvsc_device *netDevice; + struct hv_netvsc_packet *netvscPacket, *pos; + + DPRINT_ENTER(NETVSC); + + DPRINT_INFO(NETVSC, "Disabling outbound traffic on net device (%p)...", + Device->Extension); + + /* Stop outbound traffic ie sends and receives completions */ + netDevice = ReleaseOutboundNetDevice(Device); + if (!netDevice) { + DPRINT_ERR(NETVSC, "No net device present!!"); + return -1; + } + + /* Wait for all send completions */ + while (atomic_read(&netDevice->NumOutstandingSends)) { + DPRINT_INFO(NETVSC, "waiting for %d requests to complete...", + atomic_read(&netDevice->NumOutstandingSends)); + udelay(100); + } + + DPRINT_INFO(NETVSC, "Disconnecting from netvsp..."); + + NetVscDisconnectFromVsp(netDevice); + + DPRINT_INFO(NETVSC, "Disabling inbound traffic on net device (%p)...", + Device->Extension); + + /* Stop inbound traffic ie receives and sends completions */ + netDevice = ReleaseInboundNetDevice(Device); + + /* At this point, no one should be accessing netDevice except in here */ + DPRINT_INFO(NETVSC, "net device (%p) safe to remove", netDevice); + + /* Now, we can close the channel safely */ + Device->Driver->VmbusChannelInterface.Close(Device); + + /* Release all resources */ + list_for_each_entry_safe(netvscPacket, pos, + &netDevice->ReceivePacketList, ListEntry) { + list_del(&netvscPacket->ListEntry); + kfree(netvscPacket); + } + + kfree(netDevice->ChannelInitEvent); + FreeNetDevice(netDevice); + + DPRINT_EXIT(NETVSC); + return 0; +} + +/* + * NetVscOnCleanup - Perform any cleanup when the driver is removed + */ +static void NetVscOnCleanup(struct hv_driver *drv) +{ + DPRINT_ENTER(NETVSC); + DPRINT_EXIT(NETVSC); +} + +static void NetVscOnSendCompletion(struct hv_device *Device, + struct vmpacket_descriptor *Packet) +{ + struct netvsc_device *netDevice; + struct nvsp_message *nvspPacket; + struct hv_netvsc_packet *nvscPacket; + + DPRINT_ENTER(NETVSC); + + netDevice = GetInboundNetDevice(Device); + if (!netDevice) { + DPRINT_ERR(NETVSC, "unable to get net device..." + "device being destroyed?"); + DPRINT_EXIT(NETVSC); + return; + } + + nvspPacket = (struct nvsp_message *)((unsigned long)Packet + (Packet->DataOffset8 << 3)); + + DPRINT_DBG(NETVSC, "send completion packet - type %d", + nvspPacket->Header.MessageType); + + if ((nvspPacket->Header.MessageType == NvspMessageTypeInitComplete) || + (nvspPacket->Header.MessageType == + NvspMessage1TypeSendReceiveBufferComplete) || + (nvspPacket->Header.MessageType == + NvspMessage1TypeSendSendBufferComplete)) { + /* Copy the response back */ + memcpy(&netDevice->ChannelInitPacket, nvspPacket, + sizeof(struct nvsp_message)); + osd_WaitEventSet(netDevice->ChannelInitEvent); + } else if (nvspPacket->Header.MessageType == + NvspMessage1TypeSendRNDISPacketComplete) { + /* Get the send context */ + nvscPacket = (struct hv_netvsc_packet *)(unsigned long)Packet->TransactionId; + /* ASSERT(nvscPacket); */ + + /* Notify the layer above us */ + nvscPacket->Completion.Send.OnSendCompletion(nvscPacket->Completion.Send.SendCompletionContext); + + atomic_dec(&netDevice->NumOutstandingSends); + } else { + DPRINT_ERR(NETVSC, "Unknown send completion packet type - " + "%d received!!", nvspPacket->Header.MessageType); + } + + PutNetDevice(Device); + DPRINT_EXIT(NETVSC); +} + +static int NetVscOnSend(struct hv_device *Device, + struct hv_netvsc_packet *Packet) +{ + struct netvsc_device *netDevice; + int ret = 0; + + struct nvsp_message sendMessage; + + DPRINT_ENTER(NETVSC); + + netDevice = GetOutboundNetDevice(Device); + if (!netDevice) { + DPRINT_ERR(NETVSC, "net device (%p) shutting down..." + "ignoring outbound packets", netDevice); + DPRINT_EXIT(NETVSC); + return -2; + } + + sendMessage.Header.MessageType = NvspMessage1TypeSendRNDISPacket; + if (Packet->IsDataPacket) { + /* 0 is RMC_DATA; */ + sendMessage.Messages.Version1Messages.SendRNDISPacket.ChannelType = 0; + } else { + /* 1 is RMC_CONTROL; */ + sendMessage.Messages.Version1Messages.SendRNDISPacket.ChannelType = 1; + } + + /* Not using send buffer section */ + sendMessage.Messages.Version1Messages.SendRNDISPacket.SendBufferSectionIndex = 0xFFFFFFFF; + sendMessage.Messages.Version1Messages.SendRNDISPacket.SendBufferSectionSize = 0; + + if (Packet->PageBufferCount) { + ret = Device->Driver->VmbusChannelInterface.SendPacketPageBuffer( + Device, Packet->PageBuffers, + Packet->PageBufferCount, + &sendMessage, + sizeof(struct nvsp_message), + (unsigned long)Packet); + } else { + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + &sendMessage, + sizeof(struct nvsp_message), + (unsigned long)Packet, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + + } + + if (ret != 0) + DPRINT_ERR(NETVSC, "Unable to send packet %p ret %d", + Packet, ret); + + atomic_inc(&netDevice->NumOutstandingSends); + PutNetDevice(Device); + + DPRINT_EXIT(NETVSC); + return ret; +} + +static void NetVscOnReceive(struct hv_device *Device, + struct vmpacket_descriptor *Packet) +{ + struct netvsc_device *netDevice; + struct vmtransfer_page_packet_header *vmxferpagePacket; + struct nvsp_message *nvspPacket; + struct hv_netvsc_packet *netvscPacket = NULL; + unsigned long start; + unsigned long end, endVirtual; + /* struct netvsc_driver *netvscDriver; */ + struct xferpage_packet *xferpagePacket = NULL; + int i, j; + int count = 0, bytesRemain = 0; + unsigned long flags; + LIST_HEAD(listHead); + + DPRINT_ENTER(NETVSC); + + netDevice = GetInboundNetDevice(Device); + if (!netDevice) { + DPRINT_ERR(NETVSC, "unable to get net device..." + "device being destroyed?"); + DPRINT_EXIT(NETVSC); + return; + } + + /* + * All inbound packets other than send completion should be xfer page + * packet + */ + if (Packet->Type != VmbusPacketTypeDataUsingTransferPages) { + DPRINT_ERR(NETVSC, "Unknown packet type received - %d", + Packet->Type); + PutNetDevice(Device); + return; + } + + nvspPacket = (struct nvsp_message *)((unsigned long)Packet + + (Packet->DataOffset8 << 3)); + + /* Make sure this is a valid nvsp packet */ + if (nvspPacket->Header.MessageType != NvspMessage1TypeSendRNDISPacket) { + DPRINT_ERR(NETVSC, "Unknown nvsp packet type received - %d", + nvspPacket->Header.MessageType); + PutNetDevice(Device); + return; + } + + DPRINT_DBG(NETVSC, "NVSP packet received - type %d", + nvspPacket->Header.MessageType); + + vmxferpagePacket = (struct vmtransfer_page_packet_header *)Packet; + + if (vmxferpagePacket->TransferPageSetId != NETVSC_RECEIVE_BUFFER_ID) { + DPRINT_ERR(NETVSC, "Invalid xfer page set id - " + "expecting %x got %x", NETVSC_RECEIVE_BUFFER_ID, + vmxferpagePacket->TransferPageSetId); + PutNetDevice(Device); + return; + } + + DPRINT_DBG(NETVSC, "xfer page - range count %d", + vmxferpagePacket->RangeCount); + + /* + * Grab free packets (range count + 1) to represent this xfer + * page packet. +1 to represent the xfer page packet itself. + * We grab it here so that we know exactly how many we can + * fulfil + */ + spin_lock_irqsave(&netDevice->receive_packet_list_lock, flags); + while (!list_empty(&netDevice->ReceivePacketList)) { + list_move_tail(netDevice->ReceivePacketList.next, &listHead); + if (++count == vmxferpagePacket->RangeCount + 1) + break; + } + spin_unlock_irqrestore(&netDevice->receive_packet_list_lock, flags); + + /* + * We need at least 2 netvsc pkts (1 to represent the xfer + * page and at least 1 for the range) i.e. we can handled + * some of the xfer page packet ranges... + */ + if (count < 2) { + DPRINT_ERR(NETVSC, "Got only %d netvsc pkt...needed %d pkts. " + "Dropping this xfer page packet completely!", + count, vmxferpagePacket->RangeCount + 1); + + /* Return it to the freelist */ + spin_lock_irqsave(&netDevice->receive_packet_list_lock, flags); + for (i = count; i != 0; i--) { + list_move_tail(listHead.next, + &netDevice->ReceivePacketList); + } + spin_unlock_irqrestore(&netDevice->receive_packet_list_lock, + flags); + + NetVscSendReceiveCompletion(Device, + vmxferpagePacket->d.TransactionId); + + PutNetDevice(Device); + return; + } + + /* Remove the 1st packet to represent the xfer page packet itself */ + xferpagePacket = (struct xferpage_packet *)listHead.next; + list_del(&xferpagePacket->ListEntry); + + /* This is how much we can satisfy */ + xferpagePacket->Count = count - 1; + /* ASSERT(xferpagePacket->Count > 0 && xferpagePacket->Count <= */ + /* vmxferpagePacket->RangeCount); */ + + if (xferpagePacket->Count != vmxferpagePacket->RangeCount) { + DPRINT_INFO(NETVSC, "Needed %d netvsc pkts to satisy this xfer " + "page...got %d", vmxferpagePacket->RangeCount, + xferpagePacket->Count); + } + + /* Each range represents 1 RNDIS pkt that contains 1 ethernet frame */ + for (i = 0; i < (count - 1); i++) { + netvscPacket = (struct hv_netvsc_packet *)listHead.next; + list_del(&netvscPacket->ListEntry); + + /* Initialize the netvsc packet */ + netvscPacket->XferPagePacket = xferpagePacket; + netvscPacket->Completion.Recv.OnReceiveCompletion = + NetVscOnReceiveCompletion; + netvscPacket->Completion.Recv.ReceiveCompletionContext = + netvscPacket; + netvscPacket->Device = Device; + /* Save this so that we can send it back */ + netvscPacket->Completion.Recv.ReceiveCompletionTid = + vmxferpagePacket->d.TransactionId; + + netvscPacket->TotalDataBufferLength = + vmxferpagePacket->Ranges[i].ByteCount; + netvscPacket->PageBufferCount = 1; + + /* ASSERT(vmxferpagePacket->Ranges[i].ByteOffset + */ + /* vmxferpagePacket->Ranges[i].ByteCount < */ + /* netDevice->ReceiveBufferSize); */ + + netvscPacket->PageBuffers[0].Length = + vmxferpagePacket->Ranges[i].ByteCount; + + start = virt_to_phys((void *)((unsigned long)netDevice->ReceiveBuffer + vmxferpagePacket->Ranges[i].ByteOffset)); + + netvscPacket->PageBuffers[0].Pfn = start >> PAGE_SHIFT; + endVirtual = (unsigned long)netDevice->ReceiveBuffer + + vmxferpagePacket->Ranges[i].ByteOffset + + vmxferpagePacket->Ranges[i].ByteCount - 1; + end = virt_to_phys((void *)endVirtual); + + /* Calculate the page relative offset */ + netvscPacket->PageBuffers[0].Offset = + vmxferpagePacket->Ranges[i].ByteOffset & (PAGE_SIZE - 1); + if ((end >> PAGE_SHIFT) != (start >> PAGE_SHIFT)) { + /* Handle frame across multiple pages: */ + netvscPacket->PageBuffers[0].Length = + (netvscPacket->PageBuffers[0].Pfn << PAGE_SHIFT) + + PAGE_SIZE - start; + bytesRemain = netvscPacket->TotalDataBufferLength - + netvscPacket->PageBuffers[0].Length; + for (j = 1; j < NETVSC_PACKET_MAXPAGE; j++) { + netvscPacket->PageBuffers[j].Offset = 0; + if (bytesRemain <= PAGE_SIZE) { + netvscPacket->PageBuffers[j].Length = bytesRemain; + bytesRemain = 0; + } else { + netvscPacket->PageBuffers[j].Length = PAGE_SIZE; + bytesRemain -= PAGE_SIZE; + } + netvscPacket->PageBuffers[j].Pfn = + virt_to_phys((void *)(endVirtual - bytesRemain)) >> PAGE_SHIFT; + netvscPacket->PageBufferCount++; + if (bytesRemain == 0) + break; + } + /* ASSERT(bytesRemain == 0); */ + } + DPRINT_DBG(NETVSC, "[%d] - (abs offset %u len %u) => " + "(pfn %llx, offset %u, len %u)", i, + vmxferpagePacket->Ranges[i].ByteOffset, + vmxferpagePacket->Ranges[i].ByteCount, + netvscPacket->PageBuffers[0].Pfn, + netvscPacket->PageBuffers[0].Offset, + netvscPacket->PageBuffers[0].Length); + + /* Pass it to the upper layer */ + ((struct netvsc_driver *)Device->Driver)->OnReceiveCallback(Device, netvscPacket); + + NetVscOnReceiveCompletion(netvscPacket->Completion.Recv.ReceiveCompletionContext); + } + + /* ASSERT(list_empty(&listHead)); */ + + PutNetDevice(Device); + DPRINT_EXIT(NETVSC); +} + +static void NetVscSendReceiveCompletion(struct hv_device *Device, + u64 TransactionId) +{ + struct nvsp_message recvcompMessage; + int retries = 0; + int ret; + + DPRINT_DBG(NETVSC, "Sending receive completion pkt - %llx", + TransactionId); + + recvcompMessage.Header.MessageType = + NvspMessage1TypeSendRNDISPacketComplete; + + /* FIXME: Pass in the status */ + recvcompMessage.Messages.Version1Messages.SendRNDISPacketComplete.Status = NvspStatusSuccess; + +retry_send_cmplt: + /* Send the completion */ + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + &recvcompMessage, + sizeof(struct nvsp_message), + TransactionId, + VmbusPacketTypeCompletion, 0); + if (ret == 0) { + /* success */ + /* no-op */ + } else if (ret == -1) { + /* no more room...wait a bit and attempt to retry 3 times */ + retries++; + DPRINT_ERR(NETVSC, "unable to send receive completion pkt " + "(tid %llx)...retrying %d", TransactionId, retries); + + if (retries < 4) { + udelay(100); + goto retry_send_cmplt; + } else { + DPRINT_ERR(NETVSC, "unable to send receive completion " + "pkt (tid %llx)...give up retrying", + TransactionId); + } + } else { + DPRINT_ERR(NETVSC, "unable to send receive completion pkt - " + "%llx", TransactionId); + } +} + +/* Send a receive completion packet to RNDIS device (ie NetVsp) */ +static void NetVscOnReceiveCompletion(void *Context) +{ + struct hv_netvsc_packet *packet = Context; + struct hv_device *device = (struct hv_device *)packet->Device; + struct netvsc_device *netDevice; + u64 transactionId = 0; + bool fSendReceiveComp = false; + unsigned long flags; + + DPRINT_ENTER(NETVSC); + + /* ASSERT(packet->XferPagePacket); */ + + /* + * Even though it seems logical to do a GetOutboundNetDevice() here to + * send out receive completion, we are using GetInboundNetDevice() + * since we may have disable outbound traffic already. + */ + netDevice = GetInboundNetDevice(device); + if (!netDevice) { + DPRINT_ERR(NETVSC, "unable to get net device..." + "device being destroyed?"); + DPRINT_EXIT(NETVSC); + return; + } + + /* Overloading use of the lock. */ + spin_lock_irqsave(&netDevice->receive_packet_list_lock, flags); + + /* ASSERT(packet->XferPagePacket->Count > 0); */ + packet->XferPagePacket->Count--; + + /* + * Last one in the line that represent 1 xfer page packet. + * Return the xfer page packet itself to the freelist + */ + if (packet->XferPagePacket->Count == 0) { + fSendReceiveComp = true; + transactionId = packet->Completion.Recv.ReceiveCompletionTid; + list_add_tail(&packet->XferPagePacket->ListEntry, + &netDevice->ReceivePacketList); + + } + + /* Put the packet back */ + list_add_tail(&packet->ListEntry, &netDevice->ReceivePacketList); + spin_unlock_irqrestore(&netDevice->receive_packet_list_lock, flags); + + /* Send a receive completion for the xfer page packet */ + if (fSendReceiveComp) + NetVscSendReceiveCompletion(device, transactionId); + + PutNetDevice(device); + DPRINT_EXIT(NETVSC); +} + +static void NetVscOnChannelCallback(void *Context) +{ + int ret; + struct hv_device *device = Context; + struct netvsc_device *netDevice; + u32 bytesRecvd; + u64 requestId; + unsigned char *packet; + struct vmpacket_descriptor *desc; + unsigned char *buffer; + int bufferlen = NETVSC_PACKET_SIZE; + + + DPRINT_ENTER(NETVSC); + + /* ASSERT(device); */ + + packet = kzalloc(NETVSC_PACKET_SIZE * sizeof(unsigned char), + GFP_KERNEL); + if (!packet) + return; + buffer = packet; + + netDevice = GetInboundNetDevice(device); + if (!netDevice) { + DPRINT_ERR(NETVSC, "net device (%p) shutting down..." + "ignoring inbound packets", netDevice); + DPRINT_EXIT(NETVSC); + goto out; + } + + do { + ret = device->Driver->VmbusChannelInterface.RecvPacketRaw( + device, buffer, bufferlen, + &bytesRecvd, &requestId); + if (ret == 0) { + if (bytesRecvd > 0) { + DPRINT_DBG(NETVSC, "receive %d bytes, tid %llx", + bytesRecvd, requestId); + + desc = (struct vmpacket_descriptor *)buffer; + switch (desc->Type) { + case VmbusPacketTypeCompletion: + NetVscOnSendCompletion(device, desc); + break; + + case VmbusPacketTypeDataUsingTransferPages: + NetVscOnReceive(device, desc); + break; + + default: + DPRINT_ERR(NETVSC, + "unhandled packet type %d, " + "tid %llx len %d\n", + desc->Type, requestId, + bytesRecvd); + break; + } + + /* reset */ + if (bufferlen > NETVSC_PACKET_SIZE) { + kfree(buffer); + buffer = packet; + bufferlen = NETVSC_PACKET_SIZE; + } + } else { + /* reset */ + if (bufferlen > NETVSC_PACKET_SIZE) { + kfree(buffer); + buffer = packet; + bufferlen = NETVSC_PACKET_SIZE; + } + + break; + } + } else if (ret == -2) { + /* Handle large packet */ + buffer = kmalloc(bytesRecvd, GFP_ATOMIC); + if (buffer == NULL) { + /* Try again next time around */ + DPRINT_ERR(NETVSC, + "unable to allocate buffer of size " + "(%d)!!", bytesRecvd); + break; + } + + bufferlen = bytesRecvd; + } + } while (1); + + PutNetDevice(device); + DPRINT_EXIT(NETVSC); +out: + kfree(buffer); + return; +} diff --git a/drivers/staging/hv/netvsc.h b/drivers/staging/hv/netvsc.h new file mode 100644 index 0000000..a6264db --- /dev/null +++ b/drivers/staging/hv/netvsc.h @@ -0,0 +1,331 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _NETVSC_H_ +#define _NETVSC_H_ + +#include +#include "VmbusPacketFormat.h" +#include "VmbusChannelInterface.h" +#include "NetVscApi.h" + + +#define NVSP_INVALID_PROTOCOL_VERSION ((u32)0xFFFFFFFF) + +#define NVSP_PROTOCOL_VERSION_1 2 +#define NVSP_MIN_PROTOCOL_VERSION NVSP_PROTOCOL_VERSION_1 +#define NVSP_MAX_PROTOCOL_VERSION NVSP_PROTOCOL_VERSION_1 + +enum { + NvspMessageTypeNone = 0, + + /* Init Messages */ + NvspMessageTypeInit = 1, + NvspMessageTypeInitComplete = 2, + + NvspVersionMessageStart = 100, + + /* Version 1 Messages */ + NvspMessage1TypeSendNdisVersion = NvspVersionMessageStart, + + NvspMessage1TypeSendReceiveBuffer, + NvspMessage1TypeSendReceiveBufferComplete, + NvspMessage1TypeRevokeReceiveBuffer, + + NvspMessage1TypeSendSendBuffer, + NvspMessage1TypeSendSendBufferComplete, + NvspMessage1TypeRevokeSendBuffer, + + NvspMessage1TypeSendRNDISPacket, + NvspMessage1TypeSendRNDISPacketComplete, + + /* + * This should be set to the number of messages for the version with + * the maximum number of messages. + */ + NvspNumMessagePerVersion = 9, +}; + +enum { + NvspStatusNone = 0, + NvspStatusSuccess, + NvspStatusFailure, + NvspStatusProtocolVersionRangeTooNew, + NvspStatusProtocolVersionRangeTooOld, + NvspStatusInvalidRndisPacket, + NvspStatusBusy, + NvspStatusMax, +}; + +struct nvsp_message_header { + u32 MessageType; +}; + +/* Init Messages */ + +/* + * This message is used by the VSC to initialize the channel after the channels + * has been opened. This message should never include anything other then + * versioning (i.e. this message will be the same for ever). + */ +struct nvsp_message_init { + u32 MinProtocolVersion; + u32 MaxProtocolVersion; +} __attribute__((packed)); + +/* + * This message is used by the VSP to complete the initialization of the + * channel. This message should never include anything other then versioning + * (i.e. this message will be the same for ever). + */ +struct nvsp_message_init_complete { + u32 NegotiatedProtocolVersion; + u32 MaximumMdlChainLength; + u32 Status; +} __attribute__((packed)); + +union nvsp_message_init_uber { + struct nvsp_message_init Init; + struct nvsp_message_init_complete InitComplete; +} __attribute__((packed)); + +/* Version 1 Messages */ + +/* + * This message is used by the VSC to send the NDIS version to the VSP. The VSP + * can use this information when handling OIDs sent by the VSC. + */ +struct nvsp_1_message_send_ndis_version { + u32 NdisMajorVersion; + u32 NdisMinorVersion; +} __attribute__((packed)); + +/* + * This message is used by the VSC to send a receive buffer to the VSP. The VSP + * can then use the receive buffer to send data to the VSC. + */ +struct nvsp_1_message_send_receive_buffer { + u32 GpadlHandle; + u16 Id; +} __attribute__((packed)); + +struct nvsp_1_receive_buffer_section { + u32 Offset; + u32 SubAllocationSize; + u32 NumSubAllocations; + u32 EndOffset; +} __attribute__((packed)); + +/* + * This message is used by the VSP to acknowledge a receive buffer send by the + * VSC. This message must be sent by the VSP before the VSP uses the receive + * buffer. + */ +struct nvsp_1_message_send_receive_buffer_complete { + u32 Status; + u32 NumSections; + + /* + * The receive buffer is split into two parts, a large suballocation + * section and a small suballocation section. These sections are then + * suballocated by a certain size. + */ + + /* + * For example, the following break up of the receive buffer has 6 + * large suballocations and 10 small suballocations. + */ + + /* + * | Large Section | | Small Section | + * ------------------------------------------------------------ + * | | | | | | | | | | | | | | | | | | + * | | + * LargeOffset SmallOffset + */ + + struct nvsp_1_receive_buffer_section Sections[1]; +} __attribute__((packed)); + +/* + * This message is sent by the VSC to revoke the receive buffer. After the VSP + * completes this transaction, the vsp should never use the receive buffer + * again. + */ +struct nvsp_1_message_revoke_receive_buffer { + u16 Id; +}; + +/* + * This message is used by the VSC to send a send buffer to the VSP. The VSC + * can then use the send buffer to send data to the VSP. + */ +struct nvsp_1_message_send_send_buffer { + u32 GpadlHandle; + u16 Id; +} __attribute__((packed)); + +/* + * This message is used by the VSP to acknowledge a send buffer sent by the + * VSC. This message must be sent by the VSP before the VSP uses the sent + * buffer. + */ +struct nvsp_1_message_send_send_buffer_complete { + u32 Status; + + /* + * The VSC gets to choose the size of the send buffer and the VSP gets + * to choose the sections size of the buffer. This was done to enable + * dynamic reconfigurations when the cost of GPA-direct buffers + * decreases. + */ + u32 SectionSize; +} __attribute__((packed)); + +/* + * This message is sent by the VSC to revoke the send buffer. After the VSP + * completes this transaction, the vsp should never use the send buffer again. + */ +struct nvsp_1_message_revoke_send_buffer { + u16 Id; +}; + +/* + * This message is used by both the VSP and the VSC to send a RNDIS message to + * the opposite channel endpoint. + */ +struct nvsp_1_message_send_rndis_packet { + /* + * This field is specified by RNIDS. They assume there's two different + * channels of communication. However, the Network VSP only has one. + * Therefore, the channel travels with the RNDIS packet. + */ + u32 ChannelType; + + /* + * This field is used to send part or all of the data through a send + * buffer. This values specifies an index into the send buffer. If the + * index is 0xFFFFFFFF, then the send buffer is not being used and all + * of the data was sent through other VMBus mechanisms. + */ + u32 SendBufferSectionIndex; + u32 SendBufferSectionSize; +} __attribute__((packed)); + +/* + * This message is used by both the VSP and the VSC to complete a RNDIS message + * to the opposite channel endpoint. At this point, the initiator of this + * message cannot use any resources associated with the original RNDIS packet. + */ +struct nvsp_1_message_send_rndis_packet_complete { + u32 Status; +}; + +union nvsp_1_message_uber { + struct nvsp_1_message_send_ndis_version SendNdisVersion; + + struct nvsp_1_message_send_receive_buffer SendReceiveBuffer; + struct nvsp_1_message_send_receive_buffer_complete + SendReceiveBufferComplete; + struct nvsp_1_message_revoke_receive_buffer RevokeReceiveBuffer; + + struct nvsp_1_message_send_send_buffer SendSendBuffer; + struct nvsp_1_message_send_send_buffer_complete SendSendBufferComplete; + struct nvsp_1_message_revoke_send_buffer RevokeSendBuffer; + + struct nvsp_1_message_send_rndis_packet SendRNDISPacket; + struct nvsp_1_message_send_rndis_packet_complete + SendRNDISPacketComplete; +} __attribute__((packed)); + +union nvsp_all_messages { + union nvsp_message_init_uber InitMessages; + union nvsp_1_message_uber Version1Messages; +} __attribute__((packed)); + +/* ALL Messages */ +struct nvsp_message { + struct nvsp_message_header Header; + union nvsp_all_messages Messages; +} __attribute__((packed)); + + + + +/* #define NVSC_MIN_PROTOCOL_VERSION 1 */ +/* #define NVSC_MAX_PROTOCOL_VERSION 1 */ + +#define NETVSC_SEND_BUFFER_SIZE (64*1024) /* 64K */ +#define NETVSC_SEND_BUFFER_ID 0xface + + +#define NETVSC_RECEIVE_BUFFER_SIZE (1024*1024) /* 1MB */ + +#define NETVSC_RECEIVE_BUFFER_ID 0xcafe + +#define NETVSC_RECEIVE_SG_COUNT 1 + +/* Preallocated receive packets */ +#define NETVSC_RECEIVE_PACKETLIST_COUNT 256 + +#define NETVSC_PACKET_SIZE 2048 + +/* Per netvsc channel-specific */ +struct netvsc_device { + struct hv_device *Device; + + atomic_t RefCount; + atomic_t NumOutstandingSends; + /* + * List of free preallocated hv_netvsc_packet to represent receive + * packet + */ + struct list_head ReceivePacketList; + spinlock_t receive_packet_list_lock; + + /* Send buffer allocated by us but manages by NetVSP */ + void *SendBuffer; + u32 SendBufferSize; + u32 SendBufferGpadlHandle; + u32 SendSectionSize; + + /* Receive buffer allocated by us but manages by NetVSP */ + void *ReceiveBuffer; + u32 ReceiveBufferSize; + u32 ReceiveBufferGpadlHandle; + u32 ReceiveSectionCount; + struct nvsp_1_receive_buffer_section *ReceiveSections; + + /* Used for NetVSP initialization protocol */ + struct osd_waitevent *ChannelInitEvent; + struct nvsp_message ChannelInitPacket; + + struct nvsp_message RevokePacket; + /* unsigned char HwMacAddr[HW_MACADDR_LEN]; */ + + /* Holds rndis device info */ + void *Extension; +}; + +#endif /* _NETVSC_H_ */ -- cgit v0.10.2 From a73fd9802e976fbcb6b6f4bbe082f94ebe433ddf Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:29:27 -0700 Subject: Staging: hv: rename StorVsc.c to storvsc.c Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 385eb90..cc75185 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -7,6 +7,6 @@ obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o hv_vmbus-objs := vmbus_drv.o osd.o \ vmbus.o hv.o connection.o channel.o \ ChannelMgmt.o ChannelInterface.o ring_buffer.o -hv_storvsc-objs := storvsc_drv.o StorVsc.o +hv_storvsc-objs := storvsc_drv.o storvsc.o hv_blkvsc-objs := blkvsc_drv.o blkvsc.o hv_netvsc-objs := netvsc_drv.o netvsc.o RndisFilter.o diff --git a/drivers/staging/hv/StorVsc.c b/drivers/staging/hv/StorVsc.c deleted file mode 100644 index e73130e..0000000 --- a/drivers/staging/hv/StorVsc.c +++ /dev/null @@ -1,858 +0,0 @@ -/* - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - */ -#include -#include -#include -#include -#include -#include "osd.h" -#include "logging.h" -#include "StorVscApi.h" -#include "VmbusPacketFormat.h" -#include "vstorage.h" - - -struct storvsc_request_extension { - /* LIST_ENTRY ListEntry; */ - - struct hv_storvsc_request *Request; - struct hv_device *Device; - - /* Synchronize the request/response if needed */ - struct osd_waitevent *WaitEvent; - - struct vstor_packet VStorPacket; -}; - -/* A storvsc device is a device object that contains a vmbus channel */ -struct storvsc_device { - struct hv_device *Device; - - /* 0 indicates the device is being destroyed */ - atomic_t RefCount; - - atomic_t NumOutstandingRequests; - - /* - * Each unique Port/Path/Target represents 1 channel ie scsi - * controller. In reality, the pathid, targetid is always 0 - * and the port is set by us - */ - unsigned int PortNumber; - unsigned char PathId; - unsigned char TargetId; - - /* LIST_ENTRY OutstandingRequestList; */ - /* HANDLE OutstandingRequestLock; */ - - /* Used for vsc/vsp channel reset process */ - struct storvsc_request_extension InitRequest; - struct storvsc_request_extension ResetRequest; -}; - - -static const char *gDriverName = "storvsc"; - -/* {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f} */ -static const struct hv_guid gStorVscDeviceType = { - .data = { - 0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d, - 0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f - } -}; - - -static inline struct storvsc_device *AllocStorDevice(struct hv_device *Device) -{ - struct storvsc_device *storDevice; - - storDevice = kzalloc(sizeof(struct storvsc_device), GFP_KERNEL); - if (!storDevice) - return NULL; - - /* Set to 2 to allow both inbound and outbound traffics */ - /* (ie GetStorDevice() and MustGetStorDevice()) to proceed. */ - atomic_cmpxchg(&storDevice->RefCount, 0, 2); - - storDevice->Device = Device; - Device->Extension = storDevice; - - return storDevice; -} - -static inline void FreeStorDevice(struct storvsc_device *Device) -{ - /* ASSERT(atomic_read(&Device->RefCount) == 0); */ - kfree(Device); -} - -/* Get the stordevice object iff exists and its refcount > 1 */ -static inline struct storvsc_device *GetStorDevice(struct hv_device *Device) -{ - struct storvsc_device *storDevice; - - storDevice = (struct storvsc_device *)Device->Extension; - if (storDevice && atomic_read(&storDevice->RefCount) > 1) - atomic_inc(&storDevice->RefCount); - else - storDevice = NULL; - - return storDevice; -} - -/* Get the stordevice object iff exists and its refcount > 0 */ -static inline struct storvsc_device *MustGetStorDevice(struct hv_device *Device) -{ - struct storvsc_device *storDevice; - - storDevice = (struct storvsc_device *)Device->Extension; - if (storDevice && atomic_read(&storDevice->RefCount)) - atomic_inc(&storDevice->RefCount); - else - storDevice = NULL; - - return storDevice; -} - -static inline void PutStorDevice(struct hv_device *Device) -{ - struct storvsc_device *storDevice; - - storDevice = (struct storvsc_device *)Device->Extension; - /* ASSERT(storDevice); */ - - atomic_dec(&storDevice->RefCount); - /* ASSERT(atomic_read(&storDevice->RefCount)); */ -} - -/* Drop ref count to 1 to effectively disable GetStorDevice() */ -static inline struct storvsc_device *ReleaseStorDevice(struct hv_device *Device) -{ - struct storvsc_device *storDevice; - - storDevice = (struct storvsc_device *)Device->Extension; - /* ASSERT(storDevice); */ - - /* Busy wait until the ref drop to 2, then set it to 1 */ - while (atomic_cmpxchg(&storDevice->RefCount, 2, 1) != 2) - udelay(100); - - return storDevice; -} - -/* Drop ref count to 0. No one can use StorDevice object. */ -static inline struct storvsc_device *FinalReleaseStorDevice( - struct hv_device *Device) -{ - struct storvsc_device *storDevice; - - storDevice = (struct storvsc_device *)Device->Extension; - /* ASSERT(storDevice); */ - - /* Busy wait until the ref drop to 1, then set it to 0 */ - while (atomic_cmpxchg(&storDevice->RefCount, 1, 0) != 1) - udelay(100); - - Device->Extension = NULL; - return storDevice; -} - -static int StorVscChannelInit(struct hv_device *Device) -{ - struct storvsc_device *storDevice; - struct storvsc_request_extension *request; - struct vstor_packet *vstorPacket; - int ret; - - storDevice = GetStorDevice(Device); - if (!storDevice) { - DPRINT_ERR(STORVSC, "unable to get stor device..." - "device being destroyed?"); - DPRINT_EXIT(STORVSC); - return -1; - } - - request = &storDevice->InitRequest; - vstorPacket = &request->VStorPacket; - - /* - * Now, initiate the vsc/vsp initialization protocol on the open - * channel - */ - memset(request, 0, sizeof(struct storvsc_request_extension)); - request->WaitEvent = osd_WaitEventCreate(); - if (!request->WaitEvent) { - ret = -ENOMEM; - goto nomem; - } - - vstorPacket->Operation = VStorOperationBeginInitialization; - vstorPacket->Flags = REQUEST_COMPLETION_FLAG; - - /*SpinlockAcquire(gDriverExt.packetListLock); - INSERT_TAIL_LIST(&gDriverExt.packetList, &packet->listEntry.entry); - SpinlockRelease(gDriverExt.packetListLock);*/ - - DPRINT_INFO(STORVSC, "BEGIN_INITIALIZATION_OPERATION..."); - - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - vstorPacket, - sizeof(struct vstor_packet), - (unsigned long)request, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - if (ret != 0) { - DPRINT_ERR(STORVSC, - "unable to send BEGIN_INITIALIZATION_OPERATION"); - goto Cleanup; - } - - osd_WaitEventWait(request->WaitEvent); - - if (vstorPacket->Operation != VStorOperationCompleteIo || - vstorPacket->Status != 0) { - DPRINT_ERR(STORVSC, "BEGIN_INITIALIZATION_OPERATION failed " - "(op %d status 0x%x)", - vstorPacket->Operation, vstorPacket->Status); - goto Cleanup; - } - - DPRINT_INFO(STORVSC, "QUERY_PROTOCOL_VERSION_OPERATION..."); - - /* reuse the packet for version range supported */ - memset(vstorPacket, 0, sizeof(struct vstor_packet)); - vstorPacket->Operation = VStorOperationQueryProtocolVersion; - vstorPacket->Flags = REQUEST_COMPLETION_FLAG; - - vstorPacket->Version.MajorMinor = VMSTOR_PROTOCOL_VERSION_CURRENT; - FILL_VMSTOR_REVISION(vstorPacket->Version.Revision); - - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - vstorPacket, - sizeof(struct vstor_packet), - (unsigned long)request, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - if (ret != 0) { - DPRINT_ERR(STORVSC, - "unable to send BEGIN_INITIALIZATION_OPERATION"); - goto Cleanup; - } - - osd_WaitEventWait(request->WaitEvent); - - /* TODO: Check returned version */ - if (vstorPacket->Operation != VStorOperationCompleteIo || - vstorPacket->Status != 0) { - DPRINT_ERR(STORVSC, "QUERY_PROTOCOL_VERSION_OPERATION failed " - "(op %d status 0x%x)", - vstorPacket->Operation, vstorPacket->Status); - goto Cleanup; - } - - /* Query channel properties */ - DPRINT_INFO(STORVSC, "QUERY_PROPERTIES_OPERATION..."); - - memset(vstorPacket, 0, sizeof(struct vstor_packet)); - vstorPacket->Operation = VStorOperationQueryProperties; - vstorPacket->Flags = REQUEST_COMPLETION_FLAG; - vstorPacket->StorageChannelProperties.PortNumber = - storDevice->PortNumber; - - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - vstorPacket, - sizeof(struct vstor_packet), - (unsigned long)request, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - - if (ret != 0) { - DPRINT_ERR(STORVSC, - "unable to send QUERY_PROPERTIES_OPERATION"); - goto Cleanup; - } - - osd_WaitEventWait(request->WaitEvent); - - /* TODO: Check returned version */ - if (vstorPacket->Operation != VStorOperationCompleteIo || - vstorPacket->Status != 0) { - DPRINT_ERR(STORVSC, "QUERY_PROPERTIES_OPERATION failed " - "(op %d status 0x%x)", - vstorPacket->Operation, vstorPacket->Status); - goto Cleanup; - } - - storDevice->PathId = vstorPacket->StorageChannelProperties.PathId; - storDevice->TargetId = vstorPacket->StorageChannelProperties.TargetId; - - DPRINT_DBG(STORVSC, "channel flag 0x%x, max xfer len 0x%x", - vstorPacket->StorageChannelProperties.Flags, - vstorPacket->StorageChannelProperties.MaxTransferBytes); - - DPRINT_INFO(STORVSC, "END_INITIALIZATION_OPERATION..."); - - memset(vstorPacket, 0, sizeof(struct vstor_packet)); - vstorPacket->Operation = VStorOperationEndInitialization; - vstorPacket->Flags = REQUEST_COMPLETION_FLAG; - - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - vstorPacket, - sizeof(struct vstor_packet), - (unsigned long)request, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - - if (ret != 0) { - DPRINT_ERR(STORVSC, - "unable to send END_INITIALIZATION_OPERATION"); - goto Cleanup; - } - - osd_WaitEventWait(request->WaitEvent); - - if (vstorPacket->Operation != VStorOperationCompleteIo || - vstorPacket->Status != 0) { - DPRINT_ERR(STORVSC, "END_INITIALIZATION_OPERATION failed " - "(op %d status 0x%x)", - vstorPacket->Operation, vstorPacket->Status); - goto Cleanup; - } - - DPRINT_INFO(STORVSC, "**** storage channel up and running!! ****"); - -Cleanup: - kfree(request->WaitEvent); - request->WaitEvent = NULL; -nomem: - PutStorDevice(Device); - - DPRINT_EXIT(STORVSC); - return ret; -} - -static void StorVscOnIOCompletion(struct hv_device *Device, - struct vstor_packet *VStorPacket, - struct storvsc_request_extension *RequestExt) -{ - struct hv_storvsc_request *request; - struct storvsc_device *storDevice; - - DPRINT_ENTER(STORVSC); - - storDevice = MustGetStorDevice(Device); - if (!storDevice) { - DPRINT_ERR(STORVSC, "unable to get stor device..." - "device being destroyed?"); - DPRINT_EXIT(STORVSC); - return; - } - - DPRINT_DBG(STORVSC, "IO_COMPLETE_OPERATION - request extension %p " - "completed bytes xfer %u", RequestExt, - VStorPacket->VmSrb.DataTransferLength); - - /* ASSERT(RequestExt != NULL); */ - /* ASSERT(RequestExt->Request != NULL); */ - - request = RequestExt->Request; - - /* ASSERT(request->OnIOCompletion != NULL); */ - - /* Copy over the status...etc */ - request->Status = VStorPacket->VmSrb.ScsiStatus; - - if (request->Status != 0 || VStorPacket->VmSrb.SrbStatus != 1) { - DPRINT_WARN(STORVSC, - "cmd 0x%x scsi status 0x%x srb status 0x%x\n", - request->Cdb[0], VStorPacket->VmSrb.ScsiStatus, - VStorPacket->VmSrb.SrbStatus); - } - - if ((request->Status & 0xFF) == 0x02) { - /* CHECK_CONDITION */ - if (VStorPacket->VmSrb.SrbStatus & 0x80) { - /* autosense data available */ - DPRINT_WARN(STORVSC, "storvsc pkt %p autosense data " - "valid - len %d\n", RequestExt, - VStorPacket->VmSrb.SenseInfoLength); - - /* ASSERT(VStorPacket->VmSrb.SenseInfoLength <= */ - /* request->SenseBufferSize); */ - memcpy(request->SenseBuffer, - VStorPacket->VmSrb.SenseData, - VStorPacket->VmSrb.SenseInfoLength); - - request->SenseBufferSize = - VStorPacket->VmSrb.SenseInfoLength; - } - } - - /* TODO: */ - request->BytesXfer = VStorPacket->VmSrb.DataTransferLength; - - request->OnIOCompletion(request); - - atomic_dec(&storDevice->NumOutstandingRequests); - - PutStorDevice(Device); - - DPRINT_EXIT(STORVSC); -} - -static void StorVscOnReceive(struct hv_device *Device, - struct vstor_packet *VStorPacket, - struct storvsc_request_extension *RequestExt) -{ - switch (VStorPacket->Operation) { - case VStorOperationCompleteIo: - DPRINT_DBG(STORVSC, "IO_COMPLETE_OPERATION"); - StorVscOnIOCompletion(Device, VStorPacket, RequestExt); - break; - case VStorOperationRemoveDevice: - DPRINT_INFO(STORVSC, "REMOVE_DEVICE_OPERATION"); - /* TODO: */ - break; - - default: - DPRINT_INFO(STORVSC, "Unknown operation received - %d", - VStorPacket->Operation); - break; - } -} - -static void StorVscOnChannelCallback(void *context) -{ - struct hv_device *device = (struct hv_device *)context; - struct storvsc_device *storDevice; - u32 bytesRecvd; - u64 requestId; - unsigned char packet[ALIGN_UP(sizeof(struct vstor_packet), 8)]; - struct storvsc_request_extension *request; - int ret; - - DPRINT_ENTER(STORVSC); - - /* ASSERT(device); */ - - storDevice = MustGetStorDevice(device); - if (!storDevice) { - DPRINT_ERR(STORVSC, "unable to get stor device..." - "device being destroyed?"); - DPRINT_EXIT(STORVSC); - return; - } - - do { - ret = device->Driver->VmbusChannelInterface.RecvPacket(device, - packet, - ALIGN_UP(sizeof(struct vstor_packet), 8), - &bytesRecvd, &requestId); - if (ret == 0 && bytesRecvd > 0) { - DPRINT_DBG(STORVSC, "receive %d bytes - tid %llx", - bytesRecvd, requestId); - - /* ASSERT(bytesRecvd == sizeof(struct vstor_packet)); */ - - request = (struct storvsc_request_extension *) - (unsigned long)requestId; - /* ASSERT(request);c */ - - /* if (vstorPacket.Flags & SYNTHETIC_FLAG) */ - if ((request == &storDevice->InitRequest) || - (request == &storDevice->ResetRequest)) { - /* DPRINT_INFO(STORVSC, - * "reset completion - operation " - * "%u status %u", - * vstorPacket.Operation, - * vstorPacket.Status); */ - - memcpy(&request->VStorPacket, packet, - sizeof(struct vstor_packet)); - - osd_WaitEventSet(request->WaitEvent); - } else { - StorVscOnReceive(device, - (struct vstor_packet *)packet, - request); - } - } else { - /* DPRINT_DBG(STORVSC, "nothing else to read..."); */ - break; - } - } while (1); - - PutStorDevice(device); - - DPRINT_EXIT(STORVSC); - return; -} - -static int StorVscConnectToVsp(struct hv_device *Device) -{ - struct vmstorage_channel_properties props; - struct storvsc_driver_object *storDriver; - int ret; - - storDriver = (struct storvsc_driver_object *)Device->Driver; - memset(&props, 0, sizeof(struct vmstorage_channel_properties)); - - /* Open the channel */ - ret = Device->Driver->VmbusChannelInterface.Open(Device, - storDriver->RingBufferSize, - storDriver->RingBufferSize, - (void *)&props, - sizeof(struct vmstorage_channel_properties), - StorVscOnChannelCallback, - Device); - - DPRINT_DBG(STORVSC, "storage props: path id %d, tgt id %d, max xfer %d", - props.PathId, props.TargetId, props.MaxTransferBytes); - - if (ret != 0) { - DPRINT_ERR(STORVSC, "unable to open channel: %d", ret); - return -1; - } - - ret = StorVscChannelInit(Device); - - return ret; -} - -/* - * StorVscOnDeviceAdd - Callback when the device belonging to this driver is added - */ -static int StorVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) -{ - struct storvsc_device *storDevice; - /* struct vmstorage_channel_properties *props; */ - struct storvsc_device_info *deviceInfo; - int ret = 0; - - DPRINT_ENTER(STORVSC); - - deviceInfo = (struct storvsc_device_info *)AdditionalInfo; - storDevice = AllocStorDevice(Device); - if (!storDevice) { - ret = -1; - goto Cleanup; - } - - /* Save the channel properties to our storvsc channel */ - /* props = (struct vmstorage_channel_properties *) - * channel->offerMsg.Offer.u.Standard.UserDefined; */ - - /* FIXME: */ - /* - * If we support more than 1 scsi channel, we need to set the - * port number here to the scsi channel but how do we get the - * scsi channel prior to the bus scan - */ - - /* storChannel->PortNumber = 0; - storChannel->PathId = props->PathId; - storChannel->TargetId = props->TargetId; */ - - storDevice->PortNumber = deviceInfo->PortNumber; - /* Send it back up */ - ret = StorVscConnectToVsp(Device); - - /* deviceInfo->PortNumber = storDevice->PortNumber; */ - deviceInfo->PathId = storDevice->PathId; - deviceInfo->TargetId = storDevice->TargetId; - - DPRINT_DBG(STORVSC, "assigned port %u, path %u target %u\n", - storDevice->PortNumber, storDevice->PathId, - storDevice->TargetId); - -Cleanup: - DPRINT_EXIT(STORVSC); - - return ret; -} - -/* - * StorVscOnDeviceRemove - Callback when the our device is being removed - */ -static int StorVscOnDeviceRemove(struct hv_device *Device) -{ - struct storvsc_device *storDevice; - - DPRINT_ENTER(STORVSC); - - DPRINT_INFO(STORVSC, "disabling storage device (%p)...", - Device->Extension); - - storDevice = ReleaseStorDevice(Device); - - /* - * At this point, all outbound traffic should be disable. We - * only allow inbound traffic (responses) to proceed so that - * outstanding requests can be completed. - */ - while (atomic_read(&storDevice->NumOutstandingRequests)) { - DPRINT_INFO(STORVSC, "waiting for %d requests to complete...", - atomic_read(&storDevice->NumOutstandingRequests)); - udelay(100); - } - - DPRINT_INFO(STORVSC, "removing storage device (%p)...", - Device->Extension); - - storDevice = FinalReleaseStorDevice(Device); - - DPRINT_INFO(STORVSC, "storage device (%p) safe to remove", storDevice); - - /* Close the channel */ - Device->Driver->VmbusChannelInterface.Close(Device); - - FreeStorDevice(storDevice); - - DPRINT_EXIT(STORVSC); - return 0; -} - -int StorVscOnHostReset(struct hv_device *Device) -{ - struct storvsc_device *storDevice; - struct storvsc_request_extension *request; - struct vstor_packet *vstorPacket; - int ret; - - DPRINT_ENTER(STORVSC); - - DPRINT_INFO(STORVSC, "resetting host adapter..."); - - storDevice = GetStorDevice(Device); - if (!storDevice) { - DPRINT_ERR(STORVSC, "unable to get stor device..." - "device being destroyed?"); - DPRINT_EXIT(STORVSC); - return -1; - } - - request = &storDevice->ResetRequest; - vstorPacket = &request->VStorPacket; - - request->WaitEvent = osd_WaitEventCreate(); - if (!request->WaitEvent) { - ret = -ENOMEM; - goto Cleanup; - } - - vstorPacket->Operation = VStorOperationResetBus; - vstorPacket->Flags = REQUEST_COMPLETION_FLAG; - vstorPacket->VmSrb.PathId = storDevice->PathId; - - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - vstorPacket, - sizeof(struct vstor_packet), - (unsigned long)&storDevice->ResetRequest, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - if (ret != 0) { - DPRINT_ERR(STORVSC, "Unable to send reset packet %p ret %d", - vstorPacket, ret); - goto Cleanup; - } - - /* FIXME: Add a timeout */ - osd_WaitEventWait(request->WaitEvent); - - kfree(request->WaitEvent); - DPRINT_INFO(STORVSC, "host adapter reset completed"); - - /* - * At this point, all outstanding requests in the adapter - * should have been flushed out and return to us - */ - -Cleanup: - PutStorDevice(Device); - DPRINT_EXIT(STORVSC); - return ret; -} - -/* - * StorVscOnIORequest - Callback to initiate an I/O request - */ -static int StorVscOnIORequest(struct hv_device *Device, - struct hv_storvsc_request *Request) -{ - struct storvsc_device *storDevice; - struct storvsc_request_extension *requestExtension; - struct vstor_packet *vstorPacket; - int ret = 0; - - DPRINT_ENTER(STORVSC); - - requestExtension = - (struct storvsc_request_extension *)Request->Extension; - vstorPacket = &requestExtension->VStorPacket; - storDevice = GetStorDevice(Device); - - DPRINT_DBG(STORVSC, "enter - Device %p, DeviceExt %p, Request %p, " - "Extension %p", Device, storDevice, Request, - requestExtension); - - DPRINT_DBG(STORVSC, "req %p len %d bus %d, target %d, lun %d cdblen %d", - Request, Request->DataBuffer.Length, Request->Bus, - Request->TargetId, Request->LunId, Request->CdbLen); - - if (!storDevice) { - DPRINT_ERR(STORVSC, "unable to get stor device..." - "device being destroyed?"); - DPRINT_EXIT(STORVSC); - return -2; - } - - /* print_hex_dump_bytes("", DUMP_PREFIX_NONE, Request->Cdb, - * Request->CdbLen); */ - - requestExtension->Request = Request; - requestExtension->Device = Device; - - memset(vstorPacket, 0 , sizeof(struct vstor_packet)); - - vstorPacket->Flags |= REQUEST_COMPLETION_FLAG; - - vstorPacket->VmSrb.Length = sizeof(struct vmscsi_request); - - vstorPacket->VmSrb.PortNumber = Request->Host; - vstorPacket->VmSrb.PathId = Request->Bus; - vstorPacket->VmSrb.TargetId = Request->TargetId; - vstorPacket->VmSrb.Lun = Request->LunId; - - vstorPacket->VmSrb.SenseInfoLength = SENSE_BUFFER_SIZE; - - /* Copy over the scsi command descriptor block */ - vstorPacket->VmSrb.CdbLength = Request->CdbLen; - memcpy(&vstorPacket->VmSrb.Cdb, Request->Cdb, Request->CdbLen); - - vstorPacket->VmSrb.DataIn = Request->Type; - vstorPacket->VmSrb.DataTransferLength = Request->DataBuffer.Length; - - vstorPacket->Operation = VStorOperationExecuteSRB; - - DPRINT_DBG(STORVSC, "srb - len %d port %d, path %d, target %d, " - "lun %d senselen %d cdblen %d", - vstorPacket->VmSrb.Length, - vstorPacket->VmSrb.PortNumber, - vstorPacket->VmSrb.PathId, - vstorPacket->VmSrb.TargetId, - vstorPacket->VmSrb.Lun, - vstorPacket->VmSrb.SenseInfoLength, - vstorPacket->VmSrb.CdbLength); - - if (requestExtension->Request->DataBuffer.Length) { - ret = Device->Driver->VmbusChannelInterface. - SendPacketMultiPageBuffer(Device, - &requestExtension->Request->DataBuffer, - vstorPacket, - sizeof(struct vstor_packet), - (unsigned long)requestExtension); - } else { - ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, - vstorPacket, - sizeof(struct vstor_packet), - (unsigned long)requestExtension, - VmbusPacketTypeDataInBand, - VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); - } - - if (ret != 0) { - DPRINT_DBG(STORVSC, "Unable to send packet %p ret %d", - vstorPacket, ret); - } - - atomic_inc(&storDevice->NumOutstandingRequests); - - PutStorDevice(Device); - - DPRINT_EXIT(STORVSC); - return ret; -} - -/* - * StorVscOnCleanup - Perform any cleanup when the driver is removed - */ -static void StorVscOnCleanup(struct hv_driver *Driver) -{ - DPRINT_ENTER(STORVSC); - DPRINT_EXIT(STORVSC); -} - -/* - * StorVscInitialize - Main entry point - */ -int StorVscInitialize(struct hv_driver *Driver) -{ - struct storvsc_driver_object *storDriver; - - DPRINT_ENTER(STORVSC); - - storDriver = (struct storvsc_driver_object *)Driver; - - DPRINT_DBG(STORVSC, "sizeof(STORVSC_REQUEST)=%zd " - "sizeof(struct storvsc_request_extension)=%zd " - "sizeof(struct vstor_packet)=%zd, " - "sizeof(struct vmscsi_request)=%zd", - sizeof(struct hv_storvsc_request), - sizeof(struct storvsc_request_extension), - sizeof(struct vstor_packet), - sizeof(struct vmscsi_request)); - - /* Make sure we are at least 2 pages since 1 page is used for control */ - /* ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); */ - - Driver->name = gDriverName; - memcpy(&Driver->deviceType, &gStorVscDeviceType, - sizeof(struct hv_guid)); - - storDriver->RequestExtSize = sizeof(struct storvsc_request_extension); - - /* - * Divide the ring buffer data size (which is 1 page less - * than the ring buffer size since that page is reserved for - * the ring buffer indices) by the max request size (which is - * VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + struct vstor_packet + u64) - */ - storDriver->MaxOutstandingRequestsPerChannel = - ((storDriver->RingBufferSize - PAGE_SIZE) / - ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + - sizeof(struct vstor_packet) + sizeof(u64), - sizeof(u64))); - - DPRINT_INFO(STORVSC, "max io %u, currently %u\n", - storDriver->MaxOutstandingRequestsPerChannel, - STORVSC_MAX_IO_REQUESTS); - - /* Setup the dispatch table */ - storDriver->Base.OnDeviceAdd = StorVscOnDeviceAdd; - storDriver->Base.OnDeviceRemove = StorVscOnDeviceRemove; - storDriver->Base.OnCleanup = StorVscOnCleanup; - - storDriver->OnIORequest = StorVscOnIORequest; - - DPRINT_EXIT(STORVSC); - - return 0; -} diff --git a/drivers/staging/hv/blkvsc.c b/drivers/staging/hv/blkvsc.c index b2f6005..0daebc4 100644 --- a/drivers/staging/hv/blkvsc.c +++ b/drivers/staging/hv/blkvsc.c @@ -23,7 +23,7 @@ #include #include #include "osd.h" -#include "StorVsc.c" +#include "storvsc.c" static const char *gBlkDriverName = "blkvsc"; diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c new file mode 100644 index 0000000..e73130e --- /dev/null +++ b/drivers/staging/hv/storvsc.c @@ -0,0 +1,858 @@ +/* + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + */ +#include +#include +#include +#include +#include +#include "osd.h" +#include "logging.h" +#include "StorVscApi.h" +#include "VmbusPacketFormat.h" +#include "vstorage.h" + + +struct storvsc_request_extension { + /* LIST_ENTRY ListEntry; */ + + struct hv_storvsc_request *Request; + struct hv_device *Device; + + /* Synchronize the request/response if needed */ + struct osd_waitevent *WaitEvent; + + struct vstor_packet VStorPacket; +}; + +/* A storvsc device is a device object that contains a vmbus channel */ +struct storvsc_device { + struct hv_device *Device; + + /* 0 indicates the device is being destroyed */ + atomic_t RefCount; + + atomic_t NumOutstandingRequests; + + /* + * Each unique Port/Path/Target represents 1 channel ie scsi + * controller. In reality, the pathid, targetid is always 0 + * and the port is set by us + */ + unsigned int PortNumber; + unsigned char PathId; + unsigned char TargetId; + + /* LIST_ENTRY OutstandingRequestList; */ + /* HANDLE OutstandingRequestLock; */ + + /* Used for vsc/vsp channel reset process */ + struct storvsc_request_extension InitRequest; + struct storvsc_request_extension ResetRequest; +}; + + +static const char *gDriverName = "storvsc"; + +/* {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f} */ +static const struct hv_guid gStorVscDeviceType = { + .data = { + 0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d, + 0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f + } +}; + + +static inline struct storvsc_device *AllocStorDevice(struct hv_device *Device) +{ + struct storvsc_device *storDevice; + + storDevice = kzalloc(sizeof(struct storvsc_device), GFP_KERNEL); + if (!storDevice) + return NULL; + + /* Set to 2 to allow both inbound and outbound traffics */ + /* (ie GetStorDevice() and MustGetStorDevice()) to proceed. */ + atomic_cmpxchg(&storDevice->RefCount, 0, 2); + + storDevice->Device = Device; + Device->Extension = storDevice; + + return storDevice; +} + +static inline void FreeStorDevice(struct storvsc_device *Device) +{ + /* ASSERT(atomic_read(&Device->RefCount) == 0); */ + kfree(Device); +} + +/* Get the stordevice object iff exists and its refcount > 1 */ +static inline struct storvsc_device *GetStorDevice(struct hv_device *Device) +{ + struct storvsc_device *storDevice; + + storDevice = (struct storvsc_device *)Device->Extension; + if (storDevice && atomic_read(&storDevice->RefCount) > 1) + atomic_inc(&storDevice->RefCount); + else + storDevice = NULL; + + return storDevice; +} + +/* Get the stordevice object iff exists and its refcount > 0 */ +static inline struct storvsc_device *MustGetStorDevice(struct hv_device *Device) +{ + struct storvsc_device *storDevice; + + storDevice = (struct storvsc_device *)Device->Extension; + if (storDevice && atomic_read(&storDevice->RefCount)) + atomic_inc(&storDevice->RefCount); + else + storDevice = NULL; + + return storDevice; +} + +static inline void PutStorDevice(struct hv_device *Device) +{ + struct storvsc_device *storDevice; + + storDevice = (struct storvsc_device *)Device->Extension; + /* ASSERT(storDevice); */ + + atomic_dec(&storDevice->RefCount); + /* ASSERT(atomic_read(&storDevice->RefCount)); */ +} + +/* Drop ref count to 1 to effectively disable GetStorDevice() */ +static inline struct storvsc_device *ReleaseStorDevice(struct hv_device *Device) +{ + struct storvsc_device *storDevice; + + storDevice = (struct storvsc_device *)Device->Extension; + /* ASSERT(storDevice); */ + + /* Busy wait until the ref drop to 2, then set it to 1 */ + while (atomic_cmpxchg(&storDevice->RefCount, 2, 1) != 2) + udelay(100); + + return storDevice; +} + +/* Drop ref count to 0. No one can use StorDevice object. */ +static inline struct storvsc_device *FinalReleaseStorDevice( + struct hv_device *Device) +{ + struct storvsc_device *storDevice; + + storDevice = (struct storvsc_device *)Device->Extension; + /* ASSERT(storDevice); */ + + /* Busy wait until the ref drop to 1, then set it to 0 */ + while (atomic_cmpxchg(&storDevice->RefCount, 1, 0) != 1) + udelay(100); + + Device->Extension = NULL; + return storDevice; +} + +static int StorVscChannelInit(struct hv_device *Device) +{ + struct storvsc_device *storDevice; + struct storvsc_request_extension *request; + struct vstor_packet *vstorPacket; + int ret; + + storDevice = GetStorDevice(Device); + if (!storDevice) { + DPRINT_ERR(STORVSC, "unable to get stor device..." + "device being destroyed?"); + DPRINT_EXIT(STORVSC); + return -1; + } + + request = &storDevice->InitRequest; + vstorPacket = &request->VStorPacket; + + /* + * Now, initiate the vsc/vsp initialization protocol on the open + * channel + */ + memset(request, 0, sizeof(struct storvsc_request_extension)); + request->WaitEvent = osd_WaitEventCreate(); + if (!request->WaitEvent) { + ret = -ENOMEM; + goto nomem; + } + + vstorPacket->Operation = VStorOperationBeginInitialization; + vstorPacket->Flags = REQUEST_COMPLETION_FLAG; + + /*SpinlockAcquire(gDriverExt.packetListLock); + INSERT_TAIL_LIST(&gDriverExt.packetList, &packet->listEntry.entry); + SpinlockRelease(gDriverExt.packetListLock);*/ + + DPRINT_INFO(STORVSC, "BEGIN_INITIALIZATION_OPERATION..."); + + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + vstorPacket, + sizeof(struct vstor_packet), + (unsigned long)request, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + if (ret != 0) { + DPRINT_ERR(STORVSC, + "unable to send BEGIN_INITIALIZATION_OPERATION"); + goto Cleanup; + } + + osd_WaitEventWait(request->WaitEvent); + + if (vstorPacket->Operation != VStorOperationCompleteIo || + vstorPacket->Status != 0) { + DPRINT_ERR(STORVSC, "BEGIN_INITIALIZATION_OPERATION failed " + "(op %d status 0x%x)", + vstorPacket->Operation, vstorPacket->Status); + goto Cleanup; + } + + DPRINT_INFO(STORVSC, "QUERY_PROTOCOL_VERSION_OPERATION..."); + + /* reuse the packet for version range supported */ + memset(vstorPacket, 0, sizeof(struct vstor_packet)); + vstorPacket->Operation = VStorOperationQueryProtocolVersion; + vstorPacket->Flags = REQUEST_COMPLETION_FLAG; + + vstorPacket->Version.MajorMinor = VMSTOR_PROTOCOL_VERSION_CURRENT; + FILL_VMSTOR_REVISION(vstorPacket->Version.Revision); + + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + vstorPacket, + sizeof(struct vstor_packet), + (unsigned long)request, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + if (ret != 0) { + DPRINT_ERR(STORVSC, + "unable to send BEGIN_INITIALIZATION_OPERATION"); + goto Cleanup; + } + + osd_WaitEventWait(request->WaitEvent); + + /* TODO: Check returned version */ + if (vstorPacket->Operation != VStorOperationCompleteIo || + vstorPacket->Status != 0) { + DPRINT_ERR(STORVSC, "QUERY_PROTOCOL_VERSION_OPERATION failed " + "(op %d status 0x%x)", + vstorPacket->Operation, vstorPacket->Status); + goto Cleanup; + } + + /* Query channel properties */ + DPRINT_INFO(STORVSC, "QUERY_PROPERTIES_OPERATION..."); + + memset(vstorPacket, 0, sizeof(struct vstor_packet)); + vstorPacket->Operation = VStorOperationQueryProperties; + vstorPacket->Flags = REQUEST_COMPLETION_FLAG; + vstorPacket->StorageChannelProperties.PortNumber = + storDevice->PortNumber; + + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + vstorPacket, + sizeof(struct vstor_packet), + (unsigned long)request, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + + if (ret != 0) { + DPRINT_ERR(STORVSC, + "unable to send QUERY_PROPERTIES_OPERATION"); + goto Cleanup; + } + + osd_WaitEventWait(request->WaitEvent); + + /* TODO: Check returned version */ + if (vstorPacket->Operation != VStorOperationCompleteIo || + vstorPacket->Status != 0) { + DPRINT_ERR(STORVSC, "QUERY_PROPERTIES_OPERATION failed " + "(op %d status 0x%x)", + vstorPacket->Operation, vstorPacket->Status); + goto Cleanup; + } + + storDevice->PathId = vstorPacket->StorageChannelProperties.PathId; + storDevice->TargetId = vstorPacket->StorageChannelProperties.TargetId; + + DPRINT_DBG(STORVSC, "channel flag 0x%x, max xfer len 0x%x", + vstorPacket->StorageChannelProperties.Flags, + vstorPacket->StorageChannelProperties.MaxTransferBytes); + + DPRINT_INFO(STORVSC, "END_INITIALIZATION_OPERATION..."); + + memset(vstorPacket, 0, sizeof(struct vstor_packet)); + vstorPacket->Operation = VStorOperationEndInitialization; + vstorPacket->Flags = REQUEST_COMPLETION_FLAG; + + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + vstorPacket, + sizeof(struct vstor_packet), + (unsigned long)request, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + + if (ret != 0) { + DPRINT_ERR(STORVSC, + "unable to send END_INITIALIZATION_OPERATION"); + goto Cleanup; + } + + osd_WaitEventWait(request->WaitEvent); + + if (vstorPacket->Operation != VStorOperationCompleteIo || + vstorPacket->Status != 0) { + DPRINT_ERR(STORVSC, "END_INITIALIZATION_OPERATION failed " + "(op %d status 0x%x)", + vstorPacket->Operation, vstorPacket->Status); + goto Cleanup; + } + + DPRINT_INFO(STORVSC, "**** storage channel up and running!! ****"); + +Cleanup: + kfree(request->WaitEvent); + request->WaitEvent = NULL; +nomem: + PutStorDevice(Device); + + DPRINT_EXIT(STORVSC); + return ret; +} + +static void StorVscOnIOCompletion(struct hv_device *Device, + struct vstor_packet *VStorPacket, + struct storvsc_request_extension *RequestExt) +{ + struct hv_storvsc_request *request; + struct storvsc_device *storDevice; + + DPRINT_ENTER(STORVSC); + + storDevice = MustGetStorDevice(Device); + if (!storDevice) { + DPRINT_ERR(STORVSC, "unable to get stor device..." + "device being destroyed?"); + DPRINT_EXIT(STORVSC); + return; + } + + DPRINT_DBG(STORVSC, "IO_COMPLETE_OPERATION - request extension %p " + "completed bytes xfer %u", RequestExt, + VStorPacket->VmSrb.DataTransferLength); + + /* ASSERT(RequestExt != NULL); */ + /* ASSERT(RequestExt->Request != NULL); */ + + request = RequestExt->Request; + + /* ASSERT(request->OnIOCompletion != NULL); */ + + /* Copy over the status...etc */ + request->Status = VStorPacket->VmSrb.ScsiStatus; + + if (request->Status != 0 || VStorPacket->VmSrb.SrbStatus != 1) { + DPRINT_WARN(STORVSC, + "cmd 0x%x scsi status 0x%x srb status 0x%x\n", + request->Cdb[0], VStorPacket->VmSrb.ScsiStatus, + VStorPacket->VmSrb.SrbStatus); + } + + if ((request->Status & 0xFF) == 0x02) { + /* CHECK_CONDITION */ + if (VStorPacket->VmSrb.SrbStatus & 0x80) { + /* autosense data available */ + DPRINT_WARN(STORVSC, "storvsc pkt %p autosense data " + "valid - len %d\n", RequestExt, + VStorPacket->VmSrb.SenseInfoLength); + + /* ASSERT(VStorPacket->VmSrb.SenseInfoLength <= */ + /* request->SenseBufferSize); */ + memcpy(request->SenseBuffer, + VStorPacket->VmSrb.SenseData, + VStorPacket->VmSrb.SenseInfoLength); + + request->SenseBufferSize = + VStorPacket->VmSrb.SenseInfoLength; + } + } + + /* TODO: */ + request->BytesXfer = VStorPacket->VmSrb.DataTransferLength; + + request->OnIOCompletion(request); + + atomic_dec(&storDevice->NumOutstandingRequests); + + PutStorDevice(Device); + + DPRINT_EXIT(STORVSC); +} + +static void StorVscOnReceive(struct hv_device *Device, + struct vstor_packet *VStorPacket, + struct storvsc_request_extension *RequestExt) +{ + switch (VStorPacket->Operation) { + case VStorOperationCompleteIo: + DPRINT_DBG(STORVSC, "IO_COMPLETE_OPERATION"); + StorVscOnIOCompletion(Device, VStorPacket, RequestExt); + break; + case VStorOperationRemoveDevice: + DPRINT_INFO(STORVSC, "REMOVE_DEVICE_OPERATION"); + /* TODO: */ + break; + + default: + DPRINT_INFO(STORVSC, "Unknown operation received - %d", + VStorPacket->Operation); + break; + } +} + +static void StorVscOnChannelCallback(void *context) +{ + struct hv_device *device = (struct hv_device *)context; + struct storvsc_device *storDevice; + u32 bytesRecvd; + u64 requestId; + unsigned char packet[ALIGN_UP(sizeof(struct vstor_packet), 8)]; + struct storvsc_request_extension *request; + int ret; + + DPRINT_ENTER(STORVSC); + + /* ASSERT(device); */ + + storDevice = MustGetStorDevice(device); + if (!storDevice) { + DPRINT_ERR(STORVSC, "unable to get stor device..." + "device being destroyed?"); + DPRINT_EXIT(STORVSC); + return; + } + + do { + ret = device->Driver->VmbusChannelInterface.RecvPacket(device, + packet, + ALIGN_UP(sizeof(struct vstor_packet), 8), + &bytesRecvd, &requestId); + if (ret == 0 && bytesRecvd > 0) { + DPRINT_DBG(STORVSC, "receive %d bytes - tid %llx", + bytesRecvd, requestId); + + /* ASSERT(bytesRecvd == sizeof(struct vstor_packet)); */ + + request = (struct storvsc_request_extension *) + (unsigned long)requestId; + /* ASSERT(request);c */ + + /* if (vstorPacket.Flags & SYNTHETIC_FLAG) */ + if ((request == &storDevice->InitRequest) || + (request == &storDevice->ResetRequest)) { + /* DPRINT_INFO(STORVSC, + * "reset completion - operation " + * "%u status %u", + * vstorPacket.Operation, + * vstorPacket.Status); */ + + memcpy(&request->VStorPacket, packet, + sizeof(struct vstor_packet)); + + osd_WaitEventSet(request->WaitEvent); + } else { + StorVscOnReceive(device, + (struct vstor_packet *)packet, + request); + } + } else { + /* DPRINT_DBG(STORVSC, "nothing else to read..."); */ + break; + } + } while (1); + + PutStorDevice(device); + + DPRINT_EXIT(STORVSC); + return; +} + +static int StorVscConnectToVsp(struct hv_device *Device) +{ + struct vmstorage_channel_properties props; + struct storvsc_driver_object *storDriver; + int ret; + + storDriver = (struct storvsc_driver_object *)Device->Driver; + memset(&props, 0, sizeof(struct vmstorage_channel_properties)); + + /* Open the channel */ + ret = Device->Driver->VmbusChannelInterface.Open(Device, + storDriver->RingBufferSize, + storDriver->RingBufferSize, + (void *)&props, + sizeof(struct vmstorage_channel_properties), + StorVscOnChannelCallback, + Device); + + DPRINT_DBG(STORVSC, "storage props: path id %d, tgt id %d, max xfer %d", + props.PathId, props.TargetId, props.MaxTransferBytes); + + if (ret != 0) { + DPRINT_ERR(STORVSC, "unable to open channel: %d", ret); + return -1; + } + + ret = StorVscChannelInit(Device); + + return ret; +} + +/* + * StorVscOnDeviceAdd - Callback when the device belonging to this driver is added + */ +static int StorVscOnDeviceAdd(struct hv_device *Device, void *AdditionalInfo) +{ + struct storvsc_device *storDevice; + /* struct vmstorage_channel_properties *props; */ + struct storvsc_device_info *deviceInfo; + int ret = 0; + + DPRINT_ENTER(STORVSC); + + deviceInfo = (struct storvsc_device_info *)AdditionalInfo; + storDevice = AllocStorDevice(Device); + if (!storDevice) { + ret = -1; + goto Cleanup; + } + + /* Save the channel properties to our storvsc channel */ + /* props = (struct vmstorage_channel_properties *) + * channel->offerMsg.Offer.u.Standard.UserDefined; */ + + /* FIXME: */ + /* + * If we support more than 1 scsi channel, we need to set the + * port number here to the scsi channel but how do we get the + * scsi channel prior to the bus scan + */ + + /* storChannel->PortNumber = 0; + storChannel->PathId = props->PathId; + storChannel->TargetId = props->TargetId; */ + + storDevice->PortNumber = deviceInfo->PortNumber; + /* Send it back up */ + ret = StorVscConnectToVsp(Device); + + /* deviceInfo->PortNumber = storDevice->PortNumber; */ + deviceInfo->PathId = storDevice->PathId; + deviceInfo->TargetId = storDevice->TargetId; + + DPRINT_DBG(STORVSC, "assigned port %u, path %u target %u\n", + storDevice->PortNumber, storDevice->PathId, + storDevice->TargetId); + +Cleanup: + DPRINT_EXIT(STORVSC); + + return ret; +} + +/* + * StorVscOnDeviceRemove - Callback when the our device is being removed + */ +static int StorVscOnDeviceRemove(struct hv_device *Device) +{ + struct storvsc_device *storDevice; + + DPRINT_ENTER(STORVSC); + + DPRINT_INFO(STORVSC, "disabling storage device (%p)...", + Device->Extension); + + storDevice = ReleaseStorDevice(Device); + + /* + * At this point, all outbound traffic should be disable. We + * only allow inbound traffic (responses) to proceed so that + * outstanding requests can be completed. + */ + while (atomic_read(&storDevice->NumOutstandingRequests)) { + DPRINT_INFO(STORVSC, "waiting for %d requests to complete...", + atomic_read(&storDevice->NumOutstandingRequests)); + udelay(100); + } + + DPRINT_INFO(STORVSC, "removing storage device (%p)...", + Device->Extension); + + storDevice = FinalReleaseStorDevice(Device); + + DPRINT_INFO(STORVSC, "storage device (%p) safe to remove", storDevice); + + /* Close the channel */ + Device->Driver->VmbusChannelInterface.Close(Device); + + FreeStorDevice(storDevice); + + DPRINT_EXIT(STORVSC); + return 0; +} + +int StorVscOnHostReset(struct hv_device *Device) +{ + struct storvsc_device *storDevice; + struct storvsc_request_extension *request; + struct vstor_packet *vstorPacket; + int ret; + + DPRINT_ENTER(STORVSC); + + DPRINT_INFO(STORVSC, "resetting host adapter..."); + + storDevice = GetStorDevice(Device); + if (!storDevice) { + DPRINT_ERR(STORVSC, "unable to get stor device..." + "device being destroyed?"); + DPRINT_EXIT(STORVSC); + return -1; + } + + request = &storDevice->ResetRequest; + vstorPacket = &request->VStorPacket; + + request->WaitEvent = osd_WaitEventCreate(); + if (!request->WaitEvent) { + ret = -ENOMEM; + goto Cleanup; + } + + vstorPacket->Operation = VStorOperationResetBus; + vstorPacket->Flags = REQUEST_COMPLETION_FLAG; + vstorPacket->VmSrb.PathId = storDevice->PathId; + + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + vstorPacket, + sizeof(struct vstor_packet), + (unsigned long)&storDevice->ResetRequest, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + if (ret != 0) { + DPRINT_ERR(STORVSC, "Unable to send reset packet %p ret %d", + vstorPacket, ret); + goto Cleanup; + } + + /* FIXME: Add a timeout */ + osd_WaitEventWait(request->WaitEvent); + + kfree(request->WaitEvent); + DPRINT_INFO(STORVSC, "host adapter reset completed"); + + /* + * At this point, all outstanding requests in the adapter + * should have been flushed out and return to us + */ + +Cleanup: + PutStorDevice(Device); + DPRINT_EXIT(STORVSC); + return ret; +} + +/* + * StorVscOnIORequest - Callback to initiate an I/O request + */ +static int StorVscOnIORequest(struct hv_device *Device, + struct hv_storvsc_request *Request) +{ + struct storvsc_device *storDevice; + struct storvsc_request_extension *requestExtension; + struct vstor_packet *vstorPacket; + int ret = 0; + + DPRINT_ENTER(STORVSC); + + requestExtension = + (struct storvsc_request_extension *)Request->Extension; + vstorPacket = &requestExtension->VStorPacket; + storDevice = GetStorDevice(Device); + + DPRINT_DBG(STORVSC, "enter - Device %p, DeviceExt %p, Request %p, " + "Extension %p", Device, storDevice, Request, + requestExtension); + + DPRINT_DBG(STORVSC, "req %p len %d bus %d, target %d, lun %d cdblen %d", + Request, Request->DataBuffer.Length, Request->Bus, + Request->TargetId, Request->LunId, Request->CdbLen); + + if (!storDevice) { + DPRINT_ERR(STORVSC, "unable to get stor device..." + "device being destroyed?"); + DPRINT_EXIT(STORVSC); + return -2; + } + + /* print_hex_dump_bytes("", DUMP_PREFIX_NONE, Request->Cdb, + * Request->CdbLen); */ + + requestExtension->Request = Request; + requestExtension->Device = Device; + + memset(vstorPacket, 0 , sizeof(struct vstor_packet)); + + vstorPacket->Flags |= REQUEST_COMPLETION_FLAG; + + vstorPacket->VmSrb.Length = sizeof(struct vmscsi_request); + + vstorPacket->VmSrb.PortNumber = Request->Host; + vstorPacket->VmSrb.PathId = Request->Bus; + vstorPacket->VmSrb.TargetId = Request->TargetId; + vstorPacket->VmSrb.Lun = Request->LunId; + + vstorPacket->VmSrb.SenseInfoLength = SENSE_BUFFER_SIZE; + + /* Copy over the scsi command descriptor block */ + vstorPacket->VmSrb.CdbLength = Request->CdbLen; + memcpy(&vstorPacket->VmSrb.Cdb, Request->Cdb, Request->CdbLen); + + vstorPacket->VmSrb.DataIn = Request->Type; + vstorPacket->VmSrb.DataTransferLength = Request->DataBuffer.Length; + + vstorPacket->Operation = VStorOperationExecuteSRB; + + DPRINT_DBG(STORVSC, "srb - len %d port %d, path %d, target %d, " + "lun %d senselen %d cdblen %d", + vstorPacket->VmSrb.Length, + vstorPacket->VmSrb.PortNumber, + vstorPacket->VmSrb.PathId, + vstorPacket->VmSrb.TargetId, + vstorPacket->VmSrb.Lun, + vstorPacket->VmSrb.SenseInfoLength, + vstorPacket->VmSrb.CdbLength); + + if (requestExtension->Request->DataBuffer.Length) { + ret = Device->Driver->VmbusChannelInterface. + SendPacketMultiPageBuffer(Device, + &requestExtension->Request->DataBuffer, + vstorPacket, + sizeof(struct vstor_packet), + (unsigned long)requestExtension); + } else { + ret = Device->Driver->VmbusChannelInterface.SendPacket(Device, + vstorPacket, + sizeof(struct vstor_packet), + (unsigned long)requestExtension, + VmbusPacketTypeDataInBand, + VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); + } + + if (ret != 0) { + DPRINT_DBG(STORVSC, "Unable to send packet %p ret %d", + vstorPacket, ret); + } + + atomic_inc(&storDevice->NumOutstandingRequests); + + PutStorDevice(Device); + + DPRINT_EXIT(STORVSC); + return ret; +} + +/* + * StorVscOnCleanup - Perform any cleanup when the driver is removed + */ +static void StorVscOnCleanup(struct hv_driver *Driver) +{ + DPRINT_ENTER(STORVSC); + DPRINT_EXIT(STORVSC); +} + +/* + * StorVscInitialize - Main entry point + */ +int StorVscInitialize(struct hv_driver *Driver) +{ + struct storvsc_driver_object *storDriver; + + DPRINT_ENTER(STORVSC); + + storDriver = (struct storvsc_driver_object *)Driver; + + DPRINT_DBG(STORVSC, "sizeof(STORVSC_REQUEST)=%zd " + "sizeof(struct storvsc_request_extension)=%zd " + "sizeof(struct vstor_packet)=%zd, " + "sizeof(struct vmscsi_request)=%zd", + sizeof(struct hv_storvsc_request), + sizeof(struct storvsc_request_extension), + sizeof(struct vstor_packet), + sizeof(struct vmscsi_request)); + + /* Make sure we are at least 2 pages since 1 page is used for control */ + /* ASSERT(storDriver->RingBufferSize >= (PAGE_SIZE << 1)); */ + + Driver->name = gDriverName; + memcpy(&Driver->deviceType, &gStorVscDeviceType, + sizeof(struct hv_guid)); + + storDriver->RequestExtSize = sizeof(struct storvsc_request_extension); + + /* + * Divide the ring buffer data size (which is 1 page less + * than the ring buffer size since that page is reserved for + * the ring buffer indices) by the max request size (which is + * VMBUS_CHANNEL_PACKET_MULITPAGE_BUFFER + struct vstor_packet + u64) + */ + storDriver->MaxOutstandingRequestsPerChannel = + ((storDriver->RingBufferSize - PAGE_SIZE) / + ALIGN_UP(MAX_MULTIPAGE_BUFFER_PACKET + + sizeof(struct vstor_packet) + sizeof(u64), + sizeof(u64))); + + DPRINT_INFO(STORVSC, "max io %u, currently %u\n", + storDriver->MaxOutstandingRequestsPerChannel, + STORVSC_MAX_IO_REQUESTS); + + /* Setup the dispatch table */ + storDriver->Base.OnDeviceAdd = StorVscOnDeviceAdd; + storDriver->Base.OnDeviceRemove = StorVscOnDeviceRemove; + storDriver->Base.OnCleanup = StorVscOnCleanup; + + storDriver->OnIORequest = StorVscOnIORequest; + + DPRINT_EXIT(STORVSC); + + return 0; +} -- cgit v0.10.2 From 043efcc31e78f4e61b2b8bc321bc9a3c498bf4d1 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:32:08 -0700 Subject: Staging: hv: rename RndisFilter.c and .h to rndis_filter.c and .h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index cc75185..685a320 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -9,4 +9,4 @@ hv_vmbus-objs := vmbus_drv.o osd.o \ ChannelMgmt.o ChannelInterface.o ring_buffer.o hv_storvsc-objs := storvsc_drv.o storvsc.o hv_blkvsc-objs := blkvsc_drv.o blkvsc.o -hv_netvsc-objs := netvsc_drv.o netvsc.o RndisFilter.o +hv_netvsc-objs := netvsc_drv.o netvsc.o rndis_filter.o diff --git a/drivers/staging/hv/RndisFilter.c b/drivers/staging/hv/RndisFilter.c deleted file mode 100644 index 597c972..0000000 --- a/drivers/staging/hv/RndisFilter.c +++ /dev/null @@ -1,997 +0,0 @@ -/* - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - */ -#include -#include -#include -#include -#include - -#include "osd.h" -#include "logging.h" -#include "NetVscApi.h" -#include "RndisFilter.h" - -/* Data types */ -struct rndis_filter_driver_object { - /* The original driver */ - struct netvsc_driver InnerDriver; -}; - -enum rndis_device_state { - RNDIS_DEV_UNINITIALIZED = 0, - RNDIS_DEV_INITIALIZING, - RNDIS_DEV_INITIALIZED, - RNDIS_DEV_DATAINITIALIZED, -}; - -struct rndis_device { - struct netvsc_device *NetDevice; - - enum rndis_device_state State; - u32 LinkStatus; - atomic_t NewRequestId; - - spinlock_t request_lock; - struct list_head RequestList; - - unsigned char HwMacAddr[ETH_ALEN]; -}; - -struct rndis_request { - struct list_head ListEntry; - struct osd_waitevent *WaitEvent; - - /* - * FIXME: We assumed a fixed size response here. If we do ever need to - * handle a bigger response, we can either define a max response - * message or add a response buffer variable above this field - */ - struct rndis_message ResponseMessage; - - /* Simplify allocation by having a netvsc packet inline */ - struct hv_netvsc_packet Packet; - struct hv_page_buffer Buffer; - /* FIXME: We assumed a fixed size request here. */ - struct rndis_message RequestMessage; -}; - - -struct rndis_filter_packet { - void *CompletionContext; - void (*OnCompletion)(void *context); - struct rndis_message Message; -}; - - -static int RndisFilterOnDeviceAdd(struct hv_device *Device, - void *AdditionalInfo); - -static int RndisFilterOnDeviceRemove(struct hv_device *Device); - -static void RndisFilterOnCleanup(struct hv_driver *Driver); - -static int RndisFilterOnSend(struct hv_device *Device, - struct hv_netvsc_packet *Packet); - -static void RndisFilterOnSendCompletion(void *Context); - -static void RndisFilterOnSendRequestCompletion(void *Context); - - -/* The one and only */ -static struct rndis_filter_driver_object gRndisFilter; - -static struct rndis_device *GetRndisDevice(void) -{ - struct rndis_device *device; - - device = kzalloc(sizeof(struct rndis_device), GFP_KERNEL); - if (!device) - return NULL; - - spin_lock_init(&device->request_lock); - - INIT_LIST_HEAD(&device->RequestList); - - device->State = RNDIS_DEV_UNINITIALIZED; - - return device; -} - -static struct rndis_request *GetRndisRequest(struct rndis_device *Device, - u32 MessageType, - u32 MessageLength) -{ - struct rndis_request *request; - struct rndis_message *rndisMessage; - struct rndis_set_request *set; - unsigned long flags; - - request = kzalloc(sizeof(struct rndis_request), GFP_KERNEL); - if (!request) - return NULL; - - request->WaitEvent = osd_WaitEventCreate(); - if (!request->WaitEvent) { - kfree(request); - return NULL; - } - - rndisMessage = &request->RequestMessage; - rndisMessage->NdisMessageType = MessageType; - rndisMessage->MessageLength = MessageLength; - - /* - * Set the request id. This field is always after the rndis header for - * request/response packet types so we just used the SetRequest as a - * template - */ - set = &rndisMessage->Message.SetRequest; - set->RequestId = atomic_inc_return(&Device->NewRequestId); - - /* Add to the request list */ - spin_lock_irqsave(&Device->request_lock, flags); - list_add_tail(&request->ListEntry, &Device->RequestList); - spin_unlock_irqrestore(&Device->request_lock, flags); - - return request; -} - -static void PutRndisRequest(struct rndis_device *Device, - struct rndis_request *Request) -{ - unsigned long flags; - - spin_lock_irqsave(&Device->request_lock, flags); - list_del(&Request->ListEntry); - spin_unlock_irqrestore(&Device->request_lock, flags); - - kfree(Request->WaitEvent); - kfree(Request); -} - -static void DumpRndisMessage(struct rndis_message *RndisMessage) -{ - switch (RndisMessage->NdisMessageType) { - case REMOTE_NDIS_PACKET_MSG: - DPRINT_DBG(NETVSC, "REMOTE_NDIS_PACKET_MSG (len %u, " - "data offset %u data len %u, # oob %u, " - "oob offset %u, oob len %u, pkt offset %u, " - "pkt len %u", - RndisMessage->MessageLength, - RndisMessage->Message.Packet.DataOffset, - RndisMessage->Message.Packet.DataLength, - RndisMessage->Message.Packet.NumOOBDataElements, - RndisMessage->Message.Packet.OOBDataOffset, - RndisMessage->Message.Packet.OOBDataLength, - RndisMessage->Message.Packet.PerPacketInfoOffset, - RndisMessage->Message.Packet.PerPacketInfoLength); - break; - - case REMOTE_NDIS_INITIALIZE_CMPLT: - DPRINT_DBG(NETVSC, "REMOTE_NDIS_INITIALIZE_CMPLT " - "(len %u, id 0x%x, status 0x%x, major %d, minor %d, " - "device flags %d, max xfer size 0x%x, max pkts %u, " - "pkt aligned %u)", - RndisMessage->MessageLength, - RndisMessage->Message.InitializeComplete.RequestId, - RndisMessage->Message.InitializeComplete.Status, - RndisMessage->Message.InitializeComplete.MajorVersion, - RndisMessage->Message.InitializeComplete.MinorVersion, - RndisMessage->Message.InitializeComplete.DeviceFlags, - RndisMessage->Message.InitializeComplete.MaxTransferSize, - RndisMessage->Message.InitializeComplete.MaxPacketsPerMessage, - RndisMessage->Message.InitializeComplete.PacketAlignmentFactor); - break; - - case REMOTE_NDIS_QUERY_CMPLT: - DPRINT_DBG(NETVSC, "REMOTE_NDIS_QUERY_CMPLT " - "(len %u, id 0x%x, status 0x%x, buf len %u, " - "buf offset %u)", - RndisMessage->MessageLength, - RndisMessage->Message.QueryComplete.RequestId, - RndisMessage->Message.QueryComplete.Status, - RndisMessage->Message.QueryComplete.InformationBufferLength, - RndisMessage->Message.QueryComplete.InformationBufferOffset); - break; - - case REMOTE_NDIS_SET_CMPLT: - DPRINT_DBG(NETVSC, - "REMOTE_NDIS_SET_CMPLT (len %u, id 0x%x, status 0x%x)", - RndisMessage->MessageLength, - RndisMessage->Message.SetComplete.RequestId, - RndisMessage->Message.SetComplete.Status); - break; - - case REMOTE_NDIS_INDICATE_STATUS_MSG: - DPRINT_DBG(NETVSC, "REMOTE_NDIS_INDICATE_STATUS_MSG " - "(len %u, status 0x%x, buf len %u, buf offset %u)", - RndisMessage->MessageLength, - RndisMessage->Message.IndicateStatus.Status, - RndisMessage->Message.IndicateStatus.StatusBufferLength, - RndisMessage->Message.IndicateStatus.StatusBufferOffset); - break; - - default: - DPRINT_DBG(NETVSC, "0x%x (len %u)", - RndisMessage->NdisMessageType, - RndisMessage->MessageLength); - break; - } -} - -static int RndisFilterSendRequest(struct rndis_device *Device, - struct rndis_request *Request) -{ - int ret; - struct hv_netvsc_packet *packet; - - DPRINT_ENTER(NETVSC); - - /* Setup the packet to send it */ - packet = &Request->Packet; - - packet->IsDataPacket = false; - packet->TotalDataBufferLength = Request->RequestMessage.MessageLength; - packet->PageBufferCount = 1; - - packet->PageBuffers[0].Pfn = virt_to_phys(&Request->RequestMessage) >> - PAGE_SHIFT; - packet->PageBuffers[0].Length = Request->RequestMessage.MessageLength; - packet->PageBuffers[0].Offset = - (unsigned long)&Request->RequestMessage & (PAGE_SIZE - 1); - - packet->Completion.Send.SendCompletionContext = Request;/* packet; */ - packet->Completion.Send.OnSendCompletion = - RndisFilterOnSendRequestCompletion; - packet->Completion.Send.SendCompletionTid = (unsigned long)Device; - - ret = gRndisFilter.InnerDriver.OnSend(Device->NetDevice->Device, packet); - DPRINT_EXIT(NETVSC); - return ret; -} - -static void RndisFilterReceiveResponse(struct rndis_device *Device, - struct rndis_message *Response) -{ - struct rndis_request *request = NULL; - bool found = false; - unsigned long flags; - - DPRINT_ENTER(NETVSC); - - spin_lock_irqsave(&Device->request_lock, flags); - list_for_each_entry(request, &Device->RequestList, ListEntry) { - /* - * All request/response message contains RequestId as the 1st - * field - */ - if (request->RequestMessage.Message.InitializeRequest.RequestId - == Response->Message.InitializeComplete.RequestId) { - DPRINT_DBG(NETVSC, "found rndis request for " - "this response (id 0x%x req type 0x%x res " - "type 0x%x)", - request->RequestMessage.Message.InitializeRequest.RequestId, - request->RequestMessage.NdisMessageType, - Response->NdisMessageType); - - found = true; - break; - } - } - spin_unlock_irqrestore(&Device->request_lock, flags); - - if (found) { - if (Response->MessageLength <= sizeof(struct rndis_message)) { - memcpy(&request->ResponseMessage, Response, - Response->MessageLength); - } else { - DPRINT_ERR(NETVSC, "rndis response buffer overflow " - "detected (size %u max %zu)", - Response->MessageLength, - sizeof(struct rndis_filter_packet)); - - if (Response->NdisMessageType == - REMOTE_NDIS_RESET_CMPLT) { - /* does not have a request id field */ - request->ResponseMessage.Message.ResetComplete.Status = STATUS_BUFFER_OVERFLOW; - } else { - request->ResponseMessage.Message.InitializeComplete.Status = STATUS_BUFFER_OVERFLOW; - } - } - - osd_WaitEventSet(request->WaitEvent); - } else { - DPRINT_ERR(NETVSC, "no rndis request found for this response " - "(id 0x%x res type 0x%x)", - Response->Message.InitializeComplete.RequestId, - Response->NdisMessageType); - } - - DPRINT_EXIT(NETVSC); -} - -static void RndisFilterReceiveIndicateStatus(struct rndis_device *Device, - struct rndis_message *Response) -{ - struct rndis_indicate_status *indicate = - &Response->Message.IndicateStatus; - - if (indicate->Status == RNDIS_STATUS_MEDIA_CONNECT) { - gRndisFilter.InnerDriver.OnLinkStatusChanged(Device->NetDevice->Device, 1); - } else if (indicate->Status == RNDIS_STATUS_MEDIA_DISCONNECT) { - gRndisFilter.InnerDriver.OnLinkStatusChanged(Device->NetDevice->Device, 0); - } else { - /* - * TODO: - */ - } -} - -static void RndisFilterReceiveData(struct rndis_device *Device, - struct rndis_message *Message, - struct hv_netvsc_packet *Packet) -{ - struct rndis_packet *rndisPacket; - u32 dataOffset; - - DPRINT_ENTER(NETVSC); - - /* empty ethernet frame ?? */ - /* ASSERT(Packet->PageBuffers[0].Length > */ - /* RNDIS_MESSAGE_SIZE(struct rndis_packet)); */ - - rndisPacket = &Message->Message.Packet; - - /* - * FIXME: Handle multiple rndis pkt msgs that maybe enclosed in this - * netvsc packet (ie TotalDataBufferLength != MessageLength) - */ - - /* Remove the rndis header and pass it back up the stack */ - dataOffset = RNDIS_HEADER_SIZE + rndisPacket->DataOffset; - - Packet->TotalDataBufferLength -= dataOffset; - Packet->PageBuffers[0].Offset += dataOffset; - Packet->PageBuffers[0].Length -= dataOffset; - - Packet->IsDataPacket = true; - - gRndisFilter.InnerDriver.OnReceiveCallback(Device->NetDevice->Device, - Packet); - - DPRINT_EXIT(NETVSC); -} - -static int RndisFilterOnReceive(struct hv_device *Device, - struct hv_netvsc_packet *Packet) -{ - struct netvsc_device *netDevice = Device->Extension; - struct rndis_device *rndisDevice; - struct rndis_message rndisMessage; - struct rndis_message *rndisHeader; - - DPRINT_ENTER(NETVSC); - - if (!netDevice) - return -EINVAL; - - /* Make sure the rndis device state is initialized */ - if (!netDevice->Extension) { - DPRINT_ERR(NETVSC, "got rndis message but no rndis device..." - "dropping this message!"); - DPRINT_EXIT(NETVSC); - return -1; - } - - rndisDevice = (struct rndis_device *)netDevice->Extension; - if (rndisDevice->State == RNDIS_DEV_UNINITIALIZED) { - DPRINT_ERR(NETVSC, "got rndis message but rndis device " - "uninitialized...dropping this message!"); - DPRINT_EXIT(NETVSC); - return -1; - } - - rndisHeader = (struct rndis_message *)kmap_atomic( - pfn_to_page(Packet->PageBuffers[0].Pfn), KM_IRQ0); - - rndisHeader = (void *)((unsigned long)rndisHeader + - Packet->PageBuffers[0].Offset); - - /* Make sure we got a valid rndis message */ - /* - * FIXME: There seems to be a bug in set completion msg where its - * MessageLength is 16 bytes but the ByteCount field in the xfer page - * range shows 52 bytes - * */ -#if 0 - if (Packet->TotalDataBufferLength != rndisHeader->MessageLength) { - kunmap_atomic(rndisHeader - Packet->PageBuffers[0].Offset, - KM_IRQ0); - - DPRINT_ERR(NETVSC, "invalid rndis message? (expected %u " - "bytes got %u)...dropping this message!", - rndisHeader->MessageLength, - Packet->TotalDataBufferLength); - DPRINT_EXIT(NETVSC); - return -1; - } -#endif - - if ((rndisHeader->NdisMessageType != REMOTE_NDIS_PACKET_MSG) && - (rndisHeader->MessageLength > sizeof(struct rndis_message))) { - DPRINT_ERR(NETVSC, "incoming rndis message buffer overflow " - "detected (got %u, max %zu)...marking it an error!", - rndisHeader->MessageLength, - sizeof(struct rndis_message)); - } - - memcpy(&rndisMessage, rndisHeader, - (rndisHeader->MessageLength > sizeof(struct rndis_message)) ? - sizeof(struct rndis_message) : - rndisHeader->MessageLength); - - kunmap_atomic(rndisHeader - Packet->PageBuffers[0].Offset, KM_IRQ0); - - DumpRndisMessage(&rndisMessage); - - switch (rndisMessage.NdisMessageType) { - case REMOTE_NDIS_PACKET_MSG: - /* data msg */ - RndisFilterReceiveData(rndisDevice, &rndisMessage, Packet); - break; - - case REMOTE_NDIS_INITIALIZE_CMPLT: - case REMOTE_NDIS_QUERY_CMPLT: - case REMOTE_NDIS_SET_CMPLT: - /* case REMOTE_NDIS_RESET_CMPLT: */ - /* case REMOTE_NDIS_KEEPALIVE_CMPLT: */ - /* completion msgs */ - RndisFilterReceiveResponse(rndisDevice, &rndisMessage); - break; - - case REMOTE_NDIS_INDICATE_STATUS_MSG: - /* notification msgs */ - RndisFilterReceiveIndicateStatus(rndisDevice, &rndisMessage); - break; - default: - DPRINT_ERR(NETVSC, "unhandled rndis message (type %u len %u)", - rndisMessage.NdisMessageType, - rndisMessage.MessageLength); - break; - } - - DPRINT_EXIT(NETVSC); - return 0; -} - -static int RndisFilterQueryDevice(struct rndis_device *Device, u32 Oid, - void *Result, u32 *ResultSize) -{ - struct rndis_request *request; - u32 inresultSize = *ResultSize; - struct rndis_query_request *query; - struct rndis_query_complete *queryComplete; - int ret = 0; - - DPRINT_ENTER(NETVSC); - - if (!Result) - return -EINVAL; - - *ResultSize = 0; - request = GetRndisRequest(Device, REMOTE_NDIS_QUERY_MSG, - RNDIS_MESSAGE_SIZE(struct rndis_query_request)); - if (!request) { - ret = -1; - goto Cleanup; - } - - /* Setup the rndis query */ - query = &request->RequestMessage.Message.QueryRequest; - query->Oid = Oid; - query->InformationBufferOffset = sizeof(struct rndis_query_request); - query->InformationBufferLength = 0; - query->DeviceVcHandle = 0; - - ret = RndisFilterSendRequest(Device, request); - if (ret != 0) - goto Cleanup; - - osd_WaitEventWait(request->WaitEvent); - - /* Copy the response back */ - queryComplete = &request->ResponseMessage.Message.QueryComplete; - - if (queryComplete->InformationBufferLength > inresultSize) { - ret = -1; - goto Cleanup; - } - - memcpy(Result, - (void *)((unsigned long)queryComplete + - queryComplete->InformationBufferOffset), - queryComplete->InformationBufferLength); - - *ResultSize = queryComplete->InformationBufferLength; - -Cleanup: - if (request) - PutRndisRequest(Device, request); - DPRINT_EXIT(NETVSC); - - return ret; -} - -static int RndisFilterQueryDeviceMac(struct rndis_device *Device) -{ - u32 size = ETH_ALEN; - - return RndisFilterQueryDevice(Device, - RNDIS_OID_802_3_PERMANENT_ADDRESS, - Device->HwMacAddr, &size); -} - -static int RndisFilterQueryDeviceLinkStatus(struct rndis_device *Device) -{ - u32 size = sizeof(u32); - - return RndisFilterQueryDevice(Device, - RNDIS_OID_GEN_MEDIA_CONNECT_STATUS, - &Device->LinkStatus, &size); -} - -static int RndisFilterSetPacketFilter(struct rndis_device *Device, - u32 NewFilter) -{ - struct rndis_request *request; - struct rndis_set_request *set; - struct rndis_set_complete *setComplete; - u32 status; - int ret; - - DPRINT_ENTER(NETVSC); - - /* ASSERT(RNDIS_MESSAGE_SIZE(struct rndis_set_request) + sizeof(u32) <= */ - /* sizeof(struct rndis_message)); */ - - request = GetRndisRequest(Device, REMOTE_NDIS_SET_MSG, - RNDIS_MESSAGE_SIZE(struct rndis_set_request) + - sizeof(u32)); - if (!request) { - ret = -1; - goto Cleanup; - } - - /* Setup the rndis set */ - set = &request->RequestMessage.Message.SetRequest; - set->Oid = RNDIS_OID_GEN_CURRENT_PACKET_FILTER; - set->InformationBufferLength = sizeof(u32); - set->InformationBufferOffset = sizeof(struct rndis_set_request); - - memcpy((void *)(unsigned long)set + sizeof(struct rndis_set_request), - &NewFilter, sizeof(u32)); - - ret = RndisFilterSendRequest(Device, request); - if (ret != 0) - goto Cleanup; - - ret = osd_WaitEventWaitEx(request->WaitEvent, 2000/*2sec*/); - if (!ret) { - ret = -1; - DPRINT_ERR(NETVSC, "timeout before we got a set response..."); - /* - * We cant deallocate the request since we may still receive a - * send completion for it. - */ - goto Exit; - } else { - if (ret > 0) - ret = 0; - setComplete = &request->ResponseMessage.Message.SetComplete; - status = setComplete->Status; - } - -Cleanup: - if (request) - PutRndisRequest(Device, request); -Exit: - DPRINT_EXIT(NETVSC); - - return ret; -} - -int RndisFilterInit(struct netvsc_driver *Driver) -{ - DPRINT_ENTER(NETVSC); - - DPRINT_DBG(NETVSC, "sizeof(struct rndis_filter_packet) == %zd", - sizeof(struct rndis_filter_packet)); - - Driver->RequestExtSize = sizeof(struct rndis_filter_packet); - - /* Driver->Context = rndisDriver; */ - - memset(&gRndisFilter, 0, sizeof(struct rndis_filter_driver_object)); - - /*rndisDriver->Driver = Driver; - - ASSERT(Driver->OnLinkStatusChanged); - rndisDriver->OnLinkStatusChanged = Driver->OnLinkStatusChanged;*/ - - /* Save the original dispatch handlers before we override it */ - gRndisFilter.InnerDriver.Base.OnDeviceAdd = Driver->Base.OnDeviceAdd; - gRndisFilter.InnerDriver.Base.OnDeviceRemove = - Driver->Base.OnDeviceRemove; - gRndisFilter.InnerDriver.Base.OnCleanup = Driver->Base.OnCleanup; - - /* ASSERT(Driver->OnSend); */ - /* ASSERT(Driver->OnReceiveCallback); */ - gRndisFilter.InnerDriver.OnSend = Driver->OnSend; - gRndisFilter.InnerDriver.OnReceiveCallback = Driver->OnReceiveCallback; - gRndisFilter.InnerDriver.OnLinkStatusChanged = - Driver->OnLinkStatusChanged; - - /* Override */ - Driver->Base.OnDeviceAdd = RndisFilterOnDeviceAdd; - Driver->Base.OnDeviceRemove = RndisFilterOnDeviceRemove; - Driver->Base.OnCleanup = RndisFilterOnCleanup; - Driver->OnSend = RndisFilterOnSend; - /* Driver->QueryLinkStatus = RndisFilterQueryDeviceLinkStatus; */ - Driver->OnReceiveCallback = RndisFilterOnReceive; - - DPRINT_EXIT(NETVSC); - - return 0; -} - -static int RndisFilterInitDevice(struct rndis_device *Device) -{ - struct rndis_request *request; - struct rndis_initialize_request *init; - struct rndis_initialize_complete *initComplete; - u32 status; - int ret; - - DPRINT_ENTER(NETVSC); - - request = GetRndisRequest(Device, REMOTE_NDIS_INITIALIZE_MSG, - RNDIS_MESSAGE_SIZE(struct rndis_initialize_request)); - if (!request) { - ret = -1; - goto Cleanup; - } - - /* Setup the rndis set */ - init = &request->RequestMessage.Message.InitializeRequest; - init->MajorVersion = RNDIS_MAJOR_VERSION; - init->MinorVersion = RNDIS_MINOR_VERSION; - /* FIXME: Use 1536 - rounded ethernet frame size */ - init->MaxTransferSize = 2048; - - Device->State = RNDIS_DEV_INITIALIZING; - - ret = RndisFilterSendRequest(Device, request); - if (ret != 0) { - Device->State = RNDIS_DEV_UNINITIALIZED; - goto Cleanup; - } - - osd_WaitEventWait(request->WaitEvent); - - initComplete = &request->ResponseMessage.Message.InitializeComplete; - status = initComplete->Status; - if (status == RNDIS_STATUS_SUCCESS) { - Device->State = RNDIS_DEV_INITIALIZED; - ret = 0; - } else { - Device->State = RNDIS_DEV_UNINITIALIZED; - ret = -1; - } - -Cleanup: - if (request) - PutRndisRequest(Device, request); - DPRINT_EXIT(NETVSC); - - return ret; -} - -static void RndisFilterHaltDevice(struct rndis_device *Device) -{ - struct rndis_request *request; - struct rndis_halt_request *halt; - - DPRINT_ENTER(NETVSC); - - /* Attempt to do a rndis device halt */ - request = GetRndisRequest(Device, REMOTE_NDIS_HALT_MSG, - RNDIS_MESSAGE_SIZE(struct rndis_halt_request)); - if (!request) - goto Cleanup; - - /* Setup the rndis set */ - halt = &request->RequestMessage.Message.HaltRequest; - halt->RequestId = atomic_inc_return(&Device->NewRequestId); - - /* Ignore return since this msg is optional. */ - RndisFilterSendRequest(Device, request); - - Device->State = RNDIS_DEV_UNINITIALIZED; - -Cleanup: - if (request) - PutRndisRequest(Device, request); - DPRINT_EXIT(NETVSC); - return; -} - -static int RndisFilterOpenDevice(struct rndis_device *Device) -{ - int ret; - - DPRINT_ENTER(NETVSC); - - if (Device->State != RNDIS_DEV_INITIALIZED) - return 0; - - ret = RndisFilterSetPacketFilter(Device, - NDIS_PACKET_TYPE_BROADCAST | - NDIS_PACKET_TYPE_DIRECTED); - if (ret == 0) - Device->State = RNDIS_DEV_DATAINITIALIZED; - - DPRINT_EXIT(NETVSC); - return ret; -} - -static int RndisFilterCloseDevice(struct rndis_device *Device) -{ - int ret; - - DPRINT_ENTER(NETVSC); - - if (Device->State != RNDIS_DEV_DATAINITIALIZED) - return 0; - - ret = RndisFilterSetPacketFilter(Device, 0); - if (ret == 0) - Device->State = RNDIS_DEV_INITIALIZED; - - DPRINT_EXIT(NETVSC); - - return ret; -} - -static int RndisFilterOnDeviceAdd(struct hv_device *Device, - void *AdditionalInfo) -{ - int ret; - struct netvsc_device *netDevice; - struct rndis_device *rndisDevice; - struct netvsc_device_info *deviceInfo = AdditionalInfo; - - DPRINT_ENTER(NETVSC); - - rndisDevice = GetRndisDevice(); - if (!rndisDevice) { - DPRINT_EXIT(NETVSC); - return -1; - } - - DPRINT_DBG(NETVSC, "rndis device object allocated - %p", rndisDevice); - - /* - * Let the inner driver handle this first to create the netvsc channel - * NOTE! Once the channel is created, we may get a receive callback - * (RndisFilterOnReceive()) before this call is completed - */ - ret = gRndisFilter.InnerDriver.Base.OnDeviceAdd(Device, AdditionalInfo); - if (ret != 0) { - kfree(rndisDevice); - DPRINT_EXIT(NETVSC); - return ret; - } - - - /* Initialize the rndis device */ - netDevice = Device->Extension; - /* ASSERT(netDevice); */ - /* ASSERT(netDevice->Device); */ - - netDevice->Extension = rndisDevice; - rndisDevice->NetDevice = netDevice; - - /* Send the rndis initialization message */ - ret = RndisFilterInitDevice(rndisDevice); - if (ret != 0) { - /* - * TODO: If rndis init failed, we will need to shut down the - * channel - */ - } - - /* Get the mac address */ - ret = RndisFilterQueryDeviceMac(rndisDevice); - if (ret != 0) { - /* - * TODO: shutdown rndis device and the channel - */ - } - - DPRINT_INFO(NETVSC, "Device 0x%p mac addr %pM", - rndisDevice, rndisDevice->HwMacAddr); - - memcpy(deviceInfo->MacAddr, rndisDevice->HwMacAddr, ETH_ALEN); - - RndisFilterQueryDeviceLinkStatus(rndisDevice); - - deviceInfo->LinkState = rndisDevice->LinkStatus; - DPRINT_INFO(NETVSC, "Device 0x%p link state %s", rndisDevice, - ((deviceInfo->LinkState) ? ("down") : ("up"))); - - DPRINT_EXIT(NETVSC); - - return ret; -} - -static int RndisFilterOnDeviceRemove(struct hv_device *Device) -{ - struct netvsc_device *netDevice = Device->Extension; - struct rndis_device *rndisDevice = netDevice->Extension; - - DPRINT_ENTER(NETVSC); - - /* Halt and release the rndis device */ - RndisFilterHaltDevice(rndisDevice); - - kfree(rndisDevice); - netDevice->Extension = NULL; - - /* Pass control to inner driver to remove the device */ - gRndisFilter.InnerDriver.Base.OnDeviceRemove(Device); - - DPRINT_EXIT(NETVSC); - - return 0; -} - -static void RndisFilterOnCleanup(struct hv_driver *Driver) -{ - DPRINT_ENTER(NETVSC); - - DPRINT_EXIT(NETVSC); -} - -int RndisFilterOnOpen(struct hv_device *Device) -{ - int ret; - struct netvsc_device *netDevice = Device->Extension; - - DPRINT_ENTER(NETVSC); - - if (!netDevice) - return -EINVAL; - - ret = RndisFilterOpenDevice(netDevice->Extension); - - DPRINT_EXIT(NETVSC); - - return ret; -} - -int RndisFilterOnClose(struct hv_device *Device) -{ - int ret; - struct netvsc_device *netDevice = Device->Extension; - - DPRINT_ENTER(NETVSC); - - if (!netDevice) - return -EINVAL; - - ret = RndisFilterCloseDevice(netDevice->Extension); - - DPRINT_EXIT(NETVSC); - - return ret; -} - -static int RndisFilterOnSend(struct hv_device *Device, - struct hv_netvsc_packet *Packet) -{ - int ret; - struct rndis_filter_packet *filterPacket; - struct rndis_message *rndisMessage; - struct rndis_packet *rndisPacket; - u32 rndisMessageSize; - - DPRINT_ENTER(NETVSC); - - /* Add the rndis header */ - filterPacket = (struct rndis_filter_packet *)Packet->Extension; - /* ASSERT(filterPacket); */ - - memset(filterPacket, 0, sizeof(struct rndis_filter_packet)); - - rndisMessage = &filterPacket->Message; - rndisMessageSize = RNDIS_MESSAGE_SIZE(struct rndis_packet); - - rndisMessage->NdisMessageType = REMOTE_NDIS_PACKET_MSG; - rndisMessage->MessageLength = Packet->TotalDataBufferLength + - rndisMessageSize; - - rndisPacket = &rndisMessage->Message.Packet; - rndisPacket->DataOffset = sizeof(struct rndis_packet); - rndisPacket->DataLength = Packet->TotalDataBufferLength; - - Packet->IsDataPacket = true; - Packet->PageBuffers[0].Pfn = virt_to_phys(rndisMessage) >> PAGE_SHIFT; - Packet->PageBuffers[0].Offset = - (unsigned long)rndisMessage & (PAGE_SIZE-1); - Packet->PageBuffers[0].Length = rndisMessageSize; - - /* Save the packet send completion and context */ - filterPacket->OnCompletion = Packet->Completion.Send.OnSendCompletion; - filterPacket->CompletionContext = - Packet->Completion.Send.SendCompletionContext; - - /* Use ours */ - Packet->Completion.Send.OnSendCompletion = RndisFilterOnSendCompletion; - Packet->Completion.Send.SendCompletionContext = filterPacket; - - ret = gRndisFilter.InnerDriver.OnSend(Device, Packet); - if (ret != 0) { - /* - * Reset the completion to originals to allow retries from - * above - */ - Packet->Completion.Send.OnSendCompletion = - filterPacket->OnCompletion; - Packet->Completion.Send.SendCompletionContext = - filterPacket->CompletionContext; - } - - DPRINT_EXIT(NETVSC); - - return ret; -} - -static void RndisFilterOnSendCompletion(void *Context) -{ - struct rndis_filter_packet *filterPacket = Context; - - DPRINT_ENTER(NETVSC); - - /* Pass it back to the original handler */ - filterPacket->OnCompletion(filterPacket->CompletionContext); - - DPRINT_EXIT(NETVSC); -} - - -static void RndisFilterOnSendRequestCompletion(void *Context) -{ - DPRINT_ENTER(NETVSC); - - /* Noop */ - DPRINT_EXIT(NETVSC); -} diff --git a/drivers/staging/hv/RndisFilter.h b/drivers/staging/hv/RndisFilter.h deleted file mode 100644 index 764b9bf..0000000 --- a/drivers/staging/hv/RndisFilter.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _RNDISFILTER_H_ -#define _RNDISFILTER_H_ - -#define __struct_bcount(x) - -#include "netvsc.h" - -#include "rndis.h" - -#define RNDIS_HEADER_SIZE (sizeof(struct rndis_message) - \ - sizeof(union rndis_message_container)) - -#define NDIS_PACKET_TYPE_DIRECTED 0x00000001 -#define NDIS_PACKET_TYPE_MULTICAST 0x00000002 -#define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004 -#define NDIS_PACKET_TYPE_BROADCAST 0x00000008 -#define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010 -#define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020 -#define NDIS_PACKET_TYPE_SMT 0x00000040 -#define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080 -#define NDIS_PACKET_TYPE_GROUP 0x00000100 -#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00000200 -#define NDIS_PACKET_TYPE_FUNCTIONAL 0x00000400 -#define NDIS_PACKET_TYPE_MAC_FRAME 0x00000800 - - -/* Interface */ - -extern int RndisFilterInit(struct netvsc_driver *driver); - -#endif /* _RNDISFILTER_H_ */ diff --git a/drivers/staging/hv/netvsc.c b/drivers/staging/hv/netvsc.c index 1000989..ba15059 100644 --- a/drivers/staging/hv/netvsc.c +++ b/drivers/staging/hv/netvsc.c @@ -26,7 +26,7 @@ #include "osd.h" #include "logging.h" #include "netvsc.h" -#include "RndisFilter.h" +#include "rndis_filter.h" /* Globals */ diff --git a/drivers/staging/hv/rndis_filter.c b/drivers/staging/hv/rndis_filter.c new file mode 100644 index 0000000..e6824e0 --- /dev/null +++ b/drivers/staging/hv/rndis_filter.c @@ -0,0 +1,997 @@ +/* + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + */ +#include +#include +#include +#include +#include + +#include "osd.h" +#include "logging.h" +#include "NetVscApi.h" +#include "rndis_filter.h" + +/* Data types */ +struct rndis_filter_driver_object { + /* The original driver */ + struct netvsc_driver InnerDriver; +}; + +enum rndis_device_state { + RNDIS_DEV_UNINITIALIZED = 0, + RNDIS_DEV_INITIALIZING, + RNDIS_DEV_INITIALIZED, + RNDIS_DEV_DATAINITIALIZED, +}; + +struct rndis_device { + struct netvsc_device *NetDevice; + + enum rndis_device_state State; + u32 LinkStatus; + atomic_t NewRequestId; + + spinlock_t request_lock; + struct list_head RequestList; + + unsigned char HwMacAddr[ETH_ALEN]; +}; + +struct rndis_request { + struct list_head ListEntry; + struct osd_waitevent *WaitEvent; + + /* + * FIXME: We assumed a fixed size response here. If we do ever need to + * handle a bigger response, we can either define a max response + * message or add a response buffer variable above this field + */ + struct rndis_message ResponseMessage; + + /* Simplify allocation by having a netvsc packet inline */ + struct hv_netvsc_packet Packet; + struct hv_page_buffer Buffer; + /* FIXME: We assumed a fixed size request here. */ + struct rndis_message RequestMessage; +}; + + +struct rndis_filter_packet { + void *CompletionContext; + void (*OnCompletion)(void *context); + struct rndis_message Message; +}; + + +static int RndisFilterOnDeviceAdd(struct hv_device *Device, + void *AdditionalInfo); + +static int RndisFilterOnDeviceRemove(struct hv_device *Device); + +static void RndisFilterOnCleanup(struct hv_driver *Driver); + +static int RndisFilterOnSend(struct hv_device *Device, + struct hv_netvsc_packet *Packet); + +static void RndisFilterOnSendCompletion(void *Context); + +static void RndisFilterOnSendRequestCompletion(void *Context); + + +/* The one and only */ +static struct rndis_filter_driver_object gRndisFilter; + +static struct rndis_device *GetRndisDevice(void) +{ + struct rndis_device *device; + + device = kzalloc(sizeof(struct rndis_device), GFP_KERNEL); + if (!device) + return NULL; + + spin_lock_init(&device->request_lock); + + INIT_LIST_HEAD(&device->RequestList); + + device->State = RNDIS_DEV_UNINITIALIZED; + + return device; +} + +static struct rndis_request *GetRndisRequest(struct rndis_device *Device, + u32 MessageType, + u32 MessageLength) +{ + struct rndis_request *request; + struct rndis_message *rndisMessage; + struct rndis_set_request *set; + unsigned long flags; + + request = kzalloc(sizeof(struct rndis_request), GFP_KERNEL); + if (!request) + return NULL; + + request->WaitEvent = osd_WaitEventCreate(); + if (!request->WaitEvent) { + kfree(request); + return NULL; + } + + rndisMessage = &request->RequestMessage; + rndisMessage->NdisMessageType = MessageType; + rndisMessage->MessageLength = MessageLength; + + /* + * Set the request id. This field is always after the rndis header for + * request/response packet types so we just used the SetRequest as a + * template + */ + set = &rndisMessage->Message.SetRequest; + set->RequestId = atomic_inc_return(&Device->NewRequestId); + + /* Add to the request list */ + spin_lock_irqsave(&Device->request_lock, flags); + list_add_tail(&request->ListEntry, &Device->RequestList); + spin_unlock_irqrestore(&Device->request_lock, flags); + + return request; +} + +static void PutRndisRequest(struct rndis_device *Device, + struct rndis_request *Request) +{ + unsigned long flags; + + spin_lock_irqsave(&Device->request_lock, flags); + list_del(&Request->ListEntry); + spin_unlock_irqrestore(&Device->request_lock, flags); + + kfree(Request->WaitEvent); + kfree(Request); +} + +static void DumpRndisMessage(struct rndis_message *RndisMessage) +{ + switch (RndisMessage->NdisMessageType) { + case REMOTE_NDIS_PACKET_MSG: + DPRINT_DBG(NETVSC, "REMOTE_NDIS_PACKET_MSG (len %u, " + "data offset %u data len %u, # oob %u, " + "oob offset %u, oob len %u, pkt offset %u, " + "pkt len %u", + RndisMessage->MessageLength, + RndisMessage->Message.Packet.DataOffset, + RndisMessage->Message.Packet.DataLength, + RndisMessage->Message.Packet.NumOOBDataElements, + RndisMessage->Message.Packet.OOBDataOffset, + RndisMessage->Message.Packet.OOBDataLength, + RndisMessage->Message.Packet.PerPacketInfoOffset, + RndisMessage->Message.Packet.PerPacketInfoLength); + break; + + case REMOTE_NDIS_INITIALIZE_CMPLT: + DPRINT_DBG(NETVSC, "REMOTE_NDIS_INITIALIZE_CMPLT " + "(len %u, id 0x%x, status 0x%x, major %d, minor %d, " + "device flags %d, max xfer size 0x%x, max pkts %u, " + "pkt aligned %u)", + RndisMessage->MessageLength, + RndisMessage->Message.InitializeComplete.RequestId, + RndisMessage->Message.InitializeComplete.Status, + RndisMessage->Message.InitializeComplete.MajorVersion, + RndisMessage->Message.InitializeComplete.MinorVersion, + RndisMessage->Message.InitializeComplete.DeviceFlags, + RndisMessage->Message.InitializeComplete.MaxTransferSize, + RndisMessage->Message.InitializeComplete.MaxPacketsPerMessage, + RndisMessage->Message.InitializeComplete.PacketAlignmentFactor); + break; + + case REMOTE_NDIS_QUERY_CMPLT: + DPRINT_DBG(NETVSC, "REMOTE_NDIS_QUERY_CMPLT " + "(len %u, id 0x%x, status 0x%x, buf len %u, " + "buf offset %u)", + RndisMessage->MessageLength, + RndisMessage->Message.QueryComplete.RequestId, + RndisMessage->Message.QueryComplete.Status, + RndisMessage->Message.QueryComplete.InformationBufferLength, + RndisMessage->Message.QueryComplete.InformationBufferOffset); + break; + + case REMOTE_NDIS_SET_CMPLT: + DPRINT_DBG(NETVSC, + "REMOTE_NDIS_SET_CMPLT (len %u, id 0x%x, status 0x%x)", + RndisMessage->MessageLength, + RndisMessage->Message.SetComplete.RequestId, + RndisMessage->Message.SetComplete.Status); + break; + + case REMOTE_NDIS_INDICATE_STATUS_MSG: + DPRINT_DBG(NETVSC, "REMOTE_NDIS_INDICATE_STATUS_MSG " + "(len %u, status 0x%x, buf len %u, buf offset %u)", + RndisMessage->MessageLength, + RndisMessage->Message.IndicateStatus.Status, + RndisMessage->Message.IndicateStatus.StatusBufferLength, + RndisMessage->Message.IndicateStatus.StatusBufferOffset); + break; + + default: + DPRINT_DBG(NETVSC, "0x%x (len %u)", + RndisMessage->NdisMessageType, + RndisMessage->MessageLength); + break; + } +} + +static int RndisFilterSendRequest(struct rndis_device *Device, + struct rndis_request *Request) +{ + int ret; + struct hv_netvsc_packet *packet; + + DPRINT_ENTER(NETVSC); + + /* Setup the packet to send it */ + packet = &Request->Packet; + + packet->IsDataPacket = false; + packet->TotalDataBufferLength = Request->RequestMessage.MessageLength; + packet->PageBufferCount = 1; + + packet->PageBuffers[0].Pfn = virt_to_phys(&Request->RequestMessage) >> + PAGE_SHIFT; + packet->PageBuffers[0].Length = Request->RequestMessage.MessageLength; + packet->PageBuffers[0].Offset = + (unsigned long)&Request->RequestMessage & (PAGE_SIZE - 1); + + packet->Completion.Send.SendCompletionContext = Request;/* packet; */ + packet->Completion.Send.OnSendCompletion = + RndisFilterOnSendRequestCompletion; + packet->Completion.Send.SendCompletionTid = (unsigned long)Device; + + ret = gRndisFilter.InnerDriver.OnSend(Device->NetDevice->Device, packet); + DPRINT_EXIT(NETVSC); + return ret; +} + +static void RndisFilterReceiveResponse(struct rndis_device *Device, + struct rndis_message *Response) +{ + struct rndis_request *request = NULL; + bool found = false; + unsigned long flags; + + DPRINT_ENTER(NETVSC); + + spin_lock_irqsave(&Device->request_lock, flags); + list_for_each_entry(request, &Device->RequestList, ListEntry) { + /* + * All request/response message contains RequestId as the 1st + * field + */ + if (request->RequestMessage.Message.InitializeRequest.RequestId + == Response->Message.InitializeComplete.RequestId) { + DPRINT_DBG(NETVSC, "found rndis request for " + "this response (id 0x%x req type 0x%x res " + "type 0x%x)", + request->RequestMessage.Message.InitializeRequest.RequestId, + request->RequestMessage.NdisMessageType, + Response->NdisMessageType); + + found = true; + break; + } + } + spin_unlock_irqrestore(&Device->request_lock, flags); + + if (found) { + if (Response->MessageLength <= sizeof(struct rndis_message)) { + memcpy(&request->ResponseMessage, Response, + Response->MessageLength); + } else { + DPRINT_ERR(NETVSC, "rndis response buffer overflow " + "detected (size %u max %zu)", + Response->MessageLength, + sizeof(struct rndis_filter_packet)); + + if (Response->NdisMessageType == + REMOTE_NDIS_RESET_CMPLT) { + /* does not have a request id field */ + request->ResponseMessage.Message.ResetComplete.Status = STATUS_BUFFER_OVERFLOW; + } else { + request->ResponseMessage.Message.InitializeComplete.Status = STATUS_BUFFER_OVERFLOW; + } + } + + osd_WaitEventSet(request->WaitEvent); + } else { + DPRINT_ERR(NETVSC, "no rndis request found for this response " + "(id 0x%x res type 0x%x)", + Response->Message.InitializeComplete.RequestId, + Response->NdisMessageType); + } + + DPRINT_EXIT(NETVSC); +} + +static void RndisFilterReceiveIndicateStatus(struct rndis_device *Device, + struct rndis_message *Response) +{ + struct rndis_indicate_status *indicate = + &Response->Message.IndicateStatus; + + if (indicate->Status == RNDIS_STATUS_MEDIA_CONNECT) { + gRndisFilter.InnerDriver.OnLinkStatusChanged(Device->NetDevice->Device, 1); + } else if (indicate->Status == RNDIS_STATUS_MEDIA_DISCONNECT) { + gRndisFilter.InnerDriver.OnLinkStatusChanged(Device->NetDevice->Device, 0); + } else { + /* + * TODO: + */ + } +} + +static void RndisFilterReceiveData(struct rndis_device *Device, + struct rndis_message *Message, + struct hv_netvsc_packet *Packet) +{ + struct rndis_packet *rndisPacket; + u32 dataOffset; + + DPRINT_ENTER(NETVSC); + + /* empty ethernet frame ?? */ + /* ASSERT(Packet->PageBuffers[0].Length > */ + /* RNDIS_MESSAGE_SIZE(struct rndis_packet)); */ + + rndisPacket = &Message->Message.Packet; + + /* + * FIXME: Handle multiple rndis pkt msgs that maybe enclosed in this + * netvsc packet (ie TotalDataBufferLength != MessageLength) + */ + + /* Remove the rndis header and pass it back up the stack */ + dataOffset = RNDIS_HEADER_SIZE + rndisPacket->DataOffset; + + Packet->TotalDataBufferLength -= dataOffset; + Packet->PageBuffers[0].Offset += dataOffset; + Packet->PageBuffers[0].Length -= dataOffset; + + Packet->IsDataPacket = true; + + gRndisFilter.InnerDriver.OnReceiveCallback(Device->NetDevice->Device, + Packet); + + DPRINT_EXIT(NETVSC); +} + +static int RndisFilterOnReceive(struct hv_device *Device, + struct hv_netvsc_packet *Packet) +{ + struct netvsc_device *netDevice = Device->Extension; + struct rndis_device *rndisDevice; + struct rndis_message rndisMessage; + struct rndis_message *rndisHeader; + + DPRINT_ENTER(NETVSC); + + if (!netDevice) + return -EINVAL; + + /* Make sure the rndis device state is initialized */ + if (!netDevice->Extension) { + DPRINT_ERR(NETVSC, "got rndis message but no rndis device..." + "dropping this message!"); + DPRINT_EXIT(NETVSC); + return -1; + } + + rndisDevice = (struct rndis_device *)netDevice->Extension; + if (rndisDevice->State == RNDIS_DEV_UNINITIALIZED) { + DPRINT_ERR(NETVSC, "got rndis message but rndis device " + "uninitialized...dropping this message!"); + DPRINT_EXIT(NETVSC); + return -1; + } + + rndisHeader = (struct rndis_message *)kmap_atomic( + pfn_to_page(Packet->PageBuffers[0].Pfn), KM_IRQ0); + + rndisHeader = (void *)((unsigned long)rndisHeader + + Packet->PageBuffers[0].Offset); + + /* Make sure we got a valid rndis message */ + /* + * FIXME: There seems to be a bug in set completion msg where its + * MessageLength is 16 bytes but the ByteCount field in the xfer page + * range shows 52 bytes + * */ +#if 0 + if (Packet->TotalDataBufferLength != rndisHeader->MessageLength) { + kunmap_atomic(rndisHeader - Packet->PageBuffers[0].Offset, + KM_IRQ0); + + DPRINT_ERR(NETVSC, "invalid rndis message? (expected %u " + "bytes got %u)...dropping this message!", + rndisHeader->MessageLength, + Packet->TotalDataBufferLength); + DPRINT_EXIT(NETVSC); + return -1; + } +#endif + + if ((rndisHeader->NdisMessageType != REMOTE_NDIS_PACKET_MSG) && + (rndisHeader->MessageLength > sizeof(struct rndis_message))) { + DPRINT_ERR(NETVSC, "incoming rndis message buffer overflow " + "detected (got %u, max %zu)...marking it an error!", + rndisHeader->MessageLength, + sizeof(struct rndis_message)); + } + + memcpy(&rndisMessage, rndisHeader, + (rndisHeader->MessageLength > sizeof(struct rndis_message)) ? + sizeof(struct rndis_message) : + rndisHeader->MessageLength); + + kunmap_atomic(rndisHeader - Packet->PageBuffers[0].Offset, KM_IRQ0); + + DumpRndisMessage(&rndisMessage); + + switch (rndisMessage.NdisMessageType) { + case REMOTE_NDIS_PACKET_MSG: + /* data msg */ + RndisFilterReceiveData(rndisDevice, &rndisMessage, Packet); + break; + + case REMOTE_NDIS_INITIALIZE_CMPLT: + case REMOTE_NDIS_QUERY_CMPLT: + case REMOTE_NDIS_SET_CMPLT: + /* case REMOTE_NDIS_RESET_CMPLT: */ + /* case REMOTE_NDIS_KEEPALIVE_CMPLT: */ + /* completion msgs */ + RndisFilterReceiveResponse(rndisDevice, &rndisMessage); + break; + + case REMOTE_NDIS_INDICATE_STATUS_MSG: + /* notification msgs */ + RndisFilterReceiveIndicateStatus(rndisDevice, &rndisMessage); + break; + default: + DPRINT_ERR(NETVSC, "unhandled rndis message (type %u len %u)", + rndisMessage.NdisMessageType, + rndisMessage.MessageLength); + break; + } + + DPRINT_EXIT(NETVSC); + return 0; +} + +static int RndisFilterQueryDevice(struct rndis_device *Device, u32 Oid, + void *Result, u32 *ResultSize) +{ + struct rndis_request *request; + u32 inresultSize = *ResultSize; + struct rndis_query_request *query; + struct rndis_query_complete *queryComplete; + int ret = 0; + + DPRINT_ENTER(NETVSC); + + if (!Result) + return -EINVAL; + + *ResultSize = 0; + request = GetRndisRequest(Device, REMOTE_NDIS_QUERY_MSG, + RNDIS_MESSAGE_SIZE(struct rndis_query_request)); + if (!request) { + ret = -1; + goto Cleanup; + } + + /* Setup the rndis query */ + query = &request->RequestMessage.Message.QueryRequest; + query->Oid = Oid; + query->InformationBufferOffset = sizeof(struct rndis_query_request); + query->InformationBufferLength = 0; + query->DeviceVcHandle = 0; + + ret = RndisFilterSendRequest(Device, request); + if (ret != 0) + goto Cleanup; + + osd_WaitEventWait(request->WaitEvent); + + /* Copy the response back */ + queryComplete = &request->ResponseMessage.Message.QueryComplete; + + if (queryComplete->InformationBufferLength > inresultSize) { + ret = -1; + goto Cleanup; + } + + memcpy(Result, + (void *)((unsigned long)queryComplete + + queryComplete->InformationBufferOffset), + queryComplete->InformationBufferLength); + + *ResultSize = queryComplete->InformationBufferLength; + +Cleanup: + if (request) + PutRndisRequest(Device, request); + DPRINT_EXIT(NETVSC); + + return ret; +} + +static int RndisFilterQueryDeviceMac(struct rndis_device *Device) +{ + u32 size = ETH_ALEN; + + return RndisFilterQueryDevice(Device, + RNDIS_OID_802_3_PERMANENT_ADDRESS, + Device->HwMacAddr, &size); +} + +static int RndisFilterQueryDeviceLinkStatus(struct rndis_device *Device) +{ + u32 size = sizeof(u32); + + return RndisFilterQueryDevice(Device, + RNDIS_OID_GEN_MEDIA_CONNECT_STATUS, + &Device->LinkStatus, &size); +} + +static int RndisFilterSetPacketFilter(struct rndis_device *Device, + u32 NewFilter) +{ + struct rndis_request *request; + struct rndis_set_request *set; + struct rndis_set_complete *setComplete; + u32 status; + int ret; + + DPRINT_ENTER(NETVSC); + + /* ASSERT(RNDIS_MESSAGE_SIZE(struct rndis_set_request) + sizeof(u32) <= */ + /* sizeof(struct rndis_message)); */ + + request = GetRndisRequest(Device, REMOTE_NDIS_SET_MSG, + RNDIS_MESSAGE_SIZE(struct rndis_set_request) + + sizeof(u32)); + if (!request) { + ret = -1; + goto Cleanup; + } + + /* Setup the rndis set */ + set = &request->RequestMessage.Message.SetRequest; + set->Oid = RNDIS_OID_GEN_CURRENT_PACKET_FILTER; + set->InformationBufferLength = sizeof(u32); + set->InformationBufferOffset = sizeof(struct rndis_set_request); + + memcpy((void *)(unsigned long)set + sizeof(struct rndis_set_request), + &NewFilter, sizeof(u32)); + + ret = RndisFilterSendRequest(Device, request); + if (ret != 0) + goto Cleanup; + + ret = osd_WaitEventWaitEx(request->WaitEvent, 2000/*2sec*/); + if (!ret) { + ret = -1; + DPRINT_ERR(NETVSC, "timeout before we got a set response..."); + /* + * We cant deallocate the request since we may still receive a + * send completion for it. + */ + goto Exit; + } else { + if (ret > 0) + ret = 0; + setComplete = &request->ResponseMessage.Message.SetComplete; + status = setComplete->Status; + } + +Cleanup: + if (request) + PutRndisRequest(Device, request); +Exit: + DPRINT_EXIT(NETVSC); + + return ret; +} + +int RndisFilterInit(struct netvsc_driver *Driver) +{ + DPRINT_ENTER(NETVSC); + + DPRINT_DBG(NETVSC, "sizeof(struct rndis_filter_packet) == %zd", + sizeof(struct rndis_filter_packet)); + + Driver->RequestExtSize = sizeof(struct rndis_filter_packet); + + /* Driver->Context = rndisDriver; */ + + memset(&gRndisFilter, 0, sizeof(struct rndis_filter_driver_object)); + + /*rndisDriver->Driver = Driver; + + ASSERT(Driver->OnLinkStatusChanged); + rndisDriver->OnLinkStatusChanged = Driver->OnLinkStatusChanged;*/ + + /* Save the original dispatch handlers before we override it */ + gRndisFilter.InnerDriver.Base.OnDeviceAdd = Driver->Base.OnDeviceAdd; + gRndisFilter.InnerDriver.Base.OnDeviceRemove = + Driver->Base.OnDeviceRemove; + gRndisFilter.InnerDriver.Base.OnCleanup = Driver->Base.OnCleanup; + + /* ASSERT(Driver->OnSend); */ + /* ASSERT(Driver->OnReceiveCallback); */ + gRndisFilter.InnerDriver.OnSend = Driver->OnSend; + gRndisFilter.InnerDriver.OnReceiveCallback = Driver->OnReceiveCallback; + gRndisFilter.InnerDriver.OnLinkStatusChanged = + Driver->OnLinkStatusChanged; + + /* Override */ + Driver->Base.OnDeviceAdd = RndisFilterOnDeviceAdd; + Driver->Base.OnDeviceRemove = RndisFilterOnDeviceRemove; + Driver->Base.OnCleanup = RndisFilterOnCleanup; + Driver->OnSend = RndisFilterOnSend; + /* Driver->QueryLinkStatus = RndisFilterQueryDeviceLinkStatus; */ + Driver->OnReceiveCallback = RndisFilterOnReceive; + + DPRINT_EXIT(NETVSC); + + return 0; +} + +static int RndisFilterInitDevice(struct rndis_device *Device) +{ + struct rndis_request *request; + struct rndis_initialize_request *init; + struct rndis_initialize_complete *initComplete; + u32 status; + int ret; + + DPRINT_ENTER(NETVSC); + + request = GetRndisRequest(Device, REMOTE_NDIS_INITIALIZE_MSG, + RNDIS_MESSAGE_SIZE(struct rndis_initialize_request)); + if (!request) { + ret = -1; + goto Cleanup; + } + + /* Setup the rndis set */ + init = &request->RequestMessage.Message.InitializeRequest; + init->MajorVersion = RNDIS_MAJOR_VERSION; + init->MinorVersion = RNDIS_MINOR_VERSION; + /* FIXME: Use 1536 - rounded ethernet frame size */ + init->MaxTransferSize = 2048; + + Device->State = RNDIS_DEV_INITIALIZING; + + ret = RndisFilterSendRequest(Device, request); + if (ret != 0) { + Device->State = RNDIS_DEV_UNINITIALIZED; + goto Cleanup; + } + + osd_WaitEventWait(request->WaitEvent); + + initComplete = &request->ResponseMessage.Message.InitializeComplete; + status = initComplete->Status; + if (status == RNDIS_STATUS_SUCCESS) { + Device->State = RNDIS_DEV_INITIALIZED; + ret = 0; + } else { + Device->State = RNDIS_DEV_UNINITIALIZED; + ret = -1; + } + +Cleanup: + if (request) + PutRndisRequest(Device, request); + DPRINT_EXIT(NETVSC); + + return ret; +} + +static void RndisFilterHaltDevice(struct rndis_device *Device) +{ + struct rndis_request *request; + struct rndis_halt_request *halt; + + DPRINT_ENTER(NETVSC); + + /* Attempt to do a rndis device halt */ + request = GetRndisRequest(Device, REMOTE_NDIS_HALT_MSG, + RNDIS_MESSAGE_SIZE(struct rndis_halt_request)); + if (!request) + goto Cleanup; + + /* Setup the rndis set */ + halt = &request->RequestMessage.Message.HaltRequest; + halt->RequestId = atomic_inc_return(&Device->NewRequestId); + + /* Ignore return since this msg is optional. */ + RndisFilterSendRequest(Device, request); + + Device->State = RNDIS_DEV_UNINITIALIZED; + +Cleanup: + if (request) + PutRndisRequest(Device, request); + DPRINT_EXIT(NETVSC); + return; +} + +static int RndisFilterOpenDevice(struct rndis_device *Device) +{ + int ret; + + DPRINT_ENTER(NETVSC); + + if (Device->State != RNDIS_DEV_INITIALIZED) + return 0; + + ret = RndisFilterSetPacketFilter(Device, + NDIS_PACKET_TYPE_BROADCAST | + NDIS_PACKET_TYPE_DIRECTED); + if (ret == 0) + Device->State = RNDIS_DEV_DATAINITIALIZED; + + DPRINT_EXIT(NETVSC); + return ret; +} + +static int RndisFilterCloseDevice(struct rndis_device *Device) +{ + int ret; + + DPRINT_ENTER(NETVSC); + + if (Device->State != RNDIS_DEV_DATAINITIALIZED) + return 0; + + ret = RndisFilterSetPacketFilter(Device, 0); + if (ret == 0) + Device->State = RNDIS_DEV_INITIALIZED; + + DPRINT_EXIT(NETVSC); + + return ret; +} + +static int RndisFilterOnDeviceAdd(struct hv_device *Device, + void *AdditionalInfo) +{ + int ret; + struct netvsc_device *netDevice; + struct rndis_device *rndisDevice; + struct netvsc_device_info *deviceInfo = AdditionalInfo; + + DPRINT_ENTER(NETVSC); + + rndisDevice = GetRndisDevice(); + if (!rndisDevice) { + DPRINT_EXIT(NETVSC); + return -1; + } + + DPRINT_DBG(NETVSC, "rndis device object allocated - %p", rndisDevice); + + /* + * Let the inner driver handle this first to create the netvsc channel + * NOTE! Once the channel is created, we may get a receive callback + * (RndisFilterOnReceive()) before this call is completed + */ + ret = gRndisFilter.InnerDriver.Base.OnDeviceAdd(Device, AdditionalInfo); + if (ret != 0) { + kfree(rndisDevice); + DPRINT_EXIT(NETVSC); + return ret; + } + + + /* Initialize the rndis device */ + netDevice = Device->Extension; + /* ASSERT(netDevice); */ + /* ASSERT(netDevice->Device); */ + + netDevice->Extension = rndisDevice; + rndisDevice->NetDevice = netDevice; + + /* Send the rndis initialization message */ + ret = RndisFilterInitDevice(rndisDevice); + if (ret != 0) { + /* + * TODO: If rndis init failed, we will need to shut down the + * channel + */ + } + + /* Get the mac address */ + ret = RndisFilterQueryDeviceMac(rndisDevice); + if (ret != 0) { + /* + * TODO: shutdown rndis device and the channel + */ + } + + DPRINT_INFO(NETVSC, "Device 0x%p mac addr %pM", + rndisDevice, rndisDevice->HwMacAddr); + + memcpy(deviceInfo->MacAddr, rndisDevice->HwMacAddr, ETH_ALEN); + + RndisFilterQueryDeviceLinkStatus(rndisDevice); + + deviceInfo->LinkState = rndisDevice->LinkStatus; + DPRINT_INFO(NETVSC, "Device 0x%p link state %s", rndisDevice, + ((deviceInfo->LinkState) ? ("down") : ("up"))); + + DPRINT_EXIT(NETVSC); + + return ret; +} + +static int RndisFilterOnDeviceRemove(struct hv_device *Device) +{ + struct netvsc_device *netDevice = Device->Extension; + struct rndis_device *rndisDevice = netDevice->Extension; + + DPRINT_ENTER(NETVSC); + + /* Halt and release the rndis device */ + RndisFilterHaltDevice(rndisDevice); + + kfree(rndisDevice); + netDevice->Extension = NULL; + + /* Pass control to inner driver to remove the device */ + gRndisFilter.InnerDriver.Base.OnDeviceRemove(Device); + + DPRINT_EXIT(NETVSC); + + return 0; +} + +static void RndisFilterOnCleanup(struct hv_driver *Driver) +{ + DPRINT_ENTER(NETVSC); + + DPRINT_EXIT(NETVSC); +} + +int RndisFilterOnOpen(struct hv_device *Device) +{ + int ret; + struct netvsc_device *netDevice = Device->Extension; + + DPRINT_ENTER(NETVSC); + + if (!netDevice) + return -EINVAL; + + ret = RndisFilterOpenDevice(netDevice->Extension); + + DPRINT_EXIT(NETVSC); + + return ret; +} + +int RndisFilterOnClose(struct hv_device *Device) +{ + int ret; + struct netvsc_device *netDevice = Device->Extension; + + DPRINT_ENTER(NETVSC); + + if (!netDevice) + return -EINVAL; + + ret = RndisFilterCloseDevice(netDevice->Extension); + + DPRINT_EXIT(NETVSC); + + return ret; +} + +static int RndisFilterOnSend(struct hv_device *Device, + struct hv_netvsc_packet *Packet) +{ + int ret; + struct rndis_filter_packet *filterPacket; + struct rndis_message *rndisMessage; + struct rndis_packet *rndisPacket; + u32 rndisMessageSize; + + DPRINT_ENTER(NETVSC); + + /* Add the rndis header */ + filterPacket = (struct rndis_filter_packet *)Packet->Extension; + /* ASSERT(filterPacket); */ + + memset(filterPacket, 0, sizeof(struct rndis_filter_packet)); + + rndisMessage = &filterPacket->Message; + rndisMessageSize = RNDIS_MESSAGE_SIZE(struct rndis_packet); + + rndisMessage->NdisMessageType = REMOTE_NDIS_PACKET_MSG; + rndisMessage->MessageLength = Packet->TotalDataBufferLength + + rndisMessageSize; + + rndisPacket = &rndisMessage->Message.Packet; + rndisPacket->DataOffset = sizeof(struct rndis_packet); + rndisPacket->DataLength = Packet->TotalDataBufferLength; + + Packet->IsDataPacket = true; + Packet->PageBuffers[0].Pfn = virt_to_phys(rndisMessage) >> PAGE_SHIFT; + Packet->PageBuffers[0].Offset = + (unsigned long)rndisMessage & (PAGE_SIZE-1); + Packet->PageBuffers[0].Length = rndisMessageSize; + + /* Save the packet send completion and context */ + filterPacket->OnCompletion = Packet->Completion.Send.OnSendCompletion; + filterPacket->CompletionContext = + Packet->Completion.Send.SendCompletionContext; + + /* Use ours */ + Packet->Completion.Send.OnSendCompletion = RndisFilterOnSendCompletion; + Packet->Completion.Send.SendCompletionContext = filterPacket; + + ret = gRndisFilter.InnerDriver.OnSend(Device, Packet); + if (ret != 0) { + /* + * Reset the completion to originals to allow retries from + * above + */ + Packet->Completion.Send.OnSendCompletion = + filterPacket->OnCompletion; + Packet->Completion.Send.SendCompletionContext = + filterPacket->CompletionContext; + } + + DPRINT_EXIT(NETVSC); + + return ret; +} + +static void RndisFilterOnSendCompletion(void *Context) +{ + struct rndis_filter_packet *filterPacket = Context; + + DPRINT_ENTER(NETVSC); + + /* Pass it back to the original handler */ + filterPacket->OnCompletion(filterPacket->CompletionContext); + + DPRINT_EXIT(NETVSC); +} + + +static void RndisFilterOnSendRequestCompletion(void *Context) +{ + DPRINT_ENTER(NETVSC); + + /* Noop */ + DPRINT_EXIT(NETVSC); +} diff --git a/drivers/staging/hv/rndis_filter.h b/drivers/staging/hv/rndis_filter.h new file mode 100644 index 0000000..764b9bf --- /dev/null +++ b/drivers/staging/hv/rndis_filter.h @@ -0,0 +1,55 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _RNDISFILTER_H_ +#define _RNDISFILTER_H_ + +#define __struct_bcount(x) + +#include "netvsc.h" + +#include "rndis.h" + +#define RNDIS_HEADER_SIZE (sizeof(struct rndis_message) - \ + sizeof(union rndis_message_container)) + +#define NDIS_PACKET_TYPE_DIRECTED 0x00000001 +#define NDIS_PACKET_TYPE_MULTICAST 0x00000002 +#define NDIS_PACKET_TYPE_ALL_MULTICAST 0x00000004 +#define NDIS_PACKET_TYPE_BROADCAST 0x00000008 +#define NDIS_PACKET_TYPE_SOURCE_ROUTING 0x00000010 +#define NDIS_PACKET_TYPE_PROMISCUOUS 0x00000020 +#define NDIS_PACKET_TYPE_SMT 0x00000040 +#define NDIS_PACKET_TYPE_ALL_LOCAL 0x00000080 +#define NDIS_PACKET_TYPE_GROUP 0x00000100 +#define NDIS_PACKET_TYPE_ALL_FUNCTIONAL 0x00000200 +#define NDIS_PACKET_TYPE_FUNCTIONAL 0x00000400 +#define NDIS_PACKET_TYPE_MAC_FRAME 0x00000800 + + +/* Interface */ + +extern int RndisFilterInit(struct netvsc_driver *driver); + +#endif /* _RNDISFILTER_H_ */ -- cgit v0.10.2 From ff39524bc463e63003d824d4106eda83762d648b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:34:18 -0700 Subject: Staging: hv: rename ChannelMgmt.c and .h to channel_mgmt.c and .h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/ChannelMgmt.c b/drivers/staging/hv/ChannelMgmt.c deleted file mode 100644 index 3698230..0000000 --- a/drivers/staging/hv/ChannelMgmt.c +++ /dev/null @@ -1,856 +0,0 @@ -/* - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - */ -#include -#include -#include -#include -#include -#include "osd.h" -#include "logging.h" -#include "VmbusPrivate.h" -#include "utils.h" - -struct vmbus_channel_message_table_entry { - enum vmbus_channel_message_type messageType; - void (*messageHandler)(struct vmbus_channel_message_header *msg); -}; - -#define MAX_MSG_TYPES 2 -#define MAX_NUM_DEVICE_CLASSES_SUPPORTED 6 - -static const struct hv_guid - gSupportedDeviceClasses[MAX_NUM_DEVICE_CLASSES_SUPPORTED] = { - /* {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f} */ - /* Storage - SCSI */ - { - .data = { - 0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d, - 0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f - } - }, - - /* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */ - /* Network */ - { - .data = { - 0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46, - 0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E - } - }, - - /* {CFA8B69E-5B4A-4cc0-B98B-8BA1A1F3F95A} */ - /* Input */ - { - .data = { - 0x9E, 0xB6, 0xA8, 0xCF, 0x4A, 0x5B, 0xc0, 0x4c, - 0xB9, 0x8B, 0x8B, 0xA1, 0xA1, 0xF3, 0xF9, 0x5A - } - }, - - /* {32412632-86cb-44a2-9b5c-50d1417354f5} */ - /* IDE */ - { - .data = { - 0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44, - 0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5 - } - }, - /* 0E0B6031-5213-4934-818B-38D90CED39DB */ - /* Shutdown */ - { - .data = { - 0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49, - 0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB - } - }, - /* {9527E630-D0AE-497b-ADCE-E80AB0175CAF} */ - /* TimeSync */ - { - .data = { - 0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49, - 0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf - } - }, -}; - - -/** - * prep_negotiate_resp() - Create default response for Hyper-V Negotiate message - * @icmsghdrp: Pointer to msg header structure - * @icmsg_negotiate: Pointer to negotiate message structure - * @buf: Raw buffer channel data - * - * @icmsghdrp is of type &struct icmsg_hdr. - * @negop is of type &struct icmsg_negotiate. - * Set up and fill in default negotiate response message. This response can - * come from both the vmbus driver and the hv_utils driver. The current api - * will respond properly to both Windows 2008 and Windows 2008-R2 operating - * systems. - * - * Mainly used by Hyper-V drivers. - */ -void prep_negotiate_resp(struct icmsg_hdr *icmsghdrp, - struct icmsg_negotiate *negop, - u8 *buf) -{ - if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { - icmsghdrp->icmsgsize = 0x10; - - negop = (struct icmsg_negotiate *)&buf[ - sizeof(struct vmbuspipe_hdr) + - sizeof(struct icmsg_hdr)]; - - if (negop->icframe_vercnt == 2 && - negop->icversion_data[1].major == 3) { - negop->icversion_data[0].major = 3; - negop->icversion_data[0].minor = 0; - negop->icversion_data[1].major = 3; - negop->icversion_data[1].minor = 0; - } else { - negop->icversion_data[0].major = 1; - negop->icversion_data[0].minor = 0; - negop->icversion_data[1].major = 1; - negop->icversion_data[1].minor = 0; - } - - negop->icframe_vercnt = 1; - negop->icmsg_vercnt = 1; - } -} -EXPORT_SYMBOL(prep_negotiate_resp); - -/** - * chn_cb_negotiate() - Default handler for non IDE/SCSI/NETWORK - * Hyper-V requests - * @context: Pointer to argument structure. - * - * Set up the default handler for non device driver specific requests - * from Hyper-V. This stub responds to the default negotiate messages - * that come in for every non IDE/SCSI/Network request. - * This behavior is normally overwritten in the hv_utils driver. That - * driver handles requests like gracefull shutdown, heartbeats etc. - * - * Mainly used by Hyper-V drivers. - */ -void chn_cb_negotiate(void *context) -{ - struct vmbus_channel *channel = context; - u8 *buf; - u32 buflen, recvlen; - u64 requestid; - - struct icmsg_hdr *icmsghdrp; - struct icmsg_negotiate *negop = NULL; - - buflen = PAGE_SIZE; - buf = kmalloc(buflen, GFP_ATOMIC); - - VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); - - if (recvlen > 0) { - icmsghdrp = (struct icmsg_hdr *)&buf[ - sizeof(struct vmbuspipe_hdr)]; - - prep_negotiate_resp(icmsghdrp, negop, buf); - - icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION - | ICMSGHDRFLAG_RESPONSE; - - VmbusChannelSendPacket(channel, buf, - recvlen, requestid, - VmbusPacketTypeDataInBand, 0); - } - - kfree(buf); -} -EXPORT_SYMBOL(chn_cb_negotiate); - -/* - * Function table used for message responses for non IDE/SCSI/Network type - * messages. (Such as KVP/Shutdown etc) - */ -struct hyperv_service_callback hv_cb_utils[MAX_MSG_TYPES] = { - /* 0E0B6031-5213-4934-818B-38D90CED39DB */ - /* Shutdown */ - { - .msg_type = HV_SHUTDOWN_MSG, - .data = { - 0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49, - 0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB - }, - .callback = chn_cb_negotiate, - .log_msg = "Shutdown channel functionality initialized" - }, - - /* {9527E630-D0AE-497b-ADCE-E80AB0175CAF} */ - /* TimeSync */ - { - .msg_type = HV_TIMESYNC_MSG, - .data = { - 0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49, - 0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf - }, - .callback = chn_cb_negotiate, - .log_msg = "Timesync channel functionality initialized" - }, -}; -EXPORT_SYMBOL(hv_cb_utils); - -/* - * AllocVmbusChannel - Allocate and initialize a vmbus channel object - */ -struct vmbus_channel *AllocVmbusChannel(void) -{ - struct vmbus_channel *channel; - - channel = kzalloc(sizeof(*channel), GFP_ATOMIC); - if (!channel) - return NULL; - - spin_lock_init(&channel->inbound_lock); - - init_timer(&channel->poll_timer); - channel->poll_timer.data = (unsigned long)channel; - channel->poll_timer.function = VmbusChannelOnTimer; - - channel->ControlWQ = create_workqueue("hv_vmbus_ctl"); - if (!channel->ControlWQ) { - kfree(channel); - return NULL; - } - - return channel; -} - -/* - * ReleaseVmbusChannel - Release the vmbus channel object itself - */ -static inline void ReleaseVmbusChannel(void *context) -{ - struct vmbus_channel *channel = context; - - DPRINT_ENTER(VMBUS); - - DPRINT_DBG(VMBUS, "releasing channel (%p)", channel); - destroy_workqueue(channel->ControlWQ); - DPRINT_DBG(VMBUS, "channel released (%p)", channel); - - kfree(channel); - - DPRINT_EXIT(VMBUS); -} - -/* - * FreeVmbusChannel - Release the resources used by the vmbus channel object - */ -void FreeVmbusChannel(struct vmbus_channel *Channel) -{ - del_timer_sync(&Channel->poll_timer); - - /* - * We have to release the channel's workqueue/thread in the vmbus's - * workqueue/thread context - * ie we can't destroy ourselves. - */ - osd_schedule_callback(gVmbusConnection.WorkQueue, ReleaseVmbusChannel, - Channel); -} - -/* - * VmbusChannelProcessOffer - Process the offer by creating a channel/device - * associated with this offer - */ -static void VmbusChannelProcessOffer(void *context) -{ - struct vmbus_channel *newChannel = context; - struct vmbus_channel *channel; - bool fNew = true; - int ret; - int cnt; - unsigned long flags; - - DPRINT_ENTER(VMBUS); - - /* Make sure this is a new offer */ - spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); - - list_for_each_entry(channel, &gVmbusConnection.ChannelList, ListEntry) { - if (!memcmp(&channel->OfferMsg.Offer.InterfaceType, - &newChannel->OfferMsg.Offer.InterfaceType, - sizeof(struct hv_guid)) && - !memcmp(&channel->OfferMsg.Offer.InterfaceInstance, - &newChannel->OfferMsg.Offer.InterfaceInstance, - sizeof(struct hv_guid))) { - fNew = false; - break; - } - } - - if (fNew) - list_add_tail(&newChannel->ListEntry, - &gVmbusConnection.ChannelList); - - spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); - - if (!fNew) { - DPRINT_DBG(VMBUS, "Ignoring duplicate offer for relid (%d)", - newChannel->OfferMsg.ChildRelId); - FreeVmbusChannel(newChannel); - DPRINT_EXIT(VMBUS); - return; - } - - /* - * Start the process of binding this offer to the driver - * We need to set the DeviceObject field before calling - * VmbusChildDeviceAdd() - */ - newChannel->DeviceObject = VmbusChildDeviceCreate( - &newChannel->OfferMsg.Offer.InterfaceType, - &newChannel->OfferMsg.Offer.InterfaceInstance, - newChannel); - - DPRINT_DBG(VMBUS, "child device object allocated - %p", - newChannel->DeviceObject); - - /* - * Add the new device to the bus. This will kick off device-driver - * binding which eventually invokes the device driver's AddDevice() - * method. - */ - ret = VmbusChildDeviceAdd(newChannel->DeviceObject); - if (ret != 0) { - DPRINT_ERR(VMBUS, - "unable to add child device object (relid %d)", - newChannel->OfferMsg.ChildRelId); - - spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); - list_del(&newChannel->ListEntry); - spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); - - FreeVmbusChannel(newChannel); - } else { - /* - * This state is used to indicate a successful open - * so that when we do close the channel normally, we - * can cleanup properly - */ - newChannel->State = CHANNEL_OPEN_STATE; - cnt = 0; - - while (cnt != MAX_MSG_TYPES) { - if (memcmp(&newChannel->OfferMsg.Offer.InterfaceType, - &hv_cb_utils[cnt].data, - sizeof(struct hv_guid)) == 0) { - DPRINT_INFO(VMBUS, "%s", - hv_cb_utils[cnt].log_msg); - - if (VmbusChannelOpen(newChannel, 2 * PAGE_SIZE, - 2 * PAGE_SIZE, NULL, 0, - hv_cb_utils[cnt].callback, - newChannel) == 0) - hv_cb_utils[cnt].channel = newChannel; - } - cnt++; - } - } - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusChannelProcessRescindOffer - Rescind the offer by initiating a device removal - */ -static void VmbusChannelProcessRescindOffer(void *context) -{ - struct vmbus_channel *channel = context; - - DPRINT_ENTER(VMBUS); - VmbusChildDeviceRemove(channel->DeviceObject); - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusChannelOnOffer - Handler for channel offers from vmbus in parent partition. - * - * We ignore all offers except network and storage offers. For each network and - * storage offers, we create a channel object and queue a work item to the - * channel object to process the offer synchronously - */ -static void VmbusChannelOnOffer(struct vmbus_channel_message_header *hdr) -{ - struct vmbus_channel_offer_channel *offer; - struct vmbus_channel *newChannel; - struct hv_guid *guidType; - struct hv_guid *guidInstance; - int i; - int fSupported = 0; - - DPRINT_ENTER(VMBUS); - - offer = (struct vmbus_channel_offer_channel *)hdr; - for (i = 0; i < MAX_NUM_DEVICE_CLASSES_SUPPORTED; i++) { - if (memcmp(&offer->Offer.InterfaceType, - &gSupportedDeviceClasses[i], sizeof(struct hv_guid)) == 0) { - fSupported = 1; - break; - } - } - - if (!fSupported) { - DPRINT_DBG(VMBUS, "Ignoring channel offer notification for " - "child relid %d", offer->ChildRelId); - DPRINT_EXIT(VMBUS); - return; - } - - guidType = &offer->Offer.InterfaceType; - guidInstance = &offer->Offer.InterfaceInstance; - - DPRINT_INFO(VMBUS, "Channel offer notification - " - "child relid %d monitor id %d allocated %d, " - "type {%02x%02x%02x%02x-%02x%02x-%02x%02x-" - "%02x%02x%02x%02x%02x%02x%02x%02x} " - "instance {%02x%02x%02x%02x-%02x%02x-%02x%02x-" - "%02x%02x%02x%02x%02x%02x%02x%02x}", - offer->ChildRelId, offer->MonitorId, - offer->MonitorAllocated, - guidType->data[3], guidType->data[2], - guidType->data[1], guidType->data[0], - guidType->data[5], guidType->data[4], - guidType->data[7], guidType->data[6], - guidType->data[8], guidType->data[9], - guidType->data[10], guidType->data[11], - guidType->data[12], guidType->data[13], - guidType->data[14], guidType->data[15], - guidInstance->data[3], guidInstance->data[2], - guidInstance->data[1], guidInstance->data[0], - guidInstance->data[5], guidInstance->data[4], - guidInstance->data[7], guidInstance->data[6], - guidInstance->data[8], guidInstance->data[9], - guidInstance->data[10], guidInstance->data[11], - guidInstance->data[12], guidInstance->data[13], - guidInstance->data[14], guidInstance->data[15]); - - /* Allocate the channel object and save this offer. */ - newChannel = AllocVmbusChannel(); - if (!newChannel) { - DPRINT_ERR(VMBUS, "unable to allocate channel object"); - return; - } - - DPRINT_DBG(VMBUS, "channel object allocated - %p", newChannel); - - memcpy(&newChannel->OfferMsg, offer, - sizeof(struct vmbus_channel_offer_channel)); - newChannel->MonitorGroup = (u8)offer->MonitorId / 32; - newChannel->MonitorBit = (u8)offer->MonitorId % 32; - - /* TODO: Make sure the offer comes from our parent partition */ - osd_schedule_callback(newChannel->ControlWQ, VmbusChannelProcessOffer, - newChannel); - - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusChannelOnOfferRescind - Rescind offer handler. - * - * We queue a work item to process this offer synchronously - */ -static void VmbusChannelOnOfferRescind(struct vmbus_channel_message_header *hdr) -{ - struct vmbus_channel_rescind_offer *rescind; - struct vmbus_channel *channel; - - DPRINT_ENTER(VMBUS); - - rescind = (struct vmbus_channel_rescind_offer *)hdr; - channel = GetChannelFromRelId(rescind->ChildRelId); - if (channel == NULL) { - DPRINT_DBG(VMBUS, "channel not found for relId %d", - rescind->ChildRelId); - return; - } - - osd_schedule_callback(channel->ControlWQ, - VmbusChannelProcessRescindOffer, - channel); - - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusChannelOnOffersDelivered - This is invoked when all offers have been delivered. - * - * Nothing to do here. - */ -static void VmbusChannelOnOffersDelivered( - struct vmbus_channel_message_header *hdr) -{ - DPRINT_ENTER(VMBUS); - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusChannelOnOpenResult - Open result handler. - * - * This is invoked when we received a response to our channel open request. - * Find the matching request, copy the response and signal the requesting - * thread. - */ -static void VmbusChannelOnOpenResult(struct vmbus_channel_message_header *hdr) -{ - struct vmbus_channel_open_result *result; - struct list_head *curr; - struct vmbus_channel_msginfo *msgInfo; - struct vmbus_channel_message_header *requestHeader; - struct vmbus_channel_open_channel *openMsg; - unsigned long flags; - - DPRINT_ENTER(VMBUS); - - result = (struct vmbus_channel_open_result *)hdr; - DPRINT_DBG(VMBUS, "vmbus open result - %d", result->Status); - - /* - * Find the open msg, copy the result and signal/unblock the wait event - */ - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - - list_for_each(curr, &gVmbusConnection.ChannelMsgList) { -/* FIXME: this should probably use list_entry() instead */ - msgInfo = (struct vmbus_channel_msginfo *)curr; - requestHeader = (struct vmbus_channel_message_header *)msgInfo->Msg; - - if (requestHeader->MessageType == ChannelMessageOpenChannel) { - openMsg = (struct vmbus_channel_open_channel *)msgInfo->Msg; - if (openMsg->ChildRelId == result->ChildRelId && - openMsg->OpenId == result->OpenId) { - memcpy(&msgInfo->Response.OpenResult, - result, - sizeof(struct vmbus_channel_open_result)); - osd_WaitEventSet(msgInfo->WaitEvent); - break; - } - } - } - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusChannelOnGpadlCreated - GPADL created handler. - * - * This is invoked when we received a response to our gpadl create request. - * Find the matching request, copy the response and signal the requesting - * thread. - */ -static void VmbusChannelOnGpadlCreated(struct vmbus_channel_message_header *hdr) -{ - struct vmbus_channel_gpadl_created *gpadlCreated; - struct list_head *curr; - struct vmbus_channel_msginfo *msgInfo; - struct vmbus_channel_message_header *requestHeader; - struct vmbus_channel_gpadl_header *gpadlHeader; - unsigned long flags; - - DPRINT_ENTER(VMBUS); - - gpadlCreated = (struct vmbus_channel_gpadl_created *)hdr; - DPRINT_DBG(VMBUS, "vmbus gpadl created result - %d", - gpadlCreated->CreationStatus); - - /* - * Find the establish msg, copy the result and signal/unblock the wait - * event - */ - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - - list_for_each(curr, &gVmbusConnection.ChannelMsgList) { -/* FIXME: this should probably use list_entry() instead */ - msgInfo = (struct vmbus_channel_msginfo *)curr; - requestHeader = (struct vmbus_channel_message_header *)msgInfo->Msg; - - if (requestHeader->MessageType == ChannelMessageGpadlHeader) { - gpadlHeader = (struct vmbus_channel_gpadl_header *)requestHeader; - - if ((gpadlCreated->ChildRelId == - gpadlHeader->ChildRelId) && - (gpadlCreated->Gpadl == gpadlHeader->Gpadl)) { - memcpy(&msgInfo->Response.GpadlCreated, - gpadlCreated, - sizeof(struct vmbus_channel_gpadl_created)); - osd_WaitEventSet(msgInfo->WaitEvent); - break; - } - } - } - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusChannelOnGpadlTorndown - GPADL torndown handler. - * - * This is invoked when we received a response to our gpadl teardown request. - * Find the matching request, copy the response and signal the requesting - * thread. - */ -static void VmbusChannelOnGpadlTorndown( - struct vmbus_channel_message_header *hdr) -{ - struct vmbus_channel_gpadl_torndown *gpadlTorndown; - struct list_head *curr; - struct vmbus_channel_msginfo *msgInfo; - struct vmbus_channel_message_header *requestHeader; - struct vmbus_channel_gpadl_teardown *gpadlTeardown; - unsigned long flags; - - DPRINT_ENTER(VMBUS); - - gpadlTorndown = (struct vmbus_channel_gpadl_torndown *)hdr; - - /* - * Find the open msg, copy the result and signal/unblock the wait event - */ - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - - list_for_each(curr, &gVmbusConnection.ChannelMsgList) { -/* FIXME: this should probably use list_entry() instead */ - msgInfo = (struct vmbus_channel_msginfo *)curr; - requestHeader = (struct vmbus_channel_message_header *)msgInfo->Msg; - - if (requestHeader->MessageType == ChannelMessageGpadlTeardown) { - gpadlTeardown = (struct vmbus_channel_gpadl_teardown *)requestHeader; - - if (gpadlTorndown->Gpadl == gpadlTeardown->Gpadl) { - memcpy(&msgInfo->Response.GpadlTorndown, - gpadlTorndown, - sizeof(struct vmbus_channel_gpadl_torndown)); - osd_WaitEventSet(msgInfo->WaitEvent); - break; - } - } - } - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusChannelOnVersionResponse - Version response handler - * - * This is invoked when we received a response to our initiate contact request. - * Find the matching request, copy the response and signal the requesting - * thread. - */ -static void VmbusChannelOnVersionResponse( - struct vmbus_channel_message_header *hdr) -{ - struct list_head *curr; - struct vmbus_channel_msginfo *msgInfo; - struct vmbus_channel_message_header *requestHeader; - struct vmbus_channel_initiate_contact *initiate; - struct vmbus_channel_version_response *versionResponse; - unsigned long flags; - - DPRINT_ENTER(VMBUS); - - versionResponse = (struct vmbus_channel_version_response *)hdr; - spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); - - list_for_each(curr, &gVmbusConnection.ChannelMsgList) { -/* FIXME: this should probably use list_entry() instead */ - msgInfo = (struct vmbus_channel_msginfo *)curr; - requestHeader = (struct vmbus_channel_message_header *)msgInfo->Msg; - - if (requestHeader->MessageType == - ChannelMessageInitiateContact) { - initiate = (struct vmbus_channel_initiate_contact *)requestHeader; - memcpy(&msgInfo->Response.VersionResponse, - versionResponse, - sizeof(struct vmbus_channel_version_response)); - osd_WaitEventSet(msgInfo->WaitEvent); - } - } - spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); - - DPRINT_EXIT(VMBUS); -} - -/* Channel message dispatch table */ -static struct vmbus_channel_message_table_entry - gChannelMessageTable[ChannelMessageCount] = { - {ChannelMessageInvalid, NULL}, - {ChannelMessageOfferChannel, VmbusChannelOnOffer}, - {ChannelMessageRescindChannelOffer, VmbusChannelOnOfferRescind}, - {ChannelMessageRequestOffers, NULL}, - {ChannelMessageAllOffersDelivered, VmbusChannelOnOffersDelivered}, - {ChannelMessageOpenChannel, NULL}, - {ChannelMessageOpenChannelResult, VmbusChannelOnOpenResult}, - {ChannelMessageCloseChannel, NULL}, - {ChannelMessageGpadlHeader, NULL}, - {ChannelMessageGpadlBody, NULL}, - {ChannelMessageGpadlCreated, VmbusChannelOnGpadlCreated}, - {ChannelMessageGpadlTeardown, NULL}, - {ChannelMessageGpadlTorndown, VmbusChannelOnGpadlTorndown}, - {ChannelMessageRelIdReleased, NULL}, - {ChannelMessageInitiateContact, NULL}, - {ChannelMessageVersionResponse, VmbusChannelOnVersionResponse}, - {ChannelMessageUnload, NULL}, -}; - -/* - * VmbusOnChannelMessage - Handler for channel protocol messages. - * - * This is invoked in the vmbus worker thread context. - */ -void VmbusOnChannelMessage(void *Context) -{ - struct hv_message *msg = Context; - struct vmbus_channel_message_header *hdr; - int size; - - DPRINT_ENTER(VMBUS); - - hdr = (struct vmbus_channel_message_header *)msg->u.Payload; - size = msg->Header.PayloadSize; - - DPRINT_DBG(VMBUS, "message type %d size %d", hdr->MessageType, size); - - if (hdr->MessageType >= ChannelMessageCount) { - DPRINT_ERR(VMBUS, - "Received invalid channel message type %d size %d", - hdr->MessageType, size); - print_hex_dump_bytes("", DUMP_PREFIX_NONE, - (unsigned char *)msg->u.Payload, size); - kfree(msg); - return; - } - - if (gChannelMessageTable[hdr->MessageType].messageHandler) - gChannelMessageTable[hdr->MessageType].messageHandler(hdr); - else - DPRINT_ERR(VMBUS, "Unhandled channel message type %d", - hdr->MessageType); - - /* Free the msg that was allocated in VmbusOnMsgDPC() */ - kfree(msg); - DPRINT_EXIT(VMBUS); -} - -/* - * VmbusChannelRequestOffers - Send a request to get all our pending offers. - */ -int VmbusChannelRequestOffers(void) -{ - struct vmbus_channel_message_header *msg; - struct vmbus_channel_msginfo *msgInfo; - int ret; - - DPRINT_ENTER(VMBUS); - - msgInfo = kmalloc(sizeof(*msgInfo) + - sizeof(struct vmbus_channel_message_header), - GFP_KERNEL); - if (!msgInfo) - return -ENOMEM; - - msgInfo->WaitEvent = osd_WaitEventCreate(); - if (!msgInfo->WaitEvent) { - kfree(msgInfo); - return -ENOMEM; - } - - msg = (struct vmbus_channel_message_header *)msgInfo->Msg; - - msg->MessageType = ChannelMessageRequestOffers; - - /*SpinlockAcquire(gVmbusConnection.channelMsgLock); - INSERT_TAIL_LIST(&gVmbusConnection.channelMsgList, - &msgInfo->msgListEntry); - SpinlockRelease(gVmbusConnection.channelMsgLock);*/ - - ret = VmbusPostMessage(msg, - sizeof(struct vmbus_channel_message_header)); - if (ret != 0) { - DPRINT_ERR(VMBUS, "Unable to request offers - %d", ret); - - /*SpinlockAcquire(gVmbusConnection.channelMsgLock); - REMOVE_ENTRY_LIST(&msgInfo->msgListEntry); - SpinlockRelease(gVmbusConnection.channelMsgLock);*/ - - goto Cleanup; - } - /* osd_WaitEventWait(msgInfo->waitEvent); */ - - /*SpinlockAcquire(gVmbusConnection.channelMsgLock); - REMOVE_ENTRY_LIST(&msgInfo->msgListEntry); - SpinlockRelease(gVmbusConnection.channelMsgLock);*/ - - -Cleanup: - if (msgInfo) { - kfree(msgInfo->WaitEvent); - kfree(msgInfo); - } - - DPRINT_EXIT(VMBUS); - return ret; -} - -/* - * VmbusChannelReleaseUnattachedChannels - Release channels that are - * unattached/unconnected ie (no drivers associated) - */ -void VmbusChannelReleaseUnattachedChannels(void) -{ - struct vmbus_channel *channel, *pos; - struct vmbus_channel *start = NULL; - unsigned long flags; - - spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); - - list_for_each_entry_safe(channel, pos, &gVmbusConnection.ChannelList, - ListEntry) { - if (channel == start) - break; - - if (!channel->DeviceObject->Driver) { - list_del(&channel->ListEntry); - DPRINT_INFO(VMBUS, - "Releasing unattached device object %p", - channel->DeviceObject); - - VmbusChildDeviceRemove(channel->DeviceObject); - FreeVmbusChannel(channel); - } else { - if (!start) - start = channel; - } - } - - spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); -} - -/* eof */ diff --git a/drivers/staging/hv/ChannelMgmt.h b/drivers/staging/hv/ChannelMgmt.h deleted file mode 100644 index 9219199..0000000 --- a/drivers/staging/hv/ChannelMgmt.h +++ /dev/null @@ -1,320 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _CHANNEL_MGMT_H_ -#define _CHANNEL_MGMT_H_ - -#include -#include -#include "ring_buffer.h" -#include "VmbusChannelInterface.h" -#include "VmbusPacketFormat.h" - -/* Version 1 messages */ -enum vmbus_channel_message_type { - ChannelMessageInvalid = 0, - ChannelMessageOfferChannel = 1, - ChannelMessageRescindChannelOffer = 2, - ChannelMessageRequestOffers = 3, - ChannelMessageAllOffersDelivered = 4, - ChannelMessageOpenChannel = 5, - ChannelMessageOpenChannelResult = 6, - ChannelMessageCloseChannel = 7, - ChannelMessageGpadlHeader = 8, - ChannelMessageGpadlBody = 9, - ChannelMessageGpadlCreated = 10, - ChannelMessageGpadlTeardown = 11, - ChannelMessageGpadlTorndown = 12, - ChannelMessageRelIdReleased = 13, - ChannelMessageInitiateContact = 14, - ChannelMessageVersionResponse = 15, - ChannelMessageUnload = 16, -#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD - ChannelMessageViewRangeAdd = 17, - ChannelMessageViewRangeRemove = 18, -#endif - ChannelMessageCount -}; - -struct vmbus_channel_message_header { - enum vmbus_channel_message_type MessageType; - u32 Padding; -} __attribute__((packed)); - -/* Query VMBus Version parameters */ -struct vmbus_channel_query_vmbus_version { - struct vmbus_channel_message_header Header; - u32 Version; -} __attribute__((packed)); - -/* VMBus Version Supported parameters */ -struct vmbus_channel_version_supported { - struct vmbus_channel_message_header Header; - bool VersionSupported; -} __attribute__((packed)); - -/* Offer Channel parameters */ -struct vmbus_channel_offer_channel { - struct vmbus_channel_message_header Header; - struct vmbus_channel_offer Offer; - u32 ChildRelId; - u8 MonitorId; - bool MonitorAllocated; -} __attribute__((packed)); - -/* Rescind Offer parameters */ -struct vmbus_channel_rescind_offer { - struct vmbus_channel_message_header Header; - u32 ChildRelId; -} __attribute__((packed)); - -/* - * Request Offer -- no parameters, SynIC message contains the partition ID - * Set Snoop -- no parameters, SynIC message contains the partition ID - * Clear Snoop -- no parameters, SynIC message contains the partition ID - * All Offers Delivered -- no parameters, SynIC message contains the partition - * ID - * Flush Client -- no parameters, SynIC message contains the partition ID - */ - -/* Open Channel parameters */ -struct vmbus_channel_open_channel { - struct vmbus_channel_message_header Header; - - /* Identifies the specific VMBus channel that is being opened. */ - u32 ChildRelId; - - /* ID making a particular open request at a channel offer unique. */ - u32 OpenId; - - /* GPADL for the channel's ring buffer. */ - u32 RingBufferGpadlHandle; - - /* GPADL for the channel's server context save area. */ - u32 ServerContextAreaGpadlHandle; - - /* - * The upstream ring buffer begins at offset zero in the memory - * described by RingBufferGpadlHandle. The downstream ring buffer - * follows it at this offset (in pages). - */ - u32 DownstreamRingBufferPageOffset; - - /* User-specific data to be passed along to the server endpoint. */ - unsigned char UserData[MAX_USER_DEFINED_BYTES]; -} __attribute__((packed)); - -/* Open Channel Result parameters */ -struct vmbus_channel_open_result { - struct vmbus_channel_message_header Header; - u32 ChildRelId; - u32 OpenId; - u32 Status; -} __attribute__((packed)); - -/* Close channel parameters; */ -struct vmbus_channel_close_channel { - struct vmbus_channel_message_header Header; - u32 ChildRelId; -} __attribute__((packed)); - -/* Channel Message GPADL */ -#define GPADL_TYPE_RING_BUFFER 1 -#define GPADL_TYPE_SERVER_SAVE_AREA 2 -#define GPADL_TYPE_TRANSACTION 8 - -/* - * The number of PFNs in a GPADL message is defined by the number of - * pages that would be spanned by ByteCount and ByteOffset. If the - * implied number of PFNs won't fit in this packet, there will be a - * follow-up packet that contains more. - */ -struct vmbus_channel_gpadl_header { - struct vmbus_channel_message_header Header; - u32 ChildRelId; - u32 Gpadl; - u16 RangeBufLen; - u16 RangeCount; - struct gpa_range Range[0]; -} __attribute__((packed)); - -/* This is the followup packet that contains more PFNs. */ -struct vmbus_channel_gpadl_body { - struct vmbus_channel_message_header Header; - u32 MessageNumber; - u32 Gpadl; - u64 Pfn[0]; -} __attribute__((packed)); - -struct vmbus_channel_gpadl_created { - struct vmbus_channel_message_header Header; - u32 ChildRelId; - u32 Gpadl; - u32 CreationStatus; -} __attribute__((packed)); - -struct vmbus_channel_gpadl_teardown { - struct vmbus_channel_message_header Header; - u32 ChildRelId; - u32 Gpadl; -} __attribute__((packed)); - -struct vmbus_channel_gpadl_torndown { - struct vmbus_channel_message_header Header; - u32 Gpadl; -} __attribute__((packed)); - -#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD -struct vmbus_channel_view_range_add { - struct vmbus_channel_message_header Header; - PHYSICAL_ADDRESS ViewRangeBase; - u64 ViewRangeLength; - u32 ChildRelId; -} __attribute__((packed)); - -struct vmbus_channel_view_range_remove { - struct vmbus_channel_message_header Header; - PHYSICAL_ADDRESS ViewRangeBase; - u32 ChildRelId; -} __attribute__((packed)); -#endif - -struct vmbus_channel_relid_released { - struct vmbus_channel_message_header Header; - u32 ChildRelId; -} __attribute__((packed)); - -struct vmbus_channel_initiate_contact { - struct vmbus_channel_message_header Header; - u32 VMBusVersionRequested; - u32 Padding2; - u64 InterruptPage; - u64 MonitorPage1; - u64 MonitorPage2; -} __attribute__((packed)); - -struct vmbus_channel_version_response { - struct vmbus_channel_message_header Header; - bool VersionSupported; -} __attribute__((packed)); - -enum vmbus_channel_state { - CHANNEL_OFFER_STATE, - CHANNEL_OPENING_STATE, - CHANNEL_OPEN_STATE, -}; - -struct vmbus_channel { - struct list_head ListEntry; - - struct hv_device *DeviceObject; - - struct timer_list poll_timer; /* SA-111 workaround */ - - enum vmbus_channel_state State; - - struct vmbus_channel_offer_channel OfferMsg; - /* - * These are based on the OfferMsg.MonitorId. - * Save it here for easy access. - */ - u8 MonitorGroup; - u8 MonitorBit; - - u32 RingBufferGpadlHandle; - - /* Allocated memory for ring buffer */ - void *RingBufferPages; - u32 RingBufferPageCount; - RING_BUFFER_INFO Outbound; /* send to parent */ - RING_BUFFER_INFO Inbound; /* receive from parent */ - spinlock_t inbound_lock; - struct workqueue_struct *ControlWQ; - - /* Channel callback are invoked in this workqueue context */ - /* HANDLE dataWorkQueue; */ - - void (*OnChannelCallback)(void *context); - void *ChannelCallbackContext; -}; - -struct vmbus_channel_debug_info { - u32 RelId; - enum vmbus_channel_state State; - struct hv_guid InterfaceType; - struct hv_guid InterfaceInstance; - u32 MonitorId; - u32 ServerMonitorPending; - u32 ServerMonitorLatency; - u32 ServerMonitorConnectionId; - u32 ClientMonitorPending; - u32 ClientMonitorLatency; - u32 ClientMonitorConnectionId; - - RING_BUFFER_DEBUG_INFO Inbound; - RING_BUFFER_DEBUG_INFO Outbound; -}; - -/* - * Represents each channel msg on the vmbus connection This is a - * variable-size data structure depending on the msg type itself - */ -struct vmbus_channel_msginfo { - /* Bookkeeping stuff */ - struct list_head MsgListEntry; - - /* So far, this is only used to handle gpadl body message */ - struct list_head SubMsgList; - - /* Synchronize the request/response if needed */ - struct osd_waitevent *WaitEvent; - - union { - struct vmbus_channel_version_supported VersionSupported; - struct vmbus_channel_open_result OpenResult; - struct vmbus_channel_gpadl_torndown GpadlTorndown; - struct vmbus_channel_gpadl_created GpadlCreated; - struct vmbus_channel_version_response VersionResponse; - } Response; - - u32 MessageSize; - /* - * The channel message that goes out on the "wire". - * It will contain at minimum the VMBUS_CHANNEL_MESSAGE_HEADER header - */ - unsigned char Msg[0]; -}; - - -struct vmbus_channel *AllocVmbusChannel(void); - -void FreeVmbusChannel(struct vmbus_channel *Channel); - -void VmbusOnChannelMessage(void *Context); - -int VmbusChannelRequestOffers(void); - -void VmbusChannelReleaseUnattachedChannels(void); - -#endif /* _CHANNEL_MGMT_H_ */ diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 685a320..2f9ecd2 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -6,7 +6,7 @@ obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o hv_vmbus-objs := vmbus_drv.o osd.o \ vmbus.o hv.o connection.o channel.o \ - ChannelMgmt.o ChannelInterface.o ring_buffer.o + channel_mgmt.o ChannelInterface.o ring_buffer.o hv_storvsc-objs := storvsc_drv.o storvsc.o hv_blkvsc-objs := blkvsc_drv.o blkvsc.o hv_netvsc-objs := netvsc_drv.o netvsc.o rndis_filter.o diff --git a/drivers/staging/hv/VmbusPrivate.h b/drivers/staging/hv/VmbusPrivate.h index d73baff..6e82183 100644 --- a/drivers/staging/hv/VmbusPrivate.h +++ b/drivers/staging/hv/VmbusPrivate.h @@ -28,7 +28,7 @@ #include "hv.h" #include "VmbusApi.h" #include "channel.h" -#include "ChannelMgmt.h" +#include "channel_mgmt.h" #include "ChannelInterface.h" #include "ring_buffer.h" #include diff --git a/drivers/staging/hv/channel.h b/drivers/staging/hv/channel.h index 6b283ed..acb2c55 100644 --- a/drivers/staging/hv/channel.h +++ b/drivers/staging/hv/channel.h @@ -25,7 +25,7 @@ #ifndef _CHANNEL_H_ #define _CHANNEL_H_ -#include "ChannelMgmt.h" +#include "channel_mgmt.h" /* The format must be the same as struct vmdata_gpa_direct */ struct VMBUS_CHANNEL_PACKET_PAGE_BUFFER { diff --git a/drivers/staging/hv/channel_mgmt.c b/drivers/staging/hv/channel_mgmt.c new file mode 100644 index 0000000..3698230 --- /dev/null +++ b/drivers/staging/hv/channel_mgmt.c @@ -0,0 +1,856 @@ +/* + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + */ +#include +#include +#include +#include +#include +#include "osd.h" +#include "logging.h" +#include "VmbusPrivate.h" +#include "utils.h" + +struct vmbus_channel_message_table_entry { + enum vmbus_channel_message_type messageType; + void (*messageHandler)(struct vmbus_channel_message_header *msg); +}; + +#define MAX_MSG_TYPES 2 +#define MAX_NUM_DEVICE_CLASSES_SUPPORTED 6 + +static const struct hv_guid + gSupportedDeviceClasses[MAX_NUM_DEVICE_CLASSES_SUPPORTED] = { + /* {ba6163d9-04a1-4d29-b605-72e2ffb1dc7f} */ + /* Storage - SCSI */ + { + .data = { + 0xd9, 0x63, 0x61, 0xba, 0xa1, 0x04, 0x29, 0x4d, + 0xb6, 0x05, 0x72, 0xe2, 0xff, 0xb1, 0xdc, 0x7f + } + }, + + /* {F8615163-DF3E-46c5-913F-F2D2F965ED0E} */ + /* Network */ + { + .data = { + 0x63, 0x51, 0x61, 0xF8, 0x3E, 0xDF, 0xc5, 0x46, + 0x91, 0x3F, 0xF2, 0xD2, 0xF9, 0x65, 0xED, 0x0E + } + }, + + /* {CFA8B69E-5B4A-4cc0-B98B-8BA1A1F3F95A} */ + /* Input */ + { + .data = { + 0x9E, 0xB6, 0xA8, 0xCF, 0x4A, 0x5B, 0xc0, 0x4c, + 0xB9, 0x8B, 0x8B, 0xA1, 0xA1, 0xF3, 0xF9, 0x5A + } + }, + + /* {32412632-86cb-44a2-9b5c-50d1417354f5} */ + /* IDE */ + { + .data = { + 0x32, 0x26, 0x41, 0x32, 0xcb, 0x86, 0xa2, 0x44, + 0x9b, 0x5c, 0x50, 0xd1, 0x41, 0x73, 0x54, 0xf5 + } + }, + /* 0E0B6031-5213-4934-818B-38D90CED39DB */ + /* Shutdown */ + { + .data = { + 0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49, + 0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB + } + }, + /* {9527E630-D0AE-497b-ADCE-E80AB0175CAF} */ + /* TimeSync */ + { + .data = { + 0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49, + 0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf + } + }, +}; + + +/** + * prep_negotiate_resp() - Create default response for Hyper-V Negotiate message + * @icmsghdrp: Pointer to msg header structure + * @icmsg_negotiate: Pointer to negotiate message structure + * @buf: Raw buffer channel data + * + * @icmsghdrp is of type &struct icmsg_hdr. + * @negop is of type &struct icmsg_negotiate. + * Set up and fill in default negotiate response message. This response can + * come from both the vmbus driver and the hv_utils driver. The current api + * will respond properly to both Windows 2008 and Windows 2008-R2 operating + * systems. + * + * Mainly used by Hyper-V drivers. + */ +void prep_negotiate_resp(struct icmsg_hdr *icmsghdrp, + struct icmsg_negotiate *negop, + u8 *buf) +{ + if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { + icmsghdrp->icmsgsize = 0x10; + + negop = (struct icmsg_negotiate *)&buf[ + sizeof(struct vmbuspipe_hdr) + + sizeof(struct icmsg_hdr)]; + + if (negop->icframe_vercnt == 2 && + negop->icversion_data[1].major == 3) { + negop->icversion_data[0].major = 3; + negop->icversion_data[0].minor = 0; + negop->icversion_data[1].major = 3; + negop->icversion_data[1].minor = 0; + } else { + negop->icversion_data[0].major = 1; + negop->icversion_data[0].minor = 0; + negop->icversion_data[1].major = 1; + negop->icversion_data[1].minor = 0; + } + + negop->icframe_vercnt = 1; + negop->icmsg_vercnt = 1; + } +} +EXPORT_SYMBOL(prep_negotiate_resp); + +/** + * chn_cb_negotiate() - Default handler for non IDE/SCSI/NETWORK + * Hyper-V requests + * @context: Pointer to argument structure. + * + * Set up the default handler for non device driver specific requests + * from Hyper-V. This stub responds to the default negotiate messages + * that come in for every non IDE/SCSI/Network request. + * This behavior is normally overwritten in the hv_utils driver. That + * driver handles requests like gracefull shutdown, heartbeats etc. + * + * Mainly used by Hyper-V drivers. + */ +void chn_cb_negotiate(void *context) +{ + struct vmbus_channel *channel = context; + u8 *buf; + u32 buflen, recvlen; + u64 requestid; + + struct icmsg_hdr *icmsghdrp; + struct icmsg_negotiate *negop = NULL; + + buflen = PAGE_SIZE; + buf = kmalloc(buflen, GFP_ATOMIC); + + VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); + + if (recvlen > 0) { + icmsghdrp = (struct icmsg_hdr *)&buf[ + sizeof(struct vmbuspipe_hdr)]; + + prep_negotiate_resp(icmsghdrp, negop, buf); + + icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION + | ICMSGHDRFLAG_RESPONSE; + + VmbusChannelSendPacket(channel, buf, + recvlen, requestid, + VmbusPacketTypeDataInBand, 0); + } + + kfree(buf); +} +EXPORT_SYMBOL(chn_cb_negotiate); + +/* + * Function table used for message responses for non IDE/SCSI/Network type + * messages. (Such as KVP/Shutdown etc) + */ +struct hyperv_service_callback hv_cb_utils[MAX_MSG_TYPES] = { + /* 0E0B6031-5213-4934-818B-38D90CED39DB */ + /* Shutdown */ + { + .msg_type = HV_SHUTDOWN_MSG, + .data = { + 0x31, 0x60, 0x0B, 0X0E, 0x13, 0x52, 0x34, 0x49, + 0x81, 0x8B, 0x38, 0XD9, 0x0C, 0xED, 0x39, 0xDB + }, + .callback = chn_cb_negotiate, + .log_msg = "Shutdown channel functionality initialized" + }, + + /* {9527E630-D0AE-497b-ADCE-E80AB0175CAF} */ + /* TimeSync */ + { + .msg_type = HV_TIMESYNC_MSG, + .data = { + 0x30, 0xe6, 0x27, 0x95, 0xae, 0xd0, 0x7b, 0x49, + 0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf + }, + .callback = chn_cb_negotiate, + .log_msg = "Timesync channel functionality initialized" + }, +}; +EXPORT_SYMBOL(hv_cb_utils); + +/* + * AllocVmbusChannel - Allocate and initialize a vmbus channel object + */ +struct vmbus_channel *AllocVmbusChannel(void) +{ + struct vmbus_channel *channel; + + channel = kzalloc(sizeof(*channel), GFP_ATOMIC); + if (!channel) + return NULL; + + spin_lock_init(&channel->inbound_lock); + + init_timer(&channel->poll_timer); + channel->poll_timer.data = (unsigned long)channel; + channel->poll_timer.function = VmbusChannelOnTimer; + + channel->ControlWQ = create_workqueue("hv_vmbus_ctl"); + if (!channel->ControlWQ) { + kfree(channel); + return NULL; + } + + return channel; +} + +/* + * ReleaseVmbusChannel - Release the vmbus channel object itself + */ +static inline void ReleaseVmbusChannel(void *context) +{ + struct vmbus_channel *channel = context; + + DPRINT_ENTER(VMBUS); + + DPRINT_DBG(VMBUS, "releasing channel (%p)", channel); + destroy_workqueue(channel->ControlWQ); + DPRINT_DBG(VMBUS, "channel released (%p)", channel); + + kfree(channel); + + DPRINT_EXIT(VMBUS); +} + +/* + * FreeVmbusChannel - Release the resources used by the vmbus channel object + */ +void FreeVmbusChannel(struct vmbus_channel *Channel) +{ + del_timer_sync(&Channel->poll_timer); + + /* + * We have to release the channel's workqueue/thread in the vmbus's + * workqueue/thread context + * ie we can't destroy ourselves. + */ + osd_schedule_callback(gVmbusConnection.WorkQueue, ReleaseVmbusChannel, + Channel); +} + +/* + * VmbusChannelProcessOffer - Process the offer by creating a channel/device + * associated with this offer + */ +static void VmbusChannelProcessOffer(void *context) +{ + struct vmbus_channel *newChannel = context; + struct vmbus_channel *channel; + bool fNew = true; + int ret; + int cnt; + unsigned long flags; + + DPRINT_ENTER(VMBUS); + + /* Make sure this is a new offer */ + spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); + + list_for_each_entry(channel, &gVmbusConnection.ChannelList, ListEntry) { + if (!memcmp(&channel->OfferMsg.Offer.InterfaceType, + &newChannel->OfferMsg.Offer.InterfaceType, + sizeof(struct hv_guid)) && + !memcmp(&channel->OfferMsg.Offer.InterfaceInstance, + &newChannel->OfferMsg.Offer.InterfaceInstance, + sizeof(struct hv_guid))) { + fNew = false; + break; + } + } + + if (fNew) + list_add_tail(&newChannel->ListEntry, + &gVmbusConnection.ChannelList); + + spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); + + if (!fNew) { + DPRINT_DBG(VMBUS, "Ignoring duplicate offer for relid (%d)", + newChannel->OfferMsg.ChildRelId); + FreeVmbusChannel(newChannel); + DPRINT_EXIT(VMBUS); + return; + } + + /* + * Start the process of binding this offer to the driver + * We need to set the DeviceObject field before calling + * VmbusChildDeviceAdd() + */ + newChannel->DeviceObject = VmbusChildDeviceCreate( + &newChannel->OfferMsg.Offer.InterfaceType, + &newChannel->OfferMsg.Offer.InterfaceInstance, + newChannel); + + DPRINT_DBG(VMBUS, "child device object allocated - %p", + newChannel->DeviceObject); + + /* + * Add the new device to the bus. This will kick off device-driver + * binding which eventually invokes the device driver's AddDevice() + * method. + */ + ret = VmbusChildDeviceAdd(newChannel->DeviceObject); + if (ret != 0) { + DPRINT_ERR(VMBUS, + "unable to add child device object (relid %d)", + newChannel->OfferMsg.ChildRelId); + + spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); + list_del(&newChannel->ListEntry); + spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); + + FreeVmbusChannel(newChannel); + } else { + /* + * This state is used to indicate a successful open + * so that when we do close the channel normally, we + * can cleanup properly + */ + newChannel->State = CHANNEL_OPEN_STATE; + cnt = 0; + + while (cnt != MAX_MSG_TYPES) { + if (memcmp(&newChannel->OfferMsg.Offer.InterfaceType, + &hv_cb_utils[cnt].data, + sizeof(struct hv_guid)) == 0) { + DPRINT_INFO(VMBUS, "%s", + hv_cb_utils[cnt].log_msg); + + if (VmbusChannelOpen(newChannel, 2 * PAGE_SIZE, + 2 * PAGE_SIZE, NULL, 0, + hv_cb_utils[cnt].callback, + newChannel) == 0) + hv_cb_utils[cnt].channel = newChannel; + } + cnt++; + } + } + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusChannelProcessRescindOffer - Rescind the offer by initiating a device removal + */ +static void VmbusChannelProcessRescindOffer(void *context) +{ + struct vmbus_channel *channel = context; + + DPRINT_ENTER(VMBUS); + VmbusChildDeviceRemove(channel->DeviceObject); + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusChannelOnOffer - Handler for channel offers from vmbus in parent partition. + * + * We ignore all offers except network and storage offers. For each network and + * storage offers, we create a channel object and queue a work item to the + * channel object to process the offer synchronously + */ +static void VmbusChannelOnOffer(struct vmbus_channel_message_header *hdr) +{ + struct vmbus_channel_offer_channel *offer; + struct vmbus_channel *newChannel; + struct hv_guid *guidType; + struct hv_guid *guidInstance; + int i; + int fSupported = 0; + + DPRINT_ENTER(VMBUS); + + offer = (struct vmbus_channel_offer_channel *)hdr; + for (i = 0; i < MAX_NUM_DEVICE_CLASSES_SUPPORTED; i++) { + if (memcmp(&offer->Offer.InterfaceType, + &gSupportedDeviceClasses[i], sizeof(struct hv_guid)) == 0) { + fSupported = 1; + break; + } + } + + if (!fSupported) { + DPRINT_DBG(VMBUS, "Ignoring channel offer notification for " + "child relid %d", offer->ChildRelId); + DPRINT_EXIT(VMBUS); + return; + } + + guidType = &offer->Offer.InterfaceType; + guidInstance = &offer->Offer.InterfaceInstance; + + DPRINT_INFO(VMBUS, "Channel offer notification - " + "child relid %d monitor id %d allocated %d, " + "type {%02x%02x%02x%02x-%02x%02x-%02x%02x-" + "%02x%02x%02x%02x%02x%02x%02x%02x} " + "instance {%02x%02x%02x%02x-%02x%02x-%02x%02x-" + "%02x%02x%02x%02x%02x%02x%02x%02x}", + offer->ChildRelId, offer->MonitorId, + offer->MonitorAllocated, + guidType->data[3], guidType->data[2], + guidType->data[1], guidType->data[0], + guidType->data[5], guidType->data[4], + guidType->data[7], guidType->data[6], + guidType->data[8], guidType->data[9], + guidType->data[10], guidType->data[11], + guidType->data[12], guidType->data[13], + guidType->data[14], guidType->data[15], + guidInstance->data[3], guidInstance->data[2], + guidInstance->data[1], guidInstance->data[0], + guidInstance->data[5], guidInstance->data[4], + guidInstance->data[7], guidInstance->data[6], + guidInstance->data[8], guidInstance->data[9], + guidInstance->data[10], guidInstance->data[11], + guidInstance->data[12], guidInstance->data[13], + guidInstance->data[14], guidInstance->data[15]); + + /* Allocate the channel object and save this offer. */ + newChannel = AllocVmbusChannel(); + if (!newChannel) { + DPRINT_ERR(VMBUS, "unable to allocate channel object"); + return; + } + + DPRINT_DBG(VMBUS, "channel object allocated - %p", newChannel); + + memcpy(&newChannel->OfferMsg, offer, + sizeof(struct vmbus_channel_offer_channel)); + newChannel->MonitorGroup = (u8)offer->MonitorId / 32; + newChannel->MonitorBit = (u8)offer->MonitorId % 32; + + /* TODO: Make sure the offer comes from our parent partition */ + osd_schedule_callback(newChannel->ControlWQ, VmbusChannelProcessOffer, + newChannel); + + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusChannelOnOfferRescind - Rescind offer handler. + * + * We queue a work item to process this offer synchronously + */ +static void VmbusChannelOnOfferRescind(struct vmbus_channel_message_header *hdr) +{ + struct vmbus_channel_rescind_offer *rescind; + struct vmbus_channel *channel; + + DPRINT_ENTER(VMBUS); + + rescind = (struct vmbus_channel_rescind_offer *)hdr; + channel = GetChannelFromRelId(rescind->ChildRelId); + if (channel == NULL) { + DPRINT_DBG(VMBUS, "channel not found for relId %d", + rescind->ChildRelId); + return; + } + + osd_schedule_callback(channel->ControlWQ, + VmbusChannelProcessRescindOffer, + channel); + + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusChannelOnOffersDelivered - This is invoked when all offers have been delivered. + * + * Nothing to do here. + */ +static void VmbusChannelOnOffersDelivered( + struct vmbus_channel_message_header *hdr) +{ + DPRINT_ENTER(VMBUS); + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusChannelOnOpenResult - Open result handler. + * + * This is invoked when we received a response to our channel open request. + * Find the matching request, copy the response and signal the requesting + * thread. + */ +static void VmbusChannelOnOpenResult(struct vmbus_channel_message_header *hdr) +{ + struct vmbus_channel_open_result *result; + struct list_head *curr; + struct vmbus_channel_msginfo *msgInfo; + struct vmbus_channel_message_header *requestHeader; + struct vmbus_channel_open_channel *openMsg; + unsigned long flags; + + DPRINT_ENTER(VMBUS); + + result = (struct vmbus_channel_open_result *)hdr; + DPRINT_DBG(VMBUS, "vmbus open result - %d", result->Status); + + /* + * Find the open msg, copy the result and signal/unblock the wait event + */ + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + + list_for_each(curr, &gVmbusConnection.ChannelMsgList) { +/* FIXME: this should probably use list_entry() instead */ + msgInfo = (struct vmbus_channel_msginfo *)curr; + requestHeader = (struct vmbus_channel_message_header *)msgInfo->Msg; + + if (requestHeader->MessageType == ChannelMessageOpenChannel) { + openMsg = (struct vmbus_channel_open_channel *)msgInfo->Msg; + if (openMsg->ChildRelId == result->ChildRelId && + openMsg->OpenId == result->OpenId) { + memcpy(&msgInfo->Response.OpenResult, + result, + sizeof(struct vmbus_channel_open_result)); + osd_WaitEventSet(msgInfo->WaitEvent); + break; + } + } + } + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusChannelOnGpadlCreated - GPADL created handler. + * + * This is invoked when we received a response to our gpadl create request. + * Find the matching request, copy the response and signal the requesting + * thread. + */ +static void VmbusChannelOnGpadlCreated(struct vmbus_channel_message_header *hdr) +{ + struct vmbus_channel_gpadl_created *gpadlCreated; + struct list_head *curr; + struct vmbus_channel_msginfo *msgInfo; + struct vmbus_channel_message_header *requestHeader; + struct vmbus_channel_gpadl_header *gpadlHeader; + unsigned long flags; + + DPRINT_ENTER(VMBUS); + + gpadlCreated = (struct vmbus_channel_gpadl_created *)hdr; + DPRINT_DBG(VMBUS, "vmbus gpadl created result - %d", + gpadlCreated->CreationStatus); + + /* + * Find the establish msg, copy the result and signal/unblock the wait + * event + */ + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + + list_for_each(curr, &gVmbusConnection.ChannelMsgList) { +/* FIXME: this should probably use list_entry() instead */ + msgInfo = (struct vmbus_channel_msginfo *)curr; + requestHeader = (struct vmbus_channel_message_header *)msgInfo->Msg; + + if (requestHeader->MessageType == ChannelMessageGpadlHeader) { + gpadlHeader = (struct vmbus_channel_gpadl_header *)requestHeader; + + if ((gpadlCreated->ChildRelId == + gpadlHeader->ChildRelId) && + (gpadlCreated->Gpadl == gpadlHeader->Gpadl)) { + memcpy(&msgInfo->Response.GpadlCreated, + gpadlCreated, + sizeof(struct vmbus_channel_gpadl_created)); + osd_WaitEventSet(msgInfo->WaitEvent); + break; + } + } + } + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusChannelOnGpadlTorndown - GPADL torndown handler. + * + * This is invoked when we received a response to our gpadl teardown request. + * Find the matching request, copy the response and signal the requesting + * thread. + */ +static void VmbusChannelOnGpadlTorndown( + struct vmbus_channel_message_header *hdr) +{ + struct vmbus_channel_gpadl_torndown *gpadlTorndown; + struct list_head *curr; + struct vmbus_channel_msginfo *msgInfo; + struct vmbus_channel_message_header *requestHeader; + struct vmbus_channel_gpadl_teardown *gpadlTeardown; + unsigned long flags; + + DPRINT_ENTER(VMBUS); + + gpadlTorndown = (struct vmbus_channel_gpadl_torndown *)hdr; + + /* + * Find the open msg, copy the result and signal/unblock the wait event + */ + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + + list_for_each(curr, &gVmbusConnection.ChannelMsgList) { +/* FIXME: this should probably use list_entry() instead */ + msgInfo = (struct vmbus_channel_msginfo *)curr; + requestHeader = (struct vmbus_channel_message_header *)msgInfo->Msg; + + if (requestHeader->MessageType == ChannelMessageGpadlTeardown) { + gpadlTeardown = (struct vmbus_channel_gpadl_teardown *)requestHeader; + + if (gpadlTorndown->Gpadl == gpadlTeardown->Gpadl) { + memcpy(&msgInfo->Response.GpadlTorndown, + gpadlTorndown, + sizeof(struct vmbus_channel_gpadl_torndown)); + osd_WaitEventSet(msgInfo->WaitEvent); + break; + } + } + } + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusChannelOnVersionResponse - Version response handler + * + * This is invoked when we received a response to our initiate contact request. + * Find the matching request, copy the response and signal the requesting + * thread. + */ +static void VmbusChannelOnVersionResponse( + struct vmbus_channel_message_header *hdr) +{ + struct list_head *curr; + struct vmbus_channel_msginfo *msgInfo; + struct vmbus_channel_message_header *requestHeader; + struct vmbus_channel_initiate_contact *initiate; + struct vmbus_channel_version_response *versionResponse; + unsigned long flags; + + DPRINT_ENTER(VMBUS); + + versionResponse = (struct vmbus_channel_version_response *)hdr; + spin_lock_irqsave(&gVmbusConnection.channelmsg_lock, flags); + + list_for_each(curr, &gVmbusConnection.ChannelMsgList) { +/* FIXME: this should probably use list_entry() instead */ + msgInfo = (struct vmbus_channel_msginfo *)curr; + requestHeader = (struct vmbus_channel_message_header *)msgInfo->Msg; + + if (requestHeader->MessageType == + ChannelMessageInitiateContact) { + initiate = (struct vmbus_channel_initiate_contact *)requestHeader; + memcpy(&msgInfo->Response.VersionResponse, + versionResponse, + sizeof(struct vmbus_channel_version_response)); + osd_WaitEventSet(msgInfo->WaitEvent); + } + } + spin_unlock_irqrestore(&gVmbusConnection.channelmsg_lock, flags); + + DPRINT_EXIT(VMBUS); +} + +/* Channel message dispatch table */ +static struct vmbus_channel_message_table_entry + gChannelMessageTable[ChannelMessageCount] = { + {ChannelMessageInvalid, NULL}, + {ChannelMessageOfferChannel, VmbusChannelOnOffer}, + {ChannelMessageRescindChannelOffer, VmbusChannelOnOfferRescind}, + {ChannelMessageRequestOffers, NULL}, + {ChannelMessageAllOffersDelivered, VmbusChannelOnOffersDelivered}, + {ChannelMessageOpenChannel, NULL}, + {ChannelMessageOpenChannelResult, VmbusChannelOnOpenResult}, + {ChannelMessageCloseChannel, NULL}, + {ChannelMessageGpadlHeader, NULL}, + {ChannelMessageGpadlBody, NULL}, + {ChannelMessageGpadlCreated, VmbusChannelOnGpadlCreated}, + {ChannelMessageGpadlTeardown, NULL}, + {ChannelMessageGpadlTorndown, VmbusChannelOnGpadlTorndown}, + {ChannelMessageRelIdReleased, NULL}, + {ChannelMessageInitiateContact, NULL}, + {ChannelMessageVersionResponse, VmbusChannelOnVersionResponse}, + {ChannelMessageUnload, NULL}, +}; + +/* + * VmbusOnChannelMessage - Handler for channel protocol messages. + * + * This is invoked in the vmbus worker thread context. + */ +void VmbusOnChannelMessage(void *Context) +{ + struct hv_message *msg = Context; + struct vmbus_channel_message_header *hdr; + int size; + + DPRINT_ENTER(VMBUS); + + hdr = (struct vmbus_channel_message_header *)msg->u.Payload; + size = msg->Header.PayloadSize; + + DPRINT_DBG(VMBUS, "message type %d size %d", hdr->MessageType, size); + + if (hdr->MessageType >= ChannelMessageCount) { + DPRINT_ERR(VMBUS, + "Received invalid channel message type %d size %d", + hdr->MessageType, size); + print_hex_dump_bytes("", DUMP_PREFIX_NONE, + (unsigned char *)msg->u.Payload, size); + kfree(msg); + return; + } + + if (gChannelMessageTable[hdr->MessageType].messageHandler) + gChannelMessageTable[hdr->MessageType].messageHandler(hdr); + else + DPRINT_ERR(VMBUS, "Unhandled channel message type %d", + hdr->MessageType); + + /* Free the msg that was allocated in VmbusOnMsgDPC() */ + kfree(msg); + DPRINT_EXIT(VMBUS); +} + +/* + * VmbusChannelRequestOffers - Send a request to get all our pending offers. + */ +int VmbusChannelRequestOffers(void) +{ + struct vmbus_channel_message_header *msg; + struct vmbus_channel_msginfo *msgInfo; + int ret; + + DPRINT_ENTER(VMBUS); + + msgInfo = kmalloc(sizeof(*msgInfo) + + sizeof(struct vmbus_channel_message_header), + GFP_KERNEL); + if (!msgInfo) + return -ENOMEM; + + msgInfo->WaitEvent = osd_WaitEventCreate(); + if (!msgInfo->WaitEvent) { + kfree(msgInfo); + return -ENOMEM; + } + + msg = (struct vmbus_channel_message_header *)msgInfo->Msg; + + msg->MessageType = ChannelMessageRequestOffers; + + /*SpinlockAcquire(gVmbusConnection.channelMsgLock); + INSERT_TAIL_LIST(&gVmbusConnection.channelMsgList, + &msgInfo->msgListEntry); + SpinlockRelease(gVmbusConnection.channelMsgLock);*/ + + ret = VmbusPostMessage(msg, + sizeof(struct vmbus_channel_message_header)); + if (ret != 0) { + DPRINT_ERR(VMBUS, "Unable to request offers - %d", ret); + + /*SpinlockAcquire(gVmbusConnection.channelMsgLock); + REMOVE_ENTRY_LIST(&msgInfo->msgListEntry); + SpinlockRelease(gVmbusConnection.channelMsgLock);*/ + + goto Cleanup; + } + /* osd_WaitEventWait(msgInfo->waitEvent); */ + + /*SpinlockAcquire(gVmbusConnection.channelMsgLock); + REMOVE_ENTRY_LIST(&msgInfo->msgListEntry); + SpinlockRelease(gVmbusConnection.channelMsgLock);*/ + + +Cleanup: + if (msgInfo) { + kfree(msgInfo->WaitEvent); + kfree(msgInfo); + } + + DPRINT_EXIT(VMBUS); + return ret; +} + +/* + * VmbusChannelReleaseUnattachedChannels - Release channels that are + * unattached/unconnected ie (no drivers associated) + */ +void VmbusChannelReleaseUnattachedChannels(void) +{ + struct vmbus_channel *channel, *pos; + struct vmbus_channel *start = NULL; + unsigned long flags; + + spin_lock_irqsave(&gVmbusConnection.channel_lock, flags); + + list_for_each_entry_safe(channel, pos, &gVmbusConnection.ChannelList, + ListEntry) { + if (channel == start) + break; + + if (!channel->DeviceObject->Driver) { + list_del(&channel->ListEntry); + DPRINT_INFO(VMBUS, + "Releasing unattached device object %p", + channel->DeviceObject); + + VmbusChildDeviceRemove(channel->DeviceObject); + FreeVmbusChannel(channel); + } else { + if (!start) + start = channel; + } + } + + spin_unlock_irqrestore(&gVmbusConnection.channel_lock, flags); +} + +/* eof */ diff --git a/drivers/staging/hv/channel_mgmt.h b/drivers/staging/hv/channel_mgmt.h new file mode 100644 index 0000000..9219199 --- /dev/null +++ b/drivers/staging/hv/channel_mgmt.h @@ -0,0 +1,320 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _CHANNEL_MGMT_H_ +#define _CHANNEL_MGMT_H_ + +#include +#include +#include "ring_buffer.h" +#include "VmbusChannelInterface.h" +#include "VmbusPacketFormat.h" + +/* Version 1 messages */ +enum vmbus_channel_message_type { + ChannelMessageInvalid = 0, + ChannelMessageOfferChannel = 1, + ChannelMessageRescindChannelOffer = 2, + ChannelMessageRequestOffers = 3, + ChannelMessageAllOffersDelivered = 4, + ChannelMessageOpenChannel = 5, + ChannelMessageOpenChannelResult = 6, + ChannelMessageCloseChannel = 7, + ChannelMessageGpadlHeader = 8, + ChannelMessageGpadlBody = 9, + ChannelMessageGpadlCreated = 10, + ChannelMessageGpadlTeardown = 11, + ChannelMessageGpadlTorndown = 12, + ChannelMessageRelIdReleased = 13, + ChannelMessageInitiateContact = 14, + ChannelMessageVersionResponse = 15, + ChannelMessageUnload = 16, +#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD + ChannelMessageViewRangeAdd = 17, + ChannelMessageViewRangeRemove = 18, +#endif + ChannelMessageCount +}; + +struct vmbus_channel_message_header { + enum vmbus_channel_message_type MessageType; + u32 Padding; +} __attribute__((packed)); + +/* Query VMBus Version parameters */ +struct vmbus_channel_query_vmbus_version { + struct vmbus_channel_message_header Header; + u32 Version; +} __attribute__((packed)); + +/* VMBus Version Supported parameters */ +struct vmbus_channel_version_supported { + struct vmbus_channel_message_header Header; + bool VersionSupported; +} __attribute__((packed)); + +/* Offer Channel parameters */ +struct vmbus_channel_offer_channel { + struct vmbus_channel_message_header Header; + struct vmbus_channel_offer Offer; + u32 ChildRelId; + u8 MonitorId; + bool MonitorAllocated; +} __attribute__((packed)); + +/* Rescind Offer parameters */ +struct vmbus_channel_rescind_offer { + struct vmbus_channel_message_header Header; + u32 ChildRelId; +} __attribute__((packed)); + +/* + * Request Offer -- no parameters, SynIC message contains the partition ID + * Set Snoop -- no parameters, SynIC message contains the partition ID + * Clear Snoop -- no parameters, SynIC message contains the partition ID + * All Offers Delivered -- no parameters, SynIC message contains the partition + * ID + * Flush Client -- no parameters, SynIC message contains the partition ID + */ + +/* Open Channel parameters */ +struct vmbus_channel_open_channel { + struct vmbus_channel_message_header Header; + + /* Identifies the specific VMBus channel that is being opened. */ + u32 ChildRelId; + + /* ID making a particular open request at a channel offer unique. */ + u32 OpenId; + + /* GPADL for the channel's ring buffer. */ + u32 RingBufferGpadlHandle; + + /* GPADL for the channel's server context save area. */ + u32 ServerContextAreaGpadlHandle; + + /* + * The upstream ring buffer begins at offset zero in the memory + * described by RingBufferGpadlHandle. The downstream ring buffer + * follows it at this offset (in pages). + */ + u32 DownstreamRingBufferPageOffset; + + /* User-specific data to be passed along to the server endpoint. */ + unsigned char UserData[MAX_USER_DEFINED_BYTES]; +} __attribute__((packed)); + +/* Open Channel Result parameters */ +struct vmbus_channel_open_result { + struct vmbus_channel_message_header Header; + u32 ChildRelId; + u32 OpenId; + u32 Status; +} __attribute__((packed)); + +/* Close channel parameters; */ +struct vmbus_channel_close_channel { + struct vmbus_channel_message_header Header; + u32 ChildRelId; +} __attribute__((packed)); + +/* Channel Message GPADL */ +#define GPADL_TYPE_RING_BUFFER 1 +#define GPADL_TYPE_SERVER_SAVE_AREA 2 +#define GPADL_TYPE_TRANSACTION 8 + +/* + * The number of PFNs in a GPADL message is defined by the number of + * pages that would be spanned by ByteCount and ByteOffset. If the + * implied number of PFNs won't fit in this packet, there will be a + * follow-up packet that contains more. + */ +struct vmbus_channel_gpadl_header { + struct vmbus_channel_message_header Header; + u32 ChildRelId; + u32 Gpadl; + u16 RangeBufLen; + u16 RangeCount; + struct gpa_range Range[0]; +} __attribute__((packed)); + +/* This is the followup packet that contains more PFNs. */ +struct vmbus_channel_gpadl_body { + struct vmbus_channel_message_header Header; + u32 MessageNumber; + u32 Gpadl; + u64 Pfn[0]; +} __attribute__((packed)); + +struct vmbus_channel_gpadl_created { + struct vmbus_channel_message_header Header; + u32 ChildRelId; + u32 Gpadl; + u32 CreationStatus; +} __attribute__((packed)); + +struct vmbus_channel_gpadl_teardown { + struct vmbus_channel_message_header Header; + u32 ChildRelId; + u32 Gpadl; +} __attribute__((packed)); + +struct vmbus_channel_gpadl_torndown { + struct vmbus_channel_message_header Header; + u32 Gpadl; +} __attribute__((packed)); + +#ifdef VMBUS_FEATURE_PARENT_OR_PEER_MEMORY_MAPPED_INTO_A_CHILD +struct vmbus_channel_view_range_add { + struct vmbus_channel_message_header Header; + PHYSICAL_ADDRESS ViewRangeBase; + u64 ViewRangeLength; + u32 ChildRelId; +} __attribute__((packed)); + +struct vmbus_channel_view_range_remove { + struct vmbus_channel_message_header Header; + PHYSICAL_ADDRESS ViewRangeBase; + u32 ChildRelId; +} __attribute__((packed)); +#endif + +struct vmbus_channel_relid_released { + struct vmbus_channel_message_header Header; + u32 ChildRelId; +} __attribute__((packed)); + +struct vmbus_channel_initiate_contact { + struct vmbus_channel_message_header Header; + u32 VMBusVersionRequested; + u32 Padding2; + u64 InterruptPage; + u64 MonitorPage1; + u64 MonitorPage2; +} __attribute__((packed)); + +struct vmbus_channel_version_response { + struct vmbus_channel_message_header Header; + bool VersionSupported; +} __attribute__((packed)); + +enum vmbus_channel_state { + CHANNEL_OFFER_STATE, + CHANNEL_OPENING_STATE, + CHANNEL_OPEN_STATE, +}; + +struct vmbus_channel { + struct list_head ListEntry; + + struct hv_device *DeviceObject; + + struct timer_list poll_timer; /* SA-111 workaround */ + + enum vmbus_channel_state State; + + struct vmbus_channel_offer_channel OfferMsg; + /* + * These are based on the OfferMsg.MonitorId. + * Save it here for easy access. + */ + u8 MonitorGroup; + u8 MonitorBit; + + u32 RingBufferGpadlHandle; + + /* Allocated memory for ring buffer */ + void *RingBufferPages; + u32 RingBufferPageCount; + RING_BUFFER_INFO Outbound; /* send to parent */ + RING_BUFFER_INFO Inbound; /* receive from parent */ + spinlock_t inbound_lock; + struct workqueue_struct *ControlWQ; + + /* Channel callback are invoked in this workqueue context */ + /* HANDLE dataWorkQueue; */ + + void (*OnChannelCallback)(void *context); + void *ChannelCallbackContext; +}; + +struct vmbus_channel_debug_info { + u32 RelId; + enum vmbus_channel_state State; + struct hv_guid InterfaceType; + struct hv_guid InterfaceInstance; + u32 MonitorId; + u32 ServerMonitorPending; + u32 ServerMonitorLatency; + u32 ServerMonitorConnectionId; + u32 ClientMonitorPending; + u32 ClientMonitorLatency; + u32 ClientMonitorConnectionId; + + RING_BUFFER_DEBUG_INFO Inbound; + RING_BUFFER_DEBUG_INFO Outbound; +}; + +/* + * Represents each channel msg on the vmbus connection This is a + * variable-size data structure depending on the msg type itself + */ +struct vmbus_channel_msginfo { + /* Bookkeeping stuff */ + struct list_head MsgListEntry; + + /* So far, this is only used to handle gpadl body message */ + struct list_head SubMsgList; + + /* Synchronize the request/response if needed */ + struct osd_waitevent *WaitEvent; + + union { + struct vmbus_channel_version_supported VersionSupported; + struct vmbus_channel_open_result OpenResult; + struct vmbus_channel_gpadl_torndown GpadlTorndown; + struct vmbus_channel_gpadl_created GpadlCreated; + struct vmbus_channel_version_response VersionResponse; + } Response; + + u32 MessageSize; + /* + * The channel message that goes out on the "wire". + * It will contain at minimum the VMBUS_CHANNEL_MESSAGE_HEADER header + */ + unsigned char Msg[0]; +}; + + +struct vmbus_channel *AllocVmbusChannel(void); + +void FreeVmbusChannel(struct vmbus_channel *Channel); + +void VmbusOnChannelMessage(void *Context); + +int VmbusChannelRequestOffers(void); + +void VmbusChannelReleaseUnattachedChannels(void); + +#endif /* _CHANNEL_MGMT_H_ */ -- cgit v0.10.2 From 5496c9c31d43633c85237d25d31c85cf735a8e7d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:36:31 -0700 Subject: Staging: hv: rename ChannelInterface.c and .h to channel_interface.c and .h All of the uppercase .c files are now gone. Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/ChannelInterface.c b/drivers/staging/hv/ChannelInterface.c deleted file mode 100644 index 019b064..0000000 --- a/drivers/staging/hv/ChannelInterface.c +++ /dev/null @@ -1,152 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ -#include -#include -#include "osd.h" -#include "VmbusPrivate.h" - -static int IVmbusChannelOpen(struct hv_device *device, u32 SendBufferSize, - u32 RecvRingBufferSize, void *UserData, - u32 UserDataLen, - void (*ChannelCallback)(void *context), - void *Context) -{ - return VmbusChannelOpen(device->context, SendBufferSize, - RecvRingBufferSize, UserData, UserDataLen, - ChannelCallback, Context); -} - -static void IVmbusChannelClose(struct hv_device *device) -{ - VmbusChannelClose(device->context); -} - -static int IVmbusChannelSendPacket(struct hv_device *device, const void *Buffer, - u32 BufferLen, u64 RequestId, u32 Type, - u32 Flags) -{ - return VmbusChannelSendPacket(device->context, Buffer, BufferLen, - RequestId, Type, Flags); -} - -static int IVmbusChannelSendPacketPageBuffer(struct hv_device *device, - struct hv_page_buffer PageBuffers[], - u32 PageCount, void *Buffer, - u32 BufferLen, u64 RequestId) -{ - return VmbusChannelSendPacketPageBuffer(device->context, PageBuffers, - PageCount, Buffer, BufferLen, - RequestId); -} - -static int IVmbusChannelSendPacketMultiPageBuffer(struct hv_device *device, - struct hv_multipage_buffer *MultiPageBuffer, - void *Buffer, u32 BufferLen, u64 RequestId) -{ - return VmbusChannelSendPacketMultiPageBuffer(device->context, - MultiPageBuffer, Buffer, - BufferLen, RequestId); -} - -static int IVmbusChannelRecvPacket(struct hv_device *device, void *Buffer, - u32 BufferLen, u32 *BufferActualLen, - u64 *RequestId) -{ - return VmbusChannelRecvPacket(device->context, Buffer, BufferLen, - BufferActualLen, RequestId); -} - -static int IVmbusChannelRecvPacketRaw(struct hv_device *device, void *Buffer, - u32 BufferLen, u32 *BufferActualLen, - u64 *RequestId) -{ - return VmbusChannelRecvPacketRaw(device->context, Buffer, BufferLen, - BufferActualLen, RequestId); -} - -static int IVmbusChannelEstablishGpadl(struct hv_device *device, void *Buffer, - u32 BufferLen, u32 *GpadlHandle) -{ - return VmbusChannelEstablishGpadl(device->context, Buffer, BufferLen, - GpadlHandle); -} - -static int IVmbusChannelTeardownGpadl(struct hv_device *device, u32 GpadlHandle) -{ - return VmbusChannelTeardownGpadl(device->context, GpadlHandle); - -} - -void GetChannelInterface(struct vmbus_channel_interface *iface) -{ - iface->Open = IVmbusChannelOpen; - iface->Close = IVmbusChannelClose; - iface->SendPacket = IVmbusChannelSendPacket; - iface->SendPacketPageBuffer = IVmbusChannelSendPacketPageBuffer; - iface->SendPacketMultiPageBuffer = - IVmbusChannelSendPacketMultiPageBuffer; - iface->RecvPacket = IVmbusChannelRecvPacket; - iface->RecvPacketRaw = IVmbusChannelRecvPacketRaw; - iface->EstablishGpadl = IVmbusChannelEstablishGpadl; - iface->TeardownGpadl = IVmbusChannelTeardownGpadl; - iface->GetInfo = GetChannelInfo; -} - -void GetChannelInfo(struct hv_device *device, struct hv_device_info *info) -{ - struct vmbus_channel_debug_info debugInfo; - - if (!device->context) - return; - - VmbusChannelGetDebugInfo(device->context, &debugInfo); - - info->ChannelId = debugInfo.RelId; - info->ChannelState = debugInfo.State; - memcpy(&info->ChannelType, &debugInfo.InterfaceType, - sizeof(struct hv_guid)); - memcpy(&info->ChannelInstance, &debugInfo.InterfaceInstance, - sizeof(struct hv_guid)); - - info->MonitorId = debugInfo.MonitorId; - - info->ServerMonitorPending = debugInfo.ServerMonitorPending; - info->ServerMonitorLatency = debugInfo.ServerMonitorLatency; - info->ServerMonitorConnectionId = debugInfo.ServerMonitorConnectionId; - - info->ClientMonitorPending = debugInfo.ClientMonitorPending; - info->ClientMonitorLatency = debugInfo.ClientMonitorLatency; - info->ClientMonitorConnectionId = debugInfo.ClientMonitorConnectionId; - - info->Inbound.InterruptMask = debugInfo.Inbound.CurrentInterruptMask; - info->Inbound.ReadIndex = debugInfo.Inbound.CurrentReadIndex; - info->Inbound.WriteIndex = debugInfo.Inbound.CurrentWriteIndex; - info->Inbound.BytesAvailToRead = debugInfo.Inbound.BytesAvailToRead; - info->Inbound.BytesAvailToWrite = debugInfo.Inbound.BytesAvailToWrite; - - info->Outbound.InterruptMask = debugInfo.Outbound.CurrentInterruptMask; - info->Outbound.ReadIndex = debugInfo.Outbound.CurrentReadIndex; - info->Outbound.WriteIndex = debugInfo.Outbound.CurrentWriteIndex; - info->Outbound.BytesAvailToRead = debugInfo.Outbound.BytesAvailToRead; - info->Outbound.BytesAvailToWrite = debugInfo.Outbound.BytesAvailToWrite; -} diff --git a/drivers/staging/hv/ChannelInterface.h b/drivers/staging/hv/ChannelInterface.h deleted file mode 100644 index 27b7a25..0000000 --- a/drivers/staging/hv/ChannelInterface.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _CHANNEL_INTERFACE_H_ -#define _CHANNEL_INTERFACE_H_ - -#include "VmbusApi.h" - -void GetChannelInterface(struct vmbus_channel_interface *ChannelInterface); - -void GetChannelInfo(struct hv_device *Device, - struct hv_device_info *DeviceInfo); - -#endif /* _CHANNEL_INTERFACE_H_ */ diff --git a/drivers/staging/hv/Makefile b/drivers/staging/hv/Makefile index 2f9ecd2..1866f80 100644 --- a/drivers/staging/hv/Makefile +++ b/drivers/staging/hv/Makefile @@ -6,7 +6,7 @@ obj-$(CONFIG_HYPERV_UTILS) += hv_utils.o hv_vmbus-objs := vmbus_drv.o osd.o \ vmbus.o hv.o connection.o channel.o \ - channel_mgmt.o ChannelInterface.o ring_buffer.o + channel_mgmt.o channel_interface.o ring_buffer.o hv_storvsc-objs := storvsc_drv.o storvsc.o hv_blkvsc-objs := blkvsc_drv.o blkvsc.o hv_netvsc-objs := netvsc_drv.o netvsc.o rndis_filter.o diff --git a/drivers/staging/hv/VmbusPrivate.h b/drivers/staging/hv/VmbusPrivate.h index 6e82183..57a116c 100644 --- a/drivers/staging/hv/VmbusPrivate.h +++ b/drivers/staging/hv/VmbusPrivate.h @@ -29,7 +29,7 @@ #include "VmbusApi.h" #include "channel.h" #include "channel_mgmt.h" -#include "ChannelInterface.h" +#include "channel_interface.h" #include "ring_buffer.h" #include diff --git a/drivers/staging/hv/channel_interface.c b/drivers/staging/hv/channel_interface.c new file mode 100644 index 0000000..019b064 --- /dev/null +++ b/drivers/staging/hv/channel_interface.c @@ -0,0 +1,152 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ +#include +#include +#include "osd.h" +#include "VmbusPrivate.h" + +static int IVmbusChannelOpen(struct hv_device *device, u32 SendBufferSize, + u32 RecvRingBufferSize, void *UserData, + u32 UserDataLen, + void (*ChannelCallback)(void *context), + void *Context) +{ + return VmbusChannelOpen(device->context, SendBufferSize, + RecvRingBufferSize, UserData, UserDataLen, + ChannelCallback, Context); +} + +static void IVmbusChannelClose(struct hv_device *device) +{ + VmbusChannelClose(device->context); +} + +static int IVmbusChannelSendPacket(struct hv_device *device, const void *Buffer, + u32 BufferLen, u64 RequestId, u32 Type, + u32 Flags) +{ + return VmbusChannelSendPacket(device->context, Buffer, BufferLen, + RequestId, Type, Flags); +} + +static int IVmbusChannelSendPacketPageBuffer(struct hv_device *device, + struct hv_page_buffer PageBuffers[], + u32 PageCount, void *Buffer, + u32 BufferLen, u64 RequestId) +{ + return VmbusChannelSendPacketPageBuffer(device->context, PageBuffers, + PageCount, Buffer, BufferLen, + RequestId); +} + +static int IVmbusChannelSendPacketMultiPageBuffer(struct hv_device *device, + struct hv_multipage_buffer *MultiPageBuffer, + void *Buffer, u32 BufferLen, u64 RequestId) +{ + return VmbusChannelSendPacketMultiPageBuffer(device->context, + MultiPageBuffer, Buffer, + BufferLen, RequestId); +} + +static int IVmbusChannelRecvPacket(struct hv_device *device, void *Buffer, + u32 BufferLen, u32 *BufferActualLen, + u64 *RequestId) +{ + return VmbusChannelRecvPacket(device->context, Buffer, BufferLen, + BufferActualLen, RequestId); +} + +static int IVmbusChannelRecvPacketRaw(struct hv_device *device, void *Buffer, + u32 BufferLen, u32 *BufferActualLen, + u64 *RequestId) +{ + return VmbusChannelRecvPacketRaw(device->context, Buffer, BufferLen, + BufferActualLen, RequestId); +} + +static int IVmbusChannelEstablishGpadl(struct hv_device *device, void *Buffer, + u32 BufferLen, u32 *GpadlHandle) +{ + return VmbusChannelEstablishGpadl(device->context, Buffer, BufferLen, + GpadlHandle); +} + +static int IVmbusChannelTeardownGpadl(struct hv_device *device, u32 GpadlHandle) +{ + return VmbusChannelTeardownGpadl(device->context, GpadlHandle); + +} + +void GetChannelInterface(struct vmbus_channel_interface *iface) +{ + iface->Open = IVmbusChannelOpen; + iface->Close = IVmbusChannelClose; + iface->SendPacket = IVmbusChannelSendPacket; + iface->SendPacketPageBuffer = IVmbusChannelSendPacketPageBuffer; + iface->SendPacketMultiPageBuffer = + IVmbusChannelSendPacketMultiPageBuffer; + iface->RecvPacket = IVmbusChannelRecvPacket; + iface->RecvPacketRaw = IVmbusChannelRecvPacketRaw; + iface->EstablishGpadl = IVmbusChannelEstablishGpadl; + iface->TeardownGpadl = IVmbusChannelTeardownGpadl; + iface->GetInfo = GetChannelInfo; +} + +void GetChannelInfo(struct hv_device *device, struct hv_device_info *info) +{ + struct vmbus_channel_debug_info debugInfo; + + if (!device->context) + return; + + VmbusChannelGetDebugInfo(device->context, &debugInfo); + + info->ChannelId = debugInfo.RelId; + info->ChannelState = debugInfo.State; + memcpy(&info->ChannelType, &debugInfo.InterfaceType, + sizeof(struct hv_guid)); + memcpy(&info->ChannelInstance, &debugInfo.InterfaceInstance, + sizeof(struct hv_guid)); + + info->MonitorId = debugInfo.MonitorId; + + info->ServerMonitorPending = debugInfo.ServerMonitorPending; + info->ServerMonitorLatency = debugInfo.ServerMonitorLatency; + info->ServerMonitorConnectionId = debugInfo.ServerMonitorConnectionId; + + info->ClientMonitorPending = debugInfo.ClientMonitorPending; + info->ClientMonitorLatency = debugInfo.ClientMonitorLatency; + info->ClientMonitorConnectionId = debugInfo.ClientMonitorConnectionId; + + info->Inbound.InterruptMask = debugInfo.Inbound.CurrentInterruptMask; + info->Inbound.ReadIndex = debugInfo.Inbound.CurrentReadIndex; + info->Inbound.WriteIndex = debugInfo.Inbound.CurrentWriteIndex; + info->Inbound.BytesAvailToRead = debugInfo.Inbound.BytesAvailToRead; + info->Inbound.BytesAvailToWrite = debugInfo.Inbound.BytesAvailToWrite; + + info->Outbound.InterruptMask = debugInfo.Outbound.CurrentInterruptMask; + info->Outbound.ReadIndex = debugInfo.Outbound.CurrentReadIndex; + info->Outbound.WriteIndex = debugInfo.Outbound.CurrentWriteIndex; + info->Outbound.BytesAvailToRead = debugInfo.Outbound.BytesAvailToRead; + info->Outbound.BytesAvailToWrite = debugInfo.Outbound.BytesAvailToWrite; +} diff --git a/drivers/staging/hv/channel_interface.h b/drivers/staging/hv/channel_interface.h new file mode 100644 index 0000000..27b7a25 --- /dev/null +++ b/drivers/staging/hv/channel_interface.h @@ -0,0 +1,35 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _CHANNEL_INTERFACE_H_ +#define _CHANNEL_INTERFACE_H_ + +#include "VmbusApi.h" + +void GetChannelInterface(struct vmbus_channel_interface *ChannelInterface); + +void GetChannelInfo(struct hv_device *Device, + struct hv_device_info *DeviceInfo); + +#endif /* _CHANNEL_INTERFACE_H_ */ -- cgit v0.10.2 From a82c7a2ad6e636c344bfde7c1fa22557ad96ee85 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:39:15 -0700 Subject: Staging: hv: rename NetVscApi.h to netvsc_api.h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/NetVscApi.h b/drivers/staging/hv/NetVscApi.h deleted file mode 100644 index 91a4cd9..0000000 --- a/drivers/staging/hv/NetVscApi.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _NETVSC_API_H_ -#define _NETVSC_API_H_ - -#include "VmbusApi.h" - -/* Fwd declaration */ -struct hv_netvsc_packet; - -/* Represent the xfer page packet which contains 1 or more netvsc packet */ -struct xferpage_packet { - struct list_head ListEntry; - - /* # of netvsc packets this xfer packet contains */ - u32 Count; -}; - -/* The number of pages which are enough to cover jumbo frame buffer. */ -#define NETVSC_PACKET_MAXPAGE 4 - -/* - * Represent netvsc packet which contains 1 RNDIS and 1 ethernet frame - * within the RNDIS - */ -struct hv_netvsc_packet { - /* Bookkeeping stuff */ - struct list_head ListEntry; - - struct hv_device *Device; - bool IsDataPacket; - - /* - * Valid only for receives when we break a xfer page packet - * into multiple netvsc packets - */ - struct xferpage_packet *XferPagePacket; - - union { - struct{ - u64 ReceiveCompletionTid; - void *ReceiveCompletionContext; - void (*OnReceiveCompletion)(void *context); - } Recv; - struct{ - u64 SendCompletionTid; - void *SendCompletionContext; - void (*OnSendCompletion)(void *context); - } Send; - } Completion; - - /* This points to the memory after PageBuffers */ - void *Extension; - - u32 TotalDataBufferLength; - /* Points to the send/receive buffer where the ethernet frame is */ - u32 PageBufferCount; - struct hv_page_buffer PageBuffers[NETVSC_PACKET_MAXPAGE]; -}; - -/* Represents the net vsc driver */ -struct netvsc_driver { - /* Must be the first field */ - /* Which is a bug FIXME! */ - struct hv_driver Base; - - u32 RingBufferSize; - u32 RequestExtSize; - - /* - * This is set by the caller to allow us to callback when we - * receive a packet from the "wire" - */ - int (*OnReceiveCallback)(struct hv_device *dev, - struct hv_netvsc_packet *packet); - void (*OnLinkStatusChanged)(struct hv_device *dev, u32 Status); - - /* Specific to this driver */ - int (*OnSend)(struct hv_device *dev, struct hv_netvsc_packet *packet); - - void *Context; -}; - -struct netvsc_device_info { - unsigned char MacAddr[6]; - bool LinkState; /* 0 - link up, 1 - link down */ -}; - -/* Interface */ -int NetVscInitialize(struct hv_driver *drv); -int RndisFilterOnOpen(struct hv_device *Device); -int RndisFilterOnClose(struct hv_device *Device); - -#endif /* _NETVSC_API_H_ */ diff --git a/drivers/staging/hv/netvsc.h b/drivers/staging/hv/netvsc.h index a6264db..05d2ceb 100644 --- a/drivers/staging/hv/netvsc.h +++ b/drivers/staging/hv/netvsc.h @@ -28,7 +28,7 @@ #include #include "VmbusPacketFormat.h" #include "VmbusChannelInterface.h" -#include "NetVscApi.h" +#include "netvsc_api.h" #define NVSP_INVALID_PROTOCOL_VERSION ((u32)0xFFFFFFFF) diff --git a/drivers/staging/hv/netvsc_api.h b/drivers/staging/hv/netvsc_api.h new file mode 100644 index 0000000..91a4cd9 --- /dev/null +++ b/drivers/staging/hv/netvsc_api.h @@ -0,0 +1,116 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _NETVSC_API_H_ +#define _NETVSC_API_H_ + +#include "VmbusApi.h" + +/* Fwd declaration */ +struct hv_netvsc_packet; + +/* Represent the xfer page packet which contains 1 or more netvsc packet */ +struct xferpage_packet { + struct list_head ListEntry; + + /* # of netvsc packets this xfer packet contains */ + u32 Count; +}; + +/* The number of pages which are enough to cover jumbo frame buffer. */ +#define NETVSC_PACKET_MAXPAGE 4 + +/* + * Represent netvsc packet which contains 1 RNDIS and 1 ethernet frame + * within the RNDIS + */ +struct hv_netvsc_packet { + /* Bookkeeping stuff */ + struct list_head ListEntry; + + struct hv_device *Device; + bool IsDataPacket; + + /* + * Valid only for receives when we break a xfer page packet + * into multiple netvsc packets + */ + struct xferpage_packet *XferPagePacket; + + union { + struct{ + u64 ReceiveCompletionTid; + void *ReceiveCompletionContext; + void (*OnReceiveCompletion)(void *context); + } Recv; + struct{ + u64 SendCompletionTid; + void *SendCompletionContext; + void (*OnSendCompletion)(void *context); + } Send; + } Completion; + + /* This points to the memory after PageBuffers */ + void *Extension; + + u32 TotalDataBufferLength; + /* Points to the send/receive buffer where the ethernet frame is */ + u32 PageBufferCount; + struct hv_page_buffer PageBuffers[NETVSC_PACKET_MAXPAGE]; +}; + +/* Represents the net vsc driver */ +struct netvsc_driver { + /* Must be the first field */ + /* Which is a bug FIXME! */ + struct hv_driver Base; + + u32 RingBufferSize; + u32 RequestExtSize; + + /* + * This is set by the caller to allow us to callback when we + * receive a packet from the "wire" + */ + int (*OnReceiveCallback)(struct hv_device *dev, + struct hv_netvsc_packet *packet); + void (*OnLinkStatusChanged)(struct hv_device *dev, u32 Status); + + /* Specific to this driver */ + int (*OnSend)(struct hv_device *dev, struct hv_netvsc_packet *packet); + + void *Context; +}; + +struct netvsc_device_info { + unsigned char MacAddr[6]; + bool LinkState; /* 0 - link up, 1 - link down */ +}; + +/* Interface */ +int NetVscInitialize(struct hv_driver *drv); +int RndisFilterOnOpen(struct hv_device *Device); +int RndisFilterOnClose(struct hv_device *Device); + +#endif /* _NETVSC_API_H_ */ diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index a6584a8..3a6fe25 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -38,7 +38,7 @@ #include "logging.h" #include "VersionInfo.h" #include "vmbus.h" -#include "NetVscApi.h" +#include "netvsc_api.h" struct net_device_context { /* point back to our device context */ diff --git a/drivers/staging/hv/rndis_filter.c b/drivers/staging/hv/rndis_filter.c index e6824e0..2c6ee8d 100644 --- a/drivers/staging/hv/rndis_filter.c +++ b/drivers/staging/hv/rndis_filter.c @@ -26,7 +26,7 @@ #include "osd.h" #include "logging.h" -#include "NetVscApi.h" +#include "netvsc_api.h" #include "rndis_filter.h" /* Data types */ -- cgit v0.10.2 From bb96979310965cef680c90ba331126fd64e9265f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:40:43 -0700 Subject: Staging: hv: rename StorVscApi.h to storvsc_api.h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/StorVscApi.h b/drivers/staging/hv/StorVscApi.h deleted file mode 100644 index 126a858..0000000 --- a/drivers/staging/hv/StorVscApi.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _STORVSC_API_H_ -#define _STORVSC_API_H_ - -#include "VmbusApi.h" - -/* Defines */ -#define STORVSC_RING_BUFFER_SIZE (10*PAGE_SIZE) -#define BLKVSC_RING_BUFFER_SIZE (20*PAGE_SIZE) - -#define STORVSC_MAX_IO_REQUESTS 64 - -/* - * In Hyper-V, each port/path/target maps to 1 scsi host adapter. In - * reality, the path/target is not used (ie always set to 0) so our - * scsi host adapter essentially has 1 bus with 1 target that contains - * up to 256 luns. - */ -#define STORVSC_MAX_LUNS_PER_TARGET 64 -#define STORVSC_MAX_TARGETS 1 -#define STORVSC_MAX_CHANNELS 1 - -struct hv_storvsc_request; - -/* Matches Windows-end */ -enum storvsc_request_type{ - WRITE_TYPE, - READ_TYPE, - UNKNOWN_TYPE, -}; - -struct hv_storvsc_request { - enum storvsc_request_type Type; - u32 Host; - u32 Bus; - u32 TargetId; - u32 LunId; - u8 *Cdb; - u32 CdbLen; - u32 Status; - u32 BytesXfer; - - unsigned char *SenseBuffer; - u32 SenseBufferSize; - - void *Context; - - void (*OnIOCompletion)(struct hv_storvsc_request *Request); - - /* This points to the memory after DataBuffer */ - void *Extension; - - struct hv_multipage_buffer DataBuffer; -}; - -/* Represents the block vsc driver */ -struct storvsc_driver_object { - /* Must be the first field */ - /* Which is a bug FIXME! */ - struct hv_driver Base; - - /* Set by caller (in bytes) */ - u32 RingBufferSize; - - /* Allocate this much private extension for each I/O request */ - u32 RequestExtSize; - - /* Maximum # of requests in flight per channel/device */ - u32 MaxOutstandingRequestsPerChannel; - - /* Specific to this driver */ - int (*OnIORequest)(struct hv_device *Device, - struct hv_storvsc_request *Request); -}; - -struct storvsc_device_info { - unsigned int PortNumber; - unsigned char PathId; - unsigned char TargetId; -}; - -/* Interface */ -int StorVscInitialize(struct hv_driver *driver); -int StorVscOnHostReset(struct hv_device *Device); -int BlkVscInitialize(struct hv_driver *driver); - -#endif /* _STORVSC_API_H_ */ diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index 78fc348..3e7c75e 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -34,7 +34,7 @@ #include "logging.h" #include "VersionInfo.h" #include "vmbus.h" -#include "StorVscApi.h" +#include "storvsc_api.h" #define BLKVSC_MINORS 64 diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c index e73130e..3a8b54f 100644 --- a/drivers/staging/hv/storvsc.c +++ b/drivers/staging/hv/storvsc.c @@ -25,7 +25,7 @@ #include #include "osd.h" #include "logging.h" -#include "StorVscApi.h" +#include "storvsc_api.h" #include "VmbusPacketFormat.h" #include "vstorage.h" diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h new file mode 100644 index 0000000..126a858 --- /dev/null +++ b/drivers/staging/hv/storvsc_api.h @@ -0,0 +1,110 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _STORVSC_API_H_ +#define _STORVSC_API_H_ + +#include "VmbusApi.h" + +/* Defines */ +#define STORVSC_RING_BUFFER_SIZE (10*PAGE_SIZE) +#define BLKVSC_RING_BUFFER_SIZE (20*PAGE_SIZE) + +#define STORVSC_MAX_IO_REQUESTS 64 + +/* + * In Hyper-V, each port/path/target maps to 1 scsi host adapter. In + * reality, the path/target is not used (ie always set to 0) so our + * scsi host adapter essentially has 1 bus with 1 target that contains + * up to 256 luns. + */ +#define STORVSC_MAX_LUNS_PER_TARGET 64 +#define STORVSC_MAX_TARGETS 1 +#define STORVSC_MAX_CHANNELS 1 + +struct hv_storvsc_request; + +/* Matches Windows-end */ +enum storvsc_request_type{ + WRITE_TYPE, + READ_TYPE, + UNKNOWN_TYPE, +}; + +struct hv_storvsc_request { + enum storvsc_request_type Type; + u32 Host; + u32 Bus; + u32 TargetId; + u32 LunId; + u8 *Cdb; + u32 CdbLen; + u32 Status; + u32 BytesXfer; + + unsigned char *SenseBuffer; + u32 SenseBufferSize; + + void *Context; + + void (*OnIOCompletion)(struct hv_storvsc_request *Request); + + /* This points to the memory after DataBuffer */ + void *Extension; + + struct hv_multipage_buffer DataBuffer; +}; + +/* Represents the block vsc driver */ +struct storvsc_driver_object { + /* Must be the first field */ + /* Which is a bug FIXME! */ + struct hv_driver Base; + + /* Set by caller (in bytes) */ + u32 RingBufferSize; + + /* Allocate this much private extension for each I/O request */ + u32 RequestExtSize; + + /* Maximum # of requests in flight per channel/device */ + u32 MaxOutstandingRequestsPerChannel; + + /* Specific to this driver */ + int (*OnIORequest)(struct hv_device *Device, + struct hv_storvsc_request *Request); +}; + +struct storvsc_device_info { + unsigned int PortNumber; + unsigned char PathId; + unsigned char TargetId; +}; + +/* Interface */ +int StorVscInitialize(struct hv_driver *driver); +int StorVscOnHostReset(struct hv_device *Device); +int BlkVscInitialize(struct hv_driver *driver); + +#endif /* _STORVSC_API_H_ */ diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index d9649e3..56b659b 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -35,7 +35,7 @@ #include "logging.h" #include "VersionInfo.h" #include "vmbus.h" -#include "StorVscApi.h" +#include "storvsc_api.h" struct host_device_context { -- cgit v0.10.2 From 447fc67e7a8c4d0afdffa3e4535c1a98a84e59ab Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:43:02 -0700 Subject: Staging: hv: rename VmbusApi.h to vmbus_api.h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/VmbusApi.h b/drivers/staging/hv/VmbusApi.h deleted file mode 100644 index 4275be3..0000000 --- a/drivers/staging/hv/VmbusApi.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _VMBUS_API_H_ -#define _VMBUS_API_H_ - -#define MAX_PAGE_BUFFER_COUNT 16 -#define MAX_MULTIPAGE_BUFFER_COUNT 32 /* 128K */ - -#pragma pack(push, 1) - -/* Single-page buffer */ -struct hv_page_buffer { - u32 Length; - u32 Offset; - u64 Pfn; -}; - -/* Multiple-page buffer */ -struct hv_multipage_buffer { - /* Length and Offset determines the # of pfns in the array */ - u32 Length; - u32 Offset; - u64 PfnArray[MAX_MULTIPAGE_BUFFER_COUNT]; -}; - -/* 0x18 includes the proprietary packet header */ -#define MAX_PAGE_BUFFER_PACKET (0x18 + \ - (sizeof(struct hv_page_buffer) * \ - MAX_PAGE_BUFFER_COUNT)) -#define MAX_MULTIPAGE_BUFFER_PACKET (0x18 + \ - sizeof(struct hv_multipage_buffer)) - - -#pragma pack(pop) - -struct hv_driver; -struct hv_device; - -struct hv_dev_port_info { - u32 InterruptMask; - u32 ReadIndex; - u32 WriteIndex; - u32 BytesAvailToRead; - u32 BytesAvailToWrite; -}; - -struct hv_device_info { - u32 ChannelId; - u32 ChannelState; - struct hv_guid ChannelType; - struct hv_guid ChannelInstance; - - u32 MonitorId; - u32 ServerMonitorPending; - u32 ServerMonitorLatency; - u32 ServerMonitorConnectionId; - u32 ClientMonitorPending; - u32 ClientMonitorLatency; - u32 ClientMonitorConnectionId; - - struct hv_dev_port_info Inbound; - struct hv_dev_port_info Outbound; -}; - -/** - * struct vmbus_channel_interface - Contains member functions for vmbus channel - * @Open: Open the channel - * @Close: Close the channel - * @SendPacket: Send a packet over the channel - * @SendPacketPageBuffer: Send a single page buffer over the channel - * @SendPacketMultiPageBuffer: Send a multiple page buffers - * @RecvPacket: Receive packet - * @RecvPacketRaw: Receive Raw packet - * @EstablishGpadl: Set up GPADL for ringbuffer - * @TeardownGpadl: Teardown GPADL for ringbuffer - * @GetInfo: Get info about the channel - * - * This structure contains function pointer to control vmbus channel - * behavior. None of these functions is externally callable, but they - * are used for normal vmbus channel internal behavior. - * Only used by Hyper-V drivers. - */ -struct vmbus_channel_interface { - int (*Open)(struct hv_device *Device, u32 SendBufferSize, - u32 RecvRingBufferSize, void *UserData, u32 UserDataLen, - void (*ChannelCallback)(void *context), - void *Context); - void (*Close)(struct hv_device *device); - int (*SendPacket)(struct hv_device *Device, const void *Buffer, - u32 BufferLen, u64 RequestId, u32 Type, u32 Flags); - int (*SendPacketPageBuffer)(struct hv_device *dev, - struct hv_page_buffer PageBuffers[], - u32 PageCount, void *Buffer, u32 BufferLen, - u64 RequestId); - int (*SendPacketMultiPageBuffer)(struct hv_device *device, - struct hv_multipage_buffer *mpb, - void *Buffer, - u32 BufferLen, - u64 RequestId); - int (*RecvPacket)(struct hv_device *dev, void *buf, u32 buflen, - u32 *BufferActualLen, u64 *RequestId); - int (*RecvPacketRaw)(struct hv_device *dev, void *buf, u32 buflen, - u32 *BufferActualLen, u64 *RequestId); - int (*EstablishGpadl)(struct hv_device *dev, void *buf, u32 buflen, - u32 *GpadlHandle); - int (*TeardownGpadl)(struct hv_device *device, u32 GpadlHandle); - void (*GetInfo)(struct hv_device *dev, struct hv_device_info *devinfo); -}; - -/* Base driver object */ -struct hv_driver { - const char *name; - - /* the device type supported by this driver */ - struct hv_guid deviceType; - - int (*OnDeviceAdd)(struct hv_device *device, void *data); - int (*OnDeviceRemove)(struct hv_device *device); - void (*OnCleanup)(struct hv_driver *driver); - - struct vmbus_channel_interface VmbusChannelInterface; -}; - -/* Base device object */ -struct hv_device { - /* the driver for this device */ - struct hv_driver *Driver; - - char name[64]; - - /* the device type id of this device */ - struct hv_guid deviceType; - - /* the device instance id of this device */ - struct hv_guid deviceInstance; - - void *context; - - /* Device extension; */ - void *Extension; -}; - -/* Vmbus driver object */ -struct vmbus_driver { - /* !! Must be the 1st field !! */ - /* FIXME if ^, then someone is doing somthing stupid */ - struct hv_driver Base; - - /* Set by the caller */ - struct hv_device * (*OnChildDeviceCreate)(struct hv_guid *DeviceType, - struct hv_guid *DeviceInstance, - void *Context); - void (*OnChildDeviceDestroy)(struct hv_device *device); - int (*OnChildDeviceAdd)(struct hv_device *RootDevice, - struct hv_device *ChildDevice); - void (*OnChildDeviceRemove)(struct hv_device *device); - - /* Set by the callee */ - int (*OnIsr)(struct hv_driver *driver); - void (*OnMsgDpc)(struct hv_driver *driver); - void (*OnEventDpc)(struct hv_driver *driver); - void (*GetChannelOffers)(void); - - void (*GetChannelInterface)(struct vmbus_channel_interface *i); - void (*GetChannelInfo)(struct hv_device *dev, - struct hv_device_info *devinfo); -}; - -int VmbusInitialize(struct hv_driver *drv); - -#endif /* _VMBUS_API_H_ */ diff --git a/drivers/staging/hv/VmbusPrivate.h b/drivers/staging/hv/VmbusPrivate.h index 57a116c..588c667 100644 --- a/drivers/staging/hv/VmbusPrivate.h +++ b/drivers/staging/hv/VmbusPrivate.h @@ -26,7 +26,7 @@ #define _VMBUS_PRIVATE_H_ #include "hv.h" -#include "VmbusApi.h" +#include "vmbus_api.h" #include "channel.h" #include "channel_mgmt.h" #include "channel_interface.h" diff --git a/drivers/staging/hv/channel_interface.h b/drivers/staging/hv/channel_interface.h index 27b7a25..6acaf6c 100644 --- a/drivers/staging/hv/channel_interface.h +++ b/drivers/staging/hv/channel_interface.h @@ -25,7 +25,7 @@ #ifndef _CHANNEL_INTERFACE_H_ #define _CHANNEL_INTERFACE_H_ -#include "VmbusApi.h" +#include "vmbus_api.h" void GetChannelInterface(struct vmbus_channel_interface *ChannelInterface); diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c index 6ccaea2..d6f6dfa 100644 --- a/drivers/staging/hv/hv_utils.c +++ b/drivers/staging/hv/hv_utils.c @@ -33,7 +33,7 @@ #include "VersionInfo.h" #include "channel.h" #include "VmbusPrivate.h" -#include "VmbusApi.h" +#include "vmbus_api.h" #include "utils.h" diff --git a/drivers/staging/hv/netvsc_api.h b/drivers/staging/hv/netvsc_api.h index 91a4cd9..4b5b3ac 100644 --- a/drivers/staging/hv/netvsc_api.h +++ b/drivers/staging/hv/netvsc_api.h @@ -25,7 +25,7 @@ #ifndef _NETVSC_API_H_ #define _NETVSC_API_H_ -#include "VmbusApi.h" +#include "vmbus_api.h" /* Fwd declaration */ struct hv_netvsc_packet; diff --git a/drivers/staging/hv/storvsc_api.h b/drivers/staging/hv/storvsc_api.h index 126a858..0063bde 100644 --- a/drivers/staging/hv/storvsc_api.h +++ b/drivers/staging/hv/storvsc_api.h @@ -25,7 +25,7 @@ #ifndef _STORVSC_API_H_ #define _STORVSC_API_H_ -#include "VmbusApi.h" +#include "vmbus_api.h" /* Defines */ #define STORVSC_RING_BUFFER_SIZE (10*PAGE_SIZE) diff --git a/drivers/staging/hv/vmbus.h b/drivers/staging/hv/vmbus.h index 6404b84..0c6ee0f 100644 --- a/drivers/staging/hv/vmbus.h +++ b/drivers/staging/hv/vmbus.h @@ -26,7 +26,7 @@ #define _VMBUS_H_ #include -#include "VmbusApi.h" +#include "vmbus_api.h" struct driver_context { struct hv_guid class_id; diff --git a/drivers/staging/hv/vmbus_api.h b/drivers/staging/hv/vmbus_api.h new file mode 100644 index 0000000..4275be3 --- /dev/null +++ b/drivers/staging/hv/vmbus_api.h @@ -0,0 +1,193 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _VMBUS_API_H_ +#define _VMBUS_API_H_ + +#define MAX_PAGE_BUFFER_COUNT 16 +#define MAX_MULTIPAGE_BUFFER_COUNT 32 /* 128K */ + +#pragma pack(push, 1) + +/* Single-page buffer */ +struct hv_page_buffer { + u32 Length; + u32 Offset; + u64 Pfn; +}; + +/* Multiple-page buffer */ +struct hv_multipage_buffer { + /* Length and Offset determines the # of pfns in the array */ + u32 Length; + u32 Offset; + u64 PfnArray[MAX_MULTIPAGE_BUFFER_COUNT]; +}; + +/* 0x18 includes the proprietary packet header */ +#define MAX_PAGE_BUFFER_PACKET (0x18 + \ + (sizeof(struct hv_page_buffer) * \ + MAX_PAGE_BUFFER_COUNT)) +#define MAX_MULTIPAGE_BUFFER_PACKET (0x18 + \ + sizeof(struct hv_multipage_buffer)) + + +#pragma pack(pop) + +struct hv_driver; +struct hv_device; + +struct hv_dev_port_info { + u32 InterruptMask; + u32 ReadIndex; + u32 WriteIndex; + u32 BytesAvailToRead; + u32 BytesAvailToWrite; +}; + +struct hv_device_info { + u32 ChannelId; + u32 ChannelState; + struct hv_guid ChannelType; + struct hv_guid ChannelInstance; + + u32 MonitorId; + u32 ServerMonitorPending; + u32 ServerMonitorLatency; + u32 ServerMonitorConnectionId; + u32 ClientMonitorPending; + u32 ClientMonitorLatency; + u32 ClientMonitorConnectionId; + + struct hv_dev_port_info Inbound; + struct hv_dev_port_info Outbound; +}; + +/** + * struct vmbus_channel_interface - Contains member functions for vmbus channel + * @Open: Open the channel + * @Close: Close the channel + * @SendPacket: Send a packet over the channel + * @SendPacketPageBuffer: Send a single page buffer over the channel + * @SendPacketMultiPageBuffer: Send a multiple page buffers + * @RecvPacket: Receive packet + * @RecvPacketRaw: Receive Raw packet + * @EstablishGpadl: Set up GPADL for ringbuffer + * @TeardownGpadl: Teardown GPADL for ringbuffer + * @GetInfo: Get info about the channel + * + * This structure contains function pointer to control vmbus channel + * behavior. None of these functions is externally callable, but they + * are used for normal vmbus channel internal behavior. + * Only used by Hyper-V drivers. + */ +struct vmbus_channel_interface { + int (*Open)(struct hv_device *Device, u32 SendBufferSize, + u32 RecvRingBufferSize, void *UserData, u32 UserDataLen, + void (*ChannelCallback)(void *context), + void *Context); + void (*Close)(struct hv_device *device); + int (*SendPacket)(struct hv_device *Device, const void *Buffer, + u32 BufferLen, u64 RequestId, u32 Type, u32 Flags); + int (*SendPacketPageBuffer)(struct hv_device *dev, + struct hv_page_buffer PageBuffers[], + u32 PageCount, void *Buffer, u32 BufferLen, + u64 RequestId); + int (*SendPacketMultiPageBuffer)(struct hv_device *device, + struct hv_multipage_buffer *mpb, + void *Buffer, + u32 BufferLen, + u64 RequestId); + int (*RecvPacket)(struct hv_device *dev, void *buf, u32 buflen, + u32 *BufferActualLen, u64 *RequestId); + int (*RecvPacketRaw)(struct hv_device *dev, void *buf, u32 buflen, + u32 *BufferActualLen, u64 *RequestId); + int (*EstablishGpadl)(struct hv_device *dev, void *buf, u32 buflen, + u32 *GpadlHandle); + int (*TeardownGpadl)(struct hv_device *device, u32 GpadlHandle); + void (*GetInfo)(struct hv_device *dev, struct hv_device_info *devinfo); +}; + +/* Base driver object */ +struct hv_driver { + const char *name; + + /* the device type supported by this driver */ + struct hv_guid deviceType; + + int (*OnDeviceAdd)(struct hv_device *device, void *data); + int (*OnDeviceRemove)(struct hv_device *device); + void (*OnCleanup)(struct hv_driver *driver); + + struct vmbus_channel_interface VmbusChannelInterface; +}; + +/* Base device object */ +struct hv_device { + /* the driver for this device */ + struct hv_driver *Driver; + + char name[64]; + + /* the device type id of this device */ + struct hv_guid deviceType; + + /* the device instance id of this device */ + struct hv_guid deviceInstance; + + void *context; + + /* Device extension; */ + void *Extension; +}; + +/* Vmbus driver object */ +struct vmbus_driver { + /* !! Must be the 1st field !! */ + /* FIXME if ^, then someone is doing somthing stupid */ + struct hv_driver Base; + + /* Set by the caller */ + struct hv_device * (*OnChildDeviceCreate)(struct hv_guid *DeviceType, + struct hv_guid *DeviceInstance, + void *Context); + void (*OnChildDeviceDestroy)(struct hv_device *device); + int (*OnChildDeviceAdd)(struct hv_device *RootDevice, + struct hv_device *ChildDevice); + void (*OnChildDeviceRemove)(struct hv_device *device); + + /* Set by the callee */ + int (*OnIsr)(struct hv_driver *driver); + void (*OnMsgDpc)(struct hv_driver *driver); + void (*OnEventDpc)(struct hv_driver *driver); + void (*GetChannelOffers)(void); + + void (*GetChannelInterface)(struct vmbus_channel_interface *i); + void (*GetChannelInfo)(struct hv_device *dev, + struct hv_device_info *devinfo); +}; + +int VmbusInitialize(struct hv_driver *drv); + +#endif /* _VMBUS_API_H_ */ -- cgit v0.10.2 From 72daf320fb322dc200824e2be17e69553a53fc8a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:45:25 -0700 Subject: Staging: hv: rename VmbusPrivate.h to vmbus_private.h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/VmbusPrivate.h b/drivers/staging/hv/VmbusPrivate.h deleted file mode 100644 index 588c667..0000000 --- a/drivers/staging/hv/VmbusPrivate.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - - -#ifndef _VMBUS_PRIVATE_H_ -#define _VMBUS_PRIVATE_H_ - -#include "hv.h" -#include "vmbus_api.h" -#include "channel.h" -#include "channel_mgmt.h" -#include "channel_interface.h" -#include "ring_buffer.h" -#include - - -/* - * Maximum channels is determined by the size of the interrupt page - * which is PAGE_SIZE. 1/2 of PAGE_SIZE is for send endpoint interrupt - * and the other is receive endpoint interrupt - */ -#define MAX_NUM_CHANNELS ((PAGE_SIZE >> 1) << 3) /* 16348 channels */ - -/* The value here must be in multiple of 32 */ -/* TODO: Need to make this configurable */ -#define MAX_NUM_CHANNELS_SUPPORTED 256 - - -enum VMBUS_CONNECT_STATE { - Disconnected, - Connecting, - Connected, - Disconnecting -}; - -#define MAX_SIZE_CHANNEL_MESSAGE HV_MESSAGE_PAYLOAD_BYTE_COUNT - -struct VMBUS_CONNECTION { - enum VMBUS_CONNECT_STATE ConnectState; - - atomic_t NextGpadlHandle; - - /* - * Represents channel interrupts. Each bit position represents a - * channel. When a channel sends an interrupt via VMBUS, it finds its - * bit in the sendInterruptPage, set it and calls Hv to generate a port - * event. The other end receives the port event and parse the - * recvInterruptPage to see which bit is set - */ - void *InterruptPage; - void *SendInterruptPage; - void *RecvInterruptPage; - - /* - * 2 pages - 1st page for parent->child notification and 2nd - * is child->parent notification - */ - void *MonitorPages; - struct list_head ChannelMsgList; - spinlock_t channelmsg_lock; - - /* List of channels */ - struct list_head ChannelList; - spinlock_t channel_lock; - - struct workqueue_struct *WorkQueue; -}; - - -struct VMBUS_MSGINFO { - /* Bookkeeping stuff */ - struct list_head MsgListEntry; - - /* Synchronize the request/response if needed */ - struct osd_waitevent *WaitEvent; - - /* The message itself */ - unsigned char Msg[0]; -}; - - -extern struct VMBUS_CONNECTION gVmbusConnection; - -/* General vmbus interface */ - -struct hv_device *VmbusChildDeviceCreate(struct hv_guid *deviceType, - struct hv_guid *deviceInstance, - void *context); - -int VmbusChildDeviceAdd(struct hv_device *Device); - -void VmbusChildDeviceRemove(struct hv_device *Device); - -/* static void */ -/* VmbusChildDeviceDestroy( */ -/* struct hv_device *); */ - -struct vmbus_channel *GetChannelFromRelId(u32 relId); - - -/* Connection interface */ - -int VmbusConnect(void); - -int VmbusDisconnect(void); - -int VmbusPostMessage(void *buffer, size_t bufSize); - -int VmbusSetEvent(u32 childRelId); - -void VmbusOnEvents(void); - - -#endif /* _VMBUS_PRIVATE_H_ */ diff --git a/drivers/staging/hv/channel.c b/drivers/staging/hv/channel.c index eab7d16..12c351e 100644 --- a/drivers/staging/hv/channel.c +++ b/drivers/staging/hv/channel.c @@ -24,7 +24,7 @@ #include #include "osd.h" #include "logging.h" -#include "VmbusPrivate.h" +#include "vmbus_private.h" /* Internal routines */ static int VmbusChannelCreateGpadlHeader( diff --git a/drivers/staging/hv/channel_interface.c b/drivers/staging/hv/channel_interface.c index 019b064..d9f51ac 100644 --- a/drivers/staging/hv/channel_interface.c +++ b/drivers/staging/hv/channel_interface.c @@ -23,7 +23,7 @@ #include #include #include "osd.h" -#include "VmbusPrivate.h" +#include "vmbus_private.h" static int IVmbusChannelOpen(struct hv_device *device, u32 SendBufferSize, u32 RecvRingBufferSize, void *UserData, diff --git a/drivers/staging/hv/channel_mgmt.c b/drivers/staging/hv/channel_mgmt.c index 3698230..6877e8e 100644 --- a/drivers/staging/hv/channel_mgmt.c +++ b/drivers/staging/hv/channel_mgmt.c @@ -25,7 +25,7 @@ #include #include "osd.h" #include "logging.h" -#include "VmbusPrivate.h" +#include "vmbus_private.h" #include "utils.h" struct vmbus_channel_message_table_entry { diff --git a/drivers/staging/hv/connection.c b/drivers/staging/hv/connection.c index 3a01d3c..e8824da 100644 --- a/drivers/staging/hv/connection.c +++ b/drivers/staging/hv/connection.c @@ -26,7 +26,7 @@ #include #include "osd.h" #include "logging.h" -#include "VmbusPrivate.h" +#include "vmbus_private.h" struct VMBUS_CONNECTION gVmbusConnection = { diff --git a/drivers/staging/hv/hv.c b/drivers/staging/hv/hv.c index 2418651..6c77e64 100644 --- a/drivers/staging/hv/hv.c +++ b/drivers/staging/hv/hv.c @@ -25,7 +25,7 @@ #include #include "osd.h" #include "logging.h" -#include "VmbusPrivate.h" +#include "vmbus_private.h" /* The one and only */ struct hv_context gHvContext = { diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c index d6f6dfa..5ab1b06 100644 --- a/drivers/staging/hv/hv_utils.c +++ b/drivers/staging/hv/hv_utils.c @@ -32,7 +32,7 @@ #include "VmbusChannelInterface.h" #include "VersionInfo.h" #include "channel.h" -#include "VmbusPrivate.h" +#include "vmbus_private.h" #include "vmbus_api.h" #include "utils.h" diff --git a/drivers/staging/hv/vmbus.c b/drivers/staging/hv/vmbus.c index 90b14be..296c38f 100644 --- a/drivers/staging/hv/vmbus.c +++ b/drivers/staging/hv/vmbus.c @@ -25,7 +25,7 @@ #include "osd.h" #include "logging.h" #include "VersionInfo.h" -#include "VmbusPrivate.h" +#include "vmbus_private.h" static const char *gDriverName = "vmbus"; diff --git a/drivers/staging/hv/vmbus_private.h b/drivers/staging/hv/vmbus_private.h new file mode 100644 index 0000000..588c667 --- /dev/null +++ b/drivers/staging/hv/vmbus_private.h @@ -0,0 +1,134 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + + +#ifndef _VMBUS_PRIVATE_H_ +#define _VMBUS_PRIVATE_H_ + +#include "hv.h" +#include "vmbus_api.h" +#include "channel.h" +#include "channel_mgmt.h" +#include "channel_interface.h" +#include "ring_buffer.h" +#include + + +/* + * Maximum channels is determined by the size of the interrupt page + * which is PAGE_SIZE. 1/2 of PAGE_SIZE is for send endpoint interrupt + * and the other is receive endpoint interrupt + */ +#define MAX_NUM_CHANNELS ((PAGE_SIZE >> 1) << 3) /* 16348 channels */ + +/* The value here must be in multiple of 32 */ +/* TODO: Need to make this configurable */ +#define MAX_NUM_CHANNELS_SUPPORTED 256 + + +enum VMBUS_CONNECT_STATE { + Disconnected, + Connecting, + Connected, + Disconnecting +}; + +#define MAX_SIZE_CHANNEL_MESSAGE HV_MESSAGE_PAYLOAD_BYTE_COUNT + +struct VMBUS_CONNECTION { + enum VMBUS_CONNECT_STATE ConnectState; + + atomic_t NextGpadlHandle; + + /* + * Represents channel interrupts. Each bit position represents a + * channel. When a channel sends an interrupt via VMBUS, it finds its + * bit in the sendInterruptPage, set it and calls Hv to generate a port + * event. The other end receives the port event and parse the + * recvInterruptPage to see which bit is set + */ + void *InterruptPage; + void *SendInterruptPage; + void *RecvInterruptPage; + + /* + * 2 pages - 1st page for parent->child notification and 2nd + * is child->parent notification + */ + void *MonitorPages; + struct list_head ChannelMsgList; + spinlock_t channelmsg_lock; + + /* List of channels */ + struct list_head ChannelList; + spinlock_t channel_lock; + + struct workqueue_struct *WorkQueue; +}; + + +struct VMBUS_MSGINFO { + /* Bookkeeping stuff */ + struct list_head MsgListEntry; + + /* Synchronize the request/response if needed */ + struct osd_waitevent *WaitEvent; + + /* The message itself */ + unsigned char Msg[0]; +}; + + +extern struct VMBUS_CONNECTION gVmbusConnection; + +/* General vmbus interface */ + +struct hv_device *VmbusChildDeviceCreate(struct hv_guid *deviceType, + struct hv_guid *deviceInstance, + void *context); + +int VmbusChildDeviceAdd(struct hv_device *Device); + +void VmbusChildDeviceRemove(struct hv_device *Device); + +/* static void */ +/* VmbusChildDeviceDestroy( */ +/* struct hv_device *); */ + +struct vmbus_channel *GetChannelFromRelId(u32 relId); + + +/* Connection interface */ + +int VmbusConnect(void); + +int VmbusDisconnect(void); + +int VmbusPostMessage(void *buffer, size_t bufSize); + +int VmbusSetEvent(u32 childRelId); + +void VmbusOnEvents(void); + + +#endif /* _VMBUS_PRIVATE_H_ */ -- cgit v0.10.2 From 0e0ab5f5af2cea05a3f7526fb05585f5cbe8a106 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:47:13 -0700 Subject: Staging: hv: rename VmbusChannelInterface.h to vmbus_channel_interface.h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/VmbusChannelInterface.h b/drivers/staging/hv/VmbusChannelInterface.h deleted file mode 100644 index 2674282..0000000 --- a/drivers/staging/hv/VmbusChannelInterface.h +++ /dev/null @@ -1,89 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - -#ifndef __VMBUSCHANNELINTERFACE_H -#define __VMBUSCHANNELINTERFACE_H - -/* - * A revision number of vmbus that is used for ensuring both ends on a - * partition are using compatible versions. - */ -#define VMBUS_REVISION_NUMBER 13 - -/* Make maximum size of pipe payload of 16K */ -#define MAX_PIPE_DATA_PAYLOAD (sizeof(u8) * 16384) - -/* Define PipeMode values. */ -#define VMBUS_PIPE_TYPE_BYTE 0x00000000 -#define VMBUS_PIPE_TYPE_MESSAGE 0x00000004 - -/* The size of the user defined data buffer for non-pipe offers. */ -#define MAX_USER_DEFINED_BYTES 120 - -/* The size of the user defined data buffer for pipe offers. */ -#define MAX_PIPE_USER_DEFINED_BYTES 116 - -/* - * At the center of the Channel Management library is the Channel Offer. This - * struct contains the fundamental information about an offer. - */ -struct vmbus_channel_offer { - struct hv_guid InterfaceType; - struct hv_guid InterfaceInstance; - u64 InterruptLatencyIn100nsUnits; - u32 InterfaceRevision; - u32 ServerContextAreaSize; /* in bytes */ - u16 ChannelFlags; - u16 MmioMegabytes; /* in bytes * 1024 * 1024 */ - - union { - /* Non-pipes: The user has MAX_USER_DEFINED_BYTES bytes. */ - struct { - unsigned char UserDefined[MAX_USER_DEFINED_BYTES]; - } Standard; - - /* - * Pipes: - * The following sructure is an integrated pipe protocol, which - * is implemented on top of standard user-defined data. Pipe - * clients have MAX_PIPE_USER_DEFINED_BYTES left for their own - * use. - */ - struct { - u32 PipeMode; - unsigned char UserDefined[MAX_PIPE_USER_DEFINED_BYTES]; - } Pipe; - } u; - u32 Padding; -} __attribute__((packed)); - -/* Server Flags */ -#define VMBUS_CHANNEL_ENUMERATE_DEVICE_INTERFACE 1 -#define VMBUS_CHANNEL_SERVER_SUPPORTS_TRANSFER_PAGES 2 -#define VMBUS_CHANNEL_SERVER_SUPPORTS_GPADLS 4 -#define VMBUS_CHANNEL_NAMED_PIPE_MODE 0x10 -#define VMBUS_CHANNEL_LOOPBACK_OFFER 0x100 -#define VMBUS_CHANNEL_PARENT_OFFER 0x200 -#define VMBUS_CHANNEL_REQUEST_MONITORED_NOTIFICATION 0x400 - -#endif diff --git a/drivers/staging/hv/channel_mgmt.h b/drivers/staging/hv/channel_mgmt.h index 9219199..b92282b 100644 --- a/drivers/staging/hv/channel_mgmt.h +++ b/drivers/staging/hv/channel_mgmt.h @@ -28,7 +28,7 @@ #include #include #include "ring_buffer.h" -#include "VmbusChannelInterface.h" +#include "vmbus_channel_interface.h" #include "VmbusPacketFormat.h" /* Version 1 messages */ diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c index 5ab1b06..ddda0d7 100644 --- a/drivers/staging/hv/hv_utils.c +++ b/drivers/staging/hv/hv_utils.c @@ -29,7 +29,7 @@ #include "osd.h" #include "vmbus.h" #include "VmbusPacketFormat.h" -#include "VmbusChannelInterface.h" +#include "vmbus_channel_interface.h" #include "VersionInfo.h" #include "channel.h" #include "vmbus_private.h" diff --git a/drivers/staging/hv/netvsc.h b/drivers/staging/hv/netvsc.h index 05d2ceb..91b5c23 100644 --- a/drivers/staging/hv/netvsc.h +++ b/drivers/staging/hv/netvsc.h @@ -27,7 +27,7 @@ #include #include "VmbusPacketFormat.h" -#include "VmbusChannelInterface.h" +#include "vmbus_channel_interface.h" #include "netvsc_api.h" diff --git a/drivers/staging/hv/vmbus_channel_interface.h b/drivers/staging/hv/vmbus_channel_interface.h new file mode 100644 index 0000000..2674282 --- /dev/null +++ b/drivers/staging/hv/vmbus_channel_interface.h @@ -0,0 +1,89 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + +#ifndef __VMBUSCHANNELINTERFACE_H +#define __VMBUSCHANNELINTERFACE_H + +/* + * A revision number of vmbus that is used for ensuring both ends on a + * partition are using compatible versions. + */ +#define VMBUS_REVISION_NUMBER 13 + +/* Make maximum size of pipe payload of 16K */ +#define MAX_PIPE_DATA_PAYLOAD (sizeof(u8) * 16384) + +/* Define PipeMode values. */ +#define VMBUS_PIPE_TYPE_BYTE 0x00000000 +#define VMBUS_PIPE_TYPE_MESSAGE 0x00000004 + +/* The size of the user defined data buffer for non-pipe offers. */ +#define MAX_USER_DEFINED_BYTES 120 + +/* The size of the user defined data buffer for pipe offers. */ +#define MAX_PIPE_USER_DEFINED_BYTES 116 + +/* + * At the center of the Channel Management library is the Channel Offer. This + * struct contains the fundamental information about an offer. + */ +struct vmbus_channel_offer { + struct hv_guid InterfaceType; + struct hv_guid InterfaceInstance; + u64 InterruptLatencyIn100nsUnits; + u32 InterfaceRevision; + u32 ServerContextAreaSize; /* in bytes */ + u16 ChannelFlags; + u16 MmioMegabytes; /* in bytes * 1024 * 1024 */ + + union { + /* Non-pipes: The user has MAX_USER_DEFINED_BYTES bytes. */ + struct { + unsigned char UserDefined[MAX_USER_DEFINED_BYTES]; + } Standard; + + /* + * Pipes: + * The following sructure is an integrated pipe protocol, which + * is implemented on top of standard user-defined data. Pipe + * clients have MAX_PIPE_USER_DEFINED_BYTES left for their own + * use. + */ + struct { + u32 PipeMode; + unsigned char UserDefined[MAX_PIPE_USER_DEFINED_BYTES]; + } Pipe; + } u; + u32 Padding; +} __attribute__((packed)); + +/* Server Flags */ +#define VMBUS_CHANNEL_ENUMERATE_DEVICE_INTERFACE 1 +#define VMBUS_CHANNEL_SERVER_SUPPORTS_TRANSFER_PAGES 2 +#define VMBUS_CHANNEL_SERVER_SUPPORTS_GPADLS 4 +#define VMBUS_CHANNEL_NAMED_PIPE_MODE 0x10 +#define VMBUS_CHANNEL_LOOPBACK_OFFER 0x100 +#define VMBUS_CHANNEL_PARENT_OFFER 0x200 +#define VMBUS_CHANNEL_REQUEST_MONITORED_NOTIFICATION 0x400 + +#endif -- cgit v0.10.2 From f8e5add2284b6373b3ba994c716a4792483e69eb Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:50:11 -0700 Subject: Staging: hv: rename VmbusPacketFormat.h to vmbus_packet_format.h Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/VmbusPacketFormat.h b/drivers/staging/hv/VmbusPacketFormat.h deleted file mode 100644 index f9f6b4b..0000000 --- a/drivers/staging/hv/VmbusPacketFormat.h +++ /dev/null @@ -1,161 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - -#ifndef _VMBUSPACKETFORMAT_H_ -#define _VMBUSPACKETFORMAT_H_ - -struct vmpacket_descriptor { - u16 Type; - u16 DataOffset8; - u16 Length8; - u16 Flags; - u64 TransactionId; -} __attribute__((packed)); - -struct vmpacket_header { - u32 PreviousPacketStartOffset; - struct vmpacket_descriptor Descriptor; -} __attribute__((packed)); - -struct vmtransfer_page_range { - u32 ByteCount; - u32 ByteOffset; -} __attribute__((packed)); - -struct vmtransfer_page_packet_header { - struct vmpacket_descriptor d; - u16 TransferPageSetId; - bool SenderOwnsSet; - u8 Reserved; - u32 RangeCount; - struct vmtransfer_page_range Ranges[1]; -} __attribute__((packed)); - -struct vmgpadl_packet_header { - struct vmpacket_descriptor d; - u32 Gpadl; - u32 Reserved; -} __attribute__((packed)); - -struct vmadd_remove_transfer_page_set { - struct vmpacket_descriptor d; - u32 Gpadl; - u16 TransferPageSetId; - u16 Reserved; -} __attribute__((packed)); - -/* - * This structure defines a range in guest physical space that can be made to - * look virtually contiguous. - */ -struct gpa_range { - u32 ByteCount; - u32 ByteOffset; - u64 PfnArray[0]; -}; - -/* - * This is the format for an Establish Gpadl packet, which contains a handle by - * which this GPADL will be known and a set of GPA ranges associated with it. - * This can be converted to a MDL by the guest OS. If there are multiple GPA - * ranges, then the resulting MDL will be "chained," representing multiple VA - * ranges. - */ -struct vmestablish_gpadl { - struct vmpacket_descriptor d; - u32 Gpadl; - u32 RangeCount; - struct gpa_range Range[1]; -} __attribute__((packed)); - -/* - * This is the format for a Teardown Gpadl packet, which indicates that the - * GPADL handle in the Establish Gpadl packet will never be referenced again. - */ -struct vmteardown_gpadl { - struct vmpacket_descriptor d; - u32 Gpadl; - u32 Reserved; /* for alignment to a 8-byte boundary */ -} __attribute__((packed)); - -/* - * This is the format for a GPA-Direct packet, which contains a set of GPA - * ranges, in addition to commands and/or data. - */ -struct vmdata_gpa_direct { - struct vmpacket_descriptor d; - u32 Reserved; - u32 RangeCount; - struct gpa_range Range[1]; -} __attribute__((packed)); - -/* This is the format for a Additional Data Packet. */ -struct vmadditional_data { - struct vmpacket_descriptor d; - u64 TotalBytes; - u32 ByteOffset; - u32 ByteCount; - unsigned char Data[1]; -} __attribute__((packed)); - -union vmpacket_largest_possible_header { - struct vmpacket_descriptor SimpleHeader; - struct vmtransfer_page_packet_header TransferPageHeader; - struct vmgpadl_packet_header GpadlHeader; - struct vmadd_remove_transfer_page_set AddRemoveTransferPageHeader; - struct vmestablish_gpadl EstablishGpadlHeader; - struct vmteardown_gpadl TeardownGpadlHeader; - struct vmdata_gpa_direct DataGpaDirectHeader; -}; - -#define VMPACKET_DATA_START_ADDRESS(__packet) \ - (void *)(((unsigned char *)__packet) + \ - ((struct vmpacket_descriptor)__packet)->DataOffset8 * 8) - -#define VMPACKET_DATA_LENGTH(__packet) \ - ((((struct vmpacket_descriptor)__packet)->Length8 - \ - ((struct vmpacket_descriptor)__packet)->DataOffset8) * 8) - -#define VMPACKET_TRANSFER_MODE(__packet) \ - (((struct IMPACT)__packet)->Type) - -enum vmbus_packet_type { - VmbusPacketTypeInvalid = 0x0, - VmbusPacketTypeSynch = 0x1, - VmbusPacketTypeAddTransferPageSet = 0x2, - VmbusPacketTypeRemoveTransferPageSet = 0x3, - VmbusPacketTypeEstablishGpadl = 0x4, - VmbusPacketTypeTearDownGpadl = 0x5, - VmbusPacketTypeDataInBand = 0x6, - VmbusPacketTypeDataUsingTransferPages = 0x7, - VmbusPacketTypeDataUsingGpadl = 0x8, - VmbusPacketTypeDataUsingGpaDirect = 0x9, - VmbusPacketTypeCancelRequest = 0xa, - VmbusPacketTypeCompletion = 0xb, - VmbusPacketTypeDataUsingAdditionalPackets = 0xc, - VmbusPacketTypeAdditionalData = 0xd -}; - -#define VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED 1 - -#endif diff --git a/drivers/staging/hv/channel_mgmt.h b/drivers/staging/hv/channel_mgmt.h index b92282b..5908b81 100644 --- a/drivers/staging/hv/channel_mgmt.h +++ b/drivers/staging/hv/channel_mgmt.h @@ -29,7 +29,7 @@ #include #include "ring_buffer.h" #include "vmbus_channel_interface.h" -#include "VmbusPacketFormat.h" +#include "vmbus_packet_format.h" /* Version 1 messages */ enum vmbus_channel_message_type { diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c index ddda0d7..44d306c 100644 --- a/drivers/staging/hv/hv_utils.c +++ b/drivers/staging/hv/hv_utils.c @@ -28,7 +28,7 @@ #include "logging.h" #include "osd.h" #include "vmbus.h" -#include "VmbusPacketFormat.h" +#include "vmbus_packet_format.h" #include "vmbus_channel_interface.h" #include "VersionInfo.h" #include "channel.h" diff --git a/drivers/staging/hv/netvsc.h b/drivers/staging/hv/netvsc.h index 91b5c23..c71dce5 100644 --- a/drivers/staging/hv/netvsc.h +++ b/drivers/staging/hv/netvsc.h @@ -26,7 +26,7 @@ #define _NETVSC_H_ #include -#include "VmbusPacketFormat.h" +#include "vmbus_packet_format.h" #include "vmbus_channel_interface.h" #include "netvsc_api.h" diff --git a/drivers/staging/hv/storvsc.c b/drivers/staging/hv/storvsc.c index 3a8b54f..27a276e 100644 --- a/drivers/staging/hv/storvsc.c +++ b/drivers/staging/hv/storvsc.c @@ -26,7 +26,7 @@ #include "osd.h" #include "logging.h" #include "storvsc_api.h" -#include "VmbusPacketFormat.h" +#include "vmbus_packet_format.h" #include "vstorage.h" diff --git a/drivers/staging/hv/vmbus_packet_format.h b/drivers/staging/hv/vmbus_packet_format.h new file mode 100644 index 0000000..f9f6b4b --- /dev/null +++ b/drivers/staging/hv/vmbus_packet_format.h @@ -0,0 +1,161 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + +#ifndef _VMBUSPACKETFORMAT_H_ +#define _VMBUSPACKETFORMAT_H_ + +struct vmpacket_descriptor { + u16 Type; + u16 DataOffset8; + u16 Length8; + u16 Flags; + u64 TransactionId; +} __attribute__((packed)); + +struct vmpacket_header { + u32 PreviousPacketStartOffset; + struct vmpacket_descriptor Descriptor; +} __attribute__((packed)); + +struct vmtransfer_page_range { + u32 ByteCount; + u32 ByteOffset; +} __attribute__((packed)); + +struct vmtransfer_page_packet_header { + struct vmpacket_descriptor d; + u16 TransferPageSetId; + bool SenderOwnsSet; + u8 Reserved; + u32 RangeCount; + struct vmtransfer_page_range Ranges[1]; +} __attribute__((packed)); + +struct vmgpadl_packet_header { + struct vmpacket_descriptor d; + u32 Gpadl; + u32 Reserved; +} __attribute__((packed)); + +struct vmadd_remove_transfer_page_set { + struct vmpacket_descriptor d; + u32 Gpadl; + u16 TransferPageSetId; + u16 Reserved; +} __attribute__((packed)); + +/* + * This structure defines a range in guest physical space that can be made to + * look virtually contiguous. + */ +struct gpa_range { + u32 ByteCount; + u32 ByteOffset; + u64 PfnArray[0]; +}; + +/* + * This is the format for an Establish Gpadl packet, which contains a handle by + * which this GPADL will be known and a set of GPA ranges associated with it. + * This can be converted to a MDL by the guest OS. If there are multiple GPA + * ranges, then the resulting MDL will be "chained," representing multiple VA + * ranges. + */ +struct vmestablish_gpadl { + struct vmpacket_descriptor d; + u32 Gpadl; + u32 RangeCount; + struct gpa_range Range[1]; +} __attribute__((packed)); + +/* + * This is the format for a Teardown Gpadl packet, which indicates that the + * GPADL handle in the Establish Gpadl packet will never be referenced again. + */ +struct vmteardown_gpadl { + struct vmpacket_descriptor d; + u32 Gpadl; + u32 Reserved; /* for alignment to a 8-byte boundary */ +} __attribute__((packed)); + +/* + * This is the format for a GPA-Direct packet, which contains a set of GPA + * ranges, in addition to commands and/or data. + */ +struct vmdata_gpa_direct { + struct vmpacket_descriptor d; + u32 Reserved; + u32 RangeCount; + struct gpa_range Range[1]; +} __attribute__((packed)); + +/* This is the format for a Additional Data Packet. */ +struct vmadditional_data { + struct vmpacket_descriptor d; + u64 TotalBytes; + u32 ByteOffset; + u32 ByteCount; + unsigned char Data[1]; +} __attribute__((packed)); + +union vmpacket_largest_possible_header { + struct vmpacket_descriptor SimpleHeader; + struct vmtransfer_page_packet_header TransferPageHeader; + struct vmgpadl_packet_header GpadlHeader; + struct vmadd_remove_transfer_page_set AddRemoveTransferPageHeader; + struct vmestablish_gpadl EstablishGpadlHeader; + struct vmteardown_gpadl TeardownGpadlHeader; + struct vmdata_gpa_direct DataGpaDirectHeader; +}; + +#define VMPACKET_DATA_START_ADDRESS(__packet) \ + (void *)(((unsigned char *)__packet) + \ + ((struct vmpacket_descriptor)__packet)->DataOffset8 * 8) + +#define VMPACKET_DATA_LENGTH(__packet) \ + ((((struct vmpacket_descriptor)__packet)->Length8 - \ + ((struct vmpacket_descriptor)__packet)->DataOffset8) * 8) + +#define VMPACKET_TRANSFER_MODE(__packet) \ + (((struct IMPACT)__packet)->Type) + +enum vmbus_packet_type { + VmbusPacketTypeInvalid = 0x0, + VmbusPacketTypeSynch = 0x1, + VmbusPacketTypeAddTransferPageSet = 0x2, + VmbusPacketTypeRemoveTransferPageSet = 0x3, + VmbusPacketTypeEstablishGpadl = 0x4, + VmbusPacketTypeTearDownGpadl = 0x5, + VmbusPacketTypeDataInBand = 0x6, + VmbusPacketTypeDataUsingTransferPages = 0x7, + VmbusPacketTypeDataUsingGpadl = 0x8, + VmbusPacketTypeDataUsingGpaDirect = 0x9, + VmbusPacketTypeCancelRequest = 0xa, + VmbusPacketTypeCompletion = 0xb, + VmbusPacketTypeDataUsingAdditionalPackets = 0xc, + VmbusPacketTypeAdditionalData = 0xd +}; + +#define VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED 1 + +#endif -- cgit v0.10.2 From 2d82f6c734f411e5da9c60dace4140d8d029bb12 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 22:52:28 -0700 Subject: Staging: hv: rename VersionInfo.h to version_info.h The great renaming of the hv code is now complete. Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/VersionInfo.h b/drivers/staging/hv/VersionInfo.h deleted file mode 100644 index 82e74b1..0000000 --- a/drivers/staging/hv/VersionInfo.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * - * Copyright (c) 2009, Microsoft Corporation. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 Temple - * Place - Suite 330, Boston, MA 02111-1307 USA. - * - * Authors: - * Haiyang Zhang - * Hank Janssen - * - */ - -#ifndef __HV_VERSION_INFO -#define __HV_VERSION_INFO - -/* - * We use the same version numbering for all Hyper-V modules. - * - * Definition of versioning is as follows; - * - * Major Number Changes for these scenarios; - * 1. When a new version of Windows Hyper-V - * is released. - * 2. A Major change has occurred in the - * Linux IC's. - * (For example the merge for the first time - * into the kernel) Every time the Major Number - * changes, the Revision number is reset to 0. - * Minor Number Changes when new functionality is added - * to the Linux IC's that is not a bug fix. - * - */ -#define HV_DRV_VERSION "3.0" - - -#endif diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index 3e7c75e..a81040f 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -32,7 +32,7 @@ #include #include "osd.h" #include "logging.h" -#include "VersionInfo.h" +#include "version_info.h" #include "vmbus.h" #include "storvsc_api.h" diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c index 44d306c..8f1d3ba 100644 --- a/drivers/staging/hv/hv_utils.c +++ b/drivers/staging/hv/hv_utils.c @@ -30,7 +30,7 @@ #include "vmbus.h" #include "vmbus_packet_format.h" #include "vmbus_channel_interface.h" -#include "VersionInfo.h" +#include "version_info.h" #include "channel.h" #include "vmbus_private.h" #include "vmbus_api.h" diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 3a6fe25..30c946c 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -36,7 +36,7 @@ #include #include "osd.h" #include "logging.h" -#include "VersionInfo.h" +#include "version_info.h" #include "vmbus.h" #include "netvsc_api.h" diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index 56b659b..6a20146 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -33,7 +33,7 @@ #include #include "osd.h" #include "logging.h" -#include "VersionInfo.h" +#include "version_info.h" #include "vmbus.h" #include "storvsc_api.h" diff --git a/drivers/staging/hv/version_info.h b/drivers/staging/hv/version_info.h new file mode 100644 index 0000000..82e74b1 --- /dev/null +++ b/drivers/staging/hv/version_info.h @@ -0,0 +1,47 @@ +/* + * + * Copyright (c) 2009, Microsoft Corporation. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., 59 Temple + * Place - Suite 330, Boston, MA 02111-1307 USA. + * + * Authors: + * Haiyang Zhang + * Hank Janssen + * + */ + +#ifndef __HV_VERSION_INFO +#define __HV_VERSION_INFO + +/* + * We use the same version numbering for all Hyper-V modules. + * + * Definition of versioning is as follows; + * + * Major Number Changes for these scenarios; + * 1. When a new version of Windows Hyper-V + * is released. + * 2. A Major change has occurred in the + * Linux IC's. + * (For example the merge for the first time + * into the kernel) Every time the Major Number + * changes, the Revision number is reset to 0. + * Minor Number Changes when new functionality is added + * to the Linux IC's that is not a bug fix. + * + */ +#define HV_DRV_VERSION "3.0" + + +#endif diff --git a/drivers/staging/hv/vmbus.c b/drivers/staging/hv/vmbus.c index 296c38f..0a9d845 100644 --- a/drivers/staging/hv/vmbus.c +++ b/drivers/staging/hv/vmbus.c @@ -24,7 +24,7 @@ #include #include "osd.h" #include "logging.h" -#include "VersionInfo.h" +#include "version_info.h" #include "vmbus_private.h" static const char *gDriverName = "vmbus"; diff --git a/drivers/staging/hv/vmbus_drv.c b/drivers/staging/hv/vmbus_drv.c index a715b3d..c21731a 100644 --- a/drivers/staging/hv/vmbus_drv.c +++ b/drivers/staging/hv/vmbus_drv.c @@ -27,7 +27,7 @@ #include #include #include -#include "VersionInfo.h" +#include "version_info.h" #include "osd.h" #include "logging.h" #include "vmbus.h" -- cgit v0.10.2 From af449f924c95fa8d4f57c9b71e9b104a5079fa33 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 23:09:12 -0700 Subject: Staging: arlan: delete the driver It has sat in the staging directory since October of 2009, and no one has stepped up to take it over, so odds are, no one cares about it anymore. So, it is now deleted as scheduled, and documented in the TODO file. Cc: John W. Linville Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 6b00e15a..8bf839e 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -127,8 +127,6 @@ source "drivers/staging/samsung-laptop/Kconfig" source "drivers/staging/strip/Kconfig" -source "drivers/staging/arlan/Kconfig" - source "drivers/staging/wavelan/Kconfig" source "drivers/staging/netwave/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index e825647..b274706 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -44,7 +44,6 @@ obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/ obj-$(CONFIG_BATMAN_ADV) += batman-adv/ obj-$(CONFIG_SAMSUNG_LAPTOP) += samsung-laptop/ obj-$(CONFIG_STRIP) += strip/ -obj-$(CONFIG_ARLAN) += arlan/ obj-$(CONFIG_WAVELAN) += wavelan/ obj-$(CONFIG_PCMCIA_WAVELAN) += wavelan/ obj-$(CONFIG_PCMCIA_NETWAVE) += netwave/ diff --git a/drivers/staging/arlan/Kconfig b/drivers/staging/arlan/Kconfig deleted file mode 100644 index 5e42b81..0000000 --- a/drivers/staging/arlan/Kconfig +++ /dev/null @@ -1,15 +0,0 @@ -config ARLAN - tristate "Aironet Arlan 655 & IC2200 DS support" - depends on ISA && !64BIT && WLAN - select WIRELESS_EXT - ---help--- - Aironet makes Arlan, a class of wireless LAN adapters. These use the - www.Telxon.com chip, which is also used on several similar cards. - This driver is tested on the 655 and IC2200 series cards. Look at - for the latest information. - - The driver is built as two modules, arlan and arlan-proc. The latter - is the /proc interface and is not needed most of time. - - On some computers the card ends up in non-valid state after some - time. Use a ping-reset script to clear it. diff --git a/drivers/staging/arlan/Makefile b/drivers/staging/arlan/Makefile deleted file mode 100644 index 5a84d44..0000000 --- a/drivers/staging/arlan/Makefile +++ /dev/null @@ -1,3 +0,0 @@ -obj-$(CONFIG_ARLAN) += arlan.o - -arlan-objs := arlan-main.o arlan-proc.o diff --git a/drivers/staging/arlan/TODO b/drivers/staging/arlan/TODO deleted file mode 100644 index 9bd15a2..0000000 --- a/drivers/staging/arlan/TODO +++ /dev/null @@ -1,7 +0,0 @@ -TODO: - - step up and maintain this driver to ensure that it continues - to work. Having the hardware for this is pretty much a - requirement. If this does not happen, the will be removed in - the 2.6.35 kernel release. - -Please send patches to Greg Kroah-Hartman . diff --git a/drivers/staging/arlan/arlan-main.c b/drivers/staging/arlan/arlan-main.c deleted file mode 100644 index 301b979..0000000 --- a/drivers/staging/arlan/arlan-main.c +++ /dev/null @@ -1,1765 +0,0 @@ -/* - * Copyright (C) 1997 Cullen Jennings - * Copyright (C) 1998 Elmer Joandiu, elmer@ylenurme.ee - * GNU General Public License applies - * This module provides support for the Arlan 655 card made by Aironet - */ - -#include "arlan.h" - -#if BITS_PER_LONG != 32 -# error FIXME: this driver requires a 32-bit platform -#endif - -static const char *arlan_version = "C.Jennigs 97 & Elmer.Joandi@ut.ee Oct'98, http://www.ylenurme.ee/~elmer/655/"; - -struct net_device *arlan_device[MAX_ARLANS]; - -static int SID = SIDUNKNOWN; -static int radioNodeId = radioNodeIdUNKNOWN; -static char encryptionKey[12] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'}; -int arlan_debug = debugUNKNOWN; -static int spreadingCode = spreadingCodeUNKNOWN; -static int channelNumber = channelNumberUNKNOWN; -static int channelSet = channelSetUNKNOWN; -static int systemId = systemIdUNKNOWN; -static int registrationMode = registrationModeUNKNOWN; -static int keyStart; -static int tx_delay_ms; -static int retries = 5; -static int tx_queue_len = 1; -static int arlan_EEPROM_bad; - -#ifdef ARLAN_DEBUGGING - -static int testMemory = testMemoryUNKNOWN; -static int irq = irqUNKNOWN; -static int txScrambled = 1; -static int mdebug; - -module_param(irq, int, 0); -module_param(mdebug, int, 0); -module_param(testMemory, int, 0); -module_param(txScrambled, int, 0); -MODULE_PARM_DESC(irq, "(unused)"); -MODULE_PARM_DESC(testMemory, "(unused)"); -MODULE_PARM_DESC(mdebug, "Arlan multicast debugging (0-1)"); -#endif - -module_param_named(debug, arlan_debug, int, 0); -module_param(spreadingCode, int, 0); -module_param(channelNumber, int, 0); -module_param(channelSet, int, 0); -module_param(systemId, int, 0); -module_param(registrationMode, int, 0); -module_param(radioNodeId, int, 0); -module_param(SID, int, 0); -module_param(keyStart, int, 0); -module_param(tx_delay_ms, int, 0); -module_param(retries, int, 0); -module_param(tx_queue_len, int, 0); -module_param_named(EEPROM_bad, arlan_EEPROM_bad, int, 0); -MODULE_PARM_DESC(debug, "Arlan debug enable (0-1)"); -MODULE_PARM_DESC(retries, "Arlan maximum packet retransmisions"); -#ifdef ARLAN_ENTRY_EXIT_DEBUGGING -static int arlan_entry_debug; -static int arlan_exit_debug; -static int arlan_entry_and_exit_debug; -module_param_named(entry_debug, arlan_entry_debug, int, 0); -module_param_named(exit_debug, arlan_exit_debug, int, 0); -module_param_named(entry_and_exit_debug, arlan_entry_and_exit_debug, int, 0); -MODULE_PARM_DESC(entry_debug, "Arlan driver function entry debugging"); -MODULE_PARM_DESC(exit_debug, "Arlan driver function exit debugging"); -MODULE_PARM_DESC(entry_and_exit_debug, "Arlan driver function entry and exit debugging"); -#endif - -struct arlan_conf_stru arlan_conf[MAX_ARLANS]; -static int arlans_found; - -static int arlan_open(struct net_device *dev); -static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev); -static irqreturn_t arlan_interrupt(int irq, void *dev_id); -static int arlan_close(struct net_device *dev); -static struct net_device_stats *arlan_statistics(struct net_device *dev); -static void arlan_set_multicast(struct net_device *dev); -static int arlan_hw_tx(struct net_device *dev, char *buf, int length); -static int arlan_hw_config(struct net_device *dev); -static void arlan_tx_done_interrupt(struct net_device *dev, int status); -static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short, u_short); -static void arlan_process_interrupt(struct net_device *dev); -static void arlan_tx_timeout(struct net_device *dev); - -static inline long us2ticks(int us) -{ - return us * (1000000 / HZ); -} - - -#ifdef ARLAN_ENTRY_EXIT_DEBUGGING -#define ARLAN_DEBUG_ENTRY(name) \ - {\ - struct timeval timev;\ - do_gettimeofday(&timev);\ - if (arlan_entry_debug || arlan_entry_and_exit_debug)\ - printk("--->>>" name " %ld " "\n", ((long int) timev.tv_sec * 1000000 + timev.tv_usec));\ - } -#define ARLAN_DEBUG_EXIT(name) \ - {\ - struct timeval timev;\ - do_gettimeofday(&timev);\ - if (arlan_exit_debug || arlan_entry_and_exit_debug)\ - printk("<<<---" name " %ld " "\n", ((long int) timev.tv_sec * 1000000 + timev.tv_usec));\ - } -#else -#define ARLAN_DEBUG_ENTRY(name) -#define ARLAN_DEBUG_EXIT(name) -#endif - - -#define arlan_interrupt_ack(dev)\ - clearClearInterrupt(dev);\ - setClearInterrupt(dev); - -static inline int arlan_drop_tx(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - - dev->stats.tx_errors++; - if (priv->Conf->tx_delay_ms) - priv->tx_done_delayed = jiffies + priv->Conf->tx_delay_ms * HZ / 1000 + 1; - else { - priv->waiting_command_mask &= ~ARLAN_COMMAND_TX; - TXHEAD(dev).offset = 0; - TXTAIL(dev).offset = 0; - priv->txLast = 0; - priv->bad = 0; - if (!priv->under_reset && !priv->under_config) - netif_wake_queue(dev); - } - return 1; -} - - -int arlan_command(struct net_device *dev, int command_p) -{ - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - struct arlan_conf_stru *conf = priv->Conf; - int udelayed = 0; - int i = 0; - unsigned long flags; - - ARLAN_DEBUG_ENTRY("arlan_command"); - - if (priv->card_polling_interval) - priv->card_polling_interval = 1; - - if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) - printk(KERN_DEBUG "arlan_command, %lx commandByte %x waiting %lx incoming %x\n", - jiffies, READSHMB(arlan->commandByte), - priv->waiting_command_mask, command_p); - - priv->waiting_command_mask |= command_p; - - if (priv->waiting_command_mask & ARLAN_COMMAND_RESET) - if (time_after(jiffies, priv->lastReset + 5 * HZ)) - priv->waiting_command_mask &= ~ARLAN_COMMAND_RESET; - - if (priv->waiting_command_mask & ARLAN_COMMAND_INT_ACK) { - arlan_interrupt_ack(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_ACK; - } - if (priv->waiting_command_mask & ARLAN_COMMAND_INT_ENABLE) { - setInterruptEnable(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_ENABLE; - } - - /* Card access serializing lock */ - spin_lock_irqsave(&priv->lock, flags); - - /* Check cards status and waiting */ - - if (priv->waiting_command_mask & (ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW)) { - while (priv->waiting_command_mask & (ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW)) { - if (READSHMB(arlan->resetFlag) || - READSHMB(arlan->commandByte)) /* || - (readControlRegister(dev) & ARLAN_ACCESS)) - */ - udelay(40); - else - priv->waiting_command_mask &= ~(ARLAN_COMMAND_LONG_WAIT_NOW | ARLAN_COMMAND_WAIT_NOW); - - udelayed++; - - if (priv->waiting_command_mask & ARLAN_COMMAND_LONG_WAIT_NOW) { - if (udelayed * 40 > 1000000) { - printk(KERN_ERR "%s long wait too long\n", dev->name); - priv->waiting_command_mask |= ARLAN_COMMAND_RESET; - break; - } - } else if (priv->waiting_command_mask & ARLAN_COMMAND_WAIT_NOW) { - if (udelayed * 40 > 1000) { - printk(KERN_ERR "%s short wait too long\n", dev->name); - goto bad_end; - } - } - } - } else { - i = 0; - while ((READSHMB(arlan->resetFlag) || - READSHMB(arlan->commandByte)) && - conf->pre_Command_Wait > (i++) * 10) - udelay(10); - - - if ((READSHMB(arlan->resetFlag) || - READSHMB(arlan->commandByte)) && - !(priv->waiting_command_mask & ARLAN_COMMAND_RESET)) - goto card_busy_end; - } - if (priv->waiting_command_mask & ARLAN_COMMAND_RESET) - priv->under_reset = 1; - if (priv->waiting_command_mask & ARLAN_COMMAND_CONF) - priv->under_config = 1; - - /* Issuing command */ - arlan_lock_card_access(dev); - if (priv->waiting_command_mask & ARLAN_COMMAND_POWERUP) { - /* if (readControlRegister(dev) & (ARLAN_ACCESS && ARLAN_POWER)) */ - setPowerOn(dev); - arlan_interrupt_lancpu(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_POWERUP; - priv->waiting_command_mask |= ARLAN_COMMAND_RESET; - priv->card_polling_interval = HZ / 10; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_ACTIVATE) { - WRITESHMB(arlan->commandByte, ARLAN_COM_ACTIVATE); - arlan_interrupt_lancpu(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_ACTIVATE; - priv->card_polling_interval = HZ / 10; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_RX_ABORT) { - if (priv->rx_command_given) { - WRITESHMB(arlan->commandByte, ARLAN_COM_RX_ABORT); - arlan_interrupt_lancpu(dev); - priv->rx_command_given = 0; - } - priv->waiting_command_mask &= ~ARLAN_COMMAND_RX_ABORT; - priv->card_polling_interval = 1; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_TX_ABORT) { - if (priv->tx_command_given) { - WRITESHMB(arlan->commandByte, ARLAN_COM_TX_ABORT); - arlan_interrupt_lancpu(dev); - priv->tx_command_given = 0; - } - priv->waiting_command_mask &= ~ARLAN_COMMAND_TX_ABORT; - priv->card_polling_interval = 1; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_RESET) { - priv->under_reset = 1; - netif_stop_queue(dev); - - arlan_drop_tx(dev); - if (priv->tx_command_given || priv->rx_command_given) - printk(KERN_ERR "%s: Reset under tx or rx command\n", dev->name); - - netif_stop_queue(dev); - if (arlan_debug & ARLAN_DEBUG_RESET) - printk(KERN_ERR "%s: Doing chip reset\n", dev->name); - priv->lastReset = jiffies; - WRITESHM(arlan->commandByte, 0, u_char); - /* hold card in reset state */ - setHardwareReset(dev); - /* set reset flag and then release reset */ - WRITESHM(arlan->resetFlag, 0xff, u_char); - clearChannelAttention(dev); - clearHardwareReset(dev); - priv->card_polling_interval = HZ / 4; - priv->waiting_command_mask &= ~ARLAN_COMMAND_RESET; - priv->waiting_command_mask |= ARLAN_COMMAND_INT_RACK; - /* priv->waiting_command_mask |= ARLAN_COMMAND_INT_RENABLE; */ - /* priv->waiting_command_mask |= ARLAN_COMMAND_RX; */ - } else if (priv->waiting_command_mask & ARLAN_COMMAND_INT_RACK) { - clearHardwareReset(dev); - clearClearInterrupt(dev); - setClearInterrupt(dev); - setInterruptEnable(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_RACK; - priv->waiting_command_mask |= ARLAN_COMMAND_CONF; - priv->under_config = 1; - priv->under_reset = 0; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_INT_RENABLE) { - setInterruptEnable(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_INT_RENABLE; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_CONF) { - if (priv->tx_command_given || priv->rx_command_given) - printk(KERN_ERR "%s: Reset under tx or rx command\n", dev->name); - - arlan_drop_tx(dev); - setInterruptEnable(dev); - arlan_hw_config(dev); - arlan_interrupt_lancpu(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_CONF; - priv->card_polling_interval = HZ / 10; - /* priv->waiting_command_mask |= ARLAN_COMMAND_INT_RACK; */ - /* priv->waiting_command_mask |= ARLAN_COMMAND_INT_ENABLE; */ - priv->waiting_command_mask |= ARLAN_COMMAND_CONF_WAIT; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_CONF_WAIT) { - if (READSHMB(arlan->configuredStatusFlag) != 0 && - READSHMB(arlan->diagnosticInfo) == 0xff) { - priv->waiting_command_mask &= ~ARLAN_COMMAND_CONF_WAIT; - priv->waiting_command_mask |= ARLAN_COMMAND_RX; - priv->waiting_command_mask |= ARLAN_COMMAND_TBUSY_CLEAR; - priv->card_polling_interval = HZ / 10; - priv->tx_command_given = 0; - priv->under_config = 0; - } else { - priv->card_polling_interval = 1; - if (arlan_debug & ARLAN_DEBUG_TIMING) - printk(KERN_ERR "configure delayed\n"); - } - } else if (priv->waiting_command_mask & ARLAN_COMMAND_RX) { - if (!registrationBad(dev)) { - setInterruptEnable(dev); - memset_io(arlan->commandParameter, 0, 0xf); - WRITESHMB(arlan->commandByte, ARLAN_COM_INT | ARLAN_COM_RX_ENABLE); - WRITESHMB(arlan->commandParameter[0], conf->rxParameter); - arlan_interrupt_lancpu(dev); - priv->rx_command_given = 0; /* mnjah, bad */ - priv->waiting_command_mask &= ~ARLAN_COMMAND_RX; - priv->card_polling_interval = 1; - } else - priv->card_polling_interval = 2; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_TBUSY_CLEAR) { - if (!registrationBad(dev) && - (netif_queue_stopped(dev) || !netif_running(dev))) { - priv->waiting_command_mask &= ~ARLAN_COMMAND_TBUSY_CLEAR; - netif_wake_queue(dev); - } - } else if (priv->waiting_command_mask & ARLAN_COMMAND_TX) { - if (!test_and_set_bit(0, (void *) &priv->tx_command_given)) { - if (time_after(jiffies, - priv->tx_last_sent + us2ticks(conf->rx_tweak1)) - || time_before(jiffies, - priv->last_rx_int_ack_time + us2ticks(conf->rx_tweak2))) { - setInterruptEnable(dev); - memset_io(arlan->commandParameter, 0, 0xf); - WRITESHMB(arlan->commandByte, ARLAN_COM_TX_ENABLE | ARLAN_COM_INT); - memcpy_toio(arlan->commandParameter, &TXLAST(dev), 14); - /* for ( i=1 ; i < 15 ; i++) printk("%02x:",READSHMB(arlan->commandParameter[i])); */ - priv->tx_last_sent = jiffies; - arlan_interrupt_lancpu(dev); - priv->tx_command_given = 1; - priv->waiting_command_mask &= ~ARLAN_COMMAND_TX; - priv->card_polling_interval = 1; - } else { - priv->tx_command_given = 0; - priv->card_polling_interval = 1; - } - } else if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) - printk(KERN_ERR "tx command when tx chain locked\n"); - } else if (priv->waiting_command_mask & ARLAN_COMMAND_NOOPINT) { - { - WRITESHMB(arlan->commandByte, ARLAN_COM_NOP | ARLAN_COM_INT); - } - arlan_interrupt_lancpu(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_NOOPINT; - priv->card_polling_interval = HZ / 3; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_NOOP) { - WRITESHMB(arlan->commandByte, ARLAN_COM_NOP); - arlan_interrupt_lancpu(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_NOOP; - priv->card_polling_interval = HZ / 3; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_SLOW_POLL) { - WRITESHMB(arlan->commandByte, ARLAN_COM_GOTO_SLOW_POLL); - arlan_interrupt_lancpu(dev); - priv->waiting_command_mask &= ~ARLAN_COMMAND_SLOW_POLL; - priv->card_polling_interval = HZ / 3; - } else if (priv->waiting_command_mask & ARLAN_COMMAND_POWERDOWN) { - setPowerOff(dev); - if (arlan_debug & ARLAN_DEBUG_CARD_STATE) - printk(KERN_WARNING "%s: Arlan Going Standby\n", dev->name); - priv->waiting_command_mask &= ~ARLAN_COMMAND_POWERDOWN; - priv->card_polling_interval = 3 * HZ; - } - arlan_unlock_card_access(dev); - for (i = 0; READSHMB(arlan->commandByte) && i < 20; i++) - udelay(10); - if (READSHMB(arlan->commandByte)) - if (arlan_debug & ARLAN_DEBUG_CARD_STATE) - printk(KERN_ERR "card busy leaving command %lx\n", priv->waiting_command_mask); - - spin_unlock_irqrestore(&priv->lock, flags); - ARLAN_DEBUG_EXIT("arlan_command"); - priv->last_command_buff_free_time = jiffies; - return 0; - -card_busy_end: - if (time_after(jiffies, priv->last_command_buff_free_time + HZ)) - priv->waiting_command_mask |= ARLAN_COMMAND_CLEAN_AND_RESET; - - if (arlan_debug & ARLAN_DEBUG_CARD_STATE) - printk(KERN_ERR "%s arlan_command card busy end\n", dev->name); - spin_unlock_irqrestore(&priv->lock, flags); - ARLAN_DEBUG_EXIT("arlan_command"); - return 1; - -bad_end: - printk(KERN_ERR "%s arlan_command bad end\n", dev->name); - - spin_unlock_irqrestore(&priv->lock, flags); - ARLAN_DEBUG_EXIT("arlan_command"); - - return -1; -} - -static inline void arlan_command_process(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - - int times = 0; - while (priv->waiting_command_mask && times < 8) { - if (priv->waiting_command_mask) { - if (arlan_command(dev, 0)) - break; - times++; - } - /* if long command, we won't repeat trying */ ; - if (priv->card_polling_interval > 1) - break; - times++; - } -} - - -static inline void arlan_retransmit_now(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - - - ARLAN_DEBUG_ENTRY("arlan_retransmit_now"); - if (TXLAST(dev).offset == 0) { - if (TXHEAD(dev).offset) { - priv->txLast = 0; - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to head\n"); - } else if (TXTAIL(dev).offset) { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_DEBUG "TX buff switch to tail\n"); - priv->txLast = 1; - } else - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "ReTransmit buff empty"); - netif_wake_queue(dev); - return; - } - arlan_command(dev, ARLAN_COMMAND_TX); - - priv->Conf->driverRetransmissions++; - priv->retransmissions++; - - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk("Retransmit %d bytes\n", TXLAST(dev).length); - - ARLAN_DEBUG_EXIT("arlan_retransmit_now"); -} - - - -static void arlan_registration_timer(unsigned long data) -{ - struct net_device *dev = (struct net_device *) data; - struct arlan_private *priv = netdev_priv(dev); - int bh_mark_needed = 0; - int next_tick = 1; - long lostTime = ((long)jiffies - (long)priv->registrationLastSeen) - * (1000/HZ); - - if (registrationBad(dev)) { - priv->registrationLostCount++; - if (lostTime > 7000 && lostTime < 7200) - printk(KERN_NOTICE "%s registration Lost\n", dev->name); - - if (lostTime / priv->reRegisterExp > 2000) - arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_CONF); - if (lostTime / (priv->reRegisterExp) > 3500) - arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); - if (priv->reRegisterExp < 400) - priv->reRegisterExp += 2; - if (lostTime > 7200) { - next_tick = HZ; - arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); - } - } else { - if (priv->Conf->registrationMode && lostTime > 10000 && - priv->registrationLostCount) { - printk(KERN_NOTICE "%s registration is back after %ld milliseconds\n", - dev->name, lostTime); - } - priv->registrationLastSeen = jiffies; - priv->registrationLostCount = 0; - priv->reRegisterExp = 1; - if (!netif_running(dev)) - netif_wake_queue(dev); - if (time_after(priv->tx_last_sent, priv->tx_last_cleared) && - time_after(jiffies, priv->tx_last_sent * 5*HZ)) { - arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); - priv->tx_last_cleared = jiffies; - } - } - - - if (!registrationBad(dev) && priv->ReTransmitRequested) { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk(KERN_ERR "Retransmit from timer\n"); - priv->ReTransmitRequested = 0; - arlan_retransmit_now(dev); - } - - if (!registrationBad(dev) && - time_after(jiffies, priv->tx_done_delayed) && - priv->tx_done_delayed != 0) { - TXLAST(dev).offset = 0; - - if (priv->txLast) - priv->txLast = 0; - else if (TXTAIL(dev).offset) - priv->txLast = 1; - if (TXLAST(dev).offset) { - arlan_retransmit_now(dev); - dev->trans_start = jiffies; - } - - if (!(TXHEAD(dev).offset && TXTAIL(dev).offset)) - netif_wake_queue(dev); - - priv->tx_done_delayed = 0; - bh_mark_needed = 1; - } - - if (bh_mark_needed) - netif_wake_queue(dev); - - arlan_process_interrupt(dev); - - if (next_tick < priv->card_polling_interval) - next_tick = priv->card_polling_interval; - - priv->timer.expires = jiffies + next_tick; - - add_timer(&priv->timer); -} - - -#ifdef ARLAN_DEBUGGING - -static void arlan_print_registers(struct net_device *dev, int line) -{ - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem *arlan = priv->card; - - u_char hostcpuLock, lancpuLock, controlRegister, cntrlRegImage, - txStatus, rxStatus, interruptInProgress, commandByte; - - - ARLAN_DEBUG_ENTRY("arlan_print_registers"); - READSHM(interruptInProgress, arlan->interruptInProgress, u_char); - READSHM(hostcpuLock, arlan->hostcpuLock, u_char); - READSHM(lancpuLock, arlan->lancpuLock, u_char); - READSHM(controlRegister, arlan->controlRegister, u_char); - READSHM(cntrlRegImage, arlan->cntrlRegImage, u_char); - READSHM(txStatus, arlan->txStatus, u_char); - READSHM(rxStatus, arlan->rxStatus, u_char); - READSHM(commandByte, arlan->commandByte, u_char); - - printk(KERN_WARNING "line %04d IP %02x HL %02x LL %02x CB %02x CR %02x CRI %02x TX %02x RX %02x\n", - line, interruptInProgress, hostcpuLock, lancpuLock, commandByte, - controlRegister, cntrlRegImage, txStatus, rxStatus); - - ARLAN_DEBUG_EXIT("arlan_print_registers"); -} -#endif - - -static int arlan_hw_tx(struct net_device *dev, char *buf, int length) -{ - int i; - - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - struct arlan_conf_stru *conf = priv->Conf; - - int tailStarts = 0x800; - int headEnds = 0x0; - - - ARLAN_DEBUG_ENTRY("arlan_hw_tx"); - if (TXHEAD(dev).offset) - headEnds = (((TXHEAD(dev).offset + TXHEAD(dev).length - offsetof(struct arlan_shmem, txBuffer)) / 64) + 1) * 64; - if (TXTAIL(dev).offset) - tailStarts = 0x800 - (((TXTAIL(dev).offset - offsetof(struct arlan_shmem, txBuffer)) / 64) + 2) * 64; - - - if (!TXHEAD(dev).offset && length < tailStarts) { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk(KERN_ERR "TXHEAD insert, tailStart %d\n", tailStarts); - - TXHEAD(dev).offset = - offsetof(struct arlan_shmem, txBuffer); - TXHEAD(dev).length = length - ARLAN_FAKE_HDR_LEN; - for (i = 0; i < 6; i++) - TXHEAD(dev).dest[i] = buf[i]; - TXHEAD(dev).clear = conf->txClear; - TXHEAD(dev).retries = conf->txRetries; /* 0 is use default */ - TXHEAD(dev).routing = conf->txRouting; - TXHEAD(dev).scrambled = conf->txScrambled; - memcpy_toio((char __iomem *)arlan + TXHEAD(dev).offset, buf + ARLAN_FAKE_HDR_LEN, TXHEAD(dev).length); - } else if (!TXTAIL(dev).offset && length < (0x800 - headEnds)) { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk(KERN_ERR "TXTAIL insert, headEnd %d\n", headEnds); - - TXTAIL(dev).offset = - offsetof(struct arlan_shmem, txBuffer) + 0x800 - (length / 64 + 2) * 64; - TXTAIL(dev).length = length - ARLAN_FAKE_HDR_LEN; - for (i = 0; i < 6; i++) - TXTAIL(dev).dest[i] = buf[i]; - TXTAIL(dev).clear = conf->txClear; - TXTAIL(dev).retries = conf->txRetries; - TXTAIL(dev).routing = conf->txRouting; - TXTAIL(dev).scrambled = conf->txScrambled; - memcpy_toio(((char __iomem *)arlan + TXTAIL(dev).offset), buf + ARLAN_FAKE_HDR_LEN, TXTAIL(dev).length); - } else { - netif_stop_queue(dev); - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk(KERN_ERR "TX TAIL & HEAD full, return, tailStart %d headEnd %d\n", tailStarts, headEnds); - return -1; - } - priv->out_bytes += length; - priv->out_bytes10 += length; - if (conf->measure_rate < 1) - conf->measure_rate = 1; - if (time_after(jiffies, priv->out_time + conf->measure_rate * HZ)) { - conf->out_speed = priv->out_bytes / conf->measure_rate; - priv->out_bytes = 0; - priv->out_time = jiffies; - } - - if (time_after(jiffies, priv->out_time10 + conf->measure_rate * 10*HZ)) { - conf->out_speed10 = priv->out_bytes10 / (10 * conf->measure_rate); - priv->out_bytes10 = 0; - priv->out_time10 = jiffies; - } - - if (TXHEAD(dev).offset && TXTAIL(dev).offset) { - netif_stop_queue(dev); - return 0; - } else - netif_start_queue(dev); - - IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) - printk(KERN_WARNING "%s Transmit t %2x:%2x:%2x:%2x:%2x:%2x f %2x:%2x:%2x:%2x:%2x:%2x\n", dev->name, - (unsigned char) buf[0], (unsigned char) buf[1], (unsigned char) buf[2], (unsigned char) buf[3], - (unsigned char) buf[4], (unsigned char) buf[5], (unsigned char) buf[6], (unsigned char) buf[7], - (unsigned char) buf[8], (unsigned char) buf[9], (unsigned char) buf[10], (unsigned char) buf[11]); - - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk(KERN_ERR "TX command prepare for buffer %d\n", priv->txLast); - - arlan_command(dev, ARLAN_COMMAND_TX); - - priv->tx_last_sent = jiffies; - - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) printk("%s TX Qued %d bytes\n", dev->name, length); - - ARLAN_DEBUG_EXIT("arlan_hw_tx"); - - return 0; -} - - -static int arlan_hw_config(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - struct arlan_conf_stru *conf = priv->Conf; - - ARLAN_DEBUG_ENTRY("arlan_hw_config"); - - printk(KERN_NOTICE "%s arlan configure called\n", dev->name); - if (arlan_EEPROM_bad) - printk(KERN_NOTICE "arlan configure with eeprom bad option\n"); - - - WRITESHM(arlan->spreadingCode, conf->spreadingCode, u_char); - WRITESHM(arlan->channelSet, conf->channelSet, u_char); - - if (arlan_EEPROM_bad) - WRITESHM(arlan->defaultChannelSet, conf->channelSet, u_char); - - WRITESHM(arlan->channelNumber, conf->channelNumber, u_char); - - WRITESHM(arlan->scramblingDisable, conf->scramblingDisable, u_char); - WRITESHM(arlan->txAttenuation, conf->txAttenuation, u_char); - - WRITESHM(arlan->systemId, conf->systemId, u_int); - - WRITESHM(arlan->maxRetries, conf->maxRetries, u_char); - WRITESHM(arlan->receiveMode, conf->receiveMode, u_char); - WRITESHM(arlan->priority, conf->priority, u_char); - WRITESHM(arlan->rootOrRepeater, conf->rootOrRepeater, u_char); - WRITESHM(arlan->SID, conf->SID, u_int); - - WRITESHM(arlan->registrationMode, conf->registrationMode, u_char); - - WRITESHM(arlan->registrationFill, conf->registrationFill, u_char); - WRITESHM(arlan->localTalkAddress, conf->localTalkAddress, u_char); - WRITESHM(arlan->codeFormat, conf->codeFormat, u_char); - WRITESHM(arlan->numChannels, conf->numChannels, u_char); - WRITESHM(arlan->channel1, conf->channel1, u_char); - WRITESHM(arlan->channel2, conf->channel2, u_char); - WRITESHM(arlan->channel3, conf->channel3, u_char); - WRITESHM(arlan->channel4, conf->channel4, u_char); - WRITESHM(arlan->radioNodeId, conf->radioNodeId, u_short); - WRITESHM(arlan->SID, conf->SID, u_int); - WRITESHM(arlan->waitTime, conf->waitTime, u_short); - WRITESHM(arlan->lParameter, conf->lParameter, u_short); - memcpy_toio(&(arlan->_15), &(conf->_15), 3); - WRITESHM(arlan->_15, conf->_15, u_short); - WRITESHM(arlan->headerSize, conf->headerSize, u_short); - if (arlan_EEPROM_bad) - WRITESHM(arlan->hardwareType, conf->hardwareType, u_char); - WRITESHM(arlan->radioType, conf->radioType, u_char); - if (arlan_EEPROM_bad) - WRITESHM(arlan->radioModule, conf->radioType, u_char); - - memcpy_toio(arlan->encryptionKey + keyStart, encryptionKey, 8); - memcpy_toio(arlan->name, conf->siteName, 16); - - WRITESHMB(arlan->commandByte, ARLAN_COM_INT | ARLAN_COM_CONF); /* do configure */ - memset_io(arlan->commandParameter, 0, 0xf); /* 0xf */ - memset_io(arlan->commandParameter + 1, 0, 2); - if (conf->writeEEPROM) { - memset_io(arlan->commandParameter, conf->writeEEPROM, 1); - /* conf->writeEEPROM=0; */ - } - - if (conf->registrationMode && conf->registrationInterrupts) - memset_io(arlan->commandParameter + 3, 1, 1); - else - memset_io(arlan->commandParameter + 3, 0, 1); - - priv->irq_test_done = 0; - - if (conf->tx_queue_len) - dev->tx_queue_len = conf->tx_queue_len; - udelay(100); - - ARLAN_DEBUG_EXIT("arlan_hw_config"); - return 0; -} - - -static int arlan_read_card_configuration(struct net_device *dev) -{ - u_char tlx415; - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - struct arlan_conf_stru *conf = priv->Conf; - - ARLAN_DEBUG_ENTRY("arlan_read_card_configuration"); - - - if (radioNodeId == radioNodeIdUNKNOWN) { - /* multiline macro, cannot remove braces */ - READSHM(conf->radioNodeId, arlan->radioNodeId, u_short); - } else - conf->radioNodeId = radioNodeId; - - if (SID == SIDUNKNOWN) { - /* multiline macro, cannot remove braces */ - READSHM(conf->SID, arlan->SID, u_int); - } else - conf->SID = SID; - - if (spreadingCode == spreadingCodeUNKNOWN) { - /* multiline macro, cannot remove braces */ - READSHM(conf->spreadingCode, arlan->spreadingCode, u_char); - } else - conf->spreadingCode = spreadingCode; - - if (channelSet == channelSetUNKNOWN) { - /* multiline macro, cannot remove braces */ - READSHM(conf->channelSet, arlan->channelSet, u_char); - } else - conf->channelSet = channelSet; - - if (channelNumber == channelNumberUNKNOWN) { - /* multiline macro, cannot remove braces */ - READSHM(conf->channelNumber, arlan->channelNumber, u_char); - } else - conf->channelNumber = channelNumber; - - READSHM(conf->scramblingDisable, arlan->scramblingDisable, u_char); - READSHM(conf->txAttenuation, arlan->txAttenuation, u_char); - - if (systemId == systemIdUNKNOWN) { - /* multiline macro, cannot remove braces */ - READSHM(conf->systemId, arlan->systemId, u_int); - } else - conf->systemId = systemId; - - READSHM(conf->maxDatagramSize, arlan->maxDatagramSize, u_short); - READSHM(conf->maxFrameSize, arlan->maxFrameSize, u_short); - READSHM(conf->maxRetries, arlan->maxRetries, u_char); - READSHM(conf->receiveMode, arlan->receiveMode, u_char); - READSHM(conf->priority, arlan->priority, u_char); - READSHM(conf->rootOrRepeater, arlan->rootOrRepeater, u_char); - - if (SID == SIDUNKNOWN) { - /* multiline macro, cannot remove braces */ - READSHM(conf->SID, arlan->SID, u_int); - } else - conf->SID = SID; - - if (registrationMode == registrationModeUNKNOWN) { - /* multiline macro, cannot remove braces */ - READSHM(conf->registrationMode, arlan->registrationMode, u_char); - } else - conf->registrationMode = registrationMode; - - READSHM(conf->registrationFill, arlan->registrationFill, u_char); - READSHM(conf->localTalkAddress, arlan->localTalkAddress, u_char); - READSHM(conf->codeFormat, arlan->codeFormat, u_char); - READSHM(conf->numChannels, arlan->numChannels, u_char); - READSHM(conf->channel1, arlan->channel1, u_char); - READSHM(conf->channel2, arlan->channel2, u_char); - READSHM(conf->channel3, arlan->channel3, u_char); - READSHM(conf->channel4, arlan->channel4, u_char); - READSHM(conf->waitTime, arlan->waitTime, u_short); - READSHM(conf->lParameter, arlan->lParameter, u_short); - READSHM(conf->_15, arlan->_15, u_short); - READSHM(conf->headerSize, arlan->headerSize, u_short); - READSHM(conf->hardwareType, arlan->hardwareType, u_char); - READSHM(conf->radioType, arlan->radioModule, u_char); - - if (conf->radioType == 0) - conf->radioType = 0xc; - - WRITESHM(arlan->configStatus, 0xA5, u_char); - READSHM(tlx415, arlan->configStatus, u_char); - - if (tlx415 != 0xA5) - printk(KERN_INFO "%s tlx415 chip\n", dev->name); - - conf->txClear = 0; - conf->txRetries = 1; - conf->txRouting = 1; - conf->txScrambled = 0; - conf->rxParameter = 1; - conf->txTimeoutMs = 4000; - conf->waitCardTimeout = 100000; - conf->receiveMode = ARLAN_RCV_CLEAN; - memcpy_fromio(conf->siteName, arlan->name, 16); - conf->siteName[16] = '\0'; - conf->retries = retries; - conf->tx_delay_ms = tx_delay_ms; - conf->ReTransmitPacketMaxSize = 200; - conf->waitReTransmitPacketMaxSize = 200; - conf->txAckTimeoutMs = 900; - conf->fastReTransCount = 3; - - ARLAN_DEBUG_EXIT("arlan_read_card_configuration"); - - return 0; -} - - -static int lastFoundAt = 0xbe000; - - -/* - * This is the real probe routine. Linux has a history of friendly device - * probes on the ISA bus. A good device probes avoids doing writes, and - * verifies that the correct device exists and functions. - */ -#define ARLAN_SHMEM_SIZE 0x2000 -static int __init arlan_check_fingerprint(unsigned long memaddr) -{ - static const char probeText[] = "TELESYSTEM SLW INC. ARLAN \0"; - volatile struct arlan_shmem __iomem *arlan = (struct arlan_shmem *) memaddr; - unsigned long paddr = virt_to_phys((void *) memaddr); - char tempBuf[49]; - - ARLAN_DEBUG_ENTRY("arlan_check_fingerprint"); - - if (!request_mem_region(paddr, ARLAN_SHMEM_SIZE, "arlan")) { - /* printk(KERN_WARNING "arlan: memory region %lx excluded from probing\n",paddr); */ - return -ENODEV; - } - - memcpy_fromio(tempBuf, arlan->textRegion, 29); - tempBuf[30] = 0; - - /* check for card at this address */ - if (0 != strncmp(tempBuf, probeText, 29)) { - release_mem_region(paddr, ARLAN_SHMEM_SIZE); - return -ENODEV; - } - - /* printk(KERN_INFO "arlan found at 0x%x\n",memaddr); */ - ARLAN_DEBUG_EXIT("arlan_check_fingerprint"); - - return 0; -} - -static int arlan_change_mtu(struct net_device *dev, int new_mtu) -{ - struct arlan_private *priv = netdev_priv(dev); - struct arlan_conf_stru *conf = priv->Conf; - - ARLAN_DEBUG_ENTRY("arlan_change_mtu"); - if (new_mtu > 2032) - return -EINVAL; - dev->mtu = new_mtu; - if (new_mtu < 256) - new_mtu = 256; /* cards book suggests 1600 */ - conf->maxDatagramSize = new_mtu; - conf->maxFrameSize = new_mtu + 48; - - arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_CONF); - printk(KERN_NOTICE "%s mtu changed to %d\n", dev->name, new_mtu); - - ARLAN_DEBUG_EXIT("arlan_change_mtu"); - - return 0; -} - -static int arlan_mac_addr(struct net_device *dev, void *p) -{ - struct sockaddr *addr = p; - - - ARLAN_DEBUG_ENTRY("arlan_mac_addr"); - return -EINVAL; - - if (netif_running(dev)) - return -EBUSY; - memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); - - ARLAN_DEBUG_EXIT("arlan_mac_addr"); - return 0; -} - -static const struct net_device_ops arlan_netdev_ops = { - .ndo_open = arlan_open, - .ndo_stop = arlan_close, - .ndo_start_xmit = arlan_tx, - .ndo_get_stats = arlan_statistics, - .ndo_set_multicast_list = arlan_set_multicast, - .ndo_change_mtu = arlan_change_mtu, - .ndo_set_mac_address = arlan_mac_addr, - .ndo_tx_timeout = arlan_tx_timeout, - .ndo_validate_addr = eth_validate_addr, -}; - -static int __init arlan_setup_device(struct net_device *dev, int num) -{ - struct arlan_private *ap = netdev_priv(dev); - int err; - - ARLAN_DEBUG_ENTRY("arlan_setup_device"); - - ap->conf = (struct arlan_shmem *)(ap+1); - - dev->tx_queue_len = tx_queue_len; - dev->netdev_ops = &arlan_netdev_ops; - dev->watchdog_timeo = 3*HZ; - - ap->irq_test_done = 0; - ap->Conf = &arlan_conf[num]; - - ap->Conf->pre_Command_Wait = 40; - ap->Conf->rx_tweak1 = 30; - ap->Conf->rx_tweak2 = 0; - - - err = register_netdev(dev); - if (err) { - release_mem_region(virt_to_phys((void *) dev->mem_start), - ARLAN_SHMEM_SIZE); - free_netdev(dev); - return err; - } - arlan_device[num] = dev; - ARLAN_DEBUG_EXIT("arlan_setup_device"); - return 0; -} - -static int __init arlan_probe_here(struct net_device *dev, - unsigned long memaddr) -{ - struct arlan_private *ap = netdev_priv(dev); - - ARLAN_DEBUG_ENTRY("arlan_probe_here"); - - if (arlan_check_fingerprint(memaddr)) - return -ENODEV; - - printk(KERN_NOTICE "%s: Arlan found at %llx,\n ", dev->name, - (u64) virt_to_phys((void *)memaddr)); - - ap->card = (void *) memaddr; - dev->mem_start = memaddr; - dev->mem_end = memaddr + ARLAN_SHMEM_SIZE-1; - - if (dev->irq < 2) { - /* multiline macro, cannot remove braces */ - READSHM(dev->irq, ap->card->irqLevel, u_char); - } else if (dev->irq == 2) - dev->irq = 9; - - arlan_read_card_configuration(dev); - - ARLAN_DEBUG_EXIT("arlan_probe_here"); - return 0; -} - - -static int arlan_open(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - int ret = 0; - - ARLAN_DEBUG_ENTRY("arlan_open"); - - ret = request_irq(dev->irq, &arlan_interrupt, 0, dev->name, dev); - if (ret) { - printk(KERN_ERR "%s: unable to get IRQ %d .\n", - dev->name, dev->irq); - return ret; - } - - priv->bad = 0; - priv->lastReset = 0; - priv->reset = 0; - memcpy_fromio(dev->dev_addr, arlan->lanCardNodeId, 6); - memset(dev->broadcast, 0xff, 6); - dev->tx_queue_len = tx_queue_len; - priv->interrupt_processing_active = 0; - spin_lock_init(&priv->lock); - - netif_start_queue(dev); - - priv->registrationLostCount = 0; - priv->registrationLastSeen = jiffies; - priv->txLast = 0; - priv->tx_command_given = 0; - priv->rx_command_given = 0; - - priv->reRegisterExp = 1; - priv->tx_last_sent = jiffies - 1; - priv->tx_last_cleared = jiffies; - priv->Conf->writeEEPROM = 0; - priv->Conf->registrationInterrupts = 1; - - init_timer(&priv->timer); - priv->timer.expires = jiffies + HZ / 10; - priv->timer.data = (unsigned long) dev; - priv->timer.function = &arlan_registration_timer; /* timer handler */ - - arlan_command(dev, ARLAN_COMMAND_POWERUP | ARLAN_COMMAND_LONG_WAIT_NOW); - mdelay(200); - add_timer(&priv->timer); - - ARLAN_DEBUG_EXIT("arlan_open"); - return 0; -} - - -static void arlan_tx_timeout(struct net_device *dev) -{ - printk(KERN_ERR "%s: arlan transmit timed out, kernel decided\n", dev->name); - /* Try to restart the adaptor. */ - arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET); - /* dev->trans_start = jiffies; */ - /* netif_start_queue (dev); */ -} - - -static netdev_tx_t arlan_tx(struct sk_buff *skb, struct net_device *dev) -{ - short length; - unsigned char *buf; - - ARLAN_DEBUG_ENTRY("arlan_tx"); - - length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; - buf = skb->data; - - if (length + 0x12 > 0x800) { - printk(KERN_ERR "TX RING overflow\n"); - netif_stop_queue(dev); - } - - if (arlan_hw_tx(dev, buf, length) == -1) - goto bad_end; - - dev->trans_start = jiffies; - - dev_kfree_skb(skb); - - arlan_process_interrupt(dev); - ARLAN_DEBUG_EXIT("arlan_tx"); - return NETDEV_TX_OK; - -bad_end: - arlan_process_interrupt(dev); - netif_stop_queue(dev); - ARLAN_DEBUG_EXIT("arlan_tx"); - return NETDEV_TX_BUSY; -} - - -static inline int DoNotReTransmitCrap(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - - if (TXLAST(dev).length < priv->Conf->ReTransmitPacketMaxSize) - return 1; - return 0; - -} - -static inline int DoNotWaitReTransmitCrap(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - - if (TXLAST(dev).length < priv->Conf->waitReTransmitPacketMaxSize) - return 1; - return 0; -} - -static inline void arlan_queue_retransmit(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - - ARLAN_DEBUG_ENTRY("arlan_queue_retransmit"); - - if (DoNotWaitReTransmitCrap(dev)) - arlan_drop_tx(dev); - else - priv->ReTransmitRequested++; - - ARLAN_DEBUG_EXIT("arlan_queue_retransmit"); -} - -static inline void RetryOrFail(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - - ARLAN_DEBUG_ENTRY("RetryOrFail"); - - if (priv->retransmissions > priv->Conf->retries || - DoNotReTransmitCrap(dev)) - arlan_drop_tx(dev); - else if (priv->bad <= priv->Conf->fastReTransCount) - arlan_retransmit_now(dev); - else - arlan_queue_retransmit(dev); - - ARLAN_DEBUG_EXIT("RetryOrFail"); -} - - -static void arlan_tx_done_interrupt(struct net_device *dev, int status) -{ - struct arlan_private *priv = netdev_priv(dev); - - ARLAN_DEBUG_ENTRY("arlan_tx_done_interrupt"); - - priv->tx_last_cleared = jiffies; - priv->tx_command_given = 0; - switch (status) { - case 1: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit OK\n"); - dev->stats.tx_packets++; - priv->bad = 0; - priv->reset = 0; - priv->retransmissions = 0; - if (priv->Conf->tx_delay_ms) - priv->tx_done_delayed = jiffies + (priv->Conf->tx_delay_ms * HZ) / 1000 + 1; - else { - TXLAST(dev).offset = 0; - if (priv->txLast) - priv->txLast = 0; - else if (TXTAIL(dev).offset) - priv->txLast = 1; - - if (TXLAST(dev).offset) { - arlan_retransmit_now(dev); - dev->trans_start = jiffies; - } - - if (!TXHEAD(dev).offset || !TXTAIL(dev).offset) - netif_wake_queue(dev); - } - } - break; - - case 2: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit timed out\n"); - priv->bad += 1; - /* arlan_queue_retransmit(dev); */ - RetryOrFail(dev); - } - break; - - case 3: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit max retries\n"); - priv->bad += 1; - priv->reset = 0; - /* arlan_queue_retransmit(dev); */ - RetryOrFail(dev); - } - break; - - case 4: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit aborted\n"); - priv->bad += 1; - arlan_queue_retransmit(dev); - /* RetryOrFail(dev); */ - } - break; - - case 5: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit not registered\n"); - priv->bad += 1; - /* debug=101; */ - arlan_queue_retransmit(dev); - } - break; - - case 6: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit destination full\n"); - priv->bad += 1; - priv->reset = 0; - /* arlan_drop_tx(dev); */ - arlan_queue_retransmit(dev); - } - break; - - case 7: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit unknown ack\n"); - priv->bad += 1; - priv->reset = 0; - arlan_queue_retransmit(dev); - } - break; - - case 8: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit dest mail box full\n"); - priv->bad += 1; - priv->reset = 0; - /* arlan_drop_tx(dev); */ - arlan_queue_retransmit(dev); - } - break; - - case 9: - { - IFDEBUG(ARLAN_DEBUG_TX_CHAIN) - printk("arlan intr: transmit root dest not reg.\n"); - priv->bad += 1; - priv->reset = 1; - /* arlan_drop_tx(dev); */ - arlan_queue_retransmit(dev); - } - break; - - default: - { - printk(KERN_ERR "arlan intr: transmit status unknown\n"); - priv->bad += 1; - priv->reset = 1; - arlan_drop_tx(dev); - } - } - - ARLAN_DEBUG_EXIT("arlan_tx_done_interrupt"); -} - - -static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short rxOffset, u_short pkt_len) -{ - char *skbtmp; - int i = 0; - - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - struct arlan_conf_stru *conf = priv->Conf; - - - ARLAN_DEBUG_ENTRY("arlan_rx_interrupt"); - /* by spec, not WRITESHMB(arlan->rxStatus,0x00); */ - /* prohibited here arlan_command(dev, ARLAN_COMMAND_RX); */ - - if (pkt_len < 10 || pkt_len > 2048) { - printk(KERN_WARNING "%s: got too short or long packet, len %d\n", dev->name, pkt_len); - return; - } - if (rxOffset + pkt_len > 0x2000) { - printk("%s: got too long packet, len %d offset %x\n", dev->name, pkt_len, rxOffset); - return; - } - - priv->in_bytes += pkt_len; - priv->in_bytes10 += pkt_len; - if (conf->measure_rate < 1) - conf->measure_rate = 1; - if (time_after(jiffies, priv->in_time + conf->measure_rate * HZ)) { - conf->in_speed = priv->in_bytes / conf->measure_rate; - priv->in_bytes = 0; - priv->in_time = jiffies; - } - if (time_after(jiffies, priv->in_time10 + conf->measure_rate * 10*HZ)) { - conf->in_speed10 = priv->in_bytes10 / (10 * conf->measure_rate); - priv->in_bytes10 = 0; - priv->in_time10 = jiffies; - } - DEBUGSHM(1, "arlan rcv pkt rxStatus= %d ", arlan->rxStatus, u_char); - switch (rxStatus) { - case 1: - case 2: - case 3: - { - /* Malloc up new buffer. */ - struct sk_buff *skb; - - DEBUGSHM(50, "arlan recv pkt offs=%d\n", arlan->rxOffset, u_short); - DEBUGSHM(1, "arlan rxFrmType = %d\n", arlan->rxFrmType, u_char); - DEBUGSHM(1, KERN_INFO "arlan rx scrambled = %d\n", arlan->scrambled, u_char); - - /* here we do multicast filtering to avoid slow 8-bit memcopy */ -#ifdef ARLAN_MULTICAST - if (!(dev->flags & IFF_ALLMULTI) && - !(dev->flags & IFF_PROMISC) && - !netdev_mc_empty(dev)) { - char hw_dst_addr[6]; - struct dev_mc_list *dmi; - int i; - - memcpy_fromio(hw_dst_addr, arlan->ultimateDestAddress, 6); - if (hw_dst_addr[0] == 0x01) { - if (mdebug) - if (hw_dst_addr[1] == 0x00) - printk(KERN_ERR "%s mcast 0x0100\n", dev->name); - else if (hw_dst_addr[1] == 0x40) - printk(KERN_ERR "%s m/bcast 0x0140\n", dev->name); - netdev_for_each_mc_entry(dmi, dev) { - if (arlan_debug & ARLAN_DEBUG_HEADER_DUMP) - printk(KERN_ERR "%s mcl %pM\n", - dev->name, dmi->dmi_addr); - for (i = 0; i < 6; i++) - if (dmi->dmi_addr[i] != hw_dst_addr[i]) - break; - if (i == 6) - break; - } - /* we reach here if multicast filtering is on and packet */ - /* is multicast and not for receive */ - goto end_of_interrupt; - } - } -#endif /* ARLAN_MULTICAST */ - /* multicast filtering ends here */ - pkt_len += ARLAN_FAKE_HDR_LEN; - - skb = dev_alloc_skb(pkt_len + 4); - if (skb == NULL) { - printk(KERN_ERR "%s: Memory squeeze, dropping packet.\n", dev->name); - dev->stats.rx_dropped++; - break; - } - skb_reserve(skb, 2); - skbtmp = skb_put(skb, pkt_len); - - memcpy_fromio(skbtmp + ARLAN_FAKE_HDR_LEN, ((char __iomem *) arlan) + rxOffset, pkt_len - ARLAN_FAKE_HDR_LEN); - memcpy_fromio(skbtmp, arlan->ultimateDestAddress, 6); - memcpy_fromio(skbtmp + 6, arlan->rxSrc, 6); - WRITESHMB(arlan->rxStatus, 0x00); - arlan_command(dev, ARLAN_COMMAND_RX); - - IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) - { - char immedDestAddress[6]; - char immedSrcAddress[6]; - memcpy_fromio(immedDestAddress, arlan->immedDestAddress, 6); - memcpy_fromio(immedSrcAddress, arlan->immedSrcAddress, 6); - - printk(KERN_WARNING "%s t %pM f %pM imd %pM ims %pM\n", - dev->name, skbtmp, - &skbtmp[6], - immedDestAddress, - immedSrcAddress); - } - skb->protocol = eth_type_trans(skb, dev); - IFDEBUG(ARLAN_DEBUG_HEADER_DUMP) - if (skb->protocol != 0x608 && skb->protocol != 0x8) { - for (i = 0; i <= 22; i++) - printk("%02x:", (u_char) skbtmp[i + 12]); - printk(KERN_ERR "\n"); - printk(KERN_WARNING "arlan kernel pkt type trans %x\n", skb->protocol); - } - netif_rx(skb); - dev->stats.rx_packets++; - dev->stats.rx_bytes += pkt_len; - } - break; - - default: - printk(KERN_ERR "arlan intr: received unknown status\n"); - dev->stats.rx_crc_errors++; - break; - } - ARLAN_DEBUG_EXIT("arlan_rx_interrupt"); -} - -static void arlan_process_interrupt(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - u_char rxStatus = READSHMB(arlan->rxStatus); - u_char txStatus = READSHMB(arlan->txStatus); - u_short rxOffset = READSHMS(arlan->rxOffset); - u_short pkt_len = READSHMS(arlan->rxLength); - int interrupt_count = 0; - - ARLAN_DEBUG_ENTRY("arlan_process_interrupt"); - - if (test_and_set_bit(0, (void *) &priv->interrupt_processing_active)) { - if (arlan_debug & ARLAN_DEBUG_CHAIN_LOCKS) - printk(KERN_ERR "interrupt chain reentering\n"); - goto end_int_process; - } - while ((rxStatus || txStatus || priv->interrupt_ack_requested) - && (interrupt_count < 5)) { - if (rxStatus) - priv->last_rx_int_ack_time = jiffies; - - arlan_command(dev, ARLAN_COMMAND_INT_ACK); - arlan_command(dev, ARLAN_COMMAND_INT_ENABLE); - - IFDEBUG(ARLAN_DEBUG_INTERRUPT) - printk(KERN_ERR "%s: got IRQ rx %x tx %x comm %x rxOff %x rxLen %x\n", - dev->name, rxStatus, txStatus, READSHMB(arlan->commandByte), - rxOffset, pkt_len); - - if (rxStatus == 0 && txStatus == 0) { - if (priv->irq_test_done) { - if (!registrationBad(dev)) - IFDEBUG(ARLAN_DEBUG_INTERRUPT) printk(KERN_ERR "%s unknown interrupt(nop? regLost ?) reason tx %d rx %d ", - dev->name, txStatus, rxStatus); - } else { - IFDEBUG(ARLAN_DEBUG_INTERRUPT) - printk(KERN_INFO "%s irq $%d test OK\n", dev->name, dev->irq); - - } - priv->interrupt_ack_requested = 0; - goto ends; - } - - if (txStatus != 0) { - WRITESHMB(arlan->txStatus, 0x00); - arlan_tx_done_interrupt(dev, txStatus); - goto ends; - } - - if (rxStatus == 1 || rxStatus == 2) { - /* a packet waiting */ - arlan_rx_interrupt(dev, rxStatus, rxOffset, pkt_len); - goto ends; - } - - if (rxStatus > 2 && rxStatus < 0xff) { - WRITESHMB(arlan->rxStatus, 0x00); - printk(KERN_ERR "%s unknown rxStatus reason tx %d rx %d ", - dev->name, txStatus, rxStatus); - goto ends; - } - - if (rxStatus == 0xff) { - WRITESHMB(arlan->rxStatus, 0x00); - arlan_command(dev, ARLAN_COMMAND_RX); - if (registrationBad(dev)) - netif_device_detach(dev); - if (!registrationBad(dev)) { - priv->registrationLastSeen = jiffies; - if (!netif_queue_stopped(dev) && !priv->under_reset && !priv->under_config) - netif_wake_queue(dev); - } - goto ends; - } -ends: - - arlan_command_process(dev); - - rxStatus = READSHMB(arlan->rxStatus); - txStatus = READSHMB(arlan->txStatus); - rxOffset = READSHMS(arlan->rxOffset); - pkt_len = READSHMS(arlan->rxLength); - - - priv->irq_test_done = 1; - - interrupt_count++; - } - priv->interrupt_processing_active = 0; - -end_int_process: - arlan_command_process(dev); - - ARLAN_DEBUG_EXIT("arlan_process_interrupt"); - return; -} - -static irqreturn_t arlan_interrupt(int irq, void *dev_id) -{ - struct net_device *dev = dev_id; - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - u_char rxStatus = READSHMB(arlan->rxStatus); - u_char txStatus = READSHMB(arlan->txStatus); - - ARLAN_DEBUG_ENTRY("arlan_interrupt"); - - - if (!rxStatus && !txStatus) - priv->interrupt_ack_requested++; - - arlan_process_interrupt(dev); - - priv->irq_test_done = 1; - - ARLAN_DEBUG_EXIT("arlan_interrupt"); - return IRQ_HANDLED; - -} - - -static int arlan_close(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - - ARLAN_DEBUG_ENTRY("arlan_close"); - - del_timer_sync(&priv->timer); - - arlan_command(dev, ARLAN_COMMAND_POWERDOWN); - - IFDEBUG(ARLAN_DEBUG_STARTUP) - printk(KERN_NOTICE "%s: Closing device\n", dev->name); - - netif_stop_queue(dev); - free_irq(dev->irq, dev); - - ARLAN_DEBUG_EXIT("arlan_close"); - return 0; -} - -#ifdef ARLAN_DEBUGGING -static long alignLong(volatile u_char *ptr) -{ - long ret; - memcpy_fromio(&ret, (void *) ptr, 4); - return ret; -} -#endif - -/* - * Get the current statistics. - * This may be called with the card open or closed. - */ - -static struct net_device_stats *arlan_statistics(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - - - ARLAN_DEBUG_ENTRY("arlan_statistics"); - - /* Update the statistics from the device registers. */ - - READSHM(dev->stats.collisions, arlan->numReTransmissions, u_int); - READSHM(dev->stats.rx_crc_errors, arlan->numCRCErrors, u_int); - READSHM(dev->stats.rx_dropped, arlan->numFramesDiscarded, u_int); - READSHM(dev->stats.rx_fifo_errors, arlan->numRXBufferOverflows, u_int); - READSHM(dev->stats.rx_frame_errors, arlan->numReceiveFramesLost, u_int); - READSHM(dev->stats.rx_over_errors, arlan->numRXOverruns, u_int); - READSHM(dev->stats.rx_packets, arlan->numDatagramsReceived, u_int); - READSHM(dev->stats.tx_aborted_errors, arlan->numAbortErrors, u_int); - READSHM(dev->stats.tx_carrier_errors, arlan->numStatusTimeouts, u_int); - READSHM(dev->stats.tx_dropped, arlan->numDatagramsDiscarded, u_int); - READSHM(dev->stats.tx_fifo_errors, arlan->numTXUnderruns, u_int); - READSHM(dev->stats.tx_packets, arlan->numDatagramsTransmitted, u_int); - READSHM(dev->stats.tx_window_errors, arlan->numHoldOffs, u_int); - - ARLAN_DEBUG_EXIT("arlan_statistics"); - - return &dev->stats; -} - - -static void arlan_set_multicast(struct net_device *dev) -{ - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - struct arlan_conf_stru *conf = priv->Conf; - int board_conf_needed = 0; - - - ARLAN_DEBUG_ENTRY("arlan_set_multicast"); - - if (dev->flags & IFF_PROMISC) { - unsigned char recMode; - READSHM(recMode, arlan->receiveMode, u_char); - conf->receiveMode = (ARLAN_RCV_PROMISC | ARLAN_RCV_CONTROL); - if (conf->receiveMode != recMode) - board_conf_needed = 1; - } else { - /* turn off promiscuous mode */ - unsigned char recMode; - READSHM(recMode, arlan->receiveMode, u_char); - conf->receiveMode = ARLAN_RCV_CLEAN | ARLAN_RCV_CONTROL; - if (conf->receiveMode != recMode) - board_conf_needed = 1; - } - - if (board_conf_needed) - arlan_command(dev, ARLAN_COMMAND_CONF); - - ARLAN_DEBUG_EXIT("arlan_set_multicast"); -} - - -struct net_device * __init arlan_probe(int unit) -{ - struct net_device *dev; - int err; - int m; - - ARLAN_DEBUG_ENTRY("arlan_probe"); - - if (arlans_found == MAX_ARLANS) - return ERR_PTR(-ENODEV); - - /* - * Reserve space for local data and a copy of the shared memory - * that is used by the /proc interface. - */ - dev = alloc_etherdev(sizeof(struct arlan_private) - + sizeof(struct arlan_shmem)); - if (!dev) - return ERR_PTR(-ENOMEM); - - if (unit >= 0) { - sprintf(dev->name, "eth%d", unit); - netdev_boot_setup_check(dev); - - if (dev->mem_start) { - if (arlan_probe_here(dev, dev->mem_start) == 0) - goto found; - goto not_found; - } - } - - - for (m = (int)phys_to_virt(lastFoundAt) + ARLAN_SHMEM_SIZE; - m <= (int)phys_to_virt(0xDE000); - m += ARLAN_SHMEM_SIZE) { - if (arlan_probe_here(dev, m) == 0) { - lastFoundAt = (int)virt_to_phys((void *)m); - goto found; - } - } - - if (lastFoundAt == 0xbe000) - printk(KERN_ERR "arlan: No Arlan devices found\n"); - - not_found: - free_netdev(dev); - return ERR_PTR(-ENODEV); - - found: - err = arlan_setup_device(dev, arlans_found); - if (err) - dev = ERR_PTR(err); - else if (!arlans_found++) - printk(KERN_INFO "Arlan driver %s\n", arlan_version); - - return dev; -} - -#ifdef MODULE -int __init init_module(void) -{ - int i = 0; - - ARLAN_DEBUG_ENTRY("init_module"); - - if (channelSet != channelSetUNKNOWN || channelNumber != channelNumberUNKNOWN || systemId != systemIdUNKNOWN) - return -EINVAL; - - for (i = 0; i < MAX_ARLANS; i++) { - struct net_device *dev = arlan_probe(i); - - if (IS_ERR(dev)) - return PTR_ERR(dev); - } - init_arlan_proc(); - printk(KERN_INFO "Arlan driver %s\n", arlan_version); - ARLAN_DEBUG_EXIT("init_module"); - return 0; -} - - -void __exit cleanup_module(void) -{ - int i = 0; - struct net_device *dev; - - ARLAN_DEBUG_ENTRY("cleanup_module"); - - IFDEBUG(ARLAN_DEBUG_SHUTDOWN) - printk(KERN_INFO "arlan: unloading module\n"); - - cleanup_arlan_proc(); - - for (i = 0; i < MAX_ARLANS; i++) { - dev = arlan_device[i]; - if (dev) { - arlan_command(dev, ARLAN_COMMAND_POWERDOWN); - - unregister_netdev(dev); - release_mem_region(virt_to_phys((void *) dev->mem_start), - ARLAN_SHMEM_SIZE); - free_netdev(dev); - arlan_device[i] = NULL; - } - } - - ARLAN_DEBUG_EXIT("cleanup_module"); -} - - -#endif -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/arlan/arlan-proc.c b/drivers/staging/arlan/arlan-proc.c deleted file mode 100644 index 62cd1d0..0000000 --- a/drivers/staging/arlan/arlan-proc.c +++ /dev/null @@ -1,1199 +0,0 @@ -#include "arlan.h" - -#include - -#ifdef CONFIG_PROC_FS - -/* void enableReceive(struct net_device* dev); -*/ - - - -#define ARLAN_STR_SIZE 0x2ff0 -#define DEV_ARLAN_INFO 1 -#define DEV_ARLAN 1 -#define SARLG(type, var) {\ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x%x\n", #var,\ - READSHMB(priva->card->var));\ - } - -#define SARLBN(type, var, nn) {\ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x", #var);\ - for (i = 0; i < nn; i++)\ - pos += sprintf(arlan_drive_info+pos, "%02x",\ - READSHMB(priva->card->var[i]));\ - pos += sprintf(arlan_drive_info+pos, "\n");\ - } - -#define SARLBNpln(type, var, nn) {\ - for (i = 0; i < nn; i++)\ - pos += sprintf(arlan_drive_info+pos, "%02x",\ - READSHMB(priva->card->var[i]));\ - } - -#define SARLSTR(var, nn) {\ - char tmpStr[400];\ - int tmpLn = nn;\ - if (nn > 399)\ - tmpLn = 399;\ - memcpy(tmpStr, (char *) priva->conf->var, tmpLn);\ - tmpStr[tmpLn] = 0; \ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t%s\n",\ - #var, priva->conf->var);\ - } - -#define SARLUC(var) SARLG(u_char, var) -#define SARLUCN(var, nn) SARLBN(u_char, var, nn) -#define SARLUS(var) SARLG(u_short, var) -#define SARLUSN(var, nn) SARLBN(u_short, var, nn) -#define SARLUI(var) SARLG(u_int, var) - -#define SARLUSA(var) {\ - u_short tmpVar;\ - memcpy(&tmpVar, (short *) priva->conf->var, 2); \ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x%x\n", #var, tmpVar);\ -} - -#define SARLUIA(var) {\ - u_int tmpVar;\ - memcpy(&tmpVar, (int *)priva->conf->var, 4); \ - pos += sprintf(arlan_drive_info+pos, "%s\t=\t0x%x\n", #var, tmpVar);\ -} - - -static const char *arlan_diagnostic_info_string(struct net_device *dev) -{ - - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - u_char diagnosticInfo; - - READSHM(diagnosticInfo, arlan->diagnosticInfo, u_char); - - switch (diagnosticInfo) { - - case 0xFF: - return "Diagnostic info is OK"; - case 0xFE: - return "ERROR EPROM Checksum error "; - case 0xFD: - return "ERROR Local Ram Test Failed "; - case 0xFC: - return "ERROR SCC failure "; - case 0xFB: - return "ERROR BackBone failure "; - case 0xFA: - return "ERROR transceiver not found "; - case 0xF9: - return "ERROR no more address space "; - case 0xF8: - return "ERROR Checksum error "; - case 0xF7: - return "ERROR Missing SS Code"; - case 0xF6: - return "ERROR Invalid config format"; - case 0xF5: - return "ERROR Reserved errorcode F5"; - case 0xF4: - return "ERROR Invalid spreading code/channel number"; - case 0xF3: - return "ERROR Load Code Error"; - case 0xF2: - return "ERROR Reserver errorcode F2 "; - case 0xF1: - return "ERROR Invalid command receivec by LAN card "; - case 0xF0: - return "ERROR Invalid parameter found in command "; - case 0xEF: - return "ERROR On-chip timer failure "; - case 0xEE: - return "ERROR T410 timer failure "; - case 0xED: - return "ERROR Too Many TxEnable commands "; - case 0xEC: - return "ERROR EEPROM error on radio module "; - default: - return "ERROR unknown Diagnostic info reply code "; - } -} - -static const char *arlan_hardware_type_string(struct net_device *dev) -{ - u_char hardwareType; - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - - READSHM(hardwareType, arlan->hardwareType, u_char); - switch (hardwareType) { - case 0x00: - return "type A450"; - case 0x01: - return "type A650 "; - case 0x04: - return "type TMA coproc"; - case 0x0D: - return "type A650E "; - case 0x18: - return "type TMA coproc Australian"; - case 0x19: - return "type A650A "; - case 0x26: - return "type TMA coproc European"; - case 0x2E: - return "type A655 "; - case 0x2F: - return "type A655A "; - case 0x30: - return "type A655E "; - case 0x0B: - return "type A670 "; - case 0x0C: - return "type A670E "; - case 0x2D: - return "type A670A "; - case 0x0F: - return "type A411T"; - case 0x16: - return "type A411TA"; - case 0x1B: - return "type A440T"; - case 0x1C: - return "type A412T"; - case 0x1E: - return "type A412TA"; - case 0x22: - return "type A411TE"; - case 0x24: - return "type A412TE"; - case 0x27: - return "type A671T "; - case 0x29: - return "type A671TA "; - case 0x2B: - return "type A671TE "; - case 0x31: - return "type A415T "; - case 0x33: - return "type A415TA "; - case 0x35: - return "type A415TE "; - case 0x37: - return "type A672"; - case 0x39: - return "type A672A "; - case 0x3B: - return "type A672T"; - case 0x6B: - return "type IC2200"; - default: - return "type A672T"; - } -} -#ifdef ARLAN_DEBUGGING -static void arlan_print_diagnostic_info(struct net_device *dev) -{ - int i; - u_char diagnosticInfo; - u_short diagnosticOffset; - u_char hardwareType; - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - - /* ARLAN_DEBUG_ENTRY("arlan_print_diagnostic_info"); */ - - if (READSHMB(arlan->configuredStatusFlag) == 0) - printk(KERN_WARNING "Arlan: Card NOT configured\n"); - else - printk(KERN_INFO "Arlan: Card is configured\n"); - - READSHM(diagnosticInfo, arlan->diagnosticInfo, u_char); - READSHM(diagnosticOffset, arlan->diagnosticOffset, u_short); - - printk(KERN_INFO "%s\n", arlan_diagnostic_info_string(dev)); - - if (diagnosticInfo != 0xff) - printk(KERN_INFO "%s arlan: Diagnostic Offset %d\n",\ - dev->name, diagnosticOffset); - - printk(KERN_INFO "arlan: LAN CODE ID = "); - for (i = 0; i < 6; i++) - DEBUGSHM(1, "%03d:", arlan->lanCardNodeId[i], u_char); - printk("\n"); - - printk(KERN_INFO "arlan: Arlan BroadCast address = "); - for (i = 0; i < 6; i++) - DEBUGSHM(1, "%03d:", arlan->broadcastAddress[i], u_char); - printk("\n"); - - READSHM(hardwareType, arlan->hardwareType, u_char); - printk(KERN_INFO "%s\n", arlan_hardware_type_string(dev)); - - - DEBUGSHM(1, "arlan: channelNumber=%d\n", arlan->channelNumber, u_char); - DEBUGSHM(1, "arlan: channelSet=%d\n", arlan->channelSet, u_char); - DEBUGSHM(1, "arlan: spreadingCode=%d\n", arlan->spreadingCode, u_char); - DEBUGSHM(1, "arlan: radioNodeId=%d\n", arlan->radioNodeId, u_short); - DEBUGSHM(1, "arlan: SID =%d\n", arlan->SID, u_short); - DEBUGSHM(1, "arlan: rxOffset=%d\n", arlan->rxOffset, u_short); - - DEBUGSHM(1, "arlan: registration mode is %d\n",\ - arlan->registrationMode, u_char); - - printk(KERN_INFO "arlan: name= "); - IFDEBUG(1) - - for (i = 0; i < 16; i++) { - char c; - READSHM(c, arlan->name[i], char); - if (c) - printk("%c", c); - } - printk("\n"); - - /* ARLAN_DEBUG_EXIT("arlan_print_diagnostic_info"); */ - -} - - -/****************************** TEST MEMORY **************/ - -static int arlan_hw_test_memory(struct net_device *dev) -{ - u_char *ptr; - int i; - int memlen = sizeof(struct arlan_shmem) - 0xF; /* avoid - control register */ - volatile char *arlan_mem = (char *) (dev->mem_start); - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - char pattern; - - ptr = NULL; - - /* hold card in reset state */ - setHardwareReset(dev); - - /* test memory */ - pattern = 0; - for (i = 0; i < memlen; i++) - WRITESHM(arlan_mem[i], ((u_char) pattern++), u_char); - - pattern = 0; - for (i = 0; i < memlen; i++) { - char res; - READSHM(res, arlan_mem[i], char); - if (res != pattern++) { - printk(KERN_ERR "Arlan driver memory test 1 failed\n"); - return -1; - } - } - - pattern = 0; - for (i = 0; i < memlen; i++) - WRITESHM(arlan_mem[i], ~(pattern++), char); - - pattern = 0; - for (i = 0; i < memlen; i++) { - char res; - READSHM(res, arlan_mem[i], char); - if (res != ~(pattern++)) { - printk(KERN_ERR "Arlan driver memory test 2 failed\n"); - return -1; - } - } - - /* zero memory */ - for (i = 0; i < memlen; i++) - WRITESHM(arlan_mem[i], 0x00, char); - - IFDEBUG(1) printk(KERN_INFO "Arlan: memory tests ok\n"); - - /* set reset flag and then release reset */ - WRITESHM(arlan->resetFlag, 0xff, u_char); - - clearChannelAttention(dev); - clearHardwareReset(dev); - - /* wait for reset flag to become zero, we'll wait for two seconds */ - if (arlan_command(dev, ARLAN_COMMAND_LONG_WAIT_NOW)) { - printk(KERN_ERR "%s arlan: failed to come\ - back from memory test\n", dev->name); - return -1; - } - return 0; -} - -static int arlan_setup_card_by_book(struct net_device *dev) -{ - u_char irqLevel, configuredStatusFlag; - struct arlan_private *priv = netdev_priv(dev); - volatile struct arlan_shmem __iomem *arlan = priv->card; - - /* ARLAN_DEBUG_ENTRY("arlan_setup_card"); */ - - READSHM(configuredStatusFlag, arlan->configuredStatusFlag, u_char); - - IFDEBUG(10) - if (configuredStatusFlag != 0) - IFDEBUG(10) printk(KERN_INFO "arlan: CARD IS CONFIGURED\n"); - else - IFDEBUG(10) printk(KERN_WARNING\ - "arlan: card is NOT configured\n"); - - if (testMemory || (READSHMB(arlan->diagnosticInfo) != 0xff)) - if (arlan_hw_test_memory(dev)) - return -1; - - DEBUGSHM(4, "arlan configuredStatus = %d\n",\ - arlan->configuredStatusFlag, u_char); - DEBUGSHM(4, "arlan driver diagnostic: 0x%2x\n",\ - arlan->diagnosticInfo, u_char); - - /* issue nop command - no interrupt */ - arlan_command(dev, ARLAN_COMMAND_NOOP); - if (arlan_command(dev, ARLAN_COMMAND_WAIT_NOW) != 0) - return -1; - - IFDEBUG(50) printk(KERN_INFO "1st Noop successfully executed !!\n"); - - /* try to turn on the arlan interrupts */ - clearClearInterrupt(dev); - setClearInterrupt(dev); - setInterruptEnable(dev); - - /* issue nop command - with interrupt */ - - arlan_command(dev, ARLAN_COMMAND_NOOPINT); - if (arlan_command(dev, ARLAN_COMMAND_WAIT_NOW) != 0) - return -1; - - - IFDEBUG(50) printk(KERN_INFO "2nd Noop successfully executed !!\n"); - - READSHM(irqLevel, arlan->irqLevel, u_char) - - if (irqLevel != dev->irq) { - IFDEBUG(1) printk(KERN_WARNING "arlan dip switches\ - set irq to %d\n", irqLevel); - printk(KERN_WARNING "device driver irq set to %d-\ - does not match\n", dev->irq); - dev->irq = irqLevel; - } else - IFDEBUG(2) printk(KERN_INFO "irq level is OK\n"); - - - IFDEBUG(3) arlan_print_diagnostic_info(dev); - - arlan_command(dev, ARLAN_COMMAND_CONF); - - READSHM(configuredStatusFlag, arlan->configuredStatusFlag, u_char); - if (configuredStatusFlag == 0) { - printk(KERN_WARNING "arlan configure failed\n"); - return -1; - } - arlan_command(dev, ARLAN_COMMAND_LONG_WAIT_NOW); - arlan_command(dev, ARLAN_COMMAND_RX); - arlan_command(dev, ARLAN_COMMAND_LONG_WAIT_NOW); - printk(KERN_NOTICE "%s: arlan driver version %s loaded\n", - dev->name, arlan_version); - - /* ARLAN_DEBUG_EXIT("arlan_setup_card"); */ - - return 0; /* no errors */ -} -#endif - -#ifdef ARLAN_PROC_INTERFACE -#ifdef ARLAN_PROC_SHM_DUMP - -static char arlan_drive_info[ARLAN_STR_SIZE] = "A655\n\0"; - -static int arlan_sysctl_info(ctl_table *ctl, int write, - void __user *buffer, size_t * lenp, loff_t *ppos) -{ - int i; - int retv, pos, devnum; - struct arlan_private *priva = NULL; - struct net_device *dev; - pos = 0; - if (write) { - printk(KERN_INFO "wrirte: "); - for (i = 0; i < 100; i++) - printk("adi %x\n", arlan_drive_info[i]); - } - if (ctl->procname == NULL || arlan_drive_info == NULL) { - printk(KERN_WARNING " procname is NULL in sysctl_table or arlan_drive_info is NULL\n at arlan module\n "); - return -1; - } - devnum = ctl->procname[5] - '0'; - if (devnum < 0 || devnum > MAX_ARLANS - 1) { - printk(KERN_WARNING "too strange devnum in procfs parse\n "); - return -1; - } else if (arlan_device[devnum] == NULL) { - if (ctl->procname) - pos += sprintf(arlan_drive_info + pos,\ - "\t%s\n\n", ctl->procname); - pos += sprintf(arlan_drive_info + pos,\ - "No device found here\n"); - goto final; - } else - priva = netdev_priv(arlan_device[devnum]); - - if (priva == NULL) { - printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); - return -1; - } - dev = arlan_device[devnum]; - - memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); - - pos = sprintf(arlan_drive_info, "Arlan info\n"); - /* Header Signature */ - SARLSTR(textRegion, 48); - SARLUC(resetFlag); - pos += sprintf(arlan_drive_info + pos,\ - "diagnosticInfo\t=\t%s\n", arlan_diagnostic_info_string(dev)); - SARLUC(diagnosticInfo); - SARLUS(diagnosticOffset); - SARLUCN(_1, 12); - SARLUCN(lanCardNodeId, 6); - SARLUCN(broadcastAddress, 6); - pos += sprintf(arlan_drive_info + pos,\ - "hardwareType =\t %s\n", arlan_hardware_type_string(dev)); - SARLUC(hardwareType); - SARLUC(majorHardwareVersion); - SARLUC(minorHardwareVersion); - SARLUC(radioModule); - SARLUC(defaultChannelSet); - SARLUCN(_2, 47); - - /* Control/Status Block - 0x0080 */ - SARLUC(interruptInProgress); - SARLUC(cntrlRegImage); - - SARLUCN(_3, 14); - SARLUC(commandByte); - SARLUCN(commandParameter, 15); - - /* Receive Status - 0x00a0 */ - SARLUC(rxStatus); - SARLUC(rxFrmType); - SARLUS(rxOffset); - SARLUS(rxLength); - SARLUCN(rxSrc, 6); - SARLUC(rxBroadcastFlag); - SARLUC(rxQuality); - SARLUC(scrambled); - SARLUCN(_4, 1); - - /* Transmit Status - 0x00b0 */ - SARLUC(txStatus); - SARLUC(txAckQuality); - SARLUC(numRetries); - SARLUCN(_5, 14); - SARLUCN(registeredRouter, 6); - SARLUCN(backboneRouter, 6); - SARLUC(registrationStatus); - SARLUC(configuredStatusFlag); - SARLUCN(_6, 1); - SARLUCN(ultimateDestAddress, 6); - SARLUCN(immedDestAddress, 6); - SARLUCN(immedSrcAddress, 6); - SARLUS(rxSequenceNumber); - SARLUC(assignedLocaltalkAddress); - SARLUCN(_7, 27); - - /* System Parameter Block */ - - /* - Driver Parameters (Novell Specific) */ - - SARLUS(txTimeout); - SARLUS(transportTime); - SARLUCN(_8, 4); - - /* - Configuration Parameters */ - SARLUC(irqLevel); - SARLUC(spreadingCode); - SARLUC(channelSet); - SARLUC(channelNumber); - SARLUS(radioNodeId); - SARLUCN(_9, 2); - SARLUC(scramblingDisable); - SARLUC(radioType); - SARLUS(routerId); - SARLUCN(_10, 9); - SARLUC(txAttenuation); - SARLUIA(systemId); - SARLUS(globalChecksum); - SARLUCN(_11, 4); - SARLUS(maxDatagramSize); - SARLUS(maxFrameSize); - SARLUC(maxRetries); - SARLUC(receiveMode); - SARLUC(priority); - SARLUC(rootOrRepeater); - SARLUCN(specifiedRouter, 6); - SARLUS(fastPollPeriod); - SARLUC(pollDecay); - SARLUSA(fastPollDelay); - SARLUC(arlThreshold); - SARLUC(arlDecay); - SARLUCN(_12, 1); - SARLUS(specRouterTimeout); - SARLUCN(_13, 5); - - /* Scrambled Area */ - SARLUIA(SID); - SARLUCN(encryptionKey, 12); - SARLUIA(_14); - SARLUSA(waitTime); - SARLUSA(lParameter); - SARLUCN(_15, 3); - SARLUS(headerSize); - SARLUS(sectionChecksum); - - SARLUC(registrationMode); - SARLUC(registrationFill); - SARLUS(pollPeriod); - SARLUS(refreshPeriod); - SARLSTR(name, 16); - SARLUCN(NID, 6); - SARLUC(localTalkAddress); - SARLUC(codeFormat); - SARLUC(numChannels); - SARLUC(channel1); - SARLUC(channel2); - SARLUC(channel3); - SARLUC(channel4); - SARLUCN(SSCode, 59); - -/* SARLUCN( _16, 0x140); - */ - /* Statistics Block - 0x0300 */ - SARLUC(hostcpuLock); - SARLUC(lancpuLock); - SARLUCN(resetTime, 18); - SARLUIA(numDatagramsTransmitted); - SARLUIA(numReTransmissions); - SARLUIA(numFramesDiscarded); - SARLUIA(numDatagramsReceived); - SARLUIA(numDuplicateReceivedFrames); - SARLUIA(numDatagramsDiscarded); - SARLUS(maxNumReTransmitDatagram); - SARLUS(maxNumReTransmitFrames); - SARLUS(maxNumConsecutiveDuplicateFrames); - /* misaligned here so we have to go to characters */ - SARLUIA(numBytesTransmitted); - SARLUIA(numBytesReceived); - SARLUIA(numCRCErrors); - SARLUIA(numLengthErrors); - SARLUIA(numAbortErrors); - SARLUIA(numTXUnderruns); - SARLUIA(numRXOverruns); - SARLUIA(numHoldOffs); - SARLUIA(numFramesTransmitted); - SARLUIA(numFramesReceived); - SARLUIA(numReceiveFramesLost); - SARLUIA(numRXBufferOverflows); - SARLUIA(numFramesDiscardedAddrMismatch); - SARLUIA(numFramesDiscardedSIDMismatch); - SARLUIA(numPollsTransmistted); - SARLUIA(numPollAcknowledges); - SARLUIA(numStatusTimeouts); - SARLUIA(numNACKReceived); - SARLUS(auxCmd); - SARLUCN(dumpPtr, 4); - SARLUC(dumpVal); - SARLUC(wireTest); - - /* next 4 seems too long for procfs, over single page ? - SARLUCN( _17, 0x86); - SARLUCN( txBuffer, 0x800); - SARLUCN( rxBuffer, 0x800); - SARLUCN( _18, 0x0bff); - */ - - pos += sprintf(arlan_drive_info + pos, "rxRing\t=\t0x"); - for (i = 0; i < 0x50; i++) - pos += sprintf(arlan_drive_info + pos, "%02x",\ - ((char *) priva->conf)[priva->conf->rxOffset + i]); - pos += sprintf(arlan_drive_info + pos, "\n"); - - SARLUC(configStatus); - SARLUC(_22); - SARLUC(progIOCtrl); - SARLUC(shareMBase); - SARLUC(controlRegister); - - pos += sprintf(arlan_drive_info + pos, " total %d chars\n", pos); - if (ctl) - if (ctl->procname) - pos += sprintf(arlan_drive_info + pos,\ - " driver name : %s\n", ctl->procname); -final: - *lenp = pos; - - if (!write) - retv = proc_dostring(ctl, write, buffer, lenp, ppos); - else { - *lenp = 0; - return -1; - } - return retv; -} - - -static int arlan_sysctl_info161719(ctl_table *ctl, int write, - void __user *buffer, size_t * lenp, loff_t *ppos) -{ - int i; - int retv, pos, devnum; - struct arlan_private *priva = NULL; - - pos = 0; - devnum = ctl->procname[5] - '0'; - if (arlan_device[devnum] == NULL) { - pos += sprintf(arlan_drive_info + pos,\ - "No device found here\n"); - goto final; - } else - priva = netdev_priv(arlan_device[devnum]); - - if (priva == NULL) { - printk(KERN_WARNING " Could not find the device\ - private in arlan procsys, bad\n "); - return -1; - } - memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); - SARLUCN(_16, 0xC0); - SARLUCN(_17, 0x6A); - SARLUCN(_18, 14); - SARLUCN(_19, 0x86); - SARLUCN(_21, 0x3fd); - -final: - *lenp = pos; - retv = proc_dostring(ctl, write, buffer, lenp, ppos); - return retv; -} - -static int arlan_sysctl_infotxRing(ctl_table *ctl, int write, - void __user *buffer, size_t * lenp, loff_t *ppos) -{ - int i; - int retv, pos, devnum; - struct arlan_private *priva = NULL; - - pos = 0; - devnum = ctl->procname[5] - '0'; - if (arlan_device[devnum] == NULL) { - pos += sprintf(arlan_drive_info + pos,\ - "No device found here\n"); - goto final; - } else - priva = netdev_priv(arlan_device[devnum]); - - if (priva == NULL) { - printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); - return -1; - } - memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); - SARLBNpln(u_char, txBuffer, 0x800); -final: - *lenp = pos; - retv = proc_dostring(ctl, write, buffer, lenp, ppos); - return retv; -} - -static int arlan_sysctl_inforxRing(ctl_table *ctl, int write, - void __user *buffer, size_t * lenp, loff_t *ppos) -{ - int i; - int retv, pos, devnum; - struct arlan_private *priva = NULL; - - pos = 0; - devnum = ctl->procname[5] - '0'; - if (arlan_device[devnum] == NULL) { - pos += sprintf(arlan_drive_info + pos,\ - "No device found here\n"); - goto final; - } else - priva = netdev_priv(arlan_device[devnum]); - if (priva == NULL) { - printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); - return -1; - } - memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); - SARLBNpln(u_char, rxBuffer, 0x800); -final: - *lenp = pos; - retv = proc_dostring(ctl, write, buffer, lenp, ppos); - return retv; -} - -static int arlan_sysctl_info18(ctl_table *ctl, int write, - void __user *buffer, size_t * lenp, loff_t *ppos) -{ - int i; - int retv, pos, devnum; - struct arlan_private *priva = NULL; - - pos = 0; - devnum = ctl->procname[5] - '0'; - if (arlan_device[devnum] == NULL) { - pos += sprintf(arlan_drive_info + pos,\ - "No device found here\n"); - goto final; - } else - priva = netdev_priv(arlan_device[devnum]); - - if (priva == NULL) { - printk(KERN_WARNING " Could not find the device private in arlan procsys, bad\n "); - return -1; - } - - memcpy_fromio(priva->conf, priva->card, sizeof(struct arlan_shmem)); - SARLBNpln(u_char, _18, 0x800); - -final: - *lenp = pos; - retv = proc_dostring(ctl, write, buffer, lenp, ppos); - return retv; -} - - -#endif /* #ifdef ARLAN_PROC_SHM_DUMP */ - - -static char conf_reset_result[200]; - -static int arlan_configure(ctl_table *ctl, int write, - void __user *buffer, size_t * lenp, loff_t *ppos) -{ - int pos = 0; - int devnum = ctl->procname[6] - '0'; - struct arlan_private *priv; - - if (devnum < 0 || devnum > MAX_ARLANS - 1) { - printk(KERN_WARNING "too strange devnum in procfs parse\n"); - return -1; - } else if (arlan_device[devnum] != NULL) { - priv = netdev_priv(arlan_device[devnum]); - arlan_command(arlan_device[devnum],\ - ARLAN_COMMAND_CLEAN_AND_CONF); - } else - return -1; - - *lenp = pos; - return proc_dostring(ctl, write, buffer, lenp, ppos); -} - -static int arlan_sysctl_reset(ctl_table *ctl, int write, - void __user *buffer, size_t * lenp, loff_t *ppos) -{ - int pos = 0; - int devnum = ctl->procname[5] - '0'; - struct arlan_private *priv; - - if (devnum < 0 || devnum > MAX_ARLANS - 1) { - printk(KERN_WARNING "too strange devnum in procfs parse\n"); - return -1; - - } else if (arlan_device[devnum] != NULL) { - priv = netdev_priv(arlan_device[devnum]); - arlan_command(arlan_device[devnum], \ - ARLAN_COMMAND_CLEAN_AND_RESET); - - } else - return -1; - - *lenp = pos + 3; - return proc_dostring(ctl, write, buffer, lenp, ppos); -} - - -/* Place files in /proc/sys/dev/arlan */ -#define CTBLN(card, nam) \ - { .procname = #nam,\ - .data = &(arlan_conf[card].nam),\ - .maxlen = sizeof(int), .mode = 0600, .proc_handler = proc_dointvec} -#ifdef ARLAN_DEBUGGING - -#define ARLAN_PROC_DEBUG_ENTRIES do {\ - - { .procname = "entry_exit_debug",\ - .data = &arlan_entry_and_exit_debug,\ - .maxlen = sizeof(int), .mode = 0600, .proc_handler = proc_dointvec},\ - { .procname = "debug", .data = &arlan_debug,\ - .maxlen = sizeof(int), .mode = 0600, .proc_handler = proc_dointvec}, - - } while (0) -#else -#define ARLAN_PROC_DEBUG_ENTRIES -#endif - -#define ARLAN_SYSCTL_TABLE_TOTAL(cardNo)\ - CTBLN(cardNo, spreadingCode),\ - CTBLN(cardNo, channelNumber),\ - CTBLN(cardNo, scramblingDisable),\ - CTBLN(cardNo, txAttenuation),\ - CTBLN(cardNo, systemId), \ - CTBLN(cardNo, maxDatagramSize),\ - CTBLN(cardNo, maxFrameSize),\ - CTBLN(cardNo, maxRetries),\ - CTBLN(cardNo, receiveMode),\ - CTBLN(cardNo, priority),\ - CTBLN(cardNo, rootOrRepeater),\ - CTBLN(cardNo, SID),\ - CTBLN(cardNo, registrationMode),\ - CTBLN(cardNo, registrationFill),\ - CTBLN(cardNo, localTalkAddress),\ - CTBLN(cardNo, codeFormat),\ - CTBLN(cardNo, numChannels),\ - CTBLN(cardNo, channel1),\ - CTBLN(cardNo, channel2),\ - CTBLN(cardNo, channel3),\ - CTBLN(cardNo, channel4),\ - CTBLN(cardNo, txClear),\ - CTBLN(cardNo, txRetries),\ - CTBLN(cardNo, txRouting),\ - CTBLN(cardNo, txScrambled),\ - CTBLN(cardNo, rxParameter),\ - CTBLN(cardNo, txTimeoutMs),\ - CTBLN(cardNo, waitCardTimeout),\ - CTBLN(cardNo, channelSet),\ - { .procname = "name",\ - .data = arlan_conf[cardNo].siteName,\ - .maxlen = 16, .mode = 0600, .proc_handler = proc_dostring },\ - CTBLN(cardNo, waitTime),\ - CTBLN(cardNo, lParameter),\ - CTBLN(cardNo, _15),\ - CTBLN(cardNo, headerSize),\ - CTBLN(cardNo, tx_delay_ms),\ - CTBLN(cardNo, retries),\ - CTBLN(cardNo, ReTransmitPacketMaxSize),\ - CTBLN(cardNo, waitReTransmitPacketMaxSize),\ - CTBLN(cardNo, fastReTransCount),\ - CTBLN(cardNo, driverRetransmissions),\ - CTBLN(cardNo, txAckTimeoutMs),\ - CTBLN(cardNo, registrationInterrupts),\ - CTBLN(cardNo, hardwareType),\ - CTBLN(cardNo, radioType),\ - CTBLN(cardNo, writeEEPROM),\ - CTBLN(cardNo, writeRadioType),\ - ARLAN_PROC_DEBUG_ENTRIES\ - CTBLN(cardNo, in_speed),\ - CTBLN(cardNo, out_speed),\ - CTBLN(cardNo, in_speed10),\ - CTBLN(cardNo, out_speed10),\ - CTBLN(cardNo, in_speed_max),\ - CTBLN(cardNo, out_speed_max),\ - CTBLN(cardNo, measure_rate),\ - CTBLN(cardNo, pre_Command_Wait),\ - CTBLN(cardNo, rx_tweak1),\ - CTBLN(cardNo, rx_tweak2),\ - CTBLN(cardNo, tx_queue_len),\ - -static ctl_table arlan_conf_table0[] = { - ARLAN_SYSCTL_TABLE_TOTAL(0) - -#ifdef ARLAN_PROC_SHM_DUMP - { - .procname = "arlan0-txRing", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_infotxRing, - }, - { - .procname = "arlan0-rxRing", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_inforxRing, - }, - { - .procname = "arlan0-18", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info18, - }, - { - .procname = "arlan0-ring", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info161719, - }, - { - .procname = "arlan0-shm-cpy", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info, - }, -#endif - { - .procname = "config0", - .data = &conf_reset_result, - .maxlen = 100, - .mode = 0400, - .proc_handler = arlan_configure - }, - { - .procname = "reset0", - .data = &conf_reset_result, - .maxlen = 100, - .mode = 0400, - .proc_handler = arlan_sysctl_reset, - }, - { } -}; - -static ctl_table arlan_conf_table1[] = { - - ARLAN_SYSCTL_TABLE_TOTAL(1) - -#ifdef ARLAN_PROC_SHM_DUMP - { - .procname = "arlan1-txRing", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_infotxRing, - }, - { - .procname = "arlan1-rxRing", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_inforxRing, - }, - { - .procname = "arlan1-18", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info18, - }, - { - .procname = "arlan1-ring", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info161719, - }, - { - .procname = "arlan1-shm-cpy", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info, - }, -#endif - { - .procname = "config1", - .data = &conf_reset_result, - .maxlen = 100, - .mode = 0400, - .proc_handler = arlan_configure, - }, - { - .procname = "reset1", - .data = &conf_reset_result, - .maxlen = 100, - .mode = 0400, - .proc_handler = arlan_sysctl_reset, - }, - { } -}; - -static ctl_table arlan_conf_table2[] = { - - ARLAN_SYSCTL_TABLE_TOTAL(2) - -#ifdef ARLAN_PROC_SHM_DUMP - { - .procname = "arlan2-txRing", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_infotxRing, - }, - { - .procname = "arlan2-rxRing", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_inforxRing, - }, - { - .procname = "arlan2-18", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info18, - }, - { - .procname = "arlan2-ring", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info161719, - }, - { - .procname = "arlan2-shm-cpy", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info, - }, -#endif - { - .procname = "config2", - .data = &conf_reset_result, - .maxlen = 100, - .mode = 0400, - .proc_handler = arlan_configure, - }, - { - .procname = "reset2", - .data = &conf_reset_result, - .maxlen = 100, - .mode = 0400, - .proc_handler = arlan_sysctl_reset, - }, - { } -}; - -static ctl_table arlan_conf_table3[] = { - - ARLAN_SYSCTL_TABLE_TOTAL(3) - -#ifdef ARLAN_PROC_SHM_DUMP - { - .procname = "arlan3-txRing", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_infotxRing, - }, - { - .procname = "arlan3-rxRing", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_inforxRing, - }, - { - .procname = "arlan3-18", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info18, - }, - { - .procname = "arlan3-ring", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info161719, - }, - { - .procname = "arlan3-shm-cpy", - .data = &arlan_drive_info, - .maxlen = ARLAN_STR_SIZE, - .mode = 0400, - .proc_handler = arlan_sysctl_info, - }, -#endif - { - .procname = "config3", - .data = &conf_reset_result, - .maxlen = 100, - .mode = 0400, - .proc_handler = arlan_configure, - }, - { - .procname = "reset3", - .data = &conf_reset_result, - .maxlen = 100, - .mode = 0400, - .proc_handler = arlan_sysctl_reset, - }, - { } -}; - - - -static ctl_table arlan_table[] = { - { - .procname = "arlan0", - .maxlen = 0, - .mode = 0600, - .child = arlan_conf_table0, - }, - { - .procname = "arlan1", - .maxlen = 0, - .mode = 0600, - .child = arlan_conf_table1, - }, - { - .procname = "arlan2", - .maxlen = 0, - .mode = 0600, - .child = arlan_conf_table2, - }, - { - .procname = "arlan3", - .maxlen = 0, - .mode = 0600, - .child = arlan_conf_table3, - }, - { } -}; - -#else - -static ctl_table arlan_table[] = { - { } -}; -#endif - - -/* static int mmtu = 1234; */ - -static ctl_table arlan_root_table[] = { - { - .procname = "arlan", - .maxlen = 0, - .mode = 0555, - .child = arlan_table, - }, - { } -}; - - -static struct ctl_table_header *arlan_device_sysctl_header; - -int __init init_arlan_proc(void) -{ - if (arlan_device_sysctl_header) - return 0; - arlan_device_sysctl_header = register_sysctl_table(arlan_root_table); - if (!arlan_device_sysctl_header) - return -1; - - return 0; -} - -void __exit cleanup_arlan_proc(void) -{ - unregister_sysctl_table(arlan_device_sysctl_header); - arlan_device_sysctl_header = NULL; - -} -#endif diff --git a/drivers/staging/arlan/arlan.h b/drivers/staging/arlan/arlan.h deleted file mode 100644 index 3974acf..0000000 --- a/drivers/staging/arlan/arlan.h +++ /dev/null @@ -1,535 +0,0 @@ -/* - * Copyright (C) 1997 Cullen Jennings - * Copyright (C) 1998 Elmer.Joandi@ut.ee, +37-255-13500 - * GNU General Public License applies - */ - -#include -#include -#include -#include -#include /* For the statistics structure. */ -#include /* For ARPHRD_ETHER */ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - - -/* #define ARLAN_DEBUGGING 1 */ - -#define ARLAN_PROC_INTERFACE -#define MAX_ARLANS 4 /* not more than 4 ! */ -#define ARLAN_PROC_SHM_DUMP /* shows all card registers, makes driver way larger */ - -#define ARLAN_MAX_MULTICAST_ADDRS 16 -#define ARLAN_RCV_CLEAN 0 -#define ARLAN_RCV_PROMISC 1 -#define ARLAN_RCV_CONTROL 2 - -#ifdef CONFIG_PROC_FS -extern int init_arlan_proc(void); -extern void cleanup_arlan_proc(void); -#else -#define init_arlan_proc() ({ 0; }) -#define cleanup_arlan_proc() do { } while (0) -#endif - -extern struct net_device *arlan_device[MAX_ARLANS]; -extern int arlan_debug; -extern int arlan_entry_debug; -extern int arlan_exit_debug; -extern int testMemory; -extern int arlan_command(struct net_device *dev, int command); - -#define SIDUNKNOWN -1 -#define radioNodeIdUNKNOWN -1 -#define irqUNKNOWN 0 -#define debugUNKNOWN 0 -#define testMemoryUNKNOWN 1 -#define spreadingCodeUNKNOWN 0 -#define channelNumberUNKNOWN 0 -#define channelSetUNKNOWN 0 -#define systemIdUNKNOWN -1 -#define registrationModeUNKNOWN -1 - - -#define IFDEBUG(L) if ((L) & arlan_debug) -#define ARLAN_FAKE_HDR_LEN 12 - -#ifdef ARLAN_DEBUGGING - #define DEBUG 1 - #define ARLAN_ENTRY_EXIT_DEBUGGING 1 - #define ARLAN_DEBUG(a, b) printk(KERN_DEBUG a, b) -#else - #define ARLAN_DEBUG(a, b) -#endif - -#define ARLAN_SHMEM_SIZE 0x2000 - -struct arlan_shmem { - /* Header Signature */ - volatile char textRegion[48]; - volatile u_char resetFlag; - volatile u_char diagnosticInfo; - volatile u_short diagnosticOffset; - volatile u_char _1[12]; - volatile u_char lanCardNodeId[6]; - volatile u_char broadcastAddress[6]; - volatile u_char hardwareType; - volatile u_char majorHardwareVersion; - volatile u_char minorHardwareVersion; - volatile u_char radioModule;/* shows EEPROM, can be overridden at 0x111 */ - volatile u_char defaultChannelSet; /* shows EEProm, can be overriiden at 0x10A */ - volatile u_char _2[47]; - - /* Control/Status Block - 0x0080 */ - volatile u_char interruptInProgress; /* not used by lancpu */ - volatile u_char cntrlRegImage; /* not used by lancpu */ - volatile u_char _3[13]; - volatile u_char dumpByte; - volatile u_char commandByte; /* non-zero = active */ - volatile u_char commandParameter[15]; - - /* Receive Status - 0x00a0 */ - volatile u_char rxStatus; /* 1- data, 2-control, 0xff - registr change */ - volatile u_char rxFrmType; - volatile u_short rxOffset; - volatile u_short rxLength; - volatile u_char rxSrc[6]; - volatile u_char rxBroadcastFlag; - volatile u_char rxQuality; - volatile u_char scrambled; - volatile u_char _4[1]; - - /* Transmit Status - 0x00b0 */ - volatile u_char txStatus; - volatile u_char txAckQuality; - volatile u_char numRetries; - volatile u_char _5[14]; - volatile u_char registeredRouter[6]; - volatile u_char backboneRouter[6]; - volatile u_char registrationStatus; - volatile u_char configuredStatusFlag; - volatile u_char _6[1]; - volatile u_char ultimateDestAddress[6]; - volatile u_char immedDestAddress[6]; - volatile u_char immedSrcAddress[6]; - volatile u_short rxSequenceNumber; - volatile u_char assignedLocaltalkAddress; - volatile u_char _7[27]; - - /* System Parameter Block */ - - /* - Driver Parameters (Novell Specific) */ - - volatile u_short txTimeout; - volatile u_short transportTime; - volatile u_char _8[4]; - - /* - Configuration Parameters */ - volatile u_char irqLevel; - volatile u_char spreadingCode; - volatile u_char channelSet; - volatile u_char channelNumber; - volatile u_short radioNodeId; - volatile u_char _9[2]; - volatile u_char scramblingDisable; - volatile u_char radioType; - volatile u_short routerId; - volatile u_char _10[9]; - volatile u_char txAttenuation; - volatile u_char systemId[4]; - volatile u_short globalChecksum; - volatile u_char _11[4]; - volatile u_short maxDatagramSize; - volatile u_short maxFrameSize; - volatile u_char maxRetries; - volatile u_char receiveMode; - volatile u_char priority; - volatile u_char rootOrRepeater; - volatile u_char specifiedRouter[6]; - volatile u_short fastPollPeriod; - volatile u_char pollDecay; - volatile u_char fastPollDelay[2]; - volatile u_char arlThreshold; - volatile u_char arlDecay; - volatile u_char _12[1]; - volatile u_short specRouterTimeout; - volatile u_char _13[5]; - - /* Scrambled Area */ - volatile u_char SID[4]; - volatile u_char encryptionKey[12]; - volatile u_char _14[2]; - volatile u_char waitTime[2]; - volatile u_char lParameter[2]; - volatile u_char _15[3]; - volatile u_short headerSize; - volatile u_short sectionChecksum; - - volatile u_char registrationMode; - volatile u_char registrationFill; - volatile u_short pollPeriod; - volatile u_short refreshPeriod; - volatile u_char name[16]; - volatile u_char NID[6]; - volatile u_char localTalkAddress; - volatile u_char codeFormat; - volatile u_char numChannels; - volatile u_char channel1; - volatile u_char channel2; - volatile u_char channel3; - volatile u_char channel4; - volatile u_char SSCode[59]; - - volatile u_char _16[0xC0]; - volatile u_short auxCmd; - volatile u_char dumpPtr[4]; - volatile u_char dumpVal; - volatile u_char _17[0x6A]; - volatile u_char wireTest; - volatile u_char _18[14]; - - /* Statistics Block - 0x0300 */ - volatile u_char hostcpuLock; - volatile u_char lancpuLock; - volatile u_char resetTime[18]; - - volatile u_char numDatagramsTransmitted[4]; - volatile u_char numReTransmissions[4]; - volatile u_char numFramesDiscarded[4]; - volatile u_char numDatagramsReceived[4]; - volatile u_char numDuplicateReceivedFrames[4]; - volatile u_char numDatagramsDiscarded[4]; - - volatile u_short maxNumReTransmitDatagram; - volatile u_short maxNumReTransmitFrames; - volatile u_short maxNumConsecutiveDuplicateFrames; - /* misaligned here so we have to go to characters */ - - volatile u_char numBytesTransmitted[4]; - volatile u_char numBytesReceived[4]; - volatile u_char numCRCErrors[4]; - volatile u_char numLengthErrors[4]; - volatile u_char numAbortErrors[4]; - volatile u_char numTXUnderruns[4]; - volatile u_char numRXOverruns[4]; - volatile u_char numHoldOffs[4]; - volatile u_char numFramesTransmitted[4]; - volatile u_char numFramesReceived[4]; - volatile u_char numReceiveFramesLost[4]; - volatile u_char numRXBufferOverflows[4]; - volatile u_char numFramesDiscardedAddrMismatch[4]; - volatile u_char numFramesDiscardedSIDMismatch[4]; - volatile u_char numPollsTransmistted[4]; - volatile u_char numPollAcknowledges[4]; - volatile u_char numStatusTimeouts[4]; - volatile u_char numNACKReceived[4]; - - volatile u_char _19[0x86]; - - volatile u_char txBuffer[0x800]; - volatile u_char rxBuffer[0x800]; - - volatile u_char _20[0x800]; - volatile u_char _21[0x3fb]; - volatile u_char configStatus; - volatile u_char _22; - volatile u_char progIOCtrl; - volatile u_char shareMBase; - volatile u_char controlRegister; -}; - -struct arlan_conf_stru { - int spreadingCode; - int channelSet; - int channelNumber; - int scramblingDisable; - int txAttenuation; - int systemId; - int maxDatagramSize; - int maxFrameSize; - int maxRetries; - int receiveMode; - int priority; - int rootOrRepeater; - int SID; - int radioNodeId; - int registrationMode; - int registrationFill; - int localTalkAddress; - int codeFormat; - int numChannels; - int channel1; - int channel2; - int channel3; - int channel4; - int txClear; - int txRetries; - int txRouting; - int txScrambled; - int rxParameter; - int txTimeoutMs; - int txAckTimeoutMs; - int waitCardTimeout; - int waitTime; - int lParameter; - int _15; - int headerSize; - int retries; - int tx_delay_ms; - int waitReTransmitPacketMaxSize; - int ReTransmitPacketMaxSize; - int fastReTransCount; - int driverRetransmissions; - int registrationInterrupts; - int hardwareType; - int radioType; - int writeRadioType; - int writeEEPROM; - char siteName[17]; - int measure_rate; - int in_speed; - int out_speed; - int in_speed10; - int out_speed10; - int in_speed_max; - int out_speed_max; - int pre_Command_Wait; - int rx_tweak1; - int rx_tweak2; - int tx_queue_len; -}; - -extern struct arlan_conf_stru arlan_conf[MAX_ARLANS]; - -struct TxParam { - volatile short offset; - volatile short length; - volatile u_char dest[6]; - volatile unsigned char clear; - volatile unsigned char retries; - volatile unsigned char routing; - volatile unsigned char scrambled; -}; - -#define TX_RING_SIZE 2 -/* Information that need to be kept for each board. */ -struct arlan_private { - struct arlan_shmem __iomem *card; - struct arlan_shmem *conf; - - struct arlan_conf_stru *Conf; - int bad; - int reset; - unsigned long lastReset; - struct timer_list timer; - struct timer_list tx_delay_timer; - struct timer_list tx_retry_timer; - struct timer_list rx_check_timer; - - int registrationLostCount; - int reRegisterExp; - int irq_test_done; - - struct TxParam txRing[TX_RING_SIZE]; - char reTransmitBuff[0x800]; - int txLast; - unsigned ReTransmitRequested; - unsigned long tx_done_delayed; - unsigned long registrationLastSeen; - - unsigned long tx_last_sent; - unsigned long tx_last_cleared; - unsigned long retransmissions; - unsigned long interrupt_ack_requested; - spinlock_t lock; - unsigned long waiting_command_mask; - unsigned long card_polling_interval; - unsigned long last_command_buff_free_time; - - int under_reset; - int under_config; - int rx_command_given; - int tx_command_given; - unsigned long interrupt_processing_active; - unsigned long last_rx_int_ack_time; - unsigned long in_bytes; - unsigned long out_bytes; - unsigned long in_time; - unsigned long out_time; - unsigned long in_time10; - unsigned long out_time10; - unsigned long in_bytes10; - unsigned long out_bytes10; - int init_etherdev_alloc; -}; - - - -#define ARLAN_CLEAR 0x00 -#define ARLAN_RESET 0x01 -#define ARLAN_CHANNEL_ATTENTION 0x02 -#define ARLAN_INTERRUPT_ENABLE 0x04 -#define ARLAN_CLEAR_INTERRUPT 0x08 -#define ARLAN_POWER 0x40 -#define ARLAN_ACCESS 0x80 - -#define ARLAN_COM_CONF 0x01 -#define ARLAN_COM_RX_ENABLE 0x03 -#define ARLAN_COM_RX_ABORT 0x04 -#define ARLAN_COM_TX_ENABLE 0x05 -#define ARLAN_COM_TX_ABORT 0x06 -#define ARLAN_COM_NOP 0x07 -#define ARLAN_COM_STANDBY 0x08 -#define ARLAN_COM_ACTIVATE 0x09 -#define ARLAN_COM_GOTO_SLOW_POLL 0x0a -#define ARLAN_COM_INT 0x80 - - -#define TXLAST(dev) (((struct arlan_private *)netdev_priv(dev))->txRing[((struct arlan_private *)netdev_priv(dev))->txLast]) -#define TXHEAD(dev) (((struct arlan_private *)netdev_priv(dev))->txRing[0]) -#define TXTAIL(dev) (((struct arlan_private *)netdev_priv(dev))->txRing[1]) - -#define TXBuffStart(dev) offsetof(struct arlan_shmem, txBuffer) -#define TXBuffEnd(dev) offsetof(struct arlan_shmem, xxBuffer) - -#define READSHM(to, from, atype) {\ - atype tmp;\ - memcpy_fromio(&(tmp), &(from), sizeof(atype));\ - to = tmp;\ - } - -#define READSHMEM(from, atype)\ - atype from; \ - READSHM(from, arlan->from, atype); - -#define WRITESHM(to, from, atype) \ - { atype tmpSHM = from;\ - memcpy_toio(&(to), &tmpSHM, sizeof(atype));\ - } - -#define DEBUGSHM(levelSHM, stringSHM, stuff, atype) \ - { atype tmpSHM; \ - memcpy_fromio(&tmpSHM, &(stuff), sizeof(atype));\ - IFDEBUG(levelSHM) printk(stringSHM, tmpSHM);\ - } - -#define WRITESHMB(to, val) \ - writeb(val, &(to)) -#define READSHMB(to) \ - readb(&(to)) -#define WRITESHMS(to, val) \ - writew(val, &(to)) -#define READSHMS(to) \ - readw(&(to)) -#define WRITESHMI(to, val) \ - writel(val, &(to)) -#define READSHMI(to) \ - readl(&(to)) - - - - - -#define registrationBad(dev)\ - ((READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationMode) > 0) && \ - (READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationStatus) == 0)) - - -#define readControlRegister(dev)\ - READSHMB(((struct arlan_private *)netdev_priv(dev))->card->cntrlRegImage) - -#define writeControlRegister(dev, v) {\ - WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->cntrlRegImage, ((v) & 0xF));\ - WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->controlRegister, (v)); } - - -#define arlan_interrupt_lancpu(dev) {\ - int cr; \ - \ - cr = readControlRegister(dev);\ - if (cr & ARLAN_CHANNEL_ATTENTION) \ - writeControlRegister(dev, (cr & ~ARLAN_CHANNEL_ATTENTION));\ - else \ - writeControlRegister(dev, (cr | ARLAN_CHANNEL_ATTENTION));\ -} - -#define clearChannelAttention(dev) { \ - writeControlRegister(dev, readControlRegister(dev) & ~ARLAN_CHANNEL_ATTENTION); } -#define setHardwareReset(dev) {\ - writeControlRegister(dev, readControlRegister(dev) | ARLAN_RESET); } -#define clearHardwareReset(dev) {\ - writeControlRegister(dev, readControlRegister(dev) & ~ARLAN_RESET); } -#define setInterruptEnable(dev) {\ - writeControlRegister(dev, readControlRegister(dev) | ARLAN_INTERRUPT_ENABLE) ; } -#define clearInterruptEnable(dev) {\ - writeControlRegister(dev, readControlRegister(dev) & ~ARLAN_INTERRUPT_ENABLE) ; } -#define setClearInterrupt(dev) {\ - writeControlRegister(dev, readControlRegister(dev) | ARLAN_CLEAR_INTERRUPT) ; } -#define clearClearInterrupt(dev) {\ - writeControlRegister(dev, readControlRegister(dev) & ~ARLAN_CLEAR_INTERRUPT); } -#define setPowerOff(dev) {\ - writeControlRegister(dev, readControlRegister(dev) | (ARLAN_POWER && ARLAN_ACCESS));\ - writeControlRegister(dev, readControlRegister(dev) & ~ARLAN_ACCESS); } -#define setPowerOn(dev) {\ - writeControlRegister(dev, readControlRegister(dev) & ~(ARLAN_POWER)); } -#define arlan_lock_card_access(dev) {\ - writeControlRegister(dev, readControlRegister(dev) & ~ARLAN_ACCESS); } -#define arlan_unlock_card_access(dev) {\ - writeControlRegister(dev, readControlRegister(dev) | ARLAN_ACCESS); } - - - - -#define ARLAN_COMMAND_RX 0x000001 -#define ARLAN_COMMAND_NOOP 0x000002 -#define ARLAN_COMMAND_NOOPINT 0x000004 -#define ARLAN_COMMAND_TX 0x000008 -#define ARLAN_COMMAND_CONF 0x000010 -#define ARLAN_COMMAND_RESET 0x000020 -#define ARLAN_COMMAND_TX_ABORT 0x000040 -#define ARLAN_COMMAND_RX_ABORT 0x000080 -#define ARLAN_COMMAND_POWERDOWN 0x000100 -#define ARLAN_COMMAND_POWERUP 0x000200 -#define ARLAN_COMMAND_SLOW_POLL 0x000400 -#define ARLAN_COMMAND_ACTIVATE 0x000800 -#define ARLAN_COMMAND_INT_ACK 0x001000 -#define ARLAN_COMMAND_INT_ENABLE 0x002000 -#define ARLAN_COMMAND_WAIT_NOW 0x004000 -#define ARLAN_COMMAND_LONG_WAIT_NOW 0x008000 -#define ARLAN_COMMAND_STANDBY 0x010000 -#define ARLAN_COMMAND_INT_RACK 0x020000 -#define ARLAN_COMMAND_INT_RENABLE 0x040000 -#define ARLAN_COMMAND_CONF_WAIT 0x080000 -#define ARLAN_COMMAND_TBUSY_CLEAR 0x100000 -#define ARLAN_COMMAND_CLEAN_AND_CONF (ARLAN_COMMAND_TX_ABORT\ - | ARLAN_COMMAND_RX_ABORT\ - | ARLAN_COMMAND_CONF) -#define ARLAN_COMMAND_CLEAN_AND_RESET (ARLAN_COMMAND_TX_ABORT\ - | ARLAN_COMMAND_RX_ABORT\ - | ARLAN_COMMAND_RESET) - - -#define ARLAN_DEBUG_CHAIN_LOCKS 0x00001 -#define ARLAN_DEBUG_RESET 0x00002 -#define ARLAN_DEBUG_TIMING 0x00004 -#define ARLAN_DEBUG_CARD_STATE 0x00008 -#define ARLAN_DEBUG_TX_CHAIN 0x00010 -#define ARLAN_DEBUG_MULTICAST 0x00020 -#define ARLAN_DEBUG_HEADER_DUMP 0x00040 -#define ARLAN_DEBUG_INTERRUPT 0x00080 -#define ARLAN_DEBUG_STARTUP 0x00100 -#define ARLAN_DEBUG_SHUTDOWN 0x00200 -- cgit v0.10.2 From f80a3f62383bf673c310926d55142d51f118926d Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 23:13:37 -0700 Subject: Staging: strip: delete the driver It has sat in the staging directory since October of 2009, and no one has stepped up to take it over, so odds are, no one cares about it anymore. So, it is now deleted as scheduled, and documented in the TODO file. Cc: John W. Linville Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 8bf839e..4ca0501 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -125,8 +125,6 @@ source "drivers/staging/batman-adv/Kconfig" source "drivers/staging/samsung-laptop/Kconfig" -source "drivers/staging/strip/Kconfig" - source "drivers/staging/wavelan/Kconfig" source "drivers/staging/netwave/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index b274706..e308274 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -43,7 +43,6 @@ obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/ obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/ obj-$(CONFIG_BATMAN_ADV) += batman-adv/ obj-$(CONFIG_SAMSUNG_LAPTOP) += samsung-laptop/ -obj-$(CONFIG_STRIP) += strip/ obj-$(CONFIG_WAVELAN) += wavelan/ obj-$(CONFIG_PCMCIA_WAVELAN) += wavelan/ obj-$(CONFIG_PCMCIA_NETWAVE) += netwave/ diff --git a/drivers/staging/strip/Kconfig b/drivers/staging/strip/Kconfig deleted file mode 100644 index 36257b5..0000000 --- a/drivers/staging/strip/Kconfig +++ /dev/null @@ -1,22 +0,0 @@ -config STRIP - tristate "STRIP (Metricom starmode radio IP)" - depends on INET - select WIRELESS_EXT - ---help--- - Say Y if you have a Metricom radio and intend to use Starmode Radio - IP. STRIP is a radio protocol developed for the MosquitoNet project - to send Internet traffic using Metricom radios. Metricom radios are - small, battery powered, 100kbit/sec packet radio transceivers, about - the size and weight of a cellular telephone. (You may also have heard - them called "Metricom modems" but we avoid the term "modem" because - it misleads many people into thinking that you can plug a Metricom - modem into a phone line and use it as a modem.) - - You can use STRIP on any Linux machine with a serial port, although - it is obviously most useful for people with laptop computers. If you - think you might get a Metricom radio in the future, there is no harm - in saying Y to STRIP now, except that it makes the kernel a bit - bigger. - - To compile this as a module, choose M here: the module will be - called strip. diff --git a/drivers/staging/strip/Makefile b/drivers/staging/strip/Makefile deleted file mode 100644 index 6417bdc..0000000 --- a/drivers/staging/strip/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_STRIP) += strip.o diff --git a/drivers/staging/strip/TODO b/drivers/staging/strip/TODO deleted file mode 100644 index 9bd15a2..0000000 --- a/drivers/staging/strip/TODO +++ /dev/null @@ -1,7 +0,0 @@ -TODO: - - step up and maintain this driver to ensure that it continues - to work. Having the hardware for this is pretty much a - requirement. If this does not happen, the will be removed in - the 2.6.35 kernel release. - -Please send patches to Greg Kroah-Hartman . diff --git a/drivers/staging/strip/strip.c b/drivers/staging/strip/strip.c deleted file mode 100644 index c976c6b..0000000 --- a/drivers/staging/strip/strip.c +++ /dev/null @@ -1,2823 +0,0 @@ -/* - * Copyright 1996 The Board of Trustees of The Leland Stanford - * Junior University. All Rights Reserved. - * - * Permission to use, copy, modify, and distribute this - * software and its documentation for any purpose and without - * fee is hereby granted, provided that the above copyright - * notice appear in all copies. Stanford University - * makes no representations about the suitability of this - * software for any purpose. It is provided "as is" without - * express or implied warranty. - * - * strip.c This module implements Starmode Radio IP (STRIP) - * for kernel-based devices like TTY. It interfaces between a - * raw TTY, and the kernel's INET protocol layers (via DDI). - * - * Version: @(#)strip.c 1.3 July 1997 - * - * Author: Stuart Cheshire - * - * Fixes: v0.9 12th Feb 1996 (SC) - * New byte stuffing (2+6 run-length encoding) - * New watchdog timer task - * New Protocol key (SIP0) - * - * v0.9.1 3rd March 1996 (SC) - * Changed to dynamic device allocation -- no more compile - * time (or boot time) limit on the number of STRIP devices. - * - * v0.9.2 13th March 1996 (SC) - * Uses arp cache lookups (but doesn't send arp packets yet) - * - * v0.9.3 17th April 1996 (SC) - * Fixed bug where STR_ERROR flag was getting set unneccessarily - * (causing otherwise good packets to be unneccessarily dropped) - * - * v0.9.4 27th April 1996 (SC) - * First attempt at using "&COMMAND" Starmode AT commands - * - * v0.9.5 29th May 1996 (SC) - * First attempt at sending (unicast) ARP packets - * - * v0.9.6 5th June 1996 (Elliot) - * Put "message level" tags in every "printk" statement - * - * v0.9.7 13th June 1996 (laik) - * Added support for the /proc fs - * - * v0.9.8 July 1996 (Mema) - * Added packet logging - * - * v1.0 November 1996 (SC) - * Fixed (severe) memory leaks in the /proc fs code - * Fixed race conditions in the logging code - * - * v1.1 January 1997 (SC) - * Deleted packet logging (use tcpdump instead) - * Added support for Metricom Firmware v204 features - * (like message checksums) - * - * v1.2 January 1997 (SC) - * Put portables list back in - * - * v1.3 July 1997 (SC) - * Made STRIP driver set the radio's baud rate automatically. - * It is no longer necessarily to manually set the radio's - * rate permanently to 115200 -- the driver handles setting - * the rate automatically. - */ - -#ifdef MODULE -static const char StripVersion[] = "1.3A-STUART.CHESHIRE-MODULAR"; -#else -static const char StripVersion[] = "1.3A-STUART.CHESHIRE"; -#endif - -#define TICKLE_TIMERS 0 -#define EXT_COUNTERS 1 - - -/************************************************************************/ -/* Header files */ - -#include -#include -#include -#include -#include -#include - -# include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -/************************************************************************/ -/* Useful structures and definitions */ - -/* - * A MetricomKey identifies the protocol being carried inside a Metricom - * Starmode packet. - */ - -typedef union { - __u8 c[4]; - __u32 l; -} MetricomKey; - -/* - * An IP address can be viewed as four bytes in memory (which is what it is) or as - * a single 32-bit long (which is convenient for assignment, equality testing etc.) - */ - -typedef union { - __u8 b[4]; - __u32 l; -} IPaddr; - -/* - * A MetricomAddressString is used to hold a printable representation of - * a Metricom address. - */ - -typedef struct { - __u8 c[24]; -} MetricomAddressString; - -/* Encapsulation can expand packet of size x to 65/64x + 1 - * Sent packet looks like "*
*" - * 1 1 1-18 1 4 ? 1 - * eg. *0000-1234*SIP0 - * We allow 31 bytes for the stars, the key, the address and the s - */ -#define STRIP_ENCAP_SIZE(X) (32 + (X)*65L/64L) - -/* - * A STRIP_Header is never really sent over the radio, but making a dummy - * header for internal use within the kernel that looks like an Ethernet - * header makes certain other software happier. For example, tcpdump - * already understands Ethernet headers. - */ - -typedef struct { - MetricomAddress dst_addr; /* Destination address, e.g. "0000-1234" */ - MetricomAddress src_addr; /* Source address, e.g. "0000-5678" */ - unsigned short protocol; /* The protocol type, using Ethernet codes */ -} STRIP_Header; - -typedef struct { - char c[60]; -} MetricomNode; - -#define NODE_TABLE_SIZE 32 -typedef struct { - struct timeval timestamp; - int num_nodes; - MetricomNode node[NODE_TABLE_SIZE]; -} MetricomNodeTable; - -enum { FALSE = 0, TRUE = 1 }; - -/* - * Holds the radio's firmware version. - */ -typedef struct { - char c[50]; -} FirmwareVersion; - -/* - * Holds the radio's serial number. - */ -typedef struct { - char c[18]; -} SerialNumber; - -/* - * Holds the radio's battery voltage. - */ -typedef struct { - char c[11]; -} BatteryVoltage; - -typedef struct { - char c[8]; -} char8; - -enum { - NoStructure = 0, /* Really old firmware */ - StructuredMessages = 1, /* Parsable AT response msgs */ - ChecksummedMessages = 2 /* Parsable AT response msgs with checksums */ -}; - -struct strip { - int magic; - /* - * These are pointers to the malloc()ed frame buffers. - */ - - unsigned char *rx_buff; /* buffer for received IP packet */ - unsigned char *sx_buff; /* buffer for received serial data */ - int sx_count; /* received serial data counter */ - int sx_size; /* Serial buffer size */ - unsigned char *tx_buff; /* transmitter buffer */ - unsigned char *tx_head; /* pointer to next byte to XMIT */ - int tx_left; /* bytes left in XMIT queue */ - int tx_size; /* Serial buffer size */ - - /* - * STRIP interface statistics. - */ - - unsigned long rx_packets; /* inbound frames counter */ - unsigned long tx_packets; /* outbound frames counter */ - unsigned long rx_errors; /* Parity, etc. errors */ - unsigned long tx_errors; /* Planned stuff */ - unsigned long rx_dropped; /* No memory for skb */ - unsigned long tx_dropped; /* When MTU change */ - unsigned long rx_over_errors; /* Frame bigger than STRIP buf. */ - - unsigned long pps_timer; /* Timer to determine pps */ - unsigned long rx_pps_count; /* Counter to determine pps */ - unsigned long tx_pps_count; /* Counter to determine pps */ - unsigned long sx_pps_count; /* Counter to determine pps */ - unsigned long rx_average_pps; /* rx packets per second * 8 */ - unsigned long tx_average_pps; /* tx packets per second * 8 */ - unsigned long sx_average_pps; /* sent packets per second * 8 */ - -#ifdef EXT_COUNTERS - unsigned long rx_bytes; /* total received bytes */ - unsigned long tx_bytes; /* total received bytes */ - unsigned long rx_rbytes; /* bytes thru radio i/f */ - unsigned long tx_rbytes; /* bytes thru radio i/f */ - unsigned long rx_sbytes; /* tot bytes thru serial i/f */ - unsigned long tx_sbytes; /* tot bytes thru serial i/f */ - unsigned long rx_ebytes; /* tot stat/err bytes */ - unsigned long tx_ebytes; /* tot stat/err bytes */ -#endif - - /* - * Internal variables. - */ - - struct list_head list; /* Linked list of devices */ - - int discard; /* Set if serial error */ - int working; /* Is radio working correctly? */ - int firmware_level; /* Message structuring level */ - int next_command; /* Next periodic command */ - unsigned int user_baud; /* The user-selected baud rate */ - int mtu; /* Our mtu (to spot changes!) */ - long watchdog_doprobe; /* Next time to test the radio */ - long watchdog_doreset; /* Time to do next reset */ - long gratuitous_arp; /* Time to send next ARP refresh */ - long arp_interval; /* Next ARP interval */ - struct timer_list idle_timer; /* For periodic wakeup calls */ - MetricomAddress true_dev_addr; /* True address of radio */ - int manual_dev_addr; /* Hack: See note below */ - - FirmwareVersion firmware_version; /* The radio's firmware version */ - SerialNumber serial_number; /* The radio's serial number */ - BatteryVoltage battery_voltage; /* The radio's battery voltage */ - - /* - * Other useful structures. - */ - - struct tty_struct *tty; /* ptr to TTY structure */ - struct net_device *dev; /* Our device structure */ - - /* - * Neighbour radio records - */ - - MetricomNodeTable portables; - MetricomNodeTable poletops; -}; - -/* - * Note: manual_dev_addr hack - * - * It is not possible to change the hardware address of a Metricom radio, - * or to send packets with a user-specified hardware source address, thus - * trying to manually set a hardware source address is a questionable - * thing to do. However, if the user *does* manually set the hardware - * source address of a STRIP interface, then the kernel will believe it, - * and use it in certain places. For example, the hardware address listed - * by ifconfig will be the manual address, not the true one. - * (Both addresses are listed in /proc/net/strip.) - * Also, ARP packets will be sent out giving the user-specified address as - * the source address, not the real address. This is dangerous, because - * it means you won't receive any replies -- the ARP replies will go to - * the specified address, which will be some other radio. The case where - * this is useful is when that other radio is also connected to the same - * machine. This allows you to connect a pair of radios to one machine, - * and to use one exclusively for inbound traffic, and the other - * exclusively for outbound traffic. Pretty neat, huh? - * - * Here's the full procedure to set this up: - * - * 1. "slattach" two interfaces, e.g. st0 for outgoing packets, - * and st1 for incoming packets - * - * 2. "ifconfig" st0 (outbound radio) to have the hardware address - * which is the real hardware address of st1 (inbound radio). - * Now when it sends out packets, it will masquerade as st1, and - * replies will be sent to that radio, which is exactly what we want. - * - * 3. Set the route table entry ("route add default ..." or - * "route add -net ...", as appropriate) to send packets via the st0 - * interface (outbound radio). Do not add any route which sends packets - * out via the st1 interface -- that radio is for inbound traffic only. - * - * 4. "ifconfig" st1 (inbound radio) to have hardware address zero. - * This tells the STRIP driver to "shut down" that interface and not - * send any packets through it. In particular, it stops sending the - * periodic gratuitous ARP packets that a STRIP interface normally sends. - * Also, when packets arrive on that interface, it will search the - * interface list to see if there is another interface who's manual - * hardware address matches its own real address (i.e. st0 in this - * example) and if so it will transfer ownership of the skbuff to - * that interface, so that it looks to the kernel as if the packet - * arrived on that interface. This is necessary because when the - * kernel sends an ARP packet on st0, it expects to get a reply on - * st0, and if it sees the reply come from st1 then it will ignore - * it (to be accurate, it puts the entry in the ARP table, but - * labelled in such a way that st0 can't use it). - * - * Thanks to Petros Maniatis for coming up with the idea of splitting - * inbound and outbound traffic between two interfaces, which turned - * out to be really easy to implement, even if it is a bit of a hack. - * - * Having set a manual address on an interface, you can restore it - * to automatic operation (where the address is automatically kept - * consistent with the real address of the radio) by setting a manual - * address of all ones, e.g. "ifconfig st0 hw strip FFFFFFFFFFFF" - * This 'turns off' manual override mode for the device address. - * - * Note: The IEEE 802 headers reported in tcpdump will show the *real* - * radio addresses the packets were sent and received from, so that you - * can see what is really going on with packets, and which interfaces - * they are really going through. - */ - - -/************************************************************************/ -/* Constants */ - -/* - * CommandString1 works on all radios - * Other CommandStrings are only used with firmware that provides structured responses. - * - * ats319=1 Enables Info message for node additions and deletions - * ats319=2 Enables Info message for a new best node - * ats319=4 Enables checksums - * ats319=8 Enables ACK messages - */ - -static const int MaxCommandStringLength = 32; -static const int CompatibilityCommand = 1; - -static const char CommandString0[] = "*&COMMAND*ATS319=7"; /* Turn on checksums & info messages */ -static const char CommandString1[] = "*&COMMAND*ATS305?"; /* Query radio name */ -static const char CommandString2[] = "*&COMMAND*ATS325?"; /* Query battery voltage */ -static const char CommandString3[] = "*&COMMAND*ATS300?"; /* Query version information */ -static const char CommandString4[] = "*&COMMAND*ATS311?"; /* Query poletop list */ -static const char CommandString5[] = "*&COMMAND*AT~LA"; /* Query portables list */ -typedef struct { - const char *string; - long length; -} StringDescriptor; - -static const StringDescriptor CommandString[] = { - {CommandString0, sizeof(CommandString0) - 1}, - {CommandString1, sizeof(CommandString1) - 1}, - {CommandString2, sizeof(CommandString2) - 1}, - {CommandString3, sizeof(CommandString3) - 1}, - {CommandString4, sizeof(CommandString4) - 1}, - {CommandString5, sizeof(CommandString5) - 1} -}; - -#define GOT_ALL_RADIO_INFO(S) \ - ((S)->firmware_version.c[0] && \ - (S)->battery_voltage.c[0] && \ - memcmp(&(S)->true_dev_addr, zero_address.c, sizeof(zero_address))) - -static const char hextable[16] = "0123456789ABCDEF"; - -static const MetricomAddress zero_address; -static const MetricomAddress broadcast_address = - { {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF} }; - -static const MetricomKey SIP0Key = { "SIP0" }; -static const MetricomKey ARP0Key = { "ARP0" }; -static const MetricomKey ATR_Key = { "ATR " }; -static const MetricomKey ACK_Key = { "ACK_" }; -static const MetricomKey INF_Key = { "INF_" }; -static const MetricomKey ERR_Key = { "ERR_" }; - -static const long MaxARPInterval = 60 * HZ; /* One minute */ - -/* - * Maximum Starmode packet length is 1183 bytes. Allowing 4 bytes for - * protocol key, 4 bytes for checksum, one byte for CR, and 65/64 expansion - * for STRIP encoding, that translates to a maximum payload MTU of 1155. - * Note: A standard NFS 1K data packet is a total of 0x480 (1152) bytes - * long, including IP header, UDP header, and NFS header. Setting the STRIP - * MTU to 1152 allows us to send default sized NFS packets without fragmentation. - */ -static const unsigned short MAX_SEND_MTU = 1152; -static const unsigned short MAX_RECV_MTU = 1500; /* Hoping for Ethernet sized packets in the future! */ -static const unsigned short DEFAULT_STRIP_MTU = 1152; -static const int STRIP_MAGIC = 0x5303; -static const long LongTime = 0x7FFFFFFF; - -/************************************************************************/ -/* Global variables */ - -static LIST_HEAD(strip_list); -static DEFINE_SPINLOCK(strip_lock); - -/************************************************************************/ -/* Macros */ - -/* Returns TRUE if text T begins with prefix P */ -#define has_prefix(T,L,P) (((L) >= sizeof(P)-1) && !strncmp((T), (P), sizeof(P)-1)) - -/* Returns TRUE if text T of length L is equal to string S */ -#define text_equal(T,L,S) (((L) == sizeof(S)-1) && !strncmp((T), (S), sizeof(S)-1)) - -#define READHEX(X) ((X)>='0' && (X)<='9' ? (X)-'0' : \ - (X)>='a' && (X)<='f' ? (X)-'a'+10 : \ - (X)>='A' && (X)<='F' ? (X)-'A'+10 : 0 ) - -#define READHEX16(X) ((__u16)(READHEX(X))) - -#define READDEC(X) ((X)>='0' && (X)<='9' ? (X)-'0' : 0) - -#define ARRAY_END(X) (&((X)[ARRAY_SIZE(X)])) - -#define JIFFIE_TO_SEC(X) ((X) / HZ) - - -/************************************************************************/ -/* Utility routines */ - -static int arp_query(unsigned char *haddr, u32 paddr, - struct net_device *dev) -{ - struct neighbour *neighbor_entry; - int ret = 0; - - neighbor_entry = neigh_lookup(&arp_tbl, &paddr, dev); - - if (neighbor_entry != NULL) { - neighbor_entry->used = jiffies; - if (neighbor_entry->nud_state & NUD_VALID) { - memcpy(haddr, neighbor_entry->ha, dev->addr_len); - ret = 1; - } - neigh_release(neighbor_entry); - } - return ret; -} - -static void DumpData(char *msg, struct strip *strip_info, __u8 * ptr, - __u8 * end) -{ - static const int MAX_DumpData = 80; - __u8 pkt_text[MAX_DumpData], *p = pkt_text; - - *p++ = '\"'; - - while (ptr < end && p < &pkt_text[MAX_DumpData - 4]) { - if (*ptr == '\\') { - *p++ = '\\'; - *p++ = '\\'; - } else { - if (*ptr >= 32 && *ptr <= 126) { - *p++ = *ptr; - } else { - sprintf(p, "\\%02X", *ptr); - p += 3; - } - } - ptr++; - } - - if (ptr == end) - *p++ = '\"'; - *p++ = 0; - - printk(KERN_INFO "%s: %-13s%s\n", strip_info->dev->name, msg, pkt_text); -} - - -/************************************************************************/ -/* Byte stuffing/unstuffing routines */ - -/* Stuffing scheme: - * 00 Unused (reserved character) - * 01-3F Run of 2-64 different characters - * 40-7F Run of 1-64 different characters plus a single zero at the end - * 80-BF Run of 1-64 of the same character - * C0-FF Run of 1-64 zeroes (ASCII 0) - */ - -typedef enum { - Stuff_Diff = 0x00, - Stuff_DiffZero = 0x40, - Stuff_Same = 0x80, - Stuff_Zero = 0xC0, - Stuff_NoCode = 0xFF, /* Special code, meaning no code selected */ - - Stuff_CodeMask = 0xC0, - Stuff_CountMask = 0x3F, - Stuff_MaxCount = 0x3F, - Stuff_Magic = 0x0D /* The value we are eliminating */ -} StuffingCode; - -/* StuffData encodes the data starting at "src" for "length" bytes. - * It writes it to the buffer pointed to by "dst" (which must be at least - * as long as 1 + 65/64 of the input length). The output may be up to 1.6% - * larger than the input for pathological input, but will usually be smaller. - * StuffData returns the new value of the dst pointer as its result. - * "code_ptr_ptr" points to a "__u8 *" which is used to hold encoding state - * between calls, allowing an encoded packet to be incrementally built up - * from small parts. On the first call, the "__u8 *" pointed to should be - * initialized to NULL; between subsequent calls the calling routine should - * leave the value alone and simply pass it back unchanged so that the - * encoder can recover its current state. - */ - -#define StuffData_FinishBlock(X) \ -(*code_ptr = (X) ^ Stuff_Magic, code = Stuff_NoCode) - -static __u8 *StuffData(__u8 * src, __u32 length, __u8 * dst, - __u8 ** code_ptr_ptr) -{ - __u8 *end = src + length; - __u8 *code_ptr = *code_ptr_ptr; - __u8 code = Stuff_NoCode, count = 0; - - if (!length) - return (dst); - - if (code_ptr) { - /* - * Recover state from last call, if applicable - */ - code = (*code_ptr ^ Stuff_Magic) & Stuff_CodeMask; - count = (*code_ptr ^ Stuff_Magic) & Stuff_CountMask; - } - - while (src < end) { - switch (code) { - /* Stuff_NoCode: If no current code, select one */ - case Stuff_NoCode: - /* Record where we're going to put this code */ - code_ptr = dst++; - count = 0; /* Reset the count (zero means one instance) */ - /* Tentatively start a new block */ - if (*src == 0) { - code = Stuff_Zero; - src++; - } else { - code = Stuff_Same; - *dst++ = *src++ ^ Stuff_Magic; - } - /* Note: We optimistically assume run of same -- */ - /* which will be fixed later in Stuff_Same */ - /* if it turns out not to be true. */ - break; - - /* Stuff_Zero: We already have at least one zero encoded */ - case Stuff_Zero: - /* If another zero, count it, else finish this code block */ - if (*src == 0) { - count++; - src++; - } else { - StuffData_FinishBlock(Stuff_Zero + count); - } - break; - - /* Stuff_Same: We already have at least one byte encoded */ - case Stuff_Same: - /* If another one the same, count it */ - if ((*src ^ Stuff_Magic) == code_ptr[1]) { - count++; - src++; - break; - } - /* else, this byte does not match this block. */ - /* If we already have two or more bytes encoded, finish this code block */ - if (count) { - StuffData_FinishBlock(Stuff_Same + count); - break; - } - /* else, we only have one so far, so switch to Stuff_Diff code */ - code = Stuff_Diff; - /* and fall through to Stuff_Diff case below - * Note cunning cleverness here: case Stuff_Diff compares - * the current character with the previous two to see if it - * has a run of three the same. Won't this be an error if - * there aren't two previous characters stored to compare with? - * No. Because we know the current character is *not* the same - * as the previous one, the first test below will necessarily - * fail and the send half of the "if" won't be executed. - */ - - /* Stuff_Diff: We have at least two *different* bytes encoded */ - case Stuff_Diff: - /* If this is a zero, must encode a Stuff_DiffZero, and begin a new block */ - if (*src == 0) { - StuffData_FinishBlock(Stuff_DiffZero + - count); - } - /* else, if we have three in a row, it is worth starting a Stuff_Same block */ - else if ((*src ^ Stuff_Magic) == dst[-1] - && dst[-1] == dst[-2]) { - /* Back off the last two characters we encoded */ - code += count - 2; - /* Note: "Stuff_Diff + 0" is an illegal code */ - if (code == Stuff_Diff + 0) { - code = Stuff_Same + 0; - } - StuffData_FinishBlock(code); - code_ptr = dst - 2; - /* dst[-1] already holds the correct value */ - count = 2; /* 2 means three bytes encoded */ - code = Stuff_Same; - } - /* else, another different byte, so add it to the block */ - else { - *dst++ = *src ^ Stuff_Magic; - count++; - } - src++; /* Consume the byte */ - break; - } - if (count == Stuff_MaxCount) { - StuffData_FinishBlock(code + count); - } - } - if (code == Stuff_NoCode) { - *code_ptr_ptr = NULL; - } else { - *code_ptr_ptr = code_ptr; - StuffData_FinishBlock(code + count); - } - return (dst); -} - -/* - * UnStuffData decodes the data at "src", up to (but not including) "end". - * It writes the decoded data into the buffer pointed to by "dst", up to a - * maximum of "dst_length", and returns the new value of "src" so that a - * follow-on call can read more data, continuing from where the first left off. - * - * There are three types of results: - * 1. The source data runs out before extracting "dst_length" bytes: - * UnStuffData returns NULL to indicate failure. - * 2. The source data produces exactly "dst_length" bytes: - * UnStuffData returns new_src = end to indicate that all bytes were consumed. - * 3. "dst_length" bytes are extracted, with more remaining. - * UnStuffData returns new_src < end to indicate that there are more bytes - * to be read. - * - * Note: The decoding may be destructive, in that it may alter the source - * data in the process of decoding it (this is necessary to allow a follow-on - * call to resume correctly). - */ - -static __u8 *UnStuffData(__u8 * src, __u8 * end, __u8 * dst, - __u32 dst_length) -{ - __u8 *dst_end = dst + dst_length; - /* Sanity check */ - if (!src || !end || !dst || !dst_length) - return (NULL); - while (src < end && dst < dst_end) { - int count = (*src ^ Stuff_Magic) & Stuff_CountMask; - switch ((*src ^ Stuff_Magic) & Stuff_CodeMask) { - case Stuff_Diff: - if (src + 1 + count >= end) - return (NULL); - do { - *dst++ = *++src ^ Stuff_Magic; - } - while (--count >= 0 && dst < dst_end); - if (count < 0) - src += 1; - else { - if (count == 0) - *src = Stuff_Same ^ Stuff_Magic; - else - *src = - (Stuff_Diff + - count) ^ Stuff_Magic; - } - break; - case Stuff_DiffZero: - if (src + 1 + count >= end) - return (NULL); - do { - *dst++ = *++src ^ Stuff_Magic; - } - while (--count >= 0 && dst < dst_end); - if (count < 0) - *src = Stuff_Zero ^ Stuff_Magic; - else - *src = - (Stuff_DiffZero + count) ^ Stuff_Magic; - break; - case Stuff_Same: - if (src + 1 >= end) - return (NULL); - do { - *dst++ = src[1] ^ Stuff_Magic; - } - while (--count >= 0 && dst < dst_end); - if (count < 0) - src += 2; - else - *src = (Stuff_Same + count) ^ Stuff_Magic; - break; - case Stuff_Zero: - do { - *dst++ = 0; - } - while (--count >= 0 && dst < dst_end); - if (count < 0) - src += 1; - else - *src = (Stuff_Zero + count) ^ Stuff_Magic; - break; - } - } - if (dst < dst_end) - return (NULL); - else - return (src); -} - - -/************************************************************************/ -/* General routines for STRIP */ - -/* - * set_baud sets the baud rate to the rate defined by baudcode - */ -static void set_baud(struct tty_struct *tty, speed_t baudrate) -{ - struct ktermios old_termios; - - mutex_lock(&tty->termios_mutex); - old_termios =*(tty->termios); - tty_encode_baud_rate(tty, baudrate, baudrate); - tty->ops->set_termios(tty, &old_termios); - mutex_unlock(&tty->termios_mutex); -} - -/* - * Convert a string to a Metricom Address. - */ - -#define IS_RADIO_ADDRESS(p) ( \ - isdigit((p)[0]) && isdigit((p)[1]) && isdigit((p)[2]) && isdigit((p)[3]) && \ - (p)[4] == '-' && \ - isdigit((p)[5]) && isdigit((p)[6]) && isdigit((p)[7]) && isdigit((p)[8]) ) - -static int string_to_radio_address(MetricomAddress * addr, __u8 * p) -{ - if (!IS_RADIO_ADDRESS(p)) - return (1); - addr->c[0] = 0; - addr->c[1] = 0; - addr->c[2] = READHEX(p[0]) << 4 | READHEX(p[1]); - addr->c[3] = READHEX(p[2]) << 4 | READHEX(p[3]); - addr->c[4] = READHEX(p[5]) << 4 | READHEX(p[6]); - addr->c[5] = READHEX(p[7]) << 4 | READHEX(p[8]); - return (0); -} - -/* - * Convert a Metricom Address to a string. - */ - -static __u8 *radio_address_to_string(const MetricomAddress * addr, - MetricomAddressString * p) -{ - sprintf(p->c, "%02X%02X-%02X%02X", addr->c[2], addr->c[3], - addr->c[4], addr->c[5]); - return (p->c); -} - -/* - * Note: Must make sure sx_size is big enough to receive a stuffed - * MAX_RECV_MTU packet. Additionally, we also want to ensure that it's - * big enough to receive a large radio neighbour list (currently 4K). - */ - -static int allocate_buffers(struct strip *strip_info, int mtu) -{ - struct net_device *dev = strip_info->dev; - int sx_size = max_t(int, STRIP_ENCAP_SIZE(MAX_RECV_MTU), 4096); - int tx_size = STRIP_ENCAP_SIZE(mtu) + MaxCommandStringLength; - __u8 *r = kmalloc(MAX_RECV_MTU, GFP_ATOMIC); - __u8 *s = kmalloc(sx_size, GFP_ATOMIC); - __u8 *t = kmalloc(tx_size, GFP_ATOMIC); - if (r && s && t) { - strip_info->rx_buff = r; - strip_info->sx_buff = s; - strip_info->tx_buff = t; - strip_info->sx_size = sx_size; - strip_info->tx_size = tx_size; - strip_info->mtu = dev->mtu = mtu; - return (1); - } - kfree(r); - kfree(s); - kfree(t); - return (0); -} - -/* - * MTU has been changed by the IP layer. - * We could be in - * an upcall from the tty driver, or in an ip packet queue. - */ -static int strip_change_mtu(struct net_device *dev, int new_mtu) -{ - struct strip *strip_info = netdev_priv(dev); - int old_mtu = strip_info->mtu; - unsigned char *orbuff = strip_info->rx_buff; - unsigned char *osbuff = strip_info->sx_buff; - unsigned char *otbuff = strip_info->tx_buff; - - if (new_mtu > MAX_SEND_MTU) { - printk(KERN_ERR - "%s: MTU exceeds maximum allowable (%d), MTU change cancelled.\n", - strip_info->dev->name, MAX_SEND_MTU); - return -EINVAL; - } - - spin_lock_bh(&strip_lock); - if (!allocate_buffers(strip_info, new_mtu)) { - printk(KERN_ERR "%s: unable to grow strip buffers, MTU change cancelled.\n", - strip_info->dev->name); - spin_unlock_bh(&strip_lock); - return -ENOMEM; - } - - if (strip_info->sx_count) { - if (strip_info->sx_count <= strip_info->sx_size) - memcpy(strip_info->sx_buff, osbuff, - strip_info->sx_count); - else { - strip_info->discard = strip_info->sx_count; - strip_info->rx_over_errors++; - } - } - - if (strip_info->tx_left) { - if (strip_info->tx_left <= strip_info->tx_size) - memcpy(strip_info->tx_buff, strip_info->tx_head, - strip_info->tx_left); - else { - strip_info->tx_left = 0; - strip_info->tx_dropped++; - } - } - strip_info->tx_head = strip_info->tx_buff; - spin_unlock_bh(&strip_lock); - - printk(KERN_NOTICE "%s: strip MTU changed fom %d to %d.\n", - strip_info->dev->name, old_mtu, strip_info->mtu); - - kfree(orbuff); - kfree(osbuff); - kfree(otbuff); - return 0; -} - -static void strip_unlock(struct strip *strip_info) -{ - /* - * Set the timer to go off in one second. - */ - strip_info->idle_timer.expires = jiffies + 1 * HZ; - add_timer(&strip_info->idle_timer); - netif_wake_queue(strip_info->dev); -} - - - -/* - * If the time is in the near future, time_delta prints the number of - * seconds to go into the buffer and returns the address of the buffer. - * If the time is not in the near future, it returns the address of the - * string "Not scheduled" The buffer must be long enough to contain the - * ascii representation of the number plus 9 charactes for the " seconds" - * and the null character. - */ -#ifdef CONFIG_PROC_FS -static char *time_delta(char buffer[], long time) -{ - time -= jiffies; - if (time > LongTime / 2) - return ("Not scheduled"); - if (time < 0) - time = 0; /* Don't print negative times */ - sprintf(buffer, "%ld seconds", time / HZ); - return (buffer); -} - -/* get Nth element of the linked list */ -static struct strip *strip_get_idx(loff_t pos) -{ - struct strip *str; - int i = 0; - - list_for_each_entry_rcu(str, &strip_list, list) { - if (pos == i) - return str; - ++i; - } - return NULL; -} - -static void *strip_seq_start(struct seq_file *seq, loff_t *pos) - __acquires(RCU) -{ - rcu_read_lock(); - return *pos ? strip_get_idx(*pos - 1) : SEQ_START_TOKEN; -} - -static void *strip_seq_next(struct seq_file *seq, void *v, loff_t *pos) -{ - struct list_head *l; - struct strip *s; - - ++*pos; - if (v == SEQ_START_TOKEN) - return strip_get_idx(1); - - s = v; - l = &s->list; - list_for_each_continue_rcu(l, &strip_list) { - return list_entry(l, struct strip, list); - } - return NULL; -} - -static void strip_seq_stop(struct seq_file *seq, void *v) - __releases(RCU) -{ - rcu_read_unlock(); -} - -static void strip_seq_neighbours(struct seq_file *seq, - const MetricomNodeTable * table, - const char *title) -{ - /* We wrap this in a do/while loop, so if the table changes */ - /* while we're reading it, we just go around and try again. */ - struct timeval t; - - do { - int i; - t = table->timestamp; - if (table->num_nodes) - seq_printf(seq, "\n %s\n", title); - for (i = 0; i < table->num_nodes; i++) { - MetricomNode node; - - spin_lock_bh(&strip_lock); - node = table->node[i]; - spin_unlock_bh(&strip_lock); - seq_printf(seq, " %s\n", node.c); - } - } while (table->timestamp.tv_sec != t.tv_sec - || table->timestamp.tv_usec != t.tv_usec); -} - -/* - * This function prints radio status information via the seq_file - * interface. The interface takes care of buffer size and over - * run issues. - * - * The buffer in seq_file is PAGESIZE (4K) - * so this routine should never print more or it will get truncated. - * With the maximum of 32 portables and 32 poletops - * reported, the routine outputs 3107 bytes into the buffer. - */ -static void strip_seq_status_info(struct seq_file *seq, - const struct strip *strip_info) -{ - char temp[32]; - MetricomAddressString addr_string; - - /* First, we must copy all of our data to a safe place, */ - /* in case a serial interrupt comes in and changes it. */ - int tx_left = strip_info->tx_left; - unsigned long rx_average_pps = strip_info->rx_average_pps; - unsigned long tx_average_pps = strip_info->tx_average_pps; - unsigned long sx_average_pps = strip_info->sx_average_pps; - int working = strip_info->working; - int firmware_level = strip_info->firmware_level; - long watchdog_doprobe = strip_info->watchdog_doprobe; - long watchdog_doreset = strip_info->watchdog_doreset; - long gratuitous_arp = strip_info->gratuitous_arp; - long arp_interval = strip_info->arp_interval; - FirmwareVersion firmware_version = strip_info->firmware_version; - SerialNumber serial_number = strip_info->serial_number; - BatteryVoltage battery_voltage = strip_info->battery_voltage; - char *if_name = strip_info->dev->name; - MetricomAddress true_dev_addr = strip_info->true_dev_addr; - MetricomAddress dev_dev_addr = - *(MetricomAddress *) strip_info->dev->dev_addr; - int manual_dev_addr = strip_info->manual_dev_addr; -#ifdef EXT_COUNTERS - unsigned long rx_bytes = strip_info->rx_bytes; - unsigned long tx_bytes = strip_info->tx_bytes; - unsigned long rx_rbytes = strip_info->rx_rbytes; - unsigned long tx_rbytes = strip_info->tx_rbytes; - unsigned long rx_sbytes = strip_info->rx_sbytes; - unsigned long tx_sbytes = strip_info->tx_sbytes; - unsigned long rx_ebytes = strip_info->rx_ebytes; - unsigned long tx_ebytes = strip_info->tx_ebytes; -#endif - - seq_printf(seq, "\nInterface name\t\t%s\n", if_name); - seq_printf(seq, " Radio working:\t\t%s\n", working ? "Yes" : "No"); - radio_address_to_string(&true_dev_addr, &addr_string); - seq_printf(seq, " Radio address:\t\t%s\n", addr_string.c); - if (manual_dev_addr) { - radio_address_to_string(&dev_dev_addr, &addr_string); - seq_printf(seq, " Device address:\t%s\n", addr_string.c); - } - seq_printf(seq, " Firmware version:\t%s", !working ? "Unknown" : - !firmware_level ? "Should be upgraded" : - firmware_version.c); - if (firmware_level >= ChecksummedMessages) - seq_printf(seq, " (Checksums Enabled)"); - seq_printf(seq, "\n"); - seq_printf(seq, " Serial number:\t\t%s\n", serial_number.c); - seq_printf(seq, " Battery voltage:\t%s\n", battery_voltage.c); - seq_printf(seq, " Transmit queue (bytes):%d\n", tx_left); - seq_printf(seq, " Receive packet rate: %ld packets per second\n", - rx_average_pps / 8); - seq_printf(seq, " Transmit packet rate: %ld packets per second\n", - tx_average_pps / 8); - seq_printf(seq, " Sent packet rate: %ld packets per second\n", - sx_average_pps / 8); - seq_printf(seq, " Next watchdog probe:\t%s\n", - time_delta(temp, watchdog_doprobe)); - seq_printf(seq, " Next watchdog reset:\t%s\n", - time_delta(temp, watchdog_doreset)); - seq_printf(seq, " Next gratuitous ARP:\t"); - - if (!memcmp - (strip_info->dev->dev_addr, zero_address.c, - sizeof(zero_address))) - seq_printf(seq, "Disabled\n"); - else { - seq_printf(seq, "%s\n", time_delta(temp, gratuitous_arp)); - seq_printf(seq, " Next ARP interval:\t%ld seconds\n", - JIFFIE_TO_SEC(arp_interval)); - } - - if (working) { -#ifdef EXT_COUNTERS - seq_printf(seq, "\n"); - seq_printf(seq, - " Total bytes: \trx:\t%lu\ttx:\t%lu\n", - rx_bytes, tx_bytes); - seq_printf(seq, - " thru radio: \trx:\t%lu\ttx:\t%lu\n", - rx_rbytes, tx_rbytes); - seq_printf(seq, - " thru serial port: \trx:\t%lu\ttx:\t%lu\n", - rx_sbytes, tx_sbytes); - seq_printf(seq, - " Total stat/err bytes:\trx:\t%lu\ttx:\t%lu\n", - rx_ebytes, tx_ebytes); -#endif - strip_seq_neighbours(seq, &strip_info->poletops, - "Poletops:"); - strip_seq_neighbours(seq, &strip_info->portables, - "Portables:"); - } -} - -/* - * This function is exports status information from the STRIP driver through - * the /proc file system. - */ -static int strip_seq_show(struct seq_file *seq, void *v) -{ - if (v == SEQ_START_TOKEN) - seq_printf(seq, "strip_version: %s\n", StripVersion); - else - strip_seq_status_info(seq, (const struct strip *)v); - return 0; -} - - -static const struct seq_operations strip_seq_ops = { - .start = strip_seq_start, - .next = strip_seq_next, - .stop = strip_seq_stop, - .show = strip_seq_show, -}; - -static int strip_seq_open(struct inode *inode, struct file *file) -{ - return seq_open(file, &strip_seq_ops); -} - -static const struct file_operations strip_seq_fops = { - .owner = THIS_MODULE, - .open = strip_seq_open, - .read = seq_read, - .llseek = seq_lseek, - .release = seq_release, -}; -#endif - - - -/************************************************************************/ -/* Sending routines */ - -static void ResetRadio(struct strip *strip_info) -{ - struct tty_struct *tty = strip_info->tty; - static const char init[] = "ate0q1dt**starmode\r**"; - StringDescriptor s = { init, sizeof(init) - 1 }; - - /* - * If the radio isn't working anymore, - * we should clear the old status information. - */ - if (strip_info->working) { - printk(KERN_INFO "%s: No response: Resetting radio.\n", - strip_info->dev->name); - strip_info->firmware_version.c[0] = '\0'; - strip_info->serial_number.c[0] = '\0'; - strip_info->battery_voltage.c[0] = '\0'; - strip_info->portables.num_nodes = 0; - do_gettimeofday(&strip_info->portables.timestamp); - strip_info->poletops.num_nodes = 0; - do_gettimeofday(&strip_info->poletops.timestamp); - } - - strip_info->pps_timer = jiffies; - strip_info->rx_pps_count = 0; - strip_info->tx_pps_count = 0; - strip_info->sx_pps_count = 0; - strip_info->rx_average_pps = 0; - strip_info->tx_average_pps = 0; - strip_info->sx_average_pps = 0; - - /* Mark radio address as unknown */ - *(MetricomAddress *) & strip_info->true_dev_addr = zero_address; - if (!strip_info->manual_dev_addr) - *(MetricomAddress *) strip_info->dev->dev_addr = - zero_address; - strip_info->working = FALSE; - strip_info->firmware_level = NoStructure; - strip_info->next_command = CompatibilityCommand; - strip_info->watchdog_doprobe = jiffies + 10 * HZ; - strip_info->watchdog_doreset = jiffies + 1 * HZ; - - /* If the user has selected a baud rate above 38.4 see what magic we have to do */ - if (strip_info->user_baud > 38400) { - /* - * Subtle stuff: Pay attention :-) - * If the serial port is currently at the user's selected (>38.4) rate, - * then we temporarily switch to 19.2 and issue the ATS304 command - * to tell the radio to switch to the user's selected rate. - * If the serial port is not currently at that rate, that means we just - * issued the ATS304 command last time through, so this time we restore - * the user's selected rate and issue the normal starmode reset string. - */ - if (strip_info->user_baud == tty_get_baud_rate(tty)) { - static const char b0[] = "ate0q1s304=57600\r"; - static const char b1[] = "ate0q1s304=115200\r"; - static const StringDescriptor baudstring[2] = - { {b0, sizeof(b0) - 1} - , {b1, sizeof(b1) - 1} - }; - set_baud(tty, 19200); - if (strip_info->user_baud == 57600) - s = baudstring[0]; - else if (strip_info->user_baud == 115200) - s = baudstring[1]; - else - s = baudstring[1]; /* For now */ - } else - set_baud(tty, strip_info->user_baud); - } - - tty->ops->write(tty, s.string, s.length); -#ifdef EXT_COUNTERS - strip_info->tx_ebytes += s.length; -#endif -} - -/* - * Called by the driver when there's room for more data. If we have - * more packets to send, we send them here. - */ - -static void strip_write_some_more(struct tty_struct *tty) -{ - struct strip *strip_info = tty->disc_data; - - /* First make sure we're connected. */ - if (!strip_info || strip_info->magic != STRIP_MAGIC || - !netif_running(strip_info->dev)) - return; - - if (strip_info->tx_left > 0) { - int num_written = - tty->ops->write(tty, strip_info->tx_head, - strip_info->tx_left); - strip_info->tx_left -= num_written; - strip_info->tx_head += num_written; -#ifdef EXT_COUNTERS - strip_info->tx_sbytes += num_written; -#endif - } else { /* Else start transmission of another packet */ - - clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); - strip_unlock(strip_info); - } -} - -static __u8 *add_checksum(__u8 * buffer, __u8 * end) -{ - __u16 sum = 0; - __u8 *p = buffer; - while (p < end) - sum += *p++; - end[3] = hextable[sum & 0xF]; - sum >>= 4; - end[2] = hextable[sum & 0xF]; - sum >>= 4; - end[1] = hextable[sum & 0xF]; - sum >>= 4; - end[0] = hextable[sum & 0xF]; - return (end + 4); -} - -static unsigned char *strip_make_packet(unsigned char *buffer, - struct strip *strip_info, - struct sk_buff *skb) -{ - __u8 *ptr = buffer; - __u8 *stuffstate = NULL; - STRIP_Header *header = (STRIP_Header *) skb->data; - MetricomAddress haddr = header->dst_addr; - int len = skb->len - sizeof(STRIP_Header); - MetricomKey key; - - /*HexDump("strip_make_packet", strip_info, skb->data, skb->data + skb->len); */ - - if (header->protocol == htons(ETH_P_IP)) - key = SIP0Key; - else if (header->protocol == htons(ETH_P_ARP)) - key = ARP0Key; - else { - printk(KERN_ERR - "%s: strip_make_packet: Unknown packet type 0x%04X\n", - strip_info->dev->name, ntohs(header->protocol)); - return (NULL); - } - - if (len > strip_info->mtu) { - printk(KERN_ERR - "%s: Dropping oversized transmit packet: %d bytes\n", - strip_info->dev->name, len); - return (NULL); - } - - /* - * If we're sending to ourselves, discard the packet. - * (Metricom radios choke if they try to send a packet to their own address.) - */ - if (!memcmp(haddr.c, strip_info->true_dev_addr.c, sizeof(haddr))) { - printk(KERN_ERR "%s: Dropping packet addressed to self\n", - strip_info->dev->name); - return (NULL); - } - - /* - * If this is a broadcast packet, send it to our designated Metricom - * 'broadcast hub' radio (First byte of address being 0xFF means broadcast) - */ - if (haddr.c[0] == 0xFF) { - __be32 brd = 0; - struct in_device *in_dev; - - rcu_read_lock(); - in_dev = __in_dev_get_rcu(strip_info->dev); - if (in_dev == NULL) { - rcu_read_unlock(); - return NULL; - } - if (in_dev->ifa_list) - brd = in_dev->ifa_list->ifa_broadcast; - rcu_read_unlock(); - - /* arp_query returns 1 if it succeeds in looking up the address, 0 if it fails */ - if (!arp_query(haddr.c, brd, strip_info->dev)) { - printk(KERN_ERR - "%s: Unable to send packet (no broadcast hub configured)\n", - strip_info->dev->name); - return (NULL); - } - /* - * If we are the broadcast hub, don't bother sending to ourselves. - * (Metricom radios choke if they try to send a packet to their own address.) - */ - if (!memcmp - (haddr.c, strip_info->true_dev_addr.c, sizeof(haddr))) - return (NULL); - } - - *ptr++ = 0x0D; - *ptr++ = '*'; - *ptr++ = hextable[haddr.c[2] >> 4]; - *ptr++ = hextable[haddr.c[2] & 0xF]; - *ptr++ = hextable[haddr.c[3] >> 4]; - *ptr++ = hextable[haddr.c[3] & 0xF]; - *ptr++ = '-'; - *ptr++ = hextable[haddr.c[4] >> 4]; - *ptr++ = hextable[haddr.c[4] & 0xF]; - *ptr++ = hextable[haddr.c[5] >> 4]; - *ptr++ = hextable[haddr.c[5] & 0xF]; - *ptr++ = '*'; - *ptr++ = key.c[0]; - *ptr++ = key.c[1]; - *ptr++ = key.c[2]; - *ptr++ = key.c[3]; - - ptr = - StuffData(skb->data + sizeof(STRIP_Header), len, ptr, - &stuffstate); - - if (strip_info->firmware_level >= ChecksummedMessages) - ptr = add_checksum(buffer + 1, ptr); - - *ptr++ = 0x0D; - return (ptr); -} - -static void strip_send(struct strip *strip_info, struct sk_buff *skb) -{ - MetricomAddress haddr; - unsigned char *ptr = strip_info->tx_buff; - int doreset = (long) jiffies - strip_info->watchdog_doreset >= 0; - int doprobe = (long) jiffies - strip_info->watchdog_doprobe >= 0 - && !doreset; - __be32 addr, brd; - - /* - * 1. If we have a packet, encapsulate it and put it in the buffer - */ - if (skb) { - char *newptr = strip_make_packet(ptr, strip_info, skb); - strip_info->tx_pps_count++; - if (!newptr) - strip_info->tx_dropped++; - else { - ptr = newptr; - strip_info->sx_pps_count++; - strip_info->tx_packets++; /* Count another successful packet */ -#ifdef EXT_COUNTERS - strip_info->tx_bytes += skb->len; - strip_info->tx_rbytes += ptr - strip_info->tx_buff; -#endif - /*DumpData("Sending:", strip_info, strip_info->tx_buff, ptr); */ - /*HexDump("Sending", strip_info, strip_info->tx_buff, ptr); */ - } - } - - /* - * 2. If it is time for another tickle, tack it on, after the packet - */ - if (doprobe) { - StringDescriptor ts = CommandString[strip_info->next_command]; -#if TICKLE_TIMERS - { - struct timeval tv; - do_gettimeofday(&tv); - printk(KERN_INFO "**** Sending tickle string %d at %02d.%06d\n", - strip_info->next_command, tv.tv_sec % 100, - tv.tv_usec); - } -#endif - if (ptr == strip_info->tx_buff) - *ptr++ = 0x0D; - - *ptr++ = '*'; /* First send "**" to provoke an error message */ - *ptr++ = '*'; - - /* Then add the command */ - memcpy(ptr, ts.string, ts.length); - - /* Add a checksum ? */ - if (strip_info->firmware_level < ChecksummedMessages) - ptr += ts.length; - else - ptr = add_checksum(ptr, ptr + ts.length); - - *ptr++ = 0x0D; /* Terminate the command with a */ - - /* Cycle to next periodic command? */ - if (strip_info->firmware_level >= StructuredMessages) - if (++strip_info->next_command >= - ARRAY_SIZE(CommandString)) - strip_info->next_command = 0; -#ifdef EXT_COUNTERS - strip_info->tx_ebytes += ts.length; -#endif - strip_info->watchdog_doprobe = jiffies + 10 * HZ; - strip_info->watchdog_doreset = jiffies + 1 * HZ; - /*printk(KERN_INFO "%s: Routine radio test.\n", strip_info->dev->name); */ - } - - /* - * 3. Set up the strip_info ready to send the data (if any). - */ - strip_info->tx_head = strip_info->tx_buff; - strip_info->tx_left = ptr - strip_info->tx_buff; - set_bit(TTY_DO_WRITE_WAKEUP, &strip_info->tty->flags); - /* - * 4. Debugging check to make sure we're not overflowing the buffer. - */ - if (strip_info->tx_size - strip_info->tx_left < 20) - printk(KERN_ERR "%s: Sending%5d bytes;%5d bytes free.\n", - strip_info->dev->name, strip_info->tx_left, - strip_info->tx_size - strip_info->tx_left); - - /* - * 5. If watchdog has expired, reset the radio. Note: if there's data waiting in - * the buffer, strip_write_some_more will send it after the reset has finished - */ - if (doreset) { - ResetRadio(strip_info); - return; - } - - if (1) { - struct in_device *in_dev; - - brd = addr = 0; - rcu_read_lock(); - in_dev = __in_dev_get_rcu(strip_info->dev); - if (in_dev) { - if (in_dev->ifa_list) { - brd = in_dev->ifa_list->ifa_broadcast; - addr = in_dev->ifa_list->ifa_local; - } - } - rcu_read_unlock(); - } - - - /* - * 6. If it is time for a periodic ARP, queue one up to be sent. - * We only do this if: - * 1. The radio is working - * 2. It's time to send another periodic ARP - * 3. We really know what our address is (and it is not manually set to zero) - * 4. We have a designated broadcast address configured - * If we queue up an ARP packet when we don't have a designated broadcast - * address configured, then the packet will just have to be discarded in - * strip_make_packet. This is not fatal, but it causes misleading information - * to be displayed in tcpdump. tcpdump will report that periodic APRs are - * being sent, when in fact they are not, because they are all being dropped - * in the strip_make_packet routine. - */ - if (strip_info->working - && (long) jiffies - strip_info->gratuitous_arp >= 0 - && memcmp(strip_info->dev->dev_addr, zero_address.c, - sizeof(zero_address)) - && arp_query(haddr.c, brd, strip_info->dev)) { - /*printk(KERN_INFO "%s: Sending gratuitous ARP with interval %ld\n", - strip_info->dev->name, strip_info->arp_interval / HZ); */ - strip_info->gratuitous_arp = - jiffies + strip_info->arp_interval; - strip_info->arp_interval *= 2; - if (strip_info->arp_interval > MaxARPInterval) - strip_info->arp_interval = MaxARPInterval; - if (addr) - arp_send(ARPOP_REPLY, ETH_P_ARP, addr, /* Target address of ARP packet is our address */ - strip_info->dev, /* Device to send packet on */ - addr, /* Source IP address this ARP packet comes from */ - NULL, /* Destination HW address is NULL (broadcast it) */ - strip_info->dev->dev_addr, /* Source HW address is our HW address */ - strip_info->dev->dev_addr); /* Target HW address is our HW address (redundant) */ - } - - /* - * 7. All ready. Start the transmission - */ - strip_write_some_more(strip_info->tty); -} - -/* Encapsulate a datagram and kick it into a TTY queue. */ -static netdev_tx_t strip_xmit(struct sk_buff *skb, struct net_device *dev) -{ - struct strip *strip_info = netdev_priv(dev); - - if (!netif_running(dev)) { - printk(KERN_ERR "%s: xmit call when iface is down\n", - dev->name); - return NETDEV_TX_BUSY; - } - - netif_stop_queue(dev); - - del_timer(&strip_info->idle_timer); - - - if (time_after(jiffies, strip_info->pps_timer + HZ)) { - unsigned long t = jiffies - strip_info->pps_timer; - unsigned long rx_pps_count = - DIV_ROUND_CLOSEST(strip_info->rx_pps_count*HZ*8, t); - unsigned long tx_pps_count = - DIV_ROUND_CLOSEST(strip_info->tx_pps_count*HZ*8, t); - unsigned long sx_pps_count = - DIV_ROUND_CLOSEST(strip_info->sx_pps_count*HZ*8, t); - - strip_info->pps_timer = jiffies; - strip_info->rx_pps_count = 0; - strip_info->tx_pps_count = 0; - strip_info->sx_pps_count = 0; - - strip_info->rx_average_pps = (strip_info->rx_average_pps + rx_pps_count + 1) / 2; - strip_info->tx_average_pps = (strip_info->tx_average_pps + tx_pps_count + 1) / 2; - strip_info->sx_average_pps = (strip_info->sx_average_pps + sx_pps_count + 1) / 2; - - if (rx_pps_count / 8 >= 10) - printk(KERN_INFO "%s: WARNING: Receiving %ld packets per second.\n", - strip_info->dev->name, rx_pps_count / 8); - if (tx_pps_count / 8 >= 10) - printk(KERN_INFO "%s: WARNING: Tx %ld packets per second.\n", - strip_info->dev->name, tx_pps_count / 8); - if (sx_pps_count / 8 >= 10) - printk(KERN_INFO "%s: WARNING: Sending %ld packets per second.\n", - strip_info->dev->name, sx_pps_count / 8); - } - - spin_lock_bh(&strip_lock); - - strip_send(strip_info, skb); - - spin_unlock_bh(&strip_lock); - - if (skb) - dev_kfree_skb(skb); - return NETDEV_TX_OK; -} - -/* - * IdleTask periodically calls strip_xmit, so even when we have no IP packets - * to send for an extended period of time, the watchdog processing still gets - * done to ensure that the radio stays in Starmode - */ - -static void strip_IdleTask(unsigned long parameter) -{ - strip_xmit(NULL, (struct net_device *) parameter); -} - -/* - * Create the MAC header for an arbitrary protocol layer - * - * saddr!=NULL means use this specific address (n/a for Metricom) - * saddr==NULL means use default device source address - * daddr!=NULL means use this destination address - * daddr==NULL means leave destination address alone - * (e.g. unresolved arp -- kernel will call - * rebuild_header later to fill in the address) - */ - -static int strip_header(struct sk_buff *skb, struct net_device *dev, - unsigned short type, const void *daddr, - const void *saddr, unsigned len) -{ - struct strip *strip_info = netdev_priv(dev); - STRIP_Header *header = (STRIP_Header *) skb_push(skb, sizeof(STRIP_Header)); - - /*printk(KERN_INFO "%s: strip_header 0x%04X %s\n", dev->name, type, - type == ETH_P_IP ? "IP" : type == ETH_P_ARP ? "ARP" : ""); */ - - header->src_addr = strip_info->true_dev_addr; - header->protocol = htons(type); - - /*HexDump("strip_header", netdev_priv(dev), skb->data, skb->data + skb->len); */ - - if (!daddr) - return (-dev->hard_header_len); - - header->dst_addr = *(MetricomAddress *) daddr; - return (dev->hard_header_len); -} - -/* - * Rebuild the MAC header. This is called after an ARP - * (or in future other address resolution) has completed on this - * sk_buff. We now let ARP fill in the other fields. - * I think this should return zero if packet is ready to send, - * or non-zero if it needs more time to do an address lookup - */ - -static int strip_rebuild_header(struct sk_buff *skb) -{ -#ifdef CONFIG_INET - STRIP_Header *header = (STRIP_Header *) skb->data; - - /* Arp find returns zero if if knows the address, */ - /* or if it doesn't know the address it sends an ARP packet and returns non-zero */ - return arp_find(header->dst_addr.c, skb) ? 1 : 0; -#else - return 0; -#endif -} - - -/************************************************************************/ -/* Receiving routines */ - -/* - * This function parses the response to the ATS300? command, - * extracting the radio version and serial number. - */ -static void get_radio_version(struct strip *strip_info, __u8 * ptr, __u8 * end) -{ - __u8 *p, *value_begin, *value_end; - int len; - - /* Determine the beginning of the second line of the payload */ - p = ptr; - while (p < end && *p != 10) - p++; - if (p >= end) - return; - p++; - value_begin = p; - - /* Determine the end of line */ - while (p < end && *p != 10) - p++; - if (p >= end) - return; - value_end = p; - p++; - - len = value_end - value_begin; - len = min_t(int, len, sizeof(FirmwareVersion) - 1); - if (strip_info->firmware_version.c[0] == 0) - printk(KERN_INFO "%s: Radio Firmware: %.*s\n", - strip_info->dev->name, len, value_begin); - sprintf(strip_info->firmware_version.c, "%.*s", len, value_begin); - - /* Look for the first colon */ - while (p < end && *p != ':') - p++; - if (p >= end) - return; - /* Skip over the space */ - p += 2; - len = sizeof(SerialNumber) - 1; - if (p + len <= end) { - sprintf(strip_info->serial_number.c, "%.*s", len, p); - } else { - printk(KERN_DEBUG - "STRIP: radio serial number shorter (%zd) than expected (%d)\n", - end - p, len); - } -} - -/* - * This function parses the response to the ATS325? command, - * extracting the radio battery voltage. - */ -static void get_radio_voltage(struct strip *strip_info, __u8 * ptr, __u8 * end) -{ - int len; - - len = sizeof(BatteryVoltage) - 1; - if (ptr + len <= end) { - sprintf(strip_info->battery_voltage.c, "%.*s", len, ptr); - } else { - printk(KERN_DEBUG - "STRIP: radio voltage string shorter (%zd) than expected (%d)\n", - end - ptr, len); - } -} - -/* - * This function parses the responses to the AT~LA and ATS311 commands, - * which list the radio's neighbours. - */ -static void get_radio_neighbours(MetricomNodeTable * table, __u8 * ptr, __u8 * end) -{ - table->num_nodes = 0; - while (ptr < end && table->num_nodes < NODE_TABLE_SIZE) { - MetricomNode *node = &table->node[table->num_nodes++]; - char *dst = node->c, *limit = dst + sizeof(*node) - 1; - while (ptr < end && *ptr <= 32) - ptr++; - while (ptr < end && dst < limit && *ptr != 10) - *dst++ = *ptr++; - *dst++ = 0; - while (ptr < end && ptr[-1] != 10) - ptr++; - } - do_gettimeofday(&table->timestamp); -} - -static int get_radio_address(struct strip *strip_info, __u8 * p) -{ - MetricomAddress addr; - - if (string_to_radio_address(&addr, p)) - return (1); - - /* See if our radio address has changed */ - if (memcmp(strip_info->true_dev_addr.c, addr.c, sizeof(addr))) { - MetricomAddressString addr_string; - radio_address_to_string(&addr, &addr_string); - printk(KERN_INFO "%s: Radio address = %s\n", - strip_info->dev->name, addr_string.c); - strip_info->true_dev_addr = addr; - if (!strip_info->manual_dev_addr) - *(MetricomAddress *) strip_info->dev->dev_addr = - addr; - /* Give the radio a few seconds to get its head straight, then send an arp */ - strip_info->gratuitous_arp = jiffies + 15 * HZ; - strip_info->arp_interval = 1 * HZ; - } - return (0); -} - -static int verify_checksum(struct strip *strip_info) -{ - __u8 *p = strip_info->sx_buff; - __u8 *end = strip_info->sx_buff + strip_info->sx_count - 4; - u_short sum = - (READHEX16(end[0]) << 12) | (READHEX16(end[1]) << 8) | - (READHEX16(end[2]) << 4) | (READHEX16(end[3])); - while (p < end) - sum -= *p++; - if (sum == 0 && strip_info->firmware_level == StructuredMessages) { - strip_info->firmware_level = ChecksummedMessages; - printk(KERN_INFO "%s: Radio provides message checksums\n", - strip_info->dev->name); - } - return (sum == 0); -} - -static void RecvErr(char *msg, struct strip *strip_info) -{ - __u8 *ptr = strip_info->sx_buff; - __u8 *end = strip_info->sx_buff + strip_info->sx_count; - DumpData(msg, strip_info, ptr, end); - strip_info->rx_errors++; -} - -static void RecvErr_Message(struct strip *strip_info, __u8 * sendername, - const __u8 * msg, u_long len) -{ - if (has_prefix(msg, len, "001")) { /* Not in StarMode! */ - RecvErr("Error Msg:", strip_info); - printk(KERN_INFO "%s: Radio %s is not in StarMode\n", - strip_info->dev->name, sendername); - } - - else if (has_prefix(msg, len, "002")) { /* Remap handle */ - /* We ignore "Remap handle" messages for now */ - } - - else if (has_prefix(msg, len, "003")) { /* Can't resolve name */ - RecvErr("Error Msg:", strip_info); - printk(KERN_INFO "%s: Destination radio name is unknown\n", - strip_info->dev->name); - } - - else if (has_prefix(msg, len, "004")) { /* Name too small or missing */ - strip_info->watchdog_doreset = jiffies + LongTime; -#if TICKLE_TIMERS - { - struct timeval tv; - do_gettimeofday(&tv); - printk(KERN_INFO - "**** Got ERR_004 response at %02d.%06d\n", - tv.tv_sec % 100, tv.tv_usec); - } -#endif - if (!strip_info->working) { - strip_info->working = TRUE; - printk(KERN_INFO "%s: Radio now in starmode\n", - strip_info->dev->name); - /* - * If the radio has just entered a working state, we should do our first - * probe ASAP, so that we find out our radio address etc. without delay. - */ - strip_info->watchdog_doprobe = jiffies; - } - if (strip_info->firmware_level == NoStructure && sendername) { - strip_info->firmware_level = StructuredMessages; - strip_info->next_command = 0; /* Try to enable checksums ASAP */ - printk(KERN_INFO - "%s: Radio provides structured messages\n", - strip_info->dev->name); - } - if (strip_info->firmware_level >= StructuredMessages) { - /* - * If this message has a valid checksum on the end, then the call to verify_checksum - * will elevate the firmware_level to ChecksummedMessages for us. (The actual return - * code from verify_checksum is ignored here.) - */ - verify_checksum(strip_info); - /* - * If the radio has structured messages but we don't yet have all our information about it, - * we should do probes without delay, until we have gathered all the information - */ - if (!GOT_ALL_RADIO_INFO(strip_info)) - strip_info->watchdog_doprobe = jiffies; - } - } - - else if (has_prefix(msg, len, "005")) /* Bad count specification */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "006")) /* Header too big */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "007")) { /* Body too big */ - RecvErr("Error Msg:", strip_info); - printk(KERN_ERR - "%s: Error! Packet size too big for radio.\n", - strip_info->dev->name); - } - - else if (has_prefix(msg, len, "008")) { /* Bad character in name */ - RecvErr("Error Msg:", strip_info); - printk(KERN_ERR - "%s: Radio name contains illegal character\n", - strip_info->dev->name); - } - - else if (has_prefix(msg, len, "009")) /* No count or line terminator */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "010")) /* Invalid checksum */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "011")) /* Checksum didn't match */ - RecvErr("Error Msg:", strip_info); - - else if (has_prefix(msg, len, "012")) /* Failed to transmit packet */ - RecvErr("Error Msg:", strip_info); - - else - RecvErr("Error Msg:", strip_info); -} - -static void process_AT_response(struct strip *strip_info, __u8 * ptr, - __u8 * end) -{ - u_long len; - __u8 *p = ptr; - while (p < end && p[-1] != 10) - p++; /* Skip past first newline character */ - /* Now ptr points to the AT command, and p points to the text of the response. */ - len = p - ptr; - -#if TICKLE_TIMERS - { - struct timeval tv; - do_gettimeofday(&tv); - printk(KERN_INFO "**** Got AT response %.7s at %02d.%06d\n", - ptr, tv.tv_sec % 100, tv.tv_usec); - } -#endif - - if (has_prefix(ptr, len, "ATS300?")) - get_radio_version(strip_info, p, end); - else if (has_prefix(ptr, len, "ATS305?")) - get_radio_address(strip_info, p); - else if (has_prefix(ptr, len, "ATS311?")) - get_radio_neighbours(&strip_info->poletops, p, end); - else if (has_prefix(ptr, len, "ATS319=7")) - verify_checksum(strip_info); - else if (has_prefix(ptr, len, "ATS325?")) - get_radio_voltage(strip_info, p, end); - else if (has_prefix(ptr, len, "AT~LA")) - get_radio_neighbours(&strip_info->portables, p, end); - else - RecvErr("Unknown AT Response:", strip_info); -} - -static void process_ACK(struct strip *strip_info, __u8 * ptr, __u8 * end) -{ - /* Currently we don't do anything with ACKs from the radio */ -} - -static void process_Info(struct strip *strip_info, __u8 * ptr, __u8 * end) -{ - if (ptr + 16 > end) - RecvErr("Bad Info Msg:", strip_info); -} - -static struct net_device *get_strip_dev(struct strip *strip_info) -{ - /* If our hardware address is *manually set* to zero, and we know our */ - /* real radio hardware address, try to find another strip device that has been */ - /* manually set to that address that we can 'transfer ownership' of this packet to */ - if (strip_info->manual_dev_addr && - !memcmp(strip_info->dev->dev_addr, zero_address.c, - sizeof(zero_address)) - && memcmp(&strip_info->true_dev_addr, zero_address.c, - sizeof(zero_address))) { - struct net_device *dev; - read_lock_bh(&dev_base_lock); - for_each_netdev(&init_net, dev) { - if (dev->type == strip_info->dev->type && - !memcmp(dev->dev_addr, - &strip_info->true_dev_addr, - sizeof(MetricomAddress))) { - printk(KERN_INFO - "%s: Transferred packet ownership to %s.\n", - strip_info->dev->name, dev->name); - read_unlock_bh(&dev_base_lock); - return (dev); - } - } - read_unlock_bh(&dev_base_lock); - } - return (strip_info->dev); -} - -/* - * Send one completely decapsulated datagram to the next layer. - */ - -static void deliver_packet(struct strip *strip_info, STRIP_Header * header, - __u16 packetlen) -{ - struct sk_buff *skb = dev_alloc_skb(sizeof(STRIP_Header) + packetlen); - if (!skb) { - printk(KERN_ERR "%s: memory squeeze, dropping packet.\n", - strip_info->dev->name); - strip_info->rx_dropped++; - } else { - memcpy(skb_put(skb, sizeof(STRIP_Header)), header, - sizeof(STRIP_Header)); - memcpy(skb_put(skb, packetlen), strip_info->rx_buff, - packetlen); - skb->dev = get_strip_dev(strip_info); - skb->protocol = header->protocol; - skb_reset_mac_header(skb); - - /* Having put a fake header on the front of the sk_buff for the */ - /* benefit of tools like tcpdump, skb_pull now 'consumes' that */ - /* fake header before we hand the packet up to the next layer. */ - skb_pull(skb, sizeof(STRIP_Header)); - - /* Finally, hand the packet up to the next layer (e.g. IP or ARP, etc.) */ - strip_info->rx_packets++; - strip_info->rx_pps_count++; -#ifdef EXT_COUNTERS - strip_info->rx_bytes += packetlen; -#endif - netif_rx(skb); - } -} - -static void process_IP_packet(struct strip *strip_info, - STRIP_Header * header, __u8 * ptr, - __u8 * end) -{ - __u16 packetlen; - - /* Decode start of the IP packet header */ - ptr = UnStuffData(ptr, end, strip_info->rx_buff, 4); - if (!ptr) { - RecvErr("IP Packet too short", strip_info); - return; - } - - packetlen = ((__u16) strip_info->rx_buff[2] << 8) | strip_info->rx_buff[3]; - - if (packetlen > MAX_RECV_MTU) { - printk(KERN_INFO "%s: Dropping oversized received IP packet: %d bytes\n", - strip_info->dev->name, packetlen); - strip_info->rx_dropped++; - return; - } - - /*printk(KERN_INFO "%s: Got %d byte IP packet\n", strip_info->dev->name, packetlen); */ - - /* Decode remainder of the IP packet */ - ptr = - UnStuffData(ptr, end, strip_info->rx_buff + 4, packetlen - 4); - if (!ptr) { - RecvErr("IP Packet too short", strip_info); - return; - } - - if (ptr < end) { - RecvErr("IP Packet too long", strip_info); - return; - } - - header->protocol = htons(ETH_P_IP); - - deliver_packet(strip_info, header, packetlen); -} - -static void process_ARP_packet(struct strip *strip_info, - STRIP_Header * header, __u8 * ptr, - __u8 * end) -{ - __u16 packetlen; - struct arphdr *arphdr = (struct arphdr *) strip_info->rx_buff; - - /* Decode start of the ARP packet */ - ptr = UnStuffData(ptr, end, strip_info->rx_buff, 8); - if (!ptr) { - RecvErr("ARP Packet too short", strip_info); - return; - } - - packetlen = 8 + (arphdr->ar_hln + arphdr->ar_pln) * 2; - - if (packetlen > MAX_RECV_MTU) { - printk(KERN_INFO - "%s: Dropping oversized received ARP packet: %d bytes\n", - strip_info->dev->name, packetlen); - strip_info->rx_dropped++; - return; - } - - /*printk(KERN_INFO "%s: Got %d byte ARP %s\n", - strip_info->dev->name, packetlen, - ntohs(arphdr->ar_op) == ARPOP_REQUEST ? "request" : "reply"); */ - - /* Decode remainder of the ARP packet */ - ptr = - UnStuffData(ptr, end, strip_info->rx_buff + 8, packetlen - 8); - if (!ptr) { - RecvErr("ARP Packet too short", strip_info); - return; - } - - if (ptr < end) { - RecvErr("ARP Packet too long", strip_info); - return; - } - - header->protocol = htons(ETH_P_ARP); - - deliver_packet(strip_info, header, packetlen); -} - -/* - * process_text_message processes a -terminated block of data received - * from the radio that doesn't begin with a '*' character. All normal - * Starmode communication messages with the radio begin with a '*', - * so any text that does not indicates a serial port error, a radio that - * is in Hayes command mode instead of Starmode, or a radio with really - * old firmware that doesn't frame its Starmode responses properly. - */ -static void process_text_message(struct strip *strip_info) -{ - __u8 *msg = strip_info->sx_buff; - int len = strip_info->sx_count; - - /* Check for anything that looks like it might be our radio name */ - /* (This is here for backwards compatibility with old firmware) */ - if (len == 9 && get_radio_address(strip_info, msg) == 0) - return; - - if (text_equal(msg, len, "OK")) - return; /* Ignore 'OK' responses from prior commands */ - if (text_equal(msg, len, "ERROR")) - return; /* Ignore 'ERROR' messages */ - if (has_prefix(msg, len, "ate0q1")) - return; /* Ignore character echo back from the radio */ - - /* Catch other error messages */ - /* (This is here for backwards compatibility with old firmware) */ - if (has_prefix(msg, len, "ERR_")) { - RecvErr_Message(strip_info, NULL, &msg[4], len - 4); - return; - } - - RecvErr("No initial *", strip_info); -} - -/* - * process_message processes a -terminated block of data received - * from the radio. If the radio is not in Starmode or has old firmware, - * it may be a line of text in response to an AT command. Ideally, with - * a current radio that's properly in Starmode, all data received should - * be properly framed and checksummed radio message blocks, containing - * either a starmode packet, or a other communication from the radio - * firmware, like "INF_" Info messages and &COMMAND responses. - */ -static void process_message(struct strip *strip_info) -{ - STRIP_Header header = { zero_address, zero_address, 0 }; - __u8 *ptr = strip_info->sx_buff; - __u8 *end = strip_info->sx_buff + strip_info->sx_count; - __u8 sendername[32], *sptr = sendername; - MetricomKey key; - - /*HexDump("Receiving", strip_info, ptr, end); */ - - /* Check for start of address marker, and then skip over it */ - if (*ptr == '*') - ptr++; - else { - process_text_message(strip_info); - return; - } - - /* Copy out the return address */ - while (ptr < end && *ptr != '*' - && sptr < ARRAY_END(sendername) - 1) - *sptr++ = *ptr++; - *sptr = 0; /* Null terminate the sender name */ - - /* Check for end of address marker, and skip over it */ - if (ptr >= end || *ptr != '*') { - RecvErr("No second *", strip_info); - return; - } - ptr++; /* Skip the second '*' */ - - /* If the sender name is "&COMMAND", ignore this 'packet' */ - /* (This is here for backwards compatibility with old firmware) */ - if (!strcmp(sendername, "&COMMAND")) { - strip_info->firmware_level = NoStructure; - strip_info->next_command = CompatibilityCommand; - return; - } - - if (ptr + 4 > end) { - RecvErr("No proto key", strip_info); - return; - } - - /* Get the protocol key out of the buffer */ - key.c[0] = *ptr++; - key.c[1] = *ptr++; - key.c[2] = *ptr++; - key.c[3] = *ptr++; - - /* If we're using checksums, verify the checksum at the end of the packet */ - if (strip_info->firmware_level >= ChecksummedMessages) { - end -= 4; /* Chop the last four bytes off the packet (they're the checksum) */ - if (ptr > end) { - RecvErr("Missing Checksum", strip_info); - return; - } - if (!verify_checksum(strip_info)) { - RecvErr("Bad Checksum", strip_info); - return; - } - } - - /*printk(KERN_INFO "%s: Got packet from \"%s\".\n", strip_info->dev->name, sendername); */ - - /* - * Fill in (pseudo) source and destination addresses in the packet. - * We assume that the destination address was our address (the radio does not - * tell us this). If the radio supplies a source address, then we use it. - */ - header.dst_addr = strip_info->true_dev_addr; - string_to_radio_address(&header.src_addr, sendername); - -#ifdef EXT_COUNTERS - if (key.l == SIP0Key.l) { - strip_info->rx_rbytes += (end - ptr); - process_IP_packet(strip_info, &header, ptr, end); - } else if (key.l == ARP0Key.l) { - strip_info->rx_rbytes += (end - ptr); - process_ARP_packet(strip_info, &header, ptr, end); - } else if (key.l == ATR_Key.l) { - strip_info->rx_ebytes += (end - ptr); - process_AT_response(strip_info, ptr, end); - } else if (key.l == ACK_Key.l) { - strip_info->rx_ebytes += (end - ptr); - process_ACK(strip_info, ptr, end); - } else if (key.l == INF_Key.l) { - strip_info->rx_ebytes += (end - ptr); - process_Info(strip_info, ptr, end); - } else if (key.l == ERR_Key.l) { - strip_info->rx_ebytes += (end - ptr); - RecvErr_Message(strip_info, sendername, ptr, end - ptr); - } else - RecvErr("Unrecognized protocol key", strip_info); -#else - if (key.l == SIP0Key.l) - process_IP_packet(strip_info, &header, ptr, end); - else if (key.l == ARP0Key.l) - process_ARP_packet(strip_info, &header, ptr, end); - else if (key.l == ATR_Key.l) - process_AT_response(strip_info, ptr, end); - else if (key.l == ACK_Key.l) - process_ACK(strip_info, ptr, end); - else if (key.l == INF_Key.l) - process_Info(strip_info, ptr, end); - else if (key.l == ERR_Key.l) - RecvErr_Message(strip_info, sendername, ptr, end - ptr); - else - RecvErr("Unrecognized protocol key", strip_info); -#endif -} - -#define TTYERROR(X) ((X) == TTY_BREAK ? "Break" : \ - (X) == TTY_FRAME ? "Framing Error" : \ - (X) == TTY_PARITY ? "Parity Error" : \ - (X) == TTY_OVERRUN ? "Hardware Overrun" : "Unknown Error") - -/* - * Handle the 'receiver data ready' interrupt. - * This function is called by the 'tty_io' module in the kernel when - * a block of STRIP data has been received, which can now be decapsulated - * and sent on to some IP layer for further processing. - */ - -static void strip_receive_buf(struct tty_struct *tty, const unsigned char *cp, - char *fp, int count) -{ - struct strip *strip_info = tty->disc_data; - const unsigned char *end = cp + count; - - if (!strip_info || strip_info->magic != STRIP_MAGIC - || !netif_running(strip_info->dev)) - return; - - spin_lock_bh(&strip_lock); -#if 0 - { - struct timeval tv; - do_gettimeofday(&tv); - printk(KERN_INFO - "**** strip_receive_buf: %3d bytes at %02d.%06d\n", - count, tv.tv_sec % 100, tv.tv_usec); - } -#endif - -#ifdef EXT_COUNTERS - strip_info->rx_sbytes += count; -#endif - - /* Read the characters out of the buffer */ - while (cp < end) { - if (fp && *fp) - printk(KERN_INFO "%s: %s on serial port\n", - strip_info->dev->name, TTYERROR(*fp)); - if (fp && *fp++ && !strip_info->discard) { /* If there's a serial error, record it */ - /* If we have some characters in the buffer, discard them */ - strip_info->discard = strip_info->sx_count; - strip_info->rx_errors++; - } - - /* Leading control characters (CR, NL, Tab, etc.) are ignored */ - if (strip_info->sx_count > 0 || *cp >= ' ') { - if (*cp == 0x0D) { /* If end of packet, decide what to do with it */ - if (strip_info->sx_count > 3000) - printk(KERN_INFO - "%s: Cut a %d byte packet (%zd bytes remaining)%s\n", - strip_info->dev->name, - strip_info->sx_count, - end - cp - 1, - strip_info-> - discard ? " (discarded)" : - ""); - if (strip_info->sx_count > - strip_info->sx_size) { - strip_info->rx_over_errors++; - printk(KERN_INFO - "%s: sx_buff overflow (%d bytes total)\n", - strip_info->dev->name, - strip_info->sx_count); - } else if (strip_info->discard) - printk(KERN_INFO - "%s: Discarding bad packet (%d/%d)\n", - strip_info->dev->name, - strip_info->discard, - strip_info->sx_count); - else - process_message(strip_info); - strip_info->discard = 0; - strip_info->sx_count = 0; - } else { - /* Make sure we have space in the buffer */ - if (strip_info->sx_count < - strip_info->sx_size) - strip_info->sx_buff[strip_info-> - sx_count] = - *cp; - strip_info->sx_count++; - } - } - cp++; - } - spin_unlock_bh(&strip_lock); -} - - -/************************************************************************/ -/* General control routines */ - -static int set_mac_address(struct strip *strip_info, - MetricomAddress * addr) -{ - /* - * We're using a manually specified address if the address is set - * to anything other than all ones. Setting the address to all ones - * disables manual mode and goes back to automatic address determination - * (tracking the true address that the radio has). - */ - strip_info->manual_dev_addr = - memcmp(addr->c, broadcast_address.c, - sizeof(broadcast_address)); - if (strip_info->manual_dev_addr) - *(MetricomAddress *) strip_info->dev->dev_addr = *addr; - else - *(MetricomAddress *) strip_info->dev->dev_addr = - strip_info->true_dev_addr; - return 0; -} - -static int strip_set_mac_address(struct net_device *dev, void *addr) -{ - struct strip *strip_info = netdev_priv(dev); - struct sockaddr *sa = addr; - printk(KERN_INFO "%s: strip_set_dev_mac_address called\n", dev->name); - set_mac_address(strip_info, (MetricomAddress *) sa->sa_data); - return 0; -} - -static struct net_device_stats *strip_get_stats(struct net_device *dev) -{ - struct strip *strip_info = netdev_priv(dev); - static struct net_device_stats stats; - - memset(&stats, 0, sizeof(struct net_device_stats)); - - stats.rx_packets = strip_info->rx_packets; - stats.tx_packets = strip_info->tx_packets; - stats.rx_dropped = strip_info->rx_dropped; - stats.tx_dropped = strip_info->tx_dropped; - stats.tx_errors = strip_info->tx_errors; - stats.rx_errors = strip_info->rx_errors; - stats.rx_over_errors = strip_info->rx_over_errors; - return (&stats); -} - - -/************************************************************************/ -/* Opening and closing */ - -/* - * Here's the order things happen: - * When the user runs "slattach -p strip ..." - * 1. The TTY module calls strip_open;; - * 2. strip_open calls strip_alloc - * 3. strip_alloc calls register_netdev - * 4. register_netdev calls strip_dev_init - * 5. then strip_open finishes setting up the strip_info - * - * When the user runs "ifconfig st up address netmask ..." - * 6. strip_open_low gets called - * - * When the user runs "ifconfig st down" - * 7. strip_close_low gets called - * - * When the user kills the slattach process - * 8. strip_close gets called - * 9. strip_close calls dev_close - * 10. if the device is still up, then dev_close calls strip_close_low - * 11. strip_close calls strip_free - */ - -/* Open the low-level part of the STRIP channel. Easy! */ - -static int strip_open_low(struct net_device *dev) -{ - struct strip *strip_info = netdev_priv(dev); - - if (strip_info->tty == NULL) - return (-ENODEV); - - if (!allocate_buffers(strip_info, dev->mtu)) - return (-ENOMEM); - - strip_info->sx_count = 0; - strip_info->tx_left = 0; - - strip_info->discard = 0; - strip_info->working = FALSE; - strip_info->firmware_level = NoStructure; - strip_info->next_command = CompatibilityCommand; - strip_info->user_baud = tty_get_baud_rate(strip_info->tty); - - printk(KERN_INFO "%s: Initializing Radio.\n", - strip_info->dev->name); - ResetRadio(strip_info); - strip_info->idle_timer.expires = jiffies + 1 * HZ; - add_timer(&strip_info->idle_timer); - netif_wake_queue(dev); - return (0); -} - - -/* - * Close the low-level part of the STRIP channel. Easy! - */ - -static int strip_close_low(struct net_device *dev) -{ - struct strip *strip_info = netdev_priv(dev); - - if (strip_info->tty == NULL) - return -EBUSY; - clear_bit(TTY_DO_WRITE_WAKEUP, &strip_info->tty->flags); - netif_stop_queue(dev); - - /* - * Free all STRIP frame buffers. - */ - kfree(strip_info->rx_buff); - strip_info->rx_buff = NULL; - kfree(strip_info->sx_buff); - strip_info->sx_buff = NULL; - kfree(strip_info->tx_buff); - strip_info->tx_buff = NULL; - - del_timer(&strip_info->idle_timer); - return 0; -} - -static const struct header_ops strip_header_ops = { - .create = strip_header, - .rebuild = strip_rebuild_header, -}; - - -static const struct net_device_ops strip_netdev_ops = { - .ndo_open = strip_open_low, - .ndo_stop = strip_close_low, - .ndo_start_xmit = strip_xmit, - .ndo_set_mac_address = strip_set_mac_address, - .ndo_get_stats = strip_get_stats, - .ndo_change_mtu = strip_change_mtu, -}; - -/* - * This routine is called by DDI when the - * (dynamically assigned) device is registered - */ - -static void strip_dev_setup(struct net_device *dev) -{ - /* - * Finish setting up the DEVICE info. - */ - - dev->trans_start = 0; - dev->tx_queue_len = 30; /* Drop after 30 frames queued */ - - dev->flags = 0; - dev->mtu = DEFAULT_STRIP_MTU; - dev->type = ARPHRD_METRICOM; /* dtang */ - dev->hard_header_len = sizeof(STRIP_Header); - /* - * netdev_priv(dev) Already holds a pointer to our struct strip - */ - - *(MetricomAddress *)dev->broadcast = broadcast_address; - dev->dev_addr[0] = 0; - dev->addr_len = sizeof(MetricomAddress); - - dev->header_ops = &strip_header_ops, - dev->netdev_ops = &strip_netdev_ops; -} - -/* - * Free a STRIP channel. - */ - -static void strip_free(struct strip *strip_info) -{ - spin_lock_bh(&strip_lock); - list_del_rcu(&strip_info->list); - spin_unlock_bh(&strip_lock); - - strip_info->magic = 0; - - free_netdev(strip_info->dev); -} - - -/* - * Allocate a new free STRIP channel - */ -static struct strip *strip_alloc(void) -{ - struct list_head *n; - struct net_device *dev; - struct strip *strip_info; - - dev = alloc_netdev(sizeof(struct strip), "st%d", - strip_dev_setup); - - if (!dev) - return NULL; /* If no more memory, return */ - - - strip_info = netdev_priv(dev); - strip_info->dev = dev; - - strip_info->magic = STRIP_MAGIC; - strip_info->tty = NULL; - - strip_info->gratuitous_arp = jiffies + LongTime; - strip_info->arp_interval = 0; - init_timer(&strip_info->idle_timer); - strip_info->idle_timer.data = (long) dev; - strip_info->idle_timer.function = strip_IdleTask; - - - spin_lock_bh(&strip_lock); - rescan: - /* - * Search the list to find where to put our new entry - * (and in the process decide what channel number it is - * going to be) - */ - list_for_each(n, &strip_list) { - struct strip *s = hlist_entry(n, struct strip, list); - - if (s->dev->base_addr == dev->base_addr) { - ++dev->base_addr; - goto rescan; - } - } - - sprintf(dev->name, "st%ld", dev->base_addr); - - list_add_tail_rcu(&strip_info->list, &strip_list); - spin_unlock_bh(&strip_lock); - - return strip_info; -} - -/* - * Open the high-level part of the STRIP channel. - * This function is called by the TTY module when the - * STRIP line discipline is called for. Because we are - * sure the tty line exists, we only have to link it to - * a free STRIP channel... - */ - -static int strip_open(struct tty_struct *tty) -{ - struct strip *strip_info = tty->disc_data; - - /* - * First make sure we're not already connected. - */ - - if (strip_info && strip_info->magic == STRIP_MAGIC) - return -EEXIST; - - /* - * We need a write method. - */ - - if (tty->ops->write == NULL || tty->ops->set_termios == NULL) - return -EOPNOTSUPP; - - /* - * OK. Find a free STRIP channel to use. - */ - if ((strip_info = strip_alloc()) == NULL) - return -ENFILE; - - /* - * Register our newly created device so it can be ifconfig'd - * strip_dev_init() will be called as a side-effect - */ - - if (register_netdev(strip_info->dev) != 0) { - printk(KERN_ERR "strip: register_netdev() failed.\n"); - strip_free(strip_info); - return -ENFILE; - } - - strip_info->tty = tty; - tty->disc_data = strip_info; - tty->receive_room = 65536; - - tty_driver_flush_buffer(tty); - - /* - * Restore default settings - */ - - strip_info->dev->type = ARPHRD_METRICOM; /* dtang */ - - /* - * Set tty options - */ - - tty->termios->c_iflag |= IGNBRK | IGNPAR; /* Ignore breaks and parity errors. */ - tty->termios->c_cflag |= CLOCAL; /* Ignore modem control signals. */ - tty->termios->c_cflag &= ~HUPCL; /* Don't close on hup */ - - printk(KERN_INFO "STRIP: device \"%s\" activated\n", - strip_info->dev->name); - - /* - * Done. We have linked the TTY line to a channel. - */ - return (strip_info->dev->base_addr); -} - -/* - * Close down a STRIP channel. - * This means flushing out any pending queues, and then restoring the - * TTY line discipline to what it was before it got hooked to STRIP - * (which usually is TTY again). - */ - -static void strip_close(struct tty_struct *tty) -{ - struct strip *strip_info = tty->disc_data; - - /* - * First make sure we're connected. - */ - - if (!strip_info || strip_info->magic != STRIP_MAGIC) - return; - - unregister_netdev(strip_info->dev); - - tty->disc_data = NULL; - strip_info->tty = NULL; - printk(KERN_INFO "STRIP: device \"%s\" closed down\n", - strip_info->dev->name); - strip_free(strip_info); - tty->disc_data = NULL; -} - - -/************************************************************************/ -/* Perform I/O control calls on an active STRIP channel. */ - -static int strip_ioctl(struct tty_struct *tty, struct file *file, - unsigned int cmd, unsigned long arg) -{ - struct strip *strip_info = tty->disc_data; - - /* - * First make sure we're connected. - */ - - if (!strip_info || strip_info->magic != STRIP_MAGIC) - return -EINVAL; - - switch (cmd) { - case SIOCGIFNAME: - if(copy_to_user((void __user *) arg, strip_info->dev->name, strlen(strip_info->dev->name) + 1)) - return -EFAULT; - break; - case SIOCSIFHWADDR: - { - MetricomAddress addr; - //printk(KERN_INFO "%s: SIOCSIFHWADDR\n", strip_info->dev->name); - if(copy_from_user(&addr, (void __user *) arg, sizeof(MetricomAddress))) - return -EFAULT; - return set_mac_address(strip_info, &addr); - } - default: - return tty_mode_ioctl(tty, file, cmd, arg); - break; - } - return 0; -} - -#ifdef CONFIG_COMPAT -static long strip_compat_ioctl(struct tty_struct *tty, struct file *file, - unsigned int cmd, unsigned long arg) -{ - switch (cmd) { - case SIOCGIFNAME: - case SIOCSIFHWADDR: - return strip_ioctl(tty, file, cmd, - (unsigned long)compat_ptr(arg)); - } - return -ENOIOCTLCMD; -} -#endif - -/************************************************************************/ -/* Initialization */ - -static struct tty_ldisc_ops strip_ldisc = { - .magic = TTY_LDISC_MAGIC, - .name = "strip", - .owner = THIS_MODULE, - .open = strip_open, - .close = strip_close, - .ioctl = strip_ioctl, -#ifdef CONFIG_COMPAT - .compat_ioctl = strip_compat_ioctl, -#endif - .receive_buf = strip_receive_buf, - .write_wakeup = strip_write_some_more, -}; - -/* - * Initialize the STRIP driver. - * This routine is called at boot time, to bootstrap the multi-channel - * STRIP driver - */ - -static char signon[] __initdata = - KERN_INFO "STRIP: Version %s (unlimited channels)\n"; - -static int __init strip_init_driver(void) -{ - int status; - - printk(signon, StripVersion); - - - /* - * Fill in our line protocol discipline, and register it - */ - if ((status = tty_register_ldisc(N_STRIP, &strip_ldisc))) - printk(KERN_ERR "STRIP: can't register line discipline (err = %d)\n", - status); - - /* - * Register the status file with /proc - */ - proc_net_fops_create(&init_net, "strip", S_IFREG | S_IRUGO, &strip_seq_fops); - - return status; -} - -module_init(strip_init_driver); - -static const char signoff[] __exitdata = - KERN_INFO "STRIP: Module Unloaded\n"; - -static void __exit strip_exit_driver(void) -{ - int i; - struct list_head *p,*n; - - /* module ref count rules assure that all entries are unregistered */ - list_for_each_safe(p, n, &strip_list) { - struct strip *s = list_entry(p, struct strip, list); - strip_free(s); - } - - /* Unregister with the /proc/net file here. */ - proc_net_remove(&init_net, "strip"); - - if ((i = tty_unregister_ldisc(N_STRIP))) - printk(KERN_ERR "STRIP: can't unregister line discipline (err = %d)\n", i); - - printk(signoff); -} - -module_exit(strip_exit_driver); - -MODULE_AUTHOR("Stuart Cheshire "); -MODULE_DESCRIPTION("Starmode Radio IP (STRIP) Device Driver"); -MODULE_LICENSE("Dual BSD/GPL"); - -MODULE_SUPPORTED_DEVICE("Starmode Radio IP (STRIP) modem"); -- cgit v0.10.2 From 1d794e3b353b50ab5d9d46f7c15607f9ec8c78e0 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 23:16:09 -0700 Subject: Staging: wavelan: delete the driver It has sat in the staging directory since October of 2009, and no one has stepped up to take it over, so odds are, no one cares about it anymore. So, it is now deleted as scheduled, and documented in the TODO file. Cc: John W. Linville Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 4ca0501..436e2ed 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -125,8 +125,6 @@ source "drivers/staging/batman-adv/Kconfig" source "drivers/staging/samsung-laptop/Kconfig" -source "drivers/staging/wavelan/Kconfig" - source "drivers/staging/netwave/Kconfig" source "drivers/staging/sm7xx/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index e308274..357da6d 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -43,8 +43,6 @@ obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/ obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/ obj-$(CONFIG_BATMAN_ADV) += batman-adv/ obj-$(CONFIG_SAMSUNG_LAPTOP) += samsung-laptop/ -obj-$(CONFIG_WAVELAN) += wavelan/ -obj-$(CONFIG_PCMCIA_WAVELAN) += wavelan/ obj-$(CONFIG_PCMCIA_NETWAVE) += netwave/ obj-$(CONFIG_FB_SM7XX) += sm7xx/ obj-$(CONFIG_DT3155) += dt3155/ diff --git a/drivers/staging/wavelan/Kconfig b/drivers/staging/wavelan/Kconfig deleted file mode 100644 index af65566..0000000 --- a/drivers/staging/wavelan/Kconfig +++ /dev/null @@ -1,38 +0,0 @@ -config WAVELAN - tristate "AT&T/Lucent old WaveLAN & DEC RoamAbout DS ISA support" - depends on ISA && WLAN - select WIRELESS_EXT - select WEXT_SPY - select WEXT_PRIV - ---help--- - The Lucent WaveLAN (formerly NCR and AT&T; or DEC RoamAbout DS) is - a Radio LAN (wireless Ethernet-like Local Area Network) using the - radio frequencies 900 MHz and 2.4 GHz. - - If you want to use an ISA WaveLAN card under Linux, say Y and read - the Ethernet-HOWTO, available from - . Some more specific - information is contained in - and in the source code - . - - You will also need the wireless tools package available from - . - Please read the man pages contained therein. - - To compile this driver as a module, choose M here: the module will be - called wavelan. - -config PCMCIA_WAVELAN - tristate "AT&T/Lucent old WaveLAN Pcmcia wireless support" - depends on PCMCIA && WLAN - select WIRELESS_EXT - select WEXT_SPY - select WEXT_PRIV - help - Say Y here if you intend to attach an AT&T/Lucent Wavelan PCMCIA - (PC-card) wireless Ethernet networking card to your computer. This - driver is for the non-IEEE-802.11 Wavelan cards. - - To compile this driver as a module, choose M here: the module will be - called wavelan_cs. If unsure, say N. diff --git a/drivers/staging/wavelan/Makefile b/drivers/staging/wavelan/Makefile deleted file mode 100644 index 1cde17c..0000000 --- a/drivers/staging/wavelan/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -obj-$(CONFIG_WAVELAN) += wavelan.o -obj-$(CONFIG_PCMCIA_WAVELAN) += wavelan_cs.o diff --git a/drivers/staging/wavelan/TODO b/drivers/staging/wavelan/TODO deleted file mode 100644 index 9bd15a2..0000000 --- a/drivers/staging/wavelan/TODO +++ /dev/null @@ -1,7 +0,0 @@ -TODO: - - step up and maintain this driver to ensure that it continues - to work. Having the hardware for this is pretty much a - requirement. If this does not happen, the will be removed in - the 2.6.35 kernel release. - -Please send patches to Greg Kroah-Hartman . diff --git a/drivers/staging/wavelan/i82586.h b/drivers/staging/wavelan/i82586.h deleted file mode 100644 index 27f8324..0000000 --- a/drivers/staging/wavelan/i82586.h +++ /dev/null @@ -1,397 +0,0 @@ -/* - * Intel 82586 IEEE 802.3 Ethernet LAN Coprocessor. - * - * See: - * Intel Microcommunications 1991 - * p1-1 to p1-37 - * Intel order No. 231658 - * ISBN 1-55512-119-5 - * - * Unfortunately, the above chapter mentions neither - * the System Configuration Pointer (SCP) nor the - * Intermediate System Configuration Pointer (ISCP), - * so we probably need to look elsewhere for the - * whole story -- some recommend the "Intel LAN - * Components manual" but I have neither a copy - * nor a full reference. But "elsewhere" may be - * in the same publication... - * The description of a later device, the - * "82596CA High-Performance 32-Bit Local Area Network - * Coprocessor", (ibid. p1-38 to p1-109) does mention - * the SCP and ISCP and also has an i82586 compatibility - * mode. Even more useful is "AP-235 An 82586 Data Link - * Driver" (ibid. p1-337 to p1-417). - */ - -#define I82586_MEMZ (64 * 1024) - -#define I82586_SCP_ADDR (I82586_MEMZ - sizeof(scp_t)) - -#define ADDR_LEN 6 -#define I82586NULL 0xFFFF - -#define toff(t, p, f) (unsigned short)((void *)(&((t *)((void *)0 + (p)))->f) - (void *)0) - -/* - * System Configuration Pointer (SCP). - */ -typedef struct scp_t scp_t; -struct scp_t { - unsigned short scp_sysbus; /* 82586 bus width: */ -#define SCP_SY_16BBUS (0x0 << 0) /* 16 bits */ -#define SCP_SY_8BBUS (0x1 << 0) /* 8 bits. */ - unsigned short scp_junk[2]; /* Unused */ - unsigned short scp_iscpl; /* lower 16 bits of ISCP_ADDR */ - unsigned short scp_iscph; /* upper 16 bits of ISCP_ADDR */ -}; - -/* - * Intermediate System Configuration Pointer (ISCP). - */ -typedef struct iscp_t iscp_t; -struct iscp_t { - unsigned short iscp_busy; /* set by CPU before first CA, */ - /* cleared by 82586 after read. */ - unsigned short iscp_offset; /* offset of SCB */ - unsigned short iscp_basel; /* base of SCB */ - unsigned short iscp_baseh; /* " */ -}; - -/* - * System Control Block (SCB). - * The 82586 writes its status to scb_status and then - * raises an interrupt to alert the CPU. - * The CPU writes a command to scb_command and - * then issues a Channel Attention (CA) to alert the 82586. - */ -typedef struct scb_t scb_t; -struct scb_t { - unsigned short scb_status; /* Status of 82586 */ -#define SCB_ST_INT (0xF << 12) /* Some of: */ -#define SCB_ST_CX (0x1 << 15) /* Cmd completed */ -#define SCB_ST_FR (0x1 << 14) /* Frame received */ -#define SCB_ST_CNA (0x1 << 13) /* Cmd unit not active */ -#define SCB_ST_RNR (0x1 << 12) /* Rcv unit not ready */ -#define SCB_ST_JUNK0 (0x1 << 11) /* 0 */ -#define SCB_ST_CUS (0x7 << 8) /* Cmd unit status */ -#define SCB_ST_CUS_IDLE (0 << 8) /* Idle */ -#define SCB_ST_CUS_SUSP (1 << 8) /* Suspended */ -#define SCB_ST_CUS_ACTV (2 << 8) /* Active */ -#define SCB_ST_JUNK1 (0x1 << 7) /* 0 */ -#define SCB_ST_RUS (0x7 << 4) /* Rcv unit status */ -#define SCB_ST_RUS_IDLE (0 << 4) /* Idle */ -#define SCB_ST_RUS_SUSP (1 << 4) /* Suspended */ -#define SCB_ST_RUS_NRES (2 << 4) /* No resources */ -#define SCB_ST_RUS_RDY (4 << 4) /* Ready */ - unsigned short scb_command; /* Next command */ -#define SCB_CMD_ACK_CX (0x1 << 15) /* Ack cmd completion */ -#define SCB_CMD_ACK_FR (0x1 << 14) /* Ack frame received */ -#define SCB_CMD_ACK_CNA (0x1 << 13) /* Ack CU not active */ -#define SCB_CMD_ACK_RNR (0x1 << 12) /* Ack RU not ready */ -#define SCB_CMD_JUNKX (0x1 << 11) /* Unused */ -#define SCB_CMD_CUC (0x7 << 8) /* Command Unit command */ -#define SCB_CMD_CUC_NOP (0 << 8) /* Nop */ -#define SCB_CMD_CUC_GO (1 << 8) /* Start cbl_offset */ -#define SCB_CMD_CUC_RES (2 << 8) /* Resume execution */ -#define SCB_CMD_CUC_SUS (3 << 8) /* Suspend " */ -#define SCB_CMD_CUC_ABT (4 << 8) /* Abort " */ -#define SCB_CMD_RESET (0x1 << 7) /* Reset chip (hardware) */ -#define SCB_CMD_RUC (0x7 << 4) /* Receive Unit command */ -#define SCB_CMD_RUC_NOP (0 << 4) /* Nop */ -#define SCB_CMD_RUC_GO (1 << 4) /* Start rfa_offset */ -#define SCB_CMD_RUC_RES (2 << 4) /* Resume reception */ -#define SCB_CMD_RUC_SUS (3 << 4) /* Suspend " */ -#define SCB_CMD_RUC_ABT (4 << 4) /* Abort " */ - unsigned short scb_cbl_offset; /* Offset of first command unit */ - /* Action Command */ - unsigned short scb_rfa_offset; /* Offset of first Receive */ - /* Frame Descriptor in the */ - /* Receive Frame Area */ - unsigned short scb_crcerrs; /* Properly aligned frames */ - /* received with a CRC error */ - unsigned short scb_alnerrs; /* Misaligned frames received */ - /* with a CRC error */ - unsigned short scb_rscerrs; /* Frames lost due to no space */ - unsigned short scb_ovrnerrs; /* Frames lost due to slow bus */ -}; - -#define scboff(p, f) toff(scb_t, p, f) - -/* - * The eight Action Commands. - */ -typedef enum acmd_e acmd_e; -enum acmd_e { - acmd_nop = 0, /* Do nothing */ - acmd_ia_setup = 1, /* Load an (ethernet) address into the */ - /* 82586 */ - acmd_configure = 2, /* Update the 82586 operating parameters */ - acmd_mc_setup = 3, /* Load a list of (ethernet) multicast */ - /* addresses into the 82586 */ - acmd_transmit = 4, /* Transmit a frame */ - acmd_tdr = 5, /* Perform a Time Domain Reflectometer */ - /* test on the serial link */ - acmd_dump = 6, /* Copy 82586 registers to memory */ - acmd_diagnose = 7, /* Run an internal self test */ -}; - -/* - * Generic Action Command header. - */ -typedef struct ach_t ach_t; -struct ach_t { - unsigned short ac_status; /* Command status: */ -#define AC_SFLD_C (0x1 << 15) /* Command completed */ -#define AC_SFLD_B (0x1 << 14) /* Busy executing */ -#define AC_SFLD_OK (0x1 << 13) /* Completed error free */ -#define AC_SFLD_A (0x1 << 12) /* Command aborted */ -#define AC_SFLD_FAIL (0x1 << 11) /* Selftest failed */ -#define AC_SFLD_S10 (0x1 << 10) /* No carrier sense */ - /* during transmission */ -#define AC_SFLD_S9 (0x1 << 9) /* Tx unsuccessful: */ - /* (stopped) lost CTS */ -#define AC_SFLD_S8 (0x1 << 8) /* Tx unsuccessful: */ - /* (stopped) slow DMA */ -#define AC_SFLD_S7 (0x1 << 7) /* Tx deferred: */ - /* other link traffic */ -#define AC_SFLD_S6 (0x1 << 6) /* Heart Beat: collision */ - /* detect after last tx */ -#define AC_SFLD_S5 (0x1 << 5) /* Tx stopped: */ - /* excessive collisions */ -#define AC_SFLD_MAXCOL (0xF << 0) /* Collision count */ - unsigned short ac_command; /* Command specifier: */ -#define AC_CFLD_EL (0x1 << 15) /* End of command list */ -#define AC_CFLD_S (0x1 << 14) /* Suspend on completion */ -#define AC_CFLD_I (0x1 << 13) /* Interrupt on completion */ -#define AC_CFLD_CMD (0x7 << 0) /* acmd_e */ - unsigned short ac_link; /* Next Action Command */ -}; - -#define acoff(p, f) toff(ach_t, p, f) - -/* - * The Nop Action Command. - */ -typedef struct ac_nop_t ac_nop_t; -struct ac_nop_t { - ach_t nop_h; -}; - -/* - * The IA-Setup Action Command. - */ -typedef struct ac_ias_t ac_ias_t; -struct ac_ias_t { - ach_t ias_h; - unsigned char ias_addr[ADDR_LEN]; /* The (ethernet) address */ -}; - -/* - * The Configure Action Command. - */ -typedef struct ac_cfg_t ac_cfg_t; -struct ac_cfg_t { - ach_t cfg_h; - unsigned char cfg_byte_cnt; /* Size foll data: 4-12 */ -#define AC_CFG_BYTE_CNT(v) (((v) & 0xF) << 0) - unsigned char cfg_fifolim; /* FIFO threshold */ -#define AC_CFG_FIFOLIM(v) (((v) & 0xF) << 0) - unsigned char cfg_byte8; -#define AC_CFG_SAV_BF(v) (((v) & 0x1) << 7) /* Save rxd bad frames */ -#define AC_CFG_SRDY(v) (((v) & 0x1) << 6) /* SRDY/ARDY pin means */ - /* external sync. */ - unsigned char cfg_byte9; -#define AC_CFG_ELPBCK(v) (((v) & 0x1) << 7) /* External loopback */ -#define AC_CFG_ILPBCK(v) (((v) & 0x1) << 6) /* Internal loopback */ -#define AC_CFG_PRELEN(v) (((v) & 0x3) << 4) /* Preamble length */ -#define AC_CFG_PLEN_2 0 /* 2 bytes */ -#define AC_CFG_PLEN_4 1 /* 4 bytes */ -#define AC_CFG_PLEN_8 2 /* 8 bytes */ -#define AC_CFG_PLEN_16 3 /* 16 bytes */ -#define AC_CFG_ALOC(v) (((v) & 0x1) << 3) /* Addr/len data is */ - /* explicit in buffers */ -#define AC_CFG_ADDRLEN(v) (((v) & 0x7) << 0) /* Bytes per address */ - unsigned char cfg_byte10; -#define AC_CFG_BOFMET(v) (((v) & 0x1) << 7) /* Use alternate expo. */ - /* backoff method */ -#define AC_CFG_ACR(v) (((v) & 0x7) << 4) /* Accelerated cont. res. */ -#define AC_CFG_LINPRIO(v) (((v) & 0x7) << 0) /* Linear priority */ - unsigned char cfg_ifs; /* Interframe spacing */ - unsigned char cfg_slotl; /* Slot time (low byte) */ - unsigned char cfg_byte13; -#define AC_CFG_RETRYNUM(v) (((v) & 0xF) << 4) /* Max. collision retry */ -#define AC_CFG_SLTTMHI(v) (((v) & 0x7) << 0) /* Slot time (high bits) */ - unsigned char cfg_byte14; -#define AC_CFG_FLGPAD(v) (((v) & 0x1) << 7) /* Pad with HDLC flags */ -#define AC_CFG_BTSTF(v) (((v) & 0x1) << 6) /* Do HDLC bitstuffing */ -#define AC_CFG_CRC16(v) (((v) & 0x1) << 5) /* 16 bit CCITT CRC */ -#define AC_CFG_NCRC(v) (((v) & 0x1) << 4) /* Insert no CRC */ -#define AC_CFG_TNCRS(v) (((v) & 0x1) << 3) /* Tx even if no carrier */ -#define AC_CFG_MANCH(v) (((v) & 0x1) << 2) /* Manchester coding */ -#define AC_CFG_BCDIS(v) (((v) & 0x1) << 1) /* Disable broadcast */ -#define AC_CFG_PRM(v) (((v) & 0x1) << 0) /* Promiscuous mode */ - unsigned char cfg_byte15; -#define AC_CFG_ICDS(v) (((v) & 0x1) << 7) /* Internal collision */ - /* detect source */ -#define AC_CFG_CDTF(v) (((v) & 0x7) << 4) /* Collision detect */ - /* filter in bit times */ -#define AC_CFG_ICSS(v) (((v) & 0x1) << 3) /* Internal carrier */ - /* sense source */ -#define AC_CFG_CSTF(v) (((v) & 0x7) << 0) /* Carrier sense */ - /* filter in bit times */ - unsigned short cfg_min_frm_len; -#define AC_CFG_MNFRM(v) (((v) & 0xFF) << 0) /* Min. bytes/frame (<= 255) */ -}; - -/* - * The MC-Setup Action Command. - */ -typedef struct ac_mcs_t ac_mcs_t; -struct ac_mcs_t { - ach_t mcs_h; - unsigned short mcs_cnt; /* No. of bytes of MC addresses */ -#if 0 - unsigned char mcs_data[ADDR_LEN]; /* The first MC address .. */ - ... -#endif -}; - -#define I82586_MAX_MULTICAST_ADDRESSES 128 /* Hardware hashed filter */ - -/* - * The Transmit Action Command. - */ -typedef struct ac_tx_t ac_tx_t; -struct ac_tx_t { - ach_t tx_h; - unsigned short tx_tbd_offset; /* Address of list of buffers. */ -#if 0 -Linux packets are passed down with the destination MAC address -and length/type field already prepended to the data, -so we do not need to insert it. Consistent with this -we must also set the AC_CFG_ALOC(..) flag during the -ac_cfg_t action command. - unsigned char tx_addr[ADDR_LEN]; /* The frame dest. address */ - unsigned short tx_length; /* The frame length */ -#endif /* 0 */ -}; - -/* - * The Time Domain Reflectometer Action Command. - */ -typedef struct ac_tdr_t ac_tdr_t; -struct ac_tdr_t { - ach_t tdr_h; - unsigned short tdr_result; /* Result. */ -#define AC_TDR_LNK_OK (0x1 << 15) /* No link problem */ -#define AC_TDR_XCVR_PRB (0x1 << 14) /* Txcvr cable problem */ -#define AC_TDR_ET_OPN (0x1 << 13) /* Open on the link */ -#define AC_TDR_ET_SRT (0x1 << 12) /* Short on the link */ -#define AC_TDR_TIME (0x7FF << 0) /* Distance to problem */ - /* site in transmit */ - /* clock cycles */ -}; - -/* - * The Dump Action Command. - */ -typedef struct ac_dmp_t ac_dmp_t; -struct ac_dmp_t { - ach_t dmp_h; - unsigned short dmp_offset; /* Result. */ -}; - -/* - * Size of the result of the dump command. - */ -#define DUMPBYTES 170 - -/* - * The Diagnose Action Command. - */ -typedef struct ac_dgn_t ac_dgn_t; -struct ac_dgn_t { - ach_t dgn_h; -}; - -/* - * Transmit Buffer Descriptor (TBD). - */ -typedef struct tbd_t tbd_t; -struct tbd_t { - unsigned short tbd_status; /* Written by the CPU */ -#define TBD_STATUS_EOF (0x1 << 15) /* This TBD is the */ - /* last for this frame */ -#define TBD_STATUS_ACNT (0x3FFF << 0) /* Actual count of data */ - /* bytes in this buffer */ - unsigned short tbd_next_bd_offset; /* Next in list */ - unsigned short tbd_bufl; /* Buffer address (low) */ - unsigned short tbd_bufh; /* " " (high) */ -}; - -/* - * Receive Buffer Descriptor (RBD). - */ -typedef struct rbd_t rbd_t; -struct rbd_t { - unsigned short rbd_status; /* Written by the 82586 */ -#define RBD_STATUS_EOF (0x1 << 15) /* This RBD is the */ - /* last for this frame */ -#define RBD_STATUS_F (0x1 << 14) /* ACNT field is valid */ -#define RBD_STATUS_ACNT (0x3FFF << 0) /* Actual no. of data */ - /* bytes in this buffer */ - unsigned short rbd_next_rbd_offset; /* Next rbd in list */ - unsigned short rbd_bufl; /* Data pointer (low) */ - unsigned short rbd_bufh; /* " " (high) */ - unsigned short rbd_el_size; /* EL+Data buf. size */ -#define RBD_EL (0x1 << 15) /* This BD is the */ - /* last in the list */ -#define RBD_SIZE (0x3FFF << 0) /* No. of bytes the */ - /* buffer can hold */ -}; - -#define rbdoff(p, f) toff(rbd_t, p, f) - -/* - * Frame Descriptor (FD). - */ -typedef struct fd_t fd_t; -struct fd_t { - unsigned short fd_status; /* Written by the 82586 */ -#define FD_STATUS_C (0x1 << 15) /* Completed storing frame */ -#define FD_STATUS_B (0x1 << 14) /* FD was consumed by RU */ -#define FD_STATUS_OK (0x1 << 13) /* Frame rxd successfully */ -#define FD_STATUS_S11 (0x1 << 11) /* CRC error */ -#define FD_STATUS_S10 (0x1 << 10) /* Alignment error */ -#define FD_STATUS_S9 (0x1 << 9) /* Ran out of resources */ -#define FD_STATUS_S8 (0x1 << 8) /* Rx DMA overrun */ -#define FD_STATUS_S7 (0x1 << 7) /* Frame too short */ -#define FD_STATUS_S6 (0x1 << 6) /* No EOF flag */ - unsigned short fd_command; /* Command */ -#define FD_COMMAND_EL (0x1 << 15) /* Last FD in list */ -#define FD_COMMAND_S (0x1 << 14) /* Suspend RU after rx */ - unsigned short fd_link_offset; /* Next FD */ - unsigned short fd_rbd_offset; /* First RBD (data) */ - /* Prepared by CPU, */ - /* updated by 82586 */ -#if 0 -I think the rest is unused since we -have set AC_CFG_ALOC(..). However, just -in case, we leave the space. -#endif /* 0 */ - unsigned char fd_dest[ADDR_LEN]; /* Destination address */ - /* Written by 82586 */ - unsigned char fd_src[ADDR_LEN]; /* Source address */ - /* Written by 82586 */ - unsigned short fd_length; /* Frame length or type */ - /* Written by 82586 */ -}; - -#define fdoff(p, f) toff(fd_t, p, f) - -/* - * This software may only be used and distributed - * according to the terms of the GNU General Public License. - * - * For more details, see wavelan.c. - */ diff --git a/drivers/staging/wavelan/wavelan.c b/drivers/staging/wavelan/wavelan.c deleted file mode 100644 index 37ede43..0000000 --- a/drivers/staging/wavelan/wavelan.c +++ /dev/null @@ -1,4401 +0,0 @@ -/* - * WaveLAN ISA driver - * - * Jean II - HPLB '96 - * - * Reorganisation and extension of the driver. - * Original copyright follows (also see the end of this file). - * See wavelan.p.h for details. - * - * - * - * AT&T GIS (nee NCR) WaveLAN card: - * An Ethernet-like radio transceiver - * controlled by an Intel 82586 coprocessor. - */ - -#include "wavelan.p.h" /* Private header */ - -/************************* MISC SUBROUTINES **************************/ -/* - * Subroutines which won't fit in one of the following category - * (WaveLAN modem or i82586) - */ - -/*------------------------------------------------------------------*/ -/* - * Translate irq number to PSA irq parameter - */ -static u8 wv_irq_to_psa(int irq) -{ - if (irq < 0 || irq >= ARRAY_SIZE(irqvals)) - return 0; - - return irqvals[irq]; -} - -/*------------------------------------------------------------------*/ -/* - * Translate PSA irq parameter to irq number - */ -static int __init wv_psa_to_irq(u8 irqval) -{ - int i; - - for (i = 0; i < ARRAY_SIZE(irqvals); i++) - if (irqvals[i] == irqval) - return i; - - return -1; -} - -/********************* HOST ADAPTER SUBROUTINES *********************/ -/* - * Useful subroutines to manage the WaveLAN ISA interface - * - * One major difference with the PCMCIA hardware (except the port mapping) - * is that we have to keep the state of the Host Control Register - *because of the interrupt enable & bus size flags. - */ - -/*------------------------------------------------------------------*/ -/* - * Read from card's Host Adaptor Status Register. - */ -static inline u16 hasr_read(unsigned long ioaddr) -{ - return inw(HASR(ioaddr)); -} /* hasr_read */ - -/*------------------------------------------------------------------*/ -/* - * Write to card's Host Adapter Command Register. - */ -static inline void hacr_write(unsigned long ioaddr, u16 hacr) -{ - outw(hacr, HACR(ioaddr)); -} /* hacr_write */ - -/*------------------------------------------------------------------*/ -/* - * Write to card's Host Adapter Command Register. Include a delay for - * those times when it is needed. - */ -static void hacr_write_slow(unsigned long ioaddr, u16 hacr) -{ - hacr_write(ioaddr, hacr); - /* delay might only be needed sometimes */ - mdelay(1); -} /* hacr_write_slow */ - -/*------------------------------------------------------------------*/ -/* - * Set the channel attention bit. - */ -static inline void set_chan_attn(unsigned long ioaddr, u16 hacr) -{ - hacr_write(ioaddr, hacr | HACR_CA); -} /* set_chan_attn */ - -/*------------------------------------------------------------------*/ -/* - * Reset, and then set host adaptor into default mode. - */ -static inline void wv_hacr_reset(unsigned long ioaddr) -{ - hacr_write_slow(ioaddr, HACR_RESET); - hacr_write(ioaddr, HACR_DEFAULT); -} /* wv_hacr_reset */ - -/*------------------------------------------------------------------*/ -/* - * Set the I/O transfer over the ISA bus to 8-bit mode - */ -static inline void wv_16_off(unsigned long ioaddr, u16 hacr) -{ - hacr &= ~HACR_16BITS; - hacr_write(ioaddr, hacr); -} /* wv_16_off */ - -/*------------------------------------------------------------------*/ -/* - * Set the I/O transfer over the ISA bus to 8-bit mode - */ -static inline void wv_16_on(unsigned long ioaddr, u16 hacr) -{ - hacr |= HACR_16BITS; - hacr_write(ioaddr, hacr); -} /* wv_16_on */ - -/*------------------------------------------------------------------*/ -/* - * Disable interrupts on the WaveLAN hardware. - * (called by wv_82586_stop()) - */ -static inline void wv_ints_off(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - - lp->hacr &= ~HACR_INTRON; - hacr_write(ioaddr, lp->hacr); -} /* wv_ints_off */ - -/*------------------------------------------------------------------*/ -/* - * Enable interrupts on the WaveLAN hardware. - * (called by wv_hw_reset()) - */ -static inline void wv_ints_on(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - - lp->hacr |= HACR_INTRON; - hacr_write(ioaddr, lp->hacr); -} /* wv_ints_on */ - -/******************* MODEM MANAGEMENT SUBROUTINES *******************/ -/* - * Useful subroutines to manage the modem of the WaveLAN - */ - -/*------------------------------------------------------------------*/ -/* - * Read the Parameter Storage Area from the WaveLAN card's memory - */ -/* - * Read bytes from the PSA. - */ -static void psa_read(unsigned long ioaddr, - u16 hacr, - int o, /* offset in PSA */ - u8 *b, /*buffer to fill */ - int n) -{ /* size to read */ - wv_16_off(ioaddr, hacr); - - while (n-- > 0) { - outw(o, PIOR2(ioaddr)); - o++; - *b++ = inb(PIOP2(ioaddr)); - } - - wv_16_on(ioaddr, hacr); -} /* psa_read */ - -/*------------------------------------------------------------------*/ -/* - * Write the Parameter Storage Area to the WaveLAN card's memory. - */ -static void psa_write(unsigned long ioaddr, - u16 hacr, - int o, /* Offset in PSA */ - u8 *b, /*buffer in memory */ - int n) -{ /* Length of buffer */ - int count = 0; - - wv_16_off(ioaddr, hacr); - - while (n-- > 0) { - outw(o, PIOR2(ioaddr)); - o++; - - outb(*b, PIOP2(ioaddr)); - b++; - - /* Wait for the memory to finish its write cycle */ - count = 0; - while ((count++ < 100) && (hasr_read(ioaddr) & HASR_PSA_BUSY)) - mdelay(1); - } - - wv_16_on(ioaddr, hacr); -} /* psa_write */ - -#ifdef SET_PSA_CRC -/*------------------------------------------------------------------*/ -/* - * Calculate the PSA CRC - * Thanks to Valster, Nico for the code - * NOTE: By specifying a length including the CRC position the - * returned value should be zero. (i.e. a correct checksum in the PSA) - * - * The Windows drivers don't use the CRC, but the AP and the PtP tool - * depend on it. - */ -static u16 psa_crc(u8 *psa, /* The PSA */ - int size) -{ /* Number of short for CRC */ - int byte_cnt; /* Loop on the PSA */ - u16 crc_bytes = 0; /* Data in the PSA */ - int bit_cnt; /* Loop on the bits of the short */ - - for (byte_cnt = 0; byte_cnt < size; byte_cnt++) { - crc_bytes ^= psa[byte_cnt]; /* Its an xor */ - - for (bit_cnt = 1; bit_cnt < 9; bit_cnt++) { - if (crc_bytes & 0x0001) - crc_bytes = (crc_bytes >> 1) ^ 0xA001; - else - crc_bytes >>= 1; - } - } - - return crc_bytes; -} /* psa_crc */ -#endif /* SET_PSA_CRC */ - -/*------------------------------------------------------------------*/ -/* - * update the checksum field in the Wavelan's PSA - */ -static void update_psa_checksum(struct net_device *dev, - unsigned long ioaddr, - u16 hacr) -{ -#ifdef SET_PSA_CRC - psa_t psa; - u16 crc; - - /* read the parameter storage area */ - psa_read(ioaddr, hacr, 0, (unsigned char *) &psa, sizeof(psa)); - - /* update the checksum */ - crc = psa_crc((unsigned char *) &psa, - sizeof(psa) - sizeof(psa.psa_crc[0]) - - sizeof(psa.psa_crc[1]) - - sizeof(psa.psa_crc_status)); - - psa.psa_crc[0] = crc & 0xFF; - psa.psa_crc[1] = (crc & 0xFF00) >> 8; - - /* Write it ! */ - psa_write(ioaddr, hacr, (char *) &psa.psa_crc - (char *) &psa, - (unsigned char *) &psa.psa_crc, 2); - -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG "%s: update_psa_checksum(): crc = 0x%02x%02x\n", - dev->name, psa.psa_crc[0], psa.psa_crc[1]); - - /* Check again (luxury !) */ - crc = psa_crc((unsigned char *) &psa, - sizeof(psa) - sizeof(psa.psa_crc_status)); - - if (crc != 0) - printk(KERN_WARNING - "%s: update_psa_checksum(): CRC does not \ - agree with PSA data (even after recalculating)\n", - dev->name); -#endif /* DEBUG_IOCTL_INFO */ -#endif /* SET_PSA_CRC */ -} /* update_psa_checksum */ - -/*------------------------------------------------------------------*/ -/* - * Write 1 byte to the MMC. - */ -static void mmc_out(unsigned long ioaddr, u16 o, u8 d) -{ - int count = 0; - - /* Wait for MMC to go idle */ - while ((count++ < 100) && (inw(HASR(ioaddr)) & HASR_MMC_BUSY)) - udelay(10); - - outw((u16) (((u16) d << 8) | (o << 1) | 1), MMCR(ioaddr)); -} - -/*------------------------------------------------------------------*/ -/* - * Routine to write bytes to the Modem Management Controller. - * We start at the end because it is the way it should be! - */ -static void mmc_write(unsigned long ioaddr, u8 o, u8 *b, int n) -{ - o += n; - b += n; - - while (n-- > 0) - mmc_out(ioaddr, --o, *(--b)); -} /* mmc_write */ - -/*------------------------------------------------------------------*/ -/* - * Read a byte from the MMC. - * Optimised version for 1 byte, avoid using memory. - */ -static u8 mmc_in(unsigned long ioaddr, u16 o) -{ - int count = 0; - - while ((count++ < 100) && (inw(HASR(ioaddr)) & HASR_MMC_BUSY)) - udelay(10); - outw(o << 1, MMCR(ioaddr)); - - while ((count++ < 100) && (inw(HASR(ioaddr)) & HASR_MMC_BUSY)) - udelay(10); - return (u8) (inw(MMCR(ioaddr)) >> 8); -} - -/*------------------------------------------------------------------*/ -/* - * Routine to read bytes from the Modem Management Controller. - * The implementation is complicated by a lack of address lines, - * which prevents decoding of the low-order bit. - * (code has just been moved in the above function) - * We start at the end because it is the way it should be! - */ -static inline void mmc_read(unsigned long ioaddr, u8 o, u8 *b, int n) -{ - o += n; - b += n; - - while (n-- > 0) - *(--b) = mmc_in(ioaddr, --o); -} /* mmc_read */ - -/*------------------------------------------------------------------*/ -/* - * Get the type of encryption available. - */ -static inline int mmc_encr(unsigned long ioaddr) -{ /* I/O port of the card */ - int temp; - - temp = mmc_in(ioaddr, mmroff(0, mmr_des_avail)); - if ((temp != MMR_DES_AVAIL_DES) && (temp != MMR_DES_AVAIL_AES)) - return 0; - else - return temp; -} - -/*------------------------------------------------------------------*/ -/* - * Wait for the frequency EEPROM to complete a command. - * I hope this one will be optimally inlined. - */ -static inline void fee_wait(unsigned long ioaddr, /* I/O port of the card */ - int delay, /*base delay to wait for */ - int number) -{ /* Number of time to wait */ - int count = 0; /* Wait only a limited time */ - - while ((count++ < number) && - (mmc_in(ioaddr, mmroff(0, mmr_fee_status)) & - MMR_FEE_STATUS_BUSY)) - udelay(delay); -} - -/*------------------------------------------------------------------*/ -/* - * Read bytes from the Frequency EEPROM (frequency select cards). - */ -static void fee_read(unsigned long ioaddr, /* I/O port of the card */ - u16 o, /* destination offset */ - u16 *b, /* data buffer */ - int n) -{ /* number of registers */ - b += n; /* Position at the end of the area */ - - /* Write the address */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_addr), o + n - 1); - - /* Loop on all buffer */ - while (n-- > 0) { - /* Write the read command */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), - MMW_FEE_CTRL_READ); - - /* Wait until EEPROM is ready (should be quick). */ - fee_wait(ioaddr, 10, 100); - - /* Read the value. */ - *--b = ((mmc_in(ioaddr, mmroff(0, mmr_fee_data_h)) << 8) | - mmc_in(ioaddr, mmroff(0, mmr_fee_data_l))); - } -} - - -/*------------------------------------------------------------------*/ -/* - * Write bytes from the Frequency EEPROM (frequency select cards). - * This is a bit complicated, because the frequency EEPROM has to - *be unprotected and the write enabled. - * Jean II - */ -static void fee_write(unsigned long ioaddr, /* I/O port of the card */ - u16 o, /* destination offset */ - u16 *b, /* data buffer */ - int n) -{ /* number of registers */ - b += n; /* Position at the end of the area. */ - -#ifdef EEPROM_IS_PROTECTED /* disabled */ -#ifdef DOESNT_SEEM_TO_WORK /* disabled */ - /* Ask to read the protected register */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PRREAD); - - fee_wait(ioaddr, 10, 100); - - /* Read the protected register. */ - printk("Protected 2: %02X-%02X\n", - mmc_in(ioaddr, mmroff(0, mmr_fee_data_h)), - mmc_in(ioaddr, mmroff(0, mmr_fee_data_l))); -#endif /* DOESNT_SEEM_TO_WORK */ - - /* Enable protected register. */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_addr), MMW_FEE_ADDR_EN); - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PREN); - - fee_wait(ioaddr, 10, 100); - - /* Unprotect area. */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_addr), o + n); - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PRWRITE); -#ifdef DOESNT_SEEM_TO_WORK /* disabled */ - /* or use: */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PRCLEAR); -#endif /* DOESNT_SEEM_TO_WORK */ - - fee_wait(ioaddr, 10, 100); -#endif /* EEPROM_IS_PROTECTED */ - - /* Write enable. */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_addr), MMW_FEE_ADDR_EN); - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_WREN); - - fee_wait(ioaddr, 10, 100); - - /* Write the EEPROM address. */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_addr), o + n - 1); - - /* Loop on all buffer */ - while (n-- > 0) { - /* Write the value. */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_data_h), (*--b) >> 8); - mmc_out(ioaddr, mmwoff(0, mmw_fee_data_l), *b & 0xFF); - - /* Write the write command. */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), - MMW_FEE_CTRL_WRITE); - - /* WaveLAN documentation says to - * wait at least 10 ms for EEBUSY = 0 - */ - mdelay(10); - fee_wait(ioaddr, 10, 100); - } - - /* Write disable. */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_addr), MMW_FEE_ADDR_DS); - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_WDS); - - fee_wait(ioaddr, 10, 100); - -#ifdef EEPROM_IS_PROTECTED /* disabled */ - /* Reprotect EEPROM. */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_addr), 0x00); - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PRWRITE); - - fee_wait(ioaddr, 10, 100); -#endif /* EEPROM_IS_PROTECTED */ -} - -/************************ I82586 SUBROUTINES *************************/ -/* - * Useful subroutines to manage the Ethernet controller - */ - -/*------------------------------------------------------------------*/ -/* - * Read bytes from the on-board RAM. - * Why does inlining this function make it fail? - */ -static /*inline */ void obram_read(unsigned long ioaddr, - u16 o, u8 *b, int n) -{ - outw(o, PIOR1(ioaddr)); - insw(PIOP1(ioaddr), (unsigned short *) b, (n + 1) >> 1); -} - -/*------------------------------------------------------------------*/ -/* - * Write bytes to the on-board RAM. - */ -static inline void obram_write(unsigned long ioaddr, u16 o, u8 *b, int n) -{ - outw(o, PIOR1(ioaddr)); - outsw(PIOP1(ioaddr), (unsigned short *) b, (n + 1) >> 1); -} - -/*------------------------------------------------------------------*/ -/* - * Acknowledge the reading of the status issued by the i82586. - */ -static void wv_ack(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - u16 scb_cs; - int i; - - obram_read(ioaddr, scboff(OFFSET_SCB, scb_status), - (unsigned char *) &scb_cs, sizeof(scb_cs)); - scb_cs &= SCB_ST_INT; - - if (scb_cs == 0) - return; - - obram_write(ioaddr, scboff(OFFSET_SCB, scb_command), - (unsigned char *) &scb_cs, sizeof(scb_cs)); - - set_chan_attn(ioaddr, lp->hacr); - - for (i = 1000; i > 0; i--) { - obram_read(ioaddr, scboff(OFFSET_SCB, scb_command), - (unsigned char *) &scb_cs, sizeof(scb_cs)); - if (scb_cs == 0) - break; - - udelay(10); - } - udelay(100); - -#ifdef DEBUG_CONFIG_ERROR - if (i <= 0) - printk(KERN_INFO - "%s: wv_ack(): board not accepting command.\n", - dev->name); -#endif -} - -/*------------------------------------------------------------------*/ -/* - * Set channel attention bit and busy wait until command has - * completed, then acknowledge completion of the command. - */ -static int wv_synchronous_cmd(struct net_device *dev, const char *str) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - u16 scb_cmd; - ach_t cb; - int i; - - scb_cmd = SCB_CMD_CUC & SCB_CMD_CUC_GO; - obram_write(ioaddr, scboff(OFFSET_SCB, scb_command), - (unsigned char *) &scb_cmd, sizeof(scb_cmd)); - - set_chan_attn(ioaddr, lp->hacr); - - for (i = 1000; i > 0; i--) { - obram_read(ioaddr, OFFSET_CU, (unsigned char *) &cb, - sizeof(cb)); - if (cb.ac_status & AC_SFLD_C) - break; - - udelay(10); - } - udelay(100); - - if (i <= 0 || !(cb.ac_status & AC_SFLD_OK)) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_INFO "%s: %s failed; status = 0x%x\n", - dev->name, str, cb.ac_status); -#endif -#ifdef DEBUG_I82586_SHOW - wv_scb_show(ioaddr); -#endif - return -1; - } - - /* Ack the status */ - wv_ack(dev); - - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Configuration commands completion interrupt. - * Check if done, and if OK. - */ -static int -wv_config_complete(struct net_device *dev, unsigned long ioaddr, net_local * lp) -{ - unsigned short mcs_addr; - unsigned short status; - int ret; - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: ->wv_config_complete()\n", dev->name); -#endif - - mcs_addr = lp->tx_first_in_use + sizeof(ac_tx_t) + sizeof(ac_nop_t) - + sizeof(tbd_t) + sizeof(ac_cfg_t) + sizeof(ac_ias_t); - - /* Read the status of the last command (set mc list). */ - obram_read(ioaddr, acoff(mcs_addr, ac_status), - (unsigned char *) &status, sizeof(status)); - - /* If not completed -> exit */ - if ((status & AC_SFLD_C) == 0) - ret = 0; /* Not ready to be scrapped */ - else { -#ifdef DEBUG_CONFIG_ERROR - unsigned short cfg_addr; - unsigned short ias_addr; - - /* Check mc_config command */ - if ((status & AC_SFLD_OK) != AC_SFLD_OK) - printk(KERN_INFO - "%s: wv_config_complete(): \ - set_multicast_address failed; status = 0x%x\n", - dev->name, status); - - /* check ia-config command */ - ias_addr = mcs_addr - sizeof(ac_ias_t); - obram_read(ioaddr, acoff(ias_addr, ac_status), - (unsigned char *) &status, sizeof(status)); - if ((status & AC_SFLD_OK) != AC_SFLD_OK) - printk(KERN_INFO - "%s: wv_config_complete(): set_MAC_address \ - failed; status = 0x%x\n", - dev->name, status); - - /* Check config command. */ - cfg_addr = ias_addr - sizeof(ac_cfg_t); - obram_read(ioaddr, acoff(cfg_addr, ac_status), - (unsigned char *) &status, sizeof(status)); - if ((status & AC_SFLD_OK) != AC_SFLD_OK) - printk(KERN_INFO - "%s: wv_config_complete(): configure failed; \ - status = 0x%x\n", - dev->name, status); -#endif /* DEBUG_CONFIG_ERROR */ - - ret = 1; /* Ready to be scrapped */ - } - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: <-wv_config_complete() - %d\n", dev->name, - ret); -#endif - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Command completion interrupt. - * Reclaim as many freed tx buffers as we can. - * (called in wavelan_interrupt()). - * Note : the spinlock is already grabbed for us. - */ -static int wv_complete(struct net_device *dev, - unsigned long ioaddr, - net_local *lp) -{ - int nreaped = 0; - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: ->wv_complete()\n", dev->name); -#endif - - /* Loop on all the transmit buffers */ - while (lp->tx_first_in_use != I82586NULL) { - unsigned short tx_status; - - /* Read the first transmit buffer */ - obram_read(ioaddr, acoff(lp->tx_first_in_use, ac_status), - (unsigned char *) &tx_status, - sizeof(tx_status)); - - /* If not completed -> exit */ - if ((tx_status & AC_SFLD_C) == 0) - break; - - /* Hack for reconfiguration */ - if (tx_status == 0xFFFF) - if (!wv_config_complete(dev, ioaddr, lp)) - break; /* Not completed */ - - /* We now remove this buffer */ - nreaped++; - --lp->tx_n_in_use; - -/* -if (lp->tx_n_in_use > 0) - printk("%c", "0123456789abcdefghijk"[lp->tx_n_in_use]); -*/ - - /* Was it the last one? */ - if (lp->tx_n_in_use <= 0) - lp->tx_first_in_use = I82586NULL; - else { - /* Next one in the chain */ - lp->tx_first_in_use += TXBLOCKZ; - if (lp->tx_first_in_use >= - OFFSET_CU + NTXBLOCKS * TXBLOCKZ) - lp->tx_first_in_use -= NTXBLOCKS * TXBLOCKZ; - } - - /* Hack for reconfiguration */ - if (tx_status == 0xFFFF) - continue; - - /* Now, check status of the finished command */ - if (tx_status & AC_SFLD_OK) { - int ncollisions; - - dev->stats.tx_packets++; - ncollisions = tx_status & AC_SFLD_MAXCOL; - dev->stats.collisions += ncollisions; -#ifdef DEBUG_TX_INFO - if (ncollisions > 0) - printk(KERN_DEBUG - "%s: wv_complete(): tx completed after \ - %d collisions.\n", - dev->name, ncollisions); -#endif - } else { - dev->stats.tx_errors++; - if (tx_status & AC_SFLD_S10) { - dev->stats.tx_carrier_errors++; -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG - "%s: wv_complete(): tx error: no CS.\n", - dev->name); -#endif - } - if (tx_status & AC_SFLD_S9) { - dev->stats.tx_carrier_errors++; -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG - "%s: wv_complete(): tx error: \ - lost CTS.\n", - dev->name); -#endif - } - if (tx_status & AC_SFLD_S8) { - dev->stats.tx_fifo_errors++; -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG - "%s: wv_complete(): tx error: \ - slow DMA.\n", - dev->name); -#endif - } - if (tx_status & AC_SFLD_S6) { - dev->stats.tx_heartbeat_errors++; -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG - "%s: wv_complete(): tx error: \ - heart beat.\n", - dev->name); -#endif - } - if (tx_status & AC_SFLD_S5) { - dev->stats.tx_aborted_errors++; -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG - "%s: wv_complete(): tx error: \ - too many collisions.\n", - dev->name); -#endif - } - } - -#ifdef DEBUG_TX_INFO - printk(KERN_DEBUG - "%s: wv_complete(): tx completed, tx_status 0x%04x\n", - dev->name, tx_status); -#endif - } - -#ifdef DEBUG_INTERRUPT_INFO - if (nreaped > 1) - printk(KERN_DEBUG "%s: wv_complete(): reaped %d\n", - dev->name, nreaped); -#endif - - /* - * Inform upper layers. - */ - if (lp->tx_n_in_use < NTXBLOCKS - 1) - netif_wake_queue(dev); - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: <-wv_complete()\n", dev->name); -#endif - return nreaped; -} - -/*------------------------------------------------------------------*/ -/* - * Reconfigure the i82586, or at least ask for it. - *because wv_82586_config uses a transmission buffer, we must do it - * when we are sure that there is one left, so we do it now - * or in wavelan_packet_xmit() (I can't find any better place, - * wavelan_interrupt is not an option), so you may experience - * delays sometimes. - */ -static void wv_82586_reconfig(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long flags; - - /* Arm the flag, will be cleard in wv_82586_config() */ - lp->reconfig_82586 = 1; - - /* Check if we can do it now ! */ - if ((netif_running(dev)) && !(netif_queue_stopped(dev))) { - spin_lock_irqsave(&lp->spinlock, flags); - /* May fail */ - wv_82586_config(dev); - spin_unlock_irqrestore(&lp->spinlock, flags); - } else { -#ifdef DEBUG_CONFIG_INFO - printk(KERN_DEBUG - "%s: wv_82586_reconfig(): delayed (state = %lX)\n", - dev->name, dev->state); -#endif - } -} - -/********************* DEBUG & INFO SUBROUTINES *********************/ -/* - * This routine is used in the code to show information for debugging. - * Most of the time, it dumps the contents of hardware structures. - */ - -#ifdef DEBUG_PSA_SHOW -/*------------------------------------------------------------------*/ -/* - * Print the formatted contents of the Parameter Storage Area. - */ -static void wv_psa_show(psa_t *p) -{ - printk(KERN_DEBUG "##### WaveLAN PSA contents: #####\n"); - printk(KERN_DEBUG "psa_io_base_addr_1: 0x%02X %02X %02X %02X\n", - p->psa_io_base_addr_1, - p->psa_io_base_addr_2, - p->psa_io_base_addr_3, p->psa_io_base_addr_4); - printk(KERN_DEBUG "psa_rem_boot_addr_1: 0x%02X %02X %02X\n", - p->psa_rem_boot_addr_1, - p->psa_rem_boot_addr_2, p->psa_rem_boot_addr_3); - printk(KERN_DEBUG "psa_holi_params: 0x%02x, ", p->psa_holi_params); - printk("psa_int_req_no: %d\n", p->psa_int_req_no); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "psa_unused0[]: %pM\n", p->psa_unused0); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "psa_univ_mac_addr[]: %pM\n", p->psa_univ_mac_addr); - printk(KERN_DEBUG "psa_local_mac_addr[]: %pM\n", p->psa_local_mac_addr); - printk(KERN_DEBUG "psa_univ_local_sel: %d, ", - p->psa_univ_local_sel); - printk("psa_comp_number: %d, ", p->psa_comp_number); - printk("psa_thr_pre_set: 0x%02x\n", p->psa_thr_pre_set); - printk(KERN_DEBUG "psa_feature_select/decay_prm: 0x%02x, ", - p->psa_feature_select); - printk("psa_subband/decay_update_prm: %d\n", p->psa_subband); - printk(KERN_DEBUG "psa_quality_thr: 0x%02x, ", p->psa_quality_thr); - printk("psa_mod_delay: 0x%02x\n", p->psa_mod_delay); - printk(KERN_DEBUG "psa_nwid: 0x%02x%02x, ", p->psa_nwid[0], - p->psa_nwid[1]); - printk("psa_nwid_select: %d\n", p->psa_nwid_select); - printk(KERN_DEBUG "psa_encryption_select: %d, ", - p->psa_encryption_select); - printk - ("psa_encryption_key[]: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", - p->psa_encryption_key[0], p->psa_encryption_key[1], - p->psa_encryption_key[2], p->psa_encryption_key[3], - p->psa_encryption_key[4], p->psa_encryption_key[5], - p->psa_encryption_key[6], p->psa_encryption_key[7]); - printk(KERN_DEBUG "psa_databus_width: %d\n", p->psa_databus_width); - printk(KERN_DEBUG "psa_call_code/auto_squelch: 0x%02x, ", - p->psa_call_code[0]); - printk - ("psa_call_code[]: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n", - p->psa_call_code[0], p->psa_call_code[1], p->psa_call_code[2], - p->psa_call_code[3], p->psa_call_code[4], p->psa_call_code[5], - p->psa_call_code[6], p->psa_call_code[7]); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "psa_reserved[]: %02X:%02X\n", - p->psa_reserved[0], - p->psa_reserved[1]); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "psa_conf_status: %d, ", p->psa_conf_status); - printk("psa_crc: 0x%02x%02x, ", p->psa_crc[0], p->psa_crc[1]); - printk("psa_crc_status: 0x%02x\n", p->psa_crc_status); -} /* wv_psa_show */ -#endif /* DEBUG_PSA_SHOW */ - -#ifdef DEBUG_MMC_SHOW -/*------------------------------------------------------------------*/ -/* - * Print the formatted status of the Modem Management Controller. - * This function needs to be completed. - */ -static void wv_mmc_show(struct net_device *dev) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); - mmr_t m; - - /*basic check */ - if (hasr_read(ioaddr) & HASR_NO_CLK) { - printk(KERN_WARNING - "%s: wv_mmc_show: modem not connected\n", - dev->name); - return; - } - - /* Read the mmc */ - mmc_out(ioaddr, mmwoff(0, mmw_freeze), 1); - mmc_read(ioaddr, 0, (u8 *) &m, sizeof(m)); - mmc_out(ioaddr, mmwoff(0, mmw_freeze), 0); - - /* Don't forget to update statistics */ - lp->wstats.discard.nwid += - (m.mmr_wrong_nwid_h << 8) | m.mmr_wrong_nwid_l; - - printk(KERN_DEBUG "##### WaveLAN modem status registers: #####\n"); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG - "mmc_unused0[]: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n", - m.mmr_unused0[0], m.mmr_unused0[1], m.mmr_unused0[2], - m.mmr_unused0[3], m.mmr_unused0[4], m.mmr_unused0[5], - m.mmr_unused0[6], m.mmr_unused0[7]); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "Encryption algorithm: %02X - Status: %02X\n", - m.mmr_des_avail, m.mmr_des_status); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "mmc_unused1[]: %02X:%02X:%02X:%02X:%02X\n", - m.mmr_unused1[0], - m.mmr_unused1[1], - m.mmr_unused1[2], m.mmr_unused1[3], m.mmr_unused1[4]); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "dce_status: 0x%x [%s%s%s%s]\n", - m.mmr_dce_status, - (m. - mmr_dce_status & MMR_DCE_STATUS_RX_BUSY) ? - "energy detected," : "", - (m. - mmr_dce_status & MMR_DCE_STATUS_LOOPT_IND) ? - "loop test indicated," : "", - (m. - mmr_dce_status & MMR_DCE_STATUS_TX_BUSY) ? - "transmitter on," : "", - (m. - mmr_dce_status & MMR_DCE_STATUS_JBR_EXPIRED) ? - "jabber timer expired," : ""); - printk(KERN_DEBUG "Dsp ID: %02X\n", m.mmr_dsp_id); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "mmc_unused2[]: %02X:%02X\n", - m.mmr_unused2[0], m.mmr_unused2[1]); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "# correct_nwid: %d, # wrong_nwid: %d\n", - (m.mmr_correct_nwid_h << 8) | m.mmr_correct_nwid_l, - (m.mmr_wrong_nwid_h << 8) | m.mmr_wrong_nwid_l); - printk(KERN_DEBUG "thr_pre_set: 0x%x [current signal %s]\n", - m.mmr_thr_pre_set & MMR_THR_PRE_SET, - (m. - mmr_thr_pre_set & MMR_THR_PRE_SET_CUR) ? "above" : - "below"); - printk(KERN_DEBUG "signal_lvl: %d [%s], ", - m.mmr_signal_lvl & MMR_SIGNAL_LVL, - (m. - mmr_signal_lvl & MMR_SIGNAL_LVL_VALID) ? "new msg" : - "no new msg"); - printk("silence_lvl: %d [%s], ", - m.mmr_silence_lvl & MMR_SILENCE_LVL, - (m. - mmr_silence_lvl & MMR_SILENCE_LVL_VALID) ? "update done" : - "no new update"); - printk("sgnl_qual: 0x%x [%s]\n", m.mmr_sgnl_qual & MMR_SGNL_QUAL, - (m. - mmr_sgnl_qual & MMR_SGNL_QUAL_ANT) ? "Antenna 1" : - "Antenna 0"); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "netw_id_l: %x\n", m.mmr_netw_id_l); -#endif /* DEBUG_SHOW_UNUSED */ -} /* wv_mmc_show */ -#endif /* DEBUG_MMC_SHOW */ - -#ifdef DEBUG_I82586_SHOW -/*------------------------------------------------------------------*/ -/* - * Print the last block of the i82586 memory. - */ -static void wv_scb_show(unsigned long ioaddr) -{ - scb_t scb; - - obram_read(ioaddr, OFFSET_SCB, (unsigned char *) &scb, - sizeof(scb)); - - printk(KERN_DEBUG "##### WaveLAN system control block: #####\n"); - - printk(KERN_DEBUG "status: "); - printk("stat 0x%x[%s%s%s%s] ", - (scb. - scb_status & (SCB_ST_CX | SCB_ST_FR | SCB_ST_CNA | - SCB_ST_RNR)) >> 12, - (scb. - scb_status & SCB_ST_CX) ? "command completion interrupt," : - "", (scb.scb_status & SCB_ST_FR) ? "frame received," : "", - (scb. - scb_status & SCB_ST_CNA) ? "command unit not active," : "", - (scb. - scb_status & SCB_ST_RNR) ? "receiving unit not ready," : - ""); - printk("cus 0x%x[%s%s%s] ", (scb.scb_status & SCB_ST_CUS) >> 8, - ((scb.scb_status & SCB_ST_CUS) == - SCB_ST_CUS_IDLE) ? "idle" : "", - ((scb.scb_status & SCB_ST_CUS) == - SCB_ST_CUS_SUSP) ? "suspended" : "", - ((scb.scb_status & SCB_ST_CUS) == - SCB_ST_CUS_ACTV) ? "active" : ""); - printk("rus 0x%x[%s%s%s%s]\n", (scb.scb_status & SCB_ST_RUS) >> 4, - ((scb.scb_status & SCB_ST_RUS) == - SCB_ST_RUS_IDLE) ? "idle" : "", - ((scb.scb_status & SCB_ST_RUS) == - SCB_ST_RUS_SUSP) ? "suspended" : "", - ((scb.scb_status & SCB_ST_RUS) == - SCB_ST_RUS_NRES) ? "no resources" : "", - ((scb.scb_status & SCB_ST_RUS) == - SCB_ST_RUS_RDY) ? "ready" : ""); - - printk(KERN_DEBUG "command: "); - printk("ack 0x%x[%s%s%s%s] ", - (scb. - scb_command & (SCB_CMD_ACK_CX | SCB_CMD_ACK_FR | - SCB_CMD_ACK_CNA | SCB_CMD_ACK_RNR)) >> 12, - (scb. - scb_command & SCB_CMD_ACK_CX) ? "ack cmd completion," : "", - (scb. - scb_command & SCB_CMD_ACK_FR) ? "ack frame received," : "", - (scb. - scb_command & SCB_CMD_ACK_CNA) ? "ack CU not active," : "", - (scb. - scb_command & SCB_CMD_ACK_RNR) ? "ack RU not ready," : ""); - printk("cuc 0x%x[%s%s%s%s%s] ", - (scb.scb_command & SCB_CMD_CUC) >> 8, - ((scb.scb_command & SCB_CMD_CUC) == - SCB_CMD_CUC_NOP) ? "nop" : "", - ((scb.scb_command & SCB_CMD_CUC) == - SCB_CMD_CUC_GO) ? "start cbl_offset" : "", - ((scb.scb_command & SCB_CMD_CUC) == - SCB_CMD_CUC_RES) ? "resume execution" : "", - ((scb.scb_command & SCB_CMD_CUC) == - SCB_CMD_CUC_SUS) ? "suspend execution" : "", - ((scb.scb_command & SCB_CMD_CUC) == - SCB_CMD_CUC_ABT) ? "abort execution" : ""); - printk("ruc 0x%x[%s%s%s%s%s]\n", - (scb.scb_command & SCB_CMD_RUC) >> 4, - ((scb.scb_command & SCB_CMD_RUC) == - SCB_CMD_RUC_NOP) ? "nop" : "", - ((scb.scb_command & SCB_CMD_RUC) == - SCB_CMD_RUC_GO) ? "start rfa_offset" : "", - ((scb.scb_command & SCB_CMD_RUC) == - SCB_CMD_RUC_RES) ? "resume reception" : "", - ((scb.scb_command & SCB_CMD_RUC) == - SCB_CMD_RUC_SUS) ? "suspend reception" : "", - ((scb.scb_command & SCB_CMD_RUC) == - SCB_CMD_RUC_ABT) ? "abort reception" : ""); - - printk(KERN_DEBUG "cbl_offset 0x%x ", scb.scb_cbl_offset); - printk("rfa_offset 0x%x\n", scb.scb_rfa_offset); - - printk(KERN_DEBUG "crcerrs %d ", scb.scb_crcerrs); - printk("alnerrs %d ", scb.scb_alnerrs); - printk("rscerrs %d ", scb.scb_rscerrs); - printk("ovrnerrs %d\n", scb.scb_ovrnerrs); -} - -/*------------------------------------------------------------------*/ -/* - * Print the formatted status of the i82586's receive unit. - */ -static void wv_ru_show(struct net_device *dev) -{ - printk(KERN_DEBUG - "##### WaveLAN i82586 receiver unit status: #####\n"); - printk(KERN_DEBUG "ru:"); - /* - * Not implemented yet - */ - printk("\n"); -} /* wv_ru_show */ - -/*------------------------------------------------------------------*/ -/* - * Display info about one control block of the i82586 memory. - */ -static void wv_cu_show_one(struct net_device *dev, net_local * lp, int i, u16 p) -{ - unsigned long ioaddr; - ac_tx_t actx; - - ioaddr = dev->base_addr; - - printk("%d: 0x%x:", i, p); - - obram_read(ioaddr, p, (unsigned char *) &actx, sizeof(actx)); - printk(" status=0x%x,", actx.tx_h.ac_status); - printk(" command=0x%x,", actx.tx_h.ac_command); - - /* - { - tbd_t tbd; - - obram_read(ioaddr, actx.tx_tbd_offset, (unsigned char *)&tbd, sizeof(tbd)); - printk(" tbd_status=0x%x,", tbd.tbd_status); - } - */ - - printk("|"); -} - -/*------------------------------------------------------------------*/ -/* - * Print status of the command unit of the i82586. - */ -static void wv_cu_show(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned int i; - u16 p; - - printk(KERN_DEBUG - "##### WaveLAN i82586 command unit status: #####\n"); - - printk(KERN_DEBUG); - for (i = 0, p = lp->tx_first_in_use; i < NTXBLOCKS; i++) { - wv_cu_show_one(dev, lp, i, p); - - p += TXBLOCKZ; - if (p >= OFFSET_CU + NTXBLOCKS * TXBLOCKZ) - p -= NTXBLOCKS * TXBLOCKZ; - } - printk("\n"); -} -#endif /* DEBUG_I82586_SHOW */ - -#ifdef DEBUG_DEVICE_SHOW -/*------------------------------------------------------------------*/ -/* - * Print the formatted status of the WaveLAN PCMCIA device driver. - */ -static void wv_dev_show(struct net_device *dev) -{ - printk(KERN_DEBUG "dev:"); - printk(" state=%lX,", dev->state); - printk(" trans_start=%ld,", dev->trans_start); - printk(" flags=0x%x,", dev->flags); - printk("\n"); -} /* wv_dev_show */ - -/*------------------------------------------------------------------*/ -/* - * Print the formatted status of the WaveLAN PCMCIA device driver's - * private information. - */ -static void wv_local_show(struct net_device *dev) -{ - net_local *lp; - - lp = netdev_priv(dev); - - printk(KERN_DEBUG "local:"); - printk(" tx_n_in_use=%d,", lp->tx_n_in_use); - printk(" hacr=0x%x,", lp->hacr); - printk(" rx_head=0x%x,", lp->rx_head); - printk(" rx_last=0x%x,", lp->rx_last); - printk(" tx_first_free=0x%x,", lp->tx_first_free); - printk(" tx_first_in_use=0x%x,", lp->tx_first_in_use); - printk("\n"); -} /* wv_local_show */ -#endif /* DEBUG_DEVICE_SHOW */ - -#if defined(DEBUG_RX_INFO) || defined(DEBUG_TX_INFO) -/*------------------------------------------------------------------*/ -/* - * Dump packet header (and content if necessary) on the screen - */ -static inline void wv_packet_info(u8 * p, /* Packet to dump */ - int length, /* Length of the packet */ - char *msg1, /* Name of the device */ - char *msg2) -{ /* Name of the function */ - int i; - int maxi; - - printk(KERN_DEBUG - "%s: %s(): dest %pM, length %d\n", - msg1, msg2, p, length); - printk(KERN_DEBUG - "%s: %s(): src %pM, type 0x%02X%02X\n", - msg1, msg2, &p[6], p[12], p[13]); - -#ifdef DEBUG_PACKET_DUMP - - printk(KERN_DEBUG "data=\""); - - if ((maxi = length) > DEBUG_PACKET_DUMP) - maxi = DEBUG_PACKET_DUMP; - for (i = 14; i < maxi; i++) - if (p[i] >= ' ' && p[i] <= '~') - printk(" %c", p[i]); - else - printk("%02X", p[i]); - if (maxi < length) - printk(".."); - printk("\"\n"); - printk(KERN_DEBUG "\n"); -#endif /* DEBUG_PACKET_DUMP */ -} -#endif /* defined(DEBUG_RX_INFO) || defined(DEBUG_TX_INFO) */ - -/*------------------------------------------------------------------*/ -/* - * This is the information which is displayed by the driver at startup. - * There are lots of flags for configuring it to your liking. - */ -static void wv_init_info(struct net_device *dev) -{ - short ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); - psa_t psa; - - /* Read the parameter storage area */ - psa_read(ioaddr, lp->hacr, 0, (unsigned char *) &psa, sizeof(psa)); - -#ifdef DEBUG_PSA_SHOW - wv_psa_show(&psa); -#endif -#ifdef DEBUG_MMC_SHOW - wv_mmc_show(dev); -#endif -#ifdef DEBUG_I82586_SHOW - wv_cu_show(dev); -#endif - -#ifdef DEBUG_BASIC_SHOW - /* Now, let's go for the basic stuff. */ - printk(KERN_NOTICE "%s: WaveLAN at %#x, %pM, IRQ %d", - dev->name, ioaddr, dev->dev_addr, dev->irq); - - /* Print current network ID. */ - if (psa.psa_nwid_select) - printk(", nwid 0x%02X-%02X", psa.psa_nwid[0], - psa.psa_nwid[1]); - else - printk(", nwid off"); - - /* If 2.00 card */ - if (!(mmc_in(ioaddr, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) { - unsigned short freq; - - /* Ask the EEPROM to read the frequency from the first area. */ - fee_read(ioaddr, 0x00, &freq, 1); - - /* Print frequency */ - printk(", 2.00, %ld", (freq >> 6) + 2400L); - - /* Hack! */ - if (freq & 0x20) - printk(".5"); - } else { - printk(", PC"); - switch (psa.psa_comp_number) { - case PSA_COMP_PC_AT_915: - case PSA_COMP_PC_AT_2400: - printk("-AT"); - break; - case PSA_COMP_PC_MC_915: - case PSA_COMP_PC_MC_2400: - printk("-MC"); - break; - case PSA_COMP_PCMCIA_915: - printk("MCIA"); - break; - default: - printk("?"); - } - printk(", "); - switch (psa.psa_subband) { - case PSA_SUBBAND_915: - printk("915"); - break; - case PSA_SUBBAND_2425: - printk("2425"); - break; - case PSA_SUBBAND_2460: - printk("2460"); - break; - case PSA_SUBBAND_2484: - printk("2484"); - break; - case PSA_SUBBAND_2430_5: - printk("2430.5"); - break; - default: - printk("?"); - } - } - - printk(" MHz\n"); -#endif /* DEBUG_BASIC_SHOW */ - -#ifdef DEBUG_VERSION_SHOW - /* Print version information */ - printk(KERN_NOTICE "%s", version); -#endif -} /* wv_init_info */ - -/********************* IOCTL, STATS & RECONFIG *********************/ -/* - * We found here routines that are called by Linux on different - * occasions after the configuration and not for transmitting data - * These may be called when the user use ifconfig, /proc/net/dev - * or wireless extensions - */ - - -/*------------------------------------------------------------------*/ -/* - * Set or clear the multicast filter for this adaptor. - * num_addrs == -1 Promiscuous mode, receive all packets - * num_addrs == 0 Normal mode, clear multicast list - * num_addrs > 0 Multicast mode, receive normal and MC packets, - * and do best-effort filtering. - */ -static void wavelan_set_multicast_list(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - -#ifdef DEBUG_IOCTL_TRACE - printk(KERN_DEBUG "%s: ->wavelan_set_multicast_list()\n", - dev->name); -#endif - -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG - "%s: wavelan_set_multicast_list(): setting Rx mode %02X to %d addresses.\n", - dev->name, dev->flags, netdev_mc_count(dev)); -#endif - - /* Are we asking for promiscuous mode, - * or all multicast addresses (we don't have that!) - * or too many multicast addresses for the hardware filter? */ - if ((dev->flags & IFF_PROMISC) || - (dev->flags & IFF_ALLMULTI) || - (netdev_mc_count(dev) > I82586_MAX_MULTICAST_ADDRESSES)) { - /* - * Enable promiscuous mode: receive all packets. - */ - if (!lp->promiscuous) { - lp->promiscuous = 1; - lp->mc_count = 0; - - wv_82586_reconfig(dev); - } - } else - /* Are there multicast addresses to send? */ - if (!netdev_mc_empty(dev)) { - /* - * Disable promiscuous mode, but receive all packets - * in multicast list - */ -#ifdef MULTICAST_AVOID - if (lp->promiscuous || (netdev_mc_count(dev) != lp->mc_count)) -#endif - { - lp->promiscuous = 0; - lp->mc_count = netdev_mc_count(dev); - - wv_82586_reconfig(dev); - } - } else { - /* - * Switch to normal mode: disable promiscuous mode and - * clear the multicast list. - */ - if (lp->promiscuous || lp->mc_count == 0) { - lp->promiscuous = 0; - lp->mc_count = 0; - - wv_82586_reconfig(dev); - } - } -#ifdef DEBUG_IOCTL_TRACE - printk(KERN_DEBUG "%s: <-wavelan_set_multicast_list()\n", - dev->name); -#endif -} - -/*------------------------------------------------------------------*/ -/* - * This function doesn't exist. - * (Note : it was a nice way to test the reconfigure stuff...) - */ -#ifdef SET_MAC_ADDRESS -static int wavelan_set_mac_address(struct net_device *dev, void *addr) -{ - struct sockaddr *mac = addr; - - /* Copy the address. */ - memcpy(dev->dev_addr, mac->sa_data, WAVELAN_ADDR_SIZE); - - /* Reconfigure the beast. */ - wv_82586_reconfig(dev); - - return 0; -} -#endif /* SET_MAC_ADDRESS */ - - -/*------------------------------------------------------------------*/ -/* - * Frequency setting (for hardware capable of it) - * It's a bit complicated and you don't really want to look into it. - * (called in wavelan_ioctl) - */ -static int wv_set_frequency(unsigned long ioaddr, /* I/O port of the card */ - iw_freq * frequency) -{ - const int BAND_NUM = 10; /* Number of bands */ - long freq = 0L; /* offset to 2.4 GHz in .5 MHz */ -#ifdef DEBUG_IOCTL_INFO - int i; -#endif - - /* Setting by frequency */ - /* Theoretically, you may set any frequency between - * the two limits with a 0.5 MHz precision. In practice, - * I don't want you to have trouble with local regulations. - */ - if ((frequency->e == 1) && - (frequency->m >= (int) 2.412e8) - && (frequency->m <= (int) 2.487e8)) { - freq = ((frequency->m / 10000) - 24000L) / 5; - } - - /* Setting by channel (same as wfreqsel) */ - /* Warning: each channel is 22 MHz wide, so some of the channels - * will interfere. */ - if ((frequency->e == 0) && (frequency->m < BAND_NUM)) { - /* Get frequency offset. */ - freq = channel_bands[frequency->m] >> 1; - } - - /* Verify that the frequency is allowed. */ - if (freq != 0L) { - u16 table[10]; /* Authorized frequency table */ - - /* Read the frequency table. */ - fee_read(ioaddr, 0x71, table, 10); - -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG "Frequency table: "); - for (i = 0; i < 10; i++) { - printk(" %04X", table[i]); - } - printk("\n"); -#endif - - /* Look in the table to see whether the frequency is allowed. */ - if (!(table[9 - ((freq - 24) / 16)] & - (1 << ((freq - 24) % 16)))) return -EINVAL; /* not allowed */ - } else - return -EINVAL; - - /* if we get a usable frequency */ - if (freq != 0L) { - unsigned short area[16]; - unsigned short dac[2]; - unsigned short area_verify[16]; - unsigned short dac_verify[2]; - /* Corresponding gain (in the power adjust value table) - * See AT&T WaveLAN Data Manual, REF 407-024689/E, page 3-8 - * and WCIN062D.DOC, page 6.2.9. */ - unsigned short power_limit[] = { 40, 80, 120, 160, 0 }; - int power_band = 0; /* Selected band */ - unsigned short power_adjust; /* Correct value */ - - /* Search for the gain. */ - power_band = 0; - while ((freq > power_limit[power_band]) && - (power_limit[++power_band] != 0)); - - /* Read the first area. */ - fee_read(ioaddr, 0x00, area, 16); - - /* Read the DAC. */ - fee_read(ioaddr, 0x60, dac, 2); - - /* Read the new power adjust value. */ - fee_read(ioaddr, 0x6B - (power_band >> 1), &power_adjust, - 1); - if (power_band & 0x1) - power_adjust >>= 8; - else - power_adjust &= 0xFF; - -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG "WaveLAN EEPROM Area 1: "); - for (i = 0; i < 16; i++) { - printk(" %04X", area[i]); - } - printk("\n"); - - printk(KERN_DEBUG "WaveLAN EEPROM DAC: %04X %04X\n", - dac[0], dac[1]); -#endif - - /* Frequency offset (for info only) */ - area[0] = ((freq << 5) & 0xFFE0) | (area[0] & 0x1F); - - /* Receiver Principle main divider coefficient */ - area[3] = (freq >> 1) + 2400L - 352L; - area[2] = ((freq & 0x1) << 4) | (area[2] & 0xFFEF); - - /* Transmitter Main divider coefficient */ - area[13] = (freq >> 1) + 2400L; - area[12] = ((freq & 0x1) << 4) | (area[2] & 0xFFEF); - - /* Other parts of the area are flags, bit streams or unused. */ - - /* Set the value in the DAC. */ - dac[1] = ((power_adjust >> 1) & 0x7F) | (dac[1] & 0xFF80); - dac[0] = ((power_adjust & 0x1) << 4) | (dac[0] & 0xFFEF); - - /* Write the first area. */ - fee_write(ioaddr, 0x00, area, 16); - - /* Write the DAC. */ - fee_write(ioaddr, 0x60, dac, 2); - - /* We now should verify here that the writing of the EEPROM went OK. */ - - /* Reread the first area. */ - fee_read(ioaddr, 0x00, area_verify, 16); - - /* Reread the DAC. */ - fee_read(ioaddr, 0x60, dac_verify, 2); - - /* Compare. */ - if (memcmp(area, area_verify, 16 * 2) || - memcmp(dac, dac_verify, 2 * 2)) { -#ifdef DEBUG_IOCTL_ERROR - printk(KERN_INFO - "WaveLAN: wv_set_frequency: unable to write new frequency to EEPROM(?).\n"); -#endif - return -EOPNOTSUPP; - } - - /* We must download the frequency parameters to the - * synthesizers (from the EEPROM - area 1) - * Note: as the EEPROM is automatically decremented, we set the end - * if the area... */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_addr), 0x0F); - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), - MMW_FEE_CTRL_READ | MMW_FEE_CTRL_DWLD); - - /* Wait until the download is finished. */ - fee_wait(ioaddr, 100, 100); - - /* We must now download the power adjust value (gain) to - * the synthesizers (from the EEPROM - area 7 - DAC). */ - mmc_out(ioaddr, mmwoff(0, mmw_fee_addr), 0x61); - mmc_out(ioaddr, mmwoff(0, mmw_fee_ctrl), - MMW_FEE_CTRL_READ | MMW_FEE_CTRL_DWLD); - - /* Wait for the download to finish. */ - fee_wait(ioaddr, 100, 100); - -#ifdef DEBUG_IOCTL_INFO - /* Verification of what we have done */ - - printk(KERN_DEBUG "WaveLAN EEPROM Area 1: "); - for (i = 0; i < 16; i++) { - printk(" %04X", area_verify[i]); - } - printk("\n"); - - printk(KERN_DEBUG "WaveLAN EEPROM DAC: %04X %04X\n", - dac_verify[0], dac_verify[1]); -#endif - - return 0; - } else - return -EINVAL; /*bah, never get there... */ -} - -/*------------------------------------------------------------------*/ -/* - * Give the list of available frequencies. - */ -static int wv_frequency_list(unsigned long ioaddr, /* I/O port of the card */ - iw_freq * list, /* List of frequencies to fill */ - int max) -{ /* Maximum number of frequencies */ - u16 table[10]; /* Authorized frequency table */ - long freq = 0L; /* offset to 2.4 GHz in .5 MHz + 12 MHz */ - int i; /* index in the table */ - int c = 0; /* Channel number */ - - /* Read the frequency table. */ - fee_read(ioaddr, 0x71 /* frequency table */ , table, 10); - - /* Check all frequencies. */ - i = 0; - for (freq = 0; freq < 150; freq++) - /* Look in the table if the frequency is allowed */ - if (table[9 - (freq / 16)] & (1 << (freq % 16))) { - /* Compute approximate channel number */ - while ((c < ARRAY_SIZE(channel_bands)) && - (((channel_bands[c] >> 1) - 24) < freq)) - c++; - list[i].i = c; /* Set the list index */ - - /* put in the list */ - list[i].m = (((freq + 24) * 5) + 24000L) * 10000; - list[i++].e = 1; - - /* Check number. */ - if (i >= max) - return (i); - } - - return (i); -} - -#ifdef IW_WIRELESS_SPY -/*------------------------------------------------------------------*/ -/* - * Gather wireless spy statistics: for each packet, compare the source - * address with our list, and if they match, get the statistics. - * Sorry, but this function really needs the wireless extensions. - */ -static inline void wl_spy_gather(struct net_device *dev, - u8 * mac, /* MAC address */ - u8 * stats) /* Statistics to gather */ -{ - struct iw_quality wstats; - - wstats.qual = stats[2] & MMR_SGNL_QUAL; - wstats.level = stats[0] & MMR_SIGNAL_LVL; - wstats.noise = stats[1] & MMR_SILENCE_LVL; - wstats.updated = 0x7; - - /* Update spy records */ - wireless_spy_update(dev, mac, &wstats); -} -#endif /* IW_WIRELESS_SPY */ - -#ifdef HISTOGRAM -/*------------------------------------------------------------------*/ -/* - * This function calculates a histogram of the signal level. - * As the noise is quite constant, it's like doing it on the SNR. - * We have defined a set of interval (lp->his_range), and each time - * the level goes in that interval, we increment the count (lp->his_sum). - * With this histogram you may detect if one WaveLAN is really weak, - * or you may also calculate the mean and standard deviation of the level. - */ -static inline void wl_his_gather(struct net_device *dev, u8 * stats) -{ /* Statistics to gather */ - net_local *lp = netdev_priv(dev); - u8 level = stats[0] & MMR_SIGNAL_LVL; - int i; - - /* Find the correct interval. */ - i = 0; - while ((i < (lp->his_number - 1)) - && (level >= lp->his_range[i++])); - - /* Increment interval counter. */ - (lp->his_sum[i])++; -} -#endif /* HISTOGRAM */ - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get protocol name - */ -static int wavelan_get_name(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - strcpy(wrqu->name, "WaveLAN"); - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set NWID - */ -static int wavelan_set_nwid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - psa_t psa; - mm_t m; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Set NWID in WaveLAN. */ - if (!wrqu->nwid.disabled) { - /* Set NWID in psa */ - psa.psa_nwid[0] = (wrqu->nwid.value & 0xFF00) >> 8; - psa.psa_nwid[1] = wrqu->nwid.value & 0xFF; - psa.psa_nwid_select = 0x01; - psa_write(ioaddr, lp->hacr, - (char *) psa.psa_nwid - (char *) &psa, - (unsigned char *) psa.psa_nwid, 3); - - /* Set NWID in mmc. */ - m.w.mmw_netw_id_l = psa.psa_nwid[1]; - m.w.mmw_netw_id_h = psa.psa_nwid[0]; - mmc_write(ioaddr, - (char *) &m.w.mmw_netw_id_l - - (char *) &m, - (unsigned char *) &m.w.mmw_netw_id_l, 2); - mmc_out(ioaddr, mmwoff(0, mmw_loopt_sel), 0x00); - } else { - /* Disable NWID in the psa. */ - psa.psa_nwid_select = 0x00; - psa_write(ioaddr, lp->hacr, - (char *) &psa.psa_nwid_select - - (char *) &psa, - (unsigned char *) &psa.psa_nwid_select, - 1); - - /* Disable NWID in the mmc (no filtering). */ - mmc_out(ioaddr, mmwoff(0, mmw_loopt_sel), - MMW_LOOPT_SEL_DIS_NWID); - } - /* update the Wavelan checksum */ - update_psa_checksum(dev, ioaddr, lp->hacr); - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get NWID - */ -static int wavelan_get_nwid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Read the NWID. */ - psa_read(ioaddr, lp->hacr, - (char *) psa.psa_nwid - (char *) &psa, - (unsigned char *) psa.psa_nwid, 3); - wrqu->nwid.value = (psa.psa_nwid[0] << 8) + psa.psa_nwid[1]; - wrqu->nwid.disabled = !(psa.psa_nwid_select); - wrqu->nwid.fixed = 1; /* Superfluous */ - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set frequency - */ -static int wavelan_set_freq(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - unsigned long flags; - int ret; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Attempt to recognise 2.00 cards (2.4 GHz frequency selectable). */ - if (!(mmc_in(ioaddr, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) - ret = wv_set_frequency(ioaddr, &(wrqu->freq)); - else - ret = -EOPNOTSUPP; - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get frequency - */ -static int wavelan_get_freq(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Attempt to recognise 2.00 cards (2.4 GHz frequency selectable). - * Does it work for everybody, especially old cards? */ - if (!(mmc_in(ioaddr, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) { - unsigned short freq; - - /* Ask the EEPROM to read the frequency from the first area. */ - fee_read(ioaddr, 0x00, &freq, 1); - wrqu->freq.m = ((freq >> 5) * 5 + 24000L) * 10000; - wrqu->freq.e = 1; - } else { - psa_read(ioaddr, lp->hacr, - (char *) &psa.psa_subband - (char *) &psa, - (unsigned char *) &psa.psa_subband, 1); - - if (psa.psa_subband <= 4) { - wrqu->freq.m = fixed_bands[psa.psa_subband]; - wrqu->freq.e = (psa.psa_subband != 0); - } else - ret = -EOPNOTSUPP; - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set level threshold - */ -static int wavelan_set_sens(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Set the level threshold. */ - /* We should complain loudly if wrqu->sens.fixed = 0, because we - * can't set auto mode... */ - psa.psa_thr_pre_set = wrqu->sens.value & 0x3F; - psa_write(ioaddr, lp->hacr, - (char *) &psa.psa_thr_pre_set - (char *) &psa, - (unsigned char *) &psa.psa_thr_pre_set, 1); - /* update the Wavelan checksum */ - update_psa_checksum(dev, ioaddr, lp->hacr); - mmc_out(ioaddr, mmwoff(0, mmw_thr_pre_set), - psa.psa_thr_pre_set); - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get level threshold - */ -static int wavelan_get_sens(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Read the level threshold. */ - psa_read(ioaddr, lp->hacr, - (char *) &psa.psa_thr_pre_set - (char *) &psa, - (unsigned char *) &psa.psa_thr_pre_set, 1); - wrqu->sens.value = psa.psa_thr_pre_set & 0x3F; - wrqu->sens.fixed = 1; - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set encryption key - */ -static int wavelan_set_encode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - unsigned long flags; - psa_t psa; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Check if capable of encryption */ - if (!mmc_encr(ioaddr)) { - ret = -EOPNOTSUPP; - } - - /* Check the size of the key */ - if((wrqu->encoding.length != 8) && (wrqu->encoding.length != 0)) { - ret = -EINVAL; - } - - if(!ret) { - /*basic checking... */ - if (wrqu->encoding.length == 8) { - /* Copy the key in the driver */ - memcpy(psa.psa_encryption_key, extra, - wrqu->encoding.length); - psa.psa_encryption_select = 1; - - psa_write(ioaddr, lp->hacr, - (char *) &psa.psa_encryption_select - - (char *) &psa, - (unsigned char *) &psa. - psa_encryption_select, 8 + 1); - - mmc_out(ioaddr, mmwoff(0, mmw_encr_enable), - MMW_ENCR_ENABLE_EN | MMW_ENCR_ENABLE_MODE); - mmc_write(ioaddr, mmwoff(0, mmw_encr_key), - (unsigned char *) &psa. - psa_encryption_key, 8); - } - - /* disable encryption */ - if (wrqu->encoding.flags & IW_ENCODE_DISABLED) { - psa.psa_encryption_select = 0; - psa_write(ioaddr, lp->hacr, - (char *) &psa.psa_encryption_select - - (char *) &psa, - (unsigned char *) &psa. - psa_encryption_select, 1); - - mmc_out(ioaddr, mmwoff(0, mmw_encr_enable), 0); - } - /* update the Wavelan checksum */ - update_psa_checksum(dev, ioaddr, lp->hacr); - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get encryption key - */ -static int wavelan_get_encode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Check if encryption is available */ - if (!mmc_encr(ioaddr)) { - ret = -EOPNOTSUPP; - } else { - /* Read the encryption key */ - psa_read(ioaddr, lp->hacr, - (char *) &psa.psa_encryption_select - - (char *) &psa, - (unsigned char *) &psa. - psa_encryption_select, 1 + 8); - - /* encryption is enabled ? */ - if (psa.psa_encryption_select) - wrqu->encoding.flags = IW_ENCODE_ENABLED; - else - wrqu->encoding.flags = IW_ENCODE_DISABLED; - wrqu->encoding.flags |= mmc_encr(ioaddr); - - /* Copy the key to the user buffer */ - wrqu->encoding.length = 8; - memcpy(extra, psa.psa_encryption_key, wrqu->encoding.length); - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get range info - */ -static int wavelan_get_range(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - struct iw_range *range = (struct iw_range *) extra; - unsigned long flags; - int ret = 0; - - /* Set the length (very important for backward compatibility) */ - wrqu->data.length = sizeof(struct iw_range); - - /* Set all the info we don't care or don't know about to zero */ - memset(range, 0, sizeof(struct iw_range)); - - /* Set the Wireless Extension versions */ - range->we_version_compiled = WIRELESS_EXT; - range->we_version_source = 9; - - /* Set information in the range struct. */ - range->throughput = 1.6 * 1000 * 1000; /* don't argue on this ! */ - range->min_nwid = 0x0000; - range->max_nwid = 0xFFFF; - - range->sensitivity = 0x3F; - range->max_qual.qual = MMR_SGNL_QUAL; - range->max_qual.level = MMR_SIGNAL_LVL; - range->max_qual.noise = MMR_SILENCE_LVL; - range->avg_qual.qual = MMR_SGNL_QUAL; /* Always max */ - /* Need to get better values for those two */ - range->avg_qual.level = 30; - range->avg_qual.noise = 8; - - range->num_bitrates = 1; - range->bitrate[0] = 2000000; /* 2 Mb/s */ - - /* Event capability (kernel + driver) */ - range->event_capa[0] = (IW_EVENT_CAPA_MASK(0x8B02) | - IW_EVENT_CAPA_MASK(0x8B04)); - range->event_capa[1] = IW_EVENT_CAPA_K_1; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Attempt to recognise 2.00 cards (2.4 GHz frequency selectable). */ - if (!(mmc_in(ioaddr, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) { - range->num_channels = 10; - range->num_frequency = wv_frequency_list(ioaddr, range->freq, - IW_MAX_FREQUENCIES); - } else - range->num_channels = range->num_frequency = 0; - - /* Encryption supported ? */ - if (mmc_encr(ioaddr)) { - range->encoding_size[0] = 8; /* DES = 64 bits key */ - range->num_encoding_sizes = 1; - range->max_encoding_tokens = 1; /* Only one key possible */ - } else { - range->num_encoding_sizes = 0; - range->max_encoding_tokens = 0; - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : set quality threshold - */ -static int wavelan_set_qthr(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - psa_t psa; - unsigned long flags; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - psa.psa_quality_thr = *(extra) & 0x0F; - psa_write(ioaddr, lp->hacr, - (char *) &psa.psa_quality_thr - (char *) &psa, - (unsigned char *) &psa.psa_quality_thr, 1); - /* update the Wavelan checksum */ - update_psa_checksum(dev, ioaddr, lp->hacr); - mmc_out(ioaddr, mmwoff(0, mmw_quality_thr), - psa.psa_quality_thr); - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : get quality threshold - */ -static int wavelan_get_qthr(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); /* lp is not unused */ - psa_t psa; - unsigned long flags; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - psa_read(ioaddr, lp->hacr, - (char *) &psa.psa_quality_thr - (char *) &psa, - (unsigned char *) &psa.psa_quality_thr, 1); - *(extra) = psa.psa_quality_thr & 0x0F; - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return 0; -} - -#ifdef HISTOGRAM -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : set histogram - */ -static int wavelan_set_histo(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); /* lp is not unused */ - - /* Check the number of intervals. */ - if (wrqu->data.length > 16) { - return(-E2BIG); - } - - /* Disable histo while we copy the addresses. - * As we don't disable interrupts, we need to do this */ - lp->his_number = 0; - - /* Are there ranges to copy? */ - if (wrqu->data.length > 0) { - /* Copy interval ranges to the driver */ - memcpy(lp->his_range, extra, wrqu->data.length); - - { - int i; - printk(KERN_DEBUG "Histo :"); - for(i = 0; i < wrqu->data.length; i++) - printk(" %d", lp->his_range[i]); - printk("\n"); - } - - /* Reset result structure. */ - memset(lp->his_sum, 0x00, sizeof(long) * 16); - } - - /* Now we can set the number of ranges */ - lp->his_number = wrqu->data.length; - - return(0); -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : get histogram - */ -static int wavelan_get_histo(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); /* lp is not unused */ - - /* Set the number of intervals. */ - wrqu->data.length = lp->his_number; - - /* Give back the distribution statistics */ - if(lp->his_number > 0) - memcpy(extra, lp->his_sum, sizeof(long) * lp->his_number); - - return(0); -} -#endif /* HISTOGRAM */ - -/*------------------------------------------------------------------*/ -/* - * Structures to export the Wireless Handlers - */ - -static const iw_handler wavelan_handler[] = -{ - NULL, /* SIOCSIWNAME */ - wavelan_get_name, /* SIOCGIWNAME */ - wavelan_set_nwid, /* SIOCSIWNWID */ - wavelan_get_nwid, /* SIOCGIWNWID */ - wavelan_set_freq, /* SIOCSIWFREQ */ - wavelan_get_freq, /* SIOCGIWFREQ */ - NULL, /* SIOCSIWMODE */ - NULL, /* SIOCGIWMODE */ - wavelan_set_sens, /* SIOCSIWSENS */ - wavelan_get_sens, /* SIOCGIWSENS */ - NULL, /* SIOCSIWRANGE */ - wavelan_get_range, /* SIOCGIWRANGE */ - NULL, /* SIOCSIWPRIV */ - NULL, /* SIOCGIWPRIV */ - NULL, /* SIOCSIWSTATS */ - NULL, /* SIOCGIWSTATS */ - iw_handler_set_spy, /* SIOCSIWSPY */ - iw_handler_get_spy, /* SIOCGIWSPY */ - iw_handler_set_thrspy, /* SIOCSIWTHRSPY */ - iw_handler_get_thrspy, /* SIOCGIWTHRSPY */ - NULL, /* SIOCSIWAP */ - NULL, /* SIOCGIWAP */ - NULL, /* -- hole -- */ - NULL, /* SIOCGIWAPLIST */ - NULL, /* -- hole -- */ - NULL, /* -- hole -- */ - NULL, /* SIOCSIWESSID */ - NULL, /* SIOCGIWESSID */ - NULL, /* SIOCSIWNICKN */ - NULL, /* SIOCGIWNICKN */ - NULL, /* -- hole -- */ - NULL, /* -- hole -- */ - NULL, /* SIOCSIWRATE */ - NULL, /* SIOCGIWRATE */ - NULL, /* SIOCSIWRTS */ - NULL, /* SIOCGIWRTS */ - NULL, /* SIOCSIWFRAG */ - NULL, /* SIOCGIWFRAG */ - NULL, /* SIOCSIWTXPOW */ - NULL, /* SIOCGIWTXPOW */ - NULL, /* SIOCSIWRETRY */ - NULL, /* SIOCGIWRETRY */ - /*bummer ! Why those are only at the end ??? */ - wavelan_set_encode, /* SIOCSIWENCODE */ - wavelan_get_encode, /* SIOCGIWENCODE */ -}; - -static const iw_handler wavelan_private_handler[] = -{ - wavelan_set_qthr, /* SIOCIWFIRSTPRIV */ - wavelan_get_qthr, /* SIOCIWFIRSTPRIV + 1 */ -#ifdef HISTOGRAM - wavelan_set_histo, /* SIOCIWFIRSTPRIV + 2 */ - wavelan_get_histo, /* SIOCIWFIRSTPRIV + 3 */ -#endif /* HISTOGRAM */ -}; - -static const struct iw_priv_args wavelan_private_args[] = { -/*{ cmd, set_args, get_args, name } */ - { SIOCSIPQTHR, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, 0, "setqualthr" }, - { SIOCGIPQTHR, 0, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, "getqualthr" }, - { SIOCSIPHISTO, IW_PRIV_TYPE_BYTE | 16, 0, "sethisto" }, - { SIOCGIPHISTO, 0, IW_PRIV_TYPE_INT | 16, "gethisto" }, -}; - -static const struct iw_handler_def wavelan_handler_def = -{ - .num_standard = ARRAY_SIZE(wavelan_handler), - .num_private = ARRAY_SIZE(wavelan_private_handler), - .num_private_args = ARRAY_SIZE(wavelan_private_args), - .standard = wavelan_handler, - .private = wavelan_private_handler, - .private_args = wavelan_private_args, - .get_wireless_stats = wavelan_get_wireless_stats, -}; - -/*------------------------------------------------------------------*/ -/* - * Get wireless statistics. - * Called by /proc/net/wireless - */ -static iw_stats *wavelan_get_wireless_stats(struct net_device *dev) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); - mmr_t m; - iw_stats *wstats; - unsigned long flags; - -#ifdef DEBUG_IOCTL_TRACE - printk(KERN_DEBUG "%s: ->wavelan_get_wireless_stats()\n", - dev->name); -#endif - - /* Check */ - if (lp == (net_local *) NULL) - return (iw_stats *) NULL; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - wstats = &lp->wstats; - - /* Get data from the mmc. */ - mmc_out(ioaddr, mmwoff(0, mmw_freeze), 1); - - mmc_read(ioaddr, mmroff(0, mmr_dce_status), &m.mmr_dce_status, 1); - mmc_read(ioaddr, mmroff(0, mmr_wrong_nwid_l), &m.mmr_wrong_nwid_l, - 2); - mmc_read(ioaddr, mmroff(0, mmr_thr_pre_set), &m.mmr_thr_pre_set, - 4); - - mmc_out(ioaddr, mmwoff(0, mmw_freeze), 0); - - /* Copy data to wireless stuff. */ - wstats->status = m.mmr_dce_status & MMR_DCE_STATUS; - wstats->qual.qual = m.mmr_sgnl_qual & MMR_SGNL_QUAL; - wstats->qual.level = m.mmr_signal_lvl & MMR_SIGNAL_LVL; - wstats->qual.noise = m.mmr_silence_lvl & MMR_SILENCE_LVL; - wstats->qual.updated = (((m. mmr_signal_lvl & MMR_SIGNAL_LVL_VALID) >> 7) - | ((m.mmr_signal_lvl & MMR_SIGNAL_LVL_VALID) >> 6) - | ((m.mmr_silence_lvl & MMR_SILENCE_LVL_VALID) >> 5)); - wstats->discard.nwid += (m.mmr_wrong_nwid_h << 8) | m.mmr_wrong_nwid_l; - wstats->discard.code = 0L; - wstats->discard.misc = 0L; - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - -#ifdef DEBUG_IOCTL_TRACE - printk(KERN_DEBUG "%s: <-wavelan_get_wireless_stats()\n", - dev->name); -#endif - return &lp->wstats; -} - -/************************* PACKET RECEPTION *************************/ -/* - * This part deals with receiving the packets. - * The interrupt handler gets an interrupt when a packet has been - * successfully received and calls this part. - */ - -/*------------------------------------------------------------------*/ -/* - * This routine does the actual copying of data (including the Ethernet - * header structure) from the WaveLAN card to an sk_buff chain that - * will be passed up to the network interface layer. NOTE: we - * currently don't handle trailer protocols (neither does the rest of - * the network interface), so if that is needed, it will (at least in - * part) be added here. The contents of the receive ring buffer are - * copied to a message chain that is then passed to the kernel. - * - * Note: if any errors occur, the packet is "dropped on the floor". - * (called by wv_packet_rcv()) - */ -static void -wv_packet_read(struct net_device *dev, u16 buf_off, int sksize) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - struct sk_buff *skb; - -#ifdef DEBUG_RX_TRACE - printk(KERN_DEBUG "%s: ->wv_packet_read(0x%X, %d)\n", - dev->name, buf_off, sksize); -#endif - - /* Allocate buffer for the data */ - if ((skb = dev_alloc_skb(sksize)) == (struct sk_buff *) NULL) { -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO - "%s: wv_packet_read(): could not alloc_skb(%d, GFP_ATOMIC).\n", - dev->name, sksize); -#endif - dev->stats.rx_dropped++; - return; - } - - /* Copy the packet to the buffer. */ - obram_read(ioaddr, buf_off, skb_put(skb, sksize), sksize); - skb->protocol = eth_type_trans(skb, dev); - -#ifdef DEBUG_RX_INFO - wv_packet_info(skb_mac_header(skb), sksize, dev->name, - "wv_packet_read"); -#endif /* DEBUG_RX_INFO */ - - /* Statistics-gathering and associated stuff. - * It seem a bit messy with all the define, but it's really - * simple... */ - if ( -#ifdef IW_WIRELESS_SPY /* defined in iw_handler.h */ - (lp->spy_data.spy_number > 0) || -#endif /* IW_WIRELESS_SPY */ -#ifdef HISTOGRAM - (lp->his_number > 0) || -#endif /* HISTOGRAM */ - 0) { - u8 stats[3]; /* signal level, noise level, signal quality */ - - /* Read signal level, silence level and signal quality bytes */ - /* Note: in the PCMCIA hardware, these are part of the frame. - * It seems that for the ISA hardware, it's nowhere to be - * found in the frame, so I'm obliged to do this (it has a - * side effect on /proc/net/wireless). - * Any ideas? - */ - mmc_out(ioaddr, mmwoff(0, mmw_freeze), 1); - mmc_read(ioaddr, mmroff(0, mmr_signal_lvl), stats, 3); - mmc_out(ioaddr, mmwoff(0, mmw_freeze), 0); - -#ifdef DEBUG_RX_INFO - printk(KERN_DEBUG - "%s: wv_packet_read(): Signal level %d/63, Silence level %d/63, signal quality %d/16\n", - dev->name, stats[0] & 0x3F, stats[1] & 0x3F, - stats[2] & 0x0F); -#endif - - /* Spying stuff */ -#ifdef IW_WIRELESS_SPY - wl_spy_gather(dev, skb_mac_header(skb) + WAVELAN_ADDR_SIZE, - stats); -#endif /* IW_WIRELESS_SPY */ -#ifdef HISTOGRAM - wl_his_gather(dev, stats); -#endif /* HISTOGRAM */ - } - - /* - * Hand the packet to the network module. - */ - netif_rx(skb); - - /* Keep statistics up to date */ - dev->stats.rx_packets++; - dev->stats.rx_bytes += sksize; - -#ifdef DEBUG_RX_TRACE - printk(KERN_DEBUG "%s: <-wv_packet_read()\n", dev->name); -#endif -} - -/*------------------------------------------------------------------*/ -/* - * Transfer as many packets as we can - * from the device RAM. - * (called in wavelan_interrupt()). - * Note : the spinlock is already grabbed for us. - */ -static void wv_receive(struct net_device *dev) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); - fd_t fd; - rbd_t rbd; - int nreaped = 0; - -#ifdef DEBUG_RX_TRACE - printk(KERN_DEBUG "%s: ->wv_receive()\n", dev->name); -#endif - - /* Loop on each received packet. */ - for (;;) { - obram_read(ioaddr, lp->rx_head, (unsigned char *) &fd, - sizeof(fd)); - - /* Note about the status : - * It start up to be 0 (the value we set). Then, when the RU - * grab the buffer to prepare for reception, it sets the - * FD_STATUS_B flag. When the RU has finished receiving the - * frame, it clears FD_STATUS_B, set FD_STATUS_C to indicate - * completion and set the other flags to indicate the eventual - * errors. FD_STATUS_OK indicates that the reception was OK. - */ - - /* If the current frame is not complete, we have reached the end. */ - if ((fd.fd_status & FD_STATUS_C) != FD_STATUS_C) - break; /* This is how we exit the loop. */ - - nreaped++; - - /* Check whether frame was correctly received. */ - if ((fd.fd_status & FD_STATUS_OK) == FD_STATUS_OK) { - /* Does the frame contain a pointer to the data? Let's check. */ - if (fd.fd_rbd_offset != I82586NULL) { - /* Read the receive buffer descriptor */ - obram_read(ioaddr, fd.fd_rbd_offset, - (unsigned char *) &rbd, - sizeof(rbd)); - -#ifdef DEBUG_RX_ERROR - if ((rbd.rbd_status & RBD_STATUS_EOF) != - RBD_STATUS_EOF) printk(KERN_INFO - "%s: wv_receive(): missing EOF flag.\n", - dev->name); - - if ((rbd.rbd_status & RBD_STATUS_F) != - RBD_STATUS_F) printk(KERN_INFO - "%s: wv_receive(): missing F flag.\n", - dev->name); -#endif /* DEBUG_RX_ERROR */ - - /* Read the packet and transmit to Linux */ - wv_packet_read(dev, rbd.rbd_bufl, - rbd. - rbd_status & - RBD_STATUS_ACNT); - } -#ifdef DEBUG_RX_ERROR - else /* if frame has no data */ - printk(KERN_INFO - "%s: wv_receive(): frame has no data.\n", - dev->name); -#endif - } else { /* If reception was no successful */ - - dev->stats.rx_errors++; - -#ifdef DEBUG_RX_INFO - printk(KERN_DEBUG - "%s: wv_receive(): frame not received successfully (%X).\n", - dev->name, fd.fd_status); -#endif - -#ifdef DEBUG_RX_ERROR - if ((fd.fd_status & FD_STATUS_S6) != 0) - printk(KERN_INFO - "%s: wv_receive(): no EOF flag.\n", - dev->name); -#endif - - if ((fd.fd_status & FD_STATUS_S7) != 0) { - dev->stats.rx_length_errors++; -#ifdef DEBUG_RX_FAIL - printk(KERN_DEBUG - "%s: wv_receive(): frame too short.\n", - dev->name); -#endif - } - - if ((fd.fd_status & FD_STATUS_S8) != 0) { - dev->stats.rx_over_errors++; -#ifdef DEBUG_RX_FAIL - printk(KERN_DEBUG - "%s: wv_receive(): rx DMA overrun.\n", - dev->name); -#endif - } - - if ((fd.fd_status & FD_STATUS_S9) != 0) { - dev->stats.rx_fifo_errors++; -#ifdef DEBUG_RX_FAIL - printk(KERN_DEBUG - "%s: wv_receive(): ran out of resources.\n", - dev->name); -#endif - } - - if ((fd.fd_status & FD_STATUS_S10) != 0) { - dev->stats.rx_frame_errors++; -#ifdef DEBUG_RX_FAIL - printk(KERN_DEBUG - "%s: wv_receive(): alignment error.\n", - dev->name); -#endif - } - - if ((fd.fd_status & FD_STATUS_S11) != 0) { - dev->stats.rx_crc_errors++; -#ifdef DEBUG_RX_FAIL - printk(KERN_DEBUG - "%s: wv_receive(): CRC error.\n", - dev->name); -#endif - } - } - - fd.fd_status = 0; - obram_write(ioaddr, fdoff(lp->rx_head, fd_status), - (unsigned char *) &fd.fd_status, - sizeof(fd.fd_status)); - - fd.fd_command = FD_COMMAND_EL; - obram_write(ioaddr, fdoff(lp->rx_head, fd_command), - (unsigned char *) &fd.fd_command, - sizeof(fd.fd_command)); - - fd.fd_command = 0; - obram_write(ioaddr, fdoff(lp->rx_last, fd_command), - (unsigned char *) &fd.fd_command, - sizeof(fd.fd_command)); - - lp->rx_last = lp->rx_head; - lp->rx_head = fd.fd_link_offset; - } /* for(;;) -> loop on all frames */ - -#ifdef DEBUG_RX_INFO - if (nreaped > 1) - printk(KERN_DEBUG "%s: wv_receive(): reaped %d\n", - dev->name, nreaped); -#endif -#ifdef DEBUG_RX_TRACE - printk(KERN_DEBUG "%s: <-wv_receive()\n", dev->name); -#endif -} - -/*********************** PACKET TRANSMISSION ***********************/ -/* - * This part deals with sending packets through the WaveLAN. - * - */ - -/*------------------------------------------------------------------*/ -/* - * This routine fills in the appropriate registers and memory - * locations on the WaveLAN card and starts the card off on - * the transmit. - * - * The principle: - * Each block contains a transmit command, a NOP command, - * a transmit block descriptor and a buffer. - * The CU read the transmit block which point to the tbd, - * read the tbd and the content of the buffer. - * When it has finish with it, it goes to the next command - * which in our case is the NOP. The NOP points on itself, - * so the CU stop here. - * When we add the next block, we modify the previous nop - * to make it point on the new tx command. - * Simple, isn't it ? - * - * (called in wavelan_packet_xmit()) - */ -static int wv_packet_write(struct net_device *dev, void *buf, short length) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - unsigned short txblock; - unsigned short txpred; - unsigned short tx_addr; - unsigned short nop_addr; - unsigned short tbd_addr; - unsigned short buf_addr; - ac_tx_t tx; - ac_nop_t nop; - tbd_t tbd; - int clen = length; - unsigned long flags; - -#ifdef DEBUG_TX_TRACE - printk(KERN_DEBUG "%s: ->wv_packet_write(%d)\n", dev->name, - length); -#endif - - spin_lock_irqsave(&lp->spinlock, flags); - - /* Check nothing bad has happened */ - if (lp->tx_n_in_use == (NTXBLOCKS - 1)) { -#ifdef DEBUG_TX_ERROR - printk(KERN_INFO "%s: wv_packet_write(): Tx queue full.\n", - dev->name); -#endif - spin_unlock_irqrestore(&lp->spinlock, flags); - return 1; - } - - /* Calculate addresses of next block and previous block. */ - txblock = lp->tx_first_free; - txpred = txblock - TXBLOCKZ; - if (txpred < OFFSET_CU) - txpred += NTXBLOCKS * TXBLOCKZ; - lp->tx_first_free += TXBLOCKZ; - if (lp->tx_first_free >= OFFSET_CU + NTXBLOCKS * TXBLOCKZ) - lp->tx_first_free -= NTXBLOCKS * TXBLOCKZ; - - lp->tx_n_in_use++; - - /* Calculate addresses of the different parts of the block. */ - tx_addr = txblock; - nop_addr = tx_addr + sizeof(tx); - tbd_addr = nop_addr + sizeof(nop); - buf_addr = tbd_addr + sizeof(tbd); - - /* - * Transmit command - */ - tx.tx_h.ac_status = 0; - obram_write(ioaddr, toff(ac_tx_t, tx_addr, tx_h.ac_status), - (unsigned char *) &tx.tx_h.ac_status, - sizeof(tx.tx_h.ac_status)); - - /* - * NOP command - */ - nop.nop_h.ac_status = 0; - obram_write(ioaddr, toff(ac_nop_t, nop_addr, nop_h.ac_status), - (unsigned char *) &nop.nop_h.ac_status, - sizeof(nop.nop_h.ac_status)); - nop.nop_h.ac_link = nop_addr; - obram_write(ioaddr, toff(ac_nop_t, nop_addr, nop_h.ac_link), - (unsigned char *) &nop.nop_h.ac_link, - sizeof(nop.nop_h.ac_link)); - - /* - * Transmit buffer descriptor - */ - tbd.tbd_status = TBD_STATUS_EOF | (TBD_STATUS_ACNT & clen); - tbd.tbd_next_bd_offset = I82586NULL; - tbd.tbd_bufl = buf_addr; - tbd.tbd_bufh = 0; - obram_write(ioaddr, tbd_addr, (unsigned char *) &tbd, sizeof(tbd)); - - /* - * Data - */ - obram_write(ioaddr, buf_addr, buf, length); - - /* - * Overwrite the predecessor NOP link - * so that it points to this txblock. - */ - nop_addr = txpred + sizeof(tx); - nop.nop_h.ac_status = 0; - obram_write(ioaddr, toff(ac_nop_t, nop_addr, nop_h.ac_status), - (unsigned char *) &nop.nop_h.ac_status, - sizeof(nop.nop_h.ac_status)); - nop.nop_h.ac_link = txblock; - obram_write(ioaddr, toff(ac_nop_t, nop_addr, nop_h.ac_link), - (unsigned char *) &nop.nop_h.ac_link, - sizeof(nop.nop_h.ac_link)); - - /* Make sure the watchdog will keep quiet for a while */ - dev->trans_start = jiffies; - - /* Keep stats up to date. */ - dev->stats.tx_bytes += length; - - if (lp->tx_first_in_use == I82586NULL) - lp->tx_first_in_use = txblock; - - if (lp->tx_n_in_use < NTXBLOCKS - 1) - netif_wake_queue(dev); - - spin_unlock_irqrestore(&lp->spinlock, flags); - -#ifdef DEBUG_TX_INFO - wv_packet_info((u8 *) buf, length, dev->name, - "wv_packet_write"); -#endif /* DEBUG_TX_INFO */ - -#ifdef DEBUG_TX_TRACE - printk(KERN_DEBUG "%s: <-wv_packet_write()\n", dev->name); -#endif - - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * This routine is called when we want to send a packet (NET3 callback) - * In this routine, we check if the harware is ready to accept - * the packet. We also prevent reentrance. Then we call the function - * to send the packet. - */ -static netdev_tx_t wavelan_packet_xmit(struct sk_buff *skb, - struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long flags; - char data[ETH_ZLEN]; - -#ifdef DEBUG_TX_TRACE - printk(KERN_DEBUG "%s: ->wavelan_packet_xmit(0x%X)\n", dev->name, - (unsigned) skb); -#endif - - /* - *block a timer-based transmit from overlapping. - * In other words, prevent reentering this routine. - */ - netif_stop_queue(dev); - - /* If somebody has asked to reconfigure the controller, - * we can do it now. - */ - if (lp->reconfig_82586) { - spin_lock_irqsave(&lp->spinlock, flags); - wv_82586_config(dev); - spin_unlock_irqrestore(&lp->spinlock, flags); - /* Check that we can continue */ - if (lp->tx_n_in_use == (NTXBLOCKS - 1)) - return NETDEV_TX_BUSY; - } - - /* Do we need some padding? */ - /* Note : on wireless the propagation time is in the order of 1us, - * and we don't have the Ethernet specific requirement of beeing - * able to detect collisions, therefore in theory we don't really - * need to pad. Jean II */ - if (skb->len < ETH_ZLEN) { - memset(data, 0, ETH_ZLEN); - skb_copy_from_linear_data(skb, data, skb->len); - /* Write packet on the card */ - if(wv_packet_write(dev, data, ETH_ZLEN)) - return NETDEV_TX_BUSY; /* We failed */ - } - else if(wv_packet_write(dev, skb->data, skb->len)) - return NETDEV_TX_BUSY; /* We failed */ - - - dev_kfree_skb(skb); - -#ifdef DEBUG_TX_TRACE - printk(KERN_DEBUG "%s: <-wavelan_packet_xmit()\n", dev->name); -#endif - return NETDEV_TX_OK; -} - -/*********************** HARDWARE CONFIGURATION ***********************/ -/* - * This part does the real job of starting and configuring the hardware. - */ - -/*--------------------------------------------------------------------*/ -/* - * Routine to initialize the Modem Management Controller. - * (called by wv_hw_reset()) - */ -static int wv_mmc_init(struct net_device *dev) -{ - unsigned long ioaddr = dev->base_addr; - net_local *lp = netdev_priv(dev); - psa_t psa; - mmw_t m; - int configured; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_mmc_init()\n", dev->name); -#endif - - /* Read the parameter storage area. */ - psa_read(ioaddr, lp->hacr, 0, (unsigned char *) &psa, sizeof(psa)); - -#ifdef USE_PSA_CONFIG - configured = psa.psa_conf_status & 1; -#else - configured = 0; -#endif - - /* Is the PSA is not configured */ - if (!configured) { - /* User will be able to configure NWID later (with iwconfig). */ - psa.psa_nwid[0] = 0; - psa.psa_nwid[1] = 0; - - /* no NWID checking since NWID is not set */ - psa.psa_nwid_select = 0; - - /* Disable encryption */ - psa.psa_encryption_select = 0; - - /* Set to standard values: - * 0x04 for AT, - * 0x01 for MCA, - * 0x04 for PCMCIA and 2.00 card (AT&T 407-024689/E document) - */ - if (psa.psa_comp_number & 1) - psa.psa_thr_pre_set = 0x01; - else - psa.psa_thr_pre_set = 0x04; - psa.psa_quality_thr = 0x03; - - /* It is configured */ - psa.psa_conf_status |= 1; - -#ifdef USE_PSA_CONFIG - /* Write the psa. */ - psa_write(ioaddr, lp->hacr, - (char *) psa.psa_nwid - (char *) &psa, - (unsigned char *) psa.psa_nwid, 4); - psa_write(ioaddr, lp->hacr, - (char *) &psa.psa_thr_pre_set - (char *) &psa, - (unsigned char *) &psa.psa_thr_pre_set, 1); - psa_write(ioaddr, lp->hacr, - (char *) &psa.psa_quality_thr - (char *) &psa, - (unsigned char *) &psa.psa_quality_thr, 1); - psa_write(ioaddr, lp->hacr, - (char *) &psa.psa_conf_status - (char *) &psa, - (unsigned char *) &psa.psa_conf_status, 1); - /* update the Wavelan checksum */ - update_psa_checksum(dev, ioaddr, lp->hacr); -#endif - } - - /* Zero the mmc structure. */ - memset(&m, 0x00, sizeof(m)); - - /* Copy PSA info to the mmc. */ - m.mmw_netw_id_l = psa.psa_nwid[1]; - m.mmw_netw_id_h = psa.psa_nwid[0]; - - if (psa.psa_nwid_select & 1) - m.mmw_loopt_sel = 0x00; - else - m.mmw_loopt_sel = MMW_LOOPT_SEL_DIS_NWID; - - memcpy(&m.mmw_encr_key, &psa.psa_encryption_key, - sizeof(m.mmw_encr_key)); - - if (psa.psa_encryption_select) - m.mmw_encr_enable = - MMW_ENCR_ENABLE_EN | MMW_ENCR_ENABLE_MODE; - else - m.mmw_encr_enable = 0; - - m.mmw_thr_pre_set = psa.psa_thr_pre_set & 0x3F; - m.mmw_quality_thr = psa.psa_quality_thr & 0x0F; - - /* - * Set default modem control parameters. - * See NCR document 407-0024326 Rev. A. - */ - m.mmw_jabber_enable = 0x01; - m.mmw_freeze = 0; - m.mmw_anten_sel = MMW_ANTEN_SEL_ALG_EN; - m.mmw_ifs = 0x20; - m.mmw_mod_delay = 0x04; - m.mmw_jam_time = 0x38; - - m.mmw_des_io_invert = 0; - m.mmw_decay_prm = 0; - m.mmw_decay_updat_prm = 0; - - /* Write all info to MMC. */ - mmc_write(ioaddr, 0, (u8 *) & m, sizeof(m)); - - /* The following code starts the modem of the 2.00 frequency - * selectable cards at power on. It's not strictly needed for the - * following boots. - * The original patch was by Joe Finney for the PCMCIA driver, but - * I've cleaned it up a bit and added documentation. - * Thanks to Loeke Brederveld from Lucent for the info. - */ - - /* Attempt to recognise 2.00 cards (2.4 GHz frequency selectable) - * Does it work for everybody, especially old cards? */ - /* Note: WFREQSEL verifies that it is able to read a sensible - * frequency from EEPROM (address 0x00) and that MMR_FEE_STATUS_ID - * is 0xA (Xilinx version) or 0xB (Ariadne version). - * My test is more crude but does work. */ - if (!(mmc_in(ioaddr, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) { - /* We must download the frequency parameters to the - * synthesizers (from the EEPROM - area 1) - * Note: as the EEPROM is automatically decremented, we set the end - * if the area... */ - m.mmw_fee_addr = 0x0F; - m.mmw_fee_ctrl = MMW_FEE_CTRL_READ | MMW_FEE_CTRL_DWLD; - mmc_write(ioaddr, (char *) &m.mmw_fee_ctrl - (char *) &m, - (unsigned char *) &m.mmw_fee_ctrl, 2); - - /* Wait until the download is finished. */ - fee_wait(ioaddr, 100, 100); - -#ifdef DEBUG_CONFIG_INFO - /* The frequency was in the last word downloaded. */ - mmc_read(ioaddr, (char *) &m.mmw_fee_data_l - (char *) &m, - (unsigned char *) &m.mmw_fee_data_l, 2); - - /* Print some info for the user. */ - printk(KERN_DEBUG - "%s: WaveLAN 2.00 recognised (frequency select). Current frequency = %ld\n", - dev->name, - ((m. - mmw_fee_data_h << 4) | (m.mmw_fee_data_l >> 4)) * - 5 / 2 + 24000L); -#endif - - /* We must now download the power adjust value (gain) to - * the synthesizers (from the EEPROM - area 7 - DAC). */ - m.mmw_fee_addr = 0x61; - m.mmw_fee_ctrl = MMW_FEE_CTRL_READ | MMW_FEE_CTRL_DWLD; - mmc_write(ioaddr, (char *) &m.mmw_fee_ctrl - (char *) &m, - (unsigned char *) &m.mmw_fee_ctrl, 2); - - /* Wait until the download is finished. */ - } - /* if 2.00 card */ -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_mmc_init()\n", dev->name); -#endif - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Construct the fd and rbd structures. - * Start the receive unit. - * (called by wv_hw_reset()) - */ -static int wv_ru_start(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - u16 scb_cs; - fd_t fd; - rbd_t rbd; - u16 rx; - u16 rx_next; - int i; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_ru_start()\n", dev->name); -#endif - - obram_read(ioaddr, scboff(OFFSET_SCB, scb_status), - (unsigned char *) &scb_cs, sizeof(scb_cs)); - if ((scb_cs & SCB_ST_RUS) == SCB_ST_RUS_RDY) - return 0; - - lp->rx_head = OFFSET_RU; - - for (i = 0, rx = lp->rx_head; i < NRXBLOCKS; i++, rx = rx_next) { - rx_next = - (i == NRXBLOCKS - 1) ? lp->rx_head : rx + RXBLOCKZ; - - fd.fd_status = 0; - fd.fd_command = (i == NRXBLOCKS - 1) ? FD_COMMAND_EL : 0; - fd.fd_link_offset = rx_next; - fd.fd_rbd_offset = rx + sizeof(fd); - obram_write(ioaddr, rx, (unsigned char *) &fd, sizeof(fd)); - - rbd.rbd_status = 0; - rbd.rbd_next_rbd_offset = I82586NULL; - rbd.rbd_bufl = rx + sizeof(fd) + sizeof(rbd); - rbd.rbd_bufh = 0; - rbd.rbd_el_size = RBD_EL | (RBD_SIZE & MAXDATAZ); - obram_write(ioaddr, rx + sizeof(fd), - (unsigned char *) &rbd, sizeof(rbd)); - - lp->rx_last = rx; - } - - obram_write(ioaddr, scboff(OFFSET_SCB, scb_rfa_offset), - (unsigned char *) &lp->rx_head, sizeof(lp->rx_head)); - - scb_cs = SCB_CMD_RUC_GO; - obram_write(ioaddr, scboff(OFFSET_SCB, scb_command), - (unsigned char *) &scb_cs, sizeof(scb_cs)); - - set_chan_attn(ioaddr, lp->hacr); - - for (i = 1000; i > 0; i--) { - obram_read(ioaddr, scboff(OFFSET_SCB, scb_command), - (unsigned char *) &scb_cs, sizeof(scb_cs)); - if (scb_cs == 0) - break; - - udelay(10); - } - - if (i <= 0) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_INFO - "%s: wavelan_ru_start(): board not accepting command.\n", - dev->name); -#endif - return -1; - } -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_ru_start()\n", dev->name); -#endif - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Initialise the transmit blocks. - * Start the command unit executing the NOP - * self-loop of the first transmit block. - * - * Here we create the list of send buffers used to transmit packets - *between the PC and the command unit. For each buffer, we create a - *buffer descriptor (pointing on the buffer), a transmit command - * (pointing to the buffer descriptor) and a NOP command. - * The transmit command is linked to the NOP, and the NOP to itself. - * When we will have finished executing the transmit command, we will - * then loop on the NOP. By releasing the NOP link to a new command, - * we may send another buffer. - * - * (called by wv_hw_reset()) - */ -static int wv_cu_start(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - int i; - u16 txblock; - u16 first_nop; - u16 scb_cs; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_cu_start()\n", dev->name); -#endif - - lp->tx_first_free = OFFSET_CU; - lp->tx_first_in_use = I82586NULL; - - for (i = 0, txblock = OFFSET_CU; - i < NTXBLOCKS; i++, txblock += TXBLOCKZ) { - ac_tx_t tx; - ac_nop_t nop; - tbd_t tbd; - unsigned short tx_addr; - unsigned short nop_addr; - unsigned short tbd_addr; - unsigned short buf_addr; - - tx_addr = txblock; - nop_addr = tx_addr + sizeof(tx); - tbd_addr = nop_addr + sizeof(nop); - buf_addr = tbd_addr + sizeof(tbd); - - tx.tx_h.ac_status = 0; - tx.tx_h.ac_command = acmd_transmit | AC_CFLD_I; - tx.tx_h.ac_link = nop_addr; - tx.tx_tbd_offset = tbd_addr; - obram_write(ioaddr, tx_addr, (unsigned char *) &tx, - sizeof(tx)); - - nop.nop_h.ac_status = 0; - nop.nop_h.ac_command = acmd_nop; - nop.nop_h.ac_link = nop_addr; - obram_write(ioaddr, nop_addr, (unsigned char *) &nop, - sizeof(nop)); - - tbd.tbd_status = TBD_STATUS_EOF; - tbd.tbd_next_bd_offset = I82586NULL; - tbd.tbd_bufl = buf_addr; - tbd.tbd_bufh = 0; - obram_write(ioaddr, tbd_addr, (unsigned char *) &tbd, - sizeof(tbd)); - } - - first_nop = - OFFSET_CU + (NTXBLOCKS - 1) * TXBLOCKZ + sizeof(ac_tx_t); - obram_write(ioaddr, scboff(OFFSET_SCB, scb_cbl_offset), - (unsigned char *) &first_nop, sizeof(first_nop)); - - scb_cs = SCB_CMD_CUC_GO; - obram_write(ioaddr, scboff(OFFSET_SCB, scb_command), - (unsigned char *) &scb_cs, sizeof(scb_cs)); - - set_chan_attn(ioaddr, lp->hacr); - - for (i = 1000; i > 0; i--) { - obram_read(ioaddr, scboff(OFFSET_SCB, scb_command), - (unsigned char *) &scb_cs, sizeof(scb_cs)); - if (scb_cs == 0) - break; - - udelay(10); - } - - if (i <= 0) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_INFO - "%s: wavelan_cu_start(): board not accepting command.\n", - dev->name); -#endif - return -1; - } - - lp->tx_n_in_use = 0; - netif_start_queue(dev); -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_cu_start()\n", dev->name); -#endif - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * This routine does a standard configuration of the WaveLAN - * controller (i82586). - * - * It initialises the scp, iscp and scb structure - * The first two are just pointers to the next. - * The last one is used for basic configuration and for basic - * communication (interrupt status). - * - * (called by wv_hw_reset()) - */ -static int wv_82586_start(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - scp_t scp; /* system configuration pointer */ - iscp_t iscp; /* intermediate scp */ - scb_t scb; /* system control block */ - ach_t cb; /* Action command header */ - u8 zeroes[512]; - int i; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_82586_start()\n", dev->name); -#endif - - /* - * Clear the onboard RAM. - */ - memset(&zeroes[0], 0x00, sizeof(zeroes)); - for (i = 0; i < I82586_MEMZ; i += sizeof(zeroes)) - obram_write(ioaddr, i, &zeroes[0], sizeof(zeroes)); - - /* - * Construct the command unit structures: - * scp, iscp, scb, cb. - */ - memset(&scp, 0x00, sizeof(scp)); - scp.scp_sysbus = SCP_SY_16BBUS; - scp.scp_iscpl = OFFSET_ISCP; - obram_write(ioaddr, OFFSET_SCP, (unsigned char *) &scp, - sizeof(scp)); - - memset(&iscp, 0x00, sizeof(iscp)); - iscp.iscp_busy = 1; - iscp.iscp_offset = OFFSET_SCB; - obram_write(ioaddr, OFFSET_ISCP, (unsigned char *) &iscp, - sizeof(iscp)); - - /* Our first command is to reset the i82586. */ - memset(&scb, 0x00, sizeof(scb)); - scb.scb_command = SCB_CMD_RESET; - scb.scb_cbl_offset = OFFSET_CU; - scb.scb_rfa_offset = OFFSET_RU; - obram_write(ioaddr, OFFSET_SCB, (unsigned char *) &scb, - sizeof(scb)); - - set_chan_attn(ioaddr, lp->hacr); - - /* Wait for command to finish. */ - for (i = 1000; i > 0; i--) { - obram_read(ioaddr, OFFSET_ISCP, (unsigned char *) &iscp, - sizeof(iscp)); - - if (iscp.iscp_busy == (unsigned short) 0) - break; - - udelay(10); - } - - if (i <= 0) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_INFO - "%s: wv_82586_start(): iscp_busy timeout.\n", - dev->name); -#endif - return -1; - } - - /* Check command completion. */ - for (i = 15; i > 0; i--) { - obram_read(ioaddr, OFFSET_SCB, (unsigned char *) &scb, - sizeof(scb)); - - if (scb.scb_status == (SCB_ST_CX | SCB_ST_CNA)) - break; - - udelay(10); - } - - if (i <= 0) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_INFO - "%s: wv_82586_start(): status: expected 0x%02x, got 0x%02x.\n", - dev->name, SCB_ST_CX | SCB_ST_CNA, scb.scb_status); -#endif - return -1; - } - - wv_ack(dev); - - /* Set the action command header. */ - memset(&cb, 0x00, sizeof(cb)); - cb.ac_command = AC_CFLD_EL | (AC_CFLD_CMD & acmd_diagnose); - cb.ac_link = OFFSET_CU; - obram_write(ioaddr, OFFSET_CU, (unsigned char *) &cb, sizeof(cb)); - - if (wv_synchronous_cmd(dev, "diag()") == -1) - return -1; - - obram_read(ioaddr, OFFSET_CU, (unsigned char *) &cb, sizeof(cb)); - if (cb.ac_status & AC_SFLD_FAIL) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_INFO - "%s: wv_82586_start(): i82586 Self Test failed.\n", - dev->name); -#endif - return -1; - } -#ifdef DEBUG_I82586_SHOW - wv_scb_show(ioaddr); -#endif - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_82586_start()\n", dev->name); -#endif - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * This routine does a standard configuration of the WaveLAN - * controller (i82586). - * - * This routine is a violent hack. We use the first free transmit block - * to make our configuration. In the buffer area, we create the three - * configuration commands (linked). We make the previous NOP point to - * the beginning of the buffer instead of the tx command. After, we go - * as usual to the NOP command. - * Note that only the last command (mc_set) will generate an interrupt. - * - * (called by wv_hw_reset(), wv_82586_reconfig(), wavelan_packet_xmit()) - */ -static void wv_82586_config(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - unsigned short txblock; - unsigned short txpred; - unsigned short tx_addr; - unsigned short nop_addr; - unsigned short tbd_addr; - unsigned short cfg_addr; - unsigned short ias_addr; - unsigned short mcs_addr; - ac_tx_t tx; - ac_nop_t nop; - ac_cfg_t cfg; /* Configure action */ - ac_ias_t ias; /* IA-setup action */ - ac_mcs_t mcs; /* Multicast setup */ - struct dev_mc_list *dmi; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_82586_config()\n", dev->name); -#endif - - /* Check nothing bad has happened */ - if (lp->tx_n_in_use == (NTXBLOCKS - 1)) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_INFO "%s: wv_82586_config(): Tx queue full.\n", - dev->name); -#endif - return; - } - - /* Calculate addresses of next block and previous block. */ - txblock = lp->tx_first_free; - txpred = txblock - TXBLOCKZ; - if (txpred < OFFSET_CU) - txpred += NTXBLOCKS * TXBLOCKZ; - lp->tx_first_free += TXBLOCKZ; - if (lp->tx_first_free >= OFFSET_CU + NTXBLOCKS * TXBLOCKZ) - lp->tx_first_free -= NTXBLOCKS * TXBLOCKZ; - - lp->tx_n_in_use++; - - /* Calculate addresses of the different parts of the block. */ - tx_addr = txblock; - nop_addr = tx_addr + sizeof(tx); - tbd_addr = nop_addr + sizeof(nop); - cfg_addr = tbd_addr + sizeof(tbd_t); /*beginning of the buffer */ - ias_addr = cfg_addr + sizeof(cfg); - mcs_addr = ias_addr + sizeof(ias); - - /* - * Transmit command - */ - tx.tx_h.ac_status = 0xFFFF; /* Fake completion value */ - obram_write(ioaddr, toff(ac_tx_t, tx_addr, tx_h.ac_status), - (unsigned char *) &tx.tx_h.ac_status, - sizeof(tx.tx_h.ac_status)); - - /* - * NOP command - */ - nop.nop_h.ac_status = 0; - obram_write(ioaddr, toff(ac_nop_t, nop_addr, nop_h.ac_status), - (unsigned char *) &nop.nop_h.ac_status, - sizeof(nop.nop_h.ac_status)); - nop.nop_h.ac_link = nop_addr; - obram_write(ioaddr, toff(ac_nop_t, nop_addr, nop_h.ac_link), - (unsigned char *) &nop.nop_h.ac_link, - sizeof(nop.nop_h.ac_link)); - - /* Create a configure action. */ - memset(&cfg, 0x00, sizeof(cfg)); - - /* - * For Linux we invert AC_CFG_ALOC() so as to conform - * to the way that net packets reach us from above. - * (See also ac_tx_t.) - * - * Updated from Wavelan Manual WCIN085B - */ - cfg.cfg_byte_cnt = - AC_CFG_BYTE_CNT(sizeof(ac_cfg_t) - sizeof(ach_t)); - cfg.cfg_fifolim = AC_CFG_FIFOLIM(4); - cfg.cfg_byte8 = AC_CFG_SAV_BF(1) | AC_CFG_SRDY(0); - cfg.cfg_byte9 = AC_CFG_ELPBCK(0) | - AC_CFG_ILPBCK(0) | - AC_CFG_PRELEN(AC_CFG_PLEN_2) | - AC_CFG_ALOC(1) | AC_CFG_ADDRLEN(WAVELAN_ADDR_SIZE); - cfg.cfg_byte10 = AC_CFG_BOFMET(1) | - AC_CFG_ACR(6) | AC_CFG_LINPRIO(0); - cfg.cfg_ifs = 0x20; - cfg.cfg_slotl = 0x0C; - cfg.cfg_byte13 = AC_CFG_RETRYNUM(15) | AC_CFG_SLTTMHI(0); - cfg.cfg_byte14 = AC_CFG_FLGPAD(0) | - AC_CFG_BTSTF(0) | - AC_CFG_CRC16(0) | - AC_CFG_NCRC(0) | - AC_CFG_TNCRS(1) | - AC_CFG_MANCH(0) | - AC_CFG_BCDIS(0) | AC_CFG_PRM(lp->promiscuous); - cfg.cfg_byte15 = AC_CFG_ICDS(0) | - AC_CFG_CDTF(0) | AC_CFG_ICSS(0) | AC_CFG_CSTF(0); -/* - cfg.cfg_min_frm_len = AC_CFG_MNFRM(64); -*/ - cfg.cfg_min_frm_len = AC_CFG_MNFRM(8); - - cfg.cfg_h.ac_command = (AC_CFLD_CMD & acmd_configure); - cfg.cfg_h.ac_link = ias_addr; - obram_write(ioaddr, cfg_addr, (unsigned char *) &cfg, sizeof(cfg)); - - /* Set up the MAC address */ - memset(&ias, 0x00, sizeof(ias)); - ias.ias_h.ac_command = (AC_CFLD_CMD & acmd_ia_setup); - ias.ias_h.ac_link = mcs_addr; - memcpy(&ias.ias_addr[0], (unsigned char *) &dev->dev_addr[0], - sizeof(ias.ias_addr)); - obram_write(ioaddr, ias_addr, (unsigned char *) &ias, sizeof(ias)); - - /* Initialize adapter's Ethernet multicast addresses */ - memset(&mcs, 0x00, sizeof(mcs)); - mcs.mcs_h.ac_command = AC_CFLD_I | (AC_CFLD_CMD & acmd_mc_setup); - mcs.mcs_h.ac_link = nop_addr; - mcs.mcs_cnt = WAVELAN_ADDR_SIZE * lp->mc_count; - obram_write(ioaddr, mcs_addr, (unsigned char *) &mcs, sizeof(mcs)); - - /* Any address to set? */ - if (lp->mc_count) { - netdev_for_each_mc_addr(dmi, dev) - outsw(PIOP1(ioaddr), (u16 *) dmi->dmi_addr, - WAVELAN_ADDR_SIZE >> 1); - -#ifdef DEBUG_CONFIG_INFO - printk(KERN_DEBUG - "%s: wv_82586_config(): set %d multicast addresses:\n", - dev->name, lp->mc_count); - netdev_for_each_mc_addr(dmi, dev) - printk(KERN_DEBUG " %pM\n", dmi->dmi_addr); -#endif - } - - /* - * Overwrite the predecessor NOP link - * so that it points to the configure action. - */ - nop_addr = txpred + sizeof(tx); - nop.nop_h.ac_status = 0; - obram_write(ioaddr, toff(ac_nop_t, nop_addr, nop_h.ac_status), - (unsigned char *) &nop.nop_h.ac_status, - sizeof(nop.nop_h.ac_status)); - nop.nop_h.ac_link = cfg_addr; - obram_write(ioaddr, toff(ac_nop_t, nop_addr, nop_h.ac_link), - (unsigned char *) &nop.nop_h.ac_link, - sizeof(nop.nop_h.ac_link)); - - /* Job done, clear the flag */ - lp->reconfig_82586 = 0; - - if (lp->tx_first_in_use == I82586NULL) - lp->tx_first_in_use = txblock; - - if (lp->tx_n_in_use == (NTXBLOCKS - 1)) - netif_stop_queue(dev); - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_82586_config()\n", dev->name); -#endif -} - -/*------------------------------------------------------------------*/ -/* - * This routine, called by wavelan_close(), gracefully stops the - * WaveLAN controller (i82586). - * (called by wavelan_close()) - */ -static void wv_82586_stop(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - u16 scb_cmd; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_82586_stop()\n", dev->name); -#endif - - /* Suspend both command unit and receive unit. */ - scb_cmd = - (SCB_CMD_CUC & SCB_CMD_CUC_SUS) | (SCB_CMD_RUC & - SCB_CMD_RUC_SUS); - obram_write(ioaddr, scboff(OFFSET_SCB, scb_command), - (unsigned char *) &scb_cmd, sizeof(scb_cmd)); - set_chan_attn(ioaddr, lp->hacr); - - /* No more interrupts */ - wv_ints_off(dev); - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_82586_stop()\n", dev->name); -#endif -} - -/*------------------------------------------------------------------*/ -/* - * Totally reset the WaveLAN and restart it. - * Performs the following actions: - * 1. A power reset (reset DMA) - * 2. Initialize the radio modem (using wv_mmc_init) - * 3. Reset & Configure LAN controller (using wv_82586_start) - * 4. Start the LAN controller's command unit - * 5. Start the LAN controller's receive unit - * (called by wavelan_interrupt(), wavelan_watchdog() & wavelan_open()) - */ -static int wv_hw_reset(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long ioaddr = dev->base_addr; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_hw_reset(dev=0x%x)\n", dev->name, - (unsigned int) dev); -#endif - - /* Increase the number of resets done. */ - lp->nresets++; - - wv_hacr_reset(ioaddr); - lp->hacr = HACR_DEFAULT; - - if ((wv_mmc_init(dev) < 0) || (wv_82586_start(dev) < 0)) - return -1; - - /* Enable the card to send interrupts. */ - wv_ints_on(dev); - - /* Start card functions */ - if (wv_cu_start(dev) < 0) - return -1; - - /* Setup the controller and parameters */ - wv_82586_config(dev); - - /* Finish configuration with the receive unit */ - if (wv_ru_start(dev) < 0) - return -1; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_hw_reset()\n", dev->name); -#endif - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Check if there is a WaveLAN at the specific base address. - * As a side effect, this reads the MAC address. - * (called in wavelan_probe() and init_module()) - */ -static int wv_check_ioaddr(unsigned long ioaddr, u8 * mac) -{ - int i; /* Loop counter */ - - /* Check if the base address if available. */ - if (!request_region(ioaddr, sizeof(ha_t), "wavelan probe")) - return -EBUSY; /* ioaddr already used */ - - /* Reset host interface */ - wv_hacr_reset(ioaddr); - - /* Read the MAC address from the parameter storage area. */ - psa_read(ioaddr, HACR_DEFAULT, psaoff(0, psa_univ_mac_addr), - mac, 6); - - release_region(ioaddr, sizeof(ha_t)); - - /* - * Check the first three octets of the address for the manufacturer's code. - * Note: if this can't find your WaveLAN card, you've got a - * non-NCR/AT&T/Lucent ISA card. See wavelan.p.h for detail on - * how to configure your card. - */ - for (i = 0; i < ARRAY_SIZE(MAC_ADDRESSES); i++) - if ((mac[0] == MAC_ADDRESSES[i][0]) && - (mac[1] == MAC_ADDRESSES[i][1]) && - (mac[2] == MAC_ADDRESSES[i][2])) - return 0; - -#ifdef DEBUG_CONFIG_INFO - printk(KERN_WARNING - "WaveLAN (0x%3X): your MAC address might be %02X:%02X:%02X.\n", - ioaddr, mac[0], mac[1], mac[2]); -#endif - return -ENODEV; -} - -/************************ INTERRUPT HANDLING ************************/ - -/* - * This function is the interrupt handler for the WaveLAN card. This - * routine will be called whenever: - */ -static irqreturn_t wavelan_interrupt(int irq, void *dev_id) -{ - struct net_device *dev; - unsigned long ioaddr; - net_local *lp; - u16 hasr; - u16 status; - u16 ack_cmd; - - dev = dev_id; - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: ->wavelan_interrupt()\n", dev->name); -#endif - - lp = netdev_priv(dev); - ioaddr = dev->base_addr; - -#ifdef DEBUG_INTERRUPT_INFO - /* Check state of our spinlock */ - if(spin_is_locked(&lp->spinlock)) - printk(KERN_DEBUG - "%s: wavelan_interrupt(): spinlock is already locked !!!\n", - dev->name); -#endif - - /* Prevent reentrancy. We need to do that because we may have - * multiple interrupt handler running concurrently. - * It is safe because interrupts are disabled before acquiring - * the spinlock. */ - spin_lock(&lp->spinlock); - - /* We always had spurious interrupts at startup, but lately I - * saw them comming *between* the request_irq() and the - * spin_lock_irqsave() in wavelan_open(), so the spinlock - * protection is no enough. - * So, we also check lp->hacr that will tell us is we enabled - * irqs or not (see wv_ints_on()). - * We can't use netif_running(dev) because we depend on the - * proper processing of the irq generated during the config. */ - - /* Which interrupt it is ? */ - hasr = hasr_read(ioaddr); - -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_INFO - "%s: wavelan_interrupt(): hasr 0x%04x; hacr 0x%04x.\n", - dev->name, hasr, lp->hacr); -#endif - - /* Check modem interrupt */ - if ((hasr & HASR_MMC_INTR) && (lp->hacr & HACR_MMC_INT_ENABLE)) { - u8 dce_status; - - /* - * Interrupt from the modem management controller. - * This will clear it -- ignored for now. - */ - mmc_read(ioaddr, mmroff(0, mmr_dce_status), &dce_status, - sizeof(dce_status)); - -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO - "%s: wavelan_interrupt(): unexpected mmc interrupt: status 0x%04x.\n", - dev->name, dce_status); -#endif - } - - /* Check if not controller interrupt */ - if (((hasr & HASR_82586_INTR) == 0) || - ((lp->hacr & HACR_82586_INT_ENABLE) == 0)) { -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO - "%s: wavelan_interrupt(): interrupt not coming from i82586 - hasr 0x%04x.\n", - dev->name, hasr); -#endif - spin_unlock (&lp->spinlock); - return IRQ_NONE; - } - - /* Read interrupt data. */ - obram_read(ioaddr, scboff(OFFSET_SCB, scb_status), - (unsigned char *) &status, sizeof(status)); - - /* - * Acknowledge the interrupt(s). - */ - ack_cmd = status & SCB_ST_INT; - obram_write(ioaddr, scboff(OFFSET_SCB, scb_command), - (unsigned char *) &ack_cmd, sizeof(ack_cmd)); - set_chan_attn(ioaddr, lp->hacr); - -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_DEBUG "%s: wavelan_interrupt(): status 0x%04x.\n", - dev->name, status); -#endif - - /* Command completed. */ - if ((status & SCB_ST_CX) == SCB_ST_CX) { -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_DEBUG - "%s: wavelan_interrupt(): command completed.\n", - dev->name); -#endif - wv_complete(dev, ioaddr, lp); - } - - /* Frame received. */ - if ((status & SCB_ST_FR) == SCB_ST_FR) { -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_DEBUG - "%s: wavelan_interrupt(): received packet.\n", - dev->name); -#endif - wv_receive(dev); - } - - /* Check the state of the command unit. */ - if (((status & SCB_ST_CNA) == SCB_ST_CNA) || - (((status & SCB_ST_CUS) != SCB_ST_CUS_ACTV) && - (netif_running(dev)))) { -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO - "%s: wavelan_interrupt(): CU inactive -- restarting\n", - dev->name); -#endif - wv_hw_reset(dev); - } - - /* Check the state of the command unit. */ - if (((status & SCB_ST_RNR) == SCB_ST_RNR) || - (((status & SCB_ST_RUS) != SCB_ST_RUS_RDY) && - (netif_running(dev)))) { -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO - "%s: wavelan_interrupt(): RU not ready -- restarting\n", - dev->name); -#endif - wv_hw_reset(dev); - } - - /* Release spinlock */ - spin_unlock (&lp->spinlock); - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: <-wavelan_interrupt()\n", dev->name); -#endif - return IRQ_HANDLED; -} - -/*------------------------------------------------------------------*/ -/* - * Watchdog: when we start a transmission, a timer is set for us in the - * kernel. If the transmission completes, this timer is disabled. If - * the timer expires, we are called and we try to unlock the hardware. - */ -static void wavelan_watchdog(struct net_device * dev) -{ - net_local *lp = netdev_priv(dev); - u_long ioaddr = dev->base_addr; - unsigned long flags; - unsigned int nreaped; - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: ->wavelan_watchdog()\n", dev->name); -#endif - -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "%s: wavelan_watchdog: watchdog timer expired\n", - dev->name); -#endif - - /* Check that we came here for something */ - if (lp->tx_n_in_use <= 0) { - return; - } - - spin_lock_irqsave(&lp->spinlock, flags); - - /* Try to see if some buffers are not free (in case we missed - * an interrupt */ - nreaped = wv_complete(dev, ioaddr, lp); - -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_DEBUG - "%s: wavelan_watchdog(): %d reaped, %d remain.\n", - dev->name, nreaped, lp->tx_n_in_use); -#endif - -#ifdef DEBUG_PSA_SHOW - { - psa_t psa; - psa_read(dev, 0, (unsigned char *) &psa, sizeof(psa)); - wv_psa_show(&psa); - } -#endif -#ifdef DEBUG_MMC_SHOW - wv_mmc_show(dev); -#endif -#ifdef DEBUG_I82586_SHOW - wv_cu_show(dev); -#endif - - /* If no buffer has been freed */ - if (nreaped == 0) { -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO - "%s: wavelan_watchdog(): cleanup failed, trying reset\n", - dev->name); -#endif - wv_hw_reset(dev); - } - - /* At this point, we should have some free Tx buffer ;-) */ - if (lp->tx_n_in_use < NTXBLOCKS - 1) - netif_wake_queue(dev); - - spin_unlock_irqrestore(&lp->spinlock, flags); - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: <-wavelan_watchdog()\n", dev->name); -#endif -} - -/********************* CONFIGURATION CALLBACKS *********************/ -/* - * Here are the functions called by the Linux networking code (NET3) - * for initialization, configuration and deinstallations of the - * WaveLAN ISA hardware. - */ - -/*------------------------------------------------------------------*/ -/* - * Configure and start up the WaveLAN PCMCIA adaptor. - * Called by NET3 when it "opens" the device. - */ -static int wavelan_open(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long flags; - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: ->wavelan_open(dev=0x%x)\n", dev->name, - (unsigned int) dev); -#endif - - /* Check irq */ - if (dev->irq == 0) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_WARNING "%s: wavelan_open(): no IRQ\n", - dev->name); -#endif - return -ENXIO; - } - - if (request_irq(dev->irq, &wavelan_interrupt, 0, "WaveLAN", dev) != 0) - { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_WARNING "%s: wavelan_open(): invalid IRQ\n", - dev->name); -#endif - return -EAGAIN; - } - - spin_lock_irqsave(&lp->spinlock, flags); - - if (wv_hw_reset(dev) != -1) { - netif_start_queue(dev); - } else { - free_irq(dev->irq, dev); -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_INFO - "%s: wavelan_open(): impossible to start the card\n", - dev->name); -#endif - spin_unlock_irqrestore(&lp->spinlock, flags); - return -EAGAIN; - } - spin_unlock_irqrestore(&lp->spinlock, flags); - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: <-wavelan_open()\n", dev->name); -#endif - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Shut down the WaveLAN ISA card. - * Called by NET3 when it "closes" the device. - */ -static int wavelan_close(struct net_device *dev) -{ - net_local *lp = netdev_priv(dev); - unsigned long flags; - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: ->wavelan_close(dev=0x%x)\n", dev->name, - (unsigned int) dev); -#endif - - netif_stop_queue(dev); - - /* - * Flush the Tx and disable Rx. - */ - spin_lock_irqsave(&lp->spinlock, flags); - wv_82586_stop(dev); - spin_unlock_irqrestore(&lp->spinlock, flags); - - free_irq(dev->irq, dev); - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: <-wavelan_close()\n", dev->name); -#endif - return 0; -} - -static const struct net_device_ops wavelan_netdev_ops = { - .ndo_open = wavelan_open, - .ndo_stop = wavelan_close, - .ndo_start_xmit = wavelan_packet_xmit, - .ndo_set_multicast_list = wavelan_set_multicast_list, - .ndo_tx_timeout = wavelan_watchdog, - .ndo_change_mtu = eth_change_mtu, - .ndo_validate_addr = eth_validate_addr, -#ifdef SET_MAC_ADDRESS - .ndo_set_mac_address = wavelan_set_mac_address -#else - .ndo_set_mac_address = eth_mac_addr, -#endif -}; - - -/*------------------------------------------------------------------*/ -/* - * Probe an I/O address, and if the WaveLAN is there configure the - *device structure - * (called by wavelan_probe() and via init_module()). - */ -static int __init wavelan_config(struct net_device *dev, unsigned short ioaddr) -{ - u8 irq_mask; - int irq; - net_local *lp; - mac_addr mac; - int err; - - if (!request_region(ioaddr, sizeof(ha_t), "wavelan")) - return -EADDRINUSE; - - err = wv_check_ioaddr(ioaddr, mac); - if (err) - goto out; - - memcpy(dev->dev_addr, mac, 6); - - dev->base_addr = ioaddr; - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: ->wavelan_config(dev=0x%x, ioaddr=0x%lx)\n", - dev->name, (unsigned int) dev, ioaddr); -#endif - - /* Check IRQ argument on command line. */ - if (dev->irq != 0) { - irq_mask = wv_irq_to_psa(dev->irq); - - if (irq_mask == 0) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_WARNING - "%s: wavelan_config(): invalid IRQ %d ignored.\n", - dev->name, dev->irq); -#endif - dev->irq = 0; - } else { -#ifdef DEBUG_CONFIG_INFO - printk(KERN_DEBUG - "%s: wavelan_config(): changing IRQ to %d\n", - dev->name, dev->irq); -#endif - psa_write(ioaddr, HACR_DEFAULT, - psaoff(0, psa_int_req_no), &irq_mask, 1); - /* update the Wavelan checksum */ - update_psa_checksum(dev, ioaddr, HACR_DEFAULT); - wv_hacr_reset(ioaddr); - } - } - - psa_read(ioaddr, HACR_DEFAULT, psaoff(0, psa_int_req_no), - &irq_mask, 1); - if ((irq = wv_psa_to_irq(irq_mask)) == -1) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_INFO - "%s: wavelan_config(): could not wavelan_map_irq(%d).\n", - dev->name, irq_mask); -#endif - err = -EAGAIN; - goto out; - } - - dev->irq = irq; - - dev->mem_start = 0x0000; - dev->mem_end = 0x0000; - dev->if_port = 0; - - /* Initialize device structures */ - memset(netdev_priv(dev), 0, sizeof(net_local)); - lp = netdev_priv(dev); - - /*back link to the device structure. */ - lp->dev = dev; - /* Add the device at the beginning of the linked list. */ - lp->next = wavelan_list; - wavelan_list = lp; - - lp->hacr = HACR_DEFAULT; - - /* Multicast stuff */ - lp->promiscuous = 0; - lp->mc_count = 0; - - /* Init spinlock */ - spin_lock_init(&lp->spinlock); - - dev->netdev_ops = &wavelan_netdev_ops; - dev->watchdog_timeo = WATCHDOG_JIFFIES; - dev->wireless_handlers = &wavelan_handler_def; - lp->wireless_data.spy_data = &lp->spy_data; - dev->wireless_data = &lp->wireless_data; - - dev->mtu = WAVELAN_MTU; - - /* Display nice information. */ - wv_init_info(dev); - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: <-wavelan_config()\n", dev->name); -#endif - return 0; -out: - release_region(ioaddr, sizeof(ha_t)); - return err; -} - -/*------------------------------------------------------------------*/ -/* - * Check for a network adaptor of this type. Return '0' iff one - * exists. There seem to be different interpretations of - * the initial value of dev->base_addr. - * We follow the example in drivers/net/ne.c. - * (called in "Space.c") - */ -struct net_device * __init wavelan_probe(int unit) -{ - struct net_device *dev; - short base_addr; - int def_irq; - int i; - int r = 0; - - /* compile-time check the sizes of structures */ - BUILD_BUG_ON(sizeof(psa_t) != PSA_SIZE); - BUILD_BUG_ON(sizeof(mmw_t) != MMW_SIZE); - BUILD_BUG_ON(sizeof(mmr_t) != MMR_SIZE); - BUILD_BUG_ON(sizeof(ha_t) != HA_SIZE); - - dev = alloc_etherdev(sizeof(net_local)); - if (!dev) - return ERR_PTR(-ENOMEM); - - sprintf(dev->name, "eth%d", unit); - netdev_boot_setup_check(dev); - base_addr = dev->base_addr; - def_irq = dev->irq; - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG - "%s: ->wavelan_probe(dev=%p (base_addr=0x%x))\n", - dev->name, dev, (unsigned int) dev->base_addr); -#endif - - /* Don't probe at all. */ - if (base_addr < 0) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_WARNING - "%s: wavelan_probe(): invalid base address\n", - dev->name); -#endif - r = -ENXIO; - } else if (base_addr > 0x100) { /* Check a single specified location. */ - r = wavelan_config(dev, base_addr); -#ifdef DEBUG_CONFIG_INFO - if (r != 0) - printk(KERN_DEBUG - "%s: wavelan_probe(): no device at specified base address (0x%X) or address already in use\n", - dev->name, base_addr); -#endif - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: <-wavelan_probe()\n", dev->name); -#endif - } else { /* Scan all possible addresses of the WaveLAN hardware. */ - for (i = 0; i < ARRAY_SIZE(iobase); i++) { - dev->irq = def_irq; - if (wavelan_config(dev, iobase[i]) == 0) { -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG - "%s: <-wavelan_probe()\n", - dev->name); -#endif - break; - } - } - if (i == ARRAY_SIZE(iobase)) - r = -ENODEV; - } - if (r) - goto out; - r = register_netdev(dev); - if (r) - goto out1; - return dev; -out1: - release_region(dev->base_addr, sizeof(ha_t)); - wavelan_list = wavelan_list->next; -out: - free_netdev(dev); - return ERR_PTR(r); -} - -/****************************** MODULE ******************************/ -/* - * Module entry point: insertion and removal - */ - -#ifdef MODULE -/*------------------------------------------------------------------*/ -/* - * Insertion of the module - * I'm now quite proud of the multi-device support. - */ -int __init init_module(void) -{ - int ret = -EIO; /* Return error if no cards found */ - int i; - -#ifdef DEBUG_MODULE_TRACE - printk(KERN_DEBUG "-> init_module()\n"); -#endif - - /* If probing is asked */ - if (io[0] == 0) { -#ifdef DEBUG_CONFIG_ERROR - printk(KERN_WARNING - "WaveLAN init_module(): doing device probing (bad !)\n"); - printk(KERN_WARNING - "Specify base addresses while loading module to correct the problem\n"); -#endif - - /* Copy the basic set of address to be probed. */ - for (i = 0; i < ARRAY_SIZE(iobase); i++) - io[i] = iobase[i]; - } - - - /* Loop on all possible base addresses. */ - for (i = 0; i < ARRAY_SIZE(io) && io[i] != 0; i++) { - struct net_device *dev = alloc_etherdev(sizeof(net_local)); - if (!dev) - break; - if (name[i]) - strcpy(dev->name, name[i]); /* Copy name */ - dev->base_addr = io[i]; - dev->irq = irq[i]; - - /* Check if there is something at this base address. */ - if (wavelan_config(dev, io[i]) == 0) { - if (register_netdev(dev) != 0) { - release_region(dev->base_addr, sizeof(ha_t)); - wavelan_list = wavelan_list->next; - } else { - ret = 0; - continue; - } - } - free_netdev(dev); - } - -#ifdef DEBUG_CONFIG_ERROR - if (!wavelan_list) - printk(KERN_WARNING - "WaveLAN init_module(): no device found\n"); -#endif - -#ifdef DEBUG_MODULE_TRACE - printk(KERN_DEBUG "<- init_module()\n"); -#endif - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Removal of the module - */ -void cleanup_module(void) -{ -#ifdef DEBUG_MODULE_TRACE - printk(KERN_DEBUG "-> cleanup_module()\n"); -#endif - - /* Loop on all devices and release them. */ - while (wavelan_list) { - struct net_device *dev = wavelan_list->dev; - -#ifdef DEBUG_CONFIG_INFO - printk(KERN_DEBUG - "%s: cleanup_module(): removing device at 0x%x\n", - dev->name, (unsigned int) dev); -#endif - unregister_netdev(dev); - - release_region(dev->base_addr, sizeof(ha_t)); - wavelan_list = wavelan_list->next; - - free_netdev(dev); - } - -#ifdef DEBUG_MODULE_TRACE - printk(KERN_DEBUG "<- cleanup_module()\n"); -#endif -} -#endif /* MODULE */ -MODULE_LICENSE("GPL"); - -/* - * This software may only be used and distributed - * according to the terms of the GNU General Public License. - * - * This software was developed as a component of the - * Linux operating system. - * It is based on other device drivers and information - * either written or supplied by: - * Ajay Bakre (bakre@paul.rutgers.edu), - * Donald Becker (becker@scyld.com), - * Loeke Brederveld (Loeke.Brederveld@Utrecht.NCR.com), - * Anders Klemets (klemets@it.kth.se), - * Vladimir V. Kolpakov (w@stier.koenig.ru), - * Marc Meertens (Marc.Meertens@Utrecht.NCR.com), - * Pauline Middelink (middelin@polyware.iaf.nl), - * Robert Morris (rtm@das.harvard.edu), - * Jean Tourrilhes (jt@hplb.hpl.hp.com), - * Girish Welling (welling@paul.rutgers.edu), - * - * Thanks go also to: - * James Ashton (jaa101@syseng.anu.edu.au), - * Alan Cox (alan@lxorguk.ukuu.org.uk), - * Allan Creighton (allanc@cs.usyd.edu.au), - * Matthew Geier (matthew@cs.usyd.edu.au), - * Remo di Giovanni (remo@cs.usyd.edu.au), - * Eckhard Grah (grah@wrcs1.urz.uni-wuppertal.de), - * Vipul Gupta (vgupta@cs.binghamton.edu), - * Mark Hagan (mhagan@wtcpost.daytonoh.NCR.COM), - * Tim Nicholson (tim@cs.usyd.edu.au), - * Ian Parkin (ian@cs.usyd.edu.au), - * John Rosenberg (johnr@cs.usyd.edu.au), - * George Rossi (george@phm.gov.au), - * Arthur Scott (arthur@cs.usyd.edu.au), - * Peter Storey, - * for their assistance and advice. - * - * Please send bug reports, updates, comments to: - * - *bruce Janson Email: bruce@cs.usyd.edu.au - *basser Department of Computer Science Phone: +61-2-9351-3423 - * University of Sydney, N.S.W., 2006, AUSTRALIA Fax: +61-2-9351-3838 - */ diff --git a/drivers/staging/wavelan/wavelan.h b/drivers/staging/wavelan/wavelan.h deleted file mode 100644 index 1ebae10..0000000 --- a/drivers/staging/wavelan/wavelan.h +++ /dev/null @@ -1,363 +0,0 @@ -/* - * WaveLAN ISA driver - * - * Jean II - HPLB '96 - * - * Reorganisation and extension of the driver. - * Original copyright follows. See wavelan.p.h for details. - * - * This file contains the declarations for the WaveLAN hardware. Note that - * the WaveLAN ISA includes a i82586 controller (see definitions in - * file i82586.h). - * - * The main difference between the ISA hardware and the PCMCIA one is - * the Ethernet controller (i82586 instead of i82593). - * The i82586 allows multiple transmit buffers. The PSA needs to be accessed - * through the host interface. - */ - -#ifndef _WAVELAN_H -#define _WAVELAN_H - -/************************** MAGIC NUMBERS ***************************/ - -/* Detection of the WaveLAN card is done by reading the MAC - * address from the card and checking it. If you have a non-AT&T - * product (OEM, like DEC RoamAbout, Digital Ocean, or Epson), - * you might need to modify this part to accommodate your hardware. - */ -static const char MAC_ADDRESSES[][3] = { - { 0x08, 0x00, 0x0E }, /* AT&T WaveLAN (standard) & DEC RoamAbout */ - { 0x08, 0x00, 0x6A }, /* AT&T WaveLAN (alternate) */ - { 0x00, 0x00, 0xE1 }, /* Hitachi Wavelan */ - { 0x00, 0x60, 0x1D } /* Lucent Wavelan (another one) */ - /* Add your card here and send me the patch! */ -}; - -#define WAVELAN_ADDR_SIZE 6 /* Size of a MAC address */ - -#define WAVELAN_MTU 1500 /* Maximum size of WaveLAN packet */ - -#define MAXDATAZ (WAVELAN_ADDR_SIZE + WAVELAN_ADDR_SIZE + 2 + WAVELAN_MTU) - -/* - * Constants used to convert channels to frequencies - */ - -/* Frequency available in the 2.0 modem, in units of 250 kHz - * (as read in the offset register of the dac area). - * Used to map channel numbers used by `wfreqsel' to frequencies - */ -static const short channel_bands[] = { 0x30, 0x58, 0x64, 0x7A, 0x80, 0xA8, - 0xD0, 0xF0, 0xF8, 0x150 }; - -/* Frequencies of the 1.0 modem (fixed frequencies). - * Use to map the PSA `subband' to a frequency - * Note : all frequencies apart from the first one need to be multiplied by 10 - */ -static const int fixed_bands[] = { 915e6, 2.425e8, 2.46e8, 2.484e8, 2.4305e8 }; - - - -/*************************** PC INTERFACE ****************************/ - -/* - * Host Adaptor structure. - * (base is board port address). - */ -typedef union hacs_u hacs_u; -union hacs_u { - unsigned short hu_command; /* Command register */ -#define HACR_RESET 0x0001 /* Reset board */ -#define HACR_CA 0x0002 /* Set Channel Attention for 82586 */ -#define HACR_16BITS 0x0004 /* 16-bit operation (0 => 8bits) */ -#define HACR_OUT0 0x0008 /* General purpose output pin 0 */ - /* not used - must be 1 */ -#define HACR_OUT1 0x0010 /* General purpose output pin 1 */ - /* not used - must be 1 */ -#define HACR_82586_INT_ENABLE 0x0020 /* Enable 82586 interrupts */ -#define HACR_MMC_INT_ENABLE 0x0040 /* Enable MMC interrupts */ -#define HACR_INTR_CLR_ENABLE 0x0080 /* Enable interrupt status read/clear */ - unsigned short hu_status; /* Status Register */ -#define HASR_82586_INTR 0x0001 /* Interrupt request from 82586 */ -#define HASR_MMC_INTR 0x0002 /* Interrupt request from MMC */ -#define HASR_MMC_BUSY 0x0004 /* MMC busy indication */ -#define HASR_PSA_BUSY 0x0008 /* LAN parameter storage area busy */ -} __attribute__ ((packed)); - -typedef struct ha_t ha_t; -struct ha_t { - hacs_u ha_cs; /* Command and status registers */ -#define ha_command ha_cs.hu_command -#define ha_status ha_cs.hu_status - unsigned short ha_mmcr; /* Modem Management Ctrl Register */ - unsigned short ha_pior0; /* Program I/O Address Register Port 0 */ - unsigned short ha_piop0; /* Program I/O Port 0 */ - unsigned short ha_pior1; /* Program I/O Address Register Port 1 */ - unsigned short ha_piop1; /* Program I/O Port 1 */ - unsigned short ha_pior2; /* Program I/O Address Register Port 2 */ - unsigned short ha_piop2; /* Program I/O Port 2 */ -}; - -#define HA_SIZE 16 - -#define hoff(p, f) (unsigned short)((void *)(&((ha_t *)((void *)0 + (p)))->f) - (void *)0) -#define HACR(p) hoff(p, ha_command) -#define HASR(p) hoff(p, ha_status) -#define MMCR(p) hoff(p, ha_mmcr) -#define PIOR0(p) hoff(p, ha_pior0) -#define PIOP0(p) hoff(p, ha_piop0) -#define PIOR1(p) hoff(p, ha_pior1) -#define PIOP1(p) hoff(p, ha_piop1) -#define PIOR2(p) hoff(p, ha_pior2) -#define PIOP2(p) hoff(p, ha_piop2) - -/* - * Program I/O Mode Register values. - */ -#define STATIC_PIO 0 /* Mode 1: static mode */ - /* RAM access ??? */ -#define AUTOINCR_PIO 1 /* Mode 2: auto increment mode */ - /* RAM access ??? */ -#define AUTODECR_PIO 2 /* Mode 3: auto decrement mode */ - /* RAM access ??? */ -#define PARAM_ACCESS_PIO 3 /* Mode 4: LAN parameter access mode */ - /* Parameter access. */ -#define PIO_MASK 3 /* register mask */ -#define PIOM(cmd, piono) ((u_short)cmd << 10 << (piono * 2)) - -#define HACR_DEFAULT (HACR_OUT0 | HACR_OUT1 | HACR_16BITS | PIOM(STATIC_PIO, 0) | PIOM(AUTOINCR_PIO, 1) | PIOM(PARAM_ACCESS_PIO, 2)) -#define HACR_INTRON (HACR_82586_INT_ENABLE | HACR_MMC_INT_ENABLE | HACR_INTR_CLR_ENABLE) - -/************************** MEMORY LAYOUT **************************/ - -/* - * Onboard 64 k RAM layout. - * (Offsets from 0x0000.) - */ -#define OFFSET_RU 0x0000 /* 75% memory */ -#define OFFSET_CU 0xC000 /* 25% memory */ -#define OFFSET_SCB (OFFSET_ISCP - sizeof(scb_t)) -#define OFFSET_ISCP (OFFSET_SCP - sizeof(iscp_t)) -#define OFFSET_SCP I82586_SCP_ADDR - -#define RXBLOCKZ (sizeof(fd_t) + sizeof(rbd_t) + MAXDATAZ) -#define TXBLOCKZ (sizeof(ac_tx_t) + sizeof(ac_nop_t) + sizeof(tbd_t) + MAXDATAZ) - -#define NRXBLOCKS ((OFFSET_CU - OFFSET_RU) / RXBLOCKZ) -#define NTXBLOCKS ((OFFSET_SCB - OFFSET_CU) / TXBLOCKZ) - -/********************** PARAMETER STORAGE AREA **********************/ - -/* - * Parameter Storage Area (PSA). - */ -typedef struct psa_t psa_t; -struct psa_t { - unsigned char psa_io_base_addr_1; /* [0x00] Base address 1 ??? */ - unsigned char psa_io_base_addr_2; /* [0x01] Base address 2 */ - unsigned char psa_io_base_addr_3; /* [0x02] Base address 3 */ - unsigned char psa_io_base_addr_4; /* [0x03] Base address 4 */ - unsigned char psa_rem_boot_addr_1; /* [0x04] Remote Boot Address 1 */ - unsigned char psa_rem_boot_addr_2; /* [0x05] Remote Boot Address 2 */ - unsigned char psa_rem_boot_addr_3; /* [0x06] Remote Boot Address 3 */ - unsigned char psa_holi_params; /* [0x07] HOst Lan Interface (HOLI) Parameters */ - unsigned char psa_int_req_no; /* [0x08] Interrupt Request Line */ - unsigned char psa_unused0[7]; /* [0x09-0x0F] unused */ - - unsigned char psa_univ_mac_addr[WAVELAN_ADDR_SIZE]; /* [0x10-0x15] Universal (factory) MAC Address */ - unsigned char psa_local_mac_addr[WAVELAN_ADDR_SIZE]; /* [0x16-1B] Local MAC Address */ - unsigned char psa_univ_local_sel; /* [0x1C] Universal Local Selection */ -#define PSA_UNIVERSAL 0 /* Universal (factory) */ -#define PSA_LOCAL 1 /* Local */ - unsigned char psa_comp_number; /* [0x1D] Compatibility Number: */ -#define PSA_COMP_PC_AT_915 0 /* PC-AT 915 MHz */ -#define PSA_COMP_PC_MC_915 1 /* PC-MC 915 MHz */ -#define PSA_COMP_PC_AT_2400 2 /* PC-AT 2.4 GHz */ -#define PSA_COMP_PC_MC_2400 3 /* PC-MC 2.4 GHz */ -#define PSA_COMP_PCMCIA_915 4 /* PCMCIA 915 MHz or 2.0 */ - unsigned char psa_thr_pre_set; /* [0x1E] Modem Threshold Preset */ - unsigned char psa_feature_select; /* [0x1F] Call code required (1=on) */ -#define PSA_FEATURE_CALL_CODE 0x01 /* Call code required (Japan) */ - unsigned char psa_subband; /* [0x20] Subband */ -#define PSA_SUBBAND_915 0 /* 915 MHz or 2.0 */ -#define PSA_SUBBAND_2425 1 /* 2425 MHz */ -#define PSA_SUBBAND_2460 2 /* 2460 MHz */ -#define PSA_SUBBAND_2484 3 /* 2484 MHz */ -#define PSA_SUBBAND_2430_5 4 /* 2430.5 MHz */ - unsigned char psa_quality_thr; /* [0x21] Modem Quality Threshold */ - unsigned char psa_mod_delay; /* [0x22] Modem Delay (?) (reserved) */ - unsigned char psa_nwid[2]; /* [0x23-0x24] Network ID */ - unsigned char psa_nwid_select; /* [0x25] Network ID Select On/Off */ - unsigned char psa_encryption_select; /* [0x26] Encryption On/Off */ - unsigned char psa_encryption_key[8]; /* [0x27-0x2E] Encryption Key */ - unsigned char psa_databus_width; /* [0x2F] AT bus width select 8/16 */ - unsigned char psa_call_code[8]; /* [0x30-0x37] (Japan) Call Code */ - unsigned char psa_nwid_prefix[2]; /* [0x38-0x39] Roaming domain */ - unsigned char psa_reserved[2]; /* [0x3A-0x3B] Reserved - fixed 00 */ - unsigned char psa_conf_status; /* [0x3C] Conf Status, bit 0=1:config*/ - unsigned char psa_crc[2]; /* [0x3D] CRC-16 over PSA */ - unsigned char psa_crc_status; /* [0x3F] CRC Valid Flag */ -}; - -#define PSA_SIZE 64 - -/* Calculate offset of a field in the above structure. - * Warning: only even addresses are used. */ -#define psaoff(p, f) ((unsigned short) ((void *)(&((psa_t *) ((void *) NULL + (p)))->f) - (void *) NULL)) - -/******************** MODEM MANAGEMENT INTERFACE ********************/ - -/* - * Modem Management Controller (MMC) write structure. - */ -typedef struct mmw_t mmw_t; -struct mmw_t { - unsigned char mmw_encr_key[8]; /* encryption key */ - unsigned char mmw_encr_enable; /* Enable or disable encryption. */ -#define MMW_ENCR_ENABLE_MODE 0x02 /* mode of security option */ -#define MMW_ENCR_ENABLE_EN 0x01 /* Enable security option. */ - unsigned char mmw_unused0[1]; /* unused */ - unsigned char mmw_des_io_invert; /* encryption option */ -#define MMW_DES_IO_INVERT_RES 0x0F /* reserved */ -#define MMW_DES_IO_INVERT_CTRL 0xF0 /* control (?) (set to 0) */ - unsigned char mmw_unused1[5]; /* unused */ - unsigned char mmw_loopt_sel; /* looptest selection */ -#define MMW_LOOPT_SEL_DIS_NWID 0x40 /* Disable NWID filtering. */ -#define MMW_LOOPT_SEL_INT 0x20 /* Activate Attention Request. */ -#define MMW_LOOPT_SEL_LS 0x10 /* looptest, no collision avoidance */ -#define MMW_LOOPT_SEL_LT3A 0x08 /* looptest 3a */ -#define MMW_LOOPT_SEL_LT3B 0x04 /* looptest 3b */ -#define MMW_LOOPT_SEL_LT3C 0x02 /* looptest 3c */ -#define MMW_LOOPT_SEL_LT3D 0x01 /* looptest 3d */ - unsigned char mmw_jabber_enable; /* jabber timer enable */ - /* Abort transmissions > 200 ms */ - unsigned char mmw_freeze; /* freeze or unfreeze signal level */ - /* 0 : signal level & qual updated for every new message, 1 : frozen */ - unsigned char mmw_anten_sel; /* antenna selection */ -#define MMW_ANTEN_SEL_SEL 0x01 /* direct antenna selection */ -#define MMW_ANTEN_SEL_ALG_EN 0x02 /* antenna selection algo. enable */ - unsigned char mmw_ifs; /* inter frame spacing */ - /* min time between transmission in bit periods (.5 us) - bit 0 ignored */ - unsigned char mmw_mod_delay; /* modem delay (synchro) */ - unsigned char mmw_jam_time; /* jamming time (after collision) */ - unsigned char mmw_unused2[1]; /* unused */ - unsigned char mmw_thr_pre_set; /* level threshold preset */ - /* Discard all packet with signal < this value (4) */ - unsigned char mmw_decay_prm; /* decay parameters */ - unsigned char mmw_decay_updat_prm; /* decay update parameters */ - unsigned char mmw_quality_thr; /* quality (z-quotient) threshold */ - /* Discard all packet with quality < this value (3) */ - unsigned char mmw_netw_id_l; /* NWID low order byte */ - unsigned char mmw_netw_id_h; /* NWID high order byte */ - /* Network ID or Domain : create virtual net on the air */ - - /* 2.0 Hardware extension - frequency selection support */ - unsigned char mmw_mode_select; /* for analog tests (set to 0) */ - unsigned char mmw_unused3[1]; /* unused */ - unsigned char mmw_fee_ctrl; /* frequency EEPROM control */ -#define MMW_FEE_CTRL_PRE 0x10 /* Enable protected instructions. */ -#define MMW_FEE_CTRL_DWLD 0x08 /* Download EEPROM to mmc. */ -#define MMW_FEE_CTRL_CMD 0x07 /* EEPROM commands: */ -#define MMW_FEE_CTRL_READ 0x06 /* Read */ -#define MMW_FEE_CTRL_WREN 0x04 /* Write enable */ -#define MMW_FEE_CTRL_WRITE 0x05 /* Write data to address. */ -#define MMW_FEE_CTRL_WRALL 0x04 /* Write data to all addresses. */ -#define MMW_FEE_CTRL_WDS 0x04 /* Write disable */ -#define MMW_FEE_CTRL_PRREAD 0x16 /* Read addr from protect register */ -#define MMW_FEE_CTRL_PREN 0x14 /* Protect register enable */ -#define MMW_FEE_CTRL_PRCLEAR 0x17 /* Unprotect all registers. */ -#define MMW_FEE_CTRL_PRWRITE 0x15 /* Write address in protect register */ -#define MMW_FEE_CTRL_PRDS 0x14 /* Protect register disable */ - /* Never issue the PRDS command: it's irreversible! */ - - unsigned char mmw_fee_addr; /* EEPROM address */ -#define MMW_FEE_ADDR_CHANNEL 0xF0 /* Select the channel. */ -#define MMW_FEE_ADDR_OFFSET 0x0F /* Offset in channel data */ -#define MMW_FEE_ADDR_EN 0xC0 /* FEE_CTRL enable operations */ -#define MMW_FEE_ADDR_DS 0x00 /* FEE_CTRL disable operations */ -#define MMW_FEE_ADDR_ALL 0x40 /* FEE_CTRL all operations */ -#define MMW_FEE_ADDR_CLEAR 0xFF /* FEE_CTRL clear operations */ - - unsigned char mmw_fee_data_l; /* Write data to EEPROM. */ - unsigned char mmw_fee_data_h; /* high octet */ - unsigned char mmw_ext_ant; /* Setting for external antenna */ -#define MMW_EXT_ANT_EXTANT 0x01 /* Select external antenna */ -#define MMW_EXT_ANT_POL 0x02 /* Polarity of the antenna */ -#define MMW_EXT_ANT_INTERNAL 0x00 /* Internal antenna */ -#define MMW_EXT_ANT_EXTERNAL 0x03 /* External antenna */ -#define MMW_EXT_ANT_IQ_TEST 0x1C /* IQ test pattern (set to 0) */ -} __attribute__ ((packed)); - -#define MMW_SIZE 37 - -#define mmwoff(p, f) (unsigned short)((void *)(&((mmw_t *)((void *)0 + (p)))->f) - (void *)0) - -/* - * Modem Management Controller (MMC) read structure. - */ -typedef struct mmr_t mmr_t; -struct mmr_t { - unsigned char mmr_unused0[8]; /* unused */ - unsigned char mmr_des_status; /* encryption status */ - unsigned char mmr_des_avail; /* encryption available (0x55 read) */ -#define MMR_DES_AVAIL_DES 0x55 /* DES available */ -#define MMR_DES_AVAIL_AES 0x33 /* AES (AT&T) available */ - unsigned char mmr_des_io_invert; /* des I/O invert register */ - unsigned char mmr_unused1[5]; /* unused */ - unsigned char mmr_dce_status; /* DCE status */ -#define MMR_DCE_STATUS_RX_BUSY 0x01 /* receiver busy */ -#define MMR_DCE_STATUS_LOOPT_IND 0x02 /* loop test indicated */ -#define MMR_DCE_STATUS_TX_BUSY 0x04 /* transmitter on */ -#define MMR_DCE_STATUS_JBR_EXPIRED 0x08 /* jabber timer expired */ -#define MMR_DCE_STATUS 0x0F /* mask to get the bits */ - unsigned char mmr_dsp_id; /* DSP ID (AA = Daedalus rev A) */ - unsigned char mmr_unused2[2]; /* unused */ - unsigned char mmr_correct_nwid_l; /* # of correct NWIDs rxd (low) */ - unsigned char mmr_correct_nwid_h; /* # of correct NWIDs rxd (high) */ - /* Warning: read high-order octet first! */ - unsigned char mmr_wrong_nwid_l; /* # of wrong NWIDs rxd (low) */ - unsigned char mmr_wrong_nwid_h; /* # of wrong NWIDs rxd (high) */ - unsigned char mmr_thr_pre_set; /* level threshold preset */ -#define MMR_THR_PRE_SET 0x3F /* level threshold preset */ -#define MMR_THR_PRE_SET_CUR 0x80 /* Current signal above it */ - unsigned char mmr_signal_lvl; /* signal level */ -#define MMR_SIGNAL_LVL 0x3F /* signal level */ -#define MMR_SIGNAL_LVL_VALID 0x80 /* Updated since last read */ - unsigned char mmr_silence_lvl; /* silence level (noise) */ -#define MMR_SILENCE_LVL 0x3F /* silence level */ -#define MMR_SILENCE_LVL_VALID 0x80 /* Updated since last read */ - unsigned char mmr_sgnl_qual; /* signal quality */ -#define MMR_SGNL_QUAL 0x0F /* signal quality */ -#define MMR_SGNL_QUAL_ANT 0x80 /* current antenna used */ - unsigned char mmr_netw_id_l; /* NWID low order byte (?) */ - unsigned char mmr_unused3[3]; /* unused */ - - /* 2.0 Hardware extension - frequency selection support */ - unsigned char mmr_fee_status; /* Status of frequency EEPROM */ -#define MMR_FEE_STATUS_ID 0xF0 /* Modem revision ID */ -#define MMR_FEE_STATUS_DWLD 0x08 /* Download in progress */ -#define MMR_FEE_STATUS_BUSY 0x04 /* EEPROM busy */ - unsigned char mmr_unused4[1]; /* unused */ - unsigned char mmr_fee_data_l; /* Read data from EEPROM (low) */ - unsigned char mmr_fee_data_h; /* Read data from EEPROM (high) */ -} __attribute__ ((packed)); - -#define MMR_SIZE 36 - -#define mmroff(p, f) (unsigned short)((void *)(&((mmr_t *)((void *)0 + (p)))->f) - (void *)0) - -/* Make the two above structures one */ -typedef union mm_t { - struct mmw_t w; /* Write to the mmc */ - struct mmr_t r; /* Read from the mmc */ -} mm_t; - -#endif /* _WAVELAN_H */ - -/* - * This software may only be used and distributed - * according to the terms of the GNU General Public License. - * - * For more details, see wavelan.c. - */ diff --git a/drivers/staging/wavelan/wavelan.p.h b/drivers/staging/wavelan/wavelan.p.h deleted file mode 100644 index d5f322c..0000000 --- a/drivers/staging/wavelan/wavelan.p.h +++ /dev/null @@ -1,694 +0,0 @@ -/* - * WaveLAN ISA driver - * - * Jean II - HPLB '96 - * - * Reorganisation and extension of the driver. - * - * This file contains all definitions and declarations necessary for the - * WaveLAN ISA driver. This file is a private header, so it should - * be included only in wavelan.c! - */ - -#ifndef WAVELAN_P_H -#define WAVELAN_P_H - -/************************** DOCUMENTATION ***************************/ -/* - * This driver provides a Linux interface to the WaveLAN ISA hardware. - * The WaveLAN is a product of Lucent (http://www.wavelan.com/). - * This division was formerly part of NCR and then AT&T. - * WaveLANs are also distributed by DEC (RoamAbout DS) and Digital Ocean. - * - * To learn how to use this driver, read the NET3 HOWTO. - * If you want to exploit the many other functionalities, read the comments - * in the code. - * - * This driver is the result of the effort of many people (see below). - */ - -/* ------------------------ SPECIFIC NOTES ------------------------ */ -/* - * Web page - * -------- - * I try to maintain a web page with the Wireless LAN Howto at : - * http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html - * - * SMP - * --- - * We now are SMP compliant (I eventually fixed the remaining bugs). - * The driver has been tested on a dual P6-150 and survived my usual - * set of torture tests. - * Anyway, I spent enough time chasing interrupt re-entrancy during - * errors or reconfigure, and I designed the locked/unlocked sections - * of the driver with great care, and with the recent addition of - * the spinlock (thanks to the new API), we should be quite close to - * the truth. - * The SMP/IRQ locking is quite coarse and conservative (i.e. not fast), - * but better safe than sorry (especially at 2 Mb/s ;-). - * - * I have also looked into disabling only our interrupt on the card - * (via HACR) instead of all interrupts in the processor (via cli), - * so that other driver are not impacted, and it look like it's - * possible, but it's very tricky to do right (full of races). As - * the gain would be mostly for SMP systems, it can wait... - * - * Debugging and options - * --------------------- - * You will find below a set of '#define" allowing a very fine control - * on the driver behaviour and the debug messages printed. - * The main options are : - * o SET_PSA_CRC, to have your card correctly recognised by - * an access point and the Point-to-Point diagnostic tool. - * o USE_PSA_CONFIG, to read configuration from the PSA (EEprom) - * (otherwise we always start afresh with some defaults) - * - * wavelan.o is too darned big - * --------------------------- - * That's true! There is a very simple way to reduce the driver - * object by 33%! Comment out the following line: - * #include - * Other compile options can also reduce the size of it... - * - * MAC address and hardware detection: - * ----------------------------------- - * The detection code for the WaveLAN checks that the first three - * octets of the MAC address fit the company code. This type of - * detection works well for AT&T cards (because the AT&T code is - * hardcoded in wavelan.h), but of course will fail for other - * manufacturers. - * - * If you are sure that your card is derived from the WaveLAN, - * here is the way to configure it: - * 1) Get your MAC address - * a) With your card utilities (wfreqsel, instconf, etc.) - * b) With the driver: - * o compile the kernel with DEBUG_CONFIG_INFO enabled - * o Boot and look the card messages - * 2) Set your MAC code (3 octets) in MAC_ADDRESSES[][3] (wavelan.h) - * 3) Compile and verify - * 4) Send me the MAC code. I will include it in the next version. - * - */ - -/* --------------------- WIRELESS EXTENSIONS --------------------- */ -/* - * This driver is the first to support "wireless extensions". - * This set of extensions provides a standard way to control the wireless - * characteristics of the hardware. Applications such as mobile IP may - * take advantage of it. - * - * It might be a good idea as well to fetch the wireless tools to - * configure the device and play a bit. - */ - -/* ---------------------------- FILES ---------------------------- */ -/* - * wavelan.c: actual code for the driver: C functions - * - * wavelan.p.h: private header: local types and variables for driver - * - * wavelan.h: description of the hardware interface and structs - * - * i82586.h: description of the Ethernet controller - */ - -/* --------------------------- HISTORY --------------------------- */ -/* - * This is based on information in the drivers' headers. It may not be - * accurate, and I guarantee only my best effort. - * - * The history of the WaveLAN drivers is as complicated as the history of - * the WaveLAN itself (NCR -> AT&T -> Lucent). - * - * It all started with Anders Klemets - * writing a WaveLAN ISA driver for the Mach microkernel. Girish - * Welling had also worked on it. - * Keith Moore modified this for the PCMCIA hardware. - * - * Robert Morris ported these two drivers to BSDI - * and added specific PCMCIA support (there is currently no equivalent - * of the PCMCIA package under BSD). - * - * Jim Binkley ported both BSDI drivers to FreeBSD. - * - * Bruce Janson ported the BSDI ISA driver to Linux. - * - * Anthony D. Joseph started to modify Bruce's driver - * (with help of the BSDI PCMCIA driver) for PCMCIA. - * Yunzhou Li finished this work. - * Joe Finney patched the driver to start - * 2.00 cards correctly (2.4 GHz with frequency selection). - * David Hinds integrated the whole in his - * PCMCIA package (and bug corrections). - * - * I (Jean Tourrilhes - jt@hplb.hpl.hp.com) then started to make some - * patches to the PCMCIA driver. Later, I added code in the ISA driver - * for Wireless Extensions and full support of frequency selection - * cards. Then, I did the same to the PCMCIA driver, and did some - * reorganisation. Finally, I came back to the ISA driver to - * upgrade it at the same level as the PCMCIA one and reorganise - * the code. - * Loeke Brederveld from Lucent has given me - * much needed information on the WaveLAN hardware. - */ - -/* The original copyrights and literature mention others' names and - * credits. I don't know what their part in this development was. - */ - -/* By the way, for the copyright and legal stuff: - * almost everybody wrote code under the GNU or BSD license (or similar), - * and want their original copyright to remain somewhere in the - * code (for myself, I go with the GPL). - * Nobody wants to take responsibility for anything, except the fame. - */ - -/* --------------------------- CREDITS --------------------------- */ -/* - * This software was developed as a component of the - * Linux operating system. - * It is based on other device drivers and information - * either written or supplied by: - * Ajay Bakre , - * Donald Becker , - * Loeke Brederveld , - * Brent Elphick , - * Anders Klemets , - * Vladimir V. Kolpakov , - * Marc Meertens , - * Pauline Middelink , - * Robert Morris , - * Jean Tourrilhes , - * Girish Welling , - * Clark Woodworth - * Yongguang Zhang - * - * Thanks go also to: - * James Ashton , - * Alan Cox , - * Allan Creighton , - * Matthew Geier , - * Remo di Giovanni , - * Eckhard Grah , - * Vipul Gupta , - * Mark Hagan , - * Tim Nicholson , - * Ian Parkin , - * John Rosenberg , - * George Rossi , - * Arthur Scott , - * Stanislav Sinyagin - * and Peter Storey for their assistance and advice. - * - * Additional Credits: - * - * My development has been done initially under Debian 1.1 (Linux 2.0.x) - * and now under Debian 2.2, initially with an HP Vectra XP/60, and now - * an HP Vectra XP/90. - * - */ - -/* ------------------------- IMPROVEMENTS ------------------------- */ -/* - * I proudly present: - * - * Changes made in first pre-release: - * ---------------------------------- - * - reorganisation of the code, function name change - * - creation of private header (wavelan.p.h) - * - reorganised debug messages - * - more comments, history, etc. - * - mmc_init: configure the PSA if not done - * - mmc_init: correct default value of level threshold for PCMCIA - * - mmc_init: 2.00 detection better code for 2.00 initialization - * - better info at startup - * - IRQ setting (note: this setting is permanent) - * - watchdog: change strategy (and solve module removal problems) - * - add wireless extensions (ioctl and get_wireless_stats) - * get/set nwid/frequency on fly, info for /proc/net/wireless - * - more wireless extensions: SETSPY and GETSPY - * - make wireless extensions optional - * - private ioctl to set/get quality and level threshold, histogram - * - remove /proc/net/wavelan - * - suppress useless stuff from lp (net_local) - * - kernel 2.1 support (copy_to/from_user instead of memcpy_to/fromfs) - * - add message level (debug stuff in /var/adm/debug and errors not - * displayed at console and still in /var/adm/messages) - * - multi device support - * - start fixing the probe (init code) - * - more inlines - * - man page - * - many other minor details and cleanups - * - * Changes made in second pre-release: - * ----------------------------------- - * - clean up init code (probe and module init) - * - better multiple device support (module) - * - name assignment (module) - * - * Changes made in third pre-release: - * ---------------------------------- - * - be more conservative on timers - * - preliminary support for multicast (I still lack some details) - * - * Changes made in fourth pre-release: - * ----------------------------------- - * - multicast (revisited and finished) - * - avoid reset in set_multicast_list (a really big hack) - * if somebody could apply this code for other i82586 based drivers - * - share onboard memory 75% RU and 25% CU (instead of 50/50) - * - * Changes made for release in 2.1.15: - * ----------------------------------- - * - change the detection code for multi manufacturer code support - * - * Changes made for release in 2.1.17: - * ----------------------------------- - * - update to wireless extensions changes - * - silly bug in card initial configuration (psa_conf_status) - * - * Changes made for release in 2.1.27 & 2.0.30: - * -------------------------------------------- - * - small bug in debug code (probably not the last one...) - * - remove extern keyword for wavelan_probe() - * - level threshold is now a standard wireless extension (version 4 !) - * - modules parameters types (new module interface) - * - * Changes made for release in 2.1.36: - * ----------------------------------- - * - byte count stats (courtesy of David Hinds) - * - remove dev_tint stuff (courtesy of David Hinds) - * - encryption setting from Brent Elphick (thanks a lot!) - * - 'ioaddr' to 'u_long' for the Alpha (thanks to Stanislav Sinyagin) - * - * Other changes (not by me) : - * ------------------------- - * - Spelling and gramar "rectification". - * - * Changes made for release in 2.0.37 & 2.2.2 : - * ------------------------------------------ - * - Correct status in /proc/net/wireless - * - Set PSA CRC to make PtP diagnostic tool happy (Bob Gray) - * - Module init code don't fail if we found at least one card in - * the address list (Karlis Peisenieks) - * - Missing parenthesis (Christopher Peterson) - * - Correct i82586 configuration parameters - * - Encryption initialisation bug (Robert McCormack) - * - New mac addresses detected in the probe - * - Increase watchdog for busy environments - * - * Changes made for release in 2.0.38 & 2.2.7 : - * ------------------------------------------ - * - Correct the reception logic to better report errors and avoid - * sending bogus packet up the stack - * - Delay RU config to avoid corrupting first received packet - * - Change config completion code (to actually check something) - * - Avoid reading out of bound in skbuf to transmit - * - Rectify a lot of (useless) debugging code - * - Change the way to `#ifdef SET_PSA_CRC' - * - * Changes made for release in 2.2.11 & 2.3.13 : - * ------------------------------------------- - * - Change e-mail and web page addresses - * - Watchdog timer is now correctly expressed in HZ, not in jiffies - * - Add channel number to the list of frequencies in range - * - Add the (short) list of bit-rates in range - * - Developp a new sensitivity... (sens.value & sens.fixed) - * - * Changes made for release in 2.2.14 & 2.3.23 : - * ------------------------------------------- - * - Fix check for root permission (break instead of exit) - * - New nwid & encoding setting (Wireless Extension 9) - * - * Changes made for release in 2.3.49 : - * ---------------------------------- - * - Indentation reformating (Alan) - * - Update to new network API (softnet - 2.3.43) : - * o replace dev->tbusy (Alan) - * o replace dev->tstart (Alan) - * o remove dev->interrupt (Alan) - * o add SMP locking via spinlock in splxx (me) - * o add spinlock in interrupt handler (me) - * o use kernel watchdog instead of ours (me) - * o increase watchdog timeout (kernel is more sensitive) (me) - * o verify that all the changes make sense and work (me) - * - Fixup a potential gotcha when reconfiguring and thighten a bit - * the interactions with Tx queue. - * - * Changes made for release in 2.4.0 : - * --------------------------------- - * - Fix spinlock stupid bugs that I left in. The driver is now SMP - * compliant and doesn't lockup at startup. - * - * Changes made for release in 2.5.2 : - * --------------------------------- - * - Use new driver API for Wireless Extensions : - * o got rid of wavelan_ioctl() - * o use a bunch of iw_handler instead - * - * Changes made for release in 2.5.35 : - * ---------------------------------- - * - Set dev->trans_start to avoid filling the logs - * - Handle better spurious/bogus interrupt - * - Avoid deadlocks in mmc_out()/mmc_in() - * - * Wishes & dreams: - * ---------------- - * - roaming (see Pcmcia driver) - */ - -/***************************** INCLUDES *****************************/ - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include /* Wireless extensions */ -#include /* Wireless handlers */ - -/* WaveLAN declarations */ -#include "i82586.h" -#include "wavelan.h" - -/************************** DRIVER OPTIONS **************************/ -/* - * `#define' or `#undef' the following constant to change the behaviour - * of the driver... - */ -#undef SET_PSA_CRC /* Calculate and set the CRC on PSA (slower) */ -#define USE_PSA_CONFIG /* Use info from the PSA. */ -#undef EEPROM_IS_PROTECTED /* doesn't seem to be necessary */ -#define MULTICAST_AVOID /* Avoid extra multicast (I'm sceptical). */ -#undef SET_MAC_ADDRESS /* Experimental */ - -/* Warning: this stuff will slow down the driver. */ -#define WIRELESS_SPY /* Enable spying addresses. */ -#undef HISTOGRAM /* Enable histogram of signal level. */ - -/****************************** DEBUG ******************************/ - -#undef DEBUG_MODULE_TRACE /* module insertion/removal */ -#undef DEBUG_CALLBACK_TRACE /* calls made by Linux */ -#undef DEBUG_INTERRUPT_TRACE /* calls to handler */ -#undef DEBUG_INTERRUPT_INFO /* type of interrupt and so on */ -#define DEBUG_INTERRUPT_ERROR /* problems */ -#undef DEBUG_CONFIG_TRACE /* Trace the config functions. */ -#undef DEBUG_CONFIG_INFO /* what's going on */ -#define DEBUG_CONFIG_ERROR /* errors on configuration */ -#undef DEBUG_TX_TRACE /* transmission calls */ -#undef DEBUG_TX_INFO /* header of the transmitted packet */ -#undef DEBUG_TX_FAIL /* Normal failure conditions */ -#define DEBUG_TX_ERROR /* Unexpected conditions */ -#undef DEBUG_RX_TRACE /* transmission calls */ -#undef DEBUG_RX_INFO /* header of the received packet */ -#undef DEBUG_RX_FAIL /* Normal failure conditions */ -#define DEBUG_RX_ERROR /* Unexpected conditions */ - -#undef DEBUG_PACKET_DUMP /* Dump packet on the screen if defined to 32. */ -#undef DEBUG_IOCTL_TRACE /* misc. call by Linux */ -#undef DEBUG_IOCTL_INFO /* various debugging info */ -#define DEBUG_IOCTL_ERROR /* what's going wrong */ -#define DEBUG_BASIC_SHOW /* Show basic startup info. */ -#undef DEBUG_VERSION_SHOW /* Print version info. */ -#undef DEBUG_PSA_SHOW /* Dump PSA to screen. */ -#undef DEBUG_MMC_SHOW /* Dump mmc to screen. */ -#undef DEBUG_SHOW_UNUSED /* Show unused fields too. */ -#undef DEBUG_I82586_SHOW /* Show i82586 status. */ -#undef DEBUG_DEVICE_SHOW /* Show device parameters. */ - -/************************ CONSTANTS & MACROS ************************/ - -#ifdef DEBUG_VERSION_SHOW -static const char *version = "wavelan.c : v24 (SMP + wireless extensions) 11/12/01\n"; -#endif - -/* Watchdog temporisation */ -#define WATCHDOG_JIFFIES (512*HZ/100) - -/* ------------------------ PRIVATE IOCTL ------------------------ */ - -#define SIOCSIPQTHR SIOCIWFIRSTPRIV /* Set quality threshold */ -#define SIOCGIPQTHR (SIOCIWFIRSTPRIV + 1) /* Get quality threshold */ - -#define SIOCSIPHISTO (SIOCIWFIRSTPRIV + 2) /* Set histogram ranges */ -#define SIOCGIPHISTO (SIOCIWFIRSTPRIV + 3) /* Get histogram values */ - -/****************************** TYPES ******************************/ - -/* Shortcuts */ -typedef struct iw_statistics iw_stats; -typedef struct iw_quality iw_qual; -typedef struct iw_freq iw_freq; -typedef struct net_local net_local; -typedef struct timer_list timer_list; - -/* Basic types */ -typedef u_char mac_addr[WAVELAN_ADDR_SIZE]; /* Hardware address */ - -/* - * Static specific data for the interface. - * - * For each network interface, Linux keeps data in two structures: "device" - * keeps the generic data (same format for everybody) and "net_local" keeps - * additional specific data. - */ -struct net_local { - net_local *next; /* linked list of the devices */ - struct net_device *dev; /* reverse link */ - spinlock_t spinlock; /* Serialize access to the hardware (SMP) */ - int nresets; /* number of hardware resets */ - u_char reconfig_82586; /* We need to reconfigure the controller. */ - u_char promiscuous; /* promiscuous mode */ - int mc_count; /* number of multicast addresses */ - u_short hacr; /* current host interface state */ - - int tx_n_in_use; - u_short rx_head; - u_short rx_last; - u_short tx_first_free; - u_short tx_first_in_use; - - iw_stats wstats; /* Wireless-specific statistics */ - - struct iw_spy_data spy_data; - struct iw_public_data wireless_data; - -#ifdef HISTOGRAM - int his_number; /* number of intervals */ - u_char his_range[16]; /* boundaries of interval ]n-1; n] */ - u_long his_sum[16]; /* sum in interval */ -#endif /* HISTOGRAM */ -}; - -/**************************** PROTOTYPES ****************************/ - -/* ----------------------- MISC. SUBROUTINES ------------------------ */ -static u_char - wv_irq_to_psa(int); -static int - wv_psa_to_irq(u_char); -/* ------------------- HOST ADAPTER SUBROUTINES ------------------- */ -static inline u_short /* data */ - hasr_read(u_long); /* Read the host interface: base address */ -static inline void - hacr_write(u_long, /* Write to host interface: base address */ - u_short), /* data */ - hacr_write_slow(u_long, - u_short), - set_chan_attn(u_long, /* ioaddr */ - u_short), /* hacr */ - wv_hacr_reset(u_long), /* ioaddr */ - wv_16_off(u_long, /* ioaddr */ - u_short), /* hacr */ - wv_16_on(u_long, /* ioaddr */ - u_short), /* hacr */ - wv_ints_off(struct net_device *), - wv_ints_on(struct net_device *); -/* ----------------- MODEM MANAGEMENT SUBROUTINES ----------------- */ -static void - psa_read(u_long, /* Read the Parameter Storage Area. */ - u_short, /* hacr */ - int, /* offset in PSA */ - u_char *, /* buffer to fill */ - int), /* size to read */ - psa_write(u_long, /* Write to the PSA. */ - u_short, /* hacr */ - int, /* offset in PSA */ - u_char *, /* buffer in memory */ - int); /* length of buffer */ -static inline void - mmc_out(u_long, /* Write 1 byte to the Modem Manag Control. */ - u_short, - u_char), - mmc_write(u_long, /* Write n bytes to the MMC. */ - u_char, - u_char *, - int); -static inline u_char /* Read 1 byte from the MMC. */ - mmc_in(u_long, - u_short); -static inline void - mmc_read(u_long, /* Read n bytes from the MMC. */ - u_char, - u_char *, - int), - fee_wait(u_long, /* Wait for frequency EEPROM: base address */ - int, /* base delay to wait for */ - int); /* time to wait */ -static void - fee_read(u_long, /* Read the frequency EEPROM: base address */ - u_short, /* destination offset */ - u_short *, /* data buffer */ - int); /* number of registers */ -/* ---------------------- I82586 SUBROUTINES ----------------------- */ -static /*inline*/ void - obram_read(u_long, /* ioaddr */ - u_short, /* o */ - u_char *, /* b */ - int); /* n */ -static inline void - obram_write(u_long, /* ioaddr */ - u_short, /* o */ - u_char *, /* b */ - int); /* n */ -static void - wv_ack(struct net_device *); -static inline int - wv_synchronous_cmd(struct net_device *, - const char *), - wv_config_complete(struct net_device *, - u_long, - net_local *); -static int - wv_complete(struct net_device *, - u_long, - net_local *); -static inline void - wv_82586_reconfig(struct net_device *); -/* ------------------- DEBUG & INFO SUBROUTINES ------------------- */ -#ifdef DEBUG_I82586_SHOW -static void - wv_scb_show(unsigned short); -#endif -static inline void - wv_init_info(struct net_device *); /* display startup info */ -/* ------------------- IOCTL, STATS & RECONFIG ------------------- */ -static iw_stats * - wavelan_get_wireless_stats(struct net_device *); -static void - wavelan_set_multicast_list(struct net_device *); -/* ----------------------- PACKET RECEPTION ----------------------- */ -static inline void - wv_packet_read(struct net_device *, /* Read a packet from a frame. */ - u_short, - int), - wv_receive(struct net_device *); /* Read all packets waiting. */ -/* --------------------- PACKET TRANSMISSION --------------------- */ -static inline int - wv_packet_write(struct net_device *, /* Write a packet to the Tx buffer. */ - void *, - short); -static netdev_tx_t - wavelan_packet_xmit(struct sk_buff *, /* Send a packet. */ - struct net_device *); -/* -------------------- HARDWARE CONFIGURATION -------------------- */ -static inline int - wv_mmc_init(struct net_device *), /* Initialize the modem. */ - wv_ru_start(struct net_device *), /* Start the i82586 receiver unit. */ - wv_cu_start(struct net_device *), /* Start the i82586 command unit. */ - wv_82586_start(struct net_device *); /* Start the i82586. */ -static void - wv_82586_config(struct net_device *); /* Configure the i82586. */ -static inline void - wv_82586_stop(struct net_device *); -static int - wv_hw_reset(struct net_device *), /* Reset the WaveLAN hardware. */ - wv_check_ioaddr(u_long, /* ioaddr */ - u_char *); /* mac address (read) */ -/* ---------------------- INTERRUPT HANDLING ---------------------- */ -static irqreturn_t - wavelan_interrupt(int, /* interrupt handler */ - void *); -static void - wavelan_watchdog(struct net_device *); /* transmission watchdog */ -/* ------------------- CONFIGURATION CALLBACKS ------------------- */ -static int - wavelan_open(struct net_device *), /* Open the device. */ - wavelan_close(struct net_device *), /* Close the device. */ - wavelan_config(struct net_device *, unsigned short);/* Configure one device. */ -extern struct net_device *wavelan_probe(int unit); /* See Space.c. */ - -/**************************** VARIABLES ****************************/ - -/* - * This is the root of the linked list of WaveLAN drivers - * It is use to verify that we don't reuse the same base address - * for two different drivers and to clean up when removing the module. - */ -static net_local * wavelan_list = (net_local *) NULL; - -/* - * This table is used to translate the PSA value to IRQ number - * and vice versa. - */ -static u_char irqvals[] = { - 0, 0, 0, 0x01, - 0x02, 0x04, 0, 0x08, - 0, 0, 0x10, 0x20, - 0x40, 0, 0, 0x80, -}; - -/* - * Table of the available I/O addresses (base addresses) for WaveLAN - */ -static unsigned short iobase[] = { -#if 0 - /* Leave out 0x3C0 for now -- seems to clash with some video - * controllers. - * Leave out the others too -- we will always use 0x390 and leave - * 0x300 for the Ethernet device. - * Jean II: 0x3E0 is fine as well. - */ - 0x300, 0x390, 0x3E0, 0x3C0 -#endif /* 0 */ - 0x390, 0x3E0 -}; - -#ifdef MODULE -/* Parameters set by insmod */ -static int io[4]; -static int irq[4]; -static char *name[4]; -module_param_array(io, int, NULL, 0); -module_param_array(irq, int, NULL, 0); -module_param_array(name, charp, NULL, 0); - -MODULE_PARM_DESC(io, "WaveLAN I/O base address(es),required"); -MODULE_PARM_DESC(irq, "WaveLAN IRQ number(s)"); -MODULE_PARM_DESC(name, "WaveLAN interface neme(s)"); -#endif /* MODULE */ - -#endif /* WAVELAN_P_H */ diff --git a/drivers/staging/wavelan/wavelan_cs.c b/drivers/staging/wavelan/wavelan_cs.c deleted file mode 100644 index 04f691d..0000000 --- a/drivers/staging/wavelan/wavelan_cs.c +++ /dev/null @@ -1,4610 +0,0 @@ -/* - * Wavelan Pcmcia driver - * - * Jean II - HPLB '96 - * - * Reorganisation and extension of the driver. - * Original copyright follow. See wavelan_cs.p.h for details. - * - * This code is derived from Anthony D. Joseph's code and all the changes here - * are also under the original copyright below. - * - * This code supports version 2.00 of WaveLAN/PCMCIA cards (2.4GHz), and - * can work on Linux 2.0.36 with support of David Hinds' PCMCIA Card Services - * - * Joe Finney (joe@comp.lancs.ac.uk) at Lancaster University in UK added - * critical code in the routine to initialize the Modem Management Controller. - * - * Thanks to Alan Cox and Bruce Janson for their advice. - * - * -- Yunzhou Li (scip4166@nus.sg) - * -#ifdef WAVELAN_ROAMING - * Roaming support added 07/22/98 by Justin Seger (jseger@media.mit.edu) - * based on patch by Joe Finney from Lancaster University. -#endif - * - * Lucent (formerly AT&T GIS, formerly NCR) WaveLAN PCMCIA card: An - * Ethernet-like radio transceiver controlled by an Intel 82593 coprocessor. - * - * A non-shared memory PCMCIA ethernet driver for linux - * - * ISA version modified to support PCMCIA by Anthony Joseph (adj@lcs.mit.edu) - * - * - * Joseph O'Sullivan & John Langford (josullvn@cs.cmu.edu & jcl@cs.cmu.edu) - * - * Apr 2 '98 made changes to bring the i82593 control/int handling in line - * with offical specs... - * - **************************************************************************** - * Copyright 1995 - * Anthony D. Joseph - * Massachusetts Institute of Technology - * - * Permission to use, copy, modify, and distribute this program - * for any purpose and without fee is hereby granted, provided - * that this copyright and permission notice appear on all copies - * and supporting documentation, the name of M.I.T. not be used - * in advertising or publicity pertaining to distribution of the - * program without specific prior permission, and notice be given - * in supporting documentation that copying and distribution is - * by permission of M.I.T. M.I.T. makes no representations about - * the suitability of this software for any purpose. It is pro- - * vided "as is" without express or implied warranty. - **************************************************************************** - * - */ - -/* Do *NOT* add other headers here, you are guaranteed to be wrong - Jean II */ -#include "wavelan_cs.p.h" /* Private header */ - -#ifdef WAVELAN_ROAMING -static void wl_cell_expiry(unsigned long data); -static void wl_del_wavepoint(wavepoint_history *wavepoint, struct net_local *lp); -static void wv_nwid_filter(unsigned char mode, net_local *lp); -#endif /* WAVELAN_ROAMING */ - -/************************* MISC SUBROUTINES **************************/ -/* - * Subroutines which won't fit in one of the following category - * (wavelan modem or i82593) - */ - -/******************* MODEM MANAGEMENT SUBROUTINES *******************/ -/* - * Useful subroutines to manage the modem of the wavelan - */ - -/*------------------------------------------------------------------*/ -/* - * Read from card's Host Adaptor Status Register. - */ -static inline u_char -hasr_read(u_long base) -{ - return(inb(HASR(base))); -} /* hasr_read */ - -/*------------------------------------------------------------------*/ -/* - * Write to card's Host Adapter Command Register. - */ -static inline void -hacr_write(u_long base, - u_char hacr) -{ - outb(hacr, HACR(base)); -} /* hacr_write */ - -/*------------------------------------------------------------------*/ -/* - * Write to card's Host Adapter Command Register. Include a delay for - * those times when it is needed. - */ -static void -hacr_write_slow(u_long base, - u_char hacr) -{ - hacr_write(base, hacr); - /* delay might only be needed sometimes */ - mdelay(1); -} /* hacr_write_slow */ - -/*------------------------------------------------------------------*/ -/* - * Read the Parameter Storage Area from the WaveLAN card's memory - */ -static void -psa_read(struct net_device * dev, - int o, /* offset in PSA */ - u_char * b, /* buffer to fill */ - int n) /* size to read */ -{ - net_local *lp = netdev_priv(dev); - u_char __iomem *ptr = lp->mem + PSA_ADDR + (o << 1); - - while(n-- > 0) - { - *b++ = readb(ptr); - /* Due to a lack of address decode pins, the WaveLAN PCMCIA card - * only supports reading even memory addresses. That means the - * increment here MUST be two. - * Because of that, we can't use memcpy_fromio()... - */ - ptr += 2; - } -} /* psa_read */ - -/*------------------------------------------------------------------*/ -/* - * Write the Parameter Storage Area to the WaveLAN card's memory - */ -static void -psa_write(struct net_device * dev, - int o, /* Offset in psa */ - u_char * b, /* Buffer in memory */ - int n) /* Length of buffer */ -{ - net_local *lp = netdev_priv(dev); - u_char __iomem *ptr = lp->mem + PSA_ADDR + (o << 1); - int count = 0; - unsigned int base = dev->base_addr; - /* As there seem to have no flag PSA_BUSY as in the ISA model, we are - * oblige to verify this address to know when the PSA is ready... */ - volatile u_char __iomem *verify = lp->mem + PSA_ADDR + - (psaoff(0, psa_comp_number) << 1); - - /* Authorize writing to PSA */ - hacr_write(base, HACR_PWR_STAT | HACR_ROM_WEN); - - while(n-- > 0) - { - /* write to PSA */ - writeb(*b++, ptr); - ptr += 2; - - /* I don't have the spec, so I don't know what the correct - * sequence to write is. This hack seem to work for me... */ - count = 0; - while((readb(verify) != PSA_COMP_PCMCIA_915) && (count++ < 100)) - mdelay(1); - } - - /* Put the host interface back in standard state */ - hacr_write(base, HACR_DEFAULT); -} /* psa_write */ - -#ifdef SET_PSA_CRC -/*------------------------------------------------------------------*/ -/* - * Calculate the PSA CRC - * Thanks to Valster, Nico for the code - * NOTE: By specifying a length including the CRC position the - * returned value should be zero. (i.e. a correct checksum in the PSA) - * - * The Windows drivers don't use the CRC, but the AP and the PtP tool - * depend on it. - */ -static u_short -psa_crc(unsigned char * psa, /* The PSA */ - int size) /* Number of short for CRC */ -{ - int byte_cnt; /* Loop on the PSA */ - u_short crc_bytes = 0; /* Data in the PSA */ - int bit_cnt; /* Loop on the bits of the short */ - - for(byte_cnt = 0; byte_cnt < size; byte_cnt++ ) - { - crc_bytes ^= psa[byte_cnt]; /* Its an xor */ - - for(bit_cnt = 1; bit_cnt < 9; bit_cnt++ ) - { - if(crc_bytes & 0x0001) - crc_bytes = (crc_bytes >> 1) ^ 0xA001; - else - crc_bytes >>= 1 ; - } - } - - return crc_bytes; -} /* psa_crc */ -#endif /* SET_PSA_CRC */ - -/*------------------------------------------------------------------*/ -/* - * update the checksum field in the Wavelan's PSA - */ -static void -update_psa_checksum(struct net_device * dev) -{ -#ifdef SET_PSA_CRC - psa_t psa; - u_short crc; - - /* read the parameter storage area */ - psa_read(dev, 0, (unsigned char *) &psa, sizeof(psa)); - - /* update the checksum */ - crc = psa_crc((unsigned char *) &psa, - sizeof(psa) - sizeof(psa.psa_crc[0]) - sizeof(psa.psa_crc[1]) - - sizeof(psa.psa_crc_status)); - - psa.psa_crc[0] = crc & 0xFF; - psa.psa_crc[1] = (crc & 0xFF00) >> 8; - - /* Write it ! */ - psa_write(dev, (char *)&psa.psa_crc - (char *)&psa, - (unsigned char *)&psa.psa_crc, 2); - -#ifdef DEBUG_IOCTL_INFO - printk (KERN_DEBUG "%s: update_psa_checksum(): crc = 0x%02x%02x\n", - dev->name, psa.psa_crc[0], psa.psa_crc[1]); - - /* Check again (luxury !) */ - crc = psa_crc((unsigned char *) &psa, - sizeof(psa) - sizeof(psa.psa_crc_status)); - - if(crc != 0) - printk(KERN_WARNING "%s: update_psa_checksum(): CRC does not agree with PSA data (even after recalculating)\n", dev->name); -#endif /* DEBUG_IOCTL_INFO */ -#endif /* SET_PSA_CRC */ -} /* update_psa_checksum */ - -/*------------------------------------------------------------------*/ -/* - * Write 1 byte to the MMC. - */ -static void -mmc_out(u_long base, - u_short o, - u_char d) -{ - int count = 0; - - /* Wait for MMC to go idle */ - while((count++ < 100) && (inb(HASR(base)) & HASR_MMI_BUSY)) - udelay(10); - - outb((u_char)((o << 1) | MMR_MMI_WR), MMR(base)); - outb(d, MMD(base)); -} - -/*------------------------------------------------------------------*/ -/* - * Routine to write bytes to the Modem Management Controller. - * We start by the end because it is the way it should be ! - */ -static void -mmc_write(u_long base, - u_char o, - u_char * b, - int n) -{ - o += n; - b += n; - - while(n-- > 0 ) - mmc_out(base, --o, *(--b)); -} /* mmc_write */ - -/*------------------------------------------------------------------*/ -/* - * Read 1 byte from the MMC. - * Optimised version for 1 byte, avoid using memory... - */ -static u_char -mmc_in(u_long base, - u_short o) -{ - int count = 0; - - while((count++ < 100) && (inb(HASR(base)) & HASR_MMI_BUSY)) - udelay(10); - outb(o << 1, MMR(base)); /* Set the read address */ - - outb(0, MMD(base)); /* Required dummy write */ - - while((count++ < 100) && (inb(HASR(base)) & HASR_MMI_BUSY)) - udelay(10); - return (u_char) (inb(MMD(base))); /* Now do the actual read */ -} - -/*------------------------------------------------------------------*/ -/* - * Routine to read bytes from the Modem Management Controller. - * The implementation is complicated by a lack of address lines, - * which prevents decoding of the low-order bit. - * (code has just been moved in the above function) - * We start by the end because it is the way it should be ! - */ -static void -mmc_read(u_long base, - u_char o, - u_char * b, - int n) -{ - o += n; - b += n; - - while(n-- > 0) - *(--b) = mmc_in(base, --o); -} /* mmc_read */ - -/*------------------------------------------------------------------*/ -/* - * Get the type of encryption available... - */ -static inline int -mmc_encr(u_long base) /* i/o port of the card */ -{ - int temp; - - temp = mmc_in(base, mmroff(0, mmr_des_avail)); - if((temp != MMR_DES_AVAIL_DES) && (temp != MMR_DES_AVAIL_AES)) - return 0; - else - return temp; -} - -/*------------------------------------------------------------------*/ -/* - * Wait for the frequency EEprom to complete a command... - */ -static void -fee_wait(u_long base, /* i/o port of the card */ - int delay, /* Base delay to wait for */ - int number) /* Number of time to wait */ -{ - int count = 0; /* Wait only a limited time */ - - while((count++ < number) && - (mmc_in(base, mmroff(0, mmr_fee_status)) & MMR_FEE_STATUS_BUSY)) - udelay(delay); -} - -/*------------------------------------------------------------------*/ -/* - * Read bytes from the Frequency EEprom (frequency select cards). - */ -static void -fee_read(u_long base, /* i/o port of the card */ - u_short o, /* destination offset */ - u_short * b, /* data buffer */ - int n) /* number of registers */ -{ - b += n; /* Position at the end of the area */ - - /* Write the address */ - mmc_out(base, mmwoff(0, mmw_fee_addr), o + n - 1); - - /* Loop on all buffer */ - while(n-- > 0) - { - /* Write the read command */ - mmc_out(base, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_READ); - - /* Wait until EEprom is ready (should be quick !) */ - fee_wait(base, 10, 100); - - /* Read the value */ - *--b = ((mmc_in(base, mmroff(0, mmr_fee_data_h)) << 8) | - mmc_in(base, mmroff(0, mmr_fee_data_l))); - } -} - - -/*------------------------------------------------------------------*/ -/* - * Write bytes from the Frequency EEprom (frequency select cards). - * This is a bit complicated, because the frequency eeprom has to - * be unprotected and the write enabled. - * Jean II - */ -static void -fee_write(u_long base, /* i/o port of the card */ - u_short o, /* destination offset */ - u_short * b, /* data buffer */ - int n) /* number of registers */ -{ - b += n; /* Position at the end of the area */ - -#ifdef EEPROM_IS_PROTECTED /* disabled */ -#ifdef DOESNT_SEEM_TO_WORK /* disabled */ - /* Ask to read the protected register */ - mmc_out(base, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PRREAD); - - fee_wait(base, 10, 100); - - /* Read the protected register */ - printk("Protected 2 : %02X-%02X\n", - mmc_in(base, mmroff(0, mmr_fee_data_h)), - mmc_in(base, mmroff(0, mmr_fee_data_l))); -#endif /* DOESNT_SEEM_TO_WORK */ - - /* Enable protected register */ - mmc_out(base, mmwoff(0, mmw_fee_addr), MMW_FEE_ADDR_EN); - mmc_out(base, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PREN); - - fee_wait(base, 10, 100); - - /* Unprotect area */ - mmc_out(base, mmwoff(0, mmw_fee_addr), o + n); - mmc_out(base, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PRWRITE); -#ifdef DOESNT_SEEM_TO_WORK /* disabled */ - /* Or use : */ - mmc_out(base, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PRCLEAR); -#endif /* DOESNT_SEEM_TO_WORK */ - - fee_wait(base, 10, 100); -#endif /* EEPROM_IS_PROTECTED */ - - /* Write enable */ - mmc_out(base, mmwoff(0, mmw_fee_addr), MMW_FEE_ADDR_EN); - mmc_out(base, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_WREN); - - fee_wait(base, 10, 100); - - /* Write the EEprom address */ - mmc_out(base, mmwoff(0, mmw_fee_addr), o + n - 1); - - /* Loop on all buffer */ - while(n-- > 0) - { - /* Write the value */ - mmc_out(base, mmwoff(0, mmw_fee_data_h), (*--b) >> 8); - mmc_out(base, mmwoff(0, mmw_fee_data_l), *b & 0xFF); - - /* Write the write command */ - mmc_out(base, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_WRITE); - - /* Wavelan doc says : wait at least 10 ms for EEBUSY = 0 */ - mdelay(10); - fee_wait(base, 10, 100); - } - - /* Write disable */ - mmc_out(base, mmwoff(0, mmw_fee_addr), MMW_FEE_ADDR_DS); - mmc_out(base, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_WDS); - - fee_wait(base, 10, 100); - -#ifdef EEPROM_IS_PROTECTED /* disabled */ - /* Reprotect EEprom */ - mmc_out(base, mmwoff(0, mmw_fee_addr), 0x00); - mmc_out(base, mmwoff(0, mmw_fee_ctrl), MMW_FEE_CTRL_PRWRITE); - - fee_wait(base, 10, 100); -#endif /* EEPROM_IS_PROTECTED */ -} - -/******************* WaveLAN Roaming routines... ********************/ - -#ifdef WAVELAN_ROAMING /* Conditional compile, see wavelan_cs.h */ - -static unsigned char WAVELAN_BEACON_ADDRESS[] = {0x09,0x00,0x0e,0x20,0x03,0x00}; - -static void wv_roam_init(struct net_device *dev) -{ - net_local *lp= netdev_priv(dev); - - /* Do not remove this unless you have a good reason */ - printk(KERN_NOTICE "%s: Warning, you have enabled roaming on" - " device %s !\n", dev->name, dev->name); - printk(KERN_NOTICE "Roaming is currently an experimental unsupported feature" - " of the Wavelan driver.\n"); - printk(KERN_NOTICE "It may work, but may also make the driver behave in" - " erratic ways or crash.\n"); - - lp->wavepoint_table.head=NULL; /* Initialise WavePoint table */ - lp->wavepoint_table.num_wavepoints=0; - lp->wavepoint_table.locked=0; - lp->curr_point=NULL; /* No default WavePoint */ - lp->cell_search=0; - - lp->cell_timer.data=(long)lp; /* Start cell expiry timer */ - lp->cell_timer.function=wl_cell_expiry; - lp->cell_timer.expires=jiffies+CELL_TIMEOUT; - add_timer(&lp->cell_timer); - - wv_nwid_filter(NWID_PROMISC,lp) ; /* Enter NWID promiscuous mode */ - /* to build up a good WavePoint */ - /* table... */ - printk(KERN_DEBUG "WaveLAN: Roaming enabled on device %s\n",dev->name); -} - -static void wv_roam_cleanup(struct net_device *dev) -{ - wavepoint_history *ptr,*old_ptr; - net_local *lp= netdev_priv(dev); - - printk(KERN_DEBUG "WaveLAN: Roaming Disabled on device %s\n",dev->name); - - /* Fixme : maybe we should check that the timer exist before deleting it */ - del_timer(&lp->cell_timer); /* Remove cell expiry timer */ - ptr=lp->wavepoint_table.head; /* Clear device's WavePoint table */ - while(ptr!=NULL) - { - old_ptr=ptr; - ptr=ptr->next; - wl_del_wavepoint(old_ptr,lp); - } -} - -/* Enable/Disable NWID promiscuous mode on a given device */ -static void wv_nwid_filter(unsigned char mode, net_local *lp) -{ - mm_t m; - unsigned long flags; - -#ifdef WAVELAN_ROAMING_DEBUG - printk(KERN_DEBUG "WaveLAN: NWID promisc %s, device %s\n",(mode==NWID_PROMISC) ? "on" : "off", lp->dev->name); -#endif - - /* Disable interrupts & save flags */ - spin_lock_irqsave(&lp->spinlock, flags); - - m.w.mmw_loopt_sel = (mode==NWID_PROMISC) ? MMW_LOOPT_SEL_DIS_NWID : 0x00; - mmc_write(lp->dev->base_addr, (char *)&m.w.mmw_loopt_sel - (char *)&m, (unsigned char *)&m.w.mmw_loopt_sel, 1); - - if(mode==NWID_PROMISC) - lp->cell_search=1; - else - lp->cell_search=0; - - /* ReEnable interrupts & restore flags */ - spin_unlock_irqrestore(&lp->spinlock, flags); -} - -/* Find a record in the WavePoint table matching a given NWID */ -static wavepoint_history *wl_roam_check(unsigned short nwid, net_local *lp) -{ - wavepoint_history *ptr=lp->wavepoint_table.head; - - while(ptr!=NULL){ - if(ptr->nwid==nwid) - return ptr; - ptr=ptr->next; - } - return NULL; -} - -/* Create a new wavepoint table entry */ -static wavepoint_history *wl_new_wavepoint(unsigned short nwid, unsigned char seq, net_local* lp) -{ - wavepoint_history *new_wavepoint; - -#ifdef WAVELAN_ROAMING_DEBUG - printk(KERN_DEBUG "WaveLAN: New Wavepoint, NWID:%.4X\n",nwid); -#endif - - if(lp->wavepoint_table.num_wavepoints==MAX_WAVEPOINTS) - return NULL; - - new_wavepoint = kmalloc(sizeof(wavepoint_history),GFP_ATOMIC); - if(new_wavepoint==NULL) - return NULL; - - new_wavepoint->nwid=nwid; /* New WavePoints NWID */ - new_wavepoint->average_fast=0; /* Running Averages..*/ - new_wavepoint->average_slow=0; - new_wavepoint->qualptr=0; /* Start of ringbuffer */ - new_wavepoint->last_seq=seq-1; /* Last sequence no.seen */ - memset(new_wavepoint->sigqual,0,WAVEPOINT_HISTORY);/* Empty ringbuffer */ - - new_wavepoint->next=lp->wavepoint_table.head;/* Add to wavepoint table */ - new_wavepoint->prev=NULL; - - if(lp->wavepoint_table.head!=NULL) - lp->wavepoint_table.head->prev=new_wavepoint; - - lp->wavepoint_table.head=new_wavepoint; - - lp->wavepoint_table.num_wavepoints++; /* no. of visible wavepoints */ - - return new_wavepoint; -} - -/* Remove a wavepoint entry from WavePoint table */ -static void wl_del_wavepoint(wavepoint_history *wavepoint, struct net_local *lp) -{ - if(wavepoint==NULL) - return; - - if(lp->curr_point==wavepoint) - lp->curr_point=NULL; - - if(wavepoint->prev!=NULL) - wavepoint->prev->next=wavepoint->next; - - if(wavepoint->next!=NULL) - wavepoint->next->prev=wavepoint->prev; - - if(lp->wavepoint_table.head==wavepoint) - lp->wavepoint_table.head=wavepoint->next; - - lp->wavepoint_table.num_wavepoints--; - kfree(wavepoint); -} - -/* Timer callback function - checks WavePoint table for stale entries */ -static void wl_cell_expiry(unsigned long data) -{ - net_local *lp=(net_local *)data; - wavepoint_history *wavepoint=lp->wavepoint_table.head,*old_point; - -#if WAVELAN_ROAMING_DEBUG > 1 - printk(KERN_DEBUG "WaveLAN: Wavepoint timeout, dev %s\n",lp->dev->name); -#endif - - if(lp->wavepoint_table.locked) - { -#if WAVELAN_ROAMING_DEBUG > 1 - printk(KERN_DEBUG "WaveLAN: Wavepoint table locked...\n"); -#endif - - lp->cell_timer.expires=jiffies+1; /* If table in use, come back later */ - add_timer(&lp->cell_timer); - return; - } - - while(wavepoint!=NULL) - { - if(time_after(jiffies, wavepoint->last_seen + CELL_TIMEOUT)) - { -#ifdef WAVELAN_ROAMING_DEBUG - printk(KERN_DEBUG "WaveLAN: Bye bye %.4X\n",wavepoint->nwid); -#endif - - old_point=wavepoint; - wavepoint=wavepoint->next; - wl_del_wavepoint(old_point,lp); - } - else - wavepoint=wavepoint->next; - } - lp->cell_timer.expires=jiffies+CELL_TIMEOUT; - add_timer(&lp->cell_timer); -} - -/* Update SNR history of a wavepoint */ -static void wl_update_history(wavepoint_history *wavepoint, unsigned char sigqual, unsigned char seq) -{ - int i=0,num_missed=0,ptr=0; - int average_fast=0,average_slow=0; - - num_missed=(seq-wavepoint->last_seq)%WAVEPOINT_HISTORY;/* Have we missed - any beacons? */ - if(num_missed) - for(i=0;isigqual[wavepoint->qualptr++]=0; /* If so, enter them as 0's */ - wavepoint->qualptr %=WAVEPOINT_HISTORY; /* in the ringbuffer. */ - } - wavepoint->last_seen=jiffies; /* Add beacon to history */ - wavepoint->last_seq=seq; - wavepoint->sigqual[wavepoint->qualptr++]=sigqual; - wavepoint->qualptr %=WAVEPOINT_HISTORY; - ptr=(wavepoint->qualptr-WAVEPOINT_FAST_HISTORY+WAVEPOINT_HISTORY)%WAVEPOINT_HISTORY; - - for(i=0;isigqual[ptr++]; - ptr %=WAVEPOINT_HISTORY; - } - - average_slow=average_fast; - for(i=WAVEPOINT_FAST_HISTORY;isigqual[ptr++]; - ptr %=WAVEPOINT_HISTORY; - } - - wavepoint->average_fast=average_fast/WAVEPOINT_FAST_HISTORY; - wavepoint->average_slow=average_slow/WAVEPOINT_HISTORY; -} - -/* Perform a handover to a new WavePoint */ -static void wv_roam_handover(wavepoint_history *wavepoint, net_local *lp) -{ - unsigned int base = lp->dev->base_addr; - mm_t m; - unsigned long flags; - - if(wavepoint==lp->curr_point) /* Sanity check... */ - { - wv_nwid_filter(!NWID_PROMISC,lp); - return; - } - -#ifdef WAVELAN_ROAMING_DEBUG - printk(KERN_DEBUG "WaveLAN: Doing handover to %.4X, dev %s\n",wavepoint->nwid,lp->dev->name); -#endif - - /* Disable interrupts & save flags */ - spin_lock_irqsave(&lp->spinlock, flags); - - m.w.mmw_netw_id_l = wavepoint->nwid & 0xFF; - m.w.mmw_netw_id_h = (wavepoint->nwid & 0xFF00) >> 8; - - mmc_write(base, (char *)&m.w.mmw_netw_id_l - (char *)&m, (unsigned char *)&m.w.mmw_netw_id_l, 2); - - /* ReEnable interrupts & restore flags */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - wv_nwid_filter(!NWID_PROMISC,lp); - lp->curr_point=wavepoint; -} - -/* Called when a WavePoint beacon is received */ -static void wl_roam_gather(struct net_device * dev, - u_char * hdr, /* Beacon header */ - u_char * stats) /* SNR, Signal quality - of packet */ -{ - wavepoint_beacon *beacon= (wavepoint_beacon *)hdr; /* Rcvd. Beacon */ - unsigned short nwid=ntohs(beacon->nwid); - unsigned short sigqual=stats[2] & MMR_SGNL_QUAL; /* SNR of beacon */ - wavepoint_history *wavepoint=NULL; /* WavePoint table entry */ - net_local *lp = netdev_priv(dev); /* Device info */ - -#ifdef I_NEED_THIS_FEATURE - /* Some people don't need this, some other may need it */ - nwid=nwid^ntohs(beacon->domain_id); -#endif - -#if WAVELAN_ROAMING_DEBUG > 1 - printk(KERN_DEBUG "WaveLAN: beacon, dev %s:\n",dev->name); - printk(KERN_DEBUG "Domain: %.4X NWID: %.4X SigQual=%d\n",ntohs(beacon->domain_id),nwid,sigqual); -#endif - - lp->wavepoint_table.locked=1; /* */ - - wavepoint=wl_roam_check(nwid,lp); /* Find WavePoint table entry */ - if(wavepoint==NULL) /* If no entry, Create a new one... */ - { - wavepoint=wl_new_wavepoint(nwid,beacon->seq,lp); - if(wavepoint==NULL) - goto out; - } - if(lp->curr_point==NULL) /* If this is the only WavePoint, */ - wv_roam_handover(wavepoint, lp); /* Jump on it! */ - - wl_update_history(wavepoint, sigqual, beacon->seq); /* Update SNR history - stats. */ - - if(lp->curr_point->average_slow < SEARCH_THRESH_LOW) /* If our current */ - if(!lp->cell_search) /* WavePoint is getting faint, */ - wv_nwid_filter(NWID_PROMISC,lp); /* start looking for a new one */ - - if(wavepoint->average_slow > - lp->curr_point->average_slow + WAVELAN_ROAMING_DELTA) - wv_roam_handover(wavepoint, lp); /* Handover to a better WavePoint */ - - if(lp->curr_point->average_slow > SEARCH_THRESH_HIGH) /* If our SNR is */ - if(lp->cell_search) /* getting better, drop out of cell search mode */ - wv_nwid_filter(!NWID_PROMISC,lp); - -out: - lp->wavepoint_table.locked=0; /* :-) */ -} - -/* Test this MAC frame a WavePoint beacon */ -static inline int WAVELAN_BEACON(unsigned char *data) -{ - wavepoint_beacon *beacon= (wavepoint_beacon *)data; - static const wavepoint_beacon beacon_template={0xaa,0xaa,0x03,0x08,0x00,0x0e,0x20,0x03,0x00}; - - if(memcmp(beacon,&beacon_template,9)==0) - return 1; - else - return 0; -} -#endif /* WAVELAN_ROAMING */ - -/************************ I82593 SUBROUTINES *************************/ -/* - * Useful subroutines to manage the Ethernet controller - */ - -/*------------------------------------------------------------------*/ -/* - * Routine to synchronously send a command to the i82593 chip. - * Should be called with interrupts disabled. - * (called by wv_packet_write(), wv_ru_stop(), wv_ru_start(), - * wv_82593_config() & wv_diag()) - */ -static int -wv_82593_cmd(struct net_device * dev, - char * str, - int cmd, - int result) -{ - unsigned int base = dev->base_addr; - int status; - int wait_completed; - long spin; - - /* Spin until the chip finishes executing its current command (if any) */ - spin = 1000; - do - { - /* Time calibration of the loop */ - udelay(10); - - /* Read the interrupt register */ - outb(OP0_NOP | CR0_STATUS_3, LCCR(base)); - status = inb(LCSR(base)); - } - while(((status & SR3_EXEC_STATE_MASK) != SR3_EXEC_IDLE) && (spin-- > 0)); - - /* If the interrupt hasn't been posted */ - if (spin < 0) { -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "wv_82593_cmd: %s timeout (previous command), status 0x%02x\n", - str, status); -#endif - return(FALSE); - } - - /* Issue the command to the controller */ - outb(cmd, LCCR(base)); - - /* If we don't have to check the result of the command - * Note : this mean that the irq handler will deal with that */ - if(result == SR0_NO_RESULT) - return(TRUE); - - /* We are waiting for command completion */ - wait_completed = TRUE; - - /* Busy wait while the LAN controller executes the command. */ - spin = 1000; - do - { - /* Time calibration of the loop */ - udelay(10); - - /* Read the interrupt register */ - outb(CR0_STATUS_0 | OP0_NOP, LCCR(base)); - status = inb(LCSR(base)); - - /* Check if there was an interrupt posted */ - if((status & SR0_INTERRUPT)) - { - /* Acknowledge the interrupt */ - outb(CR0_INT_ACK | OP0_NOP, LCCR(base)); - - /* Check if interrupt is a command completion */ - if(((status & SR0_BOTH_RX_TX) != SR0_BOTH_RX_TX) && - ((status & SR0_BOTH_RX_TX) != 0x0) && - !(status & SR0_RECEPTION)) - { - /* Signal command completion */ - wait_completed = FALSE; - } - else - { - /* Note : Rx interrupts will be handled later, because we can - * handle multiple Rx packets at once */ -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_INFO "wv_82593_cmd: not our interrupt\n"); -#endif - } - } - } - while(wait_completed && (spin-- > 0)); - - /* If the interrupt hasn't be posted */ - if(wait_completed) - { -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "wv_82593_cmd: %s timeout, status 0x%02x\n", - str, status); -#endif - return(FALSE); - } - - /* Check the return code returned by the card (see above) against - * the expected return code provided by the caller */ - if((status & SR0_EVENT_MASK) != result) - { -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "wv_82593_cmd: %s failed, status = 0x%x\n", - str, status); -#endif - return(FALSE); - } - - return(TRUE); -} /* wv_82593_cmd */ - -/*------------------------------------------------------------------*/ -/* - * This routine does a 593 op-code number 7, and obtains the diagnose - * status for the WaveLAN. - */ -static inline int -wv_diag(struct net_device * dev) -{ - return(wv_82593_cmd(dev, "wv_diag(): diagnose", - OP0_DIAGNOSE, SR0_DIAGNOSE_PASSED)); -} /* wv_diag */ - -/*------------------------------------------------------------------*/ -/* - * Routine to read len bytes from the i82593's ring buffer, starting at - * chip address addr. The results read from the chip are stored in buf. - * The return value is the address to use for next the call. - */ -static int -read_ringbuf(struct net_device * dev, - int addr, - char * buf, - int len) -{ - unsigned int base = dev->base_addr; - int ring_ptr = addr; - int chunk_len; - char * buf_ptr = buf; - - /* Get all the buffer */ - while(len > 0) - { - /* Position the Program I/O Register at the ring buffer pointer */ - outb(ring_ptr & 0xff, PIORL(base)); - outb(((ring_ptr >> 8) & PIORH_MASK), PIORH(base)); - - /* First, determine how much we can read without wrapping around the - ring buffer */ - if((addr + len) < (RX_BASE + RX_SIZE)) - chunk_len = len; - else - chunk_len = RX_BASE + RX_SIZE - addr; - insb(PIOP(base), buf_ptr, chunk_len); - buf_ptr += chunk_len; - len -= chunk_len; - ring_ptr = (ring_ptr - RX_BASE + chunk_len) % RX_SIZE + RX_BASE; - } - return(ring_ptr); -} /* read_ringbuf */ - -/*------------------------------------------------------------------*/ -/* - * Reconfigure the i82593, or at least ask for it... - * Because wv_82593_config use the transmission buffer, we must do it - * when we are sure that there is no transmission, so we do it now - * or in wavelan_packet_xmit() (I can't find any better place, - * wavelan_interrupt is not an option...), so you may experience - * some delay sometime... - */ -static void -wv_82593_reconfig(struct net_device * dev) -{ - net_local * lp = netdev_priv(dev); - struct pcmcia_device * link = lp->link; - unsigned long flags; - - /* Arm the flag, will be cleard in wv_82593_config() */ - lp->reconfig_82593 = TRUE; - - /* Check if we can do it now ! */ - if((link->open) && (netif_running(dev)) && !(netif_queue_stopped(dev))) - { - spin_lock_irqsave(&lp->spinlock, flags); /* Disable interrupts */ - wv_82593_config(dev); - spin_unlock_irqrestore(&lp->spinlock, flags); /* Re-enable interrupts */ - } - else - { -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG - "%s: wv_82593_reconfig(): delayed (state = %lX, link = %d)\n", - dev->name, dev->state, link->open); -#endif - } -} - -/********************* DEBUG & INFO SUBROUTINES *********************/ -/* - * This routines are used in the code to show debug informations. - * Most of the time, it dump the content of hardware structures... - */ - -#ifdef DEBUG_PSA_SHOW -/*------------------------------------------------------------------*/ -/* - * Print the formatted contents of the Parameter Storage Area. - */ -static void -wv_psa_show(psa_t * p) -{ - printk(KERN_DEBUG "##### wavelan psa contents: #####\n"); - printk(KERN_DEBUG "psa_io_base_addr_1: 0x%02X %02X %02X %02X\n", - p->psa_io_base_addr_1, - p->psa_io_base_addr_2, - p->psa_io_base_addr_3, - p->psa_io_base_addr_4); - printk(KERN_DEBUG "psa_rem_boot_addr_1: 0x%02X %02X %02X\n", - p->psa_rem_boot_addr_1, - p->psa_rem_boot_addr_2, - p->psa_rem_boot_addr_3); - printk(KERN_DEBUG "psa_holi_params: 0x%02x, ", p->psa_holi_params); - printk("psa_int_req_no: %d\n", p->psa_int_req_no); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "psa_unused0[]: %pM\n", p->psa_unused0); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "psa_univ_mac_addr[]: %pM\n", p->psa_univ_mac_addr); - printk(KERN_DEBUG "psa_local_mac_addr[]: %pM\n", p->psa_local_mac_addr); - printk(KERN_DEBUG "psa_univ_local_sel: %d, ", p->psa_univ_local_sel); - printk("psa_comp_number: %d, ", p->psa_comp_number); - printk("psa_thr_pre_set: 0x%02x\n", p->psa_thr_pre_set); - printk(KERN_DEBUG "psa_feature_select/decay_prm: 0x%02x, ", - p->psa_feature_select); - printk("psa_subband/decay_update_prm: %d\n", p->psa_subband); - printk(KERN_DEBUG "psa_quality_thr: 0x%02x, ", p->psa_quality_thr); - printk("psa_mod_delay: 0x%02x\n", p->psa_mod_delay); - printk(KERN_DEBUG "psa_nwid: 0x%02x%02x, ", p->psa_nwid[0], p->psa_nwid[1]); - printk("psa_nwid_select: %d\n", p->psa_nwid_select); - printk(KERN_DEBUG "psa_encryption_select: %d, ", p->psa_encryption_select); - printk("psa_encryption_key[]: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n", - p->psa_encryption_key[0], - p->psa_encryption_key[1], - p->psa_encryption_key[2], - p->psa_encryption_key[3], - p->psa_encryption_key[4], - p->psa_encryption_key[5], - p->psa_encryption_key[6], - p->psa_encryption_key[7]); - printk(KERN_DEBUG "psa_databus_width: %d\n", p->psa_databus_width); - printk(KERN_DEBUG "psa_call_code/auto_squelch: 0x%02x, ", - p->psa_call_code[0]); - printk("psa_call_code[]: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n", - p->psa_call_code[0], - p->psa_call_code[1], - p->psa_call_code[2], - p->psa_call_code[3], - p->psa_call_code[4], - p->psa_call_code[5], - p->psa_call_code[6], - p->psa_call_code[7]); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "psa_reserved[]: %02X:%02X\n", - p->psa_reserved[0], - p->psa_reserved[1]); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "psa_conf_status: %d, ", p->psa_conf_status); - printk("psa_crc: 0x%02x%02x, ", p->psa_crc[0], p->psa_crc[1]); - printk("psa_crc_status: 0x%02x\n", p->psa_crc_status); -} /* wv_psa_show */ -#endif /* DEBUG_PSA_SHOW */ - -#ifdef DEBUG_MMC_SHOW -/*------------------------------------------------------------------*/ -/* - * Print the formatted status of the Modem Management Controller. - * This function need to be completed... - */ -static void -wv_mmc_show(struct net_device * dev) -{ - unsigned int base = dev->base_addr; - net_local * lp = netdev_priv(dev); - mmr_t m; - - /* Basic check */ - if(hasr_read(base) & HASR_NO_CLK) - { - printk(KERN_WARNING "%s: wv_mmc_show: modem not connected\n", - dev->name); - return; - } - - spin_lock_irqsave(&lp->spinlock, flags); - - /* Read the mmc */ - mmc_out(base, mmwoff(0, mmw_freeze), 1); - mmc_read(base, 0, (u_char *)&m, sizeof(m)); - mmc_out(base, mmwoff(0, mmw_freeze), 0); - - /* Don't forget to update statistics */ - lp->wstats.discard.nwid += (m.mmr_wrong_nwid_h << 8) | m.mmr_wrong_nwid_l; - - spin_unlock_irqrestore(&lp->spinlock, flags); - - printk(KERN_DEBUG "##### wavelan modem status registers: #####\n"); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "mmc_unused0[]: %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n", - m.mmr_unused0[0], - m.mmr_unused0[1], - m.mmr_unused0[2], - m.mmr_unused0[3], - m.mmr_unused0[4], - m.mmr_unused0[5], - m.mmr_unused0[6], - m.mmr_unused0[7]); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "Encryption algorithm: %02X - Status: %02X\n", - m.mmr_des_avail, m.mmr_des_status); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "mmc_unused1[]: %02X:%02X:%02X:%02X:%02X\n", - m.mmr_unused1[0], - m.mmr_unused1[1], - m.mmr_unused1[2], - m.mmr_unused1[3], - m.mmr_unused1[4]); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "dce_status: 0x%x [%s%s%s%s]\n", - m.mmr_dce_status, - (m.mmr_dce_status & MMR_DCE_STATUS_RX_BUSY) ? "energy detected,":"", - (m.mmr_dce_status & MMR_DCE_STATUS_LOOPT_IND) ? - "loop test indicated," : "", - (m.mmr_dce_status & MMR_DCE_STATUS_TX_BUSY) ? "transmitter on," : "", - (m.mmr_dce_status & MMR_DCE_STATUS_JBR_EXPIRED) ? - "jabber timer expired," : ""); - printk(KERN_DEBUG "Dsp ID: %02X\n", - m.mmr_dsp_id); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "mmc_unused2[]: %02X:%02X\n", - m.mmr_unused2[0], - m.mmr_unused2[1]); -#endif /* DEBUG_SHOW_UNUSED */ - printk(KERN_DEBUG "# correct_nwid: %d, # wrong_nwid: %d\n", - (m.mmr_correct_nwid_h << 8) | m.mmr_correct_nwid_l, - (m.mmr_wrong_nwid_h << 8) | m.mmr_wrong_nwid_l); - printk(KERN_DEBUG "thr_pre_set: 0x%x [current signal %s]\n", - m.mmr_thr_pre_set & MMR_THR_PRE_SET, - (m.mmr_thr_pre_set & MMR_THR_PRE_SET_CUR) ? "above" : "below"); - printk(KERN_DEBUG "signal_lvl: %d [%s], ", - m.mmr_signal_lvl & MMR_SIGNAL_LVL, - (m.mmr_signal_lvl & MMR_SIGNAL_LVL_VALID) ? "new msg" : "no new msg"); - printk("silence_lvl: %d [%s], ", m.mmr_silence_lvl & MMR_SILENCE_LVL, - (m.mmr_silence_lvl & MMR_SILENCE_LVL_VALID) ? "update done" : "no new update"); - printk("sgnl_qual: 0x%x [%s]\n", m.mmr_sgnl_qual & MMR_SGNL_QUAL, - (m.mmr_sgnl_qual & MMR_SGNL_QUAL_ANT) ? "Antenna 1" : "Antenna 0"); -#ifdef DEBUG_SHOW_UNUSED - printk(KERN_DEBUG "netw_id_l: %x\n", m.mmr_netw_id_l); -#endif /* DEBUG_SHOW_UNUSED */ -} /* wv_mmc_show */ -#endif /* DEBUG_MMC_SHOW */ - -#ifdef DEBUG_I82593_SHOW -/*------------------------------------------------------------------*/ -/* - * Print the formatted status of the i82593's receive unit. - */ -static void -wv_ru_show(struct net_device * dev) -{ - net_local *lp = netdev_priv(dev); - - printk(KERN_DEBUG "##### wavelan i82593 receiver status: #####\n"); - printk(KERN_DEBUG "ru: rfp %d stop %d", lp->rfp, lp->stop); - /* - * Not implemented yet... - */ - printk("\n"); -} /* wv_ru_show */ -#endif /* DEBUG_I82593_SHOW */ - -#ifdef DEBUG_DEVICE_SHOW -/*------------------------------------------------------------------*/ -/* - * Print the formatted status of the WaveLAN PCMCIA device driver. - */ -static void -wv_dev_show(struct net_device * dev) -{ - printk(KERN_DEBUG "dev:"); - printk(" state=%lX,", dev->state); - printk(" trans_start=%ld,", dev->trans_start); - printk(" flags=0x%x,", dev->flags); - printk("\n"); -} /* wv_dev_show */ - -/*------------------------------------------------------------------*/ -/* - * Print the formatted status of the WaveLAN PCMCIA device driver's - * private information. - */ -static void -wv_local_show(struct net_device * dev) -{ - net_local *lp = netdev_priv(dev); - - printk(KERN_DEBUG "local:"); - /* - * Not implemented yet... - */ - printk("\n"); -} /* wv_local_show */ -#endif /* DEBUG_DEVICE_SHOW */ - -#if defined(DEBUG_RX_INFO) || defined(DEBUG_TX_INFO) -/*------------------------------------------------------------------*/ -/* - * Dump packet header (and content if necessary) on the screen - */ -static void -wv_packet_info(u_char * p, /* Packet to dump */ - int length, /* Length of the packet */ - char * msg1, /* Name of the device */ - char * msg2) /* Name of the function */ -{ - int i; - int maxi; - - printk(KERN_DEBUG "%s: %s(): dest %pM, length %d\n", - msg1, msg2, p, length); - printk(KERN_DEBUG "%s: %s(): src %pM, type 0x%02X%02X\n", - msg1, msg2, &p[6], p[12], p[13]); - -#ifdef DEBUG_PACKET_DUMP - - printk(KERN_DEBUG "data=\""); - - if((maxi = length) > DEBUG_PACKET_DUMP) - maxi = DEBUG_PACKET_DUMP; - for(i = 14; i < maxi; i++) - if(p[i] >= ' ' && p[i] <= '~') - printk(" %c", p[i]); - else - printk("%02X", p[i]); - if(maxi < length) - printk(".."); - printk("\"\n"); - printk(KERN_DEBUG "\n"); -#endif /* DEBUG_PACKET_DUMP */ -} -#endif /* defined(DEBUG_RX_INFO) || defined(DEBUG_TX_INFO) */ - -/*------------------------------------------------------------------*/ -/* - * This is the information which is displayed by the driver at startup - * There is a lot of flag to configure it at your will... - */ -static void -wv_init_info(struct net_device * dev) -{ - unsigned int base = dev->base_addr; - psa_t psa; - - /* Read the parameter storage area */ - psa_read(dev, 0, (unsigned char *) &psa, sizeof(psa)); - -#ifdef DEBUG_PSA_SHOW - wv_psa_show(&psa); -#endif -#ifdef DEBUG_MMC_SHOW - wv_mmc_show(dev); -#endif -#ifdef DEBUG_I82593_SHOW - wv_ru_show(dev); -#endif - -#ifdef DEBUG_BASIC_SHOW - /* Now, let's go for the basic stuff */ - printk(KERN_NOTICE "%s: WaveLAN: port %#x, irq %d, hw_addr %pM", - dev->name, base, dev->irq, dev->dev_addr); - - /* Print current network id */ - if(psa.psa_nwid_select) - printk(", nwid 0x%02X-%02X", psa.psa_nwid[0], psa.psa_nwid[1]); - else - printk(", nwid off"); - - /* If 2.00 card */ - if(!(mmc_in(base, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) - { - unsigned short freq; - - /* Ask the EEprom to read the frequency from the first area */ - fee_read(base, 0x00 /* 1st area - frequency... */, - &freq, 1); - - /* Print frequency */ - printk(", 2.00, %ld", (freq >> 6) + 2400L); - - /* Hack !!! */ - if(freq & 0x20) - printk(".5"); - } - else - { - printk(", PCMCIA, "); - switch (psa.psa_subband) - { - case PSA_SUBBAND_915: - printk("915"); - break; - case PSA_SUBBAND_2425: - printk("2425"); - break; - case PSA_SUBBAND_2460: - printk("2460"); - break; - case PSA_SUBBAND_2484: - printk("2484"); - break; - case PSA_SUBBAND_2430_5: - printk("2430.5"); - break; - default: - printk("unknown"); - } - } - - printk(" MHz\n"); -#endif /* DEBUG_BASIC_SHOW */ - -#ifdef DEBUG_VERSION_SHOW - /* Print version information */ - printk(KERN_NOTICE "%s", version); -#endif -} /* wv_init_info */ - -/********************* IOCTL, STATS & RECONFIG *********************/ -/* - * We found here routines that are called by Linux on differents - * occasions after the configuration and not for transmitting data - * These may be called when the user use ifconfig, /proc/net/dev - * or wireless extensions - */ - - -/*------------------------------------------------------------------*/ -/* - * Set or clear the multicast filter for this adaptor. - * num_addrs == -1 Promiscuous mode, receive all packets - * num_addrs == 0 Normal mode, clear multicast list - * num_addrs > 0 Multicast mode, receive normal and MC packets, - * and do best-effort filtering. - */ - -static void -wavelan_set_multicast_list(struct net_device * dev) -{ - net_local * lp = netdev_priv(dev); - -#ifdef DEBUG_IOCTL_TRACE - printk(KERN_DEBUG "%s: ->wavelan_set_multicast_list()\n", dev->name); -#endif - -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG "%s: wavelan_set_multicast_list(): setting Rx mode %02X to %d addresses.\n", - dev->name, dev->flags, netdev_mc_count(dev)); -#endif - - if(dev->flags & IFF_PROMISC) - { - /* - * Enable promiscuous mode: receive all packets. - */ - if(!lp->promiscuous) - { - lp->promiscuous = 1; - lp->allmulticast = 0; - lp->mc_count = 0; - - wv_82593_reconfig(dev); - } - } - else - /* If all multicast addresses - * or too much multicast addresses for the hardware filter */ - if((dev->flags & IFF_ALLMULTI) || - (netdev_mc_count(dev) > I82593_MAX_MULTICAST_ADDRESSES)) - { - /* - * Disable promiscuous mode, but active the all multicast mode - */ - if(!lp->allmulticast) - { - lp->promiscuous = 0; - lp->allmulticast = 1; - lp->mc_count = 0; - - wv_82593_reconfig(dev); - } - } - else - /* If there is some multicast addresses to send */ - if (!netdev_mc_empty(dev)) { - /* - * Disable promiscuous mode, but receive all packets - * in multicast list - */ -#ifdef MULTICAST_AVOID - if(lp->promiscuous || lp->allmulticast || - (netdev_mc_count(dev) != lp->mc_count)) -#endif - { - lp->promiscuous = 0; - lp->allmulticast = 0; - lp->mc_count = netdev_mc_count(dev); - - wv_82593_reconfig(dev); - } - } - else - { - /* - * Switch to normal mode: disable promiscuous mode and - * clear the multicast list. - */ - if(lp->promiscuous || lp->mc_count == 0) - { - lp->promiscuous = 0; - lp->allmulticast = 0; - lp->mc_count = 0; - - wv_82593_reconfig(dev); - } - } -#ifdef DEBUG_IOCTL_TRACE - printk(KERN_DEBUG "%s: <-wavelan_set_multicast_list()\n", dev->name); -#endif -} - -/*------------------------------------------------------------------*/ -/* - * This function doesn't exist... - * (Note : it was a nice way to test the reconfigure stuff...) - */ -#ifdef SET_MAC_ADDRESS -static int -wavelan_set_mac_address(struct net_device * dev, - void * addr) -{ - struct sockaddr * mac = addr; - - /* Copy the address */ - memcpy(dev->dev_addr, mac->sa_data, WAVELAN_ADDR_SIZE); - - /* Reconfig the beast */ - wv_82593_reconfig(dev); - - return 0; -} -#endif /* SET_MAC_ADDRESS */ - - -/*------------------------------------------------------------------*/ -/* - * Frequency setting (for hardware able of it) - * It's a bit complicated and you don't really want to look into it... - */ -static int -wv_set_frequency(u_long base, /* i/o port of the card */ - iw_freq * frequency) -{ - const int BAND_NUM = 10; /* Number of bands */ - long freq = 0L; /* offset to 2.4 GHz in .5 MHz */ -#ifdef DEBUG_IOCTL_INFO - int i; -#endif - - /* Setting by frequency */ - /* Theoritically, you may set any frequency between - * the two limits with a 0.5 MHz precision. In practice, - * I don't want you to have trouble with local - * regulations... */ - if((frequency->e == 1) && - (frequency->m >= (int) 2.412e8) && (frequency->m <= (int) 2.487e8)) - { - freq = ((frequency->m / 10000) - 24000L) / 5; - } - - /* Setting by channel (same as wfreqsel) */ - /* Warning : each channel is 22MHz wide, so some of the channels - * will interfere... */ - if((frequency->e == 0) && - (frequency->m >= 0) && (frequency->m < BAND_NUM)) - { - /* Get frequency offset. */ - freq = channel_bands[frequency->m] >> 1; - } - - /* Verify if the frequency is allowed */ - if(freq != 0L) - { - u_short table[10]; /* Authorized frequency table */ - - /* Read the frequency table */ - fee_read(base, 0x71 /* frequency table */, - table, 10); - -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG "Frequency table :"); - for(i = 0; i < 10; i++) - { - printk(" %04X", - table[i]); - } - printk("\n"); -#endif - - /* Look in the table if the frequency is allowed */ - if(!(table[9 - ((freq - 24) / 16)] & - (1 << ((freq - 24) % 16)))) - return -EINVAL; /* not allowed */ - } - else - return -EINVAL; - - /* If we get a usable frequency */ - if(freq != 0L) - { - unsigned short area[16]; - unsigned short dac[2]; - unsigned short area_verify[16]; - unsigned short dac_verify[2]; - /* Corresponding gain (in the power adjust value table) - * see AT&T Wavelan Data Manual, REF 407-024689/E, page 3-8 - * & WCIN062D.DOC, page 6.2.9 */ - unsigned short power_limit[] = { 40, 80, 120, 160, 0 }; - int power_band = 0; /* Selected band */ - unsigned short power_adjust; /* Correct value */ - - /* Search for the gain */ - power_band = 0; - while((freq > power_limit[power_band]) && - (power_limit[++power_band] != 0)) - ; - - /* Read the first area */ - fee_read(base, 0x00, - area, 16); - - /* Read the DAC */ - fee_read(base, 0x60, - dac, 2); - - /* Read the new power adjust value */ - fee_read(base, 0x6B - (power_band >> 1), - &power_adjust, 1); - if(power_band & 0x1) - power_adjust >>= 8; - else - power_adjust &= 0xFF; - -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG "Wavelan EEprom Area 1 :"); - for(i = 0; i < 16; i++) - { - printk(" %04X", - area[i]); - } - printk("\n"); - - printk(KERN_DEBUG "Wavelan EEprom DAC : %04X %04X\n", - dac[0], dac[1]); -#endif - - /* Frequency offset (for info only...) */ - area[0] = ((freq << 5) & 0xFFE0) | (area[0] & 0x1F); - - /* Receiver Principle main divider coefficient */ - area[3] = (freq >> 1) + 2400L - 352L; - area[2] = ((freq & 0x1) << 4) | (area[2] & 0xFFEF); - - /* Transmitter Main divider coefficient */ - area[13] = (freq >> 1) + 2400L; - area[12] = ((freq & 0x1) << 4) | (area[2] & 0xFFEF); - - /* Others part of the area are flags, bit streams or unused... */ - - /* Set the value in the DAC */ - dac[1] = ((power_adjust >> 1) & 0x7F) | (dac[1] & 0xFF80); - dac[0] = ((power_adjust & 0x1) << 4) | (dac[0] & 0xFFEF); - - /* Write the first area */ - fee_write(base, 0x00, - area, 16); - - /* Write the DAC */ - fee_write(base, 0x60, - dac, 2); - - /* We now should verify here that the EEprom writing was ok */ - - /* ReRead the first area */ - fee_read(base, 0x00, - area_verify, 16); - - /* ReRead the DAC */ - fee_read(base, 0x60, - dac_verify, 2); - - /* Compare */ - if(memcmp(area, area_verify, 16 * 2) || - memcmp(dac, dac_verify, 2 * 2)) - { -#ifdef DEBUG_IOCTL_ERROR - printk(KERN_INFO "Wavelan: wv_set_frequency : unable to write new frequency to EEprom (?)\n"); -#endif - return -EOPNOTSUPP; - } - - /* We must download the frequency parameters to the - * synthetisers (from the EEprom - area 1) - * Note : as the EEprom is auto decremented, we set the end - * if the area... */ - mmc_out(base, mmwoff(0, mmw_fee_addr), 0x0F); - mmc_out(base, mmwoff(0, mmw_fee_ctrl), - MMW_FEE_CTRL_READ | MMW_FEE_CTRL_DWLD); - - /* Wait until the download is finished */ - fee_wait(base, 100, 100); - - /* We must now download the power adjust value (gain) to - * the synthetisers (from the EEprom - area 7 - DAC) */ - mmc_out(base, mmwoff(0, mmw_fee_addr), 0x61); - mmc_out(base, mmwoff(0, mmw_fee_ctrl), - MMW_FEE_CTRL_READ | MMW_FEE_CTRL_DWLD); - - /* Wait until the download is finished */ - fee_wait(base, 100, 100); - -#ifdef DEBUG_IOCTL_INFO - /* Verification of what we have done... */ - - printk(KERN_DEBUG "Wavelan EEprom Area 1 :"); - for(i = 0; i < 16; i++) - { - printk(" %04X", - area_verify[i]); - } - printk("\n"); - - printk(KERN_DEBUG "Wavelan EEprom DAC : %04X %04X\n", - dac_verify[0], dac_verify[1]); -#endif - - return 0; - } - else - return -EINVAL; /* Bah, never get there... */ -} - -/*------------------------------------------------------------------*/ -/* - * Give the list of available frequencies - */ -static int -wv_frequency_list(u_long base, /* i/o port of the card */ - iw_freq * list, /* List of frequency to fill */ - int max) /* Maximum number of frequencies */ -{ - u_short table[10]; /* Authorized frequency table */ - long freq = 0L; /* offset to 2.4 GHz in .5 MHz + 12 MHz */ - int i; /* index in the table */ - const int BAND_NUM = 10; /* Number of bands */ - int c = 0; /* Channel number */ - - /* Read the frequency table */ - fee_read(base, 0x71 /* frequency table */, - table, 10); - - /* Look all frequencies */ - i = 0; - for(freq = 0; freq < 150; freq++) - /* Look in the table if the frequency is allowed */ - if(table[9 - (freq / 16)] & (1 << (freq % 16))) - { - /* Compute approximate channel number */ - while((((channel_bands[c] >> 1) - 24) < freq) && - (c < BAND_NUM)) - c++; - list[i].i = c; /* Set the list index */ - - /* put in the list */ - list[i].m = (((freq + 24) * 5) + 24000L) * 10000; - list[i++].e = 1; - - /* Check number */ - if(i >= max) - return(i); - } - - return(i); -} - -#ifdef IW_WIRELESS_SPY -/*------------------------------------------------------------------*/ -/* - * Gather wireless spy statistics : for each packet, compare the source - * address with out list, and if match, get the stats... - * Sorry, but this function really need wireless extensions... - */ -static inline void -wl_spy_gather(struct net_device * dev, - u_char * mac, /* MAC address */ - u_char * stats) /* Statistics to gather */ -{ - struct iw_quality wstats; - - wstats.qual = stats[2] & MMR_SGNL_QUAL; - wstats.level = stats[0] & MMR_SIGNAL_LVL; - wstats.noise = stats[1] & MMR_SILENCE_LVL; - wstats.updated = 0x7; - - /* Update spy records */ - wireless_spy_update(dev, mac, &wstats); -} -#endif /* IW_WIRELESS_SPY */ - -#ifdef HISTOGRAM -/*------------------------------------------------------------------*/ -/* - * This function calculate an histogram on the signal level. - * As the noise is quite constant, it's like doing it on the SNR. - * We have defined a set of interval (lp->his_range), and each time - * the level goes in that interval, we increment the count (lp->his_sum). - * With this histogram you may detect if one wavelan is really weak, - * or you may also calculate the mean and standard deviation of the level... - */ -static inline void -wl_his_gather(struct net_device * dev, - u_char * stats) /* Statistics to gather */ -{ - net_local * lp = netdev_priv(dev); - u_char level = stats[0] & MMR_SIGNAL_LVL; - int i; - - /* Find the correct interval */ - i = 0; - while((i < (lp->his_number - 1)) && (level >= lp->his_range[i++])) - ; - - /* Increment interval counter */ - (lp->his_sum[i])++; -} -#endif /* HISTOGRAM */ - -static void wl_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) -{ - strncpy(info->driver, "wavelan_cs", sizeof(info->driver)-1); -} - -static const struct ethtool_ops ops = { - .get_drvinfo = wl_get_drvinfo -}; - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get protocol name - */ -static int wavelan_get_name(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - strcpy(wrqu->name, "WaveLAN"); - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set NWID - */ -static int wavelan_set_nwid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned int base = dev->base_addr; - net_local *lp = netdev_priv(dev); - psa_t psa; - mm_t m; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Set NWID in WaveLAN. */ - if (!wrqu->nwid.disabled) { - /* Set NWID in psa */ - psa.psa_nwid[0] = (wrqu->nwid.value & 0xFF00) >> 8; - psa.psa_nwid[1] = wrqu->nwid.value & 0xFF; - psa.psa_nwid_select = 0x01; - psa_write(dev, - (char *) psa.psa_nwid - (char *) &psa, - (unsigned char *) psa.psa_nwid, 3); - - /* Set NWID in mmc. */ - m.w.mmw_netw_id_l = psa.psa_nwid[1]; - m.w.mmw_netw_id_h = psa.psa_nwid[0]; - mmc_write(base, - (char *) &m.w.mmw_netw_id_l - - (char *) &m, - (unsigned char *) &m.w.mmw_netw_id_l, 2); - mmc_out(base, mmwoff(0, mmw_loopt_sel), 0x00); - } else { - /* Disable NWID in the psa. */ - psa.psa_nwid_select = 0x00; - psa_write(dev, - (char *) &psa.psa_nwid_select - - (char *) &psa, - (unsigned char *) &psa.psa_nwid_select, - 1); - - /* Disable NWID in the mmc (no filtering). */ - mmc_out(base, mmwoff(0, mmw_loopt_sel), - MMW_LOOPT_SEL_DIS_NWID); - } - /* update the Wavelan checksum */ - update_psa_checksum(dev); - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get NWID - */ -static int wavelan_get_nwid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Read the NWID. */ - psa_read(dev, - (char *) psa.psa_nwid - (char *) &psa, - (unsigned char *) psa.psa_nwid, 3); - wrqu->nwid.value = (psa.psa_nwid[0] << 8) + psa.psa_nwid[1]; - wrqu->nwid.disabled = !(psa.psa_nwid_select); - wrqu->nwid.fixed = 1; /* Superfluous */ - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set frequency - */ -static int wavelan_set_freq(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned int base = dev->base_addr; - net_local *lp = netdev_priv(dev); - unsigned long flags; - int ret; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Attempt to recognise 2.00 cards (2.4 GHz frequency selectable). */ - if (!(mmc_in(base, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) - ret = wv_set_frequency(base, &(wrqu->freq)); - else - ret = -EOPNOTSUPP; - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get frequency - */ -static int wavelan_get_freq(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned int base = dev->base_addr; - net_local *lp = netdev_priv(dev); - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Attempt to recognise 2.00 cards (2.4 GHz frequency selectable). - * Does it work for everybody, especially old cards? */ - if (!(mmc_in(base, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) { - unsigned short freq; - - /* Ask the EEPROM to read the frequency from the first area. */ - fee_read(base, 0x00, &freq, 1); - wrqu->freq.m = ((freq >> 5) * 5 + 24000L) * 10000; - wrqu->freq.e = 1; - } else { - psa_read(dev, - (char *) &psa.psa_subband - (char *) &psa, - (unsigned char *) &psa.psa_subband, 1); - - if (psa.psa_subband <= 4) { - wrqu->freq.m = fixed_bands[psa.psa_subband]; - wrqu->freq.e = (psa.psa_subband != 0); - } else - ret = -EOPNOTSUPP; - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set level threshold - */ -static int wavelan_set_sens(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned int base = dev->base_addr; - net_local *lp = netdev_priv(dev); - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Set the level threshold. */ - /* We should complain loudly if wrqu->sens.fixed = 0, because we - * can't set auto mode... */ - psa.psa_thr_pre_set = wrqu->sens.value & 0x3F; - psa_write(dev, - (char *) &psa.psa_thr_pre_set - (char *) &psa, - (unsigned char *) &psa.psa_thr_pre_set, 1); - /* update the Wavelan checksum */ - update_psa_checksum(dev); - mmc_out(base, mmwoff(0, mmw_thr_pre_set), - psa.psa_thr_pre_set); - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get level threshold - */ -static int wavelan_get_sens(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Read the level threshold. */ - psa_read(dev, - (char *) &psa.psa_thr_pre_set - (char *) &psa, - (unsigned char *) &psa.psa_thr_pre_set, 1); - wrqu->sens.value = psa.psa_thr_pre_set & 0x3F; - wrqu->sens.fixed = 1; - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set encryption key - */ -static int wavelan_set_encode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned int base = dev->base_addr; - net_local *lp = netdev_priv(dev); - unsigned long flags; - psa_t psa; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Check if capable of encryption */ - if (!mmc_encr(base)) { - ret = -EOPNOTSUPP; - } - - /* Check the size of the key */ - if((wrqu->encoding.length != 8) && (wrqu->encoding.length != 0)) { - ret = -EINVAL; - } - - if(!ret) { - /* Basic checking... */ - if (wrqu->encoding.length == 8) { - /* Copy the key in the driver */ - memcpy(psa.psa_encryption_key, extra, - wrqu->encoding.length); - psa.psa_encryption_select = 1; - - psa_write(dev, - (char *) &psa.psa_encryption_select - - (char *) &psa, - (unsigned char *) &psa. - psa_encryption_select, 8 + 1); - - mmc_out(base, mmwoff(0, mmw_encr_enable), - MMW_ENCR_ENABLE_EN | MMW_ENCR_ENABLE_MODE); - mmc_write(base, mmwoff(0, mmw_encr_key), - (unsigned char *) &psa. - psa_encryption_key, 8); - } - - /* disable encryption */ - if (wrqu->encoding.flags & IW_ENCODE_DISABLED) { - psa.psa_encryption_select = 0; - psa_write(dev, - (char *) &psa.psa_encryption_select - - (char *) &psa, - (unsigned char *) &psa. - psa_encryption_select, 1); - - mmc_out(base, mmwoff(0, mmw_encr_enable), 0); - } - /* update the Wavelan checksum */ - update_psa_checksum(dev); - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get encryption key - */ -static int wavelan_get_encode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned int base = dev->base_addr; - net_local *lp = netdev_priv(dev); - psa_t psa; - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Check if encryption is available */ - if (!mmc_encr(base)) { - ret = -EOPNOTSUPP; - } else { - /* Read the encryption key */ - psa_read(dev, - (char *) &psa.psa_encryption_select - - (char *) &psa, - (unsigned char *) &psa. - psa_encryption_select, 1 + 8); - - /* encryption is enabled ? */ - if (psa.psa_encryption_select) - wrqu->encoding.flags = IW_ENCODE_ENABLED; - else - wrqu->encoding.flags = IW_ENCODE_DISABLED; - wrqu->encoding.flags |= mmc_encr(base); - - /* Copy the key to the user buffer */ - wrqu->encoding.length = 8; - memcpy(extra, psa.psa_encryption_key, wrqu->encoding.length); - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -#ifdef WAVELAN_ROAMING_EXT -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set ESSID (domain) - */ -static int wavelan_set_essid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Check if disable */ - if(wrqu->data.flags == 0) - lp->filter_domains = 0; - else { - char essid[IW_ESSID_MAX_SIZE + 1]; - char * endp; - - /* Terminate the string */ - memcpy(essid, extra, wrqu->data.length); - essid[IW_ESSID_MAX_SIZE] = '\0'; - -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG "SetEssid : ``%s''\n", essid); -#endif /* DEBUG_IOCTL_INFO */ - - /* Convert to a number (note : Wavelan specific) */ - lp->domain_id = simple_strtoul(essid, &endp, 16); - /* Has it worked ? */ - if(endp > essid) - lp->filter_domains = 1; - else { - lp->filter_domains = 0; - ret = -EINVAL; - } - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get ESSID (domain) - */ -static int wavelan_get_essid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); - - /* Is the domain ID active ? */ - wrqu->data.flags = lp->filter_domains; - - /* Copy Domain ID into a string (Wavelan specific) */ - /* Sound crazy, be we can't have a snprintf in the kernel !!! */ - sprintf(extra, "%lX", lp->domain_id); - extra[IW_ESSID_MAX_SIZE] = '\0'; - - /* Set the length */ - wrqu->data.length = strlen(extra); - - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set AP address - */ -static int wavelan_set_wap(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ -#ifdef DEBUG_IOCTL_INFO - printk(KERN_DEBUG "Set AP to : %pM\n", wrqu->ap_addr.sa_data); -#endif /* DEBUG_IOCTL_INFO */ - - return -EOPNOTSUPP; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get AP address - */ -static int wavelan_get_wap(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - /* Should get the real McCoy instead of own Ethernet address */ - memcpy(wrqu->ap_addr.sa_data, dev->dev_addr, WAVELAN_ADDR_SIZE); - wrqu->ap_addr.sa_family = ARPHRD_ETHER; - - return -EOPNOTSUPP; -} -#endif /* WAVELAN_ROAMING_EXT */ - -#ifdef WAVELAN_ROAMING -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : set mode - */ -static int wavelan_set_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); - unsigned long flags; - int ret = 0; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Check mode */ - switch(wrqu->mode) { - case IW_MODE_ADHOC: - if(do_roaming) { - wv_roam_cleanup(dev); - do_roaming = 0; - } - break; - case IW_MODE_INFRA: - if(!do_roaming) { - wv_roam_init(dev); - do_roaming = 1; - } - break; - default: - ret = -EINVAL; - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get mode - */ -static int wavelan_get_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - if(do_roaming) - wrqu->mode = IW_MODE_INFRA; - else - wrqu->mode = IW_MODE_ADHOC; - - return 0; -} -#endif /* WAVELAN_ROAMING */ - -/*------------------------------------------------------------------*/ -/* - * Wireless Handler : get range info - */ -static int wavelan_get_range(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned int base = dev->base_addr; - net_local *lp = netdev_priv(dev); - struct iw_range *range = (struct iw_range *) extra; - unsigned long flags; - int ret = 0; - - /* Set the length (very important for backward compatibility) */ - wrqu->data.length = sizeof(struct iw_range); - - /* Set all the info we don't care or don't know about to zero */ - memset(range, 0, sizeof(struct iw_range)); - - /* Set the Wireless Extension versions */ - range->we_version_compiled = WIRELESS_EXT; - range->we_version_source = 9; - - /* Set information in the range struct. */ - range->throughput = 1.4 * 1000 * 1000; /* don't argue on this ! */ - range->min_nwid = 0x0000; - range->max_nwid = 0xFFFF; - - range->sensitivity = 0x3F; - range->max_qual.qual = MMR_SGNL_QUAL; - range->max_qual.level = MMR_SIGNAL_LVL; - range->max_qual.noise = MMR_SILENCE_LVL; - range->avg_qual.qual = MMR_SGNL_QUAL; /* Always max */ - /* Need to get better values for those two */ - range->avg_qual.level = 30; - range->avg_qual.noise = 8; - - range->num_bitrates = 1; - range->bitrate[0] = 2000000; /* 2 Mb/s */ - - /* Event capability (kernel + driver) */ - range->event_capa[0] = (IW_EVENT_CAPA_MASK(0x8B02) | - IW_EVENT_CAPA_MASK(0x8B04) | - IW_EVENT_CAPA_MASK(0x8B06)); - range->event_capa[1] = IW_EVENT_CAPA_K_1; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Attempt to recognise 2.00 cards (2.4 GHz frequency selectable). */ - if (!(mmc_in(base, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) { - range->num_channels = 10; - range->num_frequency = wv_frequency_list(base, range->freq, - IW_MAX_FREQUENCIES); - } else - range->num_channels = range->num_frequency = 0; - - /* Encryption supported ? */ - if (mmc_encr(base)) { - range->encoding_size[0] = 8; /* DES = 64 bits key */ - range->num_encoding_sizes = 1; - range->max_encoding_tokens = 1; /* Only one key possible */ - } else { - range->num_encoding_sizes = 0; - range->max_encoding_tokens = 0; - } - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return ret; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : set quality threshold - */ -static int wavelan_set_qthr(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned int base = dev->base_addr; - net_local *lp = netdev_priv(dev); - psa_t psa; - unsigned long flags; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - psa.psa_quality_thr = *(extra) & 0x0F; - psa_write(dev, - (char *) &psa.psa_quality_thr - (char *) &psa, - (unsigned char *) &psa.psa_quality_thr, 1); - /* update the Wavelan checksum */ - update_psa_checksum(dev); - mmc_out(base, mmwoff(0, mmw_quality_thr), - psa.psa_quality_thr); - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : get quality threshold - */ -static int wavelan_get_qthr(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); - psa_t psa; - unsigned long flags; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - psa_read(dev, - (char *) &psa.psa_quality_thr - (char *) &psa, - (unsigned char *) &psa.psa_quality_thr, 1); - *(extra) = psa.psa_quality_thr & 0x0F; - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return 0; -} - -#ifdef WAVELAN_ROAMING -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : set roaming - */ -static int wavelan_set_roam(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); - unsigned long flags; - - /* Disable interrupts and save flags. */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Note : should check if user == root */ - if(do_roaming && (*extra)==0) - wv_roam_cleanup(dev); - else if(do_roaming==0 && (*extra)!=0) - wv_roam_init(dev); - - do_roaming = (*extra); - - /* Enable interrupts and restore flags. */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : get quality threshold - */ -static int wavelan_get_roam(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - *(extra) = do_roaming; - - return 0; -} -#endif /* WAVELAN_ROAMING */ - -#ifdef HISTOGRAM -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : set histogram - */ -static int wavelan_set_histo(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); - - /* Check the number of intervals. */ - if (wrqu->data.length > 16) { - return(-E2BIG); - } - - /* Disable histo while we copy the addresses. - * As we don't disable interrupts, we need to do this */ - lp->his_number = 0; - - /* Are there ranges to copy? */ - if (wrqu->data.length > 0) { - /* Copy interval ranges to the driver */ - memcpy(lp->his_range, extra, wrqu->data.length); - - { - int i; - printk(KERN_DEBUG "Histo :"); - for(i = 0; i < wrqu->data.length; i++) - printk(" %d", lp->his_range[i]); - printk("\n"); - } - - /* Reset result structure. */ - memset(lp->his_sum, 0x00, sizeof(long) * 16); - } - - /* Now we can set the number of ranges */ - lp->his_number = wrqu->data.length; - - return(0); -} - -/*------------------------------------------------------------------*/ -/* - * Wireless Private Handler : get histogram - */ -static int wavelan_get_histo(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - net_local *lp = netdev_priv(dev); - - /* Set the number of intervals. */ - wrqu->data.length = lp->his_number; - - /* Give back the distribution statistics */ - if(lp->his_number > 0) - memcpy(extra, lp->his_sum, sizeof(long) * lp->his_number); - - return(0); -} -#endif /* HISTOGRAM */ - -/*------------------------------------------------------------------*/ -/* - * Structures to export the Wireless Handlers - */ - -static const struct iw_priv_args wavelan_private_args[] = { -/*{ cmd, set_args, get_args, name } */ - { SIOCSIPQTHR, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, 0, "setqualthr" }, - { SIOCGIPQTHR, 0, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, "getqualthr" }, - { SIOCSIPROAM, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, 0, "setroam" }, - { SIOCGIPROAM, 0, IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | 1, "getroam" }, - { SIOCSIPHISTO, IW_PRIV_TYPE_BYTE | 16, 0, "sethisto" }, - { SIOCGIPHISTO, 0, IW_PRIV_TYPE_INT | 16, "gethisto" }, -}; - -static const iw_handler wavelan_handler[] = -{ - NULL, /* SIOCSIWNAME */ - wavelan_get_name, /* SIOCGIWNAME */ - wavelan_set_nwid, /* SIOCSIWNWID */ - wavelan_get_nwid, /* SIOCGIWNWID */ - wavelan_set_freq, /* SIOCSIWFREQ */ - wavelan_get_freq, /* SIOCGIWFREQ */ -#ifdef WAVELAN_ROAMING - wavelan_set_mode, /* SIOCSIWMODE */ - wavelan_get_mode, /* SIOCGIWMODE */ -#else /* WAVELAN_ROAMING */ - NULL, /* SIOCSIWMODE */ - NULL, /* SIOCGIWMODE */ -#endif /* WAVELAN_ROAMING */ - wavelan_set_sens, /* SIOCSIWSENS */ - wavelan_get_sens, /* SIOCGIWSENS */ - NULL, /* SIOCSIWRANGE */ - wavelan_get_range, /* SIOCGIWRANGE */ - NULL, /* SIOCSIWPRIV */ - NULL, /* SIOCGIWPRIV */ - NULL, /* SIOCSIWSTATS */ - NULL, /* SIOCGIWSTATS */ - iw_handler_set_spy, /* SIOCSIWSPY */ - iw_handler_get_spy, /* SIOCGIWSPY */ - iw_handler_set_thrspy, /* SIOCSIWTHRSPY */ - iw_handler_get_thrspy, /* SIOCGIWTHRSPY */ -#ifdef WAVELAN_ROAMING_EXT - wavelan_set_wap, /* SIOCSIWAP */ - wavelan_get_wap, /* SIOCGIWAP */ - NULL, /* -- hole -- */ - NULL, /* SIOCGIWAPLIST */ - NULL, /* -- hole -- */ - NULL, /* -- hole -- */ - wavelan_set_essid, /* SIOCSIWESSID */ - wavelan_get_essid, /* SIOCGIWESSID */ -#else /* WAVELAN_ROAMING_EXT */ - NULL, /* SIOCSIWAP */ - NULL, /* SIOCGIWAP */ - NULL, /* -- hole -- */ - NULL, /* SIOCGIWAPLIST */ - NULL, /* -- hole -- */ - NULL, /* -- hole -- */ - NULL, /* SIOCSIWESSID */ - NULL, /* SIOCGIWESSID */ -#endif /* WAVELAN_ROAMING_EXT */ - NULL, /* SIOCSIWNICKN */ - NULL, /* SIOCGIWNICKN */ - NULL, /* -- hole -- */ - NULL, /* -- hole -- */ - NULL, /* SIOCSIWRATE */ - NULL, /* SIOCGIWRATE */ - NULL, /* SIOCSIWRTS */ - NULL, /* SIOCGIWRTS */ - NULL, /* SIOCSIWFRAG */ - NULL, /* SIOCGIWFRAG */ - NULL, /* SIOCSIWTXPOW */ - NULL, /* SIOCGIWTXPOW */ - NULL, /* SIOCSIWRETRY */ - NULL, /* SIOCGIWRETRY */ - wavelan_set_encode, /* SIOCSIWENCODE */ - wavelan_get_encode, /* SIOCGIWENCODE */ -}; - -static const iw_handler wavelan_private_handler[] = -{ - wavelan_set_qthr, /* SIOCIWFIRSTPRIV */ - wavelan_get_qthr, /* SIOCIWFIRSTPRIV + 1 */ -#ifdef WAVELAN_ROAMING - wavelan_set_roam, /* SIOCIWFIRSTPRIV + 2 */ - wavelan_get_roam, /* SIOCIWFIRSTPRIV + 3 */ -#else /* WAVELAN_ROAMING */ - NULL, /* SIOCIWFIRSTPRIV + 2 */ - NULL, /* SIOCIWFIRSTPRIV + 3 */ -#endif /* WAVELAN_ROAMING */ -#ifdef HISTOGRAM - wavelan_set_histo, /* SIOCIWFIRSTPRIV + 4 */ - wavelan_get_histo, /* SIOCIWFIRSTPRIV + 5 */ -#endif /* HISTOGRAM */ -}; - -static const struct iw_handler_def wavelan_handler_def = -{ - .num_standard = ARRAY_SIZE(wavelan_handler), - .num_private = ARRAY_SIZE(wavelan_private_handler), - .num_private_args = ARRAY_SIZE(wavelan_private_args), - .standard = wavelan_handler, - .private = wavelan_private_handler, - .private_args = wavelan_private_args, - .get_wireless_stats = wavelan_get_wireless_stats, -}; - -/*------------------------------------------------------------------*/ -/* - * Get wireless statistics - * Called by /proc/net/wireless... - */ -static iw_stats * -wavelan_get_wireless_stats(struct net_device * dev) -{ - unsigned int base = dev->base_addr; - net_local * lp = netdev_priv(dev); - mmr_t m; - iw_stats * wstats; - unsigned long flags; - -#ifdef DEBUG_IOCTL_TRACE - printk(KERN_DEBUG "%s: ->wavelan_get_wireless_stats()\n", dev->name); -#endif - - /* Disable interrupts & save flags */ - spin_lock_irqsave(&lp->spinlock, flags); - - wstats = &lp->wstats; - - /* Get data from the mmc */ - mmc_out(base, mmwoff(0, mmw_freeze), 1); - - mmc_read(base, mmroff(0, mmr_dce_status), &m.mmr_dce_status, 1); - mmc_read(base, mmroff(0, mmr_wrong_nwid_l), &m.mmr_wrong_nwid_l, 2); - mmc_read(base, mmroff(0, mmr_thr_pre_set), &m.mmr_thr_pre_set, 4); - - mmc_out(base, mmwoff(0, mmw_freeze), 0); - - /* Copy data to wireless stuff */ - wstats->status = m.mmr_dce_status & MMR_DCE_STATUS; - wstats->qual.qual = m.mmr_sgnl_qual & MMR_SGNL_QUAL; - wstats->qual.level = m.mmr_signal_lvl & MMR_SIGNAL_LVL; - wstats->qual.noise = m.mmr_silence_lvl & MMR_SILENCE_LVL; - wstats->qual.updated = (((m.mmr_signal_lvl & MMR_SIGNAL_LVL_VALID) >> 7) | - ((m.mmr_signal_lvl & MMR_SIGNAL_LVL_VALID) >> 6) | - ((m.mmr_silence_lvl & MMR_SILENCE_LVL_VALID) >> 5)); - wstats->discard.nwid += (m.mmr_wrong_nwid_h << 8) | m.mmr_wrong_nwid_l; - wstats->discard.code = 0L; - wstats->discard.misc = 0L; - - /* ReEnable interrupts & restore flags */ - spin_unlock_irqrestore(&lp->spinlock, flags); - -#ifdef DEBUG_IOCTL_TRACE - printk(KERN_DEBUG "%s: <-wavelan_get_wireless_stats()\n", dev->name); -#endif - return &lp->wstats; -} - -/************************* PACKET RECEPTION *************************/ -/* - * This part deal with receiving the packets. - * The interrupt handler get an interrupt when a packet has been - * successfully received and called this part... - */ - -/*------------------------------------------------------------------*/ -/* - * Calculate the starting address of the frame pointed to by the receive - * frame pointer and verify that the frame seem correct - * (called by wv_packet_rcv()) - */ -static int -wv_start_of_frame(struct net_device * dev, - int rfp, /* end of frame */ - int wrap) /* start of buffer */ -{ - unsigned int base = dev->base_addr; - int rp; - int len; - - rp = (rfp - 5 + RX_SIZE) % RX_SIZE; - outb(rp & 0xff, PIORL(base)); - outb(((rp >> 8) & PIORH_MASK), PIORH(base)); - len = inb(PIOP(base)); - len |= inb(PIOP(base)) << 8; - - /* Sanity checks on size */ - /* Frame too big */ - if(len > MAXDATAZ + 100) - { -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_start_of_frame: Received frame too large, rfp %d len 0x%x\n", - dev->name, rfp, len); -#endif - return(-1); - } - - /* Frame too short */ - if(len < 7) - { -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_start_of_frame: Received null frame, rfp %d len 0x%x\n", - dev->name, rfp, len); -#endif - return(-1); - } - - /* Wrap around buffer */ - if(len > ((wrap - (rfp - len) + RX_SIZE) % RX_SIZE)) /* magic formula ! */ - { -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_start_of_frame: wrap around buffer, wrap %d rfp %d len 0x%x\n", - dev->name, wrap, rfp, len); -#endif - return(-1); - } - - return((rp - len + RX_SIZE) % RX_SIZE); -} /* wv_start_of_frame */ - -/*------------------------------------------------------------------*/ -/* - * This routine does the actual copy of data (including the ethernet - * header structure) from the WaveLAN card to an sk_buff chain that - * will be passed up to the network interface layer. NOTE: We - * currently don't handle trailer protocols (neither does the rest of - * the network interface), so if that is needed, it will (at least in - * part) be added here. The contents of the receive ring buffer are - * copied to a message chain that is then passed to the kernel. - * - * Note: if any errors occur, the packet is "dropped on the floor" - * (called by wv_packet_rcv()) - */ -static void -wv_packet_read(struct net_device * dev, - int fd_p, - int sksize) -{ - net_local * lp = netdev_priv(dev); - struct sk_buff * skb; - -#ifdef DEBUG_RX_TRACE - printk(KERN_DEBUG "%s: ->wv_packet_read(0x%X, %d)\n", - dev->name, fd_p, sksize); -#endif - - /* Allocate some buffer for the new packet */ - if((skb = dev_alloc_skb(sksize+2)) == (struct sk_buff *) NULL) - { -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "%s: wv_packet_read(): could not alloc_skb(%d, GFP_ATOMIC)\n", - dev->name, sksize); -#endif - dev->stats.rx_dropped++; - /* - * Not only do we want to return here, but we also need to drop the - * packet on the floor to clear the interrupt. - */ - return; - } - - skb_reserve(skb, 2); - fd_p = read_ringbuf(dev, fd_p, (char *) skb_put(skb, sksize), sksize); - skb->protocol = eth_type_trans(skb, dev); - -#ifdef DEBUG_RX_INFO - wv_packet_info(skb_mac_header(skb), sksize, dev->name, "wv_packet_read"); -#endif /* DEBUG_RX_INFO */ - - /* Statistics gathering & stuff associated. - * It seem a bit messy with all the define, but it's really simple... */ - if( -#ifdef IW_WIRELESS_SPY - (lp->spy_data.spy_number > 0) || -#endif /* IW_WIRELESS_SPY */ -#ifdef HISTOGRAM - (lp->his_number > 0) || -#endif /* HISTOGRAM */ -#ifdef WAVELAN_ROAMING - (do_roaming) || -#endif /* WAVELAN_ROAMING */ - 0) - { - u_char stats[3]; /* Signal level, Noise level, Signal quality */ - - /* read signal level, silence level and signal quality bytes */ - fd_p = read_ringbuf(dev, (fd_p + 4) % RX_SIZE + RX_BASE, - stats, 3); -#ifdef DEBUG_RX_INFO - printk(KERN_DEBUG "%s: wv_packet_read(): Signal level %d/63, Silence level %d/63, signal quality %d/16\n", - dev->name, stats[0] & 0x3F, stats[1] & 0x3F, stats[2] & 0x0F); -#endif - -#ifdef WAVELAN_ROAMING - if(do_roaming) - if(WAVELAN_BEACON(skb->data)) - wl_roam_gather(dev, skb->data, stats); -#endif /* WAVELAN_ROAMING */ - -#ifdef WIRELESS_SPY - wl_spy_gather(dev, skb_mac_header(skb) + WAVELAN_ADDR_SIZE, stats); -#endif /* WIRELESS_SPY */ -#ifdef HISTOGRAM - wl_his_gather(dev, stats); -#endif /* HISTOGRAM */ - } - - /* - * Hand the packet to the Network Module - */ - netif_rx(skb); - - /* Keep stats up to date */ - dev->stats.rx_packets++; - dev->stats.rx_bytes += sksize; - -#ifdef DEBUG_RX_TRACE - printk(KERN_DEBUG "%s: <-wv_packet_read()\n", dev->name); -#endif - return; -} - -/*------------------------------------------------------------------*/ -/* - * This routine is called by the interrupt handler to initiate a - * packet transfer from the card to the network interface layer above - * this driver. This routine checks if a buffer has been successfully - * received by the WaveLAN card. If so, the routine wv_packet_read is - * called to do the actual transfer of the card's data including the - * ethernet header into a packet consisting of an sk_buff chain. - * (called by wavelan_interrupt()) - * Note : the spinlock is already grabbed for us and irq are disabled. - */ -static void -wv_packet_rcv(struct net_device * dev) -{ - unsigned int base = dev->base_addr; - net_local * lp = netdev_priv(dev); - int newrfp; - int rp; - int len; - int f_start; - int status; - int i593_rfp; - int stat_ptr; - u_char c[4]; - -#ifdef DEBUG_RX_TRACE - printk(KERN_DEBUG "%s: ->wv_packet_rcv()\n", dev->name); -#endif - - /* Get the new receive frame pointer from the i82593 chip */ - outb(CR0_STATUS_2 | OP0_NOP, LCCR(base)); - i593_rfp = inb(LCSR(base)); - i593_rfp |= inb(LCSR(base)) << 8; - i593_rfp %= RX_SIZE; - - /* Get the new receive frame pointer from the WaveLAN card. - * It is 3 bytes more than the increment of the i82593 receive - * frame pointer, for each packet. This is because it includes the - * 3 roaming bytes added by the mmc. - */ - newrfp = inb(RPLL(base)); - newrfp |= inb(RPLH(base)) << 8; - newrfp %= RX_SIZE; - -#ifdef DEBUG_RX_INFO - printk(KERN_DEBUG "%s: wv_packet_rcv(): i593_rfp %d stop %d newrfp %d lp->rfp %d\n", - dev->name, i593_rfp, lp->stop, newrfp, lp->rfp); -#endif - -#ifdef DEBUG_RX_ERROR - /* If no new frame pointer... */ - if(lp->overrunning || newrfp == lp->rfp) - printk(KERN_INFO "%s: wv_packet_rcv(): no new frame: i593_rfp %d stop %d newrfp %d lp->rfp %d\n", - dev->name, i593_rfp, lp->stop, newrfp, lp->rfp); -#endif - - /* Read all frames (packets) received */ - while(newrfp != lp->rfp) - { - /* A frame is composed of the packet, followed by a status word, - * the length of the frame (word) and the mmc info (SNR & qual). - * It's because the length is at the end that we can only scan - * frames backward. */ - - /* Find the first frame by skipping backwards over the frames */ - rp = newrfp; /* End of last frame */ - while(((f_start = wv_start_of_frame(dev, rp, newrfp)) != lp->rfp) && - (f_start != -1)) - rp = f_start; - - /* If we had a problem */ - if(f_start == -1) - { -#ifdef DEBUG_RX_ERROR - printk(KERN_INFO "wavelan_cs: cannot find start of frame "); - printk(" i593_rfp %d stop %d newrfp %d lp->rfp %d\n", - i593_rfp, lp->stop, newrfp, lp->rfp); -#endif - lp->rfp = rp; /* Get to the last usable frame */ - continue; - } - - /* f_start point to the beggining of the first frame received - * and rp to the beggining of the next one */ - - /* Read status & length of the frame */ - stat_ptr = (rp - 7 + RX_SIZE) % RX_SIZE; - stat_ptr = read_ringbuf(dev, stat_ptr, c, 4); - status = c[0] | (c[1] << 8); - len = c[2] | (c[3] << 8); - - /* Check status */ - if((status & RX_RCV_OK) != RX_RCV_OK) - { - dev->stats.rx_errors++; - if(status & RX_NO_SFD) - dev->stats.rx_frame_errors++; - if(status & RX_CRC_ERR) - dev->stats.rx_crc_errors++; - if(status & RX_OVRRUN) - dev->stats.rx_over_errors++; - -#ifdef DEBUG_RX_FAIL - printk(KERN_DEBUG "%s: wv_packet_rcv(): packet not received ok, status = 0x%x\n", - dev->name, status); -#endif - } - else - /* Read the packet and transmit to Linux */ - wv_packet_read(dev, f_start, len - 2); - - /* One frame has been processed, skip it */ - lp->rfp = rp; - } - - /* - * Update the frame stop register, but set it to less than - * the full 8K to allow space for 3 bytes of signal strength - * per packet. - */ - lp->stop = (i593_rfp + RX_SIZE - ((RX_SIZE / 64) * 3)) % RX_SIZE; - outb(OP0_SWIT_TO_PORT_1 | CR0_CHNL, LCCR(base)); - outb(CR1_STOP_REG_UPDATE | (lp->stop >> RX_SIZE_SHIFT), LCCR(base)); - outb(OP1_SWIT_TO_PORT_0, LCCR(base)); - -#ifdef DEBUG_RX_TRACE - printk(KERN_DEBUG "%s: <-wv_packet_rcv()\n", dev->name); -#endif -} - -/*********************** PACKET TRANSMISSION ***********************/ -/* - * This part deal with sending packet through the wavelan - * We copy the packet to the send buffer and then issue the send - * command to the i82593. The result of this operation will be - * checked in wavelan_interrupt() - */ - -/*------------------------------------------------------------------*/ -/* - * This routine fills in the appropriate registers and memory - * locations on the WaveLAN card and starts the card off on - * the transmit. - * (called in wavelan_packet_xmit()) - */ -static void -wv_packet_write(struct net_device * dev, - void * buf, - short length) -{ - net_local * lp = netdev_priv(dev); - unsigned int base = dev->base_addr; - unsigned long flags; - int clen = length; - register u_short xmtdata_base = TX_BASE; - -#ifdef DEBUG_TX_TRACE - printk(KERN_DEBUG "%s: ->wv_packet_write(%d)\n", dev->name, length); -#endif - - spin_lock_irqsave(&lp->spinlock, flags); - - /* Write the length of data buffer followed by the buffer */ - outb(xmtdata_base & 0xff, PIORL(base)); - outb(((xmtdata_base >> 8) & PIORH_MASK) | PIORH_SEL_TX, PIORH(base)); - outb(clen & 0xff, PIOP(base)); /* lsb */ - outb(clen >> 8, PIOP(base)); /* msb */ - - /* Send the data */ - outsb(PIOP(base), buf, clen); - - /* Indicate end of transmit chain */ - outb(OP0_NOP, PIOP(base)); - /* josullvn@cs.cmu.edu: need to send a second NOP for alignment... */ - outb(OP0_NOP, PIOP(base)); - - /* Reset the transmit DMA pointer */ - hacr_write_slow(base, HACR_PWR_STAT | HACR_TX_DMA_RESET); - hacr_write(base, HACR_DEFAULT); - /* Send the transmit command */ - wv_82593_cmd(dev, "wv_packet_write(): transmit", - OP0_TRANSMIT, SR0_NO_RESULT); - - /* Make sure the watchdog will keep quiet for a while */ - dev->trans_start = jiffies; - - /* Keep stats up to date */ - dev->stats.tx_bytes += length; - - spin_unlock_irqrestore(&lp->spinlock, flags); - -#ifdef DEBUG_TX_INFO - wv_packet_info((u_char *) buf, length, dev->name, "wv_packet_write"); -#endif /* DEBUG_TX_INFO */ - -#ifdef DEBUG_TX_TRACE - printk(KERN_DEBUG "%s: <-wv_packet_write()\n", dev->name); -#endif -} - -/*------------------------------------------------------------------*/ -/* - * This routine is called when we want to send a packet (NET3 callback) - * In this routine, we check if the harware is ready to accept - * the packet. We also prevent reentrance. Then, we call the function - * to send the packet... - */ -static netdev_tx_t -wavelan_packet_xmit(struct sk_buff * skb, - struct net_device * dev) -{ - net_local * lp = netdev_priv(dev); - unsigned long flags; - -#ifdef DEBUG_TX_TRACE - printk(KERN_DEBUG "%s: ->wavelan_packet_xmit(0x%X)\n", dev->name, - (unsigned) skb); -#endif - - /* - * Block a timer-based transmit from overlapping a previous transmit. - * In other words, prevent reentering this routine. - */ - netif_stop_queue(dev); - - /* If somebody has asked to reconfigure the controller, - * we can do it now */ - if(lp->reconfig_82593) - { - spin_lock_irqsave(&lp->spinlock, flags); /* Disable interrupts */ - wv_82593_config(dev); - spin_unlock_irqrestore(&lp->spinlock, flags); /* Re-enable interrupts */ - /* Note : the configure procedure was totally synchronous, - * so the Tx buffer is now free */ - } - - /* Check if we need some padding */ - /* Note : on wireless the propagation time is in the order of 1us, - * and we don't have the Ethernet specific requirement of beeing - * able to detect collisions, therefore in theory we don't really - * need to pad. Jean II */ - if (skb_padto(skb, ETH_ZLEN)) - return NETDEV_TX_OK; - - wv_packet_write(dev, skb->data, skb->len); - - dev_kfree_skb(skb); - -#ifdef DEBUG_TX_TRACE - printk(KERN_DEBUG "%s: <-wavelan_packet_xmit()\n", dev->name); -#endif - return NETDEV_TX_OK; -} - -/********************** HARDWARE CONFIGURATION **********************/ -/* - * This part do the real job of starting and configuring the hardware. - */ - -/*------------------------------------------------------------------*/ -/* - * Routine to initialize the Modem Management Controller. - * (called by wv_hw_config()) - */ -static int -wv_mmc_init(struct net_device * dev) -{ - unsigned int base = dev->base_addr; - psa_t psa; - mmw_t m; - int configured; - int i; /* Loop counter */ - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_mmc_init()\n", dev->name); -#endif - - /* Read the parameter storage area */ - psa_read(dev, 0, (unsigned char *) &psa, sizeof(psa)); - - /* - * Check the first three octets of the MAC addr for the manufacturer's code. - * Note: If you get the error message below, you've got a - * non-NCR/AT&T/Lucent PCMCIA cards, see wavelan_cs.h for detail on - * how to configure your card... - */ - for (i = 0; i < ARRAY_SIZE(MAC_ADDRESSES); i++) - if ((psa.psa_univ_mac_addr[0] == MAC_ADDRESSES[i][0]) && - (psa.psa_univ_mac_addr[1] == MAC_ADDRESSES[i][1]) && - (psa.psa_univ_mac_addr[2] == MAC_ADDRESSES[i][2])) - break; - - /* If we have not found it... */ - if (i == ARRAY_SIZE(MAC_ADDRESSES)) - { -#ifdef DEBUG_CONFIG_ERRORS - printk(KERN_WARNING "%s: wv_mmc_init(): Invalid MAC address: %02X:%02X:%02X:...\n", - dev->name, psa.psa_univ_mac_addr[0], - psa.psa_univ_mac_addr[1], psa.psa_univ_mac_addr[2]); -#endif - return FALSE; - } - - /* Get the MAC address */ - memcpy(&dev->dev_addr[0], &psa.psa_univ_mac_addr[0], WAVELAN_ADDR_SIZE); - -#ifdef USE_PSA_CONFIG - configured = psa.psa_conf_status & 1; -#else - configured = 0; -#endif - - /* Is the PSA is not configured */ - if(!configured) - { - /* User will be able to configure NWID after (with iwconfig) */ - psa.psa_nwid[0] = 0; - psa.psa_nwid[1] = 0; - - /* As NWID is not set : no NWID checking */ - psa.psa_nwid_select = 0; - - /* Disable encryption */ - psa.psa_encryption_select = 0; - - /* Set to standard values - * 0x04 for AT, - * 0x01 for MCA, - * 0x04 for PCMCIA and 2.00 card (AT&T 407-024689/E document) - */ - if (psa.psa_comp_number & 1) - psa.psa_thr_pre_set = 0x01; - else - psa.psa_thr_pre_set = 0x04; - psa.psa_quality_thr = 0x03; - - /* It is configured */ - psa.psa_conf_status |= 1; - -#ifdef USE_PSA_CONFIG - /* Write the psa */ - psa_write(dev, (char *)psa.psa_nwid - (char *)&psa, - (unsigned char *)psa.psa_nwid, 4); - psa_write(dev, (char *)&psa.psa_thr_pre_set - (char *)&psa, - (unsigned char *)&psa.psa_thr_pre_set, 1); - psa_write(dev, (char *)&psa.psa_quality_thr - (char *)&psa, - (unsigned char *)&psa.psa_quality_thr, 1); - psa_write(dev, (char *)&psa.psa_conf_status - (char *)&psa, - (unsigned char *)&psa.psa_conf_status, 1); - /* update the Wavelan checksum */ - update_psa_checksum(dev); -#endif /* USE_PSA_CONFIG */ - } - - /* Zero the mmc structure */ - memset(&m, 0x00, sizeof(m)); - - /* Copy PSA info to the mmc */ - m.mmw_netw_id_l = psa.psa_nwid[1]; - m.mmw_netw_id_h = psa.psa_nwid[0]; - - if(psa.psa_nwid_select & 1) - m.mmw_loopt_sel = 0x00; - else - m.mmw_loopt_sel = MMW_LOOPT_SEL_DIS_NWID; - - memcpy(&m.mmw_encr_key, &psa.psa_encryption_key, - sizeof(m.mmw_encr_key)); - - if(psa.psa_encryption_select) - m.mmw_encr_enable = MMW_ENCR_ENABLE_EN | MMW_ENCR_ENABLE_MODE; - else - m.mmw_encr_enable = 0; - - m.mmw_thr_pre_set = psa.psa_thr_pre_set & 0x3F; - m.mmw_quality_thr = psa.psa_quality_thr & 0x0F; - - /* - * Set default modem control parameters. - * See NCR document 407-0024326 Rev. A. - */ - m.mmw_jabber_enable = 0x01; - m.mmw_anten_sel = MMW_ANTEN_SEL_ALG_EN; - m.mmw_ifs = 0x20; - m.mmw_mod_delay = 0x04; - m.mmw_jam_time = 0x38; - - m.mmw_des_io_invert = 0; - m.mmw_freeze = 0; - m.mmw_decay_prm = 0; - m.mmw_decay_updat_prm = 0; - - /* Write all info to mmc */ - mmc_write(base, 0, (u_char *)&m, sizeof(m)); - - /* The following code start the modem of the 2.00 frequency - * selectable cards at power on. It's not strictly needed for the - * following boots... - * The original patch was by Joe Finney for the PCMCIA driver, but - * I've cleaned it a bit and add documentation. - * Thanks to Loeke Brederveld from Lucent for the info. - */ - - /* Attempt to recognise 2.00 cards (2.4 GHz frequency selectable) - * (does it work for everybody ? - especially old cards...) */ - /* Note : WFREQSEL verify that it is able to read from EEprom - * a sensible frequency (address 0x00) + that MMR_FEE_STATUS_ID - * is 0xA (Xilinx version) or 0xB (Ariadne version). - * My test is more crude but do work... */ - if(!(mmc_in(base, mmroff(0, mmr_fee_status)) & - (MMR_FEE_STATUS_DWLD | MMR_FEE_STATUS_BUSY))) - { - /* We must download the frequency parameters to the - * synthetisers (from the EEprom - area 1) - * Note : as the EEprom is auto decremented, we set the end - * if the area... */ - m.mmw_fee_addr = 0x0F; - m.mmw_fee_ctrl = MMW_FEE_CTRL_READ | MMW_FEE_CTRL_DWLD; - mmc_write(base, (char *)&m.mmw_fee_ctrl - (char *)&m, - (unsigned char *)&m.mmw_fee_ctrl, 2); - - /* Wait until the download is finished */ - fee_wait(base, 100, 100); - -#ifdef DEBUG_CONFIG_INFO - /* The frequency was in the last word downloaded... */ - mmc_read(base, (char *)&m.mmw_fee_data_l - (char *)&m, - (unsigned char *)&m.mmw_fee_data_l, 2); - - /* Print some info for the user */ - printk(KERN_DEBUG "%s: Wavelan 2.00 recognised (frequency select) : Current frequency = %ld\n", - dev->name, - ((m.mmw_fee_data_h << 4) | - (m.mmw_fee_data_l >> 4)) * 5 / 2 + 24000L); -#endif - - /* We must now download the power adjust value (gain) to - * the synthetisers (from the EEprom - area 7 - DAC) */ - m.mmw_fee_addr = 0x61; - m.mmw_fee_ctrl = MMW_FEE_CTRL_READ | MMW_FEE_CTRL_DWLD; - mmc_write(base, (char *)&m.mmw_fee_ctrl - (char *)&m, - (unsigned char *)&m.mmw_fee_ctrl, 2); - - /* Wait until the download is finished */ - } /* if 2.00 card */ - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_mmc_init()\n", dev->name); -#endif - return TRUE; -} - -/*------------------------------------------------------------------*/ -/* - * Routine to gracefully turn off reception, and wait for any commands - * to complete. - * (called in wv_ru_start() and wavelan_close() and wavelan_event()) - */ -static int -wv_ru_stop(struct net_device * dev) -{ - unsigned int base = dev->base_addr; - net_local * lp = netdev_priv(dev); - unsigned long flags; - int status; - int spin; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_ru_stop()\n", dev->name); -#endif - - spin_lock_irqsave(&lp->spinlock, flags); - - /* First, send the LAN controller a stop receive command */ - wv_82593_cmd(dev, "wv_graceful_shutdown(): stop-rcv", - OP0_STOP_RCV, SR0_NO_RESULT); - - /* Then, spin until the receive unit goes idle */ - spin = 300; - do - { - udelay(10); - outb(OP0_NOP | CR0_STATUS_3, LCCR(base)); - status = inb(LCSR(base)); - } - while(((status & SR3_RCV_STATE_MASK) != SR3_RCV_IDLE) && (spin-- > 0)); - - /* Now, spin until the chip finishes executing its current command */ - do - { - udelay(10); - outb(OP0_NOP | CR0_STATUS_3, LCCR(base)); - status = inb(LCSR(base)); - } - while(((status & SR3_EXEC_STATE_MASK) != SR3_EXEC_IDLE) && (spin-- > 0)); - - spin_unlock_irqrestore(&lp->spinlock, flags); - - /* If there was a problem */ - if(spin <= 0) - { -#ifdef DEBUG_CONFIG_ERRORS - printk(KERN_INFO "%s: wv_ru_stop(): The chip doesn't want to stop...\n", - dev->name); -#endif - return FALSE; - } - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_ru_stop()\n", dev->name); -#endif - return TRUE; -} /* wv_ru_stop */ - -/*------------------------------------------------------------------*/ -/* - * This routine starts the receive unit running. First, it checks if - * the card is actually ready. Then the card is instructed to receive - * packets again. - * (called in wv_hw_reset() & wavelan_open()) - */ -static int -wv_ru_start(struct net_device * dev) -{ - unsigned int base = dev->base_addr; - net_local * lp = netdev_priv(dev); - unsigned long flags; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_ru_start()\n", dev->name); -#endif - - /* - * We need to start from a quiescent state. To do so, we could check - * if the card is already running, but instead we just try to shut - * it down. First, we disable reception (in case it was already enabled). - */ - if(!wv_ru_stop(dev)) - return FALSE; - - spin_lock_irqsave(&lp->spinlock, flags); - - /* Now we know that no command is being executed. */ - - /* Set the receive frame pointer and stop pointer */ - lp->rfp = 0; - outb(OP0_SWIT_TO_PORT_1 | CR0_CHNL, LCCR(base)); - - /* Reset ring management. This sets the receive frame pointer to 1 */ - outb(OP1_RESET_RING_MNGMT, LCCR(base)); - -#if 0 - /* XXX the i82593 manual page 6-4 seems to indicate that the stop register - should be set as below */ - /* outb(CR1_STOP_REG_UPDATE|((RX_SIZE - 0x40)>> RX_SIZE_SHIFT),LCCR(base));*/ -#elif 0 - /* but I set it 0 instead */ - lp->stop = 0; -#else - /* but I set it to 3 bytes per packet less than 8K */ - lp->stop = (0 + RX_SIZE - ((RX_SIZE / 64) * 3)) % RX_SIZE; -#endif - outb(CR1_STOP_REG_UPDATE | (lp->stop >> RX_SIZE_SHIFT), LCCR(base)); - outb(OP1_INT_ENABLE, LCCR(base)); - outb(OP1_SWIT_TO_PORT_0, LCCR(base)); - - /* Reset receive DMA pointer */ - hacr_write_slow(base, HACR_PWR_STAT | HACR_TX_DMA_RESET); - hacr_write_slow(base, HACR_DEFAULT); - - /* Receive DMA on channel 1 */ - wv_82593_cmd(dev, "wv_ru_start(): rcv-enable", - CR0_CHNL | OP0_RCV_ENABLE, SR0_NO_RESULT); - -#ifdef DEBUG_I82593_SHOW - { - int status; - int opri; - int spin = 10000; - - /* spin until the chip starts receiving */ - do - { - outb(OP0_NOP | CR0_STATUS_3, LCCR(base)); - status = inb(LCSR(base)); - if(spin-- <= 0) - break; - } - while(((status & SR3_RCV_STATE_MASK) != SR3_RCV_ACTIVE) && - ((status & SR3_RCV_STATE_MASK) != SR3_RCV_READY)); - printk(KERN_DEBUG "rcv status is 0x%x [i:%d]\n", - (status & SR3_RCV_STATE_MASK), i); - } -#endif - - spin_unlock_irqrestore(&lp->spinlock, flags); - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_ru_start()\n", dev->name); -#endif - return TRUE; -} - -/*------------------------------------------------------------------*/ -/* - * This routine does a standard config of the WaveLAN controller (i82593). - * In the ISA driver, this is integrated in wavelan_hardware_reset() - * (called by wv_hw_config(), wv_82593_reconfig() & wavelan_packet_xmit()) - */ -static int -wv_82593_config(struct net_device * dev) -{ - unsigned int base = dev->base_addr; - net_local * lp = netdev_priv(dev); - struct i82593_conf_block cfblk; - int ret = TRUE; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_82593_config()\n", dev->name); -#endif - - /* Create & fill i82593 config block - * - * Now conform to Wavelan document WCIN085B - */ - memset(&cfblk, 0x00, sizeof(struct i82593_conf_block)); - cfblk.d6mod = FALSE; /* Run in i82593 advanced mode */ - cfblk.fifo_limit = 5; /* = 56 B rx and 40 B tx fifo thresholds */ - cfblk.forgnesi = FALSE; /* 0=82C501, 1=AMD7992B compatibility */ - cfblk.fifo_32 = 1; - cfblk.throttle_enb = FALSE; - cfblk.contin = TRUE; /* enable continuous mode */ - cfblk.cntrxint = FALSE; /* enable continuous mode receive interrupts */ - cfblk.addr_len = WAVELAN_ADDR_SIZE; - cfblk.acloc = TRUE; /* Disable source addr insertion by i82593 */ - cfblk.preamb_len = 0; /* 2 bytes preamble (SFD) */ - cfblk.loopback = FALSE; - cfblk.lin_prio = 0; /* conform to 802.3 backoff algorithm */ - cfblk.exp_prio = 5; /* conform to 802.3 backoff algorithm */ - cfblk.bof_met = 1; /* conform to 802.3 backoff algorithm */ - cfblk.ifrm_spc = 0x20 >> 4; /* 32 bit times interframe spacing */ - cfblk.slottim_low = 0x20 >> 5; /* 32 bit times slot time */ - cfblk.slottim_hi = 0x0; - cfblk.max_retr = 15; - cfblk.prmisc = ((lp->promiscuous) ? TRUE: FALSE); /* Promiscuous mode */ - cfblk.bc_dis = FALSE; /* Enable broadcast reception */ - cfblk.crs_1 = TRUE; /* Transmit without carrier sense */ - cfblk.nocrc_ins = FALSE; /* i82593 generates CRC */ - cfblk.crc_1632 = FALSE; /* 32-bit Autodin-II CRC */ - cfblk.crs_cdt = FALSE; /* CD not to be interpreted as CS */ - cfblk.cs_filter = 0; /* CS is recognized immediately */ - cfblk.crs_src = FALSE; /* External carrier sense */ - cfblk.cd_filter = 0; /* CD is recognized immediately */ - cfblk.min_fr_len = ETH_ZLEN >> 2; /* Minimum frame length 64 bytes */ - cfblk.lng_typ = FALSE; /* Length field > 1500 = type field */ - cfblk.lng_fld = TRUE; /* Disable 802.3 length field check */ - cfblk.rxcrc_xf = TRUE; /* Don't transfer CRC to memory */ - cfblk.artx = TRUE; /* Disable automatic retransmission */ - cfblk.sarec = TRUE; /* Disable source addr trig of CD */ - cfblk.tx_jabber = TRUE; /* Disable jabber jam sequence */ - cfblk.hash_1 = FALSE; /* Use bits 0-5 in mc address hash */ - cfblk.lbpkpol = TRUE; /* Loopback pin active high */ - cfblk.fdx = FALSE; /* Disable full duplex operation */ - cfblk.dummy_6 = 0x3f; /* all ones */ - cfblk.mult_ia = FALSE; /* No multiple individual addresses */ - cfblk.dis_bof = FALSE; /* Disable the backoff algorithm ?! */ - cfblk.dummy_1 = TRUE; /* set to 1 */ - cfblk.tx_ifs_retrig = 3; /* Hmm... Disabled */ -#ifdef MULTICAST_ALL - cfblk.mc_all = (lp->allmulticast ? TRUE: FALSE); /* Allow all multicasts */ -#else - cfblk.mc_all = FALSE; /* No multicast all mode */ -#endif - cfblk.rcv_mon = 0; /* Monitor mode disabled */ - cfblk.frag_acpt = TRUE; /* Do not accept fragments */ - cfblk.tstrttrs = FALSE; /* No start transmission threshold */ - cfblk.fretx = TRUE; /* FIFO automatic retransmission */ - cfblk.syncrqs = FALSE; /* Synchronous DRQ deassertion... */ - cfblk.sttlen = TRUE; /* 6 byte status registers */ - cfblk.rx_eop = TRUE; /* Signal EOP on packet reception */ - cfblk.tx_eop = TRUE; /* Signal EOP on packet transmission */ - cfblk.rbuf_size = RX_SIZE>>11; /* Set receive buffer size */ - cfblk.rcvstop = TRUE; /* Enable Receive Stop Register */ - -#ifdef DEBUG_I82593_SHOW - print_hex_dump(KERN_DEBUG, "wavelan_cs: config block: ", DUMP_PREFIX_NONE, - 16, 1, &cfblk, sizeof(struct i82593_conf_block), false); -#endif - - /* Copy the config block to the i82593 */ - outb(TX_BASE & 0xff, PIORL(base)); - outb(((TX_BASE >> 8) & PIORH_MASK) | PIORH_SEL_TX, PIORH(base)); - outb(sizeof(struct i82593_conf_block) & 0xff, PIOP(base)); /* lsb */ - outb(sizeof(struct i82593_conf_block) >> 8, PIOP(base)); /* msb */ - outsb(PIOP(base), (char *) &cfblk, sizeof(struct i82593_conf_block)); - - /* reset transmit DMA pointer */ - hacr_write_slow(base, HACR_PWR_STAT | HACR_TX_DMA_RESET); - hacr_write(base, HACR_DEFAULT); - if(!wv_82593_cmd(dev, "wv_82593_config(): configure", - OP0_CONFIGURE, SR0_CONFIGURE_DONE)) - ret = FALSE; - - /* Initialize adapter's ethernet MAC address */ - outb(TX_BASE & 0xff, PIORL(base)); - outb(((TX_BASE >> 8) & PIORH_MASK) | PIORH_SEL_TX, PIORH(base)); - outb(WAVELAN_ADDR_SIZE, PIOP(base)); /* byte count lsb */ - outb(0, PIOP(base)); /* byte count msb */ - outsb(PIOP(base), &dev->dev_addr[0], WAVELAN_ADDR_SIZE); - - /* reset transmit DMA pointer */ - hacr_write_slow(base, HACR_PWR_STAT | HACR_TX_DMA_RESET); - hacr_write(base, HACR_DEFAULT); - if(!wv_82593_cmd(dev, "wv_82593_config(): ia-setup", - OP0_IA_SETUP, SR0_IA_SETUP_DONE)) - ret = FALSE; - -#ifdef WAVELAN_ROAMING - /* If roaming is enabled, join the "Beacon Request" multicast group... */ - /* But only if it's not in there already! */ - if(do_roaming) - dev_mc_add(dev,WAVELAN_BEACON_ADDRESS, WAVELAN_ADDR_SIZE, 1); -#endif /* WAVELAN_ROAMING */ - - /* If any multicast address to set */ - if(lp->mc_count) - { - struct dev_mc_list *dmi; - int addrs_len = WAVELAN_ADDR_SIZE * lp->mc_count; - -#ifdef DEBUG_CONFIG_INFO - printk(KERN_DEBUG "%s: wv_hw_config(): set %d multicast addresses:\n", - dev->name, lp->mc_count); - netdev_for_each_mc_addr(dmi, dev) - printk(KERN_DEBUG " %pM\n", dmi->dmi_addr); -#endif - - /* Initialize adapter's ethernet multicast addresses */ - outb(TX_BASE & 0xff, PIORL(base)); - outb(((TX_BASE >> 8) & PIORH_MASK) | PIORH_SEL_TX, PIORH(base)); - outb(addrs_len & 0xff, PIOP(base)); /* byte count lsb */ - outb((addrs_len >> 8), PIOP(base)); /* byte count msb */ - netdev_for_each_mc_addr(dmi, dev) - outsb(PIOP(base), dmi->dmi_addr, dmi->dmi_addrlen); - - /* reset transmit DMA pointer */ - hacr_write_slow(base, HACR_PWR_STAT | HACR_TX_DMA_RESET); - hacr_write(base, HACR_DEFAULT); - if(!wv_82593_cmd(dev, "wv_82593_config(): mc-setup", - OP0_MC_SETUP, SR0_MC_SETUP_DONE)) - ret = FALSE; - /* remember to avoid repeated reset */ - lp->mc_count = netdev_mc_count(dev); - } - - /* Job done, clear the flag */ - lp->reconfig_82593 = FALSE; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_82593_config()\n", dev->name); -#endif - return(ret); -} - -/*------------------------------------------------------------------*/ -/* - * Read the Access Configuration Register, perform a software reset, - * and then re-enable the card's software. - * - * If I understand correctly : reset the pcmcia interface of the - * wavelan. - * (called by wv_config()) - */ -static int -wv_pcmcia_reset(struct net_device * dev) -{ - int i; - conf_reg_t reg = { 0, CS_READ, CISREG_COR, 0 }; - struct pcmcia_device * link = ((net_local *)netdev_priv(dev))->link; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_pcmcia_reset()\n", dev->name); -#endif - - i = pcmcia_access_configuration_register(link, ®); - if (i != 0) - return FALSE; - -#ifdef DEBUG_CONFIG_INFO - printk(KERN_DEBUG "%s: wavelan_pcmcia_reset(): Config reg is 0x%x\n", - dev->name, (u_int) reg.Value); -#endif - - reg.Action = CS_WRITE; - reg.Value = reg.Value | COR_SW_RESET; - i = pcmcia_access_configuration_register(link, ®); - if (i != 0) - return FALSE; - - reg.Action = CS_WRITE; - reg.Value = COR_LEVEL_IRQ | COR_CONFIG; - i = pcmcia_access_configuration_register(link, ®); - if (i != 0) - return FALSE; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_pcmcia_reset()\n", dev->name); -#endif - return TRUE; -} - -/*------------------------------------------------------------------*/ -/* - * wavelan_hw_config() is called after a CARD_INSERTION event is - * received, to configure the wavelan hardware. - * Note that the reception will be enabled in wavelan->open(), so the - * device is configured but idle... - * Performs the following actions: - * 1. A pcmcia software reset (using wv_pcmcia_reset()) - * 2. A power reset (reset DMA) - * 3. Reset the LAN controller - * 4. Initialize the radio modem (using wv_mmc_init) - * 5. Configure LAN controller (using wv_82593_config) - * 6. Perform a diagnostic on the LAN controller - * (called by wavelan_event() & wv_hw_reset()) - */ -static int -wv_hw_config(struct net_device * dev) -{ - net_local * lp = netdev_priv(dev); - unsigned int base = dev->base_addr; - unsigned long flags; - int ret = FALSE; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_hw_config()\n", dev->name); -#endif - - /* compile-time check the sizes of structures */ - BUILD_BUG_ON(sizeof(psa_t) != PSA_SIZE); - BUILD_BUG_ON(sizeof(mmw_t) != MMW_SIZE); - BUILD_BUG_ON(sizeof(mmr_t) != MMR_SIZE); - - /* Reset the pcmcia interface */ - if(wv_pcmcia_reset(dev) == FALSE) - return FALSE; - - /* Disable interrupts */ - spin_lock_irqsave(&lp->spinlock, flags); - - /* Disguised goto ;-) */ - do - { - /* Power UP the module + reset the modem + reset host adapter - * (in fact, reset DMA channels) */ - hacr_write_slow(base, HACR_RESET); - hacr_write(base, HACR_DEFAULT); - - /* Check if the module has been powered up... */ - if(hasr_read(base) & HASR_NO_CLK) - { -#ifdef DEBUG_CONFIG_ERRORS - printk(KERN_WARNING "%s: wv_hw_config(): modem not connected or not a wavelan card\n", - dev->name); -#endif - break; - } - - /* initialize the modem */ - if(wv_mmc_init(dev) == FALSE) - { -#ifdef DEBUG_CONFIG_ERRORS - printk(KERN_WARNING "%s: wv_hw_config(): Can't configure the modem\n", - dev->name); -#endif - break; - } - - /* reset the LAN controller (i82593) */ - outb(OP0_RESET, LCCR(base)); - mdelay(1); /* A bit crude ! */ - - /* Initialize the LAN controller */ - if(wv_82593_config(dev) == FALSE) - { -#ifdef DEBUG_CONFIG_ERRORS - printk(KERN_INFO "%s: wv_hw_config(): i82593 init failed\n", - dev->name); -#endif - break; - } - - /* Diagnostic */ - if(wv_diag(dev) == FALSE) - { -#ifdef DEBUG_CONFIG_ERRORS - printk(KERN_INFO "%s: wv_hw_config(): i82593 diagnostic failed\n", - dev->name); -#endif - break; - } - - /* - * insert code for loopback test here - */ - - /* The device is now configured */ - lp->configured = 1; - ret = TRUE; - } - while(0); - - /* Re-enable interrupts */ - spin_unlock_irqrestore(&lp->spinlock, flags); - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_hw_config()\n", dev->name); -#endif - return(ret); -} - -/*------------------------------------------------------------------*/ -/* - * Totally reset the wavelan and restart it. - * Performs the following actions: - * 1. Call wv_hw_config() - * 2. Start the LAN controller's receive unit - * (called by wavelan_event(), wavelan_watchdog() and wavelan_open()) - */ -static void -wv_hw_reset(struct net_device * dev) -{ - net_local * lp = netdev_priv(dev); - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: ->wv_hw_reset()\n", dev->name); -#endif - - lp->nresets++; - lp->configured = 0; - - /* Call wv_hw_config() for most of the reset & init stuff */ - if(wv_hw_config(dev) == FALSE) - return; - - /* start receive unit */ - wv_ru_start(dev); - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <-wv_hw_reset()\n", dev->name); -#endif -} - -/*------------------------------------------------------------------*/ -/* - * wv_pcmcia_config() is called after a CARD_INSERTION event is - * received, to configure the PCMCIA socket, and to make the ethernet - * device available to the system. - * (called by wavelan_event()) - */ -static int -wv_pcmcia_config(struct pcmcia_device * link) -{ - struct net_device * dev = (struct net_device *) link->priv; - int i; - win_req_t req; - memreq_t mem; - net_local * lp = netdev_priv(dev); - - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "->wv_pcmcia_config(0x%p)\n", link); -#endif - - do - { - i = pcmcia_request_io(link, &link->io); - if (i != 0) - break; - - /* - * Now allocate an interrupt line. Note that this does not - * actually assign a handler to the interrupt. - */ - i = pcmcia_request_irq(link, &link->irq); - if (i != 0) - break; - - /* - * This actually configures the PCMCIA socket -- setting up - * the I/O windows and the interrupt mapping. - */ - link->conf.ConfigIndex = 1; - i = pcmcia_request_configuration(link, &link->conf); - if (i != 0) - break; - - /* - * Allocate a small memory window. Note that the struct pcmcia_device - * structure provides space for one window handle -- if your - * device needs several windows, you'll need to keep track of - * the handles in your private data structure, link->priv. - */ - req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_AM|WIN_ENABLE; - req.Base = req.Size = 0; - req.AccessSpeed = mem_speed; - i = pcmcia_request_window(link, &req, &link->win); - if (i != 0) - break; - - lp->mem = ioremap(req.Base, req.Size); - dev->mem_start = (u_long)lp->mem; - dev->mem_end = dev->mem_start + req.Size; - - mem.CardOffset = 0; mem.Page = 0; - i = pcmcia_map_mem_page(link, link->win, &mem); - if (i != 0) - break; - - /* Feed device with this info... */ - dev->irq = link->irq.AssignedIRQ; - dev->base_addr = link->io.BasePort1; - netif_start_queue(dev); - -#ifdef DEBUG_CONFIG_INFO - printk(KERN_DEBUG "wv_pcmcia_config: MEMSTART %p IRQ %d IOPORT 0x%x\n", - lp->mem, dev->irq, (u_int) dev->base_addr); -#endif - - SET_NETDEV_DEV(dev, &link->dev); - i = register_netdev(dev); - if(i != 0) - { -#ifdef DEBUG_CONFIG_ERRORS - printk(KERN_INFO "wv_pcmcia_config(): register_netdev() failed\n"); -#endif - break; - } - } - while(0); /* Humm... Disguised goto !!! */ - - /* If any step failed, release any partially configured state */ - if(i != 0) - { - wv_pcmcia_release(link); - return FALSE; - } - - strcpy(((net_local *) netdev_priv(dev))->node.dev_name, dev->name); - link->dev_node = &((net_local *) netdev_priv(dev))->node; - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "<-wv_pcmcia_config()\n"); -#endif - return TRUE; -} - -/*------------------------------------------------------------------*/ -/* - * After a card is removed, wv_pcmcia_release() will unregister the net - * device, and release the PCMCIA configuration. If the device is - * still open, this will be postponed until it is closed. - */ -static void -wv_pcmcia_release(struct pcmcia_device *link) -{ - struct net_device * dev = (struct net_device *) link->priv; - net_local * lp = netdev_priv(dev); - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: -> wv_pcmcia_release(0x%p)\n", dev->name, link); -#endif - - iounmap(lp->mem); - pcmcia_disable_device(link); - -#ifdef DEBUG_CONFIG_TRACE - printk(KERN_DEBUG "%s: <- wv_pcmcia_release()\n", dev->name); -#endif -} - -/************************ INTERRUPT HANDLING ************************/ - -/* - * This function is the interrupt handler for the WaveLAN card. This - * routine will be called whenever: - * 1. A packet is received. - * 2. A packet has successfully been transferred and the unit is - * ready to transmit another packet. - * 3. A command has completed execution. - */ -static irqreturn_t -wavelan_interrupt(int irq, - void * dev_id) -{ - struct net_device * dev = dev_id; - net_local * lp; - unsigned int base; - int status0; - u_int tx_status; - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: ->wavelan_interrupt()\n", dev->name); -#endif - - lp = netdev_priv(dev); - base = dev->base_addr; - -#ifdef DEBUG_INTERRUPT_INFO - /* Check state of our spinlock (it should be cleared) */ - if(spin_is_locked(&lp->spinlock)) - printk(KERN_DEBUG - "%s: wavelan_interrupt(): spinlock is already locked !!!\n", - dev->name); -#endif - - /* Prevent reentrancy. We need to do that because we may have - * multiple interrupt handler running concurrently. - * It is safe because interrupts are disabled before aquiring - * the spinlock. */ - spin_lock(&lp->spinlock); - - /* Treat all pending interrupts */ - while(1) - { - /* ---------------- INTERRUPT CHECKING ---------------- */ - /* - * Look for the interrupt and verify the validity - */ - outb(CR0_STATUS_0 | OP0_NOP, LCCR(base)); - status0 = inb(LCSR(base)); - -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_DEBUG "status0 0x%x [%s => 0x%x]", status0, - (status0&SR0_INTERRUPT)?"int":"no int",status0&~SR0_INTERRUPT); - if(status0&SR0_INTERRUPT) - { - printk(" [%s => %d]\n", (status0 & SR0_CHNL) ? "chnl" : - ((status0 & SR0_EXECUTION) ? "cmd" : - ((status0 & SR0_RECEPTION) ? "recv" : "unknown")), - (status0 & SR0_EVENT_MASK)); - } - else - printk("\n"); -#endif - - /* Return if no actual interrupt from i82593 (normal exit) */ - if(!(status0 & SR0_INTERRUPT)) - break; - - /* If interrupt is both Rx and Tx or none... - * This code in fact is there to catch the spurious interrupt - * when you remove the wavelan pcmcia card from the socket */ - if(((status0 & SR0_BOTH_RX_TX) == SR0_BOTH_RX_TX) || - ((status0 & SR0_BOTH_RX_TX) == 0x0)) - { -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_INFO "%s: wv_interrupt(): bogus interrupt (or from dead card) : %X\n", - dev->name, status0); -#endif - /* Acknowledge the interrupt */ - outb(CR0_INT_ACK | OP0_NOP, LCCR(base)); - break; - } - - /* ----------------- RECEIVING PACKET ----------------- */ - /* - * When the wavelan signal the reception of a new packet, - * we call wv_packet_rcv() to copy if from the buffer and - * send it to NET3 - */ - if(status0 & SR0_RECEPTION) - { -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_DEBUG "%s: wv_interrupt(): receive\n", dev->name); -#endif - - if((status0 & SR0_EVENT_MASK) == SR0_STOP_REG_HIT) - { -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "%s: wv_interrupt(): receive buffer overflow\n", - dev->name); -#endif - dev->stats.rx_over_errors++; - lp->overrunning = 1; - } - - /* Get the packet */ - wv_packet_rcv(dev); - lp->overrunning = 0; - - /* Acknowledge the interrupt */ - outb(CR0_INT_ACK | OP0_NOP, LCCR(base)); - continue; - } - - /* ---------------- COMMAND COMPLETION ---------------- */ - /* - * Interrupts issued when the i82593 has completed a command. - * Most likely : transmission done - */ - - /* If a transmission has been done */ - if((status0 & SR0_EVENT_MASK) == SR0_TRANSMIT_DONE || - (status0 & SR0_EVENT_MASK) == SR0_RETRANSMIT_DONE || - (status0 & SR0_EVENT_MASK) == SR0_TRANSMIT_NO_CRC_DONE) - { -#ifdef DEBUG_TX_ERROR - if((status0 & SR0_EVENT_MASK) == SR0_TRANSMIT_NO_CRC_DONE) - printk(KERN_INFO "%s: wv_interrupt(): packet transmitted without CRC.\n", - dev->name); -#endif - - /* Get transmission status */ - tx_status = inb(LCSR(base)); - tx_status |= (inb(LCSR(base)) << 8); -#ifdef DEBUG_INTERRUPT_INFO - printk(KERN_DEBUG "%s: wv_interrupt(): transmission done\n", - dev->name); - { - u_int rcv_bytes; - u_char status3; - rcv_bytes = inb(LCSR(base)); - rcv_bytes |= (inb(LCSR(base)) << 8); - status3 = inb(LCSR(base)); - printk(KERN_DEBUG "tx_status 0x%02x rcv_bytes 0x%02x status3 0x%x\n", - tx_status, rcv_bytes, (u_int) status3); - } -#endif - /* Check for possible errors */ - if((tx_status & TX_OK) != TX_OK) - { - dev->stats.tx_errors++; - - if(tx_status & TX_FRTL) - { -#ifdef DEBUG_TX_ERROR - printk(KERN_INFO "%s: wv_interrupt(): frame too long\n", - dev->name); -#endif - } - if(tx_status & TX_UND_RUN) - { -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG "%s: wv_interrupt(): DMA underrun\n", - dev->name); -#endif - dev->stats.tx_aborted_errors++; - } - if(tx_status & TX_LOST_CTS) - { -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG "%s: wv_interrupt(): no CTS\n", dev->name); -#endif - dev->stats.tx_carrier_errors++; - } - if(tx_status & TX_LOST_CRS) - { -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG "%s: wv_interrupt(): no carrier\n", - dev->name); -#endif - dev->stats.tx_carrier_errors++; - } - if(tx_status & TX_HRT_BEAT) - { -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG "%s: wv_interrupt(): heart beat\n", dev->name); -#endif - dev->stats.tx_heartbeat_errors++; - } - if(tx_status & TX_DEFER) - { -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG "%s: wv_interrupt(): channel jammed\n", - dev->name); -#endif - } - /* Ignore late collisions since they're more likely to happen - * here (the WaveLAN design prevents the LAN controller from - * receiving while it is transmitting). We take action only when - * the maximum retransmit attempts is exceeded. - */ - if(tx_status & TX_COLL) - { - if(tx_status & TX_MAX_COL) - { -#ifdef DEBUG_TX_FAIL - printk(KERN_DEBUG "%s: wv_interrupt(): channel congestion\n", - dev->name); -#endif - if(!(tx_status & TX_NCOL_MASK)) - { - dev->stats.collisions += 0x10; - } - } - } - } /* if(!(tx_status & TX_OK)) */ - - dev->stats.collisions += (tx_status & TX_NCOL_MASK); - dev->stats.tx_packets++; - - netif_wake_queue(dev); - outb(CR0_INT_ACK | OP0_NOP, LCCR(base)); /* Acknowledge the interrupt */ - } - else /* if interrupt = transmit done or retransmit done */ - { -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "wavelan_cs: unknown interrupt, status0 = %02x\n", - status0); -#endif - outb(CR0_INT_ACK | OP0_NOP, LCCR(base)); /* Acknowledge the interrupt */ - } - } /* while(1) */ - - spin_unlock(&lp->spinlock); - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: <-wavelan_interrupt()\n", dev->name); -#endif - - /* We always return IRQ_HANDLED, because we will receive empty - * interrupts under normal operations. Anyway, it doesn't matter - * as we are dealing with an ISA interrupt that can't be shared. - * - * Explanation : under heavy receive, the following happens : - * ->wavelan_interrupt() - * (status0 & SR0_INTERRUPT) != 0 - * ->wv_packet_rcv() - * (status0 & SR0_INTERRUPT) != 0 - * ->wv_packet_rcv() - * (status0 & SR0_INTERRUPT) == 0 // i.e. no more event - * <-wavelan_interrupt() - * ->wavelan_interrupt() - * (status0 & SR0_INTERRUPT) == 0 // i.e. empty interrupt - * <-wavelan_interrupt() - * Jean II */ - return IRQ_HANDLED; -} /* wv_interrupt */ - -/*------------------------------------------------------------------*/ -/* - * Watchdog: when we start a transmission, a timer is set for us in the - * kernel. If the transmission completes, this timer is disabled. If - * the timer expires, we are called and we try to unlock the hardware. - * - * Note : This watchdog is move clever than the one in the ISA driver, - * because it try to abort the current command before reseting - * everything... - * On the other hand, it's a bit simpler, because we don't have to - * deal with the multiple Tx buffers... - */ -static void -wavelan_watchdog(struct net_device * dev) -{ - net_local * lp = netdev_priv(dev); - unsigned int base = dev->base_addr; - unsigned long flags; - int aborted = FALSE; - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: ->wavelan_watchdog()\n", dev->name); -#endif - -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "%s: wavelan_watchdog: watchdog timer expired\n", - dev->name); -#endif - - spin_lock_irqsave(&lp->spinlock, flags); - - /* Ask to abort the current command */ - outb(OP0_ABORT, LCCR(base)); - - /* Wait for the end of the command (a bit hackish) */ - if(wv_82593_cmd(dev, "wavelan_watchdog(): abort", - OP0_NOP | CR0_STATUS_3, SR0_EXECUTION_ABORTED)) - aborted = TRUE; - - /* Release spinlock here so that wv_hw_reset() can grab it */ - spin_unlock_irqrestore(&lp->spinlock, flags); - - /* Check if we were successful in aborting it */ - if(!aborted) - { - /* It seem that it wasn't enough */ -#ifdef DEBUG_INTERRUPT_ERROR - printk(KERN_INFO "%s: wavelan_watchdog: abort failed, trying reset\n", - dev->name); -#endif - wv_hw_reset(dev); - } - -#ifdef DEBUG_PSA_SHOW - { - psa_t psa; - psa_read(dev, 0, (unsigned char *) &psa, sizeof(psa)); - wv_psa_show(&psa); - } -#endif -#ifdef DEBUG_MMC_SHOW - wv_mmc_show(dev); -#endif -#ifdef DEBUG_I82593_SHOW - wv_ru_show(dev); -#endif - - /* We are no more waiting for something... */ - netif_wake_queue(dev); - -#ifdef DEBUG_INTERRUPT_TRACE - printk(KERN_DEBUG "%s: <-wavelan_watchdog()\n", dev->name); -#endif -} - -/********************* CONFIGURATION CALLBACKS *********************/ -/* - * Here are the functions called by the pcmcia package (cardmgr) and - * linux networking (NET3) for initialization, configuration and - * deinstallations of the Wavelan Pcmcia Hardware. - */ - -/*------------------------------------------------------------------*/ -/* - * Configure and start up the WaveLAN PCMCIA adaptor. - * Called by NET3 when it "open" the device. - */ -static int -wavelan_open(struct net_device * dev) -{ - net_local * lp = netdev_priv(dev); - struct pcmcia_device * link = lp->link; - unsigned int base = dev->base_addr; - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: ->wavelan_open(dev=0x%x)\n", dev->name, - (unsigned int) dev); -#endif - - /* Check if the modem is powered up (wavelan_close() power it down */ - if(hasr_read(base) & HASR_NO_CLK) - { - /* Power up (power up time is 250us) */ - hacr_write(base, HACR_DEFAULT); - - /* Check if the module has been powered up... */ - if(hasr_read(base) & HASR_NO_CLK) - { -#ifdef DEBUG_CONFIG_ERRORS - printk(KERN_WARNING "%s: wavelan_open(): modem not connected\n", - dev->name); -#endif - return FALSE; - } - } - - /* Start reception and declare the driver ready */ - if(!lp->configured) - return FALSE; - if(!wv_ru_start(dev)) - wv_hw_reset(dev); /* If problem : reset */ - netif_start_queue(dev); - - /* Mark the device as used */ - link->open++; - -#ifdef WAVELAN_ROAMING - if(do_roaming) - wv_roam_init(dev); -#endif /* WAVELAN_ROAMING */ - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: <-wavelan_open()\n", dev->name); -#endif - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * Shutdown the WaveLAN PCMCIA adaptor. - * Called by NET3 when it "close" the device. - */ -static int -wavelan_close(struct net_device * dev) -{ - struct pcmcia_device * link = ((net_local *)netdev_priv(dev))->link; - unsigned int base = dev->base_addr; - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: ->wavelan_close(dev=0x%x)\n", dev->name, - (unsigned int) dev); -#endif - - /* If the device isn't open, then nothing to do */ - if(!link->open) - { -#ifdef DEBUG_CONFIG_INFO - printk(KERN_DEBUG "%s: wavelan_close(): device not open\n", dev->name); -#endif - return 0; - } - -#ifdef WAVELAN_ROAMING - /* Cleanup of roaming stuff... */ - if(do_roaming) - wv_roam_cleanup(dev); -#endif /* WAVELAN_ROAMING */ - - link->open--; - - /* If the card is still present */ - if(netif_running(dev)) - { - netif_stop_queue(dev); - - /* Stop receiving new messages and wait end of transmission */ - wv_ru_stop(dev); - - /* Power down the module */ - hacr_write(base, HACR_DEFAULT & (~HACR_PWR_STAT)); - } - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "%s: <-wavelan_close()\n", dev->name); -#endif - return 0; -} - -static const struct net_device_ops wavelan_netdev_ops = { - .ndo_open = wavelan_open, - .ndo_stop = wavelan_close, - .ndo_start_xmit = wavelan_packet_xmit, - .ndo_set_multicast_list = wavelan_set_multicast_list, -#ifdef SET_MAC_ADDRESS - .ndo_set_mac_address = wavelan_set_mac_address, -#endif - .ndo_tx_timeout = wavelan_watchdog, - .ndo_change_mtu = eth_change_mtu, - .ndo_validate_addr = eth_validate_addr, -}; - -/*------------------------------------------------------------------*/ -/* - * wavelan_attach() creates an "instance" of the driver, allocating - * local data structures for one device (one interface). The device - * is registered with Card Services. - * - * The dev_link structure is initialized, but we don't actually - * configure the card at this point -- we wait until we receive a - * card insertion event. - */ -static int -wavelan_probe(struct pcmcia_device *p_dev) -{ - struct net_device * dev; /* Interface generic data */ - net_local * lp; /* Interface specific data */ - int ret; - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "-> wavelan_attach()\n"); -#endif - - /* The io structure describes IO port mapping */ - p_dev->io.NumPorts1 = 8; - p_dev->io.Attributes1 = IO_DATA_PATH_WIDTH_8; - p_dev->io.IOAddrLines = 3; - - /* Interrupt setup */ - p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; - p_dev->irq.Handler = wavelan_interrupt; - - /* General socket configuration */ - p_dev->conf.Attributes = CONF_ENABLE_IRQ; - p_dev->conf.IntType = INT_MEMORY_AND_IO; - - /* Allocate the generic data structure */ - dev = alloc_etherdev(sizeof(net_local)); - if (!dev) - return -ENOMEM; - - p_dev->priv = dev; - - lp = netdev_priv(dev); - - /* Init specific data */ - lp->configured = 0; - lp->reconfig_82593 = FALSE; - lp->nresets = 0; - /* Multicast stuff */ - lp->promiscuous = 0; - lp->allmulticast = 0; - lp->mc_count = 0; - - /* Init spinlock */ - spin_lock_init(&lp->spinlock); - - /* back links */ - lp->dev = dev; - - /* wavelan NET3 callbacks */ - dev->netdev_ops = &wavelan_netdev_ops; - dev->watchdog_timeo = WATCHDOG_JIFFIES; - SET_ETHTOOL_OPS(dev, &ops); - - dev->wireless_handlers = &wavelan_handler_def; - lp->wireless_data.spy_data = &lp->spy_data; - dev->wireless_data = &lp->wireless_data; - - /* Other specific data */ - dev->mtu = WAVELAN_MTU; - - ret = wv_pcmcia_config(p_dev); - if (ret) - return ret; - - ret = wv_hw_config(dev); - if (ret) { - dev->irq = 0; - pcmcia_disable_device(p_dev); - return ret; - } - - wv_init_info(dev); - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "<- wavelan_attach()\n"); -#endif - - return 0; -} - -/*------------------------------------------------------------------*/ -/* - * This deletes a driver "instance". The device is de-registered with - * Card Services. If it has been released, all local data structures - * are freed. Otherwise, the structures will be freed when the device - * is released. - */ -static void -wavelan_detach(struct pcmcia_device *link) -{ -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "-> wavelan_detach(0x%p)\n", link); -#endif - - /* Some others haven't done their job : give them another chance */ - wv_pcmcia_release(link); - - /* Free pieces */ - if(link->priv) - { - struct net_device * dev = (struct net_device *) link->priv; - - /* Remove ourselves from the kernel list of ethernet devices */ - /* Warning : can't be called from interrupt, timer or wavelan_close() */ - if (link->dev_node) - unregister_netdev(dev); - link->dev_node = NULL; - ((net_local *)netdev_priv(dev))->link = NULL; - ((net_local *)netdev_priv(dev))->dev = NULL; - free_netdev(dev); - } - -#ifdef DEBUG_CALLBACK_TRACE - printk(KERN_DEBUG "<- wavelan_detach()\n"); -#endif -} - -static int wavelan_suspend(struct pcmcia_device *link) -{ - struct net_device * dev = (struct net_device *) link->priv; - - /* NB: wavelan_close will be called, but too late, so we are - * obliged to close nicely the wavelan here. David, could you - * close the device before suspending them ? And, by the way, - * could you, on resume, add a "route add -net ..." after the - * ifconfig up ? Thanks... */ - - /* Stop receiving new messages and wait end of transmission */ - wv_ru_stop(dev); - - if (link->open) - netif_device_detach(dev); - - /* Power down the module */ - hacr_write(dev->base_addr, HACR_DEFAULT & (~HACR_PWR_STAT)); - - return 0; -} - -static int wavelan_resume(struct pcmcia_device *link) -{ - struct net_device * dev = (struct net_device *) link->priv; - - if (link->open) { - wv_hw_reset(dev); - netif_device_attach(dev); - } - - return 0; -} - - -static struct pcmcia_device_id wavelan_ids[] = { - PCMCIA_DEVICE_PROD_ID12("AT&T","WaveLAN/PCMCIA", 0xe7c5affd, 0x1bc50975), - PCMCIA_DEVICE_PROD_ID12("Digital", "RoamAbout/DS", 0x9999ab35, 0x00d05e06), - PCMCIA_DEVICE_PROD_ID12("Lucent Technologies", "WaveLAN/PCMCIA", 0x23eb9949, 0x1bc50975), - PCMCIA_DEVICE_PROD_ID12("NCR", "WaveLAN/PCMCIA", 0x24358cd4, 0x1bc50975), - PCMCIA_DEVICE_NULL, -}; -MODULE_DEVICE_TABLE(pcmcia, wavelan_ids); - -static struct pcmcia_driver wavelan_driver = { - .owner = THIS_MODULE, - .drv = { - .name = "wavelan_cs", - }, - .probe = wavelan_probe, - .remove = wavelan_detach, - .id_table = wavelan_ids, - .suspend = wavelan_suspend, - .resume = wavelan_resume, -}; - -static int __init -init_wavelan_cs(void) -{ - return pcmcia_register_driver(&wavelan_driver); -} - -static void __exit -exit_wavelan_cs(void) -{ - pcmcia_unregister_driver(&wavelan_driver); -} - -module_init(init_wavelan_cs); -module_exit(exit_wavelan_cs); diff --git a/drivers/staging/wavelan/wavelan_cs.h b/drivers/staging/wavelan/wavelan_cs.h deleted file mode 100644 index 42e268d..0000000 --- a/drivers/staging/wavelan/wavelan_cs.h +++ /dev/null @@ -1,381 +0,0 @@ -/* - * Wavelan Pcmcia driver - * - * Jean II - HPLB '96 - * - * Reorganization and extension of the driver. - * Original copyright follow. See wavelan_cs.h for details. - * - * This file contain the declarations of the Wavelan hardware. Note that - * the Pcmcia Wavelan include a i82593 controller (see definitions in - * file i82593.h). - * - * The main difference between the pcmcia hardware and the ISA one is - * the Ethernet Controller (i82593 instead of i82586). The i82593 allow - * only one send buffer. The PSA (Parameter Storage Area : EEprom for - * permanent storage of various info) is memory mapped, but not the - * MMI (Modem Management Interface). - */ - -/* - * Definitions for the AT&T GIS (formerly NCR) WaveLAN PCMCIA card: - * An Ethernet-like radio transceiver controlled by an Intel 82593 - * coprocessor. - * - * - **************************************************************************** - * Copyright 1995 - * Anthony D. Joseph - * Massachusetts Institute of Technology - * - * Permission to use, copy, modify, and distribute this program - * for any purpose and without fee is hereby granted, provided - * that this copyright and permission notice appear on all copies - * and supporting documentation, the name of M.I.T. not be used - * in advertising or publicity pertaining to distribution of the - * program without specific prior permission, and notice be given - * in supporting documentation that copying and distribution is - * by permission of M.I.T. M.I.T. makes no representations about - * the suitability of this software for any purpose. It is pro- - * vided "as is" without express or implied warranty. - **************************************************************************** - * - * - * Credits: - * Special thanks to Jan Hoogendoorn of AT&T GIS Utrecht for - * providing extremely useful information about WaveLAN PCMCIA hardware - * - * This driver is based upon several other drivers, in particular: - * David Hinds' Linux driver for the PCMCIA 3c589 ethernet adapter - * Bruce Janson's Linux driver for the AT-bus WaveLAN adapter - * Anders Klemets' PCMCIA WaveLAN adapter driver - * Robert Morris' BSDI driver for the PCMCIA WaveLAN adapter - */ - -#ifndef _WAVELAN_CS_H -#define _WAVELAN_CS_H - -/************************** MAGIC NUMBERS ***************************/ - -/* The detection of the wavelan card is made by reading the MAC address - * from the card and checking it. If you have a non AT&T product (OEM, - * like DEC RoamAbout, or Digital Ocean, Epson, ...), you must modify this - * part to accommodate your hardware... - */ -static const unsigned char MAC_ADDRESSES[][3] = { - { 0x08, 0x00, 0x0E }, /* AT&T Wavelan (standard) & DEC RoamAbout */ - { 0x08, 0x00, 0x6A }, /* AT&T Wavelan (alternate) */ - { 0x00, 0x00, 0xE1 }, /* Hitachi Wavelan */ - { 0x00, 0x60, 0x1D } /* Lucent Wavelan (another one) */ - /* Add your card here and send me the patch ! */ -}; - -/* - * Constants used to convert channels to frequencies - */ - -/* Frequency available in the 2.0 modem, in units of 250 kHz - * (as read in the offset register of the dac area). - * Used to map channel numbers used by `wfreqsel' to frequencies - */ -static const short channel_bands[] = { 0x30, 0x58, 0x64, 0x7A, 0x80, 0xA8, - 0xD0, 0xF0, 0xF8, 0x150 }; - -/* Frequencies of the 1.0 modem (fixed frequencies). - * Use to map the PSA `subband' to a frequency - * Note : all frequencies apart from the first one need to be multiplied by 10 - */ -static const int fixed_bands[] = { 915e6, 2.425e8, 2.46e8, 2.484e8, 2.4305e8 }; - - -/*************************** PC INTERFACE ****************************/ - -/* WaveLAN host interface definitions */ - -#define LCCR(base) (base) /* LAN Controller Command Register */ -#define LCSR(base) (base) /* LAN Controller Status Register */ -#define HACR(base) (base+0x1) /* Host Adapter Command Register */ -#define HASR(base) (base+0x1) /* Host Adapter Status Register */ -#define PIORL(base) (base+0x2) /* Program I/O Register Low */ -#define RPLL(base) (base+0x2) /* Receive Pointer Latched Low */ -#define PIORH(base) (base+0x3) /* Program I/O Register High */ -#define RPLH(base) (base+0x3) /* Receive Pointer Latched High */ -#define PIOP(base) (base+0x4) /* Program I/O Port */ -#define MMR(base) (base+0x6) /* MMI Address Register */ -#define MMD(base) (base+0x7) /* MMI Data Register */ - -/* Host Adaptor Command Register bit definitions */ - -#define HACR_LOF (1 << 3) /* Lock Out Flag, toggle every 250ms */ -#define HACR_PWR_STAT (1 << 4) /* Power State, 1=active, 0=sleep */ -#define HACR_TX_DMA_RESET (1 << 5) /* Reset transmit DMA ptr on high */ -#define HACR_RX_DMA_RESET (1 << 6) /* Reset receive DMA ptr on high */ -#define HACR_ROM_WEN (1 << 7) /* EEPROM write enabled when true */ - -#define HACR_RESET (HACR_TX_DMA_RESET | HACR_RX_DMA_RESET) -#define HACR_DEFAULT (HACR_PWR_STAT) - -/* Host Adapter Status Register bit definitions */ - -#define HASR_MMI_BUSY (1 << 2) /* MMI is busy when true */ -#define HASR_LOF (1 << 3) /* Lock out flag status */ -#define HASR_NO_CLK (1 << 4) /* active when modem not connected */ - -/* Miscellaneous bit definitions */ - -#define PIORH_SEL_TX (1 << 5) /* PIOR points to 0=rx/1=tx buffer */ -#define MMR_MMI_WR (1 << 0) /* Next MMI cycle is 0=read, 1=write */ -#define PIORH_MASK 0x1f /* only low 5 bits are significant */ -#define RPLH_MASK 0x1f /* only low 5 bits are significant */ -#define MMI_ADDR_MASK 0x7e /* Bits 1-6 of MMR are significant */ - -/* Attribute Memory map */ - -#define CIS_ADDR 0x0000 /* Card Information Status Register */ -#define PSA_ADDR 0x0e00 /* Parameter Storage Area address */ -#define EEPROM_ADDR 0x1000 /* EEPROM address (unused ?) */ -#define COR_ADDR 0x4000 /* Configuration Option Register */ - -/* Configuration Option Register bit definitions */ - -#define COR_CONFIG (1 << 0) /* Config Index, 0 when unconfigured */ -#define COR_SW_RESET (1 << 7) /* Software Reset on true */ -#define COR_LEVEL_IRQ (1 << 6) /* Level IRQ */ - -/* Local Memory map */ - -#define RX_BASE 0x0000 /* Receive memory, 8 kB */ -#define TX_BASE 0x2000 /* Transmit memory, 2 kB */ -#define UNUSED_BASE 0x2800 /* Unused, 22 kB */ -#define RX_SIZE (TX_BASE-RX_BASE) /* Size of receive area */ -#define RX_SIZE_SHIFT 6 /* Bits to shift in stop register */ - -#define TRUE 1 -#define FALSE 0 - -#define MOD_ENAL 1 -#define MOD_PROM 2 - -/* Size of a MAC address */ -#define WAVELAN_ADDR_SIZE 6 - -/* Maximum size of Wavelan packet */ -#define WAVELAN_MTU 1500 - -#define MAXDATAZ (6 + 6 + 2 + WAVELAN_MTU) - -/********************** PARAMETER STORAGE AREA **********************/ - -/* - * Parameter Storage Area (PSA). - */ -typedef struct psa_t psa_t; -struct psa_t { - /* For the PCMCIA Adapter, locations 0x00-0x0F are unused and fixed at 00 */ - unsigned char psa_io_base_addr_1; /* [0x00] Base address 1 ??? */ - unsigned char psa_io_base_addr_2; /* [0x01] Base address 2 */ - unsigned char psa_io_base_addr_3; /* [0x02] Base address 3 */ - unsigned char psa_io_base_addr_4; /* [0x03] Base address 4 */ - unsigned char psa_rem_boot_addr_1; /* [0x04] Remote Boot Address 1 */ - unsigned char psa_rem_boot_addr_2; /* [0x05] Remote Boot Address 2 */ - unsigned char psa_rem_boot_addr_3; /* [0x06] Remote Boot Address 3 */ - unsigned char psa_holi_params; /* [0x07] HOst Lan Interface (HOLI) Parameters */ - unsigned char psa_int_req_no; /* [0x08] Interrupt Request Line */ - unsigned char psa_unused0[7]; /* [0x09-0x0F] unused */ - - unsigned char psa_univ_mac_addr[WAVELAN_ADDR_SIZE]; /* [0x10-0x15] Universal (factory) MAC Address */ - unsigned char psa_local_mac_addr[WAVELAN_ADDR_SIZE]; /* [0x16-1B] Local MAC Address */ - unsigned char psa_univ_local_sel; /* [0x1C] Universal Local Selection */ -#define PSA_UNIVERSAL 0 /* Universal (factory) */ -#define PSA_LOCAL 1 /* Local */ - unsigned char psa_comp_number; /* [0x1D] Compatability Number: */ -#define PSA_COMP_PC_AT_915 0 /* PC-AT 915 MHz */ -#define PSA_COMP_PC_MC_915 1 /* PC-MC 915 MHz */ -#define PSA_COMP_PC_AT_2400 2 /* PC-AT 2.4 GHz */ -#define PSA_COMP_PC_MC_2400 3 /* PC-MC 2.4 GHz */ -#define PSA_COMP_PCMCIA_915 4 /* PCMCIA 915 MHz or 2.0 */ - unsigned char psa_thr_pre_set; /* [0x1E] Modem Threshold Preset */ - unsigned char psa_feature_select; /* [0x1F] Call code required (1=on) */ -#define PSA_FEATURE_CALL_CODE 0x01 /* Call code required (Japan) */ - unsigned char psa_subband; /* [0x20] Subband */ -#define PSA_SUBBAND_915 0 /* 915 MHz or 2.0 */ -#define PSA_SUBBAND_2425 1 /* 2425 MHz */ -#define PSA_SUBBAND_2460 2 /* 2460 MHz */ -#define PSA_SUBBAND_2484 3 /* 2484 MHz */ -#define PSA_SUBBAND_2430_5 4 /* 2430.5 MHz */ - unsigned char psa_quality_thr; /* [0x21] Modem Quality Threshold */ - unsigned char psa_mod_delay; /* [0x22] Modem Delay ??? (reserved) */ - unsigned char psa_nwid[2]; /* [0x23-0x24] Network ID */ - unsigned char psa_nwid_select; /* [0x25] Network ID Select On Off */ - unsigned char psa_encryption_select; /* [0x26] Encryption On Off */ - unsigned char psa_encryption_key[8]; /* [0x27-0x2E] Encryption Key */ - unsigned char psa_databus_width; /* [0x2F] AT bus width select 8/16 */ - unsigned char psa_call_code[8]; /* [0x30-0x37] (Japan) Call Code */ - unsigned char psa_nwid_prefix[2]; /* [0x38-0x39] Roaming domain */ - unsigned char psa_reserved[2]; /* [0x3A-0x3B] Reserved - fixed 00 */ - unsigned char psa_conf_status; /* [0x3C] Conf Status, bit 0=1:config*/ - unsigned char psa_crc[2]; /* [0x3D] CRC-16 over PSA */ - unsigned char psa_crc_status; /* [0x3F] CRC Valid Flag */ -}; - -/* Size for structure checking (if padding is correct) */ -#define PSA_SIZE 64 - -/* Calculate offset of a field in the above structure - * Warning : only even addresses are used */ -#define psaoff(p, f) ((unsigned short) ((void *)(&((psa_t *) ((void *) NULL + (p)))->f) - (void *) NULL)) - -/******************** MODEM MANAGEMENT INTERFACE ********************/ - -/* - * Modem Management Controller (MMC) write structure. - */ -typedef struct mmw_t mmw_t; -struct mmw_t { - unsigned char mmw_encr_key[8]; /* encryption key */ - unsigned char mmw_encr_enable; /* enable/disable encryption */ -#define MMW_ENCR_ENABLE_MODE 0x02 /* Mode of security option */ -#define MMW_ENCR_ENABLE_EN 0x01 /* Enable security option */ - unsigned char mmw_unused0[1]; /* unused */ - unsigned char mmw_des_io_invert; /* Encryption option */ -#define MMW_DES_IO_INVERT_RES 0x0F /* Reserved */ -#define MMW_DES_IO_INVERT_CTRL 0xF0 /* Control ??? (set to 0) */ - unsigned char mmw_unused1[5]; /* unused */ - unsigned char mmw_loopt_sel; /* looptest selection */ -#define MMW_LOOPT_SEL_DIS_NWID 0x40 /* disable NWID filtering */ -#define MMW_LOOPT_SEL_INT 0x20 /* activate Attention Request */ -#define MMW_LOOPT_SEL_LS 0x10 /* looptest w/o collision avoidance */ -#define MMW_LOOPT_SEL_LT3A 0x08 /* looptest 3a */ -#define MMW_LOOPT_SEL_LT3B 0x04 /* looptest 3b */ -#define MMW_LOOPT_SEL_LT3C 0x02 /* looptest 3c */ -#define MMW_LOOPT_SEL_LT3D 0x01 /* looptest 3d */ - unsigned char mmw_jabber_enable; /* jabber timer enable */ - /* Abort transmissions > 200 ms */ - unsigned char mmw_freeze; /* freeze / unfreeeze signal level */ - /* 0 : signal level & qual updated for every new message, 1 : frozen */ - unsigned char mmw_anten_sel; /* antenna selection */ -#define MMW_ANTEN_SEL_SEL 0x01 /* direct antenna selection */ -#define MMW_ANTEN_SEL_ALG_EN 0x02 /* antenna selection algo. enable */ - unsigned char mmw_ifs; /* inter frame spacing */ - /* min time between transmission in bit periods (.5 us) - bit 0 ignored */ - unsigned char mmw_mod_delay; /* modem delay (synchro) */ - unsigned char mmw_jam_time; /* jamming time (after collision) */ - unsigned char mmw_unused2[1]; /* unused */ - unsigned char mmw_thr_pre_set; /* level threshold preset */ - /* Discard all packet with signal < this value (4) */ - unsigned char mmw_decay_prm; /* decay parameters */ - unsigned char mmw_decay_updat_prm; /* decay update parameterz */ - unsigned char mmw_quality_thr; /* quality (z-quotient) threshold */ - /* Discard all packet with quality < this value (3) */ - unsigned char mmw_netw_id_l; /* NWID low order byte */ - unsigned char mmw_netw_id_h; /* NWID high order byte */ - /* Network ID or Domain : create virtual net on the air */ - - /* 2.0 Hardware extension - frequency selection support */ - unsigned char mmw_mode_select; /* for analog tests (set to 0) */ - unsigned char mmw_unused3[1]; /* unused */ - unsigned char mmw_fee_ctrl; /* frequency eeprom control */ -#define MMW_FEE_CTRL_PRE 0x10 /* Enable protected instructions */ -#define MMW_FEE_CTRL_DWLD 0x08 /* Download eeprom to mmc */ -#define MMW_FEE_CTRL_CMD 0x07 /* EEprom commands : */ -#define MMW_FEE_CTRL_READ 0x06 /* Read */ -#define MMW_FEE_CTRL_WREN 0x04 /* Write enable */ -#define MMW_FEE_CTRL_WRITE 0x05 /* Write data to address */ -#define MMW_FEE_CTRL_WRALL 0x04 /* Write data to all addresses */ -#define MMW_FEE_CTRL_WDS 0x04 /* Write disable */ -#define MMW_FEE_CTRL_PRREAD 0x16 /* Read addr from protect register */ -#define MMW_FEE_CTRL_PREN 0x14 /* Protect register enable */ -#define MMW_FEE_CTRL_PRCLEAR 0x17 /* Unprotect all registers */ -#define MMW_FEE_CTRL_PRWRITE 0x15 /* Write addr in protect register */ -#define MMW_FEE_CTRL_PRDS 0x14 /* Protect register disable */ - /* Never issue this command (PRDS) : it's irreversible !!! */ - - unsigned char mmw_fee_addr; /* EEprom address */ -#define MMW_FEE_ADDR_CHANNEL 0xF0 /* Select the channel */ -#define MMW_FEE_ADDR_OFFSET 0x0F /* Offset in channel data */ -#define MMW_FEE_ADDR_EN 0xC0 /* FEE_CTRL enable operations */ -#define MMW_FEE_ADDR_DS 0x00 /* FEE_CTRL disable operations */ -#define MMW_FEE_ADDR_ALL 0x40 /* FEE_CTRL all operations */ -#define MMW_FEE_ADDR_CLEAR 0xFF /* FEE_CTRL clear operations */ - - unsigned char mmw_fee_data_l; /* Write data to EEprom */ - unsigned char mmw_fee_data_h; /* high octet */ - unsigned char mmw_ext_ant; /* Setting for external antenna */ -#define MMW_EXT_ANT_EXTANT 0x01 /* Select external antenna */ -#define MMW_EXT_ANT_POL 0x02 /* Polarity of the antenna */ -#define MMW_EXT_ANT_INTERNAL 0x00 /* Internal antenna */ -#define MMW_EXT_ANT_EXTERNAL 0x03 /* External antenna */ -#define MMW_EXT_ANT_IQ_TEST 0x1C /* IQ test pattern (set to 0) */ -} __attribute__((packed)); - -/* Size for structure checking (if padding is correct) */ -#define MMW_SIZE 37 - -/* Calculate offset of a field in the above structure */ -#define mmwoff(p, f) (unsigned short)((void *)(&((mmw_t *)((void *)0 + (p)))->f) - (void *)0) - - -/* - * Modem Management Controller (MMC) read structure. - */ -typedef struct mmr_t mmr_t; -struct mmr_t { - unsigned char mmr_unused0[8]; /* unused */ - unsigned char mmr_des_status; /* encryption status */ - unsigned char mmr_des_avail; /* encryption available (0x55 read) */ -#define MMR_DES_AVAIL_DES 0x55 /* DES available */ -#define MMR_DES_AVAIL_AES 0x33 /* AES (AT&T) available */ - unsigned char mmr_des_io_invert; /* des I/O invert register */ - unsigned char mmr_unused1[5]; /* unused */ - unsigned char mmr_dce_status; /* DCE status */ -#define MMR_DCE_STATUS_RX_BUSY 0x01 /* receiver busy */ -#define MMR_DCE_STATUS_LOOPT_IND 0x02 /* loop test indicated */ -#define MMR_DCE_STATUS_TX_BUSY 0x04 /* transmitter on */ -#define MMR_DCE_STATUS_JBR_EXPIRED 0x08 /* jabber timer expired */ -#define MMR_DCE_STATUS 0x0F /* mask to get the bits */ - unsigned char mmr_dsp_id; /* DSP id (AA = Daedalus rev A) */ - unsigned char mmr_unused2[2]; /* unused */ - unsigned char mmr_correct_nwid_l; /* # of correct NWID's rxd (low) */ - unsigned char mmr_correct_nwid_h; /* # of correct NWID's rxd (high) */ - /* Warning : Read high order octet first !!! */ - unsigned char mmr_wrong_nwid_l; /* # of wrong NWID's rxd (low) */ - unsigned char mmr_wrong_nwid_h; /* # of wrong NWID's rxd (high) */ - unsigned char mmr_thr_pre_set; /* level threshold preset */ -#define MMR_THR_PRE_SET 0x3F /* level threshold preset */ -#define MMR_THR_PRE_SET_CUR 0x80 /* Current signal above it */ - unsigned char mmr_signal_lvl; /* signal level */ -#define MMR_SIGNAL_LVL 0x3F /* signal level */ -#define MMR_SIGNAL_LVL_VALID 0x80 /* Updated since last read */ - unsigned char mmr_silence_lvl; /* silence level (noise) */ -#define MMR_SILENCE_LVL 0x3F /* silence level */ -#define MMR_SILENCE_LVL_VALID 0x80 /* Updated since last read */ - unsigned char mmr_sgnl_qual; /* signal quality */ -#define MMR_SGNL_QUAL 0x0F /* signal quality */ -#define MMR_SGNL_QUAL_ANT 0x80 /* current antenna used */ - unsigned char mmr_netw_id_l; /* NWID low order byte ??? */ - unsigned char mmr_unused3[3]; /* unused */ - - /* 2.0 Hardware extension - frequency selection support */ - unsigned char mmr_fee_status; /* Status of frequency eeprom */ -#define MMR_FEE_STATUS_ID 0xF0 /* Modem revision id */ -#define MMR_FEE_STATUS_DWLD 0x08 /* Download in progress */ -#define MMR_FEE_STATUS_BUSY 0x04 /* EEprom busy */ - unsigned char mmr_unused4[1]; /* unused */ - unsigned char mmr_fee_data_l; /* Read data from eeprom (low) */ - unsigned char mmr_fee_data_h; /* Read data from eeprom (high) */ -}; - -/* Size for structure checking (if padding is correct) */ -#define MMR_SIZE 36 - -/* Calculate offset of a field in the above structure */ -#define mmroff(p, f) (unsigned short)((void *)(&((mmr_t *)((void *)0 + (p)))->f) - (void *)0) - - -/* Make the two above structures one */ -typedef union mm_t { - struct mmw_t w; /* Write to the mmc */ - struct mmr_t r; /* Read from the mmc */ -} mm_t; - -#endif /* _WAVELAN_CS_H */ diff --git a/drivers/staging/wavelan/wavelan_cs.p.h b/drivers/staging/wavelan/wavelan_cs.p.h deleted file mode 100644 index 7196267..0000000 --- a/drivers/staging/wavelan/wavelan_cs.p.h +++ /dev/null @@ -1,762 +0,0 @@ -/* - * Wavelan Pcmcia driver - * - * Jean II - HPLB '96 - * - * Reorganisation and extension of the driver. - * - * This file contain all definition and declarations necessary for the - * wavelan pcmcia driver. This file is a private header, so it should - * be included only on wavelan_cs.c !!! - */ - -#ifndef WAVELAN_CS_P_H -#define WAVELAN_CS_P_H - -/************************** DOCUMENTATION **************************/ -/* - * This driver provide a Linux interface to the Wavelan Pcmcia hardware - * The Wavelan is a product of Lucent (http://www.wavelan.com/). - * This division was formerly part of NCR and then AT&T. - * Wavelan are also distributed by DEC (RoamAbout DS)... - * - * To know how to use this driver, read the PCMCIA HOWTO. - * If you want to exploit the many other fonctionalities, look comments - * in the code... - * - * This driver is the result of the effort of many peoples (see below). - */ - -/* ------------------------ SPECIFIC NOTES ------------------------ */ -/* - * Web page - * -------- - * I try to maintain a web page with the Wireless LAN Howto at : - * http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html - * - * SMP - * --- - * We now are SMP compliant (I eventually fixed the remaining bugs). - * The driver has been tested on a dual P6-150 and survived my usual - * set of torture tests. - * Anyway, I spent enough time chasing interrupt re-entrancy during - * errors or reconfigure, and I designed the locked/unlocked sections - * of the driver with great care, and with the recent addition of - * the spinlock (thanks to the new API), we should be quite close to - * the truth. - * The SMP/IRQ locking is quite coarse and conservative (i.e. not fast), - * but better safe than sorry (especially at 2 Mb/s ;-). - * - * I have also looked into disabling only our interrupt on the card - * (via HACR) instead of all interrupts in the processor (via cli), - * so that other driver are not impacted, and it look like it's - * possible, but it's very tricky to do right (full of races). As - * the gain would be mostly for SMP systems, it can wait... - * - * Debugging and options - * --------------------- - * You will find below a set of '#define" allowing a very fine control - * on the driver behaviour and the debug messages printed. - * The main options are : - * o WAVELAN_ROAMING, for the experimental roaming support. - * o SET_PSA_CRC, to have your card correctly recognised by - * an access point and the Point-to-Point diagnostic tool. - * o USE_PSA_CONFIG, to read configuration from the PSA (EEprom) - * (otherwise we always start afresh with some defaults) - * - * wavelan_cs.o is darn too big - * ------------------------- - * That's true ! There is a very simple way to reduce the driver - * object by 33% (yes !). Comment out the following line : - * #include - * Other compile options can also reduce the size of it... - * - * MAC address and hardware detection : - * ---------------------------------- - * The detection code of the wavelan chech that the first 3 - * octets of the MAC address fit the company code. This type of - * detection work well for AT&T cards (because the AT&T code is - * hardcoded in wavelan_cs.h), but of course will fail for other - * manufacturer. - * - * If you are sure that your card is derived from the wavelan, - * here is the way to configure it : - * 1) Get your MAC address - * a) With your card utilities (wfreqsel, instconf, ...) - * b) With the driver : - * o compile the kernel with DEBUG_CONFIG_INFO enabled - * o Boot and look the card messages - * 2) Set your MAC code (3 octets) in MAC_ADDRESSES[][3] (wavelan_cs.h) - * 3) Compile & verify - * 4) Send me the MAC code - I will include it in the next version... - * - */ - -/* --------------------- WIRELESS EXTENSIONS --------------------- */ -/* - * This driver is the first one to support "wireless extensions". - * This set of extensions provide you some way to control the wireless - * caracteristics of the hardware in a standard way and support for - * applications for taking advantage of it (like Mobile IP). - * - * It might be a good idea as well to fetch the wireless tools to - * configure the device and play a bit. - */ - -/* ---------------------------- FILES ---------------------------- */ -/* - * wavelan_cs.c : The actual code for the driver - C functions - * - * wavelan_cs.p.h : Private header : local types / vars for the driver - * - * wavelan_cs.h : Description of the hardware interface & structs - * - * i82593.h : Description if the Ethernet controller - */ - -/* --------------------------- HISTORY --------------------------- */ -/* - * The history of the Wavelan drivers is as complicated as history of - * the Wavelan itself (NCR -> AT&T -> Lucent). - * - * All started with Anders Klemets , - * writing a Wavelan ISA driver for the MACH microkernel. Girish - * Welling had also worked on it. - * Keith Moore modify this for the Pcmcia hardware. - * - * Robert Morris port these two drivers to BSDI - * and add specific Pcmcia support (there is currently no equivalent - * of the PCMCIA package under BSD...). - * - * Jim Binkley port both BSDI drivers to FreeBSD. - * - * Bruce Janson port the BSDI ISA driver to Linux. - * - * Anthony D. Joseph started modify Bruce driver - * (with help of the BSDI PCMCIA driver) for PCMCIA. - * Yunzhou Li finished is work. - * Joe Finney patched the driver to start - * correctly 2.00 cards (2.4 GHz with frequency selection). - * David Hinds integrated the whole in his - * Pcmcia package (+ bug corrections). - * - * I (Jean Tourrilhes - jt@hplb.hpl.hp.com) then started to make some - * patchs to the Pcmcia driver. After, I added code in the ISA driver - * for Wireless Extensions and full support of frequency selection - * cards. Now, I'm doing the same to the Pcmcia driver + some - * reorganisation. - * Loeke Brederveld from Lucent has given me - * much needed informations on the Wavelan hardware. - */ - -/* By the way : for the copyright & legal stuff : - * Almost everybody wrote code under GNU or BSD license (or alike), - * and want that their original copyright remain somewhere in the - * code (for myself, I go with the GPL). - * Nobody want to take responsibility for anything, except the fame... - */ - -/* --------------------------- CREDITS --------------------------- */ -/* - * Credits: - * Special thanks to Jan Hoogendoorn of AT&T GIS Utrecht and - * Loeke Brederveld of Lucent for providing extremely useful - * information about WaveLAN PCMCIA hardware - * - * This driver is based upon several other drivers, in particular: - * David Hinds' Linux driver for the PCMCIA 3c589 ethernet adapter - * Bruce Janson's Linux driver for the AT-bus WaveLAN adapter - * Anders Klemets' PCMCIA WaveLAN adapter driver - * Robert Morris' BSDI driver for the PCMCIA WaveLAN adapter - * - * Additional Credits: - * - * This software was originally developed under Linux 1.2.3 - * (Slackware 2.0 distribution). - * And then under Linux 2.0.x (Debian 1.1 -> 2.2 - pcmcia 2.8.18+) - * with an HP OmniBook 4000 and then a 5500. - * - * It is based on other device drivers and information either written - * or supplied by: - * James Ashton (jaa101@syseng.anu.edu.au), - * Ajay Bakre (bakre@paul.rutgers.edu), - * Donald Becker (becker@super.org), - * Jim Binkley , - * Loeke Brederveld , - * Allan Creighton (allanc@cs.su.oz.au), - * Brent Elphick , - * Joe Finney , - * Matthew Geier (matthew@cs.su.oz.au), - * Remo di Giovanni (remo@cs.su.oz.au), - * Mark Hagan (mhagan@wtcpost.daytonoh.NCR.COM), - * David Hinds , - * Jan Hoogendoorn (c/o marteijn@lucent.com), - * Bruce Janson , - * Anthony D. Joseph , - * Anders Klemets (klemets@paul.rutgers.edu), - * Yunzhou Li , - * Marc Meertens (mmeertens@lucent.com), - * Keith Moore, - * Robert Morris (rtm@das.harvard.edu), - * Ian Parkin (ian@cs.su.oz.au), - * John Rosenberg (johnr@cs.su.oz.au), - * George Rossi (george@phm.gov.au), - * Arthur Scott (arthur@cs.su.oz.au), - * Stanislav Sinyagin - * Peter Storey, - * Jean Tourrilhes , - * Girish Welling (welling@paul.rutgers.edu) - * Clark Woodworth - * Yongguang Zhang ... - */ - -/* ------------------------- IMPROVEMENTS ------------------------- */ -/* - * I proudly present : - * - * Changes made in 2.8.22 : - * ---------------------- - * - improved wv_set_multicast_list - * - catch spurious interrupt - * - correct release of the device - * - * Changes mades in release : - * ------------------------ - * - Reorganisation of the code, function name change - * - Creation of private header (wavelan_cs.h) - * - Reorganised debug messages - * - More comments, history, ... - * - Configure earlier (in "insert" instead of "open") - * and do things only once - * - mmc_init : configure the PSA if not done - * - mmc_init : 2.00 detection better code for 2.00 init - * - better info at startup - * - Correct a HUGE bug (volatile & uncalibrated busy loop) - * in wv_82593_cmd => config speedup - * - Stop receiving & power down on close (and power up on open) - * use "ifconfig down" & "ifconfig up ; route add -net ..." - * - Send packets : add watchdog instead of pooling - * - Receive : check frame wrap around & try to recover some frames - * - wavelan_set_multicast_list : avoid reset - * - add wireless extensions (ioctl & get_wireless_stats) - * get/set nwid/frequency on fly, info for /proc/net/wireless - * - Suppress useless stuff from lp (net_local), but add link - * - More inlines - * - Lot of others minor details & cleanups - * - * Changes made in second release : - * ------------------------------ - * - Optimise wv_85893_reconfig stuff, fix potential problems - * - Change error values for ioctl - * - Non blocking wv_ru_stop() + call wv_reset() in case of problems - * - Remove development printk from wavelan_watchdog() - * - Remove of the watchdog to wavelan_close instead of wavelan_release - * fix potential problems... - * - Start debugging suspend stuff (but it's still a bit weird) - * - Debug & optimize dump header/packet in Rx & Tx (debug) - * - Use "readb" and "writeb" to be kernel 2.1 compliant - * - Better handling of bogus interrupts - * - Wireless extension : SETSPY and GETSPY - * - Remove old stuff (stats - for those needing it, just ask me...) - * - Make wireless extensions optional - * - * Changes made in third release : - * ----------------------------- - * - cleanups & typos - * - modif wireless ext (spy -> only one pointer) - * - new private ioctl to set/get quality & level threshold - * - Init : correct default value of level threshold for pcmcia - * - kill watchdog in hw_reset - * - more 2.1 support (copy_to/from_user instead of memcpy_to/fromfs) - * - Add message level (debug stuff in /var/adm/debug & errors not - * displayed at console and still in /var/adm/messages) - * - * Changes made in fourth release : - * ------------------------------ - * - multicast support (yes !) thanks to Yongguang Zhang. - * - * Changes made in fifth release (2.9.0) : - * ------------------------------------- - * - Revisited multicast code (it was mostly wrong). - * - protect code in wv_82593_reconfig with dev->tbusy (oups !) - * - * Changes made in sixth release (2.9.1a) : - * -------------------------------------- - * - Change the detection code for multi manufacturer code support - * - Correct bug (hang kernel) in init when we were "rejecting" a card - * - * Changes made in seventh release (2.9.1b) : - * ---------------------------------------- - * - Update to wireless extensions changes - * - Silly bug in card initial configuration (psa_conf_status) - * - * Changes made in eigth release : - * ----------------------------- - * - Small bug in debug code (probably not the last one...) - * - 1.2.13 support (thanks to Clark Woodworth) - * - * Changes made for release in 2.9.2b : - * ---------------------------------- - * - Level threshold is now a standard wireless extension (version 4 !) - * - modules parameters types for kernel > 2.1.17 - * - updated man page - * - Others cleanup from David Hinds - * - * Changes made for release in 2.9.5 : - * --------------------------------- - * - byte count stats (courtesy of David Hinds) - * - Remove dev_tint stuff (courtesy of David Hinds) - * - Others cleanup from David Hinds - * - Encryption setting from Brent Elphick (thanks a lot !) - * - 'base' to 'u_long' for the Alpha (thanks to Stanislav Sinyagin) - * - * Changes made for release in 2.9.6 : - * --------------------------------- - * - fix bug : no longuer disable watchdog in case of bogus interrupt - * - increase timeout in config code for picky hardware - * - mask unused bits in status (Wireless Extensions) - * - * Changes integrated by Justin Seger & David Hinds : - * ----------------------------------------------------------------- - * - Roaming "hack" from Joe Finney - * - PSA CRC code from Bob Gray - * - Better initialisation of the i82593 controller - * from Joseph K. O'Sullivan - * - * Changes made for release in 3.0.10 : - * ---------------------------------- - * - Fix eject "hang" of the driver under 2.2.X : - * o create wv_flush_stale_links() - * o Rename wavelan_release to wv_pcmcia_release & move up - * o move unregister_netdev to wavelan_detach() - * o wavelan_release() no longer call wavelan_detach() - * o Suppress "release" timer - * o Other cleanups & fixes - * - New MAC address in the probe - * - Reorg PSA_CRC code (endian neutral & cleaner) - * - Correct initialisation of the i82593 from Lucent manual - * - Put back the watchdog, with larger timeout - * - TRANSMIT_NO_CRC is a "normal" error, so recover from it - * from Derrick J Brashear - * - Better handling of TX and RX normal failure conditions - * - #ifdef out all the roaming code - * - Add ESSID & "AP current address" ioctl stubs - * - General cleanup of the code - * - * Changes made for release in 3.0.13 : - * ---------------------------------- - * - Re-enable compilation of roaming code by default, but with - * do_roaming = 0 - * - Nuke `nwid=nwid^ntohs(beacon->domain_id)' in wl_roam_gather - * at the demand of John Carol Langford - * - Introduced WAVELAN_ROAMING_EXT for incomplete ESSID stuff. - * - * Changes made for release in 3.0.15 : - * ---------------------------------- - * - Change e-mail and web page addresses - * - Watchdog timer is now correctly expressed in HZ, not in jiffies - * - Add channel number to the list of frequencies in range - * - Add the (short) list of bit-rates in range - * - Developp a new sensitivity... (sens.value & sens.fixed) - * - * Changes made for release in 3.1.2 : - * --------------------------------- - * - Fix check for root permission (break instead of exit) - * - New nwid & encoding setting (Wireless Extension 9) - * - * Changes made for release in 3.1.12 : - * ---------------------------------- - * - reworked wv_82593_cmd to avoid using the IRQ handler and doing - * ugly things with interrupts. - * - Add IRQ protection in 82593_config/ru_start/ru_stop/watchdog - * - Update to new network API (softnet - 2.3.43) : - * o replace dev->tbusy (David + me) - * o replace dev->tstart (David + me) - * o remove dev->interrupt (David) - * o add SMP locking via spinlock in splxx (me) - * o add spinlock in interrupt handler (me) - * o use kernel watchdog instead of ours (me) - * o verify that all the changes make sense and work (me) - * - Re-sync kernel/pcmcia versions (not much actually) - * - A few other cleanups (David & me)... - * - * Changes made for release in 3.1.22 : - * ---------------------------------- - * - Check that SMP works, remove annoying log message - * - * Changes made for release in 3.1.24 : - * ---------------------------------- - * - Fix unfrequent card lockup when watchdog was reseting the hardware : - * o control first busy loop in wv_82593_cmd() - * o Extend spinlock protection in wv_hw_config() - * - * Changes made for release in 3.1.33 : - * ---------------------------------- - * - Optional use new driver API for Wireless Extensions : - * o got rid of wavelan_ioctl() - * o use a bunch of iw_handler instead - * - * Changes made for release in 3.2.1 : - * --------------------------------- - * - Set dev->trans_start to avoid filling the logs - * (and generating useless abort commands) - * - Avoid deadlocks in mmc_out()/mmc_in() - * - * Wishes & dreams: - * ---------------- - * - Cleanup and integrate the roaming code - * (std debug, set DomainID, decay avg and co...) - */ - -/***************************** INCLUDES *****************************/ - -/* Linux headers that we need */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include /* Wireless extensions */ -#include /* New driver API */ - -/* Pcmcia headers that we need */ -#include -#include -#include -#include -#include - -/* Wavelan declarations */ -#include /* Definitions for the Intel chip */ - -#include "wavelan_cs.h" /* Others bits of the hardware */ - -/************************** DRIVER OPTIONS **************************/ -/* - * `#define' or `#undef' the following constant to change the behaviour - * of the driver... - */ -#define WAVELAN_ROAMING /* Include experimental roaming code */ -#undef WAVELAN_ROAMING_EXT /* Enable roaming wireless extensions */ -#undef SET_PSA_CRC /* Set the CRC in PSA (slower) */ -#define USE_PSA_CONFIG /* Use info from the PSA */ -#undef EEPROM_IS_PROTECTED /* Doesn't seem to be necessary */ -#define MULTICAST_AVOID /* Avoid extra multicast (I'm sceptical) */ -#undef SET_MAC_ADDRESS /* Experimental */ - -/* Warning : these stuff will slow down the driver... */ -#define WIRELESS_SPY /* Enable spying addresses */ -#undef HISTOGRAM /* Enable histogram of sig level... */ - -/****************************** DEBUG ******************************/ - -#undef DEBUG_MODULE_TRACE /* Module insertion/removal */ -#undef DEBUG_CALLBACK_TRACE /* Calls made by Linux */ -#undef DEBUG_INTERRUPT_TRACE /* Calls to handler */ -#undef DEBUG_INTERRUPT_INFO /* type of interrupt & so on */ -#define DEBUG_INTERRUPT_ERROR /* problems */ -#undef DEBUG_CONFIG_TRACE /* Trace the config functions */ -#undef DEBUG_CONFIG_INFO /* What's going on... */ -#define DEBUG_CONFIG_ERRORS /* Errors on configuration */ -#undef DEBUG_TX_TRACE /* Transmission calls */ -#undef DEBUG_TX_INFO /* Header of the transmitted packet */ -#undef DEBUG_TX_FAIL /* Normal failure conditions */ -#define DEBUG_TX_ERROR /* Unexpected conditions */ -#undef DEBUG_RX_TRACE /* Transmission calls */ -#undef DEBUG_RX_INFO /* Header of the transmitted packet */ -#undef DEBUG_RX_FAIL /* Normal failure conditions */ -#define DEBUG_RX_ERROR /* Unexpected conditions */ -#undef DEBUG_PACKET_DUMP /* Dump packet on the screen */ -#undef DEBUG_IOCTL_TRACE /* Misc call by Linux */ -#undef DEBUG_IOCTL_INFO /* Various debug info */ -#define DEBUG_IOCTL_ERROR /* What's going wrong */ -#define DEBUG_BASIC_SHOW /* Show basic startup info */ -#undef DEBUG_VERSION_SHOW /* Print version info */ -#undef DEBUG_PSA_SHOW /* Dump psa to screen */ -#undef DEBUG_MMC_SHOW /* Dump mmc to screen */ -#undef DEBUG_SHOW_UNUSED /* Show also unused fields */ -#undef DEBUG_I82593_SHOW /* Show i82593 status */ -#undef DEBUG_DEVICE_SHOW /* Show device parameters */ - -/************************ CONSTANTS & MACROS ************************/ - -#ifdef DEBUG_VERSION_SHOW -static const char *version = "wavelan_cs.c : v24 (SMP + wireless extensions) 11/1/02\n"; -#endif - -/* Watchdog temporisation */ -#define WATCHDOG_JIFFIES (256*HZ/100) - -/* Fix a bug in some old wireless extension definitions */ -#ifndef IW_ESSID_MAX_SIZE -#define IW_ESSID_MAX_SIZE 32 -#endif - -/* ------------------------ PRIVATE IOCTL ------------------------ */ - -#define SIOCSIPQTHR SIOCIWFIRSTPRIV /* Set quality threshold */ -#define SIOCGIPQTHR (SIOCIWFIRSTPRIV + 1) /* Get quality threshold */ -#define SIOCSIPROAM (SIOCIWFIRSTPRIV + 2) /* Set roaming state */ -#define SIOCGIPROAM (SIOCIWFIRSTPRIV + 3) /* Get roaming state */ - -#define SIOCSIPHISTO (SIOCIWFIRSTPRIV + 4) /* Set histogram ranges */ -#define SIOCGIPHISTO (SIOCIWFIRSTPRIV + 5) /* Get histogram values */ - -/*************************** WaveLAN Roaming **************************/ -#ifdef WAVELAN_ROAMING /* Conditional compile, see above in options */ - -#define WAVELAN_ROAMING_DEBUG 0 /* 1 = Trace of handover decisions */ - /* 2 = Info on each beacon rcvd... */ -#define MAX_WAVEPOINTS 7 /* Max visible at one time */ -#define WAVEPOINT_HISTORY 5 /* SNR sample history slow search */ -#define WAVEPOINT_FAST_HISTORY 2 /* SNR sample history fast search */ -#define SEARCH_THRESH_LOW 10 /* SNR to enter cell search */ -#define SEARCH_THRESH_HIGH 13 /* SNR to leave cell search */ -#define WAVELAN_ROAMING_DELTA 1 /* Hysteresis value (+/- SNR) */ -#define CELL_TIMEOUT (2*HZ) /* in jiffies */ - -#define FAST_CELL_SEARCH 1 /* Boolean values... */ -#define NWID_PROMISC 1 /* for code clarity. */ - -typedef struct wavepoint_beacon { - unsigned char dsap, /* Unused */ - ssap, /* Unused */ - ctrl, /* Unused */ - O, U, I, /* Unused */ - spec_id1, /* Unused */ - spec_id2, /* Unused */ - pdu_type, /* Unused */ - seq; /* WavePoint beacon sequence number */ - __be16 domain_id, /* WavePoint Domain ID */ - nwid; /* WavePoint NWID */ -} wavepoint_beacon; - -typedef struct wavepoint_history { - unsigned short nwid; /* WavePoint's NWID */ - int average_slow; /* SNR running average */ - int average_fast; /* SNR running average */ - unsigned char sigqual[WAVEPOINT_HISTORY]; /* Ringbuffer of recent SNR's */ - unsigned char qualptr; /* Index into ringbuffer */ - unsigned char last_seq; /* Last seq. no seen for WavePoint */ - struct wavepoint_history *next; /* Next WavePoint in table */ - struct wavepoint_history *prev; /* Previous WavePoint in table */ - unsigned long last_seen; /* Time of last beacon recvd, jiffies */ -} wavepoint_history; - -struct wavepoint_table { - wavepoint_history *head; /* Start of ringbuffer */ - int num_wavepoints; /* No. of WavePoints visible */ - unsigned char locked; /* Table lock */ -}; - -#endif /* WAVELAN_ROAMING */ - -/****************************** TYPES ******************************/ - -/* Shortcuts */ -typedef struct iw_statistics iw_stats; -typedef struct iw_quality iw_qual; -typedef struct iw_freq iw_freq; -typedef struct net_local net_local; -typedef struct timer_list timer_list; - -/* Basic types */ -typedef u_char mac_addr[WAVELAN_ADDR_SIZE]; /* Hardware address */ - -/* - * Static specific data for the interface. - * - * For each network interface, Linux keep data in two structure. "device" - * keep the generic data (same format for everybody) and "net_local" keep - * the additional specific data. - */ -struct net_local { - dev_node_t node; /* ???? What is this stuff ???? */ - struct net_device *dev; /* Reverse link... */ - spinlock_t spinlock; /* Serialize access to the hardware (SMP) */ - struct pcmcia_device *link; /* pcmcia structure */ - int nresets; /* Number of hw resets */ - u_char configured; /* If it is configured */ - u_char reconfig_82593; /* Need to reconfigure the controller */ - u_char promiscuous; /* Promiscuous mode */ - u_char allmulticast; /* All Multicast mode */ - int mc_count; /* Number of multicast addresses */ - - int stop; /* Current i82593 Stop Hit Register */ - int rfp; /* Last DMA machine receive pointer */ - int overrunning; /* Receiver overrun flag */ - - iw_stats wstats; /* Wireless specific stats */ - - struct iw_spy_data spy_data; - struct iw_public_data wireless_data; - -#ifdef HISTOGRAM - int his_number; /* Number of intervals */ - u_char his_range[16]; /* Boundaries of interval ]n-1; n] */ - u_long his_sum[16]; /* Sum in interval */ -#endif /* HISTOGRAM */ -#ifdef WAVELAN_ROAMING - u_long domain_id; /* Domain ID we lock on for roaming */ - int filter_domains; /* Check Domain ID of beacon found */ - struct wavepoint_table wavepoint_table; /* Table of visible WavePoints*/ - wavepoint_history *curr_point; /* Current wavepoint */ - int cell_search; /* Searching for new cell? */ - struct timer_list cell_timer; /* Garbage collection */ -#endif /* WAVELAN_ROAMING */ - void __iomem *mem; -}; - -/* ----------------- MODEM MANAGEMENT SUBROUTINES ----------------- */ -static inline u_char /* data */ - hasr_read(u_long); /* Read the host interface : base address */ -static void - hacr_write(u_long, /* Write to host interface : base address */ - u_char), /* data */ - hacr_write_slow(u_long, - u_char); -static void - psa_read(struct net_device *, /* Read the Parameter Storage Area */ - int, /* offset in PSA */ - u_char *, /* buffer to fill */ - int), /* size to read */ - psa_write(struct net_device *, /* Write to the PSA */ - int, /* Offset in psa */ - u_char *, /* Buffer in memory */ - int); /* Length of buffer */ -static void - mmc_out(u_long, /* Write 1 byte to the Modem Manag Control */ - u_short, - u_char), - mmc_write(u_long, /* Write n bytes to the MMC */ - u_char, - u_char *, - int); -static u_char /* Read 1 byte from the MMC */ - mmc_in(u_long, - u_short); -static void - mmc_read(u_long, /* Read n bytes from the MMC */ - u_char, - u_char *, - int), - fee_wait(u_long, /* Wait for frequency EEprom : base address */ - int, /* Base delay to wait for */ - int); /* Number of time to wait */ -static void - fee_read(u_long, /* Read the frequency EEprom : base address */ - u_short, /* destination offset */ - u_short *, /* data buffer */ - int); /* number of registers */ -/* ---------------------- I82593 SUBROUTINES ----------------------- */ -static int - wv_82593_cmd(struct net_device *, /* synchronously send a command to i82593 */ - char *, - int, - int); -static inline int - wv_diag(struct net_device *); /* Diagnostique the i82593 */ -static int - read_ringbuf(struct net_device *, /* Read a receive buffer */ - int, - char *, - int); -static void - wv_82593_reconfig(struct net_device *); /* Reconfigure the controller */ -/* ------------------- DEBUG & INFO SUBROUTINES ------------------- */ -static void - wv_init_info(struct net_device *); /* display startup info */ -/* ------------------- IOCTL, STATS & RECONFIG ------------------- */ -static iw_stats * - wavelan_get_wireless_stats(struct net_device *); -/* ----------------------- PACKET RECEPTION ----------------------- */ -static int - wv_start_of_frame(struct net_device *, /* Seek beggining of current frame */ - int, /* end of frame */ - int); /* start of buffer */ -static void - wv_packet_read(struct net_device *, /* Read a packet from a frame */ - int, - int), - wv_packet_rcv(struct net_device *); /* Read all packets waiting */ -/* --------------------- PACKET TRANSMISSION --------------------- */ -static void - wv_packet_write(struct net_device *, /* Write a packet to the Tx buffer */ - void *, - short); -static netdev_tx_t - wavelan_packet_xmit(struct sk_buff *, /* Send a packet */ - struct net_device *); -/* -------------------- HARDWARE CONFIGURATION -------------------- */ -static int - wv_mmc_init(struct net_device *); /* Initialize the modem */ -static int - wv_ru_stop(struct net_device *), /* Stop the i82593 receiver unit */ - wv_ru_start(struct net_device *); /* Start the i82593 receiver unit */ -static int - wv_82593_config(struct net_device *); /* Configure the i82593 */ -static int - wv_pcmcia_reset(struct net_device *); /* Reset the pcmcia interface */ -static int - wv_hw_config(struct net_device *); /* Reset & configure the whole hardware */ -static void - wv_hw_reset(struct net_device *); /* Same, + start receiver unit */ -static int - wv_pcmcia_config(struct pcmcia_device *); /* Configure the pcmcia interface */ -static void - wv_pcmcia_release(struct pcmcia_device *);/* Remove a device */ -/* ---------------------- INTERRUPT HANDLING ---------------------- */ -static irqreturn_t - wavelan_interrupt(int, /* Interrupt handler */ - void *); -static void - wavelan_watchdog(struct net_device *); /* Transmission watchdog */ -/* ------------------- CONFIGURATION CALLBACKS ------------------- */ -static int - wavelan_open(struct net_device *), /* Open the device */ - wavelan_close(struct net_device *); /* Close the device */ -static void - wavelan_detach(struct pcmcia_device *p_dev); /* Destroy a removed device */ - -/**************************** VARIABLES ****************************/ - -/* - * Parameters that can be set with 'insmod' - * The exact syntax is 'insmod wavelan_cs.o =' - */ - -/* Shared memory speed, in ns */ -static int mem_speed; - -/* New module interface */ -module_param(mem_speed, int, 0); - -#ifdef WAVELAN_ROAMING /* Conditional compile, see above in options */ -/* Enable roaming mode ? No ! Please keep this to 0 */ -static int do_roaming; -module_param(do_roaming, bool, 0); -#endif /* WAVELAN_ROAMING */ - -MODULE_LICENSE("GPL"); - -#endif /* WAVELAN_CS_P_H */ - -- cgit v0.10.2 From e5b3e80016198ee55c82dfd653c1dee99a38964b Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 5 May 2010 23:17:29 -0700 Subject: Staging: netwave: delete the driver It has sat in the staging directory since October of 2009, and no one has stepped up to take it over, so odds are, no one cares about it anymore. So, it is now deleted as scheduled, and documented in the TODO file. Cc: John W. Linville Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index 436e2ed..e062b09 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -125,8 +125,6 @@ source "drivers/staging/batman-adv/Kconfig" source "drivers/staging/samsung-laptop/Kconfig" -source "drivers/staging/netwave/Kconfig" - source "drivers/staging/sm7xx/Kconfig" source "drivers/staging/dt3155/Kconfig" diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 357da6d..097c158 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -43,7 +43,6 @@ obj-$(CONFIG_WLAGS49_H2) += wlags49_h2/ obj-$(CONFIG_WLAGS49_H25) += wlags49_h25/ obj-$(CONFIG_BATMAN_ADV) += batman-adv/ obj-$(CONFIG_SAMSUNG_LAPTOP) += samsung-laptop/ -obj-$(CONFIG_PCMCIA_NETWAVE) += netwave/ obj-$(CONFIG_FB_SM7XX) += sm7xx/ obj-$(CONFIG_DT3155) += dt3155/ obj-$(CONFIG_VIDEO_DT3155) += dt3155v4l/ diff --git a/drivers/staging/netwave/Kconfig b/drivers/staging/netwave/Kconfig deleted file mode 100644 index 8033e81..0000000 --- a/drivers/staging/netwave/Kconfig +++ /dev/null @@ -1,11 +0,0 @@ -config PCMCIA_NETWAVE - tristate "Xircom Netwave AirSurfer Pcmcia wireless support" - depends on PCMCIA && WLAN - select WIRELESS_EXT - select WEXT_PRIV - help - Say Y here if you intend to attach this type of PCMCIA (PC-card) - wireless Ethernet networking card to your computer. - - To compile this driver as a module, choose M here: the module will be - called netwave_cs. If unsure, say N. diff --git a/drivers/staging/netwave/Makefile b/drivers/staging/netwave/Makefile deleted file mode 100644 index 2ab89de..0000000 --- a/drivers/staging/netwave/Makefile +++ /dev/null @@ -1 +0,0 @@ -obj-$(CONFIG_PCMCIA_NETWAVE) += netwave_cs.o diff --git a/drivers/staging/netwave/TODO b/drivers/staging/netwave/TODO deleted file mode 100644 index 9bd15a2..0000000 --- a/drivers/staging/netwave/TODO +++ /dev/null @@ -1,7 +0,0 @@ -TODO: - - step up and maintain this driver to ensure that it continues - to work. Having the hardware for this is pretty much a - requirement. If this does not happen, the will be removed in - the 2.6.35 kernel release. - -Please send patches to Greg Kroah-Hartman . diff --git a/drivers/staging/netwave/netwave_cs.c b/drivers/staging/netwave/netwave_cs.c deleted file mode 100644 index 7b31621..0000000 --- a/drivers/staging/netwave/netwave_cs.c +++ /dev/null @@ -1,1369 +0,0 @@ -/********************************************************************* - * - * Filename: netwave_cs.c - * Version: 0.4.1 - * Description: Netwave AirSurfer Wireless LAN PC Card driver - * Status: Experimental. - * Authors: John Markus Bjørndalen - * Dag Brattli - * David Hinds - * Created at: A long time ago! - * Modified at: Mon Nov 10 11:54:37 1997 - * Modified by: Dag Brattli - * - * Copyright (c) 1997 University of Tromsø, Norway - * - * Revision History: - * - * 08-Nov-97 15:14:47 John Markus Bjørndalen - * - Fixed some bugs in netwave_rx and cleaned it up a bit. - * (One of the bugs would have destroyed packets when receiving - * multiple packets per interrupt). - * - Cleaned up parts of newave_hw_xmit. - * - A few general cleanups. - * 24-Oct-97 13:17:36 Dag Brattli - * - Fixed netwave_rx receive function (got updated docs) - * Others: - * - Changed name from xircnw to netwave, take a look at - * http://www.netwave-wireless.com - * - Some reorganizing of the code - * - Removed possible race condition between interrupt handler and transmit - * function - * - Started to add wireless extensions, but still needs some coding - * - Added watchdog for better handling of transmission timeouts - * (hopefully this works better) - ********************************************************************/ - -/* To have statistics (just packets sent) define this */ -#undef NETWAVE_STATS - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#define NETWAVE_REGOFF 0x8000 -/* The Netwave IO registers, offsets to iobase */ -#define NETWAVE_REG_COR 0x0 -#define NETWAVE_REG_CCSR 0x2 -#define NETWAVE_REG_ASR 0x4 -#define NETWAVE_REG_IMR 0xa -#define NETWAVE_REG_PMR 0xc -#define NETWAVE_REG_IOLOW 0x6 -#define NETWAVE_REG_IOHI 0x7 -#define NETWAVE_REG_IOCONTROL 0x8 -#define NETWAVE_REG_DATA 0xf -/* The Netwave Extended IO registers, offsets to RamBase */ -#define NETWAVE_EREG_ASCC 0x114 -#define NETWAVE_EREG_RSER 0x120 -#define NETWAVE_EREG_RSERW 0x124 -#define NETWAVE_EREG_TSER 0x130 -#define NETWAVE_EREG_TSERW 0x134 -#define NETWAVE_EREG_CB 0x100 -#define NETWAVE_EREG_SPCQ 0x154 -#define NETWAVE_EREG_SPU 0x155 -#define NETWAVE_EREG_LIF 0x14e -#define NETWAVE_EREG_ISPLQ 0x156 -#define NETWAVE_EREG_HHC 0x158 -#define NETWAVE_EREG_NI 0x16e -#define NETWAVE_EREG_MHS 0x16b -#define NETWAVE_EREG_TDP 0x140 -#define NETWAVE_EREG_RDP 0x150 -#define NETWAVE_EREG_PA 0x160 -#define NETWAVE_EREG_EC 0x180 -#define NETWAVE_EREG_CRBP 0x17a -#define NETWAVE_EREG_ARW 0x166 - -/* - * Commands used in the extended command buffer - * NETWAVE_EREG_CB (0x100-0x10F) - */ -#define NETWAVE_CMD_NOP 0x00 -#define NETWAVE_CMD_SRC 0x01 -#define NETWAVE_CMD_STC 0x02 -#define NETWAVE_CMD_AMA 0x03 -#define NETWAVE_CMD_DMA 0x04 -#define NETWAVE_CMD_SAMA 0x05 -#define NETWAVE_CMD_ER 0x06 -#define NETWAVE_CMD_DR 0x07 -#define NETWAVE_CMD_TL 0x08 -#define NETWAVE_CMD_SRP 0x09 -#define NETWAVE_CMD_SSK 0x0a -#define NETWAVE_CMD_SMD 0x0b -#define NETWAVE_CMD_SAPD 0x0c -#define NETWAVE_CMD_SSS 0x11 -/* End of Command marker */ -#define NETWAVE_CMD_EOC 0x00 - -/* ASR register bits */ -#define NETWAVE_ASR_RXRDY 0x80 -#define NETWAVE_ASR_TXBA 0x01 - -#define TX_TIMEOUT ((32*HZ)/100) - -static const unsigned int imrConfRFU1 = 0x10; /* RFU interrupt mask, keep high */ -static const unsigned int imrConfIENA = 0x02; /* Interrupt enable */ - -static const unsigned int corConfIENA = 0x01; /* Interrupt enable */ -static const unsigned int corConfLVLREQ = 0x40; /* Keep high */ - -static const unsigned int rxConfRxEna = 0x80; /* Receive Enable */ -static const unsigned int rxConfMAC = 0x20; /* MAC host receive mode*/ -static const unsigned int rxConfPro = 0x10; /* Promiscuous */ -static const unsigned int rxConfAMP = 0x08; /* Accept Multicast Packets */ -static const unsigned int rxConfBcast = 0x04; /* Accept Broadcast Packets */ - -static const unsigned int txConfTxEna = 0x80; /* Transmit Enable */ -static const unsigned int txConfMAC = 0x20; /* Host sends MAC mode */ -static const unsigned int txConfEUD = 0x10; /* Enable Uni-Data packets */ -static const unsigned int txConfKey = 0x02; /* Scramble data packets */ -static const unsigned int txConfLoop = 0x01; /* Loopback mode */ - - -/*====================================================================*/ - -/* Parameters that can be set with 'insmod' */ - -/* Choose the domain, default is 0x100 */ -static u_int domain = 0x100; - -/* Scramble key, range from 0x0 to 0xffff. - * 0x0 is no scrambling. - */ -static u_int scramble_key = 0x0; - -/* Shared memory speed, in ns. The documentation states that - * the card should not be read faster than every 400ns. - * This timing should be provided by the HBA. If it becomes a - * problem, try setting mem_speed to 400. - */ -static int mem_speed; - -module_param(domain, int, 0); -module_param(scramble_key, int, 0); -module_param(mem_speed, int, 0); - -/*====================================================================*/ - -/* PCMCIA (Card Services) related functions */ -static void netwave_release(struct pcmcia_device *link); /* Card removal */ -static int netwave_pcmcia_config(struct pcmcia_device *arg); /* Runs after card - insertion */ -static void netwave_detach(struct pcmcia_device *p_dev); /* Destroy instance */ - -/* Hardware configuration */ -static void netwave_doreset(unsigned int iobase, u_char __iomem *ramBase); -static void netwave_reset(struct net_device *dev); - -/* Misc device stuff */ -static int netwave_open(struct net_device *dev); /* Open the device */ -static int netwave_close(struct net_device *dev); /* Close the device */ - -/* Packet transmission and Packet reception */ -static netdev_tx_t netwave_start_xmit( struct sk_buff *skb, - struct net_device *dev); -static int netwave_rx( struct net_device *dev); - -/* Interrupt routines */ -static irqreturn_t netwave_interrupt(int irq, void *dev_id); -static void netwave_watchdog(struct net_device *); - -/* Wireless extensions */ -static struct iw_statistics* netwave_get_wireless_stats(struct net_device *dev); - -static void set_multicast_list(struct net_device *dev); - -/* - A struct pcmcia_device structure has fields for most things that are needed - to keep track of a socket, but there will usually be some device - specific information that also needs to be kept track of. The - 'priv' pointer in a struct pcmcia_device structure can be used to point to - a device-specific private data structure, like this. - - A driver needs to provide a dev_node_t structure for each device - on a card. In some cases, there is only one device per card (for - example, ethernet cards, modems). In other cases, there may be - many actual or logical devices (SCSI adapters, memory cards with - multiple partitions). The dev_node_t structures need to be kept - in a linked list starting at the 'dev' field of a struct pcmcia_device - structure. We allocate them in the card's private data structure, - because they generally can't be allocated dynamically. -*/ - -static const struct iw_handler_def netwave_handler_def; - -#define SIOCGIPSNAP SIOCIWFIRSTPRIV + 1 /* Site Survey Snapshot */ - -#define MAX_ESA 10 - -typedef struct net_addr { - u_char addr48[6]; -} net_addr; - -struct site_survey { - u_short length; - u_char struct_revision; - u_char roaming_state; - - u_char sp_existsFlag; - u_char sp_link_quality; - u_char sp_max_link_quality; - u_char linkQualityGoodFairBoundary; - u_char linkQualityFairPoorBoundary; - u_char sp_utilization; - u_char sp_goodness; - u_char sp_hotheadcount; - u_char roaming_condition; - - net_addr sp; - u_char numAPs; - net_addr nearByAccessPoints[MAX_ESA]; -}; - -typedef struct netwave_private { - struct pcmcia_device *p_dev; - spinlock_t spinlock; /* Serialize access to the hardware (SMP) */ - dev_node_t node; - u_char __iomem *ramBase; - int timeoutCounter; - int lastExec; - struct timer_list watchdog; /* To avoid blocking state */ - struct site_survey nss; - struct iw_statistics iw_stats; /* Wireless stats */ -} netwave_private; - -/* - * The Netwave card is little-endian, so won't work for big endian - * systems. - */ -static inline unsigned short get_uint16(u_char __iomem *staddr) -{ - return readw(staddr); /* Return only 16 bits */ -} - -static inline short get_int16(u_char __iomem * staddr) -{ - return readw(staddr); -} - -/* - * Wait until the WOC (Write Operation Complete) bit in the - * ASR (Adapter Status Register) is asserted. - * This should have aborted if it takes too long time. - */ -static inline void wait_WOC(unsigned int iobase) -{ - /* Spin lock */ - while ((inb(iobase + NETWAVE_REG_ASR) & 0x8) != 0x8) ; -} - -static void netwave_snapshot(netwave_private *priv, u_char __iomem *ramBase, - unsigned int iobase) { - u_short resultBuffer; - - /* if time since last snapshot is > 1 sec. (100 jiffies?) then take - * new snapshot, else return cached data. This is the recommended rate. - */ - if ( jiffies - priv->lastExec > 100) { - /* Take site survey snapshot */ - /*printk( KERN_DEBUG "Taking new snapshot. %ld\n", jiffies - - priv->lastExec); */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_SSS, ramBase + NETWAVE_EREG_CB + 0); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); - wait_WOC(iobase); - - /* Get result and copy to cach */ - resultBuffer = readw(ramBase + NETWAVE_EREG_CRBP); - copy_from_pc( &priv->nss, ramBase+resultBuffer, - sizeof(struct site_survey)); - } -} - -/* - * Function netwave_get_wireless_stats (dev) - * - * Wireless extensions statistics - * - */ -static struct iw_statistics *netwave_get_wireless_stats(struct net_device *dev) -{ - unsigned long flags; - unsigned int iobase = dev->base_addr; - netwave_private *priv = netdev_priv(dev); - u_char __iomem *ramBase = priv->ramBase; - struct iw_statistics* wstats; - - wstats = &priv->iw_stats; - - spin_lock_irqsave(&priv->spinlock, flags); - - netwave_snapshot( priv, ramBase, iobase); - - wstats->status = priv->nss.roaming_state; - wstats->qual.qual = readb( ramBase + NETWAVE_EREG_SPCQ); - wstats->qual.level = readb( ramBase + NETWAVE_EREG_ISPLQ); - wstats->qual.noise = readb( ramBase + NETWAVE_EREG_SPU) & 0x3f; - wstats->discard.nwid = 0L; - wstats->discard.code = 0L; - wstats->discard.misc = 0L; - - spin_unlock_irqrestore(&priv->spinlock, flags); - - return &priv->iw_stats; -} - -static const struct net_device_ops netwave_netdev_ops = { - .ndo_open = netwave_open, - .ndo_stop = netwave_close, - .ndo_start_xmit = netwave_start_xmit, - .ndo_set_multicast_list = set_multicast_list, - .ndo_tx_timeout = netwave_watchdog, - .ndo_change_mtu = eth_change_mtu, - .ndo_set_mac_address = eth_mac_addr, - .ndo_validate_addr = eth_validate_addr, -}; - -/* - * Function netwave_attach (void) - * - * Creates an "instance" of the driver, allocating local data - * structures for one device. The device is registered with Card - * Services. - * - * The dev_link structure is initialized, but we don't actually - * configure the card at this point -- we wait until we receive a - * card insertion event. - */ -static int netwave_probe(struct pcmcia_device *link) -{ - struct net_device *dev; - netwave_private *priv; - - dev_dbg(&link->dev, "netwave_attach()\n"); - - /* Initialize the struct pcmcia_device structure */ - dev = alloc_etherdev(sizeof(netwave_private)); - if (!dev) - return -ENOMEM; - priv = netdev_priv(dev); - priv->p_dev = link; - link->priv = dev; - - /* The io structure describes IO port mapping */ - link->io.NumPorts1 = 16; - link->io.Attributes1 = IO_DATA_PATH_WIDTH_16; - /* link->io.NumPorts2 = 16; - link->io.Attributes2 = IO_DATA_PATH_WIDTH_16; */ - link->io.IOAddrLines = 5; - - /* Interrupt setup */ - link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; - link->irq.Handler = &netwave_interrupt; - - /* General socket configuration */ - link->conf.Attributes = CONF_ENABLE_IRQ; - link->conf.IntType = INT_MEMORY_AND_IO; - link->conf.ConfigIndex = 1; - - /* Netwave private struct init. link/dev/node already taken care of, - * other stuff zero'd - Jean II */ - spin_lock_init(&priv->spinlock); - - /* Netwave specific entries in the device structure */ - dev->netdev_ops = &netwave_netdev_ops; - /* wireless extensions */ - dev->wireless_handlers = &netwave_handler_def; - - dev->watchdog_timeo = TX_TIMEOUT; - - return netwave_pcmcia_config( link); -} /* netwave_attach */ - -/* - * Function netwave_detach (link) - * - * This deletes a driver "instance". The device is de-registered - * with Card Services. If it has been released, all local data - * structures are freed. Otherwise, the structures will be freed - * when the device is released. - */ -static void netwave_detach(struct pcmcia_device *link) -{ - struct net_device *dev = link->priv; - - dev_dbg(&link->dev, "netwave_detach\n"); - - netwave_release(link); - - if (link->dev_node) - unregister_netdev(dev); - - free_netdev(dev); -} /* netwave_detach */ - -/* - * Wireless Handler : get protocol name - */ -static int netwave_get_name(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - strcpy(wrqu->name, "Netwave"); - return 0; -} - -/* - * Wireless Handler : set Network ID - */ -static int netwave_set_nwid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long flags; - unsigned int iobase = dev->base_addr; - netwave_private *priv = netdev_priv(dev); - u_char __iomem *ramBase = priv->ramBase; - - /* Disable interrupts & save flags */ - spin_lock_irqsave(&priv->spinlock, flags); - - if(!wrqu->nwid.disabled) { - domain = wrqu->nwid.value; - printk( KERN_DEBUG "Setting domain to 0x%x%02x\n", - (domain >> 8) & 0x01, domain & 0xff); - wait_WOC(iobase); - writeb(NETWAVE_CMD_SMD, ramBase + NETWAVE_EREG_CB + 0); - writeb( domain & 0xff, ramBase + NETWAVE_EREG_CB + 1); - writeb((domain >>8 ) & 0x01,ramBase + NETWAVE_EREG_CB+2); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3); - } - - /* ReEnable interrupts & restore flags */ - spin_unlock_irqrestore(&priv->spinlock, flags); - - return 0; -} - -/* - * Wireless Handler : get Network ID - */ -static int netwave_get_nwid(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - wrqu->nwid.value = domain; - wrqu->nwid.disabled = 0; - wrqu->nwid.fixed = 1; - return 0; -} - -/* - * Wireless Handler : set scramble key - */ -static int netwave_set_scramble(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *key) -{ - unsigned long flags; - unsigned int iobase = dev->base_addr; - netwave_private *priv = netdev_priv(dev); - u_char __iomem *ramBase = priv->ramBase; - - /* Disable interrupts & save flags */ - spin_lock_irqsave(&priv->spinlock, flags); - - scramble_key = (key[0] << 8) | key[1]; - wait_WOC(iobase); - writeb(NETWAVE_CMD_SSK, ramBase + NETWAVE_EREG_CB + 0); - writeb(scramble_key & 0xff, ramBase + NETWAVE_EREG_CB + 1); - writeb((scramble_key>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3); - - /* ReEnable interrupts & restore flags */ - spin_unlock_irqrestore(&priv->spinlock, flags); - - return 0; -} - -/* - * Wireless Handler : get scramble key - */ -static int netwave_get_scramble(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *key) -{ - key[1] = scramble_key & 0xff; - key[0] = (scramble_key>>8) & 0xff; - wrqu->encoding.flags = IW_ENCODE_ENABLED; - wrqu->encoding.length = 2; - return 0; -} - -/* - * Wireless Handler : get mode - */ -static int netwave_get_mode(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - if(domain & 0x100) - wrqu->mode = IW_MODE_INFRA; - else - wrqu->mode = IW_MODE_ADHOC; - - return 0; -} - -/* - * Wireless Handler : get range info - */ -static int netwave_get_range(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - struct iw_range *range = (struct iw_range *) extra; - int ret = 0; - - /* Set the length (very important for backward compatibility) */ - wrqu->data.length = sizeof(struct iw_range); - - /* Set all the info we don't care or don't know about to zero */ - memset(range, 0, sizeof(struct iw_range)); - - /* Set the Wireless Extension versions */ - range->we_version_compiled = WIRELESS_EXT; - range->we_version_source = 9; /* Nothing for us in v10 and v11 */ - - /* Set information in the range struct */ - range->throughput = 450 * 1000; /* don't argue on this ! */ - range->min_nwid = 0x0000; - range->max_nwid = 0x01FF; - - range->num_channels = range->num_frequency = 0; - - range->sensitivity = 0x3F; - range->max_qual.qual = 255; - range->max_qual.level = 255; - range->max_qual.noise = 0; - - range->num_bitrates = 1; - range->bitrate[0] = 1000000; /* 1 Mb/s */ - - range->encoding_size[0] = 2; /* 16 bits scrambling */ - range->num_encoding_sizes = 1; - range->max_encoding_tokens = 1; /* Only one key possible */ - - return ret; -} - -/* - * Wireless Private Handler : get snapshot - */ -static int netwave_get_snap(struct net_device *dev, - struct iw_request_info *info, - union iwreq_data *wrqu, - char *extra) -{ - unsigned long flags; - unsigned int iobase = dev->base_addr; - netwave_private *priv = netdev_priv(dev); - u_char __iomem *ramBase = priv->ramBase; - - /* Disable interrupts & save flags */ - spin_lock_irqsave(&priv->spinlock, flags); - - /* Take snapshot of environment */ - netwave_snapshot( priv, ramBase, iobase); - wrqu->data.length = priv->nss.length; - memcpy(extra, (u_char *) &priv->nss, sizeof( struct site_survey)); - - priv->lastExec = jiffies; - - /* ReEnable interrupts & restore flags */ - spin_unlock_irqrestore(&priv->spinlock, flags); - - return(0); -} - -/* - * Structures to export the Wireless Handlers - * This is the stuff that are treated the wireless extensions (iwconfig) - */ - -static const struct iw_priv_args netwave_private_args[] = { -/*{ cmd, set_args, get_args, name } */ - { SIOCGIPSNAP, 0, - IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED | sizeof(struct site_survey), - "getsitesurvey" }, -}; - -static const iw_handler netwave_handler[] = -{ - NULL, /* SIOCSIWNAME */ - netwave_get_name, /* SIOCGIWNAME */ - netwave_set_nwid, /* SIOCSIWNWID */ - netwave_get_nwid, /* SIOCGIWNWID */ - NULL, /* SIOCSIWFREQ */ - NULL, /* SIOCGIWFREQ */ - NULL, /* SIOCSIWMODE */ - netwave_get_mode, /* SIOCGIWMODE */ - NULL, /* SIOCSIWSENS */ - NULL, /* SIOCGIWSENS */ - NULL, /* SIOCSIWRANGE */ - netwave_get_range, /* SIOCGIWRANGE */ - NULL, /* SIOCSIWPRIV */ - NULL, /* SIOCGIWPRIV */ - NULL, /* SIOCSIWSTATS */ - NULL, /* SIOCGIWSTATS */ - NULL, /* SIOCSIWSPY */ - NULL, /* SIOCGIWSPY */ - NULL, /* -- hole -- */ - NULL, /* -- hole -- */ - NULL, /* SIOCSIWAP */ - NULL, /* SIOCGIWAP */ - NULL, /* -- hole -- */ - NULL, /* SIOCGIWAPLIST */ - NULL, /* -- hole -- */ - NULL, /* -- hole -- */ - NULL, /* SIOCSIWESSID */ - NULL, /* SIOCGIWESSID */ - NULL, /* SIOCSIWNICKN */ - NULL, /* SIOCGIWNICKN */ - NULL, /* -- hole -- */ - NULL, /* -- hole -- */ - NULL, /* SIOCSIWRATE */ - NULL, /* SIOCGIWRATE */ - NULL, /* SIOCSIWRTS */ - NULL, /* SIOCGIWRTS */ - NULL, /* SIOCSIWFRAG */ - NULL, /* SIOCGIWFRAG */ - NULL, /* SIOCSIWTXPOW */ - NULL, /* SIOCGIWTXPOW */ - NULL, /* SIOCSIWRETRY */ - NULL, /* SIOCGIWRETRY */ - netwave_set_scramble, /* SIOCSIWENCODE */ - netwave_get_scramble, /* SIOCGIWENCODE */ -}; - -static const iw_handler netwave_private_handler[] = -{ - NULL, /* SIOCIWFIRSTPRIV */ - netwave_get_snap, /* SIOCIWFIRSTPRIV + 1 */ -}; - -static const struct iw_handler_def netwave_handler_def = -{ - .num_standard = ARRAY_SIZE(netwave_handler), - .num_private = ARRAY_SIZE(netwave_private_handler), - .num_private_args = ARRAY_SIZE(netwave_private_args), - .standard = (iw_handler *) netwave_handler, - .private = (iw_handler *) netwave_private_handler, - .private_args = (struct iw_priv_args *) netwave_private_args, - .get_wireless_stats = netwave_get_wireless_stats, -}; - -/* - * Function netwave_pcmcia_config (link) - * - * netwave_pcmcia_config() is scheduled to run after a CARD_INSERTION - * event is received, to configure the PCMCIA socket, and to make the - * device available to the system. - * - */ - -static int netwave_pcmcia_config(struct pcmcia_device *link) { - struct net_device *dev = link->priv; - netwave_private *priv = netdev_priv(dev); - int i, j, ret; - win_req_t req; - memreq_t mem; - u_char __iomem *ramBase = NULL; - - dev_dbg(&link->dev, "netwave_pcmcia_config\n"); - - /* - * Try allocating IO ports. This tries a few fixed addresses. - * If you want, you can also read the card's config table to - * pick addresses -- see the serial driver for an example. - */ - for (i = j = 0x0; j < 0x400; j += 0x20) { - link->io.BasePort1 = j ^ 0x300; - i = pcmcia_request_io(link, &link->io); - if (i == 0) - break; - } - if (i != 0) - goto failed; - - /* - * Now allocate an interrupt line. Note that this does not - * actually assign a handler to the interrupt. - */ - ret = pcmcia_request_irq(link, &link->irq); - if (ret) - goto failed; - - /* - * This actually configures the PCMCIA socket -- setting up - * the I/O windows and the interrupt mapping. - */ - ret = pcmcia_request_configuration(link, &link->conf); - if (ret) - goto failed; - - /* - * Allocate a 32K memory window. Note that the struct pcmcia_device - * structure provides space for one window handle -- if your - * device needs several windows, you'll need to keep track of - * the handles in your private data structure, dev->priv. - */ - dev_dbg(&link->dev, "Setting mem speed of %d\n", mem_speed); - - req.Attributes = WIN_DATA_WIDTH_8|WIN_MEMORY_TYPE_CM|WIN_ENABLE; - req.Base = 0; req.Size = 0x8000; - req.AccessSpeed = mem_speed; - ret = pcmcia_request_window(link, &req, &link->win); - if (ret) - goto failed; - mem.CardOffset = 0x20000; mem.Page = 0; - ret = pcmcia_map_mem_page(link, link->win, &mem); - if (ret) - goto failed; - - /* Store base address of the common window frame */ - ramBase = ioremap(req.Base, 0x8000); - priv->ramBase = ramBase; - - dev->irq = link->irq.AssignedIRQ; - dev->base_addr = link->io.BasePort1; - SET_NETDEV_DEV(dev, &link->dev); - - if (register_netdev(dev) != 0) { - printk(KERN_DEBUG "netwave_cs: register_netdev() failed\n"); - goto failed; - } - - strcpy(priv->node.dev_name, dev->name); - link->dev_node = &priv->node; - - /* Reset card before reading physical address */ - netwave_doreset(dev->base_addr, ramBase); - - /* Read the ethernet address and fill in the Netwave registers. */ - for (i = 0; i < 6; i++) - dev->dev_addr[i] = readb(ramBase + NETWAVE_EREG_PA + i); - - printk(KERN_INFO "%s: Netwave: port %#3lx, irq %d, mem %lx, " - "id %c%c, hw_addr %pM\n", - dev->name, dev->base_addr, dev->irq, - (u_long) ramBase, - (int) readb(ramBase+NETWAVE_EREG_NI), - (int) readb(ramBase+NETWAVE_EREG_NI+1), - dev->dev_addr); - - /* get revision words */ - printk(KERN_DEBUG "Netwave_reset: revision %04x %04x\n", - get_uint16(ramBase + NETWAVE_EREG_ARW), - get_uint16(ramBase + NETWAVE_EREG_ARW+2)); - return 0; - -failed: - netwave_release(link); - return -ENODEV; -} /* netwave_pcmcia_config */ - -/* - * Function netwave_release (arg) - * - * After a card is removed, netwave_release() will unregister the net - * device, and release the PCMCIA configuration. If the device is - * still open, this will be postponed until it is closed. - */ -static void netwave_release(struct pcmcia_device *link) -{ - struct net_device *dev = link->priv; - netwave_private *priv = netdev_priv(dev); - - dev_dbg(&link->dev, "netwave_release\n"); - - pcmcia_disable_device(link); - if (link->win) - iounmap(priv->ramBase); -} - -static int netwave_suspend(struct pcmcia_device *link) -{ - struct net_device *dev = link->priv; - - if (link->open) - netif_device_detach(dev); - - return 0; -} - -static int netwave_resume(struct pcmcia_device *link) -{ - struct net_device *dev = link->priv; - - if (link->open) { - netwave_reset(dev); - netif_device_attach(dev); - } - - return 0; -} - - -/* - * Function netwave_doreset (ioBase, ramBase) - * - * Proper hardware reset of the card. - */ -static void netwave_doreset(unsigned int ioBase, u_char __iomem *ramBase) -{ - /* Reset card */ - wait_WOC(ioBase); - outb(0x80, ioBase + NETWAVE_REG_PMR); - writeb(0x08, ramBase + NETWAVE_EREG_ASCC); /* Bit 3 is WOC */ - outb(0x0, ioBase + NETWAVE_REG_PMR); /* release reset */ -} - -/* - * Function netwave_reset (dev) - * - * Reset and restore all of the netwave registers - */ -static void netwave_reset(struct net_device *dev) { - /* u_char state; */ - netwave_private *priv = netdev_priv(dev); - u_char __iomem *ramBase = priv->ramBase; - unsigned int iobase = dev->base_addr; - - pr_debug("netwave_reset: Done with hardware reset\n"); - - priv->timeoutCounter = 0; - - /* Reset card */ - netwave_doreset(iobase, ramBase); - printk(KERN_DEBUG "netwave_reset: Done with hardware reset\n"); - - /* Write a NOP to check the card */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_NOP, ramBase + NETWAVE_EREG_CB + 0); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); - - /* Set receive conf */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_SRC, ramBase + NETWAVE_EREG_CB + 0); - writeb(rxConfRxEna + rxConfBcast, ramBase + NETWAVE_EREG_CB + 1); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2); - - /* Set transmit conf */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_STC, ramBase + NETWAVE_EREG_CB + 0); - writeb(txConfTxEna, ramBase + NETWAVE_EREG_CB + 1); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2); - - /* Now set the MU Domain */ - printk(KERN_DEBUG "Setting domain to 0x%x%02x\n", (domain >> 8) & 0x01, domain & 0xff); - wait_WOC(iobase); - writeb(NETWAVE_CMD_SMD, ramBase + NETWAVE_EREG_CB + 0); - writeb(domain & 0xff, ramBase + NETWAVE_EREG_CB + 1); - writeb((domain>>8) & 0x01, ramBase + NETWAVE_EREG_CB + 2); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3); - - /* Set scramble key */ - printk(KERN_DEBUG "Setting scramble key to 0x%x\n", scramble_key); - wait_WOC(iobase); - writeb(NETWAVE_CMD_SSK, ramBase + NETWAVE_EREG_CB + 0); - writeb(scramble_key & 0xff, ramBase + NETWAVE_EREG_CB + 1); - writeb((scramble_key>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3); - - /* Enable interrupts, bit 4 high to keep unused - * source from interrupting us, bit 2 high to - * set interrupt enable, 567 to enable TxDN, - * RxErr and RxRdy - */ - wait_WOC(iobase); - outb(imrConfIENA+imrConfRFU1, iobase + NETWAVE_REG_IMR); - - /* Hent 4 bytes fra 0x170. Skal vaere 0a,29,88,36 - * waitWOC - * skriv 80 til d000:3688 - * sjekk om det ble 80 - */ - - /* Enable Receiver */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_ER, ramBase + NETWAVE_EREG_CB + 0); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); - - /* Set the IENA bit in COR */ - wait_WOC(iobase); - outb(corConfIENA + corConfLVLREQ, iobase + NETWAVE_REG_COR); -} - -/* - * Function netwave_hw_xmit (data, len, dev) - */ -static int netwave_hw_xmit(unsigned char* data, int len, - struct net_device* dev) { - unsigned long flags; - unsigned int TxFreeList, - curBuff, - MaxData, - DataOffset; - int tmpcount; - - netwave_private *priv = netdev_priv(dev); - u_char __iomem * ramBase = priv->ramBase; - unsigned int iobase = dev->base_addr; - - /* Disable interrupts & save flags */ - spin_lock_irqsave(&priv->spinlock, flags); - - /* Check if there are transmit buffers available */ - wait_WOC(iobase); - if ((inb(iobase+NETWAVE_REG_ASR) & NETWAVE_ASR_TXBA) == 0) { - /* No buffers available */ - printk(KERN_DEBUG "netwave_hw_xmit: %s - no xmit buffers available.\n", - dev->name); - spin_unlock_irqrestore(&priv->spinlock, flags); - return 1; - } - - dev->stats.tx_bytes += len; - - pr_debug("Transmitting with SPCQ %x SPU %x LIF %x ISPLQ %x\n", - readb(ramBase + NETWAVE_EREG_SPCQ), - readb(ramBase + NETWAVE_EREG_SPU), - readb(ramBase + NETWAVE_EREG_LIF), - readb(ramBase + NETWAVE_EREG_ISPLQ)); - - /* Now try to insert it into the adapters free memory */ - wait_WOC(iobase); - TxFreeList = get_uint16(ramBase + NETWAVE_EREG_TDP); - MaxData = get_uint16(ramBase + NETWAVE_EREG_TDP+2); - DataOffset = get_uint16(ramBase + NETWAVE_EREG_TDP+4); - - pr_debug("TxFreeList %x, MaxData %x, DataOffset %x\n", - TxFreeList, MaxData, DataOffset); - - /* Copy packet to the adapter fragment buffers */ - curBuff = TxFreeList; - tmpcount = 0; - while (tmpcount < len) { - int tmplen = len - tmpcount; - copy_to_pc(ramBase + curBuff + DataOffset, data + tmpcount, - (tmplen < MaxData) ? tmplen : MaxData); - tmpcount += MaxData; - - /* Advance to next buffer */ - curBuff = get_uint16(ramBase + curBuff); - } - - /* Now issue transmit list */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_TL, ramBase + NETWAVE_EREG_CB + 0); - writeb(len & 0xff, ramBase + NETWAVE_EREG_CB + 1); - writeb((len>>8) & 0xff, ramBase + NETWAVE_EREG_CB + 2); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 3); - - spin_unlock_irqrestore(&priv->spinlock, flags); - return 0; -} - -static netdev_tx_t netwave_start_xmit(struct sk_buff *skb, - struct net_device *dev) { - /* This flag indicate that the hardware can't perform a transmission. - * Theoritically, NET3 check it before sending a packet to the driver, - * but in fact it never do that and pool continuously. - * As the watchdog will abort too long transmissions, we are quite safe... - */ - - netif_stop_queue(dev); - - { - short length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; - unsigned char* buf = skb->data; - - if (netwave_hw_xmit( buf, length, dev) == 1) { - /* Some error, let's make them call us another time? */ - netif_start_queue(dev); - } - dev->trans_start = jiffies; - } - dev_kfree_skb(skb); - - return NETDEV_TX_OK; -} /* netwave_start_xmit */ - -/* - * Function netwave_interrupt (irq, dev_id) - * - * This function is the interrupt handler for the Netwave card. This - * routine will be called whenever: - * 1. A packet is received. - * 2. A packet has successfully been transferred and the unit is - * ready to transmit another packet. - * 3. A command has completed execution. - */ -static irqreturn_t netwave_interrupt(int irq, void* dev_id) -{ - unsigned int iobase; - u_char __iomem *ramBase; - struct net_device *dev = (struct net_device *)dev_id; - struct netwave_private *priv = netdev_priv(dev); - struct pcmcia_device *link = priv->p_dev; - int i; - - if (!netif_device_present(dev)) - return IRQ_NONE; - - iobase = dev->base_addr; - ramBase = priv->ramBase; - - /* Now find what caused the interrupt, check while interrupts ready */ - for (i = 0; i < 10; i++) { - u_char status; - - wait_WOC(iobase); - if (!(inb(iobase+NETWAVE_REG_CCSR) & 0x02)) - break; /* None of the interrupt sources asserted (normal exit) */ - - status = inb(iobase + NETWAVE_REG_ASR); - - if (!pcmcia_dev_present(link)) { - pr_debug("netwave_interrupt: Interrupt with status 0x%x " - "from removed or suspended card!\n", status); - break; - } - - /* RxRdy */ - if (status & 0x80) { - netwave_rx(dev); - /* wait_WOC(iobase); */ - /* RxRdy cannot be reset directly by the host */ - } - /* RxErr */ - if (status & 0x40) { - u_char rser; - - rser = readb(ramBase + NETWAVE_EREG_RSER); - - if (rser & 0x04) { - ++dev->stats.rx_dropped; - ++dev->stats.rx_crc_errors; - } - if (rser & 0x02) - ++dev->stats.rx_frame_errors; - - /* Clear the RxErr bit in RSER. RSER+4 is the - * write part. Also clear the RxCRC (0x04) and - * RxBig (0x02) bits if present */ - wait_WOC(iobase); - writeb(0x40 | (rser & 0x06), ramBase + NETWAVE_EREG_RSER + 4); - - /* Write bit 6 high to ASCC to clear RxErr in ASR, - * WOC must be set first! - */ - wait_WOC(iobase); - writeb(0x40, ramBase + NETWAVE_EREG_ASCC); - - /* Remember to count up dev->stats on error packets */ - ++dev->stats.rx_errors; - } - /* TxDN */ - if (status & 0x20) { - int txStatus; - - txStatus = readb(ramBase + NETWAVE_EREG_TSER); - pr_debug("Transmit done. TSER = %x id %x\n", - txStatus, readb(ramBase + NETWAVE_EREG_TSER + 1)); - - if (txStatus & 0x20) { - /* Transmitting was okay, clear bits */ - wait_WOC(iobase); - writeb(0x2f, ramBase + NETWAVE_EREG_TSER + 4); - ++dev->stats.tx_packets; - } - - if (txStatus & 0xd0) { - if (txStatus & 0x80) { - ++dev->stats.collisions; /* Because of /proc/net/dev*/ - /* ++dev->stats.tx_aborted_errors; */ - /* printk("Collision. %ld\n", jiffies - dev->trans_start); */ - } - if (txStatus & 0x40) - ++dev->stats.tx_carrier_errors; - /* 0x80 TxGU Transmit giveup - nine times and no luck - * 0x40 TxNOAP No access point. Discarded packet. - * 0x10 TxErr Transmit error. Always set when - * TxGU and TxNOAP is set. (Those are the only ones - * to set TxErr). - */ - pr_debug("netwave_interrupt: TxDN with error status %x\n", - txStatus); - - /* Clear out TxGU, TxNOAP, TxErr and TxTrys */ - wait_WOC(iobase); - writeb(0xdf & txStatus, ramBase+NETWAVE_EREG_TSER+4); - ++dev->stats.tx_errors; - } - pr_debug("New status is TSER %x ASR %x\n", - readb(ramBase + NETWAVE_EREG_TSER), - inb(iobase + NETWAVE_REG_ASR)); - - netif_wake_queue(dev); - } - /* TxBA, this would trigger on all error packets received */ - /* if (status & 0x01) { - pr_debug("Transmit buffers available, %x\n", status); - } - */ - } - /* Handled if we looped at least one time - Jean II */ - return IRQ_RETVAL(i); -} /* netwave_interrupt */ - -/* - * Function netwave_watchdog (a) - * - * Watchdog : when we start a transmission, we set a timer in the - * kernel. If the transmission complete, this timer is disabled. If - * it expire, we reset the card. - * - */ -static void netwave_watchdog(struct net_device *dev) { - - pr_debug("%s: netwave_watchdog: watchdog timer expired\n", dev->name); - netwave_reset(dev); - dev->trans_start = jiffies; - netif_wake_queue(dev); -} /* netwave_watchdog */ - -static int netwave_rx(struct net_device *dev) -{ - netwave_private *priv = netdev_priv(dev); - u_char __iomem *ramBase = priv->ramBase; - unsigned int iobase = dev->base_addr; - u_char rxStatus; - struct sk_buff *skb = NULL; - unsigned int curBuffer, - rcvList; - int rcvLen; - int tmpcount = 0; - int dataCount, dataOffset; - int i; - u_char *ptr; - - pr_debug("xinw_rx: Receiving ... \n"); - - /* Receive max 10 packets for now. */ - for (i = 0; i < 10; i++) { - /* Any packets? */ - wait_WOC(iobase); - rxStatus = readb(ramBase + NETWAVE_EREG_RSER); - if ( !( rxStatus & 0x80)) /* No more packets */ - break; - - /* Check if multicast/broadcast or other */ - /* multicast = (rxStatus & 0x20); */ - - /* The receive list pointer and length of the packet */ - wait_WOC(iobase); - rcvLen = get_int16( ramBase + NETWAVE_EREG_RDP); - rcvList = get_uint16( ramBase + NETWAVE_EREG_RDP + 2); - - if (rcvLen < 0) { - printk(KERN_DEBUG "netwave_rx: Receive packet with len %d\n", - rcvLen); - return 0; - } - - skb = dev_alloc_skb(rcvLen+5); - if (skb == NULL) { - pr_debug("netwave_rx: Could not allocate an sk_buff of " - "length %d\n", rcvLen); - ++dev->stats.rx_dropped; - /* Tell the adapter to skip the packet */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_SRP, ramBase + NETWAVE_EREG_CB + 0); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); - return 0; - } - - skb_reserve( skb, 2); /* Align IP on 16 byte */ - skb_put( skb, rcvLen); - - /* Copy packet fragments to the skb data area */ - ptr = (u_char*) skb->data; - curBuffer = rcvList; - tmpcount = 0; - while ( tmpcount < rcvLen) { - /* Get length and offset of current buffer */ - dataCount = get_uint16( ramBase+curBuffer+2); - dataOffset = get_uint16( ramBase+curBuffer+4); - - copy_from_pc( ptr + tmpcount, - ramBase+curBuffer+dataOffset, dataCount); - - tmpcount += dataCount; - - /* Point to next buffer */ - curBuffer = get_uint16(ramBase + curBuffer); - } - - skb->protocol = eth_type_trans(skb,dev); - /* Queue packet for network layer */ - netif_rx(skb); - - dev->stats.rx_packets++; - dev->stats.rx_bytes += rcvLen; - - /* Got the packet, tell the adapter to skip it */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_SRP, ramBase + NETWAVE_EREG_CB + 0); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 1); - pr_debug("Packet reception ok\n"); - } - return 0; -} - -static int netwave_open(struct net_device *dev) { - netwave_private *priv = netdev_priv(dev); - struct pcmcia_device *link = priv->p_dev; - - dev_dbg(&link->dev, "netwave_open: starting.\n"); - - if (!pcmcia_dev_present(link)) - return -ENODEV; - - link->open++; - - netif_start_queue(dev); - netwave_reset(dev); - - return 0; -} - -static int netwave_close(struct net_device *dev) { - netwave_private *priv = netdev_priv(dev); - struct pcmcia_device *link = priv->p_dev; - - dev_dbg(&link->dev, "netwave_close: finishing.\n"); - - link->open--; - netif_stop_queue(dev); - - return 0; -} - -static struct pcmcia_device_id netwave_ids[] = { - PCMCIA_DEVICE_PROD_ID12("Xircom", "CreditCard Netwave", 0x2e3ee845, 0x54e28a28), - PCMCIA_DEVICE_NULL, -}; -MODULE_DEVICE_TABLE(pcmcia, netwave_ids); - -static struct pcmcia_driver netwave_driver = { - .owner = THIS_MODULE, - .drv = { - .name = "netwave_cs", - }, - .probe = netwave_probe, - .remove = netwave_detach, - .id_table = netwave_ids, - .suspend = netwave_suspend, - .resume = netwave_resume, -}; - -static int __init init_netwave_cs(void) -{ - return pcmcia_register_driver(&netwave_driver); -} - -static void __exit exit_netwave_cs(void) -{ - pcmcia_unregister_driver(&netwave_driver); -} - -module_init(init_netwave_cs); -module_exit(exit_netwave_cs); - -/* Set or clear the multicast filter for this adaptor. - num_addrs == -1 Promiscuous mode, receive all packets - num_addrs == 0 Normal mode, clear multicast list - num_addrs > 0 Multicast mode, receive normal and MC packets, and do - best-effort filtering. - */ -static void set_multicast_list(struct net_device *dev) -{ - unsigned int iobase = dev->base_addr; - netwave_private *priv = netdev_priv(dev); - u_char __iomem * ramBase = priv->ramBase; - u_char rcvMode = 0; - -#ifdef PCMCIA_DEBUG - { - xstatic int old; - if (old != netdev_mc_count(dev)) { - old = netdev_mc_count(dev); - pr_debug("%s: setting Rx mode to %d addresses.\n", - dev->name, netdev_mc_count(dev)); - } - } -#endif - - if (!netdev_mc_empty(dev) || (dev->flags & IFF_ALLMULTI)) { - /* Multicast Mode */ - rcvMode = rxConfRxEna + rxConfAMP + rxConfBcast; - } else if (dev->flags & IFF_PROMISC) { - /* Promiscous mode */ - rcvMode = rxConfRxEna + rxConfPro + rxConfAMP + rxConfBcast; - } else { - /* Normal mode */ - rcvMode = rxConfRxEna + rxConfBcast; - } - - /* printk("netwave set_multicast_list: rcvMode to %x\n", rcvMode);*/ - /* Now set receive mode */ - wait_WOC(iobase); - writeb(NETWAVE_CMD_SRC, ramBase + NETWAVE_EREG_CB + 0); - writeb(rcvMode, ramBase + NETWAVE_EREG_CB + 1); - writeb(NETWAVE_CMD_EOC, ramBase + NETWAVE_EREG_CB + 2); -} -MODULE_LICENSE("GPL"); -- cgit v0.10.2 From 97b9e5ae4039ab32ea5fcef999f6e54ca4af5c94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Wed, 5 May 2010 13:54:08 -0700 Subject: Staging: crystalhd: fix missing semicolon MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A semicolon is missing at the end of a statement, but it does compile fine without it as the macro BCMLOG_ERR expands to a do {...} while (0); Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/crystalhd/crystalhd_cmds.c b/drivers/staging/crystalhd/crystalhd_cmds.c index d826715..1a7ca8b 100644 --- a/drivers/staging/crystalhd/crystalhd_cmds.c +++ b/drivers/staging/crystalhd/crystalhd_cmds.c @@ -309,7 +309,7 @@ static BC_STATUS bc_cproc_download_fw(struct crystalhd_cmd *ctx, idata->add_cdata_sz); if (sts != BC_STS_SUCCESS) { - BCMLOG_ERR("Firmware Download Failure!! - %d\n", sts) + BCMLOG_ERR("Firmware Download Failure!! - %d\n", sts); } else ctx->state |= BC_LINK_INIT; -- cgit v0.10.2 From 67b0e64a7b219550cc3378800f680e2bb86a10f9 Mon Sep 17 00:00:00 2001 From: Mark Rankilor Date: Thu, 6 May 2010 17:36:38 +0800 Subject: Staging: comedi: Fixed printk call lengths and log levels This is a patch to include log levels and fix some over length lines in printk calls in drivers.c Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index 1f48b6d..4a29ed7 100644 --- a/drivers/staging/comedi/drivers.c +++ b/drivers/staging/comedi/drivers.c @@ -95,7 +95,8 @@ static void __comedi_device_detach(struct comedi_device *dev) if (dev->driver) dev->driver->detach(dev); else - printk(KERN_WARNING "BUG: dev->driver=NULL in comedi_device_detach()\n"); + printk(KERN_WARNING + "BUG: dev->driver=NULL in comedi_device_detach()\n"); cleanup_device(dev); } @@ -148,7 +149,8 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it) /* report valid board names before returning error */ for (driv = comedi_drivers; driv; driv = driv->next) { if (!try_module_get(driv->module)) { - printk(KERN_INFO "comedi: failed to increment module count\n"); + printk(KERN_INFO + "comedi: failed to increment module count\n"); continue; } comedi_report_boards(driv); @@ -250,7 +252,8 @@ static int postconfig(struct comedi_device *dev) async = kzalloc(sizeof(struct comedi_async), GFP_KERNEL); if (async == NULL) { - printk(KERN_INFO "failed to allocate async struct\n"); + printk(KERN_INFO + "failed to allocate async struct\n"); return -ENOMEM; } init_waitqueue_head(&async->wait_head); @@ -560,7 +563,8 @@ static unsigned int comedi_buf_munge(struct comedi_async *async, block_size = num_bytes - count; if (block_size < 0) { - printk(KERN_WARNING "%s: %s: bug! block_size is negative\n", + printk(KERN_WARNING + "%s: %s: bug! block_size is negative\n", __FILE__, __func__); break; } @@ -679,8 +683,8 @@ unsigned comedi_buf_read_free(struct comedi_async *async, unsigned int nbytes) smp_mb(); if ((int)(async->buf_read_count + nbytes - async->buf_read_alloc_count) > 0) { - printk - ("comedi: attempted to read-free more bytes than have been read-allocated.\n"); + printk(KERN_INFO + "comedi: attempted to read-free more bytes than have been read-allocated.\n"); nbytes = async->buf_read_alloc_count - async->buf_read_count; } async->buf_read_count += nbytes; -- cgit v0.10.2 From 5e220112c8c8e59c253f6ad473687444b3ca90bf Mon Sep 17 00:00:00 2001 From: Mark Rankilor Date: Thu, 6 May 2010 17:49:37 +0800 Subject: Staging: comedi: Fixed long line length in comedidev.h This patch fixes a long line length in comedidev.h to make checkpatch.pl happy Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedidev.h b/drivers/staging/comedi/comedidev.h index c38ebb4..4eb2b77 100644 --- a/drivers/staging/comedi/comedidev.h +++ b/drivers/staging/comedi/comedidev.h @@ -374,7 +374,9 @@ enum subdevice_runflags { SRF_RUNNING = 0x08000000 }; -int comedi_check_chanlist(struct comedi_subdevice *s, int n, unsigned int *chanlist); +int comedi_check_chanlist(struct comedi_subdevice *s, + int n, + unsigned int *chanlist); unsigned comedi_get_subdevice_runflags(struct comedi_subdevice *s); /* range stuff */ -- cgit v0.10.2 From e012b4c41987c40cc2dd82ab48e0569f1d7aa970 Mon Sep 17 00:00:00 2001 From: Mark Rankilor Date: Thu, 6 May 2010 18:07:44 +0800 Subject: Staging: comedi: Fixed long line lengths in comedi.h This patches fixes some of the long line lengths that checkpatch.pl was complaining about in comedi.h Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index 8e4caaa..20a6fee 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -46,8 +46,10 @@ #define COMEDI_DEVCONF_AUX_DATA2_LENGTH 26 #define COMEDI_DEVCONF_AUX_DATA1_LENGTH 27 #define COMEDI_DEVCONF_AUX_DATA0_LENGTH 28 -#define COMEDI_DEVCONF_AUX_DATA_HI 29 /* most significant 32 bits of pointer address (if needed) */ -#define COMEDI_DEVCONF_AUX_DATA_LO 30 /* least significant 32 bits of pointer address */ +/* most significant 32 bits of pointer address (if needed) */ +#define COMEDI_DEVCONF_AUX_DATA_HI 29 +/* least significant 32 bits of pointer address */ +#define COMEDI_DEVCONF_AUX_DATA_LO 30 #define COMEDI_DEVCONF_AUX_DATA_LENGTH 31 /* total data length */ /* max length of device and driver names */ @@ -55,8 +57,10 @@ /* packs and unpacks a channel/range number */ -#define CR_PACK(chan, rng, aref) ((((aref)&0x3)<<24) | (((rng)&0xff)<<16) | (chan)) -#define CR_PACK_FLAGS(chan, range, aref, flags) (CR_PACK(chan, range, aref) | ((flags) & CR_FLAGS_MASK)) +#define CR_PACK(chan, rng, aref) \ + ((((aref)&0x3)<<24) | (((rng)&0xff)<<16) | (chan)) +#define CR_PACK_FLAGS(chan, range, aref, flags) \ + (CR_PACK(chan, range, aref) | ((flags) & CR_FLAGS_MASK)) #define CR_CHAN(a) ((a)&0xffff) #define CR_RANGE(a) (((a)>>16)&0xff) @@ -125,7 +129,8 @@ /* command flags */ /* These flags are used in comedi_cmd structures */ -#define CMDF_PRIORITY 0x00000008 /* try to use a real-time interrupt while performing command */ +/* try to use a real-time interrupt while performing command */ +#define CMDF_PRIORITY 0x00000008 #define TRIG_RT CMDF_PRIORITY /* compatibility definition */ @@ -242,15 +247,18 @@ INSN_CONFIG_DISARM = 32, INSN_CONFIG_GET_COUNTER_STATUS = 33, INSN_CONFIG_RESET = 34, - INSN_CONFIG_GPCT_SINGLE_PULSE_GENERATOR = 1001, /* Use CTR as single pulsegenerator */ - INSN_CONFIG_GPCT_PULSE_TRAIN_GENERATOR = 1002, /* Use CTR as pulsetraingenerator */ - INSN_CONFIG_GPCT_QUADRATURE_ENCODER = 1003, /* Use the counter as encoder */ + /* Use CTR as single pulsegenerator */ + INSN_CONFIG_GPCT_SINGLE_PULSE_GENERATOR = 1001, + /* Use CTR as pulsetraingenerator */ + INSN_CONFIG_GPCT_PULSE_TRAIN_GENERATOR = 1002, + /* Use the counter as encoder */ + INSN_CONFIG_GPCT_QUADRATURE_ENCODER = 1003, INSN_CONFIG_SET_GATE_SRC = 2001, /* Set gate source */ INSN_CONFIG_GET_GATE_SRC = 2002, /* Get gate source */ INSN_CONFIG_SET_CLOCK_SRC = 2003, /* Set master clock source */ INSN_CONFIG_GET_CLOCK_SRC = 2004, /* Get master clock source */ INSN_CONFIG_SET_OTHER_SRC = 2005, /* Set other source */ - /* INSN_CONFIG_GET_OTHER_SRC = 2006,*//* Get other source */ + /* INSN_CONFIG_GET_OTHER_SRC = 2006,*//* Get other source */ INSN_CONFIG_GET_HARDWARE_BUFFER_SIZE = 2006, /* Get size in bytes of subdevice's on-board fifos used during -- cgit v0.10.2 From 043142680ae9493fbfc635c5c4c8a4feb8a0a5f5 Mon Sep 17 00:00:00 2001 From: Randy Dunlap Date: Wed, 5 May 2010 15:45:22 -0700 Subject: Staging: rar_register: depends on PCI rar_register driver uses PCI interfaces and PCI devices, so it should depend on PCI. Also format the Kconfig help text as normally done. drivers/staging/rar_register/rar_register.c:623: error: implicit declaration of function 'pci_dev_get' drivers/staging/rar_register/rar_register.c:623: warning: assignment makes pointer from integer without a cast Signed-off-by: Randy Dunlap Acked-by: Alan Cox Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rar_register/Kconfig b/drivers/staging/rar_register/Kconfig index 3f73839..e9c2773 100644 --- a/drivers/staging/rar_register/Kconfig +++ b/drivers/staging/rar_register/Kconfig @@ -8,23 +8,23 @@ menu "RAR Register Driver" # config RAR_REGISTER tristate "Restricted Access Region Register Driver" + depends on PCI default n ---help--- - This driver allows other kernel drivers access to the - contents of the restricted access region control - registers. + This driver allows other kernel drivers access to the + contents of the restricted access region control registers. - The restricted access region control registers - (rar_registers) are used to pass address and - locking information on restricted access regions - to other drivers that use restricted access regions + The restricted access region control registers + (rar_registers) are used to pass address and + locking information on restricted access regions + to other drivers that use restricted access regions. - The restricted access regions are regions of memory - on the Intel MID Platform that are not accessible to - the x86 processor, but are accessible to dedicated - processors on board peripheral devices. + The restricted access regions are regions of memory + on the Intel MID Platform that are not accessible to + the x86 processor, but are accessible to dedicated + processors on board peripheral devices. - The purpose of the restricted access regions is to - protect sensitive data from compromise by unauthorized - programs running on the x86 processor. + The purpose of the restricted access regions is to + protect sensitive data from compromise by unauthorized + programs running on the x86 processor. endmenu -- cgit v0.10.2 From de37cd49b5a54facef174cf34496919857436e8f Mon Sep 17 00:00:00 2001 From: Nobuhiro KUSUNO Date: Thu, 6 May 2010 05:23:28 +0900 Subject: Staging: rt2870: add device ID of MelCo.,Inc. WLI-UC-G301N My wireless LAN module 'MelCo.,Inc. WLI-UC-G301N' works fine, if the following line is added into 2870_main_dev.c. Signed-off-by: Nobhiro KUSUNO Cc: stable Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rt2860/usb_main_dev.c b/drivers/staging/rt2860/usb_main_dev.c index abe9f24..c6be884 100644 --- a/drivers/staging/rt2860/usb_main_dev.c +++ b/drivers/staging/rt2860/usb_main_dev.c @@ -97,6 +97,7 @@ struct usb_device_id rtusb_usb_id[] = { {USB_DEVICE(0x5A57, 0x0282)}, /* Zinwell */ {USB_DEVICE(0x7392, 0x7718)}, {USB_DEVICE(0x7392, 0x7717)}, + {USB_DEVICE(0x0411, 0x016f)}, /* MelCo.,Inc. WLI-UC-G301N */ {USB_DEVICE(0x1737, 0x0070)}, /* Linksys WUSB100 */ {USB_DEVICE(0x1737, 0x0071)}, /* Linksys WUSB600N */ {USB_DEVICE(0x0411, 0x00e8)}, /* Buffalo WLI-UC-G300N */ -- cgit v0.10.2 From adaaa0c6ab89e82684389b80002bce893179cf2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20L=C3=BCssing?= Date: Fri, 7 May 2010 21:47:06 +0200 Subject: Staging: batman-adv: only modify hna-table on active module MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If we haven't set the module to MODULE_ACTIVE state before (in general, no interface has yet been added to batman-adv) then the hna table is not initialised yet. If the kernel changes the mac address of the bat0 interface at this moment then an hna_local_add() called by interface_set_mac_addr() then resulted in a null pointer derefernce. With this patch we are now explicitly checking before if the state is MODULE_ACTIVE right now so that we can assume having an initialised hna table. Signed-off-by: Linus Lüssing Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/soft-interface.c b/drivers/staging/batman-adv/soft-interface.c index 0e2307f..a42b21f 100644 --- a/drivers/staging/batman-adv/soft-interface.c +++ b/drivers/staging/batman-adv/soft-interface.c @@ -152,9 +152,13 @@ int interface_set_mac_addr(struct net_device *dev, void *p) if (!is_valid_ether_addr(addr->sa_data)) return -EADDRNOTAVAIL; - hna_local_remove(dev->dev_addr, "mac address changed"); + /* only modify hna-table if it has been initialised before */ + if (atomic_read(&module_state) == MODULE_ACTIVE) { + hna_local_remove(dev->dev_addr, "mac address changed"); + hna_local_add(addr->sa_data); + } + memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); - hna_local_add(dev->dev_addr); return 0; } -- cgit v0.10.2 From f347b8736f176681fbfc666bf00165125a3274a5 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Fri, 7 May 2010 21:47:07 +0200 Subject: Staging: batman-adv: Clone shared bat packets before modifying them "tcpdump" and "batctl td" will receive packets with a wrong sequence number on systems with a different endianess than network byte order. This happens due to the reordering of bytes in the function which handles aggregated bat packets. The function which receives the bat packets must ensure that these buffers aren't shared with anything else before that function tries to write into it. Otherwise it has to copy the buffers so it is save again to change them. Reported-by: Kevin Steen Signed-off-by: Sven Eckelmann Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/routing.c b/drivers/staging/batman-adv/routing.c index d89048b..39dd093 100644 --- a/drivers/staging/batman-adv/routing.c +++ b/drivers/staging/batman-adv/routing.c @@ -549,6 +549,7 @@ int recv_bat_packet(struct sk_buff *skb, { struct ethhdr *ethhdr; unsigned long flags; + struct sk_buff *skb_old; /* drop packet if it has not necessary minimum size */ if (skb_headlen(skb) < sizeof(struct batman_packet)) @@ -564,12 +565,19 @@ int recv_bat_packet(struct sk_buff *skb, if (is_bcast(ethhdr->h_source)) return NET_RX_DROP; - spin_lock_irqsave(&orig_hash_lock, flags); /* TODO: we use headlen instead of "length", because * only this data is paged in. */ - /* TODO: is another skb_copy needed here? there will be - * written on the data, but nobody (?) should further use - * this data */ + + /* create a copy of the skb, if needed, to modify it. */ + if (!skb_clone_writable(skb, skb_headlen(skb))) { + skb_old = skb; + skb = skb_copy(skb, GFP_ATOMIC); + if (!skb) + return NET_RX_DROP; + kfree_skb(skb_old); + } + + spin_lock_irqsave(&orig_hash_lock, flags); receive_aggr_bat_packet(ethhdr, skb->data, skb_headlen(skb), -- cgit v0.10.2 From bd13b616aa9d082dce760759b7473da5ed399452 Mon Sep 17 00:00:00 2001 From: Marek Lindner Date: Fri, 7 May 2010 21:47:08 +0200 Subject: Staging: batman-adv: fix aggregation timing bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit batman-adv aggregates routing packets to reduce the number of packets in the air. Every outgoing packet is compared with other packets in the buffer to determine whether it can be aggregated or not. Packets sent at a lower interval can be held back longer to maximize the aggregation. Due to insufficient checking batman-adv held back all packets for a certain time depending on its own lowest interval rate which slowed down all other nodes. Reported-by: Linus Lüssing Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/aggregation.c b/drivers/staging/batman-adv/aggregation.c index 7917322..d25e5a8 100644 --- a/drivers/staging/batman-adv/aggregation.c +++ b/drivers/staging/batman-adv/aggregation.c @@ -52,6 +52,8 @@ static bool can_aggregate_with(struct batman_packet *new_batman_packet, */ if (time_before(send_time, forw_packet->send_time) && + time_after_eq(send_time + msecs_to_jiffies(MAX_AGGREGATION_MS), + forw_packet->send_time) && (aggregated_bytes <= MAX_AGGREGATION_BYTES)) { /** @@ -195,6 +197,16 @@ void add_bat_packet_to_list(unsigned char *packet_buff, int packet_len, if (forw_packet_aggr == NULL) { /* the following section can run without the lock */ spin_unlock_irqrestore(&forw_bat_list_lock, flags); + + /** + * if we could not aggregate this packet with one of the others + * we hold it back for a while, so that it might be aggregated + * later on + */ + if ((!own_packet) && + (atomic_read(&bat_priv->aggregation_enabled))) + send_time += msecs_to_jiffies(MAX_AGGREGATION_MS); + new_aggregated_packet(packet_buff, packet_len, send_time, direct_link, if_incoming, own_packet); diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index ff7b1f1..d356ce7 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -46,15 +46,7 @@ static unsigned long own_send_time(void) /* when do we schedule a forwarded packet to be sent */ static unsigned long forward_send_time(void) { - unsigned long send_time = jiffies; /* Starting now plus... */ - - if (atomic_read(&aggregation_enabled)) - send_time += (((MAX_AGGREGATION_MS - (JITTER/2) + - (random32() % JITTER)) * HZ) / 1000); - else - send_time += (((random32() % (JITTER/2)) * HZ) / 1000); - - return send_time; + return jiffies + (((random32() % (JITTER/2)) * HZ) / 1000); } /* send out an already prepared packet to the given address via the -- cgit v0.10.2 From bdc0c7ebf770e21d024c2e94c3d578392b59c5b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20L=C3=BCssing?= Date: Fri, 7 May 2010 21:47:09 +0200 Subject: Staging: batman-adv: Fix aggregation direct-link bug MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit So far, neighbour's secondary interface OGMs can involuntarily piggyback on primary interface OGMs that arrived on the same secondary interface before. Secondary interface OGMs should NEVER leave their direct neighbour broadcast domain! This patch ensures that secondary interface OGMs can only be aggregated to other secondary interface OGMs. Signed-off-by: Linus Lüssing Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/aggregation.c b/drivers/staging/batman-adv/aggregation.c index d25e5a8..e1bd321 100644 --- a/drivers/staging/batman-adv/aggregation.c +++ b/drivers/staging/batman-adv/aggregation.c @@ -81,9 +81,15 @@ static bool can_aggregate_with(struct batman_packet *new_batman_packet, * interface only - we still can aggregate */ if ((directlink) && (new_batman_packet->ttl == 1) && - (forw_packet->if_incoming == if_incoming)) + (forw_packet->if_incoming == if_incoming) && + + /* packets from direct neighbors or + * own secondary interface packets + * (= secondary interface packets in general) */ + (batman_packet->flags & DIRECTLINK || + (forw_packet->own && + forw_packet->if_incoming->if_num != 0))) return true; - } return false; @@ -204,7 +210,7 @@ void add_bat_packet_to_list(unsigned char *packet_buff, int packet_len, * later on */ if ((!own_packet) && - (atomic_read(&bat_priv->aggregation_enabled))) + (atomic_read(&aggregation_enabled))) send_time += msecs_to_jiffies(MAX_AGGREGATION_MS); new_aggregated_packet(packet_buff, packet_len, -- cgit v0.10.2 From 9b6d10b729276a27d7bd4ee364e6da1c1ce6c5c2 Mon Sep 17 00:00:00 2001 From: Simon Wunderlich Date: Fri, 7 May 2010 21:47:10 +0200 Subject: Staging: batman-adv: Update copyright years Signed-off-by: Simon Wunderlich Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/Makefile b/drivers/staging/batman-adv/Makefile index 42b4e63..cf2915d 100644 --- a/drivers/staging/batman-adv/Makefile +++ b/drivers/staging/batman-adv/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: +# Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: # # Marek Lindner, Simon Wunderlich # diff --git a/drivers/staging/batman-adv/aggregation.c b/drivers/staging/batman-adv/aggregation.c index e1bd321..b8338ce 100644 --- a/drivers/staging/batman-adv/aggregation.c +++ b/drivers/staging/batman-adv/aggregation.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/aggregation.h b/drivers/staging/batman-adv/aggregation.h index 6da8df9..bcd32c1 100644 --- a/drivers/staging/batman-adv/aggregation.h +++ b/drivers/staging/batman-adv/aggregation.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/bitarray.c b/drivers/staging/batman-adv/bitarray.c index 212eef9..7848305 100644 --- a/drivers/staging/batman-adv/bitarray.c +++ b/drivers/staging/batman-adv/bitarray.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2006-2010 B.A.T.M.A.N. contributors: * * Simon Wunderlich, Marek Lindner * diff --git a/drivers/staging/batman-adv/bitarray.h b/drivers/staging/batman-adv/bitarray.h index ec72dd7..76ad24c 100644 --- a/drivers/staging/batman-adv/bitarray.h +++ b/drivers/staging/batman-adv/bitarray.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2006-2010 B.A.T.M.A.N. contributors: * * Simon Wunderlich, Marek Lindner * diff --git a/drivers/staging/batman-adv/device.c b/drivers/staging/batman-adv/device.c index 2f61500..c82a5af 100644 --- a/drivers/staging/batman-adv/device.c +++ b/drivers/staging/batman-adv/device.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner * diff --git a/drivers/staging/batman-adv/device.h b/drivers/staging/batman-adv/device.h index 46c0f44..eb14b37 100644 --- a/drivers/staging/batman-adv/device.h +++ b/drivers/staging/batman-adv/device.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner * diff --git a/drivers/staging/batman-adv/hard-interface.c b/drivers/staging/batman-adv/hard-interface.c index befd488..cb9e927 100644 --- a/drivers/staging/batman-adv/hard-interface.c +++ b/drivers/staging/batman-adv/hard-interface.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/hard-interface.h b/drivers/staging/batman-adv/hard-interface.h index 97c6ecb..4100a27 100644 --- a/drivers/staging/batman-adv/hard-interface.h +++ b/drivers/staging/batman-adv/hard-interface.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/hash.c b/drivers/staging/batman-adv/hash.c index 5a2018d..d4a4adc 100644 --- a/drivers/staging/batman-adv/hash.c +++ b/drivers/staging/batman-adv/hash.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2006-2010 B.A.T.M.A.N. contributors: * * Simon Wunderlich, Marek Lindner * diff --git a/drivers/staging/batman-adv/hash.h b/drivers/staging/batman-adv/hash.h index a70d6d6..ea6d21e 100644 --- a/drivers/staging/batman-adv/hash.h +++ b/drivers/staging/batman-adv/hash.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2006-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2006-2010 B.A.T.M.A.N. contributors: * * Simon Wunderlich, Marek Lindner * diff --git a/drivers/staging/batman-adv/main.c b/drivers/staging/batman-adv/main.c index 2e0b482..a051568 100644 --- a/drivers/staging/batman-adv/main.c +++ b/drivers/staging/batman-adv/main.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 2e9bb89..c943e89 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/originator.c b/drivers/staging/batman-adv/originator.c index 29c2411..2ce1349 100644 --- a/drivers/staging/batman-adv/originator.c +++ b/drivers/staging/batman-adv/originator.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2009-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/originator.h b/drivers/staging/batman-adv/originator.h index 6ef7a05..8acebc1 100644 --- a/drivers/staging/batman-adv/originator.h +++ b/drivers/staging/batman-adv/originator.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/packet.h b/drivers/staging/batman-adv/packet.h index ad006ce..152f57b 100644 --- a/drivers/staging/batman-adv/packet.h +++ b/drivers/staging/batman-adv/packet.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/proc.c b/drivers/staging/batman-adv/proc.c index c9366bc..dfa85c4 100644 --- a/drivers/staging/batman-adv/proc.c +++ b/drivers/staging/batman-adv/proc.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/proc.h b/drivers/staging/batman-adv/proc.h index cd690e0..cf71264 100644 --- a/drivers/staging/batman-adv/proc.h +++ b/drivers/staging/batman-adv/proc.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/ring_buffer.c b/drivers/staging/batman-adv/ring_buffer.c index 751c899..defd37c 100644 --- a/drivers/staging/batman-adv/ring_buffer.c +++ b/drivers/staging/batman-adv/ring_buffer.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner * diff --git a/drivers/staging/batman-adv/ring_buffer.h b/drivers/staging/batman-adv/ring_buffer.h index 6839ba9..b8c9456 100644 --- a/drivers/staging/batman-adv/ring_buffer.h +++ b/drivers/staging/batman-adv/ring_buffer.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner * diff --git a/drivers/staging/batman-adv/routing.c b/drivers/staging/batman-adv/routing.c index 39dd093..b83e5cb 100644 --- a/drivers/staging/batman-adv/routing.c +++ b/drivers/staging/batman-adv/routing.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/routing.h b/drivers/staging/batman-adv/routing.h index 939b8d4..8288dec 100644 --- a/drivers/staging/batman-adv/routing.h +++ b/drivers/staging/batman-adv/routing.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index d356ce7..88ecb5c 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/send.h b/drivers/staging/batman-adv/send.h index 5fc6f34..b2ddf63 100644 --- a/drivers/staging/batman-adv/send.h +++ b/drivers/staging/batman-adv/send.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/soft-interface.c b/drivers/staging/batman-adv/soft-interface.c index a42b21f..0dff959 100644 --- a/drivers/staging/batman-adv/soft-interface.c +++ b/drivers/staging/batman-adv/soft-interface.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/soft-interface.h b/drivers/staging/batman-adv/soft-interface.h index c0cad81..e7f59af 100644 --- a/drivers/staging/batman-adv/soft-interface.h +++ b/drivers/staging/batman-adv/soft-interface.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner * diff --git a/drivers/staging/batman-adv/translation-table.c b/drivers/staging/batman-adv/translation-table.c index d56f665..e446d90 100644 --- a/drivers/staging/batman-adv/translation-table.c +++ b/drivers/staging/batman-adv/translation-table.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/translation-table.h b/drivers/staging/batman-adv/translation-table.h index 281125b..8568d80 100644 --- a/drivers/staging/batman-adv/translation-table.h +++ b/drivers/staging/batman-adv/translation-table.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index dec1b54..4e77141 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: * * Marek Lindner, Simon Wunderlich * diff --git a/drivers/staging/batman-adv/vis.c b/drivers/staging/batman-adv/vis.c index 28eac7e..0bfc083 100644 --- a/drivers/staging/batman-adv/vis.c +++ b/drivers/staging/batman-adv/vis.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2008-2010 B.A.T.M.A.N. contributors: * * Simon Wunderlich * diff --git a/drivers/staging/batman-adv/vis.h b/drivers/staging/batman-adv/vis.h index a1f92a4..98d8972 100644 --- a/drivers/staging/batman-adv/vis.h +++ b/drivers/staging/batman-adv/vis.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2008-2009 B.A.T.M.A.N. contributors: + * Copyright (C) 2008-2010 B.A.T.M.A.N. contributors: * * Simon Wunderlich, Marek Lindner * -- cgit v0.10.2 From b7473a38b6de6b5eda0ddbb08220f68064b47e06 Mon Sep 17 00:00:00 2001 From: Simon Wunderlich Date: Fri, 7 May 2010 21:47:11 +0200 Subject: Staging: batman-adv: remove the beta from main.h for release Signed-off-by: Simon Wunderlich Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index c943e89..5fdf5af 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -26,7 +26,7 @@ #define DRIVER_DESC "B.A.T.M.A.N. advanced" #define DRIVER_DEVICE "batman-adv" -#define SOURCE_VERSION "0.2.1-beta" +#define SOURCE_VERSION "0.2.1" /* B.A.T.M.A.N. parameters */ -- cgit v0.10.2 From 76cb4e20610a1de80fa303aaf5507a8393f927de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20L=C3=BCssing?= Date: Fri, 7 May 2010 21:47:12 +0200 Subject: Staging: batman-adv: Remove dead max addr and obsolete VIS_FORMAT strings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Max address is not being used anywhere and just misleading, therefore removing it. VIS_FORMAT string is now obsolete, so also remove it. Signed-off-by: Linus Lüssing Signed-off-by: Simon Wunderlich Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 5fdf5af..2494f5a 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -34,8 +34,6 @@ #define TQ_MAX_VALUE 255 #define JITTER 20 #define TTL 50 /* Time To Live of broadcast messages */ -#define MAX_ADDR 16 /* number of interfaces which can be added to - * batman. */ #define PURGE_TIMEOUT 200000 /* purge originators after time in ms if no * valid packet comes in -> TODO: check diff --git a/drivers/staging/batman-adv/vis.h b/drivers/staging/batman-adv/vis.h index 98d8972..4e417fb 100644 --- a/drivers/staging/batman-adv/vis.h +++ b/drivers/staging/batman-adv/vis.h @@ -20,8 +20,6 @@ */ #define VIS_TIMEOUT 200000 -#define VIS_FORMAT_DD_NAME "dot_draw" -#define VIS_FORMAT_JSON_NAME "json" struct vis_info { unsigned long first_seen; -- cgit v0.10.2 From 7742361422e5ae58e0400cf79758aefe96da51e1 Mon Sep 17 00:00:00 2001 From: Simon Wunderlich Date: Fri, 7 May 2010 21:47:13 +0200 Subject: Staging: batman-adv: Add 0.2.1 changes to the CHANGELOG Signed-off-by: Simon Wunderlich Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/CHANGELOG b/drivers/staging/batman-adv/CHANGELOG index 8a18163..c8f9d9e 100644 --- a/drivers/staging/batman-adv/CHANGELOG +++ b/drivers/staging/batman-adv/CHANGELOG @@ -1,3 +1,17 @@ +batman-adv 0.2.1: + +* support latest kernels (2.6.20 - 2.6.33) +* receive packets directly using skbs, remove old sockets and threads +* fix various regressions in the vis server +* don't disable interrupts while sending +* replace internal logging mechanism with standard kernel logging +* move vis formats into userland, one general format remains in the kernel +* allow MAC address to be set, correctly initialize them +* code refactoring and cleaning for coding style +* many bugs (null pointers, locking, hash iterators) squashed + + -- Sun, 21 Mar 2010 20:46:47 +0100 + batman-adv 0.2: * support latest kernels (2.6.20 - 2.6.31) -- cgit v0.10.2 From 43fb98fb2125dbf49f66e7ead31885311c670d14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20L=C3=BCssing?= Date: Fri, 7 May 2010 21:47:14 +0200 Subject: Staging: batman-adv: Update README about vis raw output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We are now having a newer, more neutral vis output so that we won't have to change the kernelmodule for adding support of new vis output formats. This patch adds an explanation about this in the README file of batman-adv and removes the description about the dot/json format (they will be added to the README of batctl). Signed-off-by: Linus Lüssing Signed-off-by: Simon Wunderlich Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/README b/drivers/staging/batman-adv/README index 7d666ad..e2a7271 100644 --- a/drivers/staging/batman-adv/README +++ b/drivers/staging/batman-adv/README @@ -1,4 +1,4 @@ -[state: 06-01-2010] +[state: 22-03-2010] BATMAN-ADV ---------- @@ -44,10 +44,11 @@ regular interface: # ping 192.168.0.2 ... +--- If you want topology visualization, your meshnode must be configured as VIS-server: -# echo "server" > /proc/net/batman-adv/vis +# echo "server" > /proc/net/batman-adv/vis_server Each node is either configured as "server" or as "client" (default: "client"). Clients send their topology data to the server next to them, @@ -58,12 +59,31 @@ more vis servers sharing the same (or at least very similar) data. When configured as server, you can get a topology snapshot of your mesh: -# cat /proc/net/batman-adv/vis - -The output is in a generic raw format. Use the batctl tool (See below) -to convert this to other formats more suitable for graphing, eg -graphviz dot, or JSON data-interchange format. - +# cat /proc/net/batman-adv/vis_data + +This raw output is intended to be easily parsable and convertable with +other tools. Have a look at the batctl README if you want a vis output +in dot or json format for instance and how those outputs could then be +visualised in an image. + +The raw format consists of comma seperated values per entry where each +entry is giving information about a certain source interface. Each entry +can/has to have the following values: +-> "mac" -> mac address of an originator's source interface + (each line begins with it) +-> "TQ mac value" -> src mac's link quality towards mac address of a neighbor + originator's interface which is being used for routing +-> "HNA mac" -> HNA announced by source mac +-> "PRIMARY" -> this is a primary interface +-> "SEC mac" -> secondary mac address of source (requires preceeding +-> PRIMARY) + +The TQ value has a range from 4 to 255 with 255 being the best. +The HNA entries are showing which hosts are connected to the mesh via bat0 +or being bridged into the mesh network. +The PRIMARY/SEC values are only applied on primary interfaces + +--- In very mobile scenarios, you might want to adjust the originator interval to a lower value. This will make the mesh more responsive to topology changes, but will also increase the overhead. Please make sure -- cgit v0.10.2 From 56c341d7af78f6766238725f79a1773aca942795 Mon Sep 17 00:00:00 2001 From: Simon Wunderlich Date: Fri, 7 May 2010 21:47:15 +0200 Subject: Staging: batman-adv: Changing version to 0.2.2-beta Signed-off-by: Simon Wunderlich Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 2494f5a..6221b85 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -26,7 +26,7 @@ #define DRIVER_DESC "B.A.T.M.A.N. advanced" #define DRIVER_DEVICE "batman-adv" -#define SOURCE_VERSION "0.2.1" +#define SOURCE_VERSION "0.2.2-beta" /* B.A.T.M.A.N. parameters */ -- cgit v0.10.2 From db315014ff8148e73d10e927d14c962d2cabd370 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 7 May 2010 21:47:16 +0200 Subject: Staging: batman-adv: cleanup: change test for end of array The code here is testing to see if "i" is passed the end of the array. The original code works probably, but it's not the cleanest way. Andrew Lunn suggested that I also remove all the hard coded references to 256 so I have done that as well. Signed-off-by: Dan Carpenter Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/device.c b/drivers/staging/batman-adv/device.c index c82a5af..fbfe234 100644 --- a/drivers/staging/batman-adv/device.c +++ b/drivers/staging/batman-adv/device.c @@ -44,10 +44,7 @@ static struct device_client *device_client_hash[256]; void bat_device_init(void) { - int i; - - for (i = 0; i < 256; i++) - device_client_hash[i] = NULL; + memset(device_client_hash, 0, sizeof(device_client_hash)); } int bat_device_setup(void) @@ -103,15 +100,15 @@ int bat_device_open(struct inode *inode, struct file *file) if (!device_client) return -ENOMEM; - for (i = 0; i < 256; i++) { + for (i = 0; i < ARRAY_SIZE(device_client_hash); i++) { if (!device_client_hash[i]) { device_client_hash[i] = device_client; break; } } - if (device_client_hash[i] != device_client) { - printk(KERN_ERR "batman-adv:Error - can't add another packet client: maximum number of clients reached \n"); + if (i == ARRAY_SIZE(device_client_hash)) { + printk(KERN_ERR "batman-adv:Error - can't add another packet client: maximum number of clients reached\n"); kfree(device_client); return -EXFULL; } -- cgit v0.10.2 From 0887635b26e0cb6369c0438e55d9323d3aef3f69 Mon Sep 17 00:00:00 2001 From: Luis de Bethencourt Date: Fri, 7 May 2010 21:47:17 +0200 Subject: Staging: batman-adv: fix whitespace style issues This patch fixes the 31 unnecessary whitespaces before a quoted newline that the batman-adv files had. Signed-off-by: Luis de Bethencourt [sven.eckelmann@gmx.de: Redone to apply against current version] Signed-off-by: Sven Eckelmann Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/device.c b/drivers/staging/batman-adv/device.c index fbfe234..9887f05 100644 --- a/drivers/staging/batman-adv/device.c +++ b/drivers/staging/batman-adv/device.c @@ -65,7 +65,7 @@ int bat_device_setup(void) batman_class = class_create(THIS_MODULE, "batman-adv"); if (IS_ERR(batman_class)) { - printk(KERN_ERR "batman-adv:Could not register class 'batman-adv' \n"); + printk(KERN_ERR "batman-adv:Could not register class 'batman-adv'\n"); return 0; } diff --git a/drivers/staging/batman-adv/main.c b/drivers/staging/batman-adv/main.c index a051568..881aaa9 100644 --- a/drivers/staging/batman-adv/main.c +++ b/drivers/staging/batman-adv/main.c @@ -119,7 +119,7 @@ int init_module(void) register_netdevice_notifier(&hard_if_notifier); dev_add_pack(&batman_adv_packet_type); - printk(KERN_INFO "batman-adv:B.A.T.M.A.N. advanced %s%s (compatibility version %i) loaded \n", + printk(KERN_INFO "batman-adv:B.A.T.M.A.N. advanced %s%s (compatibility version %i) loaded\n", SOURCE_VERSION, REVISION_VERSION_STR, COMPAT_VERSION); return 0; diff --git a/drivers/staging/batman-adv/originator.c b/drivers/staging/batman-adv/originator.c index 2ce1349..f3d8cc3 100644 --- a/drivers/staging/batman-adv/originator.c +++ b/drivers/staging/batman-adv/originator.c @@ -126,7 +126,7 @@ struct orig_node *get_orig_node(uint8_t *addr) if (orig_node != NULL) return orig_node; - bat_dbg(DBG_BATMAN, "Creating new originator: %pM \n", addr); + bat_dbg(DBG_BATMAN, "Creating new originator: %pM\n", addr); orig_node = kzalloc(sizeof(struct orig_node), GFP_ATOMIC); if (!orig_node) @@ -158,7 +158,7 @@ struct orig_node *get_orig_node(uint8_t *addr) if (swaphash == NULL) printk(KERN_ERR - "batman-adv:Couldn't resize orig hash table \n"); + "batman-adv:Couldn't resize orig hash table\n"); else orig_hash = swaphash; } diff --git a/drivers/staging/batman-adv/routing.c b/drivers/staging/batman-adv/routing.c index b83e5cb..a78ae5c 100644 --- a/drivers/staging/batman-adv/routing.c +++ b/drivers/staging/batman-adv/routing.c @@ -212,7 +212,7 @@ static int isBidirectionalNeigh(struct orig_node *orig_node, orig_neigh_node->tq_asym_penalty) / (TQ_MAX_VALUE * TQ_MAX_VALUE)); - bat_dbg(DBG_BATMAN, "bidirectional: orig = %-15pM neigh = %-15pM => own_bcast = %2i, real recv = %2i, local tq: %3i, asym_penalty: %3i, total tq: %3i \n", + bat_dbg(DBG_BATMAN, "bidirectional: orig = %-15pM neigh = %-15pM => own_bcast = %2i, real recv = %2i, local tq: %3i, asym_penalty: %3i, total tq: %3i\n", orig_node->orig, orig_neigh_node->orig, total_count, neigh_node->real_packet_count, orig_neigh_node->tq_own, orig_neigh_node->tq_asym_penalty, batman_packet->tq); @@ -234,7 +234,7 @@ static void update_orig(struct orig_node *orig_node, struct ethhdr *ethhdr, struct neigh_node *neigh_node = NULL, *tmp_neigh_node = NULL; int tmp_hna_buff_len; - bat_dbg(DBG_BATMAN, "update_originator(): Searching and updating originator entry of received packet \n"); + bat_dbg(DBG_BATMAN, "update_originator(): Searching and updating originator entry of received packet\n"); list_for_each_entry(tmp_neigh_node, &orig_node->neigh_list, list) { if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) && @@ -341,7 +341,7 @@ static char count_real_packets(struct ethhdr *ethhdr, } if (!is_duplicate) { - bat_dbg(DBG_BATMAN, "updating last_seqno: old %d, new %d \n", + bat_dbg(DBG_BATMAN, "updating last_seqno: old %d, new %d\n", orig_node->last_real_seqno, batman_packet->seqno); orig_node->last_real_seqno = batman_packet->seqno; } @@ -385,7 +385,7 @@ void receive_bat_packet(struct ethhdr *ethhdr, is_single_hop_neigh = (compare_orig(ethhdr->h_source, batman_packet->orig) ? 1 : 0); - bat_dbg(DBG_BATMAN, "Received BATMAN packet via NB: %pM, IF: %s [%s] (from OG: %pM, via prev OG: %pM, seqno %d, tq %d, TTL %d, V %d, IDF %d) \n", + bat_dbg(DBG_BATMAN, "Received BATMAN packet via NB: %pM, IF: %s [%s] (from OG: %pM, via prev OG: %pM, seqno %d, tq %d, TTL %d, V %d, IDF %d)\n", ethhdr->h_source, if_incoming->dev, if_incoming->addr_str, batman_packet->orig, batman_packet->prev_sender, batman_packet->seqno, batman_packet->tq, batman_packet->ttl, @@ -426,7 +426,7 @@ void receive_bat_packet(struct ethhdr *ethhdr, } if (is_broadcast) { - bat_dbg(DBG_BATMAN, "Drop packet: ignoring all packets with broadcast source addr (sender: %pM) \n", ethhdr->h_source); + bat_dbg(DBG_BATMAN, "Drop packet: ignoring all packets with broadcast source addr (sender: %pM)\n", ethhdr->h_source); return; } @@ -454,19 +454,19 @@ void receive_bat_packet(struct ethhdr *ethhdr, bit_packet_count(word); } - bat_dbg(DBG_BATMAN, "Drop packet: originator packet from myself (via neighbor) \n"); + bat_dbg(DBG_BATMAN, "Drop packet: originator packet from myself (via neighbor)\n"); return; } if (batman_packet->tq == 0) { count_real_packets(ethhdr, batman_packet, if_incoming); - bat_dbg(DBG_BATMAN, "Drop packet: originator packet with tq equal 0 \n"); + bat_dbg(DBG_BATMAN, "Drop packet: originator packet with tq equal 0\n"); return; } if (is_my_oldorig) { - bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast echos (sender: %pM) \n", ethhdr->h_source); + bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast echos (sender: %pM)\n", ethhdr->h_source); return; } @@ -484,7 +484,7 @@ void receive_bat_packet(struct ethhdr *ethhdr, !(compare_orig(batman_packet->orig, batman_packet->prev_sender)) && (compare_orig(orig_node->router->addr, orig_node->router->orig_node->router->addr))) { - bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast packets that may make me loop (sender: %pM) \n", ethhdr->h_source); + bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast packets that may make me loop (sender: %pM)\n", ethhdr->h_source); return; } diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index 88ecb5c..29b684b 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -290,7 +290,7 @@ void schedule_forward_packet(struct orig_node *orig_node, unsigned long send_time; if (batman_packet->ttl <= 1) { - bat_dbg(DBG_BATMAN, "ttl exceeded \n"); + bat_dbg(DBG_BATMAN, "ttl exceeded\n"); return; } @@ -318,7 +318,7 @@ void schedule_forward_packet(struct orig_node *orig_node, /* apply hop penalty */ batman_packet->tq = hop_penalty(batman_packet->tq); - bat_dbg(DBG_BATMAN, "Forwarding packet: tq_orig: %i, tq_avg: %i, tq_forw: %i, ttl_orig: %i, ttl_forw: %i \n", + bat_dbg(DBG_BATMAN, "Forwarding packet: tq_orig: %i, tq_avg: %i, tq_forw: %i, ttl_orig: %i, ttl_forw: %i\n", in_tq, tq_avg, batman_packet->tq, in_ttl - 1, batman_packet->ttl); diff --git a/drivers/staging/batman-adv/translation-table.c b/drivers/staging/batman-adv/translation-table.c index e446d90..5537846 100644 --- a/drivers/staging/batman-adv/translation-table.c +++ b/drivers/staging/batman-adv/translation-table.c @@ -77,11 +77,11 @@ void hna_local_add(uint8_t *addr) MAC-flooding. */ if ((num_hna + 1 > (ETH_DATA_LEN - BAT_PACKET_LEN) / ETH_ALEN) || (num_hna + 1 > 255)) { - bat_dbg(DBG_ROUTES, "Can't add new local hna entry (%pM): number of local hna entries exceeds packet size \n", addr); + bat_dbg(DBG_ROUTES, "Can't add new local hna entry (%pM): number of local hna entries exceeds packet size\n", addr); return; } - bat_dbg(DBG_ROUTES, "Creating new local hna entry: %pM \n", + bat_dbg(DBG_ROUTES, "Creating new local hna entry: %pM\n", addr); hna_local_entry = kmalloc(sizeof(struct hna_local_entry), GFP_ATOMIC); @@ -108,7 +108,7 @@ void hna_local_add(uint8_t *addr) hna_local_hash->size * 2); if (swaphash == NULL) - printk(KERN_ERR "batman-adv:Couldn't resize local hna hash table \n"); + printk(KERN_ERR "batman-adv:Couldn't resize local hna hash table\n"); else hna_local_hash = swaphash; } @@ -197,7 +197,7 @@ static void _hna_local_del(void *data) static void hna_local_del(struct hna_local_entry *hna_local_entry, char *message) { - bat_dbg(DBG_ROUTES, "Deleting local hna entry (%pM): %s \n", + bat_dbg(DBG_ROUTES, "Deleting local hna entry (%pM): %s\n", hna_local_entry->addr, message); hash_remove(hna_local_hash, hna_local_entry->addr); @@ -340,7 +340,7 @@ void hna_global_add_orig(struct orig_node *orig_node, hna_global_hash->size * 2); if (swaphash == NULL) - printk(KERN_ERR "batman-adv:Couldn't resize global hna hash table \n"); + printk(KERN_ERR "batman-adv:Couldn't resize global hna hash table\n"); else hna_global_hash = swaphash; } @@ -365,7 +365,7 @@ int hna_global_fill_buffer_text(unsigned char *buff, int buff_len) bytes_written += snprintf(buff + bytes_written, (2 * ETH_STR_LEN) + 10, - " * %02x:%02x:%02x:%02x:%02x:%02x via %02x:%02x:%02x:%02x:%02x:%02x \n", + " * %02x:%02x:%02x:%02x:%02x:%02x via %02x:%02x:%02x:%02x:%02x:%02x\n", hna_global_entry->addr[0], hna_global_entry->addr[1], hna_global_entry->addr[2], @@ -388,7 +388,7 @@ int hna_global_fill_buffer_text(unsigned char *buff, int buff_len) void _hna_global_del_orig(struct hna_global_entry *hna_global_entry, char *message) { - bat_dbg(DBG_ROUTES, "Deleting global hna entry %pM (via %pM): %s \n", + bat_dbg(DBG_ROUTES, "Deleting global hna entry %pM (via %pM): %s\n", hna_global_entry->addr, hna_global_entry->orig_node->orig, message); -- cgit v0.10.2 From 47fdf097c348673dced571da8a15939005219da0 Mon Sep 17 00:00:00 2001 From: Marek Lindner Date: Fri, 7 May 2010 21:47:18 +0200 Subject: Staging: batman-adv: convert multiple /proc files to use sysfs This is the first patch in a series of patches which aim to convert all batman-adv /proc files to sysfs. To keep the changes in a digestable size it has been split up into smaller chunks. During the transition period batman-adv will use /proc as well as sysfs. As a first step the following files have been converted: aggregate_ogm, originators, transtable_global, transtable_local Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/Makefile b/drivers/staging/batman-adv/Makefile index cf2915d..9ad0429 100644 --- a/drivers/staging/batman-adv/Makefile +++ b/drivers/staging/batman-adv/Makefile @@ -19,4 +19,4 @@ # obj-m += batman-adv.o -batman-adv-objs := main.o proc.o send.o routing.o soft-interface.o device.o translation-table.o bitarray.o hash.o ring_buffer.o vis.o hard-interface.o aggregation.o originator.o +batman-adv-objs := main.o proc.o send.o routing.o soft-interface.o device.o translation-table.o bitarray.o hash.o ring_buffer.o vis.o hard-interface.o aggregation.o originator.o bat_sysfs.o diff --git a/drivers/staging/batman-adv/aggregation.c b/drivers/staging/batman-adv/aggregation.c index b8338ce..c946839 100644 --- a/drivers/staging/batman-adv/aggregation.c +++ b/drivers/staging/batman-adv/aggregation.c @@ -167,7 +167,8 @@ static void aggregate(struct forw_packet *forw_packet_aggr, void add_bat_packet_to_list(unsigned char *packet_buff, int packet_len, struct batman_if *if_incoming, char own_packet, - unsigned long send_time) + unsigned long send_time, + struct bat_priv *bat_priv) { /** * _aggr -> pointer to the packet we want to aggregate with @@ -183,7 +184,7 @@ void add_bat_packet_to_list(unsigned char *packet_buff, int packet_len, /* find position for the packet in the forward queue */ spin_lock_irqsave(&forw_bat_list_lock, flags); /* own packets are not to be aggregated */ - if ((atomic_read(&aggregation_enabled)) && (!own_packet)) { + if ((atomic_read(&bat_priv->aggregation_enabled)) && (!own_packet)) { hlist_for_each_entry(forw_packet_pos, tmp_node, &forw_bat_list, list) { if (can_aggregate_with(batman_packet, @@ -210,7 +211,7 @@ void add_bat_packet_to_list(unsigned char *packet_buff, int packet_len, * later on */ if ((!own_packet) && - (atomic_read(&aggregation_enabled))) + (atomic_read(&bat_priv->aggregation_enabled))) send_time += msecs_to_jiffies(MAX_AGGREGATION_MS); new_aggregated_packet(packet_buff, packet_len, diff --git a/drivers/staging/batman-adv/aggregation.h b/drivers/staging/batman-adv/aggregation.h index bcd32c1..29e1ffc 100644 --- a/drivers/staging/batman-adv/aggregation.h +++ b/drivers/staging/batman-adv/aggregation.h @@ -32,6 +32,7 @@ static inline int aggregated_packet(int buff_pos, int packet_len, int num_hna) void add_bat_packet_to_list(unsigned char *packet_buff, int packet_len, struct batman_if *if_outgoing, char own_packet, - unsigned long send_time); + unsigned long send_time, + struct bat_priv *bat_priv); void receive_aggr_bat_packet(struct ethhdr *ethhdr, unsigned char *packet_buff, int packet_len, struct batman_if *if_incoming); diff --git a/drivers/staging/batman-adv/bat_sysfs.c b/drivers/staging/batman-adv/bat_sysfs.c new file mode 100644 index 0000000..6293118 --- /dev/null +++ b/drivers/staging/batman-adv/bat_sysfs.c @@ -0,0 +1,272 @@ +/* + * Copyright (C) 2010 B.A.T.M.A.N. contributors: + * + * Marek Lindner + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA + * + */ + +#include "main.h" +#include "bat_sysfs.h" +#include "translation-table.h" +#include "originator.h" +#include "hard-interface.h" + +#define to_dev(obj) container_of(obj, struct device, kobj) + +struct bat_attribute { + struct attribute attr; + ssize_t (*show)(struct kobject *kobj, struct attribute *attr, + char *buf); + ssize_t (*store)(struct kobject *kobj, struct attribute *attr, + char *buf, size_t count); +}; + +#define BAT_ATTR(_name, _mode, _show, _store) \ +struct bat_attribute bat_attr_##_name = { \ + .attr = {.name = __stringify(_name), \ + .mode = _mode }, \ + .show = _show, \ + .store = _store, \ +}; + +#define BAT_BIN_ATTR(_name, _mode, _read, _write) \ +struct bin_attribute bat_attr_##_name = { \ + .attr = { .name = __stringify(_name), \ + .mode = _mode, }, \ + .read = _read, \ + .write = _write, \ +}; + +static ssize_t show_aggr_ogm(struct kobject *kobj, struct attribute *attr, + char *buff) +{ + struct device *dev = to_dev(kobj->parent); + struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev)); + int aggr_status = atomic_read(&bat_priv->aggregation_enabled); + + return sprintf(buff, "status: %s\ncommands: enable, disable, 0, 1 \n", + aggr_status == 0 ? "disabled" : "enabled"); +} + +static ssize_t store_aggr_ogm(struct kobject *kobj, struct attribute *attr, + char *buff, size_t count) +{ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); + struct bat_priv *bat_priv = netdev_priv(net_dev); + int aggr_tmp = -1; + + if (((count == 2) && (buff[0] == '1')) || + (strncmp(buff, "enable", 6) == 0)) + aggr_tmp = 1; + + if (((count == 2) && (buff[0] == '0')) || + (strncmp(buff, "disable", 7) == 0)) + aggr_tmp = 0; + + if (aggr_tmp < 0) { + if (buff[count - 1] == '\n') + buff[count - 1] = '\0'; + + printk(KERN_INFO "batman-adv:Invalid parameter for 'aggregate OGM' setting on mesh %s received: %s\n", + net_dev->name, buff); + return -EINVAL; + } + + if (atomic_read(&bat_priv->aggregation_enabled) == aggr_tmp) + return count; + + printk(KERN_INFO "batman-adv:Changing aggregation from: %s to: %s on mesh: %s\n", + atomic_read(&bat_priv->aggregation_enabled) == 1 ? + "enabled" : "disabled", aggr_tmp == 1 ? "enabled" : "disabled", + net_dev->name); + + atomic_set(&bat_priv->aggregation_enabled, (unsigned)aggr_tmp); + return count; +} + +static BAT_ATTR(aggregate_ogm, S_IRUGO | S_IWUSR, + show_aggr_ogm, store_aggr_ogm); + +static struct bat_attribute *mesh_attrs[] = { + &bat_attr_aggregate_ogm, + NULL, +}; + +static ssize_t transtable_local_read(struct kobject *kobj, + struct bin_attribute *bin_attr, + char *buff, loff_t off, size_t count) +{ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); + + rcu_read_lock(); + if (list_empty(&if_list)) { + rcu_read_unlock(); + + if (off == 0) + return sprintf(buff, + "BATMAN mesh %s disabled - please specify interfaces to enable it\n", + net_dev->name); + + return 0; + } + rcu_read_unlock(); + + return hna_local_fill_buffer_text(net_dev, buff, count, off); +} + +static ssize_t transtable_global_read(struct kobject *kobj, + struct bin_attribute *bin_attr, + char *buff, loff_t off, size_t count) +{ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); + + rcu_read_lock(); + if (list_empty(&if_list)) { + rcu_read_unlock(); + + if (off == 0) + return sprintf(buff, + "BATMAN mesh %s disabled - please specify interfaces to enable it\n", + net_dev->name); + + return 0; + } + rcu_read_unlock(); + + return hna_global_fill_buffer_text(net_dev, buff, count, off); +} + +static ssize_t originators_read(struct kobject *kobj, + struct bin_attribute *bin_attr, + char *buff, loff_t off, size_t count) +{ + /* FIXME: orig table should exist per batif */ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); + + rcu_read_lock(); + if (list_empty(&if_list)) { + rcu_read_unlock(); + + if (off == 0) + return sprintf(buff, + "BATMAN mesh %s disabled - please specify interfaces to enable it\n", + net_dev->name); + + return 0; + } + + if (((struct batman_if *)if_list.next)->if_active != IF_ACTIVE) { + rcu_read_unlock(); + + if (off == 0) + return sprintf(buff, + "BATMAN mesh %s disabled - primary interface not active\n", + net_dev->name); + + return 0; + } + rcu_read_unlock(); + + return orig_fill_buffer_text(buff, count, off); +} + +static BAT_BIN_ATTR(transtable_local, S_IRUGO, transtable_local_read, NULL); +static BAT_BIN_ATTR(transtable_global, S_IRUGO, transtable_global_read, NULL); +static BAT_BIN_ATTR(originators, S_IRUGO, originators_read, NULL); + +static struct bin_attribute *mesh_bin_attrs[] = { + &bat_attr_transtable_local, + &bat_attr_transtable_global, + &bat_attr_originators, + NULL, +}; + +int sysfs_add_meshif(struct net_device *dev) +{ + struct kobject *batif_kobject = &dev->dev.kobj; + struct bat_priv *bat_priv = netdev_priv(dev); + struct bat_attribute **bat_attr; + struct bin_attribute **bin_attr; + int err; + + /* FIXME: should be done in the general mesh setup + routine as soon as we have it */ + atomic_set(&bat_priv->aggregation_enabled, 1); + + bat_priv->mesh_obj = kobject_create_and_add(SYSFS_IF_MESH_SUBDIR, + batif_kobject); + if (!bat_priv->mesh_obj) { + printk(KERN_ERR "batman-adv:Can't add sysfs directory: %s/%s\n", + dev->name, SYSFS_IF_MESH_SUBDIR); + goto out; + } + + for (bat_attr = mesh_attrs; *bat_attr; ++bat_attr) { + err = sysfs_create_file(bat_priv->mesh_obj, + &((*bat_attr)->attr)); + if (err) { + printk(KERN_ERR "batman-adv:Can't add sysfs file: %s/%s/%s\n", + dev->name, SYSFS_IF_MESH_SUBDIR, + ((*bat_attr)->attr).name); + goto rem_attr; + } + } + + for (bin_attr = mesh_bin_attrs; *bin_attr; ++bin_attr) { + err = sysfs_create_bin_file(bat_priv->mesh_obj, (*bin_attr)); + if (err) { + printk(KERN_ERR "batman-adv:Can't add sysfs file: %s/%s/%s\n", + dev->name, SYSFS_IF_MESH_SUBDIR, + ((*bin_attr)->attr).name); + goto rem_bin_attr; + } + } + + return 0; + +rem_bin_attr: + for (bin_attr = mesh_bin_attrs; *bin_attr; ++bin_attr) + sysfs_remove_bin_file(bat_priv->mesh_obj, (*bin_attr)); +rem_attr: + for (bat_attr = mesh_attrs; *bat_attr; ++bat_attr) + sysfs_remove_file(bat_priv->mesh_obj, &((*bat_attr)->attr)); + + kobject_put(bat_priv->mesh_obj); + bat_priv->mesh_obj = NULL; +out: + return -ENOMEM; +} + +void sysfs_del_meshif(struct net_device *dev) +{ + struct bat_priv *bat_priv = netdev_priv(dev); + struct bat_attribute **bat_attr; + struct bin_attribute **bin_attr; + + for (bin_attr = mesh_bin_attrs; *bin_attr; ++bin_attr) + sysfs_remove_bin_file(bat_priv->mesh_obj, (*bin_attr)); + + for (bat_attr = mesh_attrs; *bat_attr; ++bat_attr) + sysfs_remove_file(bat_priv->mesh_obj, &((*bat_attr)->attr)); + + kobject_put(bat_priv->mesh_obj); + bat_priv->mesh_obj = NULL; +} diff --git a/drivers/staging/batman-adv/bat_sysfs.h b/drivers/staging/batman-adv/bat_sysfs.h new file mode 100644 index 0000000..671ebd1 --- /dev/null +++ b/drivers/staging/batman-adv/bat_sysfs.h @@ -0,0 +1,26 @@ +/* + * Copyright (C) 2010 B.A.T.M.A.N. contributors: + * + * Marek Lindner + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA + * + */ + + +#define SYSFS_IF_MESH_SUBDIR "mesh" + +int sysfs_add_meshif(struct net_device *dev); +void sysfs_del_meshif(struct net_device *dev); diff --git a/drivers/staging/batman-adv/main.c b/drivers/staging/batman-adv/main.c index 881aaa9..b5f8b80 100644 --- a/drivers/staging/batman-adv/main.c +++ b/drivers/staging/batman-adv/main.c @@ -21,6 +21,7 @@ #include "main.h" #include "proc.h" +#include "bat_sysfs.h" #include "routing.h" #include "send.h" #include "originator.h" @@ -44,7 +45,6 @@ DEFINE_SPINLOCK(forw_bcast_list_lock); atomic_t originator_interval; atomic_t vis_interval; atomic_t vis_mode; -atomic_t aggregation_enabled; int16_t num_hna; int16_t num_ifs; @@ -85,7 +85,6 @@ int init_module(void) atomic_set(&vis_interval, 1000);/* TODO: raise this later, this is only * for debugging now. */ atomic_set(&vis_mode, VIS_TYPE_CLIENT_UPDATE); - atomic_set(&aggregation_enabled, 1); /* the name should not be longer than 10 chars - see * http://lwn.net/Articles/23634/ */ @@ -116,6 +115,11 @@ int init_module(void) goto free_soft_device; } + retval = sysfs_add_meshif(soft_device); + + if (retval < 0) + goto unreg_soft_device; + register_netdevice_notifier(&hard_if_notifier); dev_add_pack(&batman_adv_packet_type); @@ -124,6 +128,8 @@ int init_module(void) return 0; +unreg_soft_device: + unregister_netdevice(soft_device); free_soft_device: free_netdev(soft_device); soft_device = NULL; @@ -136,6 +142,7 @@ void cleanup_module(void) shutdown_module(); if (soft_device) { + sysfs_del_meshif(soft_device); unregister_netdev(soft_device); soft_device = NULL; } diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 6221b85..3e28e9e 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -130,7 +130,6 @@ extern spinlock_t forw_bcast_list_lock; extern atomic_t originator_interval; extern atomic_t vis_interval; extern atomic_t vis_mode; -extern atomic_t aggregation_enabled; extern int16_t num_hna; extern int16_t num_ifs; diff --git a/drivers/staging/batman-adv/originator.c b/drivers/staging/batman-adv/originator.c index f3d8cc3..818f56e 100644 --- a/drivers/staging/batman-adv/originator.c +++ b/drivers/staging/batman-adv/originator.c @@ -249,4 +249,77 @@ void purge_orig(struct work_struct *work) start_purge_timer(); } +ssize_t orig_fill_buffer_text(char *buff, size_t count, loff_t off) +{ + HASHIT(hashit); + struct orig_node *orig_node; + struct neigh_node *neigh_node; + size_t hdr_len, tmp_len; + int batman_count = 0, bytes_written = 0; + unsigned long flags; + char orig_str[ETH_STR_LEN], router_str[ETH_STR_LEN]; + + rcu_read_lock(); + hdr_len = sprintf(buff, + " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s] \n", + "Originator", "#", TQ_MAX_VALUE, "Nexthop", "outgoingIF", + "Potential nexthops", SOURCE_VERSION, REVISION_VERSION_STR, + ((struct batman_if *)if_list.next)->dev, + ((struct batman_if *)if_list.next)->addr_str); + rcu_read_unlock(); + + if (off < hdr_len) + bytes_written = hdr_len; + + spin_lock_irqsave(&orig_hash_lock, flags); + + while (hash_iterate(orig_hash, &hashit)) { + + orig_node = hashit.bucket->data; + + if (!orig_node->router) + continue; + + if (orig_node->router->tq_avg == 0) + continue; + + /* estimated line length */ + if (count < bytes_written + 200) + break; + + addr_to_string(orig_str, orig_node->orig); + addr_to_string(router_str, orig_node->router->addr); + + tmp_len = sprintf(buff + bytes_written, + "%-17s (%3i) %17s [%10s]:", + orig_str, orig_node->router->tq_avg, + router_str, + orig_node->router->if_incoming->dev); + + list_for_each_entry(neigh_node, &orig_node->neigh_list, list) { + addr_to_string(orig_str, neigh_node->addr); + tmp_len += sprintf(buff + bytes_written + tmp_len, + " %17s (%3i)", orig_str, + neigh_node->tq_avg); + } + + tmp_len += sprintf(buff + bytes_written + tmp_len, "\n"); + + batman_count++; + hdr_len += tmp_len; + + if (off >= hdr_len) + continue; + + bytes_written += tmp_len; + } + + spin_unlock_irqrestore(&orig_hash_lock, flags); + + if ((batman_count == 0) && (off == 0)) + bytes_written += sprintf(buff + bytes_written, + "No batman nodes in range ... \n"); + + return bytes_written; +} diff --git a/drivers/staging/batman-adv/originator.h b/drivers/staging/batman-adv/originator.h index 8acebc1..8289a85 100644 --- a/drivers/staging/batman-adv/originator.h +++ b/drivers/staging/batman-adv/originator.h @@ -28,4 +28,4 @@ struct orig_node *get_orig_node(uint8_t *addr); struct neigh_node * create_neighbor(struct orig_node *orig_node, struct orig_node *orig_neigh_node, uint8_t *neigh, struct batman_if *if_incoming); - +ssize_t orig_fill_buffer_text(char *buff, size_t count, loff_t off); diff --git a/drivers/staging/batman-adv/proc.c b/drivers/staging/batman-adv/proc.c index dfa85c4..059b2d9 100644 --- a/drivers/staging/batman-adv/proc.c +++ b/drivers/staging/batman-adv/proc.c @@ -29,11 +29,8 @@ #include "vis.h" static struct proc_dir_entry *proc_batman_dir, *proc_interface_file; -static struct proc_dir_entry *proc_orig_interval_file, *proc_originators_file; -static struct proc_dir_entry *proc_transt_local_file; -static struct proc_dir_entry *proc_transt_global_file; +static struct proc_dir_entry *proc_orig_interval_file; static struct proc_dir_entry *proc_vis_srv_file, *proc_vis_data_file; -static struct proc_dir_entry *proc_aggr_file; static int proc_interfaces_read(struct seq_file *seq, void *offset) { @@ -176,145 +173,6 @@ static int proc_orig_interval_open(struct inode *inode, struct file *file) return single_open(file, proc_orig_interval_read, NULL); } -static int proc_originators_read(struct seq_file *seq, void *offset) -{ - HASHIT(hashit); - struct orig_node *orig_node; - struct neigh_node *neigh_node; - int batman_count = 0; - char orig_str[ETH_STR_LEN], router_str[ETH_STR_LEN]; - unsigned long flags; - - rcu_read_lock(); - if (list_empty(&if_list)) { - rcu_read_unlock(); - seq_printf(seq, "BATMAN disabled - please specify interfaces to enable it\n"); - goto end; - } - - if (((struct batman_if *)if_list.next)->if_active != IF_ACTIVE) { - rcu_read_unlock(); - seq_printf(seq, "BATMAN disabled - primary interface not active\n"); - goto end; - } - - seq_printf(seq, - " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s]\n", - "Originator", "#", TQ_MAX_VALUE, "Nexthop", "outgoingIF", - "Potential nexthops", SOURCE_VERSION, REVISION_VERSION_STR, - ((struct batman_if *)if_list.next)->dev, - ((struct batman_if *)if_list.next)->addr_str); - - rcu_read_unlock(); - spin_lock_irqsave(&orig_hash_lock, flags); - - while (hash_iterate(orig_hash, &hashit)) { - - orig_node = hashit.bucket->data; - - if (!orig_node->router) - continue; - - if (orig_node->router->tq_avg == 0) - continue; - - batman_count++; - - addr_to_string(orig_str, orig_node->orig); - addr_to_string(router_str, orig_node->router->addr); - - seq_printf(seq, "%-17s (%3i) %17s [%10s]:", - orig_str, orig_node->router->tq_avg, - router_str, orig_node->router->if_incoming->dev); - - list_for_each_entry(neigh_node, &orig_node->neigh_list, list) { - addr_to_string(orig_str, neigh_node->addr); - seq_printf(seq, " %17s (%3i)", - orig_str, neigh_node->tq_avg); - } - - seq_printf(seq, "\n"); - - } - - spin_unlock_irqrestore(&orig_hash_lock, flags); - - if (batman_count == 0) - seq_printf(seq, "No batman nodes in range ...\n"); - -end: - return 0; -} - -static int proc_originators_open(struct inode *inode, struct file *file) -{ - return single_open(file, proc_originators_read, NULL); -} - -static int proc_transt_local_read(struct seq_file *seq, void *offset) -{ - char *buf; - - buf = kmalloc(4096, GFP_KERNEL); - if (!buf) - return 0; - - rcu_read_lock(); - if (list_empty(&if_list)) { - rcu_read_unlock(); - seq_printf(seq, "BATMAN disabled - please specify interfaces to enable it\n"); - goto end; - } - - rcu_read_unlock(); - - seq_printf(seq, "Locally retrieved addresses (from %s) announced via HNA:\n", soft_device->name); - - hna_local_fill_buffer_text(buf, 4096); - seq_printf(seq, "%s", buf); - -end: - kfree(buf); - return 0; -} - -static int proc_transt_local_open(struct inode *inode, struct file *file) -{ - return single_open(file, proc_transt_local_read, NULL); -} - -static int proc_transt_global_read(struct seq_file *seq, void *offset) -{ - char *buf; - - buf = kmalloc(4096, GFP_KERNEL); - if (!buf) - return 0; - - rcu_read_lock(); - if (list_empty(&if_list)) { - rcu_read_unlock(); - seq_printf(seq, "BATMAN disabled - please specify interfaces to enable it\n"); - goto end; - } - rcu_read_unlock(); - - - seq_printf(seq, "Globally announced HNAs received via the mesh (translation table):\n"); - - hna_global_fill_buffer_text(buf, 4096); - seq_printf(seq, "%s", buf); - -end: - kfree(buf); - return 0; -} - -static int proc_transt_global_open(struct inode *inode, struct file *file) -{ - return single_open(file, proc_transt_global_read, NULL); -} - /* setting the mode of the vis server by the user */ static ssize_t proc_vis_srv_write(struct file *file, const char __user * buffer, size_t count, loff_t *ppos) @@ -429,53 +287,6 @@ static int proc_vis_data_open(struct inode *inode, struct file *file) return single_open(file, proc_vis_data_read, NULL); } -static int proc_aggr_read(struct seq_file *seq, void *offset) -{ - seq_printf(seq, "%i\n", atomic_read(&aggregation_enabled)); - - return 0; -} - -static ssize_t proc_aggr_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) -{ - char *aggr_string; - int not_copied = 0; - unsigned long aggregation_enabled_tmp; - int retval; - - aggr_string = kmalloc(count, GFP_KERNEL); - - if (!aggr_string) - return -ENOMEM; - - not_copied = copy_from_user(aggr_string, buffer, count); - aggr_string[count - not_copied - 1] = 0; - - retval = strict_strtoul(aggr_string, 10, &aggregation_enabled_tmp); - - if (retval || aggregation_enabled_tmp > 1) { - printk(KERN_ERR "batman-adv:Aggregation can only be enabled (1) or disabled (0), given value: %li\n", aggregation_enabled_tmp); - } else { - printk(KERN_INFO "batman-adv:Changing aggregation from: %s (%i) to: %s (%li)\n", - (atomic_read(&aggregation_enabled) == 1 ? - "enabled" : "disabled"), - atomic_read(&aggregation_enabled), - (aggregation_enabled_tmp == 1 ? "enabled" : "disabled"), - aggregation_enabled_tmp); - atomic_set(&aggregation_enabled, - (unsigned)aggregation_enabled_tmp); - } - - kfree(aggr_string); - return count; -} - -static int proc_aggr_open(struct inode *inode, struct file *file) -{ - return single_open(file, proc_aggr_read, NULL); -} - /* satisfying different prototypes ... */ static ssize_t proc_dummy_write(struct file *file, const char __user *buffer, size_t count, loff_t *ppos) @@ -483,15 +294,6 @@ static ssize_t proc_dummy_write(struct file *file, const char __user *buffer, return count; } -static const struct file_operations proc_aggr_fops = { - .owner = THIS_MODULE, - .open = proc_aggr_open, - .read = seq_read, - .write = proc_aggr_write, - .llseek = seq_lseek, - .release = single_release, -}; - static const struct file_operations proc_vis_srv_fops = { .owner = THIS_MODULE, .open = proc_vis_srv_open, @@ -510,33 +312,6 @@ static const struct file_operations proc_vis_data_fops = { .release = single_release, }; -static const struct file_operations proc_originators_fops = { - .owner = THIS_MODULE, - .open = proc_originators_open, - .read = seq_read, - .write = proc_dummy_write, - .llseek = seq_lseek, - .release = single_release, -}; - -static const struct file_operations proc_transt_local_fops = { - .owner = THIS_MODULE, - .open = proc_transt_local_open, - .read = seq_read, - .write = proc_dummy_write, - .llseek = seq_lseek, - .release = single_release, -}; - -static const struct file_operations proc_transt_global_fops = { - .owner = THIS_MODULE, - .open = proc_transt_global_open, - .read = seq_read, - .write = proc_dummy_write, - .llseek = seq_lseek, - .release = single_release, -}; - static const struct file_operations proc_interfaces_fops = { .owner = THIS_MODULE, .open = proc_interfaces_open, @@ -557,15 +332,6 @@ static const struct file_operations proc_orig_interval_fops = { void cleanup_procfs(void) { - if (proc_transt_global_file) - remove_proc_entry(PROC_FILE_TRANST_GLOBAL, proc_batman_dir); - - if (proc_transt_local_file) - remove_proc_entry(PROC_FILE_TRANST_LOCAL, proc_batman_dir); - - if (proc_originators_file) - remove_proc_entry(PROC_FILE_ORIGINATORS, proc_batman_dir); - if (proc_orig_interval_file) remove_proc_entry(PROC_FILE_ORIG_INTERVAL, proc_batman_dir); @@ -578,9 +344,6 @@ void cleanup_procfs(void) if (proc_vis_srv_file) remove_proc_entry(PROC_FILE_VIS_SRV, proc_batman_dir); - if (proc_aggr_file) - remove_proc_entry(PROC_FILE_AGGR, proc_batman_dir); - if (proc_batman_dir) #ifdef __NET_NET_NAMESPACE_H remove_proc_entry(PROC_ROOT_DIR, init_net.proc_net); @@ -624,36 +387,6 @@ int setup_procfs(void) return -EFAULT; } - proc_originators_file = create_proc_entry(PROC_FILE_ORIGINATORS, - S_IRUGO, proc_batman_dir); - if (proc_originators_file) { - proc_originators_file->proc_fops = &proc_originators_fops; - } else { - printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_ORIGINATORS); - cleanup_procfs(); - return -EFAULT; - } - - proc_transt_local_file = create_proc_entry(PROC_FILE_TRANST_LOCAL, - S_IRUGO, proc_batman_dir); - if (proc_transt_local_file) { - proc_transt_local_file->proc_fops = &proc_transt_local_fops; - } else { - printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_TRANST_LOCAL); - cleanup_procfs(); - return -EFAULT; - } - - proc_transt_global_file = create_proc_entry(PROC_FILE_TRANST_GLOBAL, - S_IRUGO, proc_batman_dir); - if (proc_transt_global_file) { - proc_transt_global_file->proc_fops = &proc_transt_global_fops; - } else { - printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_TRANST_GLOBAL); - cleanup_procfs(); - return -EFAULT; - } - proc_vis_srv_file = create_proc_entry(PROC_FILE_VIS_SRV, S_IWUSR | S_IRUGO, proc_batman_dir); @@ -675,15 +408,5 @@ int setup_procfs(void) return -EFAULT; } - proc_aggr_file = create_proc_entry(PROC_FILE_AGGR, S_IWUSR | S_IRUGO, - proc_batman_dir); - if (proc_aggr_file) { - proc_aggr_file->proc_fops = &proc_aggr_fops; - } else { - printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_AGGR); - cleanup_procfs(); - return -EFAULT; - } - return 0; } diff --git a/drivers/staging/batman-adv/proc.h b/drivers/staging/batman-adv/proc.h index cf71264..68a255a 100644 --- a/drivers/staging/batman-adv/proc.h +++ b/drivers/staging/batman-adv/proc.h @@ -25,15 +25,11 @@ #define PROC_ROOT_DIR "batman-adv" #define PROC_FILE_INTERFACES "interfaces" #define PROC_FILE_ORIG_INTERVAL "orig_interval" -#define PROC_FILE_ORIGINATORS "originators" #define PROC_FILE_GATEWAYS "gateways" #define PROC_FILE_LOG "log" #define PROC_FILE_LOG_LEVEL "log_level" -#define PROC_FILE_TRANST_LOCAL "transtable_local" -#define PROC_FILE_TRANST_GLOBAL "transtable_global" #define PROC_FILE_VIS_SRV "vis_server" #define PROC_FILE_VIS_DATA "vis_data" -#define PROC_FILE_AGGR "aggregate_ogm" void cleanup_procfs(void); int setup_procfs(void); diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index 29b684b..32d1756 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -44,7 +44,7 @@ static unsigned long own_send_time(void) } /* when do we schedule a forwarded packet to be sent */ -static unsigned long forward_send_time(void) +static unsigned long forward_send_time(struct bat_priv *bat_priv) { return jiffies + (((random32() % (JITTER/2)) * HZ) / 1000); } @@ -239,6 +239,8 @@ static void rebuild_batman_packet(struct batman_if *batman_if) void schedule_own_packet(struct batman_if *batman_if) { + /* FIXME: each batman_if will be attached to a softif */ + struct bat_priv *bat_priv = netdev_priv(soft_device); unsigned long send_time; struct batman_packet *batman_packet; int vis_server = atomic_read(&vis_mode); @@ -277,7 +279,9 @@ void schedule_own_packet(struct batman_if *batman_if) slide_own_bcast_window(batman_if); send_time = own_send_time(); add_bat_packet_to_list(batman_if->packet_buff, - batman_if->packet_len, batman_if, 1, send_time); + batman_if->packet_len, + batman_if, 1, send_time, + bat_priv); } void schedule_forward_packet(struct orig_node *orig_node, @@ -286,6 +290,8 @@ void schedule_forward_packet(struct orig_node *orig_node, uint8_t directlink, int hna_buff_len, struct batman_if *if_incoming) { + /* FIXME: each batman_if will be attached to a softif */ + struct bat_priv *bat_priv = netdev_priv(soft_device); unsigned char in_tq, in_ttl, tq_avg = 0; unsigned long send_time; @@ -329,10 +335,11 @@ void schedule_forward_packet(struct orig_node *orig_node, else batman_packet->flags &= ~DIRECTLINK; - send_time = forward_send_time(); + send_time = forward_send_time(bat_priv); add_bat_packet_to_list((unsigned char *)batman_packet, sizeof(struct batman_packet) + hna_buff_len, - if_incoming, 0, send_time); + if_incoming, 0, send_time, + bat_priv); } static void forw_packet_free(struct forw_packet *forw_packet) diff --git a/drivers/staging/batman-adv/translation-table.c b/drivers/staging/batman-adv/translation-table.c index 5537846..d43b1ad 100644 --- a/drivers/staging/batman-adv/translation-table.c +++ b/drivers/staging/batman-adv/translation-table.c @@ -156,23 +156,36 @@ int hna_local_fill_buffer(unsigned char *buff, int buff_len) return i; } -int hna_local_fill_buffer_text(unsigned char *buff, int buff_len) +int hna_local_fill_buffer_text(struct net_device *net_dev, char *buff, + size_t count, loff_t off) { struct hna_local_entry *hna_local_entry; HASHIT(hashit); int bytes_written = 0; unsigned long flags; + size_t hdr_len; + + hdr_len = sprintf(buff, + "Locally retrieved addresses (from %s) announced via HNA:\n", + net_dev->name); + + if (off < hdr_len) + bytes_written = hdr_len; spin_lock_irqsave(&hna_local_hash_lock, flags); while (hash_iterate(hna_local_hash, &hashit)) { + hdr_len += 21; - if (buff_len < bytes_written + ETH_STR_LEN + 4) + if (count < bytes_written + 22) break; + if (off >= hdr_len) + continue; + hna_local_entry = hashit.bucket->data; - bytes_written += snprintf(buff + bytes_written, ETH_STR_LEN + 4, + bytes_written += snprintf(buff + bytes_written, 22, " * %02x:%02x:%02x:%02x:%02x:%02x\n", hna_local_entry->addr[0], hna_local_entry->addr[1], @@ -183,7 +196,6 @@ int hna_local_fill_buffer_text(unsigned char *buff, int buff_len) } spin_unlock_irqrestore(&hna_local_hash_lock, flags); - return bytes_written; } @@ -348,23 +360,36 @@ void hna_global_add_orig(struct orig_node *orig_node, spin_unlock_irqrestore(&hna_global_hash_lock, flags); } -int hna_global_fill_buffer_text(unsigned char *buff, int buff_len) +int hna_global_fill_buffer_text(struct net_device *net_dev, char *buff, + size_t count, loff_t off) { struct hna_global_entry *hna_global_entry; HASHIT(hashit); int bytes_written = 0; unsigned long flags; + size_t hdr_len; + + hdr_len = sprintf(buff, + "Globally announced HNAs received via the mesh %s (translation table):\n", + net_dev->name); + + if (off < hdr_len) + bytes_written = hdr_len; spin_lock_irqsave(&hna_global_hash_lock, flags); while (hash_iterate(hna_global_hash, &hashit)) { - if (buff_len < bytes_written + (2 * ETH_STR_LEN) + 10) + hdr_len += 43; + + if (count < bytes_written + 44) break; + if (off >= hdr_len) + continue; + hna_global_entry = hashit.bucket->data; - bytes_written += snprintf(buff + bytes_written, - (2 * ETH_STR_LEN) + 10, + bytes_written += snprintf(buff + bytes_written, 44, " * %02x:%02x:%02x:%02x:%02x:%02x via %02x:%02x:%02x:%02x:%02x:%02x\n", hna_global_entry->addr[0], hna_global_entry->addr[1], @@ -381,7 +406,6 @@ int hna_global_fill_buffer_text(unsigned char *buff, int buff_len) } spin_unlock_irqrestore(&hna_global_hash_lock, flags); - return bytes_written; } diff --git a/drivers/staging/batman-adv/translation-table.h b/drivers/staging/batman-adv/translation-table.h index 8568d80..8f412fc 100644 --- a/drivers/staging/batman-adv/translation-table.h +++ b/drivers/staging/batman-adv/translation-table.h @@ -25,13 +25,15 @@ int hna_local_init(void); void hna_local_add(uint8_t *addr); void hna_local_remove(uint8_t *addr, char *message); int hna_local_fill_buffer(unsigned char *buff, int buff_len); -int hna_local_fill_buffer_text(unsigned char *buff, int buff_len); +int hna_local_fill_buffer_text(struct net_device *net_dev, char *buff, + size_t count, loff_t off); void hna_local_purge(struct work_struct *work); void hna_local_free(void); int hna_global_init(void); void hna_global_add_orig(struct orig_node *orig_node, unsigned char *hna_buff, int hna_buff_len); -int hna_global_fill_buffer_text(unsigned char *buff, int buff_len); +int hna_global_fill_buffer_text(struct net_device *net_dev, char *buff, + size_t count, loff_t off); void _hna_global_del_orig(struct hna_global_entry *hna_global_entry, char *orig_str); void hna_global_del_orig(struct orig_node *orig_node, char *message); diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index 4e77141..db1bb0b 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -82,6 +82,8 @@ struct neigh_node { struct bat_priv { struct net_device_stats stats; + atomic_t aggregation_enabled; + struct kobject *mesh_obj; }; struct device_client { -- cgit v0.10.2 From 147412406a200a9a3230fad1e0e99c818e873680 Mon Sep 17 00:00:00 2001 From: Marek Lindner Date: Fri, 7 May 2010 21:47:19 +0200 Subject: Staging: batman-adv: convert more files from /proc to /sys converted files: vis_mode, vis_data Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/aggregation.c b/drivers/staging/batman-adv/aggregation.c index c946839..a5818ff 100644 --- a/drivers/staging/batman-adv/aggregation.c +++ b/drivers/staging/batman-adv/aggregation.c @@ -165,10 +165,10 @@ static void aggregate(struct forw_packet *forw_packet_aggr, (1 << forw_packet_aggr->num_packets); } -void add_bat_packet_to_list(unsigned char *packet_buff, int packet_len, +void add_bat_packet_to_list(struct bat_priv *bat_priv, + unsigned char *packet_buff, int packet_len, struct batman_if *if_incoming, char own_packet, - unsigned long send_time, - struct bat_priv *bat_priv) + unsigned long send_time) { /** * _aggr -> pointer to the packet we want to aggregate with diff --git a/drivers/staging/batman-adv/aggregation.h b/drivers/staging/batman-adv/aggregation.h index 29e1ffc..84401ca 100644 --- a/drivers/staging/batman-adv/aggregation.h +++ b/drivers/staging/batman-adv/aggregation.h @@ -30,9 +30,9 @@ static inline int aggregated_packet(int buff_pos, int packet_len, int num_hna) (next_buff_pos <= MAX_AGGREGATION_BYTES); } -void add_bat_packet_to_list(unsigned char *packet_buff, int packet_len, - struct batman_if *if_outgoing, char own_packet, - unsigned long send_time, - struct bat_priv *bat_priv); +void add_bat_packet_to_list(struct bat_priv *bat_priv, + unsigned char *packet_buff, int packet_len, + struct batman_if *if_incoming, char own_packet, + unsigned long send_time); void receive_aggr_bat_packet(struct ethhdr *ethhdr, unsigned char *packet_buff, int packet_len, struct batman_if *if_incoming); diff --git a/drivers/staging/batman-adv/bat_sysfs.c b/drivers/staging/batman-adv/bat_sysfs.c index 6293118..c14ab47 100644 --- a/drivers/staging/batman-adv/bat_sysfs.c +++ b/drivers/staging/batman-adv/bat_sysfs.c @@ -24,6 +24,7 @@ #include "translation-table.h" #include "originator.h" #include "hard-interface.h" +#include "vis.h" #define to_dev(obj) container_of(obj, struct device, kobj) @@ -99,11 +100,66 @@ static ssize_t store_aggr_ogm(struct kobject *kobj, struct attribute *attr, return count; } +static ssize_t show_vis_mode(struct kobject *kobj, struct attribute *attr, + char *buff) +{ + struct device *dev = to_dev(kobj->parent); + struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev)); + int vis_mode = atomic_read(&bat_priv->vis_mode); + + return sprintf(buff, "status: %s\ncommands: client, server, %d, %d \n", + vis_mode == VIS_TYPE_CLIENT_UPDATE ? + "client" : "server", + VIS_TYPE_SERVER_SYNC, VIS_TYPE_CLIENT_UPDATE); +} + +static ssize_t store_vis_mode(struct kobject *kobj, struct attribute *attr, + char *buff, size_t count) +{ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); + struct bat_priv *bat_priv = netdev_priv(net_dev); + unsigned long val; + int ret, vis_mode_tmp = -1; + + ret = strict_strtoul(buff, 10, &val); + + if (((count == 2) && (!ret) && (val == VIS_TYPE_CLIENT_UPDATE)) || + (strncmp(buff, "client", 6) == 0)) + vis_mode_tmp = VIS_TYPE_CLIENT_UPDATE; + + if (((count == 2) && (!ret) && (val == VIS_TYPE_SERVER_SYNC)) || + (strncmp(buff, "server", 6) == 0)) + vis_mode_tmp = VIS_TYPE_SERVER_SYNC; + + if (vis_mode_tmp < 0) { + if (buff[count - 1] == '\n') + buff[count - 1] = '\0'; + + printk(KERN_INFO "batman-adv:Invalid parameter for 'vis mode' setting on mesh %s received: %s\n", + net_dev->name, buff); + return -EINVAL; + } + + if (atomic_read(&bat_priv->vis_mode) == vis_mode_tmp) + return count; + + printk(KERN_INFO "batman-adv:Changing vis mode from: %s to: %s on mesh: %s\n", + atomic_read(&bat_priv->vis_mode) == VIS_TYPE_CLIENT_UPDATE ? + "client" : "server", vis_mode_tmp == VIS_TYPE_CLIENT_UPDATE ? + "client" : "server", net_dev->name); + + atomic_set(&bat_priv->vis_mode, (unsigned)vis_mode_tmp); + return count; +} + static BAT_ATTR(aggregate_ogm, S_IRUGO | S_IWUSR, show_aggr_ogm, store_aggr_ogm); +static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode); static struct bat_attribute *mesh_attrs[] = { &bat_attr_aggregate_ogm, + &bat_attr_vis_mode, NULL, }; @@ -114,19 +170,6 @@ static ssize_t transtable_local_read(struct kobject *kobj, struct device *dev = to_dev(kobj->parent); struct net_device *net_dev = to_net_dev(dev); - rcu_read_lock(); - if (list_empty(&if_list)) { - rcu_read_unlock(); - - if (off == 0) - return sprintf(buff, - "BATMAN mesh %s disabled - please specify interfaces to enable it\n", - net_dev->name); - - return 0; - } - rcu_read_unlock(); - return hna_local_fill_buffer_text(net_dev, buff, count, off); } @@ -137,19 +180,6 @@ static ssize_t transtable_global_read(struct kobject *kobj, struct device *dev = to_dev(kobj->parent); struct net_device *net_dev = to_net_dev(dev); - rcu_read_lock(); - if (list_empty(&if_list)) { - rcu_read_unlock(); - - if (off == 0) - return sprintf(buff, - "BATMAN mesh %s disabled - please specify interfaces to enable it\n", - net_dev->name); - - return 0; - } - rcu_read_unlock(); - return hna_global_fill_buffer_text(net_dev, buff, count, off); } @@ -157,45 +187,32 @@ static ssize_t originators_read(struct kobject *kobj, struct bin_attribute *bin_attr, char *buff, loff_t off, size_t count) { - /* FIXME: orig table should exist per batif */ struct device *dev = to_dev(kobj->parent); struct net_device *net_dev = to_net_dev(dev); - rcu_read_lock(); - if (list_empty(&if_list)) { - rcu_read_unlock(); - - if (off == 0) - return sprintf(buff, - "BATMAN mesh %s disabled - please specify interfaces to enable it\n", - net_dev->name); - - return 0; - } - - if (((struct batman_if *)if_list.next)->if_active != IF_ACTIVE) { - rcu_read_unlock(); - - if (off == 0) - return sprintf(buff, - "BATMAN mesh %s disabled - primary interface not active\n", - net_dev->name); + return orig_fill_buffer_text(net_dev, buff, count, off); +} - return 0; - } - rcu_read_unlock(); +static ssize_t vis_data_read(struct kobject *kobj, + struct bin_attribute *bin_attr, + char *buff, loff_t off, size_t count) +{ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); - return orig_fill_buffer_text(buff, count, off); + return vis_fill_buffer_text(net_dev, buff, count, off); } static BAT_BIN_ATTR(transtable_local, S_IRUGO, transtable_local_read, NULL); static BAT_BIN_ATTR(transtable_global, S_IRUGO, transtable_global_read, NULL); static BAT_BIN_ATTR(originators, S_IRUGO, originators_read, NULL); +static BAT_BIN_ATTR(vis_data, S_IRUGO, vis_data_read, NULL); static struct bin_attribute *mesh_bin_attrs[] = { &bat_attr_transtable_local, &bat_attr_transtable_global, &bat_attr_originators, + &bat_attr_vis_data, NULL, }; @@ -210,6 +227,7 @@ int sysfs_add_meshif(struct net_device *dev) /* FIXME: should be done in the general mesh setup routine as soon as we have it */ atomic_set(&bat_priv->aggregation_enabled, 1); + atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE); bat_priv->mesh_obj = kobject_create_and_add(SYSFS_IF_MESH_SUBDIR, batif_kobject); diff --git a/drivers/staging/batman-adv/main.c b/drivers/staging/batman-adv/main.c index b5f8b80..54e8cd5 100644 --- a/drivers/staging/batman-adv/main.c +++ b/drivers/staging/batman-adv/main.c @@ -44,7 +44,6 @@ DEFINE_SPINLOCK(forw_bcast_list_lock); atomic_t originator_interval; atomic_t vis_interval; -atomic_t vis_mode; int16_t num_hna; int16_t num_ifs; @@ -84,7 +83,6 @@ int init_module(void) atomic_set(&originator_interval, 1000); atomic_set(&vis_interval, 1000);/* TODO: raise this later, this is only * for debugging now. */ - atomic_set(&vis_mode, VIS_TYPE_CLIENT_UPDATE); /* the name should not be longer than 10 chars - see * http://lwn.net/Articles/23634/ */ diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 3e28e9e..b2283a7 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -129,7 +129,6 @@ extern spinlock_t forw_bcast_list_lock; extern atomic_t originator_interval; extern atomic_t vis_interval; -extern atomic_t vis_mode; extern int16_t num_hna; extern int16_t num_ifs; diff --git a/drivers/staging/batman-adv/originator.c b/drivers/staging/batman-adv/originator.c index 818f56e..684db75 100644 --- a/drivers/staging/batman-adv/originator.c +++ b/drivers/staging/batman-adv/originator.c @@ -26,6 +26,7 @@ #include "hash.h" #include "translation-table.h" #include "routing.h" +#include "hard-interface.h" static DECLARE_DELAYED_WORK(purge_orig_wq, purge_orig); @@ -205,7 +206,6 @@ static bool purge_orig_neighbors(struct orig_node *orig_node, return neigh_purged; } - static bool purge_orig_node(struct orig_node *orig_node) { struct neigh_node *best_neigh_node; @@ -224,6 +224,7 @@ static bool purge_orig_node(struct orig_node *orig_node) orig_node->hna_buff, orig_node->hna_buff_len); } + return false; } @@ -249,7 +250,8 @@ void purge_orig(struct work_struct *work) start_purge_timer(); } -ssize_t orig_fill_buffer_text(char *buff, size_t count, loff_t off) +ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, + size_t count, loff_t off) { HASHIT(hashit); struct orig_node *orig_node; @@ -260,12 +262,35 @@ ssize_t orig_fill_buffer_text(char *buff, size_t count, loff_t off) char orig_str[ETH_STR_LEN], router_str[ETH_STR_LEN]; rcu_read_lock(); + if (list_empty(&if_list)) { + rcu_read_unlock(); + + if (off == 0) + return sprintf(buff, + "BATMAN mesh %s disabled - please specify interfaces to enable it\n", + net_dev->name); + + return 0; + } + + if (((struct batman_if *)if_list.next)->if_active != IF_ACTIVE) { + rcu_read_unlock(); + + if (off == 0) + return sprintf(buff, + "BATMAN mesh %s disabled - primary interface not active\n", + net_dev->name); + + return 0; + } + hdr_len = sprintf(buff, - " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s] \n", + " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s (%s)] \n", "Originator", "#", TQ_MAX_VALUE, "Nexthop", "outgoingIF", "Potential nexthops", SOURCE_VERSION, REVISION_VERSION_STR, ((struct batman_if *)if_list.next)->dev, - ((struct batman_if *)if_list.next)->addr_str); + ((struct batman_if *)if_list.next)->addr_str, + net_dev->name); rcu_read_unlock(); if (off < hdr_len) diff --git a/drivers/staging/batman-adv/originator.h b/drivers/staging/batman-adv/originator.h index 8289a85..745b4b0 100644 --- a/drivers/staging/batman-adv/originator.h +++ b/drivers/staging/batman-adv/originator.h @@ -28,4 +28,5 @@ struct orig_node *get_orig_node(uint8_t *addr); struct neigh_node * create_neighbor(struct orig_node *orig_node, struct orig_node *orig_neigh_node, uint8_t *neigh, struct batman_if *if_incoming); -ssize_t orig_fill_buffer_text(char *buff, size_t count, loff_t off); +ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, + size_t count, loff_t off); diff --git a/drivers/staging/batman-adv/proc.c b/drivers/staging/batman-adv/proc.c index 059b2d9..cbea642 100644 --- a/drivers/staging/batman-adv/proc.c +++ b/drivers/staging/batman-adv/proc.c @@ -30,7 +30,6 @@ static struct proc_dir_entry *proc_batman_dir, *proc_interface_file; static struct proc_dir_entry *proc_orig_interval_file; -static struct proc_dir_entry *proc_vis_srv_file, *proc_vis_data_file; static int proc_interfaces_read(struct seq_file *seq, void *offset) { @@ -173,145 +172,6 @@ static int proc_orig_interval_open(struct inode *inode, struct file *file) return single_open(file, proc_orig_interval_read, NULL); } -/* setting the mode of the vis server by the user */ -static ssize_t proc_vis_srv_write(struct file *file, const char __user * buffer, - size_t count, loff_t *ppos) -{ - char *vis_mode_string; - int not_copied = 0; - - vis_mode_string = kmalloc(count, GFP_KERNEL); - - if (!vis_mode_string) - return -ENOMEM; - - not_copied = copy_from_user(vis_mode_string, buffer, count); - vis_mode_string[count - not_copied - 1] = 0; - - if ((strcmp(vis_mode_string, "client") == 0) || - (strcmp(vis_mode_string, "disabled") == 0)) { - printk(KERN_INFO "batman-adv:Setting VIS mode to client (disabling vis server)\n"); - atomic_set(&vis_mode, VIS_TYPE_CLIENT_UPDATE); - } else if ((strcmp(vis_mode_string, "server") == 0) || - (strcmp(vis_mode_string, "enabled") == 0)) { - printk(KERN_INFO "batman-adv:Setting VIS mode to server (enabling vis server)\n"); - atomic_set(&vis_mode, VIS_TYPE_SERVER_SYNC); - } else - printk(KERN_ERR "batman-adv:Unknown VIS mode: %s\n", - vis_mode_string); - - kfree(vis_mode_string); - return count; -} - -static int proc_vis_srv_read(struct seq_file *seq, void *offset) -{ - int vis_server = atomic_read(&vis_mode); - - seq_printf(seq, "[%c] client mode (server disabled)\n", - (vis_server == VIS_TYPE_CLIENT_UPDATE) ? 'x' : ' '); - seq_printf(seq, "[%c] server mode (server enabled)\n", - (vis_server == VIS_TYPE_SERVER_SYNC) ? 'x' : ' '); - - return 0; -} - -static int proc_vis_srv_open(struct inode *inode, struct file *file) -{ - return single_open(file, proc_vis_srv_read, NULL); -} - -static int proc_vis_data_read(struct seq_file *seq, void *offset) -{ - HASHIT(hashit); - struct vis_info *info; - struct vis_info_entry *entries; - HLIST_HEAD(vis_if_list); - struct if_list_entry *entry; - struct hlist_node *pos, *n; - int i; - char tmp_addr_str[ETH_STR_LEN]; - unsigned long flags; - int vis_server = atomic_read(&vis_mode); - - rcu_read_lock(); - if (list_empty(&if_list) || (vis_server == VIS_TYPE_CLIENT_UPDATE)) { - rcu_read_unlock(); - goto end; - } - - rcu_read_unlock(); - - spin_lock_irqsave(&vis_hash_lock, flags); - while (hash_iterate(vis_hash, &hashit)) { - info = hashit.bucket->data; - entries = (struct vis_info_entry *) - ((char *)info + sizeof(struct vis_info)); - - for (i = 0; i < info->packet.entries; i++) { - if (entries[i].quality == 0) - continue; - proc_vis_insert_interface(entries[i].src, &vis_if_list, - compare_orig(entries[i].src, - info->packet.vis_orig)); - } - - hlist_for_each_entry(entry, pos, &vis_if_list, list) { - addr_to_string(tmp_addr_str, entry->addr); - seq_printf(seq, "%s,", tmp_addr_str); - - for (i = 0; i < info->packet.entries; i++) - proc_vis_read_entry(seq, &entries[i], - entry->addr, entry->primary); - - /* add primary/secondary records */ - if (compare_orig(entry->addr, info->packet.vis_orig)) - proc_vis_read_prim_sec(seq, &vis_if_list); - - seq_printf(seq, "\n"); - } - - hlist_for_each_entry_safe(entry, pos, n, &vis_if_list, list) { - hlist_del(&entry->list); - kfree(entry); - } - } - spin_unlock_irqrestore(&vis_hash_lock, flags); - -end: - return 0; -} - -static int proc_vis_data_open(struct inode *inode, struct file *file) -{ - return single_open(file, proc_vis_data_read, NULL); -} - -/* satisfying different prototypes ... */ -static ssize_t proc_dummy_write(struct file *file, const char __user *buffer, - size_t count, loff_t *ppos) -{ - return count; -} - -static const struct file_operations proc_vis_srv_fops = { - .owner = THIS_MODULE, - .open = proc_vis_srv_open, - .read = seq_read, - .write = proc_vis_srv_write, - .llseek = seq_lseek, - .release = single_release, -}; - -static const struct file_operations proc_vis_data_fops = { - .owner = THIS_MODULE, - .open = proc_vis_data_open, - .read = seq_read, - .write = proc_dummy_write, - .llseek = seq_lseek, - .release = single_release, -}; - static const struct file_operations proc_interfaces_fops = { .owner = THIS_MODULE, .open = proc_interfaces_open, @@ -338,12 +198,6 @@ void cleanup_procfs(void) if (proc_interface_file) remove_proc_entry(PROC_FILE_INTERFACES, proc_batman_dir); - if (proc_vis_data_file) - remove_proc_entry(PROC_FILE_VIS_DATA, proc_batman_dir); - - if (proc_vis_srv_file) - remove_proc_entry(PROC_FILE_VIS_SRV, proc_batman_dir); - if (proc_batman_dir) #ifdef __NET_NET_NAMESPACE_H remove_proc_entry(PROC_ROOT_DIR, init_net.proc_net); @@ -387,26 +241,5 @@ int setup_procfs(void) return -EFAULT; } - proc_vis_srv_file = create_proc_entry(PROC_FILE_VIS_SRV, - S_IWUSR | S_IRUGO, - proc_batman_dir); - if (proc_vis_srv_file) { - proc_vis_srv_file->proc_fops = &proc_vis_srv_fops; - } else { - printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_VIS_SRV); - cleanup_procfs(); - return -EFAULT; - } - - proc_vis_data_file = create_proc_entry(PROC_FILE_VIS_DATA, S_IRUGO, - proc_batman_dir); - if (proc_vis_data_file) { - proc_vis_data_file->proc_fops = &proc_vis_data_fops; - } else { - printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_VIS_DATA); - cleanup_procfs(); - return -EFAULT; - } - return 0; } diff --git a/drivers/staging/batman-adv/proc.h b/drivers/staging/batman-adv/proc.h index 68a255a..6a972a6 100644 --- a/drivers/staging/batman-adv/proc.h +++ b/drivers/staging/batman-adv/proc.h @@ -25,11 +25,6 @@ #define PROC_ROOT_DIR "batman-adv" #define PROC_FILE_INTERFACES "interfaces" #define PROC_FILE_ORIG_INTERVAL "orig_interval" -#define PROC_FILE_GATEWAYS "gateways" -#define PROC_FILE_LOG "log" -#define PROC_FILE_LOG_LEVEL "log_level" -#define PROC_FILE_VIS_SRV "vis_server" -#define PROC_FILE_VIS_DATA "vis_data" void cleanup_procfs(void); int setup_procfs(void); diff --git a/drivers/staging/batman-adv/routing.c b/drivers/staging/batman-adv/routing.c index a78ae5c..8c055a1 100644 --- a/drivers/staging/batman-adv/routing.c +++ b/drivers/staging/batman-adv/routing.c @@ -946,6 +946,7 @@ int recv_vis_packet(struct sk_buff *skb) { struct vis_packet *vis_packet; struct ethhdr *ethhdr; + struct bat_priv *bat_priv; int hdr_size = sizeof(struct vis_packet); if (skb_headlen(skb) < hdr_size) @@ -965,15 +966,20 @@ int recv_vis_packet(struct sk_buff *skb) if (is_my_mac(vis_packet->sender_orig)) return NET_RX_DROP; + /* FIXME: each batman_if will be attached to a softif */ + bat_priv = netdev_priv(soft_device); + switch (vis_packet->vis_type) { case VIS_TYPE_SERVER_SYNC: /* TODO: handle fragmented skbs properly */ - receive_server_sync_packet(vis_packet, skb_headlen(skb)); + receive_server_sync_packet(bat_priv, vis_packet, + skb_headlen(skb)); break; case VIS_TYPE_CLIENT_UPDATE: /* TODO: handle fragmented skbs properly */ - receive_client_update_packet(vis_packet, skb_headlen(skb)); + receive_client_update_packet(bat_priv, vis_packet, + skb_headlen(skb)); break; default: /* ignore unknown packet */ diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index 32d1756..a00aa88 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -243,7 +243,7 @@ void schedule_own_packet(struct batman_if *batman_if) struct bat_priv *bat_priv = netdev_priv(soft_device); unsigned long send_time; struct batman_packet *batman_packet; - int vis_server = atomic_read(&vis_mode); + int vis_server = atomic_read(&bat_priv->vis_mode); /** * the interface gets activated here to avoid race conditions between @@ -271,17 +271,17 @@ void schedule_own_packet(struct batman_if *batman_if) if (vis_server == VIS_TYPE_SERVER_SYNC) batman_packet->flags = VIS_SERVER; else - batman_packet->flags = 0; + batman_packet->flags &= ~VIS_SERVER; /* could be read by receive_bat_packet() */ atomic_inc(&batman_if->seqno); slide_own_bcast_window(batman_if); send_time = own_send_time(); - add_bat_packet_to_list(batman_if->packet_buff, + add_bat_packet_to_list(bat_priv, + batman_if->packet_buff, batman_if->packet_len, - batman_if, 1, send_time, - bat_priv); + batman_if, 1, send_time); } void schedule_forward_packet(struct orig_node *orig_node, @@ -336,10 +336,10 @@ void schedule_forward_packet(struct orig_node *orig_node, batman_packet->flags &= ~DIRECTLINK; send_time = forward_send_time(bat_priv); - add_bat_packet_to_list((unsigned char *)batman_packet, + add_bat_packet_to_list(bat_priv, + (unsigned char *)batman_packet, sizeof(struct batman_packet) + hna_buff_len, - if_incoming, 0, send_time, - bat_priv); + if_incoming, 0, send_time); } static void forw_packet_free(struct forw_packet *forw_packet) diff --git a/drivers/staging/batman-adv/soft-interface.c b/drivers/staging/batman-adv/soft-interface.c index 0dff959..829deb6 100644 --- a/drivers/staging/batman-adv/soft-interface.c +++ b/drivers/staging/batman-adv/soft-interface.c @@ -182,6 +182,7 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev) struct ethhdr *ethhdr = (struct ethhdr *)skb->data; struct bat_priv *priv = netdev_priv(dev); struct batman_if *batman_if; + struct bat_priv *bat_priv; uint8_t dstaddr[6]; int data_len = skb->len; unsigned long flags; @@ -189,6 +190,9 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev) if (atomic_read(&module_state) != MODULE_ACTIVE) goto dropped; + /* FIXME: each batman_if will be attached to a softif */ + bat_priv = netdev_priv(soft_device); + dev->trans_start = jiffies; /* TODO: check this for locks */ hna_local_add(ethhdr->h_source); diff --git a/drivers/staging/batman-adv/translation-table.c b/drivers/staging/batman-adv/translation-table.c index d43b1ad..b735200 100644 --- a/drivers/staging/batman-adv/translation-table.c +++ b/drivers/staging/batman-adv/translation-table.c @@ -165,6 +165,19 @@ int hna_local_fill_buffer_text(struct net_device *net_dev, char *buff, unsigned long flags; size_t hdr_len; + rcu_read_lock(); + if (list_empty(&if_list)) { + rcu_read_unlock(); + + if (off == 0) + return sprintf(buff, + "BATMAN mesh %s disabled - please specify interfaces to enable it\n", + net_dev->name); + + return 0; + } + rcu_read_unlock(); + hdr_len = sprintf(buff, "Locally retrieved addresses (from %s) announced via HNA:\n", net_dev->name); @@ -369,6 +382,19 @@ int hna_global_fill_buffer_text(struct net_device *net_dev, char *buff, unsigned long flags; size_t hdr_len; + rcu_read_lock(); + if (list_empty(&if_list)) { + rcu_read_unlock(); + + if (off == 0) + return sprintf(buff, + "BATMAN mesh %s disabled - please specify interfaces to enable it\n", + net_dev->name); + + return 0; + } + rcu_read_unlock(); + hdr_len = sprintf(buff, "Globally announced HNAs received via the mesh %s (translation table):\n", net_dev->name); diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index db1bb0b..e8d2e8c 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -83,6 +83,7 @@ struct neigh_node { struct bat_priv { struct net_device_stats stats; atomic_t aggregation_enabled; + atomic_t vis_mode; struct kobject *mesh_obj; }; diff --git a/drivers/staging/batman-adv/vis.c b/drivers/staging/batman-adv/vis.c index 0bfc083..5edeb32 100644 --- a/drivers/staging/batman-adv/vis.c +++ b/drivers/staging/batman-adv/vis.c @@ -102,7 +102,7 @@ static int vis_info_choose(void *data, int size) /* insert interface to the list of interfaces of one originator, if it * does not already exist in the list */ -void proc_vis_insert_interface(const uint8_t *interface, +static void vis_data_insert_interface(const uint8_t *interface, struct hlist_head *if_list, bool primary) { @@ -123,36 +123,119 @@ void proc_vis_insert_interface(const uint8_t *interface, hlist_add_head(&entry->list, if_list); } -void proc_vis_read_prim_sec(struct seq_file *seq, - struct hlist_head *if_list) +static ssize_t vis_data_read_prim_sec(char *buff, struct hlist_head *if_list) { struct if_list_entry *entry; struct hlist_node *pos; char tmp_addr_str[ETH_STR_LEN]; + size_t len = 0; hlist_for_each_entry(entry, pos, if_list, list) { if (entry->primary) - seq_printf(seq, "PRIMARY, "); + len += sprintf(buff + len, "PRIMARY, "); else { addr_to_string(tmp_addr_str, entry->addr); - seq_printf(seq, "SEC %s, ", tmp_addr_str); + len += sprintf(buff + len, "SEC %s, ", tmp_addr_str); } } + + return len; } /* read an entry */ -void proc_vis_read_entry(struct seq_file *seq, - struct vis_info_entry *entry, - uint8_t *src, - bool primary) +static ssize_t vis_data_read_entry(char *buff, struct vis_info_entry *entry, + uint8_t *src, bool primary) { char to[40]; addr_to_string(to, entry->dest); if (primary && entry->quality == 0) - seq_printf(seq, "HNA %s, ", to); + return sprintf(buff, "HNA %s, ", to); else if (compare_orig(entry->src, src)) - seq_printf(seq, "TQ %s %d, ", to, entry->quality); + return sprintf(buff, "TQ %s %d, ", to, entry->quality); + + return 0; +} + +ssize_t vis_fill_buffer_text(struct net_device *net_dev, char *buff, + size_t count, loff_t off) +{ + HASHIT(hashit); + struct vis_info *info; + struct vis_info_entry *entries; + struct bat_priv *bat_priv = netdev_priv(net_dev); + HLIST_HEAD(vis_if_list); + struct if_list_entry *entry; + struct hlist_node *pos, *n; + size_t hdr_len, tmp_len; + int i, bytes_written = 0; + char tmp_addr_str[ETH_STR_LEN]; + unsigned long flags; + int vis_server = atomic_read(&bat_priv->vis_mode); + + rcu_read_lock(); + if (list_empty(&if_list) || (vis_server == VIS_TYPE_CLIENT_UPDATE)) { + rcu_read_unlock(); + return 0; + } + + rcu_read_unlock(); + hdr_len = 0; + + spin_lock_irqsave(&vis_hash_lock, flags); + while (hash_iterate(vis_hash, &hashit)) { + info = hashit.bucket->data; + entries = (struct vis_info_entry *) + ((char *)info + sizeof(struct vis_info)); + + /* estimated line length */ + if (count < bytes_written + 200) + break; + + for (i = 0; i < info->packet.entries; i++) { + if (entries[i].quality == 0) + continue; + vis_data_insert_interface(entries[i].src, &vis_if_list, + compare_orig(entries[i].src, + info->packet.vis_orig)); + } + + hlist_for_each_entry(entry, pos, &vis_if_list, list) { + addr_to_string(tmp_addr_str, entry->addr); + tmp_len = sprintf(buff + bytes_written, + "%s,", tmp_addr_str); + + for (i = 0; i < info->packet.entries; i++) + tmp_len += vis_data_read_entry( + buff + bytes_written + tmp_len, + &entries[i], entry->addr, + entry->primary); + + /* add primary/secondary records */ + if (compare_orig(entry->addr, info->packet.vis_orig)) + tmp_len += vis_data_read_prim_sec( + buff + bytes_written + tmp_len, + &vis_if_list); + + tmp_len += sprintf(buff + bytes_written + tmp_len, + "\n"); + + hdr_len += tmp_len; + + if (off >= hdr_len) + continue; + + bytes_written += tmp_len; + } + + hlist_for_each_entry_safe(entry, pos, n, &vis_if_list, list) { + hlist_del(&entry->list); + kfree(entry); + } + } + spin_unlock_irqrestore(&vis_hash_lock, flags); + + return bytes_written; } /* add the info packet to the send list, if it was not @@ -280,12 +363,14 @@ static struct vis_info *add_packet(struct vis_packet *vis_packet, } /* handle the server sync packet, forward if needed. */ -void receive_server_sync_packet(struct vis_packet *vis_packet, int vis_info_len) +void receive_server_sync_packet(struct bat_priv *bat_priv, + struct vis_packet *vis_packet, + int vis_info_len) { struct vis_info *info; int is_new, make_broadcast; unsigned long flags; - int vis_server = atomic_read(&vis_mode); + int vis_server = atomic_read(&bat_priv->vis_mode); make_broadcast = (vis_server == VIS_TYPE_SERVER_SYNC); @@ -303,13 +388,14 @@ end: } /* handle an incoming client update packet and schedule forward if needed. */ -void receive_client_update_packet(struct vis_packet *vis_packet, +void receive_client_update_packet(struct bat_priv *bat_priv, + struct vis_packet *vis_packet, int vis_info_len) { struct vis_info *info; int is_new; unsigned long flags; - int vis_server = atomic_read(&vis_mode); + int vis_server = atomic_read(&bat_priv->vis_mode); int are_target = 0; /* clients shall not broadcast. */ @@ -376,7 +462,7 @@ static bool vis_packet_full(struct vis_info *info) /* generates a packet of own vis data, * returns 0 on success, -1 if no packet could be generated */ -static int generate_vis_packet(void) +static int generate_vis_packet(struct bat_priv *bat_priv) { HASHIT(hashit_local); HASHIT(hashit_global); @@ -388,7 +474,7 @@ static int generate_vis_packet(void) unsigned long flags; info->first_seen = jiffies; - info->packet.vis_type = atomic_read(&vis_mode); + info->packet.vis_type = atomic_read(&bat_priv->vis_mode); spin_lock_irqsave(&orig_hash_lock, flags); memcpy(info->packet.target_orig, broadcastAddr, ETH_ALEN); @@ -568,12 +654,14 @@ static void send_vis_packets(struct work_struct *work) { struct vis_info *info, *temp; unsigned long flags; + /* FIXME: each batman_if will be attached to a softif */ + struct bat_priv *bat_priv = netdev_priv(soft_device); spin_lock_irqsave(&vis_hash_lock, flags); purge_vis_packets(); - if (generate_vis_packet() == 0) { + if (generate_vis_packet(bat_priv) == 0) { /* schedule if generation was successful */ send_list_add(my_vis_info); } diff --git a/drivers/staging/batman-adv/vis.h b/drivers/staging/batman-adv/vis.h index 4e417fb..9c1fd77 100644 --- a/drivers/staging/batman-adv/vis.h +++ b/drivers/staging/batman-adv/vis.h @@ -47,18 +47,13 @@ struct recvlist_node { extern struct hashtable_t *vis_hash; extern spinlock_t vis_hash_lock; -void proc_vis_insert_interface(const uint8_t *interface, - struct hlist_head *if_list, - bool primary); -void proc_vis_read_entry(struct seq_file *seq, - struct vis_info_entry *entry, - uint8_t *src, - bool primary); -void proc_vis_read_prim_sec(struct seq_file *seq, - struct hlist_head *if_list); -void receive_server_sync_packet(struct vis_packet *vis_packet, +ssize_t vis_fill_buffer_text(struct net_device *net_dev, char *buff, + size_t count, loff_t off); +void receive_server_sync_packet(struct bat_priv *bat_priv, + struct vis_packet *vis_packet, int vis_info_len); -void receive_client_update_packet(struct vis_packet *vis_packet, +void receive_client_update_packet(struct bat_priv *bat_priv, + struct vis_packet *vis_packet, int vis_info_len); int vis_init(void); void vis_quit(void); -- cgit v0.10.2 From 1d59f82cb876ee9a1b4adc4f9b1063b855eac015 Mon Sep 17 00:00:00 2001 From: Marek Lindner Date: Fri, 7 May 2010 21:47:20 +0200 Subject: Staging: batman-adv: move originator interval setting from /proc to /sys Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/bat_sysfs.c b/drivers/staging/batman-adv/bat_sysfs.c index c14ab47..ea7ce77 100644 --- a/drivers/staging/batman-adv/bat_sysfs.c +++ b/drivers/staging/batman-adv/bat_sysfs.c @@ -153,13 +153,59 @@ static ssize_t store_vis_mode(struct kobject *kobj, struct attribute *attr, return count; } +static ssize_t show_orig_interval(struct kobject *kobj, struct attribute *attr, + char *buff) +{ + struct device *dev = to_dev(kobj->parent); + struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev)); + + return sprintf(buff, "status: %i\n", + atomic_read(&bat_priv->orig_interval)); +} + +static ssize_t store_orig_interval(struct kobject *kobj, struct attribute *attr, + char *buff, size_t count) +{ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); + struct bat_priv *bat_priv = netdev_priv(net_dev); + unsigned long orig_interval_tmp; + int ret; + + ret = strict_strtoul(buff, 10, &orig_interval_tmp); + if (ret) { + printk(KERN_INFO "batman-adv:Invalid parameter for 'orig_interval' setting on mesh %s received: %s\n", + net_dev->name, buff); + return -EINVAL; + } + + if (orig_interval_tmp <= JITTER * 2) { + printk(KERN_INFO "batman-adv:New originator interval too small: %li (min: %i)\n", + orig_interval_tmp, JITTER * 2); + return -EINVAL; + } + + if (atomic_read(&bat_priv->orig_interval) == orig_interval_tmp) + return count; + + printk(KERN_INFO "batman-adv:Changing originator interval from: %i to: %li on mesh: %s\n", + atomic_read(&bat_priv->orig_interval), + orig_interval_tmp, net_dev->name); + + atomic_set(&bat_priv->orig_interval, orig_interval_tmp); + return count; +} + static BAT_ATTR(aggregate_ogm, S_IRUGO | S_IWUSR, show_aggr_ogm, store_aggr_ogm); static BAT_ATTR(vis_mode, S_IRUGO | S_IWUSR, show_vis_mode, store_vis_mode); +static BAT_ATTR(orig_interval, S_IRUGO | S_IWUSR, + show_orig_interval, store_orig_interval); static struct bat_attribute *mesh_attrs[] = { &bat_attr_aggregate_ogm, &bat_attr_vis_mode, + &bat_attr_orig_interval, NULL, }; @@ -228,6 +274,7 @@ int sysfs_add_meshif(struct net_device *dev) routine as soon as we have it */ atomic_set(&bat_priv->aggregation_enabled, 1); atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE); + atomic_set(&bat_priv->orig_interval, 1000); bat_priv->mesh_obj = kobject_create_and_add(SYSFS_IF_MESH_SUBDIR, batif_kobject); diff --git a/drivers/staging/batman-adv/main.c b/drivers/staging/batman-adv/main.c index 54e8cd5..7d72685 100644 --- a/drivers/staging/batman-adv/main.c +++ b/drivers/staging/batman-adv/main.c @@ -42,7 +42,6 @@ DEFINE_SPINLOCK(orig_hash_lock); DEFINE_SPINLOCK(forw_bat_list_lock); DEFINE_SPINLOCK(forw_bcast_list_lock); -atomic_t originator_interval; atomic_t vis_interval; int16_t num_hna; int16_t num_ifs; @@ -80,7 +79,6 @@ int init_module(void) atomic_set(&module_state, MODULE_INACTIVE); - atomic_set(&originator_interval, 1000); atomic_set(&vis_interval, 1000);/* TODO: raise this later, this is only * for debugging now. */ diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index b2283a7..59a70c7 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -127,7 +127,6 @@ extern spinlock_t orig_hash_lock; extern spinlock_t forw_bat_list_lock; extern spinlock_t forw_bcast_list_lock; -extern atomic_t originator_interval; extern atomic_t vis_interval; extern int16_t num_hna; extern int16_t num_ifs; diff --git a/drivers/staging/batman-adv/proc.c b/drivers/staging/batman-adv/proc.c index cbea642..25b24fe 100644 --- a/drivers/staging/batman-adv/proc.c +++ b/drivers/staging/batman-adv/proc.c @@ -29,7 +29,6 @@ #include "vis.h" static struct proc_dir_entry *proc_batman_dir, *proc_interface_file; -static struct proc_dir_entry *proc_orig_interval_file; static int proc_interfaces_read(struct seq_file *seq, void *offset) { @@ -121,57 +120,6 @@ end: return count; } -static int proc_orig_interval_read(struct seq_file *seq, void *offset) -{ - seq_printf(seq, "%i\n", atomic_read(&originator_interval)); - - return 0; -} - -static ssize_t proc_orig_interval_write(struct file *file, - const char __user *buffer, - size_t count, loff_t *ppos) -{ - char *interval_string; - int not_copied = 0; - unsigned long originator_interval_tmp; - int retval; - - interval_string = kmalloc(count, GFP_KERNEL); - - if (!interval_string) - return -ENOMEM; - - not_copied = copy_from_user(interval_string, buffer, count); - interval_string[count - not_copied - 1] = 0; - - retval = strict_strtoul(interval_string, 10, &originator_interval_tmp); - if (retval) { - printk(KERN_ERR "batman-adv:New originator interval invalid\n"); - goto end; - } - - if (originator_interval_tmp <= JITTER * 2) { - printk(KERN_WARNING "batman-adv:New originator interval too small: %li (min: %i)\n", - originator_interval_tmp, JITTER * 2); - goto end; - } - - printk(KERN_INFO "batman-adv:Changing originator interval from: %i to: %li\n", - atomic_read(&originator_interval), originator_interval_tmp); - - atomic_set(&originator_interval, originator_interval_tmp); - -end: - kfree(interval_string); - return count; -} - -static int proc_orig_interval_open(struct inode *inode, struct file *file) -{ - return single_open(file, proc_orig_interval_read, NULL); -} - static const struct file_operations proc_interfaces_fops = { .owner = THIS_MODULE, .open = proc_interfaces_open, @@ -181,20 +129,8 @@ static const struct file_operations proc_interfaces_fops = { .release = single_release, }; -static const struct file_operations proc_orig_interval_fops = { - .owner = THIS_MODULE, - .open = proc_orig_interval_open, - .read = seq_read, - .write = proc_orig_interval_write, - .llseek = seq_lseek, - .release = single_release, -}; - void cleanup_procfs(void) { - if (proc_orig_interval_file) - remove_proc_entry(PROC_FILE_ORIG_INTERVAL, proc_batman_dir); - if (proc_interface_file) remove_proc_entry(PROC_FILE_INTERFACES, proc_batman_dir); @@ -230,16 +166,5 @@ int setup_procfs(void) return -EFAULT; } - proc_orig_interval_file = create_proc_entry(PROC_FILE_ORIG_INTERVAL, - S_IWUSR | S_IRUGO, - proc_batman_dir); - if (proc_orig_interval_file) { - proc_orig_interval_file->proc_fops = &proc_orig_interval_fops; - } else { - printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_ORIG_INTERVAL); - cleanup_procfs(); - return -EFAULT; - } - return 0; } diff --git a/drivers/staging/batman-adv/proc.h b/drivers/staging/batman-adv/proc.h index 6a972a6..6f4f5b3 100644 --- a/drivers/staging/batman-adv/proc.h +++ b/drivers/staging/batman-adv/proc.h @@ -24,7 +24,6 @@ #define PROC_ROOT_DIR "batman-adv" #define PROC_FILE_INTERFACES "interfaces" -#define PROC_FILE_ORIG_INTERVAL "orig_interval" void cleanup_procfs(void); int setup_procfs(void); diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index a00aa88..de2344a 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -36,10 +36,10 @@ static uint8_t hop_penalty(const uint8_t tq) } /* when do we schedule our own packet to be sent */ -static unsigned long own_send_time(void) +static unsigned long own_send_time(struct bat_priv *bat_priv) { return jiffies + - (((atomic_read(&originator_interval) - JITTER + + (((atomic_read(&bat_priv->orig_interval) - JITTER + (random32() % 2*JITTER)) * HZ) / 1000); } @@ -277,7 +277,7 @@ void schedule_own_packet(struct batman_if *batman_if) atomic_inc(&batman_if->seqno); slide_own_bcast_window(batman_if); - send_time = own_send_time(); + send_time = own_send_time(bat_priv); add_bat_packet_to_list(bat_priv, batman_if->packet_buff, batman_if->packet_len, diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index e8d2e8c..a8c6ad7 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -84,6 +84,7 @@ struct bat_priv { struct net_device_stats stats; atomic_t aggregation_enabled; atomic_t vis_mode; + atomic_t orig_interval; struct kobject *mesh_obj; }; -- cgit v0.10.2 From 35bd69d42e2fba4c0fd547e3bf99a0afd5700f76 Mon Sep 17 00:00:00 2001 From: Marek Lindner Date: Fri, 7 May 2010 21:47:21 +0200 Subject: Staging: batman-adv: remove redundant pointer to originator interface Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/device.c b/drivers/staging/batman-adv/device.c index 9887f05..c419c62 100644 --- a/drivers/staging/batman-adv/device.c +++ b/drivers/staging/batman-adv/device.c @@ -250,7 +250,7 @@ ssize_t bat_device_write(struct file *file, const char __user *buff, if (!orig_node->router) goto unlock; - batman_if = orig_node->batman_if; + batman_if = orig_node->router->if_incoming; memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); diff --git a/drivers/staging/batman-adv/originator.c b/drivers/staging/batman-adv/originator.c index 684db75..4152701 100644 --- a/drivers/staging/batman-adv/originator.c +++ b/drivers/staging/batman-adv/originator.c @@ -137,7 +137,6 @@ struct orig_node *get_orig_node(uint8_t *addr) memcpy(orig_node->orig, addr, ETH_ALEN); orig_node->router = NULL; - orig_node->batman_if = NULL; orig_node->hna_buff = NULL; size = num_ifs * sizeof(TYPE_OF_WORD) * NUM_WORDS; diff --git a/drivers/staging/batman-adv/routing.c b/drivers/staging/batman-adv/routing.c index 8c055a1..0a9f52b 100644 --- a/drivers/staging/batman-adv/routing.c +++ b/drivers/staging/batman-adv/routing.c @@ -97,11 +97,6 @@ static void update_route(struct orig_node *orig_node, bat_dbg(DBG_ROUTES, "Changing route towards: %pM (now via %pM - was via %pM)\n", orig_node->orig, neigh_node->addr, orig_node->router->addr); } - if (neigh_node != NULL) - orig_node->batman_if = neigh_node->if_incoming; - else - orig_node->batman_if = NULL; - orig_node->router = neigh_node; } @@ -616,12 +611,11 @@ static int recv_my_icmp_packet(struct sk_buff *skb) ret = NET_RX_DROP; if ((orig_node != NULL) && - (orig_node->batman_if != NULL) && (orig_node->router != NULL)) { /* don't lock while sending the packets ... we therefore * copy the required data before sending */ - batman_if = orig_node->batman_if; + batman_if = orig_node->router->if_incoming; memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); @@ -678,12 +672,11 @@ static int recv_icmp_ttl_exceeded(struct sk_buff *skb) ret = NET_RX_DROP; if ((orig_node != NULL) && - (orig_node->batman_if != NULL) && (orig_node->router != NULL)) { /* don't lock while sending the packets ... we therefore * copy the required data before sending */ - batman_if = orig_node->batman_if; + batman_if = orig_node->router->if_incoming; memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); @@ -760,12 +753,11 @@ int recv_icmp_packet(struct sk_buff *skb) hash_find(orig_hash, icmp_packet->dst)); if ((orig_node != NULL) && - (orig_node->batman_if != NULL) && (orig_node->router != NULL)) { /* don't lock while sending the packets ... we therefore * copy the required data before sending */ - batman_if = orig_node->batman_if; + batman_if = orig_node->router->if_incoming; memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); @@ -844,12 +836,11 @@ int recv_unicast_packet(struct sk_buff *skb) hash_find(orig_hash, unicast_packet->dest)); if ((orig_node != NULL) && - (orig_node->batman_if != NULL) && (orig_node->router != NULL)) { /* don't lock while sending the packets ... we therefore * copy the required data before sending */ - batman_if = orig_node->batman_if; + batman_if = orig_node->router->if_incoming; memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); diff --git a/drivers/staging/batman-adv/soft-interface.c b/drivers/staging/batman-adv/soft-interface.c index 829deb6..4cdebe5 100644 --- a/drivers/staging/batman-adv/soft-interface.c +++ b/drivers/staging/batman-adv/soft-interface.c @@ -236,7 +236,6 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev) orig_node = transtable_search(ethhdr->h_dest); if ((orig_node) && - (orig_node->batman_if) && (orig_node->router)) { if (my_skb_push(skb, sizeof(struct unicast_packet)) < 0) goto unlock; @@ -252,13 +251,13 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev) memcpy(unicast_packet->dest, orig_node->orig, ETH_ALEN); /* net_dev won't be available when not active */ - if (orig_node->batman_if->if_active != IF_ACTIVE) + if (orig_node->router->if_incoming->if_active != IF_ACTIVE) goto unlock; /* don't lock while sending the packets ... we therefore * copy the required data before sending */ - batman_if = orig_node->batman_if; + batman_if = orig_node->router->if_incoming; memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index a8c6ad7..ffaa16c 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -49,7 +49,6 @@ struct batman_if { struct orig_node { /* structure for orig_list maintaining nodes of mesh */ uint8_t orig[ETH_ALEN]; struct neigh_node *router; - struct batman_if *batman_if; TYPE_OF_WORD *bcast_own; uint8_t *bcast_own_sum; uint8_t tq_own; diff --git a/drivers/staging/batman-adv/vis.c b/drivers/staging/batman-adv/vis.c index 5edeb32..57d69d7 100644 --- a/drivers/staging/batman-adv/vis.c +++ b/drivers/staging/batman-adv/vis.c @@ -498,14 +498,14 @@ static int generate_vis_packet(struct bat_priv *bat_priv) if (orig_node->router != NULL && compare_orig(orig_node->router->addr, orig_node->orig) - && orig_node->batman_if - && (orig_node->batman_if->if_active == IF_ACTIVE) + && (orig_node->router->if_incoming->if_active == + IF_ACTIVE) && orig_node->router->tq_avg > 0) { /* fill one entry into buffer. */ entry = &entry_array[info->packet.entries]; memcpy(entry->src, - orig_node->batman_if->net_dev->dev_addr, + orig_node->router->if_incoming->net_dev->dev_addr, ETH_ALEN); memcpy(entry->dest, orig_node->orig, ETH_ALEN); entry->quality = orig_node->router->tq_avg; @@ -573,8 +573,7 @@ static void broadcast_vis_packet(struct vis_info *info, int packet_length) orig_node = hashit.bucket->data; /* if it's a vis server and reachable, send it. */ - if ((!orig_node) || (!orig_node->batman_if) || - (!orig_node->router)) + if ((!orig_node) || (!orig_node->router)) continue; if (!(orig_node->flags & VIS_SERVER)) continue; @@ -584,7 +583,7 @@ static void broadcast_vis_packet(struct vis_info *info, int packet_length) continue; memcpy(info->packet.target_orig, orig_node->orig, ETH_ALEN); - batman_if = orig_node->batman_if; + batman_if = orig_node->router->if_incoming; memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); @@ -609,12 +608,12 @@ static void unicast_vis_packet(struct vis_info *info, int packet_length) orig_node = ((struct orig_node *) hash_find(orig_hash, info->packet.target_orig)); - if ((!orig_node) || (!orig_node->batman_if) || (!orig_node->router)) + if ((!orig_node) || (!orig_node->router)) goto out; /* don't lock while sending the packets ... we therefore * copy the required data before sending */ - batman_if = orig_node->batman_if; + batman_if = orig_node->router->if_incoming; memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); -- cgit v0.10.2 From 208e13e4297a1d9b986aa371c4529df7dda1c835 Mon Sep 17 00:00:00 2001 From: Marek Lindner Date: Fri, 7 May 2010 21:47:22 +0200 Subject: Staging: batman-adv: move /proc interface handling to /sys Instead of having a single /proc file "interfaces" in which you have to echo the wanted interface batman-adv will create a subfolder in each suitable /sys/class/net folder. This subfolder contains files for the interface specific settings. For example, mesh_iface to add/remove an interface from a virtual mesh network (at the moment only bat0 is supported). Example: echo bat0 > /sys/class/net/eth0/batman-adv/mesh_iface to deactivate: echo none > /sys/class/net/eth0/batman-adv/mesh_iface Interfaces which are not compatible with batman-adv won't contain the batman-adv folder, therefore can't be activated. Not supported are: loopback, non-ethernet, non-ARP and virtual mesh network interfaces Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/Makefile b/drivers/staging/batman-adv/Makefile index 9ad0429..f25068c 100644 --- a/drivers/staging/batman-adv/Makefile +++ b/drivers/staging/batman-adv/Makefile @@ -19,4 +19,4 @@ # obj-m += batman-adv.o -batman-adv-objs := main.o proc.o send.o routing.o soft-interface.o device.o translation-table.o bitarray.o hash.o ring_buffer.o vis.o hard-interface.o aggregation.o originator.o bat_sysfs.o +batman-adv-objs := main.o send.o routing.o soft-interface.o device.o translation-table.o bitarray.o hash.o ring_buffer.o vis.o hard-interface.o aggregation.o originator.o bat_sysfs.o diff --git a/drivers/staging/batman-adv/bat_sysfs.c b/drivers/staging/batman-adv/bat_sysfs.c index ea7ce77..1811c8d 100644 --- a/drivers/staging/batman-adv/bat_sysfs.c +++ b/drivers/staging/batman-adv/bat_sysfs.c @@ -36,6 +36,14 @@ struct bat_attribute { char *buf, size_t count); }; +struct hardif_attribute { + struct attribute attr; + ssize_t (*show)(struct kobject *kobj, struct attribute *attr, + char *buf); + ssize_t (*store)(struct kobject *kobj, struct attribute *attr, + char *buf, size_t count); +}; + #define BAT_ATTR(_name, _mode, _show, _store) \ struct bat_attribute bat_attr_##_name = { \ .attr = {.name = __stringify(_name), \ @@ -52,6 +60,14 @@ struct bin_attribute bat_attr_##_name = { \ .write = _write, \ }; +#define HARDIF_ATTR(_name, _mode, _show, _store) \ +struct hardif_attribute hardif_attr_##_name = { \ + .attr = {.name = __stringify(_name), \ + .mode = _mode }, \ + .show = _show, \ + .store = _store, \ +}; + static ssize_t show_aggr_ogm(struct kobject *kobj, struct attribute *attr, char *buff) { @@ -275,6 +291,8 @@ int sysfs_add_meshif(struct net_device *dev) atomic_set(&bat_priv->aggregation_enabled, 1); atomic_set(&bat_priv->vis_mode, VIS_TYPE_CLIENT_UPDATE); atomic_set(&bat_priv->orig_interval, 1000); + bat_priv->primary_if = NULL; + bat_priv->num_ifaces = 0; bat_priv->mesh_obj = kobject_create_and_add(SYSFS_IF_MESH_SUBDIR, batif_kobject); @@ -335,3 +353,132 @@ void sysfs_del_meshif(struct net_device *dev) kobject_put(bat_priv->mesh_obj); bat_priv->mesh_obj = NULL; } + +static ssize_t show_mesh_iface(struct kobject *kobj, struct attribute *attr, + char *buff) +{ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); + struct batman_if *batman_if = get_batman_if_by_netdev(net_dev); + + if (!batman_if) + return 0; + + return sprintf(buff, "status: %s\ncommands: none, bat0 \n", + batman_if->if_status == IF_NOT_IN_USE ? + "none" : "bat0"); +} + +static ssize_t store_mesh_iface(struct kobject *kobj, struct attribute *attr, + char *buff, size_t count) +{ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); + struct batman_if *batman_if = get_batman_if_by_netdev(net_dev); + int status_tmp = -1; + + if (!batman_if) + return count; + + if (strncmp(buff, "none", 4) == 0) + status_tmp = IF_NOT_IN_USE; + + if (strncmp(buff, "bat0", 4) == 0) + status_tmp = IF_I_WANT_YOU; + + if (status_tmp < 0) { + if (buff[count - 1] == '\n') + buff[count - 1] = '\0'; + + printk(KERN_ERR "batman-adv:Invalid parameter for 'mesh_iface' setting received: %s\n", + buff); + return -EINVAL; + } + + if ((batman_if->if_status == status_tmp) || + ((status_tmp == IF_I_WANT_YOU) && + (batman_if->if_status != IF_NOT_IN_USE))) + return count; + + if (status_tmp == IF_I_WANT_YOU) + status_tmp = hardif_enable_interface(batman_if); + else + hardif_disable_interface(batman_if); + + return (status_tmp < 0 ? status_tmp : count); +} + +static ssize_t show_iface_status(struct kobject *kobj, struct attribute *attr, + char *buff) +{ + struct device *dev = to_dev(kobj->parent); + struct net_device *net_dev = to_net_dev(dev); + struct batman_if *batman_if = get_batman_if_by_netdev(net_dev); + + if (!batman_if) + return 0; + + switch (batman_if->if_status) { + case IF_TO_BE_REMOVED: + return sprintf(buff, "disabling\n"); + case IF_INACTIVE: + return sprintf(buff, "inactive\n"); + case IF_ACTIVE: + return sprintf(buff, "active\n"); + case IF_TO_BE_ACTIVATED: + return sprintf(buff, "enabling\n"); + case IF_NOT_IN_USE: + default: + return sprintf(buff, "not in use\n"); + } +} + +static HARDIF_ATTR(mesh_iface, S_IRUGO | S_IWUSR, + show_mesh_iface, store_mesh_iface); +static HARDIF_ATTR(iface_status, S_IRUGO, show_iface_status, NULL); + +static struct hardif_attribute *batman_attrs[] = { + &hardif_attr_mesh_iface, + &hardif_attr_iface_status, + NULL, +}; + +int sysfs_add_hardif(struct kobject **hardif_obj, struct net_device *dev) +{ + struct kobject *hardif_kobject = &dev->dev.kobj; + struct hardif_attribute **hardif_attr; + int err; + + *hardif_obj = kobject_create_and_add(SYSFS_IF_BAT_SUBDIR, + hardif_kobject); + + if (!*hardif_obj) { + printk(KERN_ERR "batman-adv:Can't add sysfs directory: %s/%s\n", + dev->name, SYSFS_IF_BAT_SUBDIR); + goto out; + } + + for (hardif_attr = batman_attrs; *hardif_attr; ++hardif_attr) { + err = sysfs_create_file(*hardif_obj, &((*hardif_attr)->attr)); + if (err) { + printk(KERN_ERR "batman-adv:Can't add sysfs file: %s/%s/%s\n", + dev->name, SYSFS_IF_BAT_SUBDIR, + ((*hardif_attr)->attr).name); + goto rem_attr; + } + } + + return 0; + +rem_attr: + for (hardif_attr = batman_attrs; *hardif_attr; ++hardif_attr) + sysfs_remove_file(*hardif_obj, &((*hardif_attr)->attr)); +out: + return -ENOMEM; +} + +void sysfs_del_hardif(struct kobject **hardif_obj) +{ + kobject_put(*hardif_obj); + *hardif_obj = NULL; +} diff --git a/drivers/staging/batman-adv/bat_sysfs.h b/drivers/staging/batman-adv/bat_sysfs.h index 671ebd1..e189341 100644 --- a/drivers/staging/batman-adv/bat_sysfs.h +++ b/drivers/staging/batman-adv/bat_sysfs.h @@ -21,6 +21,9 @@ #define SYSFS_IF_MESH_SUBDIR "mesh" +#define SYSFS_IF_BAT_SUBDIR "batman_adv" int sysfs_add_meshif(struct net_device *dev); void sysfs_del_meshif(struct net_device *dev); +int sysfs_add_hardif(struct kobject **hardif_obj, struct net_device *dev); +void sysfs_del_hardif(struct kobject **hardif_obj); diff --git a/drivers/staging/batman-adv/device.c b/drivers/staging/batman-adv/device.c index c419c62..b2ecba2 100644 --- a/drivers/staging/batman-adv/device.c +++ b/drivers/staging/batman-adv/device.c @@ -258,7 +258,7 @@ ssize_t bat_device_write(struct file *file, const char __user *buff, if (!batman_if) goto dst_unreach; - if (batman_if->if_active != IF_ACTIVE) + if (batman_if->if_status != IF_ACTIVE) goto dst_unreach; memcpy(icmp_packet.orig, diff --git a/drivers/staging/batman-adv/hard-interface.c b/drivers/staging/batman-adv/hard-interface.c index cb9e927..b82cae7 100644 --- a/drivers/staging/batman-adv/hard-interface.c +++ b/drivers/staging/batman-adv/hard-interface.c @@ -25,22 +25,21 @@ #include "send.h" #include "translation-table.h" #include "routing.h" +#include "bat_sysfs.h" +#include "originator.h" #include "hash.h" -#define MIN(x, y) ((x) < (y) ? (x) : (y)) - -static char avail_ifs; -static char active_ifs; +#include -static void hardif_free_interface(struct rcu_head *rcu); +#define MIN(x, y) ((x) < (y) ? (x) : (y)) -static struct batman_if *get_batman_if_by_name(char *name) +struct batman_if *get_batman_if_by_netdev(struct net_device *net_dev) { struct batman_if *batman_if; rcu_read_lock(); list_for_each_entry_rcu(batman_if, &if_list, list) { - if (strncmp(batman_if->dev, name, IFNAMSIZ) == 0) + if (batman_if->net_dev == net_dev) goto out; } @@ -51,23 +50,90 @@ out: return batman_if; } -int hardif_min_mtu(void) +static int is_valid_iface(struct net_device *net_dev) +{ + if (net_dev->flags & IFF_LOOPBACK) + return 0; + + if (net_dev->type != ARPHRD_ETHER) + return 0; + + if (net_dev->addr_len != ETH_ALEN) + return 0; + + /* no batman over batman */ +#ifdef HAVE_NET_DEVICE_OPS + if (net_dev->netdev_ops->ndo_start_xmit == interface_tx) + return 0; +#else + if (net_dev->hard_start_xmit == interface_tx) + return 0; +#endif + + /* Device is being bridged */ + /* if (net_dev->br_port != NULL) + return 0; */ + + return 1; +} + +static struct batman_if *get_active_batman_if(void) { struct batman_if *batman_if; - /* allow big frames if all devices are capable to do so - * (have MTU > 1500 + BAT_HEADER_LEN) */ - int min_mtu = ETH_DATA_LEN; + /* TODO: should check interfaces belonging to bat_priv */ rcu_read_lock(); list_for_each_entry_rcu(batman_if, &if_list, list) { - if ((batman_if->if_active == IF_ACTIVE) || - (batman_if->if_active == IF_TO_BE_ACTIVATED)) - min_mtu = MIN(batman_if->net_dev->mtu - BAT_HEADER_LEN, - min_mtu); + if (batman_if->if_status == IF_ACTIVE) + goto out; } + + batman_if = NULL; + +out: rcu_read_unlock(); + return batman_if; +} - return min_mtu; +static void set_primary_if(struct bat_priv *bat_priv, + struct batman_if *batman_if) +{ + struct batman_packet *batman_packet; + + bat_priv->primary_if = batman_if; + + if (!bat_priv->primary_if) + return; + + set_main_if_addr(batman_if->net_dev->dev_addr); + + batman_packet = (struct batman_packet *)(batman_if->packet_buff); + batman_packet->flags = 0; + batman_packet->ttl = TTL; + + /*** + * hacky trick to make sure that we send the HNA information via + * our new primary interface + */ + atomic_set(&hna_local_changed, 1); +} + +static bool hardif_is_iface_up(struct batman_if *batman_if) +{ + if (batman_if->net_dev->flags & IFF_UP) + return true; + + return false; +} + +static void update_mac_addresses(struct batman_if *batman_if) +{ + addr_to_string(batman_if->addr_str, batman_if->net_dev->dev_addr); + + memcpy(((struct batman_packet *)(batman_if->packet_buff))->orig, + batman_if->net_dev->dev_addr, ETH_ALEN); + memcpy(((struct batman_packet *)(batman_if->packet_buff))->prev_sender, + batman_if->net_dev->dev_addr, ETH_ALEN); } static void check_known_mac_addr(uint8_t *addr) @@ -76,8 +142,8 @@ static void check_known_mac_addr(uint8_t *addr) rcu_read_lock(); list_for_each_entry_rcu(batman_if, &if_list, list) { - if ((batman_if->if_active != IF_ACTIVE) && - (batman_if->if_active != IF_TO_BE_ACTIVATED)) + if ((batman_if->if_status != IF_ACTIVE) && + (batman_if->if_status != IF_TO_BE_ACTIVATED)) continue; if (!compare_orig(batman_if->net_dev->dev_addr, addr)) @@ -90,6 +156,25 @@ static void check_known_mac_addr(uint8_t *addr) rcu_read_unlock(); } +int hardif_min_mtu(void) +{ + struct batman_if *batman_if; + /* allow big frames if all devices are capable to do so + * (have MTU > 1500 + BAT_HEADER_LEN) */ + int min_mtu = ETH_DATA_LEN; + + rcu_read_lock(); + list_for_each_entry_rcu(batman_if, &if_list, list) { + if ((batman_if->if_status == IF_ACTIVE) || + (batman_if->if_status == IF_TO_BE_ACTIVATED)) + min_mtu = MIN(batman_if->net_dev->mtu - BAT_HEADER_LEN, + min_mtu); + } + rcu_read_unlock(); + + return min_mtu; +} + /* adjusts the MTU if a new interface with a smaller MTU appeared. */ void update_min_mtu(void) { @@ -100,322 +185,246 @@ void update_min_mtu(void) soft_device->mtu = min_mtu; } -/* checks if the interface is up. (returns 1 if it is) */ -static int hardif_is_interface_up(char *dev) +static void hardif_activate_interface(struct bat_priv *bat_priv, + struct batman_if *batman_if) { - struct net_device *net_dev; + if (batman_if->if_status != IF_INACTIVE) + return; - /** - * if we already have an interface in our interface list and - * the current interface is not the primary interface and - * the primary interface is not up and - * the primary interface has never been up - don't activate any - * secondary interface ! - */ + dev_hold(batman_if->net_dev); - rcu_read_lock(); - if ((!list_empty(&if_list)) && - strncmp(((struct batman_if *)if_list.next)->dev, dev, IFNAMSIZ) && - !(((struct batman_if *)if_list.next)->if_active == IF_ACTIVE) && - !(((struct batman_if *)if_list.next)->if_active == IF_TO_BE_ACTIVATED) && - (!main_if_was_up())) { - rcu_read_unlock(); - goto end; - } - rcu_read_unlock(); + update_mac_addresses(batman_if); + batman_if->if_status = IF_TO_BE_ACTIVATED; -#ifdef __NET_NET_NAMESPACE_H - net_dev = dev_get_by_name(&init_net, dev); -#else - net_dev = dev_get_by_name(dev); -#endif - if (!net_dev) - goto end; + /** + * the first active interface becomes our primary interface or + * the next active interface after the old primay interface was removed + */ + if (!bat_priv->primary_if) + set_primary_if(bat_priv, batman_if); - if (!(net_dev->flags & IFF_UP)) - goto failure; + printk(KERN_INFO "batman-adv:Interface activated: %s\n", + batman_if->dev); - dev_put(net_dev); - return 1; + if (atomic_read(&module_state) == MODULE_INACTIVE) + activate_module(); -failure: - dev_put(net_dev); -end: - return 0; + update_min_mtu(); + return; } -/* deactivates the interface. */ -void hardif_deactivate_interface(struct batman_if *batman_if) +static void hardif_deactivate_interface(struct batman_if *batman_if) { - if (batman_if->if_active != IF_ACTIVE) + if ((batman_if->if_status != IF_ACTIVE) && + (batman_if->if_status != IF_TO_BE_ACTIVATED)) return; - /** - * batman_if->net_dev has been acquired by dev_get_by_name() in - * proc_interfaces_write() and has to be unreferenced. - */ - - if (batman_if->net_dev) - dev_put(batman_if->net_dev); + dev_put(batman_if->net_dev); - batman_if->if_active = IF_INACTIVE; - active_ifs--; + batman_if->if_status = IF_INACTIVE; printk(KERN_INFO "batman-adv:Interface deactivated: %s\n", - batman_if->dev); + batman_if->dev); + + update_min_mtu(); } -/* (re)activate given interface. */ -static void hardif_activate_interface(struct batman_if *batman_if) +int hardif_enable_interface(struct batman_if *batman_if) { - if (batman_if->if_active != IF_INACTIVE) - return; - -#ifdef __NET_NET_NAMESPACE_H - batman_if->net_dev = dev_get_by_name(&init_net, batman_if->dev); -#else - batman_if->net_dev = dev_get_by_name(batman_if->dev); -#endif - if (!batman_if->net_dev) - goto dev_err; + /* FIXME: each batman_if will be attached to a softif */ + struct bat_priv *bat_priv = netdev_priv(soft_device); + struct batman_packet *batman_packet; - check_known_mac_addr(batman_if->net_dev->dev_addr); + if (batman_if->if_status != IF_NOT_IN_USE) + goto out; - addr_to_string(batman_if->addr_str, batman_if->net_dev->dev_addr); + batman_if->packet_len = BAT_PACKET_LEN; + batman_if->packet_buff = kmalloc(batman_if->packet_len, GFP_ATOMIC); - memcpy(((struct batman_packet *)(batman_if->packet_buff))->orig, - batman_if->net_dev->dev_addr, ETH_ALEN); - memcpy(((struct batman_packet *)(batman_if->packet_buff))->prev_sender, - batman_if->net_dev->dev_addr, ETH_ALEN); + if (!batman_if->packet_buff) { + printk(KERN_ERR "batman-adv:Can't add interface packet (%s): out of memory\n", + batman_if->dev); + goto err; + } - batman_if->if_active = IF_TO_BE_ACTIVATED; - active_ifs++; + batman_packet = (struct batman_packet *)(batman_if->packet_buff); + batman_packet->packet_type = BAT_PACKET; + batman_packet->version = COMPAT_VERSION; + batman_packet->flags = 0; + batman_packet->ttl = 2; + batman_packet->tq = TQ_MAX_VALUE; + batman_packet->num_hna = 0; - /* save the mac address if it is our primary interface */ - if (batman_if->if_num == 0) - set_main_if_addr(batman_if->net_dev->dev_addr); + batman_if->if_num = bat_priv->num_ifaces; + bat_priv->num_ifaces++; + batman_if->if_status = IF_INACTIVE; + orig_hash_add_if(batman_if, bat_priv->num_ifaces); - printk(KERN_INFO "batman-adv:Interface activated: %s\n", - batman_if->dev); + atomic_set(&batman_if->seqno, 1); + printk(KERN_INFO "batman-adv:Adding interface: %s\n", batman_if->dev); - return; + if (hardif_is_iface_up(batman_if)) + hardif_activate_interface(bat_priv, batman_if); + else + printk(KERN_ERR "batman-adv:Not using interface %s (retrying later): interface not active\n", batman_if->dev); -dev_err: - batman_if->net_dev = NULL; -} + /* begin scheduling originator messages on that interface */ + schedule_own_packet(batman_if); -static void hardif_free_interface(struct rcu_head *rcu) -{ - struct batman_if *batman_if = container_of(rcu, struct batman_if, rcu); +out: + return 0; - kfree(batman_if->packet_buff); - kfree(batman_if->dev); - kfree(batman_if); +err: + return -ENOMEM; } -/** - * called by - * - echo '' > /proc/.../interfaces - * - modprobe -r batman-adv-core - */ -/* removes and frees all interfaces */ -void hardif_remove_interfaces(void) +void hardif_disable_interface(struct batman_if *batman_if) { - struct batman_if *batman_if = NULL; - - avail_ifs = 0; - - /* no lock needed - we don't delete somewhere else */ - list_for_each_entry(batman_if, &if_list, list) { - - list_del_rcu(&batman_if->list); + /* FIXME: each batman_if will be attached to a softif */ + struct bat_priv *bat_priv = netdev_priv(soft_device); - /* first deactivate interface */ - if (batman_if->if_active != IF_INACTIVE) - hardif_deactivate_interface(batman_if); - - call_rcu(&batman_if->rcu, hardif_free_interface); - } -} - -static int resize_orig(struct orig_node *orig_node, int if_num) -{ - void *data_ptr; + if (batman_if->if_status == IF_ACTIVE) + hardif_deactivate_interface(batman_if); - data_ptr = kmalloc((if_num + 1) * sizeof(TYPE_OF_WORD) * NUM_WORDS, - GFP_ATOMIC); - if (!data_ptr) { - printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); - return -1; - } + if (batman_if->if_status != IF_INACTIVE) + return; - memcpy(data_ptr, orig_node->bcast_own, - if_num * sizeof(TYPE_OF_WORD) * NUM_WORDS); - kfree(orig_node->bcast_own); - orig_node->bcast_own = data_ptr; + printk(KERN_INFO "batman-adv:Removing interface: %s\n", batman_if->dev); + bat_priv->num_ifaces--; + orig_hash_del_if(batman_if, bat_priv->num_ifaces); - data_ptr = kmalloc((if_num + 1) * sizeof(uint8_t), GFP_ATOMIC); - if (!data_ptr) { - printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); - return -1; - } + if (batman_if == bat_priv->primary_if) + set_primary_if(bat_priv, get_active_batman_if()); - memcpy(data_ptr, orig_node->bcast_own_sum, if_num * sizeof(uint8_t)); - kfree(orig_node->bcast_own_sum); - orig_node->bcast_own_sum = data_ptr; + kfree(batman_if->packet_buff); + batman_if->packet_buff = NULL; + batman_if->if_status = IF_NOT_IN_USE; - return 0; + if ((atomic_read(&module_state) == MODULE_ACTIVE) && + (bat_priv->num_ifaces == 0)) + deactivate_module(); } - -/* adds an interface the interface list and activate it, if possible */ -int hardif_add_interface(char *dev, int if_num) +static struct batman_if *hardif_add_interface(struct net_device *net_dev) { struct batman_if *batman_if; - struct batman_packet *batman_packet; - struct orig_node *orig_node; - unsigned long flags; - HASHIT(hashit); + int ret; - batman_if = kmalloc(sizeof(struct batman_if), GFP_KERNEL); + ret = is_valid_iface(net_dev); + if (ret != 1) + goto out; + batman_if = kmalloc(sizeof(struct batman_if), GFP_ATOMIC); if (!batman_if) { - printk(KERN_ERR "batman-adv:Can't add interface (%s): out of memory\n", dev); - return -1; - } - - batman_if->net_dev = NULL; - - if ((if_num == 0) && (num_hna > 0)) - batman_if->packet_len = BAT_PACKET_LEN + num_hna * ETH_ALEN; - else - batman_if->packet_len = BAT_PACKET_LEN; - - batman_if->packet_buff = kmalloc(batman_if->packet_len, GFP_KERNEL); - - if (!batman_if->packet_buff) { - printk(KERN_ERR "batman-adv:Can't add interface packet (%s): out of memory\n", dev); + printk(KERN_ERR "batman-adv:Can't add interface (%s): out of memory\n", + net_dev->name); goto out; } - batman_if->if_num = if_num; - batman_if->dev = dev; - batman_if->if_active = IF_INACTIVE; - INIT_RCU_HEAD(&batman_if->rcu); + batman_if->dev = kstrdup(net_dev->name, GFP_ATOMIC); + if (!batman_if->dev) + goto free_if; - printk(KERN_INFO "batman-adv:Adding interface: %s\n", dev); - avail_ifs++; + ret = sysfs_add_hardif(&batman_if->hardif_obj, net_dev); + if (ret) + goto free_dev; + batman_if->if_num = -1; + batman_if->net_dev = net_dev; + batman_if->if_status = IF_NOT_IN_USE; + INIT_RCU_HEAD(&batman_if->rcu); INIT_LIST_HEAD(&batman_if->list); - batman_packet = (struct batman_packet *)(batman_if->packet_buff); - batman_packet->packet_type = BAT_PACKET; - batman_packet->version = COMPAT_VERSION; - batman_packet->flags = 0x00; - batman_packet->ttl = (batman_if->if_num > 0 ? 2 : TTL); - batman_packet->flags = 0; - batman_packet->tq = TQ_MAX_VALUE; - batman_packet->num_hna = 0; - - if (batman_if->packet_len != BAT_PACKET_LEN) { - unsigned char *hna_buff; - int hna_len; - - hna_buff = batman_if->packet_buff + BAT_PACKET_LEN; - hna_len = batman_if->packet_len - BAT_PACKET_LEN; - batman_packet->num_hna = hna_local_fill_buffer(hna_buff, - hna_len); - } - - atomic_set(&batman_if->seqno, 1); + check_known_mac_addr(batman_if->net_dev->dev_addr); + list_add_tail_rcu(&batman_if->list, &if_list); + return batman_if; - /* resize all orig nodes because orig_node->bcast_own(_sum) depend on - * if_num */ - spin_lock_irqsave(&orig_hash_lock, flags); +free_dev: + kfree(batman_if->dev); +free_if: + kfree(batman_if); +out: + return NULL; +} - while (hash_iterate(orig_hash, &hashit)) { - orig_node = hashit.bucket->data; - if (resize_orig(orig_node, if_num) == -1) { - spin_unlock_irqrestore(&orig_hash_lock, flags); - goto out; - } - } +static void hardif_free_interface(struct rcu_head *rcu) +{ + struct batman_if *batman_if = container_of(rcu, struct batman_if, rcu); - spin_unlock_irqrestore(&orig_hash_lock, flags); + /* delete all references to this batman_if */ + purge_orig(NULL); + purge_outstanding_packets(batman_if); - if (!hardif_is_interface_up(batman_if->dev)) - printk(KERN_ERR "batman-adv:Not using interface %s (retrying later): interface not active\n", batman_if->dev); - else - hardif_activate_interface(batman_if); + kfree(batman_if->dev); + kfree(batman_if); +} - list_add_tail_rcu(&batman_if->list, &if_list); +static void hardif_remove_interface(struct batman_if *batman_if) +{ + /* first deactivate interface */ + if (batman_if->if_status != IF_NOT_IN_USE) + hardif_disable_interface(batman_if); - /* begin sending originator messages on that interface */ - schedule_own_packet(batman_if); - return 1; + if (batman_if->if_status != IF_NOT_IN_USE) + return; -out: - kfree(batman_if->packet_buff); - kfree(batman_if); - kfree(dev); - return -1; + batman_if->if_status = IF_TO_BE_REMOVED; + list_del_rcu(&batman_if->list); + sysfs_del_hardif(&batman_if->hardif_obj); + call_rcu(&batman_if->rcu, hardif_free_interface); } -char hardif_get_active_if_num(void) +void hardif_remove_interfaces(void) { - return active_ifs; + struct batman_if *batman_if, *batman_if_tmp; + + list_for_each_entry_safe(batman_if, batman_if_tmp, &if_list, list) + hardif_remove_interface(batman_if); } static int hard_if_event(struct notifier_block *this, - unsigned long event, void *ptr) + unsigned long event, void *ptr) { - struct net_device *dev = (struct net_device *)ptr; - struct batman_if *batman_if = get_batman_if_by_name(dev->name); + struct net_device *net_dev = (struct net_device *)ptr; + struct batman_if *batman_if = get_batman_if_by_netdev(net_dev); + /* FIXME: each batman_if will be attached to a softif */ + struct bat_priv *bat_priv = netdev_priv(soft_device); + + if (!batman_if) + batman_if = hardif_add_interface(net_dev); if (!batman_if) goto out; switch (event) { + case NETDEV_REGISTER: + break; + case NETDEV_UP: + hardif_activate_interface(bat_priv, batman_if); + break; case NETDEV_GOING_DOWN: case NETDEV_DOWN: - case NETDEV_UNREGISTER: hardif_deactivate_interface(batman_if); break; - case NETDEV_UP: - hardif_activate_interface(batman_if); - if ((atomic_read(&module_state) == MODULE_INACTIVE) && - (hardif_get_active_if_num() > 0)) { - activate_module(); - } + case NETDEV_UNREGISTER: + hardif_remove_interface(batman_if); + break; + case NETDEV_CHANGENAME: + break; + case NETDEV_CHANGEADDR: + check_known_mac_addr(batman_if->net_dev->dev_addr); + update_mac_addresses(batman_if); + if (batman_if == bat_priv->primary_if) + set_primary_if(bat_priv, batman_if); break; - /* NETDEV_CHANGEADDR - mac address change - what are we doing here ? */ default: break; }; - update_min_mtu(); - out: return NOTIFY_DONE; } -/* find batman interface by netdev. assumes rcu_read_lock on */ -static struct batman_if *find_batman_if(struct net_device *dev) -{ - struct batman_if *batman_if; - - rcu_read_lock(); - list_for_each_entry_rcu(batman_if, &if_list, list) { - if (batman_if->net_dev == dev) { - rcu_read_unlock(); - return batman_if; - } - } - rcu_read_unlock(); - return NULL; -} - - /* receive a packet with the batman ethertype coming on a hard * interface */ int batman_skb_recv(struct sk_buff *skb, struct net_device *dev, @@ -444,12 +453,12 @@ int batman_skb_recv(struct sk_buff *skb, struct net_device *dev, || !skb_mac_header(skb))) goto err_free; - batman_if = find_batman_if(skb->dev); + batman_if = get_batman_if_by_netdev(skb->dev); if (!batman_if) goto err_free; /* discard frames on not active interfaces */ - if (batman_if->if_active != IF_ACTIVE) + if (batman_if->if_status != IF_ACTIVE) goto err_free; stats = (struct net_device_stats *)dev_get_stats(skb->dev); diff --git a/drivers/staging/batman-adv/hard-interface.h b/drivers/staging/batman-adv/hard-interface.h index 4100a27..1e5fc3e 100644 --- a/drivers/staging/batman-adv/hard-interface.h +++ b/drivers/staging/batman-adv/hard-interface.h @@ -19,19 +19,19 @@ * */ -#define IF_INACTIVE 0 -#define IF_ACTIVE 1 -/* #define IF_TO_BE_DEACTIVATED 2 - not needed anymore */ -#define IF_TO_BE_ACTIVATED 3 +#define IF_NOT_IN_USE 0 +#define IF_TO_BE_REMOVED 1 +#define IF_INACTIVE 2 +#define IF_ACTIVE 3 +#define IF_TO_BE_ACTIVATED 4 +#define IF_I_WANT_YOU 5 extern struct notifier_block hard_if_notifier; +struct batman_if *get_batman_if_by_netdev(struct net_device *net_dev); +int hardif_enable_interface(struct batman_if *batman_if); +void hardif_disable_interface(struct batman_if *batman_if); void hardif_remove_interfaces(void); -int hardif_add_interface(char *dev, int if_num); -void hardif_deactivate_interface(struct batman_if *batman_if); -char hardif_get_active_if_num(void); -void hardif_check_interfaces_status(void); -void hardif_check_interfaces_status_wq(struct work_struct *work); int batman_skb_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *ptype, diff --git a/drivers/staging/batman-adv/main.c b/drivers/staging/batman-adv/main.c index 7d72685..c1e57aa 100644 --- a/drivers/staging/batman-adv/main.c +++ b/drivers/staging/batman-adv/main.c @@ -20,7 +20,6 @@ */ #include "main.h" -#include "proc.h" #include "bat_sysfs.h" #include "routing.h" #include "send.h" @@ -44,7 +43,6 @@ DEFINE_SPINLOCK(forw_bcast_list_lock); atomic_t vis_interval; int16_t num_hna; -int16_t num_ifs; struct net_device *soft_device; @@ -89,10 +87,6 @@ int init_module(void) if (!bat_event_workqueue) return -ENOMEM; - retval = setup_procfs(); - if (retval < 0) - return retval; - bat_device_init(); /* initialize layer 2 interface */ @@ -135,7 +129,10 @@ end: void cleanup_module(void) { - shutdown_module(); + deactivate_module(); + + unregister_netdevice_notifier(&hard_if_notifier); + hardif_remove_interfaces(); if (soft_device) { sysfs_del_meshif(soft_device); @@ -145,9 +142,6 @@ void cleanup_module(void) dev_remove_pack(&batman_adv_packet_type); - unregister_netdevice_notifier(&hard_if_notifier); - cleanup_procfs(); - destroy_workqueue(bat_event_workqueue); bat_event_workqueue = NULL; } @@ -178,17 +172,17 @@ void activate_module(void) err: printk(KERN_ERR "batman-adv:Unable to allocate memory for mesh information structures: out of mem ?\n"); - shutdown_module(); + deactivate_module(); end: return; } /* shuts down the whole module.*/ -void shutdown_module(void) +void deactivate_module(void) { atomic_set(&module_state, MODULE_DEACTIVATING); - purge_outstanding_packets(); + purge_outstanding_packets(NULL); flush_workqueue(bat_event_workqueue); vis_quit(); @@ -203,7 +197,6 @@ void shutdown_module(void) synchronize_net(); bat_device_destroy(); - hardif_remove_interfaces(); synchronize_rcu(); atomic_set(&module_state, MODULE_INACTIVE); } diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 59a70c7..247196c 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -129,7 +129,6 @@ extern spinlock_t forw_bcast_list_lock; extern atomic_t vis_interval; extern int16_t num_hna; -extern int16_t num_ifs; extern struct net_device *soft_device; @@ -138,7 +137,7 @@ extern atomic_t module_state; extern struct workqueue_struct *bat_event_workqueue; void activate_module(void); -void shutdown_module(void); +void deactivate_module(void); void inc_module_count(void); void dec_module_count(void); int addr_to_string(char *buff, uint8_t *addr); diff --git a/drivers/staging/batman-adv/originator.c b/drivers/staging/batman-adv/originator.c index 4152701..44bbe89 100644 --- a/drivers/staging/batman-adv/originator.c +++ b/drivers/staging/batman-adv/originator.c @@ -118,6 +118,8 @@ void free_orig_node(void *data) * address if it does not exits */ struct orig_node *get_orig_node(uint8_t *addr) { + /* FIXME: each batman_if will be attached to a softif */ + struct bat_priv *bat_priv = netdev_priv(soft_device); struct orig_node *orig_node; struct hashtable_t *swaphash; int size; @@ -139,13 +141,13 @@ struct orig_node *get_orig_node(uint8_t *addr) orig_node->router = NULL; orig_node->hna_buff = NULL; - size = num_ifs * sizeof(TYPE_OF_WORD) * NUM_WORDS; + size = bat_priv->num_ifaces * sizeof(TYPE_OF_WORD) * NUM_WORDS; orig_node->bcast_own = kzalloc(size, GFP_ATOMIC); if (!orig_node->bcast_own) goto free_orig_node; - size = num_ifs * sizeof(uint8_t); + size = bat_priv->num_ifaces * sizeof(uint8_t); orig_node->bcast_own_sum = kzalloc(size, GFP_ATOMIC); if (!orig_node->bcast_own_sum) goto free_bcast_own; @@ -182,16 +184,25 @@ static bool purge_orig_neighbors(struct orig_node *orig_node, *best_neigh_node = NULL; - /* for all neighbors towards this originator ... */ list_for_each_safe(list_pos, list_pos_tmp, &orig_node->neigh_list) { neigh_node = list_entry(list_pos, struct neigh_node, list); - if (time_after(jiffies, + if ((time_after(jiffies, (neigh_node->last_valid + - ((PURGE_TIMEOUT * HZ) / 1000)))) { - - bat_dbg(DBG_BATMAN, "neighbor timeout: originator %pM, neighbor: %pM, last_valid %lu\n", orig_node->orig, neigh_node->addr, (neigh_node->last_valid / HZ)); + ((PURGE_TIMEOUT * HZ) / 1000)))) || + (neigh_node->if_incoming->if_status == + IF_TO_BE_REMOVED)) { + + if (neigh_node->if_incoming->if_status == + IF_TO_BE_REMOVED) + bat_dbg(DBG_BATMAN, "neighbor purge: originator %pM, neighbor: %pM, iface: %s\n", + orig_node->orig, neigh_node->addr, + neigh_node->if_incoming->dev); + else + bat_dbg(DBG_BATMAN, "neighbor timeout: originator %pM, neighbor: %pM, last_valid: %lu\n", + orig_node->orig, neigh_node->addr, + (neigh_node->last_valid / HZ)); neigh_purged = true; list_del(list_pos); @@ -246,13 +257,17 @@ void purge_orig(struct work_struct *work) spin_unlock_irqrestore(&orig_hash_lock, flags); - start_purge_timer(); + /* if work == NULL we were not called by the timer + * and thus do not need to re-arm the timer */ + if (work) + start_purge_timer(); } ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, size_t count, loff_t off) { HASHIT(hashit); + struct bat_priv *bat_priv = netdev_priv(net_dev); struct orig_node *orig_node; struct neigh_node *neigh_node; size_t hdr_len, tmp_len; @@ -260,10 +275,7 @@ ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, unsigned long flags; char orig_str[ETH_STR_LEN], router_str[ETH_STR_LEN]; - rcu_read_lock(); - if (list_empty(&if_list)) { - rcu_read_unlock(); - + if (!bat_priv->primary_if) { if (off == 0) return sprintf(buff, "BATMAN mesh %s disabled - please specify interfaces to enable it\n", @@ -272,9 +284,7 @@ ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, return 0; } - if (((struct batman_if *)if_list.next)->if_active != IF_ACTIVE) { - rcu_read_unlock(); - + if (bat_priv->primary_if->if_status != IF_ACTIVE) { if (off == 0) return sprintf(buff, "BATMAN mesh %s disabled - primary interface not active\n", @@ -283,12 +293,12 @@ ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, return 0; } + rcu_read_lock(); hdr_len = sprintf(buff, " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s (%s)] \n", "Originator", "#", TQ_MAX_VALUE, "Nexthop", "outgoingIF", "Potential nexthops", SOURCE_VERSION, REVISION_VERSION_STR, - ((struct batman_if *)if_list.next)->dev, - ((struct batman_if *)if_list.next)->addr_str, + bat_priv->primary_if->dev, bat_priv->primary_if->addr_str, net_dev->name); rcu_read_unlock(); @@ -347,3 +357,152 @@ ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, return bytes_written; } +static int orig_node_add_if(struct orig_node *orig_node, int max_if_num) +{ + void *data_ptr; + + data_ptr = kmalloc(max_if_num * sizeof(TYPE_OF_WORD) * NUM_WORDS, + GFP_ATOMIC); + if (!data_ptr) { + printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); + return -1; + } + + memcpy(data_ptr, orig_node->bcast_own, + (max_if_num - 1) * sizeof(TYPE_OF_WORD) * NUM_WORDS); + kfree(orig_node->bcast_own); + orig_node->bcast_own = data_ptr; + + data_ptr = kmalloc(max_if_num * sizeof(uint8_t), GFP_ATOMIC); + if (!data_ptr) { + printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); + return -1; + } + + memcpy(data_ptr, orig_node->bcast_own_sum, + (max_if_num - 1) * sizeof(uint8_t)); + kfree(orig_node->bcast_own_sum); + orig_node->bcast_own_sum = data_ptr; + + return 0; +} + +int orig_hash_add_if(struct batman_if *batman_if, int max_if_num) +{ + struct orig_node *orig_node; + HASHIT(hashit); + + /* resize all orig nodes because orig_node->bcast_own(_sum) depend on + * if_num */ + spin_lock(&orig_hash_lock); + + while (hash_iterate(orig_hash, &hashit)) { + orig_node = hashit.bucket->data; + + if (orig_node_add_if(orig_node, max_if_num) == -1) + goto err; + } + + spin_unlock(&orig_hash_lock); + return 0; + +err: + spin_unlock(&orig_hash_lock); + return -ENOMEM; +} + +static int orig_node_del_if(struct orig_node *orig_node, + int max_if_num, int del_if_num) +{ + void *data_ptr = NULL; + int chunk_size; + + /* last interface was removed */ + if (max_if_num == 0) + goto free_bcast_own; + + chunk_size = sizeof(TYPE_OF_WORD) * NUM_WORDS; + data_ptr = kmalloc(max_if_num * chunk_size, GFP_ATOMIC); + if (!data_ptr) { + printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); + return -1; + } + + /* copy first part */ + memcpy(data_ptr, orig_node->bcast_own, del_if_num * chunk_size); + + /* copy second part */ + memcpy(data_ptr, + orig_node->bcast_own + ((del_if_num + 1) * chunk_size), + (max_if_num - del_if_num) * chunk_size); + +free_bcast_own: + kfree(orig_node->bcast_own); + orig_node->bcast_own = data_ptr; + + if (max_if_num == 0) + goto free_own_sum; + + data_ptr = kmalloc(max_if_num * sizeof(uint8_t), GFP_ATOMIC); + if (!data_ptr) { + printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); + return -1; + } + + memcpy(data_ptr, orig_node->bcast_own_sum, + del_if_num * sizeof(uint8_t)); + + memcpy(data_ptr, + orig_node->bcast_own_sum + ((del_if_num + 1) * sizeof(uint8_t)), + (max_if_num - del_if_num) * sizeof(uint8_t)); + +free_own_sum: + kfree(orig_node->bcast_own_sum); + orig_node->bcast_own_sum = data_ptr; + + return 0; +} + +int orig_hash_del_if(struct batman_if *batman_if, int max_if_num) +{ + struct batman_if *batman_if_tmp; + struct orig_node *orig_node; + HASHIT(hashit); + int ret; + + /* resize all orig nodes because orig_node->bcast_own(_sum) depend on + * if_num */ + spin_lock(&orig_hash_lock); + + while (hash_iterate(orig_hash, &hashit)) { + orig_node = hashit.bucket->data; + + ret = orig_node_del_if(orig_node, max_if_num, + batman_if->if_num); + + if (ret == -1) + goto err; + } + + /* renumber remaining batman interfaces _inside_ of orig_hash_lock */ + rcu_read_lock(); + list_for_each_entry_rcu(batman_if_tmp, &if_list, list) { + if (batman_if_tmp->if_status == IF_NOT_IN_USE) + continue; + + if (batman_if == batman_if_tmp) + continue; + + if (batman_if_tmp->if_num > batman_if->if_num) + batman_if_tmp->if_num--; + } + rcu_read_unlock(); + + batman_if->if_num = -1; + spin_unlock(&orig_hash_lock); + return 0; + +err: + spin_unlock(&orig_hash_lock); + return -ENOMEM; +} diff --git a/drivers/staging/batman-adv/originator.h b/drivers/staging/batman-adv/originator.h index 745b4b0..afbc7c0 100644 --- a/drivers/staging/batman-adv/originator.h +++ b/drivers/staging/batman-adv/originator.h @@ -30,3 +30,5 @@ create_neighbor(struct orig_node *orig_node, struct orig_node *orig_neigh_node, uint8_t *neigh, struct batman_if *if_incoming); ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, size_t count, loff_t off); +int orig_hash_add_if(struct batman_if *batman_if, int max_if_num); +int orig_hash_del_if(struct batman_if *batman_if, int max_if_num); diff --git a/drivers/staging/batman-adv/proc.c b/drivers/staging/batman-adv/proc.c deleted file mode 100644 index 25b24fe..0000000 --- a/drivers/staging/batman-adv/proc.c +++ /dev/null @@ -1,170 +0,0 @@ -/* - * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: - * - * Marek Lindner, Simon Wunderlich - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - * - */ - -#include "main.h" -#include "proc.h" -#include "routing.h" -#include "translation-table.h" -#include "hard-interface.h" -#include "types.h" -#include "hash.h" -#include "vis.h" - -static struct proc_dir_entry *proc_batman_dir, *proc_interface_file; - -static int proc_interfaces_read(struct seq_file *seq, void *offset) -{ - struct batman_if *batman_if; - - rcu_read_lock(); - list_for_each_entry_rcu(batman_if, &if_list, list) { - seq_printf(seq, "[%8s] %s %s\n", - (batman_if->if_active == IF_ACTIVE ? - "active" : "inactive"), - batman_if->dev, - (batman_if->if_active == IF_ACTIVE ? - batman_if->addr_str : " ")); - } - rcu_read_unlock(); - - return 0; -} - -static int proc_interfaces_open(struct inode *inode, struct file *file) -{ - return single_open(file, proc_interfaces_read, NULL); -} - -static ssize_t proc_interfaces_write(struct file *instance, - const char __user *userbuffer, - size_t count, loff_t *data) -{ - char *if_string, *colon_ptr = NULL, *cr_ptr = NULL; - int not_copied = 0, if_num = 0, add_success; - struct batman_if *batman_if = NULL; - - if_string = kmalloc(count, GFP_KERNEL); - - if (!if_string) - return -ENOMEM; - - if (count > IFNAMSIZ - 1) { - printk(KERN_WARNING "batman-adv:Can't add interface: device name is too long\n"); - goto end; - } - - not_copied = copy_from_user(if_string, userbuffer, count); - if_string[count - not_copied - 1] = 0; - - colon_ptr = strchr(if_string, ':'); - if (colon_ptr) - *colon_ptr = 0; - - if (!colon_ptr) { - cr_ptr = strchr(if_string, '\n'); - if (cr_ptr) - *cr_ptr = 0; - } - - if (strlen(if_string) == 0) { - shutdown_module(); - num_ifs = 0; - goto end; - } - - /* add interface */ - rcu_read_lock(); - list_for_each_entry_rcu(batman_if, &if_list, list) { - if (strncmp(batman_if->dev, if_string, count) == 0) { - printk(KERN_ERR "batman-adv:Given interface is already active: %s\n", if_string); - rcu_read_unlock(); - goto end; - - } - - if_num++; - } - rcu_read_unlock(); - - add_success = hardif_add_interface(if_string, if_num); - if (add_success < 0) - goto end; - - num_ifs = if_num + 1; - - if ((atomic_read(&module_state) == MODULE_INACTIVE) && - (hardif_get_active_if_num() > 0)) - activate_module(); - - return count; -end: - kfree(if_string); - return count; -} - -static const struct file_operations proc_interfaces_fops = { - .owner = THIS_MODULE, - .open = proc_interfaces_open, - .read = seq_read, - .write = proc_interfaces_write, - .llseek = seq_lseek, - .release = single_release, -}; - -void cleanup_procfs(void) -{ - if (proc_interface_file) - remove_proc_entry(PROC_FILE_INTERFACES, proc_batman_dir); - - if (proc_batman_dir) -#ifdef __NET_NET_NAMESPACE_H - remove_proc_entry(PROC_ROOT_DIR, init_net.proc_net); -#else - remove_proc_entry(PROC_ROOT_DIR, proc_net); -#endif -} - -int setup_procfs(void) -{ -#ifdef __NET_NET_NAMESPACE_H - proc_batman_dir = proc_mkdir(PROC_ROOT_DIR, init_net.proc_net); -#else - proc_batman_dir = proc_mkdir(PROC_ROOT_DIR, proc_net); -#endif - - if (!proc_batman_dir) { - printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s' folder failed\n", PROC_ROOT_DIR); - return -EFAULT; - } - - proc_interface_file = create_proc_entry(PROC_FILE_INTERFACES, - S_IWUSR | S_IRUGO, - proc_batman_dir); - if (proc_interface_file) { - proc_interface_file->proc_fops = &proc_interfaces_fops; - } else { - printk(KERN_ERR "batman-adv: Registering the '/proc/net/%s/%s' file failed\n", PROC_ROOT_DIR, PROC_FILE_INTERFACES); - cleanup_procfs(); - return -EFAULT; - } - - return 0; -} diff --git a/drivers/staging/batman-adv/proc.h b/drivers/staging/batman-adv/proc.h deleted file mode 100644 index 6f4f5b3..0000000 --- a/drivers/staging/batman-adv/proc.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2007-2010 B.A.T.M.A.N. contributors: - * - * Marek Lindner, Simon Wunderlich - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of version 2 of the GNU General Public - * License as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301, USA - * - */ - -#include -#include - -#define PROC_ROOT_DIR "batman-adv" -#define PROC_FILE_INTERFACES "interfaces" - -void cleanup_procfs(void); -int setup_procfs(void); - diff --git a/drivers/staging/batman-adv/routing.c b/drivers/staging/batman-adv/routing.c index 0a9f52b..7b8aa27 100644 --- a/drivers/staging/batman-adv/routing.c +++ b/drivers/staging/batman-adv/routing.c @@ -205,7 +205,7 @@ static int isBidirectionalNeigh(struct orig_node *orig_node, batman_packet->tq = ((batman_packet->tq * orig_neigh_node->tq_own * orig_neigh_node->tq_asym_penalty) / - (TQ_MAX_VALUE * TQ_MAX_VALUE)); + (TQ_MAX_VALUE * TQ_MAX_VALUE)); bat_dbg(DBG_BATMAN, "bidirectional: orig = %-15pM neigh = %-15pM => own_bcast = %2i, real recv = %2i, local tq: %3i, asym_penalty: %3i, total tq: %3i\n", orig_node->orig, orig_neigh_node->orig, total_count, @@ -387,7 +387,7 @@ void receive_bat_packet(struct ethhdr *ethhdr, batman_packet->version, has_directlink_flag); list_for_each_entry_rcu(batman_if, &if_list, list) { - if (batman_if->if_active != IF_ACTIVE) + if (batman_if->if_status != IF_ACTIVE) continue; if (compare_orig(ethhdr->h_source, @@ -893,7 +893,7 @@ int recv_bcast_packet(struct sk_buff *skb) if (is_my_mac(ethhdr->h_source)) return NET_RX_DROP; - bcast_packet = (struct bcast_packet *) skb->data; + bcast_packet = (struct bcast_packet *)skb->data; /* ignore broadcasts originated by myself */ if (is_my_mac(bcast_packet->orig)) diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index de2344a..31d86ae 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -57,7 +57,7 @@ int send_skb_packet(struct sk_buff *skb, { struct ethhdr *ethhdr; - if (batman_if->if_active != IF_ACTIVE) + if (batman_if->if_status != IF_ACTIVE) goto send_skb_err; if (unlikely(!batman_if->net_dev)) @@ -123,7 +123,7 @@ static void send_packet_to_if(struct forw_packet *forw_packet, int16_t buff_pos; struct batman_packet *batman_packet; - if (batman_if->if_active != IF_ACTIVE) + if (batman_if->if_status != IF_ACTIVE) return; packet_num = 0; @@ -182,7 +182,7 @@ static void send_packet(struct forw_packet *forw_packet) return; } - if (forw_packet->if_incoming->if_active != IF_ACTIVE) + if (forw_packet->if_incoming->if_status != IF_ACTIVE) return; /* multihomed peer assumed */ @@ -243,7 +243,13 @@ void schedule_own_packet(struct batman_if *batman_if) struct bat_priv *bat_priv = netdev_priv(soft_device); unsigned long send_time; struct batman_packet *batman_packet; - int vis_server = atomic_read(&bat_priv->vis_mode); + int vis_server; + + if ((batman_if->if_status == IF_NOT_IN_USE) || + (batman_if->if_status == IF_TO_BE_REMOVED)) + return; + + vis_server = atomic_read(&bat_priv->vis_mode); /** * the interface gets activated here to avoid race conditions between @@ -252,11 +258,12 @@ void schedule_own_packet(struct batman_if *batman_if) * outdated packets (especially uninitialized mac addresses) in the * packet queue */ - if (batman_if->if_active == IF_TO_BE_ACTIVATED) - batman_if->if_active = IF_ACTIVE; + if (batman_if->if_status == IF_TO_BE_ACTIVATED) + batman_if->if_status = IF_ACTIVE; /* if local hna has changed and interface is a primary interface */ - if ((atomic_read(&hna_local_changed)) && (batman_if->if_num == 0)) + if ((atomic_read(&hna_local_changed)) && + (batman_if == bat_priv->primary_if)) rebuild_batman_packet(batman_if); /** @@ -374,13 +381,11 @@ void add_bcast_packet_to_list(struct sk_buff *skb) forw_packet = kmalloc(sizeof(struct forw_packet), GFP_ATOMIC); if (!forw_packet) - return; + goto out; skb = skb_copy(skb, GFP_ATOMIC); - if (!skb) { - kfree(forw_packet); - return; - } + if (!skb) + goto packet_free; skb_reset_mac_header(skb); @@ -391,6 +396,12 @@ void add_bcast_packet_to_list(struct sk_buff *skb) forw_packet->num_packets = 0; _add_bcast_packet_to_list(forw_packet, 1); + return; + +packet_free: + kfree(forw_packet); +out: + return; } void send_outstanding_bcast_packet(struct work_struct *work) @@ -455,19 +466,31 @@ void send_outstanding_bat_packet(struct work_struct *work) forw_packet_free(forw_packet); } -void purge_outstanding_packets(void) +void purge_outstanding_packets(struct batman_if *batman_if) { struct forw_packet *forw_packet; struct hlist_node *tmp_node, *safe_tmp_node; unsigned long flags; - bat_dbg(DBG_BATMAN, "purge_outstanding_packets()\n"); + if (batman_if) + bat_dbg(DBG_BATMAN, "purge_outstanding_packets(): %s\n", + batman_if->dev); + else + bat_dbg(DBG_BATMAN, "purge_outstanding_packets()\n"); /* free bcast list */ spin_lock_irqsave(&forw_bcast_list_lock, flags); hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node, &forw_bcast_list, list) { + /** + * if purge_outstanding_packets() was called with an argmument + * we delete only packets belonging to the given interface + */ + if ((batman_if) && + (forw_packet->if_incoming != batman_if)) + continue; + spin_unlock_irqrestore(&forw_bcast_list_lock, flags); /** @@ -484,6 +507,14 @@ void purge_outstanding_packets(void) hlist_for_each_entry_safe(forw_packet, tmp_node, safe_tmp_node, &forw_bat_list, list) { + /** + * if purge_outstanding_packets() was called with an argmument + * we delete only packets belonging to the given interface + */ + if ((batman_if) && + (forw_packet->if_incoming != batman_if)) + continue; + spin_unlock_irqrestore(&forw_bat_list_lock, flags); /** diff --git a/drivers/staging/batman-adv/send.h b/drivers/staging/batman-adv/send.h index b2ddf63..b84a470 100644 --- a/drivers/staging/batman-adv/send.h +++ b/drivers/staging/batman-adv/send.h @@ -36,4 +36,4 @@ void schedule_forward_packet(struct orig_node *orig_node, void add_bcast_packet_to_list(struct sk_buff *skb); void send_outstanding_bcast_packet(struct work_struct *work); void send_outstanding_bat_packet(struct work_struct *work); -void purge_outstanding_packets(void); +void purge_outstanding_packets(struct batman_if *batman_if); diff --git a/drivers/staging/batman-adv/soft-interface.c b/drivers/staging/batman-adv/soft-interface.c index 4cdebe5..681a0ad 100644 --- a/drivers/staging/batman-adv/soft-interface.c +++ b/drivers/staging/batman-adv/soft-interface.c @@ -251,7 +251,7 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev) memcpy(unicast_packet->dest, orig_node->orig, ETH_ALEN); /* net_dev won't be available when not active */ - if (orig_node->router->if_incoming->if_active != IF_ACTIVE) + if (orig_node->router->if_incoming->if_status != IF_ACTIVE) goto unlock; /* don't lock while sending the packets ... we therefore diff --git a/drivers/staging/batman-adv/translation-table.c b/drivers/staging/batman-adv/translation-table.c index b735200..c7a6635 100644 --- a/drivers/staging/batman-adv/translation-table.c +++ b/drivers/staging/batman-adv/translation-table.c @@ -159,16 +159,14 @@ int hna_local_fill_buffer(unsigned char *buff, int buff_len) int hna_local_fill_buffer_text(struct net_device *net_dev, char *buff, size_t count, loff_t off) { + struct bat_priv *bat_priv = netdev_priv(net_dev); struct hna_local_entry *hna_local_entry; HASHIT(hashit); int bytes_written = 0; unsigned long flags; size_t hdr_len; - rcu_read_lock(); - if (list_empty(&if_list)) { - rcu_read_unlock(); - + if (!bat_priv->primary_if) { if (off == 0) return sprintf(buff, "BATMAN mesh %s disabled - please specify interfaces to enable it\n", @@ -176,7 +174,6 @@ int hna_local_fill_buffer_text(struct net_device *net_dev, char *buff, return 0; } - rcu_read_unlock(); hdr_len = sprintf(buff, "Locally retrieved addresses (from %s) announced via HNA:\n", @@ -376,16 +373,14 @@ void hna_global_add_orig(struct orig_node *orig_node, int hna_global_fill_buffer_text(struct net_device *net_dev, char *buff, size_t count, loff_t off) { + struct bat_priv *bat_priv = netdev_priv(net_dev); struct hna_global_entry *hna_global_entry; HASHIT(hashit); int bytes_written = 0; unsigned long flags; size_t hdr_len; - rcu_read_lock(); - if (list_empty(&if_list)) { - rcu_read_unlock(); - + if (!bat_priv->primary_if) { if (off == 0) return sprintf(buff, "BATMAN mesh %s disabled - please specify interfaces to enable it\n", @@ -393,7 +388,6 @@ int hna_global_fill_buffer_text(struct net_device *net_dev, char *buff, return 0; } - rcu_read_unlock(); hdr_len = sprintf(buff, "Globally announced HNAs received via the mesh %s (translation table):\n", diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index ffaa16c..eba1fa6 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -36,12 +36,13 @@ struct batman_if { struct list_head list; int16_t if_num; char *dev; - char if_active; + char if_status; char addr_str[ETH_STR_LEN]; struct net_device *net_dev; atomic_t seqno; unsigned char *packet_buff; int packet_len; + struct kobject *hardif_obj; struct rcu_head rcu; }; @@ -84,6 +85,8 @@ struct bat_priv { atomic_t aggregation_enabled; atomic_t vis_mode; atomic_t orig_interval; + char num_ifaces; + struct batman_if *primary_if; struct kobject *mesh_obj; }; diff --git a/drivers/staging/batman-adv/vis.c b/drivers/staging/batman-adv/vis.c index 57d69d7..b6ff031 100644 --- a/drivers/staging/batman-adv/vis.c +++ b/drivers/staging/batman-adv/vis.c @@ -173,13 +173,10 @@ ssize_t vis_fill_buffer_text(struct net_device *net_dev, char *buff, unsigned long flags; int vis_server = atomic_read(&bat_priv->vis_mode); - rcu_read_lock(); - if (list_empty(&if_list) || (vis_server == VIS_TYPE_CLIENT_UPDATE)) { - rcu_read_unlock(); + if ((!bat_priv->primary_if) || + (vis_server == VIS_TYPE_CLIENT_UPDATE)) return 0; - } - rcu_read_unlock(); hdr_len = 0; spin_lock_irqsave(&vis_hash_lock, flags); @@ -498,7 +495,7 @@ static int generate_vis_packet(struct bat_priv *bat_priv) if (orig_node->router != NULL && compare_orig(orig_node->router->addr, orig_node->orig) - && (orig_node->router->if_incoming->if_active == + && (orig_node->router->if_incoming->if_status == IF_ACTIVE) && orig_node->router->tq_avg > 0) { -- cgit v0.10.2 From b7bce588b3a6a058e00d9629c25cf170dede63fc Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Fri, 7 May 2010 21:47:23 +0200 Subject: Staging: batman-adv: fix whitespace style issues This patch fixes unnecessary whitespaces before a quoted newline that the remaining batman-adv files had. Reported-by: Luis de Bethencourt Signed-off-by: Sven Eckelmann Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/bat_sysfs.c b/drivers/staging/batman-adv/bat_sysfs.c index 1811c8d..e2c000b 100644 --- a/drivers/staging/batman-adv/bat_sysfs.c +++ b/drivers/staging/batman-adv/bat_sysfs.c @@ -75,7 +75,7 @@ static ssize_t show_aggr_ogm(struct kobject *kobj, struct attribute *attr, struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev)); int aggr_status = atomic_read(&bat_priv->aggregation_enabled); - return sprintf(buff, "status: %s\ncommands: enable, disable, 0, 1 \n", + return sprintf(buff, "status: %s\ncommands: enable, disable, 0, 1\n", aggr_status == 0 ? "disabled" : "enabled"); } @@ -123,7 +123,7 @@ static ssize_t show_vis_mode(struct kobject *kobj, struct attribute *attr, struct bat_priv *bat_priv = netdev_priv(to_net_dev(dev)); int vis_mode = atomic_read(&bat_priv->vis_mode); - return sprintf(buff, "status: %s\ncommands: client, server, %d, %d \n", + return sprintf(buff, "status: %s\ncommands: client, server, %d, %d\n", vis_mode == VIS_TYPE_CLIENT_UPDATE ? "client" : "server", VIS_TYPE_SERVER_SYNC, VIS_TYPE_CLIENT_UPDATE); @@ -364,7 +364,7 @@ static ssize_t show_mesh_iface(struct kobject *kobj, struct attribute *attr, if (!batman_if) return 0; - return sprintf(buff, "status: %s\ncommands: none, bat0 \n", + return sprintf(buff, "status: %s\ncommands: none, bat0\n", batman_if->if_status == IF_NOT_IN_USE ? "none" : "bat0"); } -- cgit v0.10.2 From f94cee241099b31732460c255c6af24979ec778e Mon Sep 17 00:00:00 2001 From: Simon Wunderlich Date: Fri, 7 May 2010 21:47:24 +0200 Subject: Staging: batman-adv: Reorganize sequence number handling BATMAN and broadcast packets are tracked with a sequence number window of currently 64 entries to measure and avoid duplicates. Packets which have a sequence number smaller than the newest received packet minus 64 are not within this sequence number window anymore and are called "old packets" from now on. When old packets are received, the routing code assumes that the host of the originator has been restarted. This assumption however might be wrong as packets can also be delayed by NIC drivers, e.g. because of long queues or collision detection in dense WiFi? environments. This behaviour can be reproduced by doing a broadcast ping flood in a dense node environment. The effect is that the sequence number window is jumping forth and back, accepting and forwarding any packet (because packets are assumed to be "new") and causing loops. To overcome this problem, the sequence number handling has been reorganized. When an old packet is received, the window is reset back only once. Other old packets are dropped for (currently) 30 seconds to "protect" the new sequence number and avoid the hopping as described above. The reorganization brings some code cleanups (at least i hope you feel the same) and also fixes a bug in count_real_packets() which falsely updated the last_real_seqno for slightly older packets within the seqno window if they are no duplicates. This second version of the patch also fixes a problem where for seq_diff==64 bit_shift() reads from outside of the seqno window, and removes the loop for seq_diff == -64 which was present in the first patch. The third iteration also adds a window for the next expected sequence numbers. This minimizes sequence number flapping for packets with very big differences (e.g. 3 packets with seqno 0, 25000 and 50000 might still cause problems without this window). Signed-off-by: Simon Wunderlich Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/bitarray.c b/drivers/staging/batman-adv/bitarray.c index 7848305..2fef6e3 100644 --- a/drivers/staging/batman-adv/bitarray.c +++ b/drivers/staging/batman-adv/bitarray.c @@ -68,7 +68,7 @@ void bit_shift(TYPE_OF_WORD *seq_bits, int32_t n) int32_t word_offset, word_num; int32_t i; - if (n <= 0) + if (n <= 0 || n >= TQ_LOCAL_WINDOW_SIZE) return; word_offset = n % WORD_BIT_SIZE;/* shift how much inside each word */ @@ -111,48 +111,76 @@ void bit_shift(TYPE_OF_WORD *seq_bits, int32_t n) seq_bits[i] = 0; } +static void bit_reset_window(TYPE_OF_WORD *seq_bits) +{ + int i; + for (i = 0; i < NUM_WORDS; i++) + seq_bits[i] = 0; +} + -/* receive and process one packet, returns 1 if received seq_num is considered - * new, 0 if old */ +/* receive and process one packet within the sequence number window. + * + * returns: + * 1 if the window was moved (either new or very old) + * 0 if the window was not moved/shifted. + */ char bit_get_packet(TYPE_OF_WORD *seq_bits, int16_t seq_num_diff, int8_t set_mark) { - int i; + /* sequence number is slightly older. We already got a sequence number + * higher than this one, so we just mark it. */ - /* we already got a sequence number higher than this one, so we just - * mark it. this should wrap around the integer just fine */ - if ((seq_num_diff < 0) && (seq_num_diff >= -TQ_LOCAL_WINDOW_SIZE)) { + if ((seq_num_diff <= 0) && (seq_num_diff > -TQ_LOCAL_WINDOW_SIZE)) { if (set_mark) bit_mark(seq_bits, -seq_num_diff); return 0; } - /* it seems we missed a lot of packets or the other host restarted */ - if ((seq_num_diff > TQ_LOCAL_WINDOW_SIZE) || - (seq_num_diff < -TQ_LOCAL_WINDOW_SIZE)) { + /* sequence number is slightly newer, so we shift the window and + * set the mark if required */ - if (seq_num_diff > TQ_LOCAL_WINDOW_SIZE) - bat_dbg(DBG_BATMAN, - "We missed a lot of packets (%i) !\n", - seq_num_diff-1); + if ((seq_num_diff > 0) && (seq_num_diff < TQ_LOCAL_WINDOW_SIZE)) { + bit_shift(seq_bits, seq_num_diff); - if (-seq_num_diff > TQ_LOCAL_WINDOW_SIZE) - bat_dbg(DBG_BATMAN, - "Other host probably restarted !\n"); + if (set_mark) + bit_mark(seq_bits, 0); + return 1; + } - for (i = 0; i < NUM_WORDS; i++) - seq_bits[i] = 0; + /* sequence number is much newer, probably missed a lot of packets */ + if ((seq_num_diff >= TQ_LOCAL_WINDOW_SIZE) + || (seq_num_diff < EXPECTED_SEQNO_RANGE)) { + bat_dbg(DBG_BATMAN, + "We missed a lot of packets (%i) !\n", + seq_num_diff - 1); + bit_reset_window(seq_bits); if (set_mark) - seq_bits[0] = 1; /* we only have the latest packet */ - } else { - bit_shift(seq_bits, seq_num_diff); + bit_mark(seq_bits, 0); + return 1; + } + + /* received a much older packet. The other host either restarted + * or the old packet got delayed somewhere in the network. The + * packet should be dropped without calling this function if the + * seqno window is protected. */ + + if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE) + || (seq_num_diff >= EXPECTED_SEQNO_RANGE)) { + bat_dbg(DBG_BATMAN, + "Other host probably restarted!\n"); + + bit_reset_window(seq_bits); if (set_mark) bit_mark(seq_bits, 0); + + return 1; } - return 1; + /* never reached */ + return 0; } /* count the hamming weight, how many good packets did we receive? just count diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 247196c..58c1ec1 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -61,6 +61,10 @@ * forw_packet->direct_link_flags */ #define MAX_AGGREGATION_MS 100 +#define RESET_PROTECTION_MS 30000 +#define EXPECTED_SEQNO_RANGE 4096 +/* don't reset again within 30 seconds */ + #define MODULE_INACTIVE 0 #define MODULE_ACTIVE 1 #define MODULE_DEACTIVATING 2 diff --git a/drivers/staging/batman-adv/originator.c b/drivers/staging/batman-adv/originator.c index 44bbe89..01d71d7 100644 --- a/drivers/staging/batman-adv/originator.c +++ b/drivers/staging/batman-adv/originator.c @@ -140,6 +140,8 @@ struct orig_node *get_orig_node(uint8_t *addr) memcpy(orig_node->orig, addr, ETH_ALEN); orig_node->router = NULL; orig_node->hna_buff = NULL; + orig_node->bcast_seqno_reset = jiffies - msecs_to_jiffies(RESET_PROTECTION_MS) - 1; + orig_node->batman_seqno_reset = jiffies - msecs_to_jiffies(RESET_PROTECTION_MS) - 1; size = bat_priv->num_ifaces * sizeof(TYPE_OF_WORD) * NUM_WORDS; diff --git a/drivers/staging/batman-adv/routing.c b/drivers/staging/batman-adv/routing.c index 7b8aa27..bf67059 100644 --- a/drivers/staging/batman-adv/routing.c +++ b/drivers/staging/batman-adv/routing.c @@ -304,6 +304,38 @@ update_hna: update_routes(orig_node, orig_node->router, hna_buff, tmp_hna_buff_len); } +/* checks whether the host restarted and is in the protection time. + * returns: + * 0 if the packet is to be accepted + * 1 if the packet is to be ignored. + */ +static int window_protected(int16_t seq_num_diff, + unsigned long *last_reset) +{ + if ((seq_num_diff <= -TQ_LOCAL_WINDOW_SIZE) + || (seq_num_diff >= EXPECTED_SEQNO_RANGE)) { + if (time_after(jiffies, *last_reset + + msecs_to_jiffies(RESET_PROTECTION_MS))) { + + *last_reset = jiffies; + bat_dbg(DBG_BATMAN, + "old packet received, start protection\n"); + + return 0; + } else + return 1; + } + return 0; +} + +/* processes a batman packet for all interfaces, adjusts the sequence number and + * finds out whether it is a duplicate. + * returns: + * 1 the packet is a duplicate + * 0 the packet has not yet been received + * -1 the packet is old and has been received while the seqno window + * was protected. Caller should drop it. + */ static char count_real_packets(struct ethhdr *ethhdr, struct batman_packet *batman_packet, struct batman_if *if_incoming) @@ -311,31 +343,41 @@ static char count_real_packets(struct ethhdr *ethhdr, struct orig_node *orig_node; struct neigh_node *tmp_neigh_node; char is_duplicate = 0; - uint16_t seq_diff; + int16_t seq_diff; + int need_update = 0; + int set_mark; orig_node = get_orig_node(batman_packet->orig); if (orig_node == NULL) return 0; + seq_diff = batman_packet->seqno - orig_node->last_real_seqno; + + /* signalize caller that the packet is to be dropped. */ + if (window_protected(seq_diff, &orig_node->batman_seqno_reset)) + return -1; + list_for_each_entry(tmp_neigh_node, &orig_node->neigh_list, list) { - if (!is_duplicate) - is_duplicate = - get_bit_status(tmp_neigh_node->real_bits, + is_duplicate |= get_bit_status(tmp_neigh_node->real_bits, orig_node->last_real_seqno, batman_packet->seqno); - seq_diff = batman_packet->seqno - orig_node->last_real_seqno; + if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) && (tmp_neigh_node->if_incoming == if_incoming)) - bit_get_packet(tmp_neigh_node->real_bits, seq_diff, 1); + set_mark = 1; else - bit_get_packet(tmp_neigh_node->real_bits, seq_diff, 0); + set_mark = 0; + + /* if the window moved, set the update flag. */ + need_update |= bit_get_packet(tmp_neigh_node->real_bits, + seq_diff, set_mark); tmp_neigh_node->real_packet_count = bit_packet_count(tmp_neigh_node->real_bits); } - if (!is_duplicate) { + if (need_update) { bat_dbg(DBG_BATMAN, "updating last_seqno: old %d, new %d\n", orig_node->last_real_seqno, batman_packet->seqno); orig_node->last_real_seqno = batman_packet->seqno; @@ -453,24 +495,27 @@ void receive_bat_packet(struct ethhdr *ethhdr, return; } - if (batman_packet->tq == 0) { - count_real_packets(ethhdr, batman_packet, if_incoming); - - bat_dbg(DBG_BATMAN, "Drop packet: originator packet with tq equal 0\n"); - return; - } - if (is_my_oldorig) { bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast echos (sender: %pM)\n", ethhdr->h_source); return; } - is_duplicate = count_real_packets(ethhdr, batman_packet, if_incoming); - orig_node = get_orig_node(batman_packet->orig); if (orig_node == NULL) return; + is_duplicate = count_real_packets(ethhdr, batman_packet, if_incoming); + + if (is_duplicate == -1) { + bat_dbg(DBG_BATMAN, "Drop packet: packet within seqno protection time (sender: %pM)\n", ethhdr->h_source); + return; + } + + if (batman_packet->tq == 0) { + bat_dbg(DBG_BATMAN, "Drop packet: originator packet with tq equal 0\n"); + return; + } + /* avoid temporary routing loops */ if ((orig_node->router) && (orig_node->router->orig_node->router) && @@ -866,13 +911,13 @@ int recv_unicast_packet(struct sk_buff *skb) return ret; } - int recv_bcast_packet(struct sk_buff *skb) { struct orig_node *orig_node; struct bcast_packet *bcast_packet; struct ethhdr *ethhdr; int hdr_size = sizeof(struct bcast_packet); + int16_t seq_diff; unsigned long flags; /* drop packet if it has not necessary minimum size */ @@ -908,7 +953,7 @@ int recv_bcast_packet(struct sk_buff *skb) return NET_RX_DROP; } - /* check flood history */ + /* check whether the packet is a duplicate */ if (get_bit_status(orig_node->bcast_bits, orig_node->last_bcast_seqno, ntohs(bcast_packet->seqno))) { @@ -916,14 +961,20 @@ int recv_bcast_packet(struct sk_buff *skb) return NET_RX_DROP; } - /* mark broadcast in flood history */ - if (bit_get_packet(orig_node->bcast_bits, - ntohs(bcast_packet->seqno) - - orig_node->last_bcast_seqno, 1)) + seq_diff = ntohs(bcast_packet->seqno) - orig_node->last_bcast_seqno; + + /* check whether the packet is old and the host just restarted. */ + if (window_protected(seq_diff, &orig_node->bcast_seqno_reset)) { + spin_unlock_irqrestore(&orig_hash_lock, flags); + return NET_RX_DROP; + } + + /* mark broadcast in flood history, update window position + * if required. */ + if (bit_get_packet(orig_node->bcast_bits, seq_diff, 1)) orig_node->last_bcast_seqno = ntohs(bcast_packet->seqno); spin_unlock_irqrestore(&orig_hash_lock, flags); - /* rebroadcast packet */ add_bcast_packet_to_list(skb); diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index eba1fa6..c926219 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -55,6 +55,10 @@ struct orig_node { /* structure for orig_list maintaining nodes of uint8_t tq_own; int tq_asym_penalty; unsigned long last_valid; /* when last packet from this node was received */ + unsigned long bcast_seqno_reset; /* time when the broadcast + seqno window was reset. */ + unsigned long batman_seqno_reset;/* time when the batman seqno + window was reset. */ /* uint8_t gwflags; * flags related to gateway functions: gateway class */ uint8_t flags; /* for now only VIS_SERVER flag. */ unsigned char *hna_buff; -- cgit v0.10.2 From 19dae340d2af3074abad5b4c7306ae240068f89f Mon Sep 17 00:00:00 2001 From: Simon Wunderlich Date: Fri, 7 May 2010 21:47:25 +0200 Subject: Staging: batman-adv: Limit queue lengths for batman and broadcast packets This patch limits the queue lengths of batman and broadcast packets. BATMAN packets are held back for aggregation and jittered to avoid interferences. Broadcast packets are stored to be sent out multiple times to increase the probability to be received by other nodes in lossy environments. Especially in extreme cases like broadcast storms, the queues have been seen to run full, eating up all the memory and triggering the infamous OOM killer. With the queue length limits introduced in this patch, this problem is avoided. Each queue is limited to 256 entries for now, resulting in 1 MB of maximum space available in total for typical setups (assuming one packet including overhead does not require more than 2000 byte). This should also be reasonable for smaller routers, otherwise the defines can be tweaked later. This third version of the patch does not increase the local broadcast sequence number when the queue is already full. Signed-off-by: Simon Wunderlich Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/aggregation.c b/drivers/staging/batman-adv/aggregation.c index a5818ff..ce8b8a6 100644 --- a/drivers/staging/batman-adv/aggregation.c +++ b/drivers/staging/batman-adv/aggregation.c @@ -95,6 +95,7 @@ static bool can_aggregate_with(struct batman_packet *new_batman_packet, return false; } +#define atomic_dec_not_zero(v) atomic_add_unless((v), -1, 0) /* create a new aggregated packet and add this packet to it */ static void new_aggregated_packet(unsigned char *packet_buff, int packet_len, @@ -106,13 +107,26 @@ static void new_aggregated_packet(unsigned char *packet_buff, struct forw_packet *forw_packet_aggr; unsigned long flags; + /* own packet should always be scheduled */ + if (!own_packet) { + if (!atomic_dec_not_zero(&batman_queue_left)) { + bat_dbg(DBG_BATMAN, "batman packet queue full\n"); + return; + } + } + forw_packet_aggr = kmalloc(sizeof(struct forw_packet), GFP_ATOMIC); - if (!forw_packet_aggr) + if (!forw_packet_aggr) { + if (!own_packet) + atomic_inc(&batman_queue_left); return; + } forw_packet_aggr->packet_buff = kmalloc(MAX_AGGREGATION_BYTES, GFP_ATOMIC); if (!forw_packet_aggr->packet_buff) { + if (!own_packet) + atomic_inc(&batman_queue_left); kfree(forw_packet_aggr); return; } diff --git a/drivers/staging/batman-adv/main.c b/drivers/staging/batman-adv/main.c index c1e57aa..aa072d1 100644 --- a/drivers/staging/batman-adv/main.c +++ b/drivers/staging/batman-adv/main.c @@ -42,6 +42,9 @@ DEFINE_SPINLOCK(forw_bat_list_lock); DEFINE_SPINLOCK(forw_bcast_list_lock); atomic_t vis_interval; +atomic_t bcast_queue_left; +atomic_t batman_queue_left; + int16_t num_hna; struct net_device *soft_device; @@ -79,6 +82,8 @@ int init_module(void) atomic_set(&vis_interval, 1000);/* TODO: raise this later, this is only * for debugging now. */ + atomic_set(&bcast_queue_left, BCAST_QUEUE_LEN); + atomic_set(&batman_queue_left, BATMAN_QUEUE_LEN); /* the name should not be longer than 10 chars - see * http://lwn.net/Articles/23634/ */ diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 58c1ec1..6749ce0 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -69,6 +69,8 @@ #define MODULE_ACTIVE 1 #define MODULE_DEACTIVATING 2 +#define BCAST_QUEUE_LEN 256 +#define BATMAN_QUEUE_LE 256 /* * Debug Messages @@ -132,6 +134,8 @@ extern spinlock_t forw_bat_list_lock; extern spinlock_t forw_bcast_list_lock; extern atomic_t vis_interval; +extern atomic_t bcast_queue_left; +extern atomic_t batman_queue_left; extern int16_t num_hna; extern struct net_device *soft_device; diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index 31d86ae..f58a9ed 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -375,13 +375,28 @@ static void _add_bcast_packet_to_list(struct forw_packet *forw_packet, send_time); } -void add_bcast_packet_to_list(struct sk_buff *skb) +#define atomic_dec_not_zero(v) atomic_add_unless((v), -1, 0) +/* add a broadcast packet to the queue and setup timers. broadcast packets + * are sent multiple times to increase probability for beeing received. + * + * This function returns NETDEV_TX_OK on success and NETDEV_TX_BUSY on + * errors. + * + * The skb is not consumed, so the caller should make sure that the + * skb is freed. */ +int add_bcast_packet_to_list(struct sk_buff *skb) { struct forw_packet *forw_packet; + if (!atomic_dec_not_zero(&bcast_queue_left)) { + bat_dbg(DBG_BATMAN, "bcast packet queue full\n"); + goto out; + } + forw_packet = kmalloc(sizeof(struct forw_packet), GFP_ATOMIC); + if (!forw_packet) - goto out; + goto out_and_inc; skb = skb_copy(skb, GFP_ATOMIC); if (!skb) @@ -396,12 +411,14 @@ void add_bcast_packet_to_list(struct sk_buff *skb) forw_packet->num_packets = 0; _add_bcast_packet_to_list(forw_packet, 1); - return; + return NETDEV_TX_OK; packet_free: kfree(forw_packet); +out_and_inc: + atomic_inc(&bcast_queue_left); out: - return; + return NETDEV_TX_BUSY; } void send_outstanding_bcast_packet(struct work_struct *work) @@ -436,8 +453,10 @@ void send_outstanding_bcast_packet(struct work_struct *work) if ((forw_packet->num_packets < 3) && (atomic_read(&module_state) != MODULE_DEACTIVATING)) _add_bcast_packet_to_list(forw_packet, ((5 * HZ) / 1000)); - else + else { forw_packet_free(forw_packet); + atomic_inc(&bcast_queue_left); + } } void send_outstanding_bat_packet(struct work_struct *work) @@ -463,6 +482,10 @@ void send_outstanding_bat_packet(struct work_struct *work) (atomic_read(&module_state) != MODULE_DEACTIVATING)) schedule_own_packet(forw_packet->if_incoming); + /* don't count own packet */ + if (!forw_packet->own) + atomic_inc(&batman_queue_left); + forw_packet_free(forw_packet); } diff --git a/drivers/staging/batman-adv/send.h b/drivers/staging/batman-adv/send.h index b84a470..feaa2fc 100644 --- a/drivers/staging/batman-adv/send.h +++ b/drivers/staging/batman-adv/send.h @@ -33,7 +33,7 @@ void schedule_forward_packet(struct orig_node *orig_node, struct batman_packet *batman_packet, uint8_t directlink, int hna_buff_len, struct batman_if *if_outgoing); -void add_bcast_packet_to_list(struct sk_buff *skb); +int add_bcast_packet_to_list(struct sk_buff *skb); void send_outstanding_bcast_packet(struct work_struct *work); void send_outstanding_bat_packet(struct work_struct *work); void purge_outstanding_packets(struct batman_if *batman_if); diff --git a/drivers/staging/batman-adv/soft-interface.c b/drivers/staging/batman-adv/soft-interface.c index 681a0ad..14b5cca 100644 --- a/drivers/staging/batman-adv/soft-interface.c +++ b/drivers/staging/batman-adv/soft-interface.c @@ -216,10 +216,10 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev) /* set broadcast sequence number */ bcast_packet->seqno = htons(bcast_seqno); - bcast_seqno++; + /* broadcast packet. on success, increase seqno. */ + if (add_bcast_packet_to_list(skb) == NETDEV_TX_OK) + bcast_seqno++; - /* broadcast packet */ - add_bcast_packet_to_list(skb); /* a copy is stored in the bcast list, therefore removing * the original skb. */ kfree_skb(skb); -- cgit v0.10.2 From 7d02d777d4a7eb551999a35f52480c9ddac3d874 Mon Sep 17 00:00:00 2001 From: Simon Wunderlich Date: Fri, 7 May 2010 21:47:26 +0200 Subject: Staging: batman-adv: kfree_skb() in interface_tx() in error case As we always return that the we consumed the skb, we should also free the skb in the case of an error. Signed-off-by: Simon Wunderlich Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/soft-interface.c b/drivers/staging/batman-adv/soft-interface.c index 14b5cca..c3b5288 100644 --- a/drivers/staging/batman-adv/soft-interface.c +++ b/drivers/staging/batman-adv/soft-interface.c @@ -275,6 +275,7 @@ unlock: spin_unlock_irqrestore(&orig_hash_lock, flags); dropped: priv->stats.tx_dropped++; + kfree_skb(skb); end: return NETDEV_TX_OK; } -- cgit v0.10.2 From 202cfe106012c3917543ed8792be1affc37f107b Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Fri, 7 May 2010 21:47:27 +0200 Subject: Staging: batman-adv: Update pointer to ethhdr after skb_copy We must ensure that all pointer to a socket buffer are updated when we copy a socket buffer and free our reference to the old one. Another part of the kernel could also free its reference which maybe removes the buffer completely. In that situation we would would feed wrong information to the routing algorithm after the memory area is written again by someone else. Signed-off-by: Sven Eckelmann Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/routing.c b/drivers/staging/batman-adv/routing.c index bf67059..919a4f8 100644 --- a/drivers/staging/batman-adv/routing.c +++ b/drivers/staging/batman-adv/routing.c @@ -614,6 +614,7 @@ int recv_bat_packet(struct sk_buff *skb, skb = skb_copy(skb, GFP_ATOMIC); if (!skb) return NET_RX_DROP; + ethhdr = (struct ethhdr *)skb_mac_header(skb); kfree_skb(skb_old); } @@ -639,8 +640,8 @@ static int recv_my_icmp_packet(struct sk_buff *skb) unsigned long flags; uint8_t dstaddr[ETH_ALEN]; - icmp_packet = (struct icmp_packet *) skb->data; - ethhdr = (struct ethhdr *) skb_mac_header(skb); + icmp_packet = (struct icmp_packet *)skb->data; + ethhdr = (struct ethhdr *)skb_mac_header(skb); /* add data to device queue */ if (icmp_packet->msg_type != ECHO_REQUEST) { @@ -671,7 +672,9 @@ static int recv_my_icmp_packet(struct sk_buff *skb) skb = skb_copy(skb, GFP_ATOMIC); if (!skb) return NET_RX_DROP; - icmp_packet = (struct icmp_packet *) skb->data; + + icmp_packet = (struct icmp_packet *)skb->data; + ethhdr = (struct ethhdr *)skb_mac_header(skb); kfree_skb(skb_old); } @@ -732,6 +735,7 @@ static int recv_icmp_ttl_exceeded(struct sk_buff *skb) if (!skb) return NET_RX_DROP; icmp_packet = (struct icmp_packet *) skb->data; + ethhdr = (struct ethhdr *)skb_mac_header(skb); kfree_skb(skb_old); } @@ -780,7 +784,7 @@ int recv_icmp_packet(struct sk_buff *skb) if (!is_my_mac(ethhdr->h_dest)) return NET_RX_DROP; - icmp_packet = (struct icmp_packet *) skb->data; + icmp_packet = (struct icmp_packet *)skb->data; /* packet for me */ if (is_my_mac(icmp_packet->dst)) @@ -812,7 +816,8 @@ int recv_icmp_packet(struct sk_buff *skb) skb = skb_copy(skb, GFP_ATOMIC); if (!skb) return NET_RX_DROP; - icmp_packet = (struct icmp_packet *) skb->data; + icmp_packet = (struct icmp_packet *)skb->data; + ethhdr = (struct ethhdr *)skb_mac_header(skb); kfree_skb(skb_old); } @@ -895,7 +900,8 @@ int recv_unicast_packet(struct sk_buff *skb) skb = skb_copy(skb, GFP_ATOMIC); if (!skb) return NET_RX_DROP; - unicast_packet = (struct unicast_packet *) skb->data; + unicast_packet = (struct unicast_packet *)skb->data; + ethhdr = (struct ethhdr *)skb_mac_header(skb); kfree_skb(skb_old); } /* decrement ttl */ -- cgit v0.10.2 From cee42f49931e610f47229385709385cc98efb856 Mon Sep 17 00:00:00 2001 From: Andrew Lunn Date: Fri, 7 May 2010 21:47:28 +0200 Subject: Staging: batman-adv: Update TODO file to reflect current state. Not much left to do on the TODO list :-) Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/TODO b/drivers/staging/batman-adv/TODO index 2f15136..518db7f 100644 --- a/drivers/staging/batman-adv/TODO +++ b/drivers/staging/batman-adv/TODO @@ -1,23 +1,6 @@ -=> proc interface -* implement new interface to add/delete interfaces and setting options -* /proc/sys/net/batman-adv/ as main folder -* in interfaces/ list every available interface of the host -* each interfaces/$iface/ contains the following files: --> enable (def: 0) [add/remove this interface to batman-adv] --> ogm_interval (def: 1000) [ogm interval of that interface] --> context (def: bat0) [later we want to support multiple mesh instances via --> bat0/bat1/bat2/..] --> status (read-only) [outputs the interface status from batman's --> perspective] -* in mesh/batX/ list every available mesh subnet --> vis_server (def: 0) [enable/disable vis server for that mesh] --> vis_data (read-only) [outputs the vis data in a raw format] --> aggregate_ogm (def: 1) [enable/disable ogm aggregation for that mesh] --> originators (read-only) [outputs the originator table] --> transtable_global (read-only) [outputs the global translation table] --> transtable_local (read-only) [outputs the local translation table] - -=> fix checkpatch.pl errors +Request a review. +Process the comments from the review. +Move into mainline proper. Please send all patches to: Marek Lindner -- cgit v0.10.2 From f9ab70e787c3b94ce7c56324b4afbc8051e99424 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Fri, 7 May 2010 21:47:29 +0200 Subject: Staging: batman-adv: Fix whitespace problems criticized by checkpatch.pl Trailing spaces at the end of a line or before a tab are against Documentation/CodingStyle "3.1: Spaces" and should be avoided. It is also common style to add a single space after commas unless it is followed either by a newline or a tab. Reported-by: Mikal Sande Reported-by: Luis de Bethencourt Signed-off-by: Sven Eckelmann Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 6749ce0..8818e2b 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -70,7 +70,7 @@ #define MODULE_DEACTIVATING 2 #define BCAST_QUEUE_LEN 256 -#define BATMAN_QUEUE_LE 256 +#define BATMAN_QUEUE_LEN 256 /* * Debug Messages diff --git a/drivers/staging/batman-adv/originator.c b/drivers/staging/batman-adv/originator.c index 01d71d7..25a9e21 100644 --- a/drivers/staging/batman-adv/originator.c +++ b/drivers/staging/batman-adv/originator.c @@ -297,7 +297,7 @@ ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, rcu_read_lock(); hdr_len = sprintf(buff, - " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s (%s)] \n", + " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s (%s)]\n", "Originator", "#", TQ_MAX_VALUE, "Nexthop", "outgoingIF", "Potential nexthops", SOURCE_VERSION, REVISION_VERSION_STR, bat_priv->primary_if->dev, bat_priv->primary_if->addr_str, @@ -354,7 +354,7 @@ ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, if ((batman_count == 0) && (off == 0)) bytes_written += sprintf(buff + bytes_written, - "No batman nodes in range ... \n"); + "No batman nodes in range ...\n"); return bytes_written; } diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index c926219..0b1fe9e 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -59,8 +59,7 @@ struct orig_node { /* structure for orig_list maintaining nodes of seqno window was reset. */ unsigned long batman_seqno_reset;/* time when the batman seqno window was reset. */ -/* uint8_t gwflags; * flags related to gateway functions: gateway class */ - uint8_t flags; /* for now only VIS_SERVER flag. */ + uint8_t flags; /* for now only VIS_SERVER flag. */ unsigned char *hna_buff; int16_t hna_buff_len; uint16_t last_real_seqno; /* last and best known squence number */ diff --git a/drivers/staging/batman-adv/vis.c b/drivers/staging/batman-adv/vis.c index b6ff031..1d3d954 100644 --- a/drivers/staging/batman-adv/vis.c +++ b/drivers/staging/batman-adv/vis.c @@ -40,7 +40,7 @@ * when adding 128 - it is neither a predecessor nor a successor, * after adding more than 127 to the starting value - it is a successor */ #define seq_before(x, y) ({typeof(x) _dummy = (x - y); \ - _dummy > smallest_signed_int(_dummy); }) + _dummy > smallest_signed_int(_dummy); }) #define seq_after(x, y) seq_before(y, x) struct hashtable_t *vis_hash; -- cgit v0.10.2 From 6d45d8df243054614d795901c03817e21bfde964 Mon Sep 17 00:00:00 2001 From: Sven Eckelmann Date: Fri, 7 May 2010 21:47:30 +0200 Subject: Staging: batman-adv: Reduce max characters on a line to 80 Documentation/CodingStyle sets a strongly prefered limit of 80 characters per line in "Chapter 2: Breaking long lines and strings". Strings must be broken into smaller parts and long statements must be rewritten. Reported-by: Mikal Sande Reported-by: Mark Rankilor Signed-off-by: Sven Eckelmann Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/device.c b/drivers/staging/batman-adv/device.c index b2ecba2..ad82ec4 100644 --- a/drivers/staging/batman-adv/device.c +++ b/drivers/staging/batman-adv/device.c @@ -57,7 +57,8 @@ int bat_device_setup(void) /* register our device - kernel assigns a free major number */ tmp_major = register_chrdev(0, DRIVER_DEVICE, &fops); if (tmp_major < 0) { - printk(KERN_ERR "batman-adv:Registering the character device failed with %d\n", + printk(KERN_ERR "batman-adv:" + "Registering the character device failed with %d\n", tmp_major); return 0; } @@ -65,7 +66,8 @@ int bat_device_setup(void) batman_class = class_create(THIS_MODULE, "batman-adv"); if (IS_ERR(batman_class)) { - printk(KERN_ERR "batman-adv:Could not register class 'batman-adv'\n"); + printk(KERN_ERR "batman-adv:" + "Could not register class 'batman-adv'\n"); return 0; } @@ -108,7 +110,9 @@ int bat_device_open(struct inode *inode, struct file *file) } if (i == ARRAY_SIZE(device_client_hash)) { - printk(KERN_ERR "batman-adv:Error - can't add another packet client: maximum number of clients reached\n"); + printk(KERN_ERR "batman-adv:" + "Error - can't add another packet client: " + "maximum number of clients reached\n"); kfree(device_client); return -EXFULL; } @@ -209,7 +213,9 @@ ssize_t bat_device_write(struct file *file, const char __user *buff, unsigned long flags; if (len < sizeof(struct icmp_packet)) { - bat_dbg(DBG_BATMAN, "batman-adv:Error - can't send packet from char device: invalid packet size\n"); + bat_dbg(DBG_BATMAN, "batman-adv:" + "Error - can't send packet from char device: " + "invalid packet size\n"); return -EINVAL; } @@ -220,12 +226,16 @@ ssize_t bat_device_write(struct file *file, const char __user *buff, return -EFAULT; if (icmp_packet.packet_type != BAT_ICMP) { - bat_dbg(DBG_BATMAN, "batman-adv:Error - can't send packet from char device: got bogus packet type (expected: BAT_ICMP)\n"); + bat_dbg(DBG_BATMAN, "batman-adv:" + "Error - can't send packet from char device: " + "got bogus packet type (expected: BAT_ICMP)\n"); return -EINVAL; } if (icmp_packet.msg_type != ECHO_REQUEST) { - bat_dbg(DBG_BATMAN, "batman-adv:Error - can't send packet from char device: got bogus message type (expected: ECHO_REQUEST)\n"); + bat_dbg(DBG_BATMAN, "batman-adv:" + "Error - can't send packet from char device: " + "got bogus message type (expected: ECHO_REQUEST)\n"); return -EINVAL; } diff --git a/drivers/staging/batman-adv/hard-interface.c b/drivers/staging/batman-adv/hard-interface.c index b82cae7..0d1d101 100644 --- a/drivers/staging/batman-adv/hard-interface.c +++ b/drivers/staging/batman-adv/hard-interface.c @@ -149,9 +149,12 @@ static void check_known_mac_addr(uint8_t *addr) if (!compare_orig(batman_if->net_dev->dev_addr, addr)) continue; - printk(KERN_WARNING "batman-adv:The newly added mac address (%pM) already exists on: %s\n", - addr, batman_if->dev); - printk(KERN_WARNING "batman-adv:It is strongly recommended to keep mac addresses unique to avoid problems!\n"); + printk(KERN_WARNING "batman-adv:" + "The newly added mac address (%pM) already exists on: %s\n", + addr, batman_if->dev); + printk(KERN_WARNING "batman-adv:" + "It is strongly recommended to keep mac addresses unique" + "to avoid problems!\n"); } rcu_read_unlock(); } @@ -242,7 +245,8 @@ int hardif_enable_interface(struct batman_if *batman_if) batman_if->packet_buff = kmalloc(batman_if->packet_len, GFP_ATOMIC); if (!batman_if->packet_buff) { - printk(KERN_ERR "batman-adv:Can't add interface packet (%s): out of memory\n", + printk(KERN_ERR "batman-adv:" + "Can't add interface packet (%s): out of memory\n", batman_if->dev); goto err; } @@ -266,7 +270,10 @@ int hardif_enable_interface(struct batman_if *batman_if) if (hardif_is_iface_up(batman_if)) hardif_activate_interface(bat_priv, batman_if); else - printk(KERN_ERR "batman-adv:Not using interface %s (retrying later): interface not active\n", batman_if->dev); + printk(KERN_ERR "batman-adv:" + "Not using interface %s " + "(retrying later): interface not active\n", + batman_if->dev); /* begin scheduling originator messages on that interface */ schedule_own_packet(batman_if); @@ -316,7 +323,8 @@ static struct batman_if *hardif_add_interface(struct net_device *net_dev) batman_if = kmalloc(sizeof(struct batman_if), GFP_ATOMIC); if (!batman_if) { - printk(KERN_ERR "batman-adv:Can't add interface (%s): out of memory\n", + printk(KERN_ERR "batman-adv:" + "Can't add interface (%s): out of memory\n", net_dev->name); goto out; } diff --git a/drivers/staging/batman-adv/main.c b/drivers/staging/batman-adv/main.c index aa072d1..9d13979 100644 --- a/drivers/staging/batman-adv/main.c +++ b/drivers/staging/batman-adv/main.c @@ -99,14 +99,16 @@ int init_module(void) interface_setup); if (!soft_device) { - printk(KERN_ERR "batman-adv:Unable to allocate the batman interface\n"); + printk(KERN_ERR "batman-adv:" + "Unable to allocate the batman interface\n"); goto end; } retval = register_netdev(soft_device); if (retval < 0) { - printk(KERN_ERR "batman-adv:Unable to register the batman interface: %i\n", retval); + printk(KERN_ERR "batman-adv:" + "Unable to register the batman interface: %i\n", retval); goto free_soft_device; } @@ -118,8 +120,9 @@ int init_module(void) register_netdevice_notifier(&hard_if_notifier); dev_add_pack(&batman_adv_packet_type); - printk(KERN_INFO "batman-adv:B.A.T.M.A.N. advanced %s%s (compatibility version %i) loaded\n", - SOURCE_VERSION, REVISION_VERSION_STR, COMPAT_VERSION); + printk(KERN_INFO "batman-adv:" + "B.A.T.M.A.N. advanced %s%s (compatibility version %i) loaded\n", + SOURCE_VERSION, REVISION_VERSION_STR, COMPAT_VERSION); return 0; @@ -176,7 +179,9 @@ void activate_module(void) goto end; err: - printk(KERN_ERR "batman-adv:Unable to allocate memory for mesh information structures: out of mem ?\n"); + printk(KERN_ERR "batman-adv:" + "Unable to allocate memory for mesh information structures: " + "out of mem ?\n"); deactivate_module(); end: return; @@ -218,7 +223,7 @@ void dec_module_count(void) int addr_to_string(char *buff, uint8_t *addr) { - return sprintf(buff, "%02x:%02x:%02x:%02x:%02x:%02x", + return sprintf(buff, MAC_FMT, addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); } diff --git a/drivers/staging/batman-adv/main.h b/drivers/staging/batman-adv/main.h index 8818e2b..5f8343d 100644 --- a/drivers/staging/batman-adv/main.h +++ b/drivers/staging/batman-adv/main.h @@ -22,7 +22,8 @@ /* Kernel Programming */ #define LINUX -#define DRIVER_AUTHOR "Marek Lindner , Simon Wunderlich " +#define DRIVER_AUTHOR "Marek Lindner , " \ + "Simon Wunderlich " #define DRIVER_DESC "B.A.T.M.A.N. advanced" #define DRIVER_DEVICE "batman-adv" diff --git a/drivers/staging/batman-adv/originator.c b/drivers/staging/batman-adv/originator.c index 25a9e21..568aef8 100644 --- a/drivers/staging/batman-adv/originator.c +++ b/drivers/staging/batman-adv/originator.c @@ -140,8 +140,10 @@ struct orig_node *get_orig_node(uint8_t *addr) memcpy(orig_node->orig, addr, ETH_ALEN); orig_node->router = NULL; orig_node->hna_buff = NULL; - orig_node->bcast_seqno_reset = jiffies - msecs_to_jiffies(RESET_PROTECTION_MS) - 1; - orig_node->batman_seqno_reset = jiffies - msecs_to_jiffies(RESET_PROTECTION_MS) - 1; + orig_node->bcast_seqno_reset = jiffies - 1 + - msecs_to_jiffies(RESET_PROTECTION_MS); + orig_node->batman_seqno_reset = jiffies - 1 + - msecs_to_jiffies(RESET_PROTECTION_MS); size = bat_priv->num_ifaces * sizeof(TYPE_OF_WORD) * NUM_WORDS; @@ -198,11 +200,15 @@ static bool purge_orig_neighbors(struct orig_node *orig_node, if (neigh_node->if_incoming->if_status == IF_TO_BE_REMOVED) - bat_dbg(DBG_BATMAN, "neighbor purge: originator %pM, neighbor: %pM, iface: %s\n", + bat_dbg(DBG_BATMAN, + "neighbor purge: originator %pM, " + "neighbor: %pM, iface: %s\n", orig_node->orig, neigh_node->addr, neigh_node->if_incoming->dev); else - bat_dbg(DBG_BATMAN, "neighbor timeout: originator %pM, neighbor: %pM, last_valid: %lu\n", + bat_dbg(DBG_BATMAN, + "neighbor timeout: originator %pM, " + "neighbor: %pM, last_valid: %lu\n", orig_node->orig, neigh_node->addr, (neigh_node->last_valid / HZ)); @@ -280,24 +286,25 @@ ssize_t orig_fill_buffer_text(struct net_device *net_dev, char *buff, if (!bat_priv->primary_if) { if (off == 0) return sprintf(buff, - "BATMAN mesh %s disabled - please specify interfaces to enable it\n", - net_dev->name); + "BATMAN mesh %s disabled - " + "please specify interfaces to enable it\n", + net_dev->name); return 0; } - if (bat_priv->primary_if->if_status != IF_ACTIVE) { - if (off == 0) - return sprintf(buff, - "BATMAN mesh %s disabled - primary interface not active\n", - net_dev->name); - + if (bat_priv->primary_if->if_status != IF_ACTIVE && off == 0) + return sprintf(buff, + "BATMAN mesh %s " + "disabled - primary interface not active\n", + net_dev->name); + else if (bat_priv->primary_if->if_status != IF_ACTIVE) return 0; - } rcu_read_lock(); hdr_len = sprintf(buff, - " %-14s (%s/%i) %17s [%10s]: %20s ... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s (%s)]\n", + " %-14s (%s/%i) %17s [%10s]: %20s " + "... [B.A.T.M.A.N. adv %s%s, MainIF/MAC: %s/%s (%s)]\n", "Originator", "#", TQ_MAX_VALUE, "Nexthop", "outgoingIF", "Potential nexthops", SOURCE_VERSION, REVISION_VERSION_STR, bat_priv->primary_if->dev, bat_priv->primary_if->addr_str, @@ -366,7 +373,8 @@ static int orig_node_add_if(struct orig_node *orig_node, int max_if_num) data_ptr = kmalloc(max_if_num * sizeof(TYPE_OF_WORD) * NUM_WORDS, GFP_ATOMIC); if (!data_ptr) { - printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); + printk(KERN_ERR + "batman-adv:Can't resize orig: out of memory\n"); return -1; } @@ -377,7 +385,8 @@ static int orig_node_add_if(struct orig_node *orig_node, int max_if_num) data_ptr = kmalloc(max_if_num * sizeof(uint8_t), GFP_ATOMIC); if (!data_ptr) { - printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); + printk(KERN_ERR + "batman-adv:Can't resize orig: out of memory\n"); return -1; } @@ -426,7 +435,8 @@ static int orig_node_del_if(struct orig_node *orig_node, chunk_size = sizeof(TYPE_OF_WORD) * NUM_WORDS; data_ptr = kmalloc(max_if_num * chunk_size, GFP_ATOMIC); if (!data_ptr) { - printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); + printk(KERN_ERR + "batman-adv:Can't resize orig: out of memory\n"); return -1; } @@ -447,7 +457,8 @@ free_bcast_own: data_ptr = kmalloc(max_if_num * sizeof(uint8_t), GFP_ATOMIC); if (!data_ptr) { - printk(KERN_ERR "batman-adv:Can't resize orig: out of memory\n"); + printk(KERN_ERR + "batman-adv:Can't resize orig: out of memory\n"); return -1; } diff --git a/drivers/staging/batman-adv/routing.c b/drivers/staging/batman-adv/routing.c index 919a4f8..066dc8b 100644 --- a/drivers/staging/batman-adv/routing.c +++ b/drivers/staging/batman-adv/routing.c @@ -94,7 +94,11 @@ static void update_route(struct orig_node *orig_node, /* route changed */ } else { - bat_dbg(DBG_ROUTES, "Changing route towards: %pM (now via %pM - was via %pM)\n", orig_node->orig, neigh_node->addr, orig_node->router->addr); + bat_dbg(DBG_ROUTES, + "Changing route towards: %pM " + "(now via %pM - was via %pM)\n", + orig_node->orig, neigh_node->addr, + orig_node->router->addr); } orig_node->router = neigh_node; @@ -207,7 +211,11 @@ static int isBidirectionalNeigh(struct orig_node *orig_node, orig_neigh_node->tq_asym_penalty) / (TQ_MAX_VALUE * TQ_MAX_VALUE)); - bat_dbg(DBG_BATMAN, "bidirectional: orig = %-15pM neigh = %-15pM => own_bcast = %2i, real recv = %2i, local tq: %3i, asym_penalty: %3i, total tq: %3i\n", + bat_dbg(DBG_BATMAN, + "bidirectional: " + "orig = %-15pM neigh = %-15pM => own_bcast = %2i, " + "real recv = %2i, local tq: %3i, asym_penalty: %3i, " + "total tq: %3i\n", orig_node->orig, orig_neigh_node->orig, total_count, neigh_node->real_packet_count, orig_neigh_node->tq_own, orig_neigh_node->tq_asym_penalty, batman_packet->tq); @@ -229,7 +237,8 @@ static void update_orig(struct orig_node *orig_node, struct ethhdr *ethhdr, struct neigh_node *neigh_node = NULL, *tmp_neigh_node = NULL; int tmp_hna_buff_len; - bat_dbg(DBG_BATMAN, "update_originator(): Searching and updating originator entry of received packet\n"); + bat_dbg(DBG_BATMAN, "update_originator(): " + "Searching and updating originator entry of received packet\n"); list_for_each_entry(tmp_neigh_node, &orig_node->neigh_list, list) { if (compare_orig(tmp_neigh_node->addr, ethhdr->h_source) && @@ -422,7 +431,9 @@ void receive_bat_packet(struct ethhdr *ethhdr, is_single_hop_neigh = (compare_orig(ethhdr->h_source, batman_packet->orig) ? 1 : 0); - bat_dbg(DBG_BATMAN, "Received BATMAN packet via NB: %pM, IF: %s [%s] (from OG: %pM, via prev OG: %pM, seqno %d, tq %d, TTL %d, V %d, IDF %d)\n", + bat_dbg(DBG_BATMAN, "Received BATMAN packet via NB: %pM, IF: %s [%s] " + "(from OG: %pM, via prev OG: %pM, seqno %d, tq %d, " + "TTL %d, V %d, IDF %d)\n", ethhdr->h_source, if_incoming->dev, if_incoming->addr_str, batman_packet->orig, batman_packet->prev_sender, batman_packet->seqno, batman_packet->tq, batman_packet->ttl, @@ -457,13 +468,16 @@ void receive_bat_packet(struct ethhdr *ethhdr, if (is_my_addr) { bat_dbg(DBG_BATMAN, - "Drop packet: received my own broadcast (sender: %pM)\n", + "Drop packet: received my own broadcast (sender: %pM" + ")\n", ethhdr->h_source); return; } if (is_broadcast) { - bat_dbg(DBG_BATMAN, "Drop packet: ignoring all packets with broadcast source addr (sender: %pM)\n", ethhdr->h_source); + bat_dbg(DBG_BATMAN, "Drop packet: " + "ignoring all packets with broadcast source addr (sender: %pM" + ")\n", ethhdr->h_source); return; } @@ -491,12 +505,15 @@ void receive_bat_packet(struct ethhdr *ethhdr, bit_packet_count(word); } - bat_dbg(DBG_BATMAN, "Drop packet: originator packet from myself (via neighbor)\n"); + bat_dbg(DBG_BATMAN, "Drop packet: " + "originator packet from myself (via neighbor)\n"); return; } if (is_my_oldorig) { - bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast echos (sender: %pM)\n", ethhdr->h_source); + bat_dbg(DBG_BATMAN, + "Drop packet: ignoring all rebroadcast echos (sender: " + "%pM)\n", ethhdr->h_source); return; } @@ -507,12 +524,15 @@ void receive_bat_packet(struct ethhdr *ethhdr, is_duplicate = count_real_packets(ethhdr, batman_packet, if_incoming); if (is_duplicate == -1) { - bat_dbg(DBG_BATMAN, "Drop packet: packet within seqno protection time (sender: %pM)\n", ethhdr->h_source); + bat_dbg(DBG_BATMAN, + "Drop packet: packet within seqno protection time " + "(sender: %pM)\n", ethhdr->h_source); return; } if (batman_packet->tq == 0) { - bat_dbg(DBG_BATMAN, "Drop packet: originator packet with tq equal 0\n"); + bat_dbg(DBG_BATMAN, + "Drop packet: originator packet with tq equal 0\n"); return; } @@ -524,7 +544,9 @@ void receive_bat_packet(struct ethhdr *ethhdr, !(compare_orig(batman_packet->orig, batman_packet->prev_sender)) && (compare_orig(orig_node->router->addr, orig_node->router->orig_node->router->addr))) { - bat_dbg(DBG_BATMAN, "Drop packet: ignoring all rebroadcast packets that may make me loop (sender: %pM)\n", ethhdr->h_source); + bat_dbg(DBG_BATMAN, + "Drop packet: ignoring all rebroadcast packets that " + "may make me loop (sender: %pM)\n", ethhdr->h_source); return; } @@ -562,7 +584,8 @@ void receive_bat_packet(struct ethhdr *ethhdr, schedule_forward_packet(orig_node, ethhdr, batman_packet, 1, hna_buff_len, if_incoming); - bat_dbg(DBG_BATMAN, "Forwarding packet: rebroadcast neighbor packet with direct link flag\n"); + bat_dbg(DBG_BATMAN, "Forwarding packet: " + "rebroadcast neighbor packet with direct link flag\n"); return; } @@ -708,8 +731,10 @@ static int recv_icmp_ttl_exceeded(struct sk_buff *skb) /* send TTL exceeded if packet is an echo request (traceroute) */ if (icmp_packet->msg_type != ECHO_REQUEST) { - printk(KERN_WARNING "batman-adv:Warning - can't forward icmp packet from %pM to %pM: ttl exceeded\n", - icmp_packet->orig, icmp_packet->dst); + printk(KERN_WARNING "batman-adv:" + "Warning - can't forward icmp packet from %pM to %pM: " + "ttl exceeded\n", + icmp_packet->orig, icmp_packet->dst); return NET_RX_DROP; } @@ -874,7 +899,9 @@ int recv_unicast_packet(struct sk_buff *skb) /* TTL exceeded */ if (unicast_packet->ttl < 2) { - printk(KERN_WARNING "batman-adv:Warning - can't forward unicast packet from %pM to %pM: ttl exceeded\n", + printk(KERN_WARNING "batman-adv:Warning - " + "can't forward unicast packet from %pM to %pM: " + "ttl exceeded\n", ethhdr->h_source, unicast_packet->dest); return NET_RX_DROP; } diff --git a/drivers/staging/batman-adv/send.c b/drivers/staging/batman-adv/send.c index f58a9ed..d8536e2 100644 --- a/drivers/staging/batman-adv/send.c +++ b/drivers/staging/batman-adv/send.c @@ -65,7 +65,8 @@ int send_skb_packet(struct sk_buff *skb, if (!(batman_if->net_dev->flags & IFF_UP)) { printk(KERN_WARNING - "batman-adv:Interface %s is not up - can't send packet via that interface!\n", + "batman-adv:Interface %s " + "is not up - can't send packet via that interface!\n", batman_if->dev); goto send_skb_err; } @@ -148,9 +149,9 @@ static void send_packet_to_if(struct forw_packet *forw_packet, "Sending own" : "Forwarding")); bat_dbg(DBG_BATMAN, - "%s %spacket (originator %pM, seqno %d, TQ %d, TTL %d, IDF %s) on interface %s [%s]\n", - fwd_str, - (packet_num > 0 ? "aggregated " : ""), + "%s %spacket (originator %pM, seqno %d, TQ %d, TTL %d," + " IDF %s) on interface %s [%s]\n", + fwd_str, (packet_num > 0 ? "aggregated " : ""), batman_packet->orig, ntohs(batman_packet->seqno), batman_packet->tq, batman_packet->ttl, (batman_packet->flags & DIRECTLINK ? @@ -178,7 +179,8 @@ static void send_packet(struct forw_packet *forw_packet) unsigned char directlink = (batman_packet->flags & DIRECTLINK ? 1 : 0); if (!forw_packet->if_incoming) { - printk(KERN_ERR "batman-adv: Error - can't forward packet: incoming iface not specified\n"); + printk(KERN_ERR "batman-adv: Error - can't forward packet: " + "incoming iface not specified\n"); return; } @@ -192,7 +194,8 @@ static void send_packet(struct forw_packet *forw_packet) /* FIXME: what about aggregated packets ? */ bat_dbg(DBG_BATMAN, - "%s packet (originator %pM, seqno %d, TTL %d) on interface %s [%s]\n", + "%s packet (originator %pM, seqno %d, TTL %d) " + "on interface %s [%s]\n", (forw_packet->own ? "Sending own" : "Forwarding"), batman_packet->orig, ntohs(batman_packet->seqno), batman_packet->ttl, forw_packet->if_incoming->dev, @@ -322,7 +325,8 @@ void schedule_forward_packet(struct orig_node *orig_node, batman_packet->tq = orig_node->router->tq_avg; if (orig_node->router->last_ttl) - batman_packet->ttl = orig_node->router->last_ttl - 1; + batman_packet->ttl = orig_node->router->last_ttl + - 1; } tq_avg = orig_node->router->tq_avg; @@ -331,7 +335,8 @@ void schedule_forward_packet(struct orig_node *orig_node, /* apply hop penalty */ batman_packet->tq = hop_penalty(batman_packet->tq); - bat_dbg(DBG_BATMAN, "Forwarding packet: tq_orig: %i, tq_avg: %i, tq_forw: %i, ttl_orig: %i, ttl_forw: %i\n", + bat_dbg(DBG_BATMAN, "Forwarding packet: tq_orig: %i, tq_avg: %i, " + "tq_forw: %i, ttl_orig: %i, ttl_forw: %i\n", in_tq, tq_avg, batman_packet->tq, in_ttl - 1, batman_packet->ttl); diff --git a/drivers/staging/batman-adv/soft-interface.c b/drivers/staging/batman-adv/soft-interface.c index c3b5288..51c40b7 100644 --- a/drivers/staging/batman-adv/soft-interface.c +++ b/drivers/staging/batman-adv/soft-interface.c @@ -237,6 +237,8 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev) if ((orig_node) && (orig_node->router)) { + struct neigh_node *router = orig_node->router; + if (my_skb_push(skb, sizeof(struct unicast_packet)) < 0) goto unlock; @@ -251,14 +253,14 @@ int interface_tx(struct sk_buff *skb, struct net_device *dev) memcpy(unicast_packet->dest, orig_node->orig, ETH_ALEN); /* net_dev won't be available when not active */ - if (orig_node->router->if_incoming->if_status != IF_ACTIVE) + if (router->if_incoming->if_status != IF_ACTIVE) goto unlock; /* don't lock while sending the packets ... we therefore * copy the required data before sending */ - batman_if = orig_node->router->if_incoming; - memcpy(dstaddr, orig_node->router->addr, ETH_ALEN); + batman_if = router->if_incoming; + memcpy(dstaddr, router->addr, ETH_ALEN); spin_unlock_irqrestore(&orig_hash_lock, flags); send_skb_packet(skb, batman_if, dstaddr); diff --git a/drivers/staging/batman-adv/translation-table.c b/drivers/staging/batman-adv/translation-table.c index c7a6635..e01ff21 100644 --- a/drivers/staging/batman-adv/translation-table.c +++ b/drivers/staging/batman-adv/translation-table.c @@ -77,7 +77,10 @@ void hna_local_add(uint8_t *addr) MAC-flooding. */ if ((num_hna + 1 > (ETH_DATA_LEN - BAT_PACKET_LEN) / ETH_ALEN) || (num_hna + 1 > 255)) { - bat_dbg(DBG_ROUTES, "Can't add new local hna entry (%pM): number of local hna entries exceeds packet size\n", addr); + bat_dbg(DBG_ROUTES, + "Can't add new local hna entry (%pM): " + "number of local hna entries exceeds packet size\n", + addr); return; } @@ -108,7 +111,8 @@ void hna_local_add(uint8_t *addr) hna_local_hash->size * 2); if (swaphash == NULL) - printk(KERN_ERR "batman-adv:Couldn't resize local hna hash table\n"); + printk(KERN_ERR "batman-adv:" + "Couldn't resize local hna hash table\n"); else hna_local_hash = swaphash; } @@ -169,14 +173,16 @@ int hna_local_fill_buffer_text(struct net_device *net_dev, char *buff, if (!bat_priv->primary_if) { if (off == 0) return sprintf(buff, - "BATMAN mesh %s disabled - please specify interfaces to enable it\n", - net_dev->name); + "BATMAN mesh %s disabled - " + "please specify interfaces to enable it\n", + net_dev->name); return 0; } hdr_len = sprintf(buff, - "Locally retrieved addresses (from %s) announced via HNA:\n", + "Locally retrieved addresses (from %s) " + "announced via HNA:\n", net_dev->name); if (off < hdr_len) @@ -196,7 +202,7 @@ int hna_local_fill_buffer_text(struct net_device *net_dev, char *buff, hna_local_entry = hashit.bucket->data; bytes_written += snprintf(buff + bytes_written, 22, - " * %02x:%02x:%02x:%02x:%02x:%02x\n", + " * " MAC_FMT "\n", hna_local_entry->addr[0], hna_local_entry->addr[1], hna_local_entry->addr[2], @@ -317,7 +323,8 @@ void hna_global_add_orig(struct orig_node *orig_node, memcpy(hna_global_entry->addr, hna_ptr, ETH_ALEN); bat_dbg(DBG_ROUTES, - "Creating new global hna entry: %pM (via %pM)\n", + "Creating new global hna entry: " + "%pM (via %pM)\n", hna_global_entry->addr, orig_node->orig); spin_lock_irqsave(&hna_global_hash_lock, flags); @@ -362,7 +369,8 @@ void hna_global_add_orig(struct orig_node *orig_node, hna_global_hash->size * 2); if (swaphash == NULL) - printk(KERN_ERR "batman-adv:Couldn't resize global hna hash table\n"); + printk(KERN_ERR "batman-adv:" + "Couldn't resize global hna hash table\n"); else hna_global_hash = swaphash; } @@ -383,14 +391,16 @@ int hna_global_fill_buffer_text(struct net_device *net_dev, char *buff, if (!bat_priv->primary_if) { if (off == 0) return sprintf(buff, - "BATMAN mesh %s disabled - please specify interfaces to enable it\n", - net_dev->name); + "BATMAN mesh %s disabled - " + "please specify interfaces to enable it\n", + net_dev->name); return 0; } hdr_len = sprintf(buff, - "Globally announced HNAs received via the mesh %s (translation table):\n", + "Globally announced HNAs received via the mesh %s " + "(translation table):\n", net_dev->name); if (off < hdr_len) @@ -410,7 +420,7 @@ int hna_global_fill_buffer_text(struct net_device *net_dev, char *buff, hna_global_entry = hashit.bucket->data; bytes_written += snprintf(buff + bytes_written, 44, - " * %02x:%02x:%02x:%02x:%02x:%02x via %02x:%02x:%02x:%02x:%02x:%02x\n", + " * " MAC_FMT " via " MAC_FMT "\n", hna_global_entry->addr[0], hna_global_entry->addr[1], hna_global_entry->addr[2], diff --git a/drivers/staging/batman-adv/types.h b/drivers/staging/batman-adv/types.h index 0b1fe9e..86007c7 100644 --- a/drivers/staging/batman-adv/types.h +++ b/drivers/staging/batman-adv/types.h @@ -29,7 +29,10 @@ #include "packet.h" #include "bitarray.h" -#define BAT_HEADER_LEN (sizeof(struct ethhdr) + ((sizeof(struct unicast_packet) > sizeof(struct bcast_packet) ? sizeof(struct unicast_packet) : sizeof(struct bcast_packet)))) +#define BAT_HEADER_LEN (sizeof(struct ethhdr) + \ + ((sizeof(struct unicast_packet) > sizeof(struct bcast_packet) ? \ + sizeof(struct unicast_packet) : \ + sizeof(struct bcast_packet)))) struct batman_if { @@ -47,28 +50,40 @@ struct batman_if { }; -struct orig_node { /* structure for orig_list maintaining nodes of mesh */ +/** + * orig_node - structure for orig_list maintaining nodes of mesh + * @last_valid: when last packet from this node was received + * @bcast_seqno_reset: time when the broadcast seqno window was reset + * @batman_seqno_reset: time when the batman seqno window was reset + * @flags: for now only VIS_SERVER flag + * @last_real_seqno: last and best known squence number + * @last_ttl: ttl of last received packet + * @last_bcast_seqno: last broadcast sequence number received by this host + */ +struct orig_node { uint8_t orig[ETH_ALEN]; struct neigh_node *router; TYPE_OF_WORD *bcast_own; uint8_t *bcast_own_sum; uint8_t tq_own; int tq_asym_penalty; - unsigned long last_valid; /* when last packet from this node was received */ - unsigned long bcast_seqno_reset; /* time when the broadcast - seqno window was reset. */ - unsigned long batman_seqno_reset;/* time when the batman seqno - window was reset. */ - uint8_t flags; /* for now only VIS_SERVER flag. */ + unsigned long last_valid; + unsigned long bcast_seqno_reset; + unsigned long batman_seqno_reset; + uint8_t flags; unsigned char *hna_buff; int16_t hna_buff_len; - uint16_t last_real_seqno; /* last and best known squence number */ - uint8_t last_ttl; /* ttl of last received packet */ + uint16_t last_real_seqno; + uint8_t last_ttl; TYPE_OF_WORD bcast_bits[NUM_WORDS]; - uint16_t last_bcast_seqno; /* last broadcast sequence number received by this host */ + uint16_t last_bcast_seqno; struct list_head neigh_list; }; +/** + * neigh_node + * @last_valid: when last packet via this neighbor was received + */ struct neigh_node { struct list_head list; uint8_t addr[ETH_ALEN]; @@ -77,7 +92,7 @@ struct neigh_node { uint8_t tq_index; uint8_t tq_avg; uint8_t last_ttl; - unsigned long last_valid; /* when last packet via this neighbor was received */ + unsigned long last_valid; TYPE_OF_WORD real_bits[NUM_WORDS]; struct orig_node *orig_node; struct batman_if *if_incoming; @@ -117,7 +132,11 @@ struct hna_global_entry { struct orig_node *orig_node; }; -struct forw_packet { /* structure for forw_list maintaining packets to be send/forwarded */ +/** + * forw_packet - structure for forw_list maintaining packets to be + * send/forwarded + */ +struct forw_packet { struct hlist_node list; unsigned long send_time; uint8_t own; -- cgit v0.10.2 From 2d06efdb48e412b90a67c3986222fd5743400e37 Mon Sep 17 00:00:00 2001 From: Andrew Lunn Date: Fri, 7 May 2010 21:47:31 +0200 Subject: Staging: batman-adv: updating README Signed-off-by: Marek Lindner Signed-off-by: Andrew Lunn Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/README b/drivers/staging/batman-adv/README index e2a7271..14244a2 100644 --- a/drivers/staging/batman-adv/README +++ b/drivers/staging/batman-adv/README @@ -1,169 +1,240 @@ -[state: 22-03-2010] +[state: 03-05-2010] BATMAN-ADV ---------- -Batman-advanced is a new approach to wireless networking which does no longer -operate on the IP basis. Unlike B.A.T.M.A.N, which exchanges information -using UDP packets and sets routing tables, batman-advanced operates on ISO/OSI -Layer 2 only and uses and routes (or better: bridges) Ethernet Frames. It -emulates a virtual network switch of all nodes participating. Therefore all -nodes appear to be link local, thus all higher operating protocols won't be -affected by any changes within the network. You can run almost any protocol -above B.A.T.M.A.N. Advanced, prominent examples are: IPv4, IPv6, DHCP, IPX. +Batman advanced is a new approach to wireless networking which +does no longer operate on the IP basis. Unlike the batman daemon, +which exchanges information using UDP packets and sets routing +tables, batman-advanced operates on ISO/OSI Layer 2 only and uses +and routes (or better: bridges) Ethernet Frames. It emulates a +virtual network switch of all nodes participating. Therefore all +nodes appear to be link local, thus all higher operating proto- +cols won't be affected by any changes within the network. You can +run almost any protocol above batman advanced, prominent examples +are: IPv4, IPv6, DHCP, IPX. -This is batman-advanced implemented as Linux kernel driver. It does not depend -on any network (other) driver, and can be used on wifi as well as ethernet, -vpn, etc ... (anything with ethernet-style layer 2). +Batman advanced was implemented as a Linux kernel driver to re- +duce the overhead to a minimum. It does not depend on any (other) +network driver, and can be used on wifi as well as ethernet lan, +vpn, etc ... (anything with ethernet-style layer 2). -USAGE ------ +CONFIGURATION +------------- -insmod the batman-adv.ko in your kernel: +Load the batman-adv module into your kernel: # insmod batman-adv.ko -the module is now waiting for activation. You must add some interfaces -on which batman can operate. Each interface must be added separately: +The module is now waiting for activation. You must add some in- +terfaces on which batman can operate. After loading the module +batman advanced will scan your systems interfaces to search for +compatible interfaces. Once found, it will create subfolders in +the /sys directories of each supported interface, e.g. -# echo wlan0 > /proc/net/batman-adv/interfaces +# ls /sys/class/net/eth0/batman_adv/ +# iface_status mesh_iface -( # echo wlan1 > /proc/net/batman-adv/interfaces ) -( # echo eth0 > /proc/net/batman-adv/interfaces ) -( ... ) +If an interface does not have the "batman_adv" subfolder it prob- +ably is not supported. Not supported interfaces are: loopback, +non-ethernet and batman's own interfaces. -Now batman starts broadcasting on this interface. -You can now view the table of originators (mesh participants) with: +Note: After the module was loaded it will continuously watch for +new interfaces to verify the compatibility. There is no need to +reload the module if you plug your USB wifi adapter into your ma- +chine after batman advanced was initially loaded. -# cat /proc/net/batman-adv/originators +To activate a given interface simply write "bat0" into its +"mesh_iface" file inside the batman_adv subfolder: -The module will create a new interface "bat0", which can be used as a -regular interface: +# echo bat0 > /sys/class/net/eth0/batman_adv/mesh_iface -# ifconfig bat0 inet 192.168.0.1 up -# ping 192.168.0.2 -... +Repeat this step for all interfaces you wish to add. Now batman +starts using/broadcasting on this/these interface(s). ---- -If you want topology visualization, your meshnode must be configured -as VIS-server: +By reading the "iface_status" file you can check its status: -# echo "server" > /proc/net/batman-adv/vis_server +# cat /sys/class/net/eth0/batman_adv/iface_status +# active -Each node is either configured as "server" or as "client" (default: -"client"). Clients send their topology data to the server next to them, -and server synchronize with other servers. If there is no server -configured (default) within the mesh, no topology information will be -transmitted. With these "synchronizing servers", there can be 1 or -more vis servers sharing the same (or at least very similar) data. +To deactivate an interface you have to write "none" into its +"mesh_iface" file: -When configured as server, you can get a topology snapshot of your mesh: +# echo none > /sys/class/net/eth0/batman_adv/mesh_iface -# cat /proc/net/batman-adv/vis_data -This raw output is intended to be easily parsable and convertable with -other tools. Have a look at the batctl README if you want a vis output -in dot or json format for instance and how those outputs could then be -visualised in an image. +All mesh wide settings can be found in batman's own interface +folder: + +# ls /sys/class/net/bat0/mesh/ +# aggregate_ogm originators transtable_global vis_mode +# orig_interval transtable_local vis_data + + +Some of the files contain all sort of status information regard- +ing the mesh network. For example, you can view the table of +originators (mesh participants) with: + +# cat /sys/class/net/bat0/mesh/originators + +Other files allow to change batman's behaviour to better fit your +requirements. For instance, you can check the current originator +interval (value in milliseconds which determines how often batman +sends its broadcast packets): + +# cat /sys/class/net/bat0/mesh/orig_interval +# status: 1000 + +and also change its value: + +# echo 3000 > /sys/class/net/bat0/mesh/orig_interval -The raw format consists of comma seperated values per entry where each -entry is giving information about a certain source interface. Each entry -can/has to have the following values: --> "mac" -> mac address of an originator's source interface - (each line begins with it) --> "TQ mac value" -> src mac's link quality towards mac address of a neighbor - originator's interface which is being used for routing --> "HNA mac" -> HNA announced by source mac --> "PRIMARY" -> this is a primary interface --> "SEC mac" -> secondary mac address of source (requires preceeding --> PRIMARY) - -The TQ value has a range from 4 to 255 with 255 being the best. -The HNA entries are showing which hosts are connected to the mesh via bat0 -or being bridged into the mesh network. -The PRIMARY/SEC values are only applied on primary interfaces - ---- In very mobile scenarios, you might want to adjust the originator -interval to a lower value. This will make the mesh more responsive to -topology changes, but will also increase the overhead. Please make sure -that all nodes in your mesh use the same interval. The default value -is 1000 ms (1 second). +interval to a lower value. This will make the mesh more respon- +sive to topology changes, but will also increase the overhead. + + +USAGE +----- + +To make use of your newly created mesh, batman advanced provides +a new interface "bat0" which you should use from this point on. +All interfaces added to batman advanced are not relevant any +longer because batman handles them for you. Basically, one "hands +over" the data by using the batman interface and batman will make +sure it reaches its destination. -# echo 1000 > /proc/net/batman-adv/orig_interval +The "bat0" interface can be used like any other regular inter- +face. It needs an IP address which can be either statically con- +figured or dynamically (by using DHCP or similar services): -To deactivate batman, do: +# NodeA: ifconfig bat0 192.168.0.1 +# NodeB: ifconfig bat0 192.168.0.2 +# NodeB: ping 192.168.0.1 + +Note: In order to avoid problems remove all IP addresses previ- +ously assigned to interfaces now used by batman advanced, e.g. + +# ifconfig eth0 0.0.0.0 + + +VISUALIZATION +------------- + +If you want topology visualization, at least one mesh node must +be configured as VIS-server: + +# echo "server" > /sys/class/net/bat0/mesh/vis_mode + +Each node is either configured as "server" or as "client" (de- +fault: "client"). Clients send their topology data to the server +next to them, and server synchronize with other servers. If there +is no server configured (default) within the mesh, no topology +information will be transmitted. With these "synchronizing +servers", there can be 1 or more vis servers sharing the same (or +at least very similar) data. + +When configured as server, you can get a topology snapshot of +your mesh: + +# cat /sys/class/net/bat0/mesh/vis_data + +This raw output is intended to be easily parsable and convertable +with other tools. Have a look at the batctl README if you want a +vis output in dot or json format for instance and how those out- +puts could then be visualised in an image. + +The raw format consists of comma separated values per entry where +each entry is giving information about a certain source inter- +face. Each entry can/has to have the following values: +-> "mac" - mac address of an originator's source interface + (each line begins with it) +-> "TQ mac value" - src mac's link quality towards mac address + of a neighbor originator's interface which + is being used for routing +-> "HNA mac" - HNA announced by source mac +-> "PRIMARY" - this is a primary interface +-> "SEC mac" - secondary mac address of source + (requires preceding PRIMARY) + +The TQ value has a range from 4 to 255 with 255 being the best. +The HNA entries are showing which hosts are connected to the mesh +via bat0 or being bridged into the mesh network. The PRIMARY/SEC +values are only applied on primary interfaces -# echo "" > /proc/net/batman-adv/interfaces LOGGING/DEBUGGING ----------------- -All error messages, warnings and information messages are sent to the -kernel log. Depending on your operating system distribution this can be -read in one of a number of ways. Try using the commands: dmesg, -logread, or looking in the files /var/log/kern.log or -/var/log/syslog. All batman-adv messages are prefixed with +All error messages, warnings and information messages are sent to +the kernel log. Depending on your operating system distribution +this can be read in one of a number of ways. Try using the com- +mands: dmesg, logread, or looking in the files /var/log/kern.log +or /var/log/syslog. All batman-adv messages are prefixed with "batman-adv:" So to see just these messages try -dmesg | grep batman-adv +# dmesg | grep batman-adv -When investigating problems with your mesh network it is sometimes -necessary to see more detail debug messages. This must be enabled when -compiling the batman-adv module. Use "make menuconfig" and enable the +When investigating problems with your mesh network it is some- +times necessary to see more detail debug messages. This must be +enabled when compiling the batman-adv module. When building bat- +man-adv as part of kernel, use "make menuconfig" and enable the option "B.A.T.M.A.N. debugging". -The additional debug output is by default disabled. It can be enabled -either at kernel module load time or during run time. To enable debug -output at module load time, add the module parameter debug=. - can take one of four values. +The additional debug output is by default disabled. It can be en- +abled either at kernel modules load time or during run time. To +enable debug output at module load time, add the module parameter +debug=. can take one of four values. -0 - All debug output disabled +0 - All debug output disabled 1 - Enable messages related to routing / flooding / broadcasting 2 - Enable route or hna added / changed / deleted 3 - Enable all messages e.g. -modprobe batman-adv debug=2 +# modprobe batman-adv debug=2 -will load the module and enable debug messages for when routes or HNAs -change. +will load the module and enable debug messages for when routes or +HNAs change. -The debug output can also be changed at runtime using the file +The debug output can also be changed at runtime using the file /sys/module/batman-adv/parameters/debug. e.g. -echo 2 > /sys/module/batman-adv/parameters/debug +# echo 2 > /sys/module/batman-adv/parameters/debug enables debug messages for when routes or HNAs -The debug output is sent to the kernel logs. So try dmesg, logread etc -to see the debug messages. +The debug output is sent to the kernel logs. So try dmesg, lo- +gread, etc to see the debug messages. + BATCTL ------ -B.A.T.M.A.N. advanced operates on layer 2 and thus all hosts -participating in the virtual switch are completely transparent for all -protocols above layer 2. Therefore the common diagnosis tools do not -work as expected. To overcome these problems batctl was created. At -the moment the batctl contains ping, traceroute, tcpdump and +As batman advanced operates on layer 2 all hosts participating in +the virtual switch are completely transparent for all protocols +above layer 2. Therefore the common diagnosis tools do not work +as expected. To overcome these problems batctl was created. At +the moment the batctl contains ping, traceroute, tcpdump and interfaces to the kernel module settings. For more information, please see the manpage (man batctl). -batctl is available on http://www.open-mesh.net/ +batctl is available on http://www.open-mesh.org/ + CONTACT ------- Please send us comments, experiences, questions, anything :) -IRC: #batman on irc.freenode.org -Mailing-list: b.a.t.m.a.n@open-mesh.net -(subscription at https://list.open-mesh.net/mm/listinfo/b.a.t.m.a.n ) +IRC: #batman on irc.freenode.org +Mailing-list: b.a.t.m.a.n@open-mesh.net (optional subscription + at https://lists.open-mesh.org/mm/listinfo/b.a.t.m.a.n) You can also contact the Authors: -Marek Lindner -Simon Wunderlich +Marek Lindner +Simon Wunderlich + -- cgit v0.10.2 From 7c1e68ba9236ef848a715cbb60b13947b9ae7289 Mon Sep 17 00:00:00 2001 From: Randy Dunlap Date: Thu, 6 May 2010 16:44:08 -0700 Subject: staging: cxt1e1: fix semaphore build breakage Fix build errors by including linux/semaphore.h: drivers/staging/cxt1e1/pmcc4_private.h:144: error: field 'sr_sem_busy' has incomplete type drivers/staging/cxt1e1/pmcc4_private.h:146: error: field 'sr_sem_wait' has incomplete type drivers/staging/cxt1e1/pmcc4_private.h:189: error: field 'sem_wdbusy' has incomplete type drivers/staging/cxt1e1/musycc.c:617: error: implicit declaration of function 'down' drivers/staging/cxt1e1/musycc.c:641: error: implicit declaration of function 'up' Signed-off-by: Randy Dunlap Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/cxt1e1/pmcc4_private.h b/drivers/staging/cxt1e1/pmcc4_private.h index 0ae18c4..b2b6e37 100644 --- a/drivers/staging/cxt1e1/pmcc4_private.h +++ b/drivers/staging/cxt1e1/pmcc4_private.h @@ -20,6 +20,7 @@ #include #include +#include #include #include /* support for tasklets */ #include /* support for timer */ -- cgit v0.10.2 From dd7ad5c8083de5c1820f1da711458582b10e0ed2 Mon Sep 17 00:00:00 2001 From: Randy Dunlap Date: Thu, 6 May 2010 16:45:10 -0700 Subject: staging: ti-st: depends on RFKILL Fix build errors. st_kim.c uses rfkill*() interfaces, so it should depend on RFKILL. st_kim.c:(.text+0x291b21): undefined reference to `rfkill_unregister' st_kim.c:(.text+0x291b31): undefined reference to `rfkill_destroy' st_kim.c:(.text+0x291d8a): undefined reference to `rfkill_alloc' st_kim.c:(.text+0x291db9): undefined reference to `rfkill_init_sw_state' st_kim.c:(.text+0x291dc9): undefined reference to `rfkill_register' st_kim.c:(.text+0x291e07): undefined reference to `rfkill_unregister' (.text+0x291e85): undefined reference to `rfkill_set_hw_state' (.text+0x292072): undefined reference to `rfkill_set_hw_state' (.text+0x2920e1): undefined reference to `rfkill_set_hw_state Signed-off-by: Randy Dunlap Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/ti-st/Kconfig b/drivers/staging/ti-st/Kconfig index 120e8db..3ab204d 100644 --- a/drivers/staging/ti-st/Kconfig +++ b/drivers/staging/ti-st/Kconfig @@ -5,6 +5,7 @@ menu "Texas Instruments shared transport line discipline" config TI_ST tristate "shared transport core driver" + depends on RFKILL select FW_LOADER help This enables the shared transport core driver for TI -- cgit v0.10.2 From 1ec28abbf891036df537aa624c9df8245097e8e8 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Thu, 6 May 2010 21:44:43 -0700 Subject: Staging: hv: add module description to blkvsc Signed-off-by: Stephen Hemminger Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index a81040f..d068f15 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -149,8 +149,9 @@ static int blkvsc_do_flush(struct block_device_context *blkdev); static int blkvsc_cancel_pending_reqs(struct block_device_context *blkdev); static int blkvsc_do_pending_reqs(struct block_device_context *blkdev); - static int blkvsc_ringbuffer_size = BLKVSC_RING_BUFFER_SIZE; +module_param(blkvsc_ringbuffer_size, int, S_IRUGO); +MODULE_PARM_DESC(ring_size, "Ring buffer size (in bytes)"); /* The one and only one */ static struct blkvsc_driver_context g_blkvsc_drv; @@ -1511,6 +1512,6 @@ static void __exit blkvsc_exit(void) MODULE_LICENSE("GPL"); MODULE_VERSION(HV_DRV_VERSION); -module_param(blkvsc_ringbuffer_size, int, S_IRUGO); +MODULE_DESCRIPTION("Microsoft Hyper-V virtual block driver"); module_init(blkvsc_init); module_exit(blkvsc_exit); -- cgit v0.10.2 From 48c9f7c30b187a9112a174eb92bb44e1718c99a6 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Thu, 6 May 2010 21:44:44 -0700 Subject: Staging: hv: block_operations can be const Signed-off-by: Stephen Hemminger Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/blkvsc_drv.c b/drivers/staging/hv/blkvsc_drv.c index d068f15..61bd0be 100644 --- a/drivers/staging/hv/blkvsc_drv.c +++ b/drivers/staging/hv/blkvsc_drv.c @@ -156,7 +156,7 @@ MODULE_PARM_DESC(ring_size, "Ring buffer size (in bytes)"); /* The one and only one */ static struct blkvsc_driver_context g_blkvsc_drv; -static struct block_device_operations block_ops = { +static const struct block_device_operations block_ops = { .owner = THIS_MODULE, .open = blkvsc_open, .release = blkvsc_release, -- cgit v0.10.2 From 3afc7cc38c75d645855d680f0fad7d342f8e7fb2 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Thu, 6 May 2010 21:44:45 -0700 Subject: Staging: hv: storvsc module descriptions Signed-off-by: Stephen Hemminger Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/storvsc_drv.c b/drivers/staging/hv/storvsc_drv.c index 6a20146..d22e35f 100644 --- a/drivers/staging/hv/storvsc_drv.c +++ b/drivers/staging/hv/storvsc_drv.c @@ -97,6 +97,8 @@ static int storvsc_get_chs(struct scsi_device *sdev, struct block_device *bdev, static int storvsc_ringbuffer_size = STORVSC_RING_BUFFER_SIZE; +module_param(storvsc_ringbuffer_size, int, S_IRUGO); +MODULE_PARM_DESC(storvsc_ringbuffer_size, "Ring buffer size (bytes)"); /* The one and only one */ static struct storvsc_driver_context g_storvsc_drv; @@ -991,6 +993,6 @@ static void __exit storvsc_exit(void) MODULE_LICENSE("GPL"); MODULE_VERSION(HV_DRV_VERSION); -module_param(storvsc_ringbuffer_size, int, S_IRUGO); +MODULE_DESCRIPTION("Microsoft Hyper-V virtual storage driver"); module_init(storvsc_init); module_exit(storvsc_exit); -- cgit v0.10.2 From 0cbd8d9854284d3ff38d04aaa3ae726fb1c4a958 Mon Sep 17 00:00:00 2001 From: Andres More Date: Thu, 6 May 2010 20:34:29 -0300 Subject: staging: vt6656: code cleanup, removed HANDLE definition in ttype.h Checkpatch warnings about using externs in .c files were not resolved, neither some long lines on deeply nested code. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index d8154f3..01680e6 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -1513,7 +1513,9 @@ BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) if ( pDevice->byTMax == 0 ) return; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_CHANGE_ANTENNA, + NULL); pDevice->byAntennaState = 1; @@ -1543,7 +1545,9 @@ BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) ((pDevice->ulSQ3_State1 != 0) && (pDevice->ulSQ3_State0 != 0) && (pDevice->ulSQ3_State0 < pDevice->ulSQ3_State1)) ) { - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_CHANGE_ANTENNA, + NULL); pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ); pDevice->TimerSQ3Tmax2.expires = RUN_AT(pDevice->byTMax2 * HZ); @@ -1576,17 +1580,14 @@ BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) * -*/ -void -TimerSQ3CallBack ( - HANDLE hDeviceContext - ) +void TimerSQ3CallBack(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"TimerSQ3CallBack..."); spin_lock_irq(&pDevice->lock); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL); pDevice->byAntennaState = 0; s_vClearSQ3Value(pDevice); pDevice->TimerSQ3Tmax3.expires = RUN_AT(pDevice->byTMax3 * HZ); @@ -1618,10 +1619,7 @@ TimerSQ3CallBack ( * -*/ -void -TimerSQ3Tmax3CallBack ( - HANDLE hDeviceContext - ) +void TimerSQ3Tmax3CallBack(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1639,7 +1637,7 @@ TimerSQ3Tmax3CallBack ( return; } - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_ANTENNA, NULL); pDevice->byAntennaState = 1; del_timer(&pDevice->TimerSQ3Tmax3); del_timer(&pDevice->TimerSQ3Tmax2); diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index d54d415..d59992c 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -117,15 +117,8 @@ BBvCaculateParameter ( // timer for antenna diversity -void -TimerSQ3CallBack ( - HANDLE hDeviceContext - ); - -void -TimerSQ3Tmax3CallBack ( - HANDLE hDeviceContext - ); +void TimerSQ3CallBack(void *hDeviceContext); +void TimerSQ3Tmax3CallBack(void *hDeviceContext); void BBvAntennaDiversity(PSDevice pDevice, BYTE byRxRate, BYTE bySQ3); void BBvLoopbackOn(PSDevice pDevice); diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index 7cc0d95..8c68e04 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -91,19 +91,13 @@ const WORD awHWRetry1[5][5] = { /*--------------------- Static Functions --------------------------*/ -void s_vCheckSensitivity( - HANDLE hDeviceContext - ); - -void s_vCheckPreEDThreshold( - HANDLE hDeviceContext - ); +void s_vCheckSensitivity(void *hDeviceContext); +void s_vCheckPreEDThreshold(void *hDeviceContext); #ifdef Calcu_LinkQual -void s_uCalculateLinkQual( - HANDLE hDeviceContext - ); +void s_uCalculateLinkQual(void *hDeviceContext); #endif + /*--------------------- Export Variables --------------------------*/ @@ -123,13 +117,10 @@ void s_uCalculateLinkQual( * -*/ -PKnownBSS -BSSpSearchBSSList( - HANDLE hDeviceContext, - PBYTE pbyDesireBSSID, - PBYTE pbyDesireSSID, - CARD_PHY_TYPE ePhyType - ) +PKnownBSS BSSpSearchBSSList(void *hDeviceContext, + PBYTE pbyDesireBSSID, + PBYTE pbyDesireSSID, + CARD_PHY_TYPE ePhyType) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -296,11 +287,7 @@ pDevice->bSameBSSMaxNum = jj; -*/ -void -BSSvClearBSSList( - HANDLE hDeviceContext, - BOOL bKeepCurrBSSID - ) +void BSSvClearBSSList(void *hDeviceContext, BOOL bKeepCurrBSSID) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -342,12 +329,9 @@ BSSvClearBSSList( * TRUE if found. * -*/ -PKnownBSS -BSSpAddrIsInBSSList( - HANDLE hDeviceContext, - PBYTE abyBSSID, - PWLAN_IE_SSID pSSID - ) +PKnownBSS BSSpAddrIsInBSSList(void *hDeviceContext, + PBYTE abyBSSID, + PWLAN_IE_SSID pSSID) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -383,26 +367,23 @@ BSSpAddrIsInBSSList( * -*/ -BOOL -BSSbInsertToBSSList ( - HANDLE hDeviceContext, - PBYTE abyBSSIDAddr, - QWORD qwTimestamp, - WORD wBeaconInterval, - WORD wCapInfo, - BYTE byCurrChannel, - PWLAN_IE_SSID pSSID, - PWLAN_IE_SUPP_RATES pSuppRates, - PWLAN_IE_SUPP_RATES pExtSuppRates, - PERPObject psERP, - PWLAN_IE_RSN pRSN, - PWLAN_IE_RSN_EXT pRSNWPA, - PWLAN_IE_COUNTRY pIE_Country, - PWLAN_IE_QUIET pIE_Quiet, - UINT uIELength, - PBYTE pbyIEs, - HANDLE pRxPacketContext - ) +BOOL BSSbInsertToBSSList(void *hDeviceContext, + PBYTE abyBSSIDAddr, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + UINT uIELength, + PBYTE pbyIEs, + void *pRxPacketContext) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -518,7 +499,9 @@ BSSbInsertToBSSList ( if ((bIs802_1x == TRUE) && (pSSID->len == ((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->len) && ( !memcmp(pSSID->abySSID, ((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySSID, pSSID->len))) { - bAdd_PMKID_Candidate((HANDLE)pDevice, pBSSList->abyBSSID, &pBSSList->sRSNCapObj); + bAdd_PMKID_Candidate((void *) pDevice, + pBSSList->abyBSSID, + &pBSSList->sRSNCapObj); if ((pDevice->bLinkPass == TRUE) && (pMgmt->eCurrState == WMAC_STATE_ASSOC)) { if ((KeybGetTransmitKey(&(pDevice->sKey), pDevice->abyBSSID, PAIRWISE_KEY, &pTransmitKey) == TRUE) || @@ -602,27 +585,24 @@ BSSbInsertToBSSList ( -*/ // TODO: input structure modify -BOOL -BSSbUpdateToBSSList ( - HANDLE hDeviceContext, - QWORD qwTimestamp, - WORD wBeaconInterval, - WORD wCapInfo, - BYTE byCurrChannel, - BOOL bChannelHit, - PWLAN_IE_SSID pSSID, - PWLAN_IE_SUPP_RATES pSuppRates, - PWLAN_IE_SUPP_RATES pExtSuppRates, - PERPObject psERP, - PWLAN_IE_RSN pRSN, - PWLAN_IE_RSN_EXT pRSNWPA, - PWLAN_IE_COUNTRY pIE_Country, - PWLAN_IE_QUIET pIE_Quiet, - PKnownBSS pBSSList, - UINT uIELength, - PBYTE pbyIEs, - HANDLE pRxPacketContext - ) +BOOL BSSbUpdateToBSSList(void *hDeviceContext, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + BOOL bChannelHit, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + PKnownBSS pBSSList, + UINT uIELength, + PBYTE pbyIEs, + void *pRxPacketContext) { int ii, jj; PSDevice pDevice = (PSDevice)hDeviceContext; @@ -768,12 +748,9 @@ BSSbUpdateToBSSList ( * -*/ -BOOL -BSSbIsSTAInNodeDB( - HANDLE hDeviceContext, - PBYTE abyDstAddr, - PUINT puNodeIndex - ) +BOOL BSSbIsSTAInNodeDB(void *hDeviceContext, + PBYTE abyDstAddr, + PUINT puNodeIndex) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -804,11 +781,7 @@ BSSbIsSTAInNodeDB( * None * -*/ -void -BSSvCreateOneNode( - HANDLE hDeviceContext, - PUINT puNodeIndex - ) +void BSSvCreateOneNode(void *hDeviceContext, PUINT puNodeIndex) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -869,11 +842,8 @@ BSSvCreateOneNode( * None * -*/ -void -BSSvRemoveOneNode( - HANDLE hDeviceContext, - UINT uNodeIndex - ) + +void BSSvRemoveOneNode(void *hDeviceContext, UINT uNodeIndex) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -902,13 +872,10 @@ BSSvRemoveOneNode( * -*/ -void -BSSvUpdateAPNode( - HANDLE hDeviceContext, - PWORD pwCapInfo, - PWLAN_IE_SUPP_RATES pSuppRates, - PWLAN_IE_SUPP_RATES pExtSuppRates - ) +void BSSvUpdateAPNode(void *hDeviceContext, + PWORD pwCapInfo, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -946,10 +913,6 @@ BSSvUpdateAPNode( }; - - - - /*+ * * Routine Description: @@ -961,11 +924,7 @@ BSSvUpdateAPNode( * -*/ - -void -BSSvAddMulticastNode( - HANDLE hDeviceContext - ) +void BSSvAddMulticastNode(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -991,10 +950,6 @@ BSSvAddMulticastNode( }; - - - - /*+ * * Routine Description: @@ -1008,11 +963,7 @@ BSSvAddMulticastNode( * -*/ - -void -BSSvSecondCallBack( - HANDLE hDeviceContext - ) +void BSSvSecondCallBack(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -1080,7 +1031,7 @@ if((pMgmt->eCurrState!=WMAC_STATE_ASSOC) && #endif #ifdef Calcu_LinkQual - s_uCalculateLinkQual((HANDLE)pDevice); + s_uCalculateLinkQual((void *)pDevice); #endif for (ii = 0; ii < (MAX_NODE_NUM + 1); ii++) { @@ -1226,14 +1177,16 @@ if((pMgmt->eCurrState!=WMAC_STATE_ASSOC) && // DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Callback inactive Count = [%d]\n", pMgmt->sNodeDBTable[0].uInActiveCount); if (pDevice->bUpdateBBVGA) { - // s_vCheckSensitivity((HANDLE) pDevice); - s_vCheckPreEDThreshold((HANDLE)pDevice); + /* s_vCheckSensitivity((void *) pDevice); */ + s_vCheckPreEDThreshold((void *) pDevice); } if ((pMgmt->sNodeDBTable[0].uInActiveCount >= (LOST_BEACON_COUNT/2)) && (pDevice->byBBVGACurrent != pDevice->abyBBVGA[0]) ) { pDevice->byBBVGANew = pDevice->abyBBVGA[0]; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_BBSENSITIVITY, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_CHANGE_BBSENSITIVITY, + NULL); } if (pMgmt->sNodeDBTable[0].uInActiveCount >= LOST_BEACON_COUNT) { @@ -1281,9 +1234,13 @@ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "bRoaming %d, !\n", pDevice->bRoaming ); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "bIsRoaming %d, !\n", pDevice->bIsRoaming ); if ((pDevice->bRoaming == TRUE)&&(pDevice->bIsRoaming == TRUE)){ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Fast Roaming ...\n"); - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); + BSSvClearBSSList((void *) pDevice, pDevice->bLinkPass); + bScheduleCommand((void *) pDevice, + WLAN_CMD_BSSID_SCAN, + pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, + WLAN_CMD_SSID, + pMgmt->abyDesireSSID); pDevice->uAutoReConnectTime = 0; pDevice->uIsroamingTime = 0; pDevice->bRoaming = FALSE; @@ -1326,10 +1283,14 @@ else { pDevice->eEncryptionStatus = pDevice->eOldEncryptionStatus; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Roaming ...\n"); - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); - pMgmt->eScanType = WMAC_SCAN_ACTIVE; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); + BSSvClearBSSList((void *) pDevice, pDevice->bLinkPass); + pMgmt->eScanType = WMAC_SCAN_ACTIVE; + bScheduleCommand((void *) pDevice, + WLAN_CMD_BSSID_SCAN, + pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, + WLAN_CMD_SSID, + pMgmt->abyDesireSSID); pDevice->uAutoReConnectTime = 0; } } @@ -1345,17 +1306,17 @@ else { else { DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Adhoc re-scaning ...\n"); pMgmt->eScanType = WMAC_SCAN_ACTIVE; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, NULL); pDevice->uAutoReConnectTime = 0; }; } if (pMgmt->eCurrState == WMAC_STATE_JOINTED) { - if (pDevice->bUpdateBBVGA) { - //s_vCheckSensitivity((HANDLE) pDevice); - s_vCheckPreEDThreshold((HANDLE)pDevice); - } + if (pDevice->bUpdateBBVGA) { + /* s_vCheckSensitivity((void *) pDevice); */ + s_vCheckPreEDThreshold((void *) pDevice); + } if (pMgmt->sNodeDBTable[0].uInActiveCount >=ADHOC_LOST_BEACON_COUNT) { DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Lost other STA beacon [%d] sec, started !\n", pMgmt->sNodeDBTable[0].uInActiveCount); pMgmt->sNodeDBTable[0].uInActiveCount = 0; @@ -1379,9 +1340,6 @@ else { return; } - - - /*+ * * Routine Description: @@ -1395,15 +1353,10 @@ else { * -*/ - - -void -BSSvUpdateNodeTxCounter( - HANDLE hDeviceContext, - PSStatCounter pStatistic, - BYTE byTSR, - BYTE byPktNO - ) +void BSSvUpdateNodeTxCounter(void *hDeviceContext, + PSStatCounter pStatistic, + BYTE byTSR, + BYTE byPktNO) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -1417,8 +1370,6 @@ BSSvUpdateNodeTxCounter( BYTE byPktNum; WORD wFIFOCtl; - - byPktNum = (byPktNO & 0x0F) >> 4; byTxRetry = (byTSR & 0xF0) >> 4; wRate = (WORD) (byPktNO & 0xF0) >> 4; @@ -1485,11 +1436,13 @@ BSSvUpdateNodeTxCounter( } }; - if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) || + if ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) || (pMgmt->eCurrMode == WMAC_MODE_ESS_AP)) { - if (BSSbIsSTAInNodeDB((HANDLE)pDevice, pbyDestAddr, &uNodeIndex)){ - pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts += 1; + if (BSSbIsSTAInNodeDB((void *) pDevice, + pbyDestAddr, + &uNodeIndex)) { + pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts += 1; if ( !(byTSR & (TSR_TMO | TSR_RETRYTMO))) { // transmit success, TxAttempts at least plus one pMgmt->sNodeDBTable[uNodeIndex].uTxOk[MAX_RATE]++; @@ -1544,9 +1497,6 @@ BSSvUpdateNodeTxCounter( } - - - /*+ * * Routine Description: @@ -1565,13 +1515,8 @@ BSSvUpdateNodeTxCounter( * -*/ - -void -BSSvClearNodeDBTable( - HANDLE hDeviceContext, - UINT uStartIndex - ) - +void BSSvClearNodeDBTable(void *hDeviceContext, + UINT uStartIndex) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -1594,10 +1539,7 @@ BSSvClearNodeDBTable( return; }; - -void s_vCheckSensitivity( - HANDLE hDeviceContext - ) +void s_vCheckSensitivity(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PKnownBSS pBSSList = NULL; @@ -1629,7 +1571,9 @@ void s_vCheckSensitivity( if (pDevice->byBBVGANew != pDevice->byBBVGACurrent) { pDevice->uBBVGADiffCount++; if (pDevice->uBBVGADiffCount >= BB_VGA_CHANGE_THRESHOLD) - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_BBSENSITIVITY, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_CHANGE_BBSENSITIVITY, + NULL); } else { pDevice->uBBVGADiffCount = 0; } @@ -1639,9 +1583,7 @@ void s_vCheckSensitivity( } #ifdef Calcu_LinkQual -void s_uCalculateLinkQual( - HANDLE hDeviceContext - ) +void s_uCalculateLinkQual(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; ULONG TxOkRatio, TxCnt; @@ -1687,10 +1629,7 @@ else } #endif -void -BSSvClearAnyBSSJoinRecord ( - HANDLE hDeviceContext - ) +void BSSvClearAnyBSSJoinRecord(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -1702,9 +1641,7 @@ BSSvClearAnyBSSJoinRecord ( return; } -void s_vCheckPreEDThreshold( - HANDLE hDeviceContext - ) +void s_vCheckPreEDThreshold(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PKnownBSS pBSSList = NULL; diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h index 48b34b5..8140b9b 100644 --- a/drivers/staging/vt6656/bssdb.h +++ b/drivers/staging/vt6656/bssdb.h @@ -226,134 +226,82 @@ typedef struct tagKnownNodeDB { } KnownNodeDB, *PKnownNodeDB; - /*--------------------- Export Functions --------------------------*/ - - -PKnownBSS -BSSpSearchBSSList( - HANDLE hDeviceContext, - PBYTE pbyDesireBSSID, - PBYTE pbyDesireSSID, - CARD_PHY_TYPE ePhyType - ); - -PKnownBSS -BSSpAddrIsInBSSList( - HANDLE hDeviceContext, - PBYTE abyBSSID, - PWLAN_IE_SSID pSSID - ); - -void -BSSvClearBSSList( - HANDLE hDeviceContext, - BOOL bKeepCurrBSSID - ); - -BOOL -BSSbInsertToBSSList( - HANDLE hDeviceContext, - PBYTE abyBSSIDAddr, - QWORD qwTimestamp, - WORD wBeaconInterval, - WORD wCapInfo, - BYTE byCurrChannel, - PWLAN_IE_SSID pSSID, - PWLAN_IE_SUPP_RATES pSuppRates, - PWLAN_IE_SUPP_RATES pExtSuppRates, - PERPObject psERP, - PWLAN_IE_RSN pRSN, - PWLAN_IE_RSN_EXT pRSNWPA, - PWLAN_IE_COUNTRY pIE_Country, - PWLAN_IE_QUIET pIE_Quiet, - UINT uIELength, - PBYTE pbyIEs, - HANDLE pRxPacketContext - ); - - -BOOL -BSSbUpdateToBSSList( - HANDLE hDeviceContext, - QWORD qwTimestamp, - WORD wBeaconInterval, - WORD wCapInfo, - BYTE byCurrChannel, - BOOL bChannelHit, - PWLAN_IE_SSID pSSID, - PWLAN_IE_SUPP_RATES pSuppRates, - PWLAN_IE_SUPP_RATES pExtSuppRates, - PERPObject psERP, - PWLAN_IE_RSN pRSN, - PWLAN_IE_RSN_EXT pRSNWPA, - PWLAN_IE_COUNTRY pIE_Country, - PWLAN_IE_QUIET pIE_Quiet, - PKnownBSS pBSSList, - UINT uIELength, - PBYTE pbyIEs, - HANDLE pRxPacketContext - ); - - -BOOL -BSSbIsSTAInNodeDB( - HANDLE hDeviceContext, - PBYTE abyDstAddr, - PUINT puNodeIndex - ); - -void -BSSvCreateOneNode( - HANDLE hDeviceContext, - PUINT puNodeIndex - ); - -void -BSSvUpdateAPNode( - HANDLE hDeviceContext, - PWORD pwCapInfo, - PWLAN_IE_SUPP_RATES pItemRates, - PWLAN_IE_SUPP_RATES pExtSuppRates - ); - - -void -BSSvSecondCallBack( - HANDLE hDeviceContext - ); - - -void -BSSvUpdateNodeTxCounter( - HANDLE hDeviceContext, - PSStatCounter pStatistic, - BYTE byTSR, - BYTE byPktNO - ); - -void -BSSvRemoveOneNode( - HANDLE hDeviceContext, - UINT uNodeIndex - ); - -void -BSSvAddMulticastNode( - HANDLE hDeviceContext - ); - - -void -BSSvClearNodeDBTable( - HANDLE hDeviceContext, - UINT uStartIndex - ); - -void -BSSvClearAnyBSSJoinRecord( - HANDLE hDeviceContext - ); +PKnownBSS BSSpSearchBSSList(void *hDeviceContext, + PBYTE pbyDesireBSSID, + PBYTE pbyDesireSSID, + CARD_PHY_TYPE ePhyType); + +PKnownBSS BSSpAddrIsInBSSList(void *hDeviceContext, + PBYTE abyBSSID, + PWLAN_IE_SSID pSSID); + +void BSSvClearBSSList(void *hDeviceContext, BOOL bKeepCurrBSSID); + +BOOL BSSbInsertToBSSList(void *hDeviceContext, + PBYTE abyBSSIDAddr, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + UINT uIELength, + PBYTE pbyIEs, + void *pRxPacketContext); + +BOOL BSSbUpdateToBSSList(void *hDeviceContext, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + BOOL bChannelHit, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + PKnownBSS pBSSList, + UINT uIELength, + PBYTE pbyIEs, + void *pRxPacketContext); + +BOOL BSSbIsSTAInNodeDB(void *hDeviceContext, + PBYTE abyDstAddr, + PUINT puNodeIndex); + +void BSSvCreateOneNode(void *hDeviceContext, PUINT puNodeIndex); + +void BSSvUpdateAPNode(void *hDeviceContext, + PWORD pwCapInfo, + PWLAN_IE_SUPP_RATES pItemRates, + PWLAN_IE_SUPP_RATES pExtSuppRates); + +void BSSvSecondCallBack(void *hDeviceContext); + +void BSSvUpdateNodeTxCounter(void *hDeviceContext, + PSStatCounter pStatistic, + BYTE byTSR, + BYTE byPktNO); + +void BSSvRemoveOneNode(void *hDeviceContext, + UINT uNodeIndex); + +void BSSvAddMulticastNode(void *hDeviceContext); + +void BSSvClearNodeDBTable(void *hDeviceContext, + UINT uStartIndex); + +void BSSvClearAnyBSSJoinRecord(void *hDeviceContext); #endif /* __BSSDB_H__ */ diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index b18427b..6982224 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -1069,7 +1069,9 @@ static BOOL s_bAPModeRxCtl ( // delcare received ps-poll event if (IS_CTL_PSPOLL(pbyFrame)) { pMgmt->sNodeDBTable[iSANodeIndex].bRxPSPoll = TRUE; - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RX_PSPOLL, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_RX_PSPOLL, + NULL); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "dpc: WLAN_CMD_RX_PSPOLL 1\n"); } else { @@ -1078,7 +1080,9 @@ static BOOL s_bAPModeRxCtl ( if (!IS_FC_POWERMGT(pbyFrame)) { pMgmt->sNodeDBTable[iSANodeIndex].bPSEnable = FALSE; pMgmt->sNodeDBTable[iSANodeIndex].bRxPSPoll = TRUE; - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RX_PSPOLL, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_RX_PSPOLL, + NULL); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "dpc: WLAN_CMD_RX_PSPOLL 2\n"); } } @@ -1094,7 +1098,9 @@ static BOOL s_bAPModeRxCtl ( if (pMgmt->sNodeDBTable[iSANodeIndex].wEnQueueCnt > 0) { pMgmt->sNodeDBTable[iSANodeIndex].bPSEnable = FALSE; pMgmt->sNodeDBTable[iSANodeIndex].bRxPSPoll = TRUE; - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RX_PSPOLL, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_RX_PSPOLL, + NULL); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "dpc: WLAN_CMD_RX_PSPOLL 3\n"); } @@ -1596,7 +1602,7 @@ void RXvMngWorkItem(void *Context) } ASSERT(pRCB);// cannot be NULL pRxPacket = &(pRCB->sMngPacket); - vMgrRxManagePacket((HANDLE)pDevice, &(pDevice->sMgmtObj), pRxPacket); + vMgrRxManagePacket((void *) pDevice, &(pDevice->sMgmtObj), pRxPacket); pRCB->Ref--; if(pRCB->Ref == 0) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"RxvFreeMng %d %d\n",pDevice->NumRecvFreeList, pDevice->NumRecvMngList); diff --git a/drivers/staging/vt6656/int.c b/drivers/staging/vt6656/int.c index 2ba2089..89f5b18 100644 --- a/drivers/staging/vt6656/int.c +++ b/drivers/staging/vt6656/int.c @@ -160,11 +160,11 @@ INTnsProcessData(PSDevice pDevice) pMgmt->byDTIMPeriod-1; pMgmt->sNodeDBTable[0].bRxPSPoll = TRUE; if (pMgmt->sNodeDBTable[0].bPSEnable) - bScheduleCommand((HANDLE)pDevice, - WLAN_CMD_RX_PSPOLL, - NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_RX_PSPOLL, + NULL); } - bScheduleCommand((HANDLE)pDevice, + bScheduleCommand((void *) pDevice, WLAN_CMD_BECON_SEND, NULL); } /* if (pDevice->eOPMode == OP_MODE_AP) */ @@ -174,13 +174,13 @@ INTnsProcessData(PSDevice pDevice) } if (pINTData->byISR0 & ISR_TBTT) { if (pDevice->bEnablePSMode) - bScheduleCommand((HANDLE) pDevice, + bScheduleCommand((void *) pDevice, WLAN_CMD_TBTT_WAKEUP, NULL); if (pDevice->bChannelSwitch) { pDevice->byChannelSwitchCount--; if (pDevice->byChannelSwitchCount == 0) - bScheduleCommand((HANDLE) pDevice, + bScheduleCommand((void *) pDevice, WLAN_CMD_11H_CHSW, NULL); } @@ -207,7 +207,7 @@ INTnsProcessData(PSDevice pDevice) if (pINTData->byISR1 != 0) if (pINTData->byISR1 & ISR_GPIO3) - bScheduleCommand((HANDLE) pDevice, + bScheduleCommand((void *) pDevice, WLAN_CMD_RADIO, NULL); pDevice->intBuf.uDataLen = 0; diff --git a/drivers/staging/vt6656/ioctl.c b/drivers/staging/vt6656/ioctl.c index 08d5429..69d1d73 100644 --- a/drivers/staging/vt6656/ioctl.c +++ b/drivers/staging/vt6656/ioctl.c @@ -100,16 +100,21 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { memcpy(abyScanSSID, pItemSSID, pItemSSID->len + WLAN_IEHDR_LEN); } spin_lock_irq(&pDevice->lock); - if (memcmp(pMgmt->abyCurrBSSID, &abyNullAddr[0], 6) == 0) - BSSvClearBSSList((HANDLE)pDevice, FALSE); - else - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_BSS_SCAN..begin \n"); - if (pItemSSID->len != 0) - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, abyScanSSID); - else - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + if (memcmp(pMgmt->abyCurrBSSID, &abyNullAddr[0], 6) == 0) + BSSvClearBSSList((void *) pDevice, FALSE); + else + BSSvClearBSSList((void *) pDevice, pDevice->bLinkPass); + + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "WLAN_CMD_BSS_SCAN..begin\n"); + + if (pItemSSID->len != 0) + bScheduleCommand((void *) pDevice, + WLAN_CMD_BSSID_SCAN, + abyScanSSID); + else + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + spin_unlock_irq(&pDevice->lock); break; @@ -207,8 +212,10 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { netif_stop_queue(pDevice->dev); spin_lock_irq(&pDevice->lock); pMgmt->eCurrState = WMAC_STATE_IDLE; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_BSSID_SCAN, + pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, NULL); spin_unlock_irq(&pDevice->lock); break; @@ -576,7 +583,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { netif_stop_queue(pDevice->dev); spin_lock_irq(&pDevice->lock); - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RUN_AP, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_RUN_AP, NULL); spin_unlock_irq(&pDevice->lock); break; diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c index d7ed3b4..4d0db21 100644 --- a/drivers/staging/vt6656/iwctl.c +++ b/drivers/staging/vt6656/iwctl.c @@ -209,9 +209,9 @@ if(pDevice->byReAssocCount > 0) { //reject scan when re-associating! spin_lock_irq(&pDevice->lock); - #ifdef update_BssList - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); - #endif +#ifdef update_BssList + BSSvClearBSSList((void *) pDevice, pDevice->bLinkPass); +#endif //mike add: active scan OR passive scan OR desire_ssid scan if(wrq->length == sizeof(struct iw_scan_req)) { @@ -229,7 +229,7 @@ if(pDevice->byReAssocCount > 0) { //reject scan when re-associating! pMgmt->eScanType = WMAC_SCAN_PASSIVE; PRINT_K("SIOCSIWSCAN:[desired_ssid=%s,len=%d]\n",((PWLAN_IE_SSID)abyScanSSID)->abySSID, ((PWLAN_IE_SSID)abyScanSSID)->len); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, abyScanSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, abyScanSSID); spin_unlock_irq(&pDevice->lock); return 0; @@ -244,7 +244,7 @@ if(pDevice->byReAssocCount > 0) { //reject scan when re-associating! pMgmt->eScanType = WMAC_SCAN_PASSIVE; //printk("SIOCSIWSCAN:WLAN_CMD_BSSID_SCAN\n"); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); spin_unlock_irq(&pDevice->lock); return 0; @@ -944,10 +944,14 @@ int iwctl_siwessid(struct net_device *dev, if (pCurr == NULL){ PRINT_K("SIOCSIWESSID:hidden ssid site survey before associate.......\n"); - vResetCommandTimer((HANDLE) pDevice); + vResetCommandTimer((void *) pDevice); pMgmt->eScanType = WMAC_SCAN_ACTIVE; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, + WLAN_CMD_BSSID_SCAN, + pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, + WLAN_CMD_SSID, + pMgmt->abyDesireSSID); } else { //mike:to find out if that desired SSID is a hidden-ssid AP , // by means of judging if there are two same BSSID exist in list ? @@ -959,10 +963,14 @@ int iwctl_siwessid(struct net_device *dev, } if(uSameBssidNum >= 2) { //hit: desired AP is in hidden ssid mode!!! PRINT_K("SIOCSIWESSID:hidden ssid directly associate.......\n"); - vResetCommandTimer((HANDLE) pDevice); + vResetCommandTimer((void *) pDevice); pMgmt->eScanType = WMAC_SCAN_PASSIVE; //this scan type,you'll submit scan result! - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, + WLAN_CMD_BSSID_SCAN, + pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, + WLAN_CMD_SSID, + pMgmt->abyDesireSSID); } } } @@ -1554,11 +1562,11 @@ int iwctl_siwpower(struct net_device *dev, } if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { pDevice->ePSMode = WMAC_POWER_FAST; - PSvEnablePowerSaving((HANDLE)pDevice, pMgmt->wListenInterval); + PSvEnablePowerSaving((void *) pDevice, pMgmt->wListenInterval); } else if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) { pDevice->ePSMode = WMAC_POWER_FAST; - PSvEnablePowerSaving((HANDLE)pDevice, pMgmt->wListenInterval); + PSvEnablePowerSaving((void *) pDevice, pMgmt->wListenInterval); } switch (wrq->flags & IW_POWER_MODE) { case IW_POWER_UNICAST_R: @@ -2007,12 +2015,16 @@ int iwctl_siwmlme(struct net_device *dev, case IW_MLME_DEAUTH: //this command seems to be not complete,please test it --einsnliu //printk("iwctl_siwmlme--->send DEAUTH\n"); - //bScheduleCommand((HANDLE) pDevice, WLAN_CMD_DEAUTH, (PBYTE)&reason); + /* bScheduleCommand((void *) pDevice, + WLAN_CMD_DEAUTH, + (PBYTE)&reason); */ //break; case IW_MLME_DISASSOC: if(pDevice->bLinkPass == TRUE){ PRINT_K("iwctl_siwmlme--->send DISASSOCIATE\n"); - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_DISASSOCIATE, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_DISASSOCIATE, + NULL); } break; default: diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index 2fcaf70..f1d81b1 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1158,12 +1158,12 @@ static int device_open(struct net_device *dev) { } if (pDevice->sMgmtObj.eConfigMode == WMAC_CONFIG_AP) { - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RUN_AP, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_RUN_AP, NULL); } else { //mike:mark@2008-11-10 - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_BSSID_SCAN, NULL); - //bScheduleCommand((HANDLE)pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + /* bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, NULL); */ } @@ -1220,7 +1220,7 @@ static int device_close(struct net_device *dev) { //2007-1121-02by EinsnLiu if (pDevice->bLinkPass) { - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_DISASSOCIATE, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_DISASSOCIATE, NULL); mdelay(30); } //End Add @@ -2101,16 +2101,16 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { netif_stop_queue(pDevice->dev); spin_lock_irq(&pDevice->lock); - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RUN_AP, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_RUN_AP, NULL); spin_unlock_irq(&pDevice->lock); } else { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Commit the settings\n"); spin_lock_irq(&pDevice->lock); //2007-1121-01by EinsnLiu - if (pDevice->bLinkPass&& + if (pDevice->bLinkPass && memcmp(pMgmt->abyCurrSSID,pMgmt->abyDesireSSID,WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN)) { - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_DISASSOCIATE, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_DISASSOCIATE, NULL); } else { pDevice->bLinkPass = FALSE; pMgmt->eCurrState = WMAC_STATE_IDLE; @@ -2121,10 +2121,14 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { netif_stop_queue(pDevice->dev); #ifdef WPA_SUPPLICANT_DRIVER_WEXT_SUPPORT pMgmt->eScanType = WMAC_SCAN_ACTIVE; - if(pDevice->bWPASuppWextEnabled !=TRUE) + if (!pDevice->bWPASuppWextEnabled) #endif - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_BSSID_SCAN, + pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, + WLAN_CMD_SSID, + NULL); spin_unlock_irq(&pDevice->lock); } pDevice->bCommit = FALSE; diff --git a/drivers/staging/vt6656/power.c b/drivers/staging/vt6656/power.c index 05d51fb..766c5be 100644 --- a/drivers/staging/vt6656/power.c +++ b/drivers/staging/vt6656/power.c @@ -50,19 +50,14 @@ /*--------------------- Static Definitions -------------------------*/ - - - /*--------------------- Static Classes ----------------------------*/ /*--------------------- Static Variables --------------------------*/ static int msglevel =MSG_LEVEL_INFO; /*--------------------- Static Functions --------------------------*/ - /*--------------------- Export Variables --------------------------*/ - /*--------------------- Export Functions --------------------------*/ /*+ @@ -75,12 +70,8 @@ static int msglevel =MSG_LEVEL_INFO; * -*/ - -void -PSvEnablePowerSaving( - HANDLE hDeviceContext, - WORD wListenInterval - ) +void PSvEnablePowerSaving(void *hDeviceContext, + WORD wListenInterval) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -128,7 +119,7 @@ PSvEnablePowerSaving( pDevice->bEnablePSMode = TRUE; if (pDevice->eOPMode == OP_MODE_ADHOC) { -// bMgrPrepareBeaconToSend((HANDLE)pDevice, pMgmt); + /* bMgrPrepareBeaconToSend((void *) pDevice, pMgmt); */ } // We don't send null pkt in ad hoc mode since beacon will handle this. else if (pDevice->eOPMode == OP_MODE_INFRASTRUCTURE) { @@ -139,11 +130,6 @@ PSvEnablePowerSaving( return; } - - - - - /*+ * * Routine Description: @@ -154,10 +140,7 @@ PSvEnablePowerSaving( * -*/ -void -PSvDisablePowerSaving( - HANDLE hDeviceContext - ) +void PSvDisablePowerSaving(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; // PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -187,7 +170,6 @@ PSvDisablePowerSaving( return; } - /*+ * * Routine Description: @@ -198,13 +180,9 @@ PSvDisablePowerSaving( * FALSE, if fail -*/ - -BOOL -PSbConsiderPowerDown( - HANDLE hDeviceContext, - BOOL bCheckRxDMA, - BOOL bCheckCountToWakeUp - ) +BOOL PSbConsiderPowerDown(void *hDeviceContext, + BOOL bCheckRxDMA, + BOOL bCheckCountToWakeUp) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -248,8 +226,6 @@ PSbConsiderPowerDown( return TRUE; } - - /*+ * * Routine Description: @@ -260,12 +236,7 @@ PSbConsiderPowerDown( * -*/ - - -void -PSvSendPSPOLL( - HANDLE hDeviceContext - ) +void PSvSendPSPOLL(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -297,8 +268,6 @@ PSvSendPSPOLL( return; } - - /*+ * * Routine Description: @@ -308,10 +277,8 @@ PSvSendPSPOLL( * None. * -*/ -BOOL -PSbSendNullPacket( - HANDLE hDeviceContext - ) + +BOOL PSbSendNullPacket(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSTxMgmtPacket pTxPacket = NULL; @@ -388,10 +355,7 @@ PSbSendNullPacket( * -*/ -BOOL -PSbIsNextTBTTWakeUp( - HANDLE hDeviceContext - ) +BOOL PSbIsNextTBTTWakeUp(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6656/power.h b/drivers/staging/vt6656/power.h index c34e389..50792bb 100644 --- a/drivers/staging/vt6656/power.h +++ b/drivers/staging/vt6656/power.h @@ -48,37 +48,14 @@ /* PSDevice pDevice */ /* PSDevice hDeviceContext */ -BOOL -PSbConsiderPowerDown( - HANDLE hDeviceContext, - BOOL bCheckRxDMA, - BOOL bCheckCountToWakeUp - ); - -void -PSvDisablePowerSaving( - HANDLE hDeviceContext - ); - -void -PSvEnablePowerSaving( - HANDLE hDeviceContext, - WORD wListenInterval - ); - -void -PSvSendPSPOLL( - HANDLE hDeviceContext - ); - -BOOL -PSbSendNullPacket( - HANDLE hDeviceContext - ); - -BOOL -PSbIsNextTBTTWakeUp( - HANDLE hDeviceContext - ); +BOOL PSbConsiderPowerDown(void *hDeviceContext, + BOOL bCheckRxDMA, + BOOL bCheckCountToWakeUp); + +void PSvDisablePowerSaving(void *hDeviceContext); +void PSvEnablePowerSaving(void *hDeviceContext, WORD wListenInterval); +void PSvSendPSPOLL(void *hDeviceContext); +BOOL PSbSendNullPacket(void *hDeviceContext); +BOOL PSbIsNextTBTTWakeUp(void *hDeviceContext); #endif /* __POWER_H__ */ diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index b9f6788..bfc7860 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -3032,10 +3032,12 @@ nsDMA_tx_packet( } } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "dma_tx: pDevice->wCurrentRate = %d \n", pDevice->wCurrentRate); + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "dma_tx: pDevice->wCurrentRate = %d\n", + pDevice->wCurrentRate); if (wKeepRate != pDevice->wCurrentRate) { - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_SETPOWER, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_SETPOWER, NULL); } if (pDevice->wCurrentRate <= RATE_11M) { @@ -3118,7 +3120,9 @@ nsDMA_tx_packet( if ( pDevice->bEnablePSMode == TRUE ) { if ( !pDevice->bPSModeTxBurst ) { - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_MAC_DISPOWERSAVING, NULL); + bScheduleCommand((void *) pDevice, + WLAN_CMD_MAC_DISPOWERSAVING, + NULL); pDevice->bPSModeTxBurst = TRUE; } } @@ -3138,7 +3142,7 @@ nsDMA_tx_packet( if (bNeedDeAuth == TRUE) { WORD wReason = WLAN_MGMT_REASON_MIC_FAILURE; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_DEAUTH, (PBYTE)&wReason); + bScheduleCommand((void *) pDevice, WLAN_CMD_DEAUTH, (PBYTE) &wReason); } if(status!=STATUS_PENDING) { @@ -3258,9 +3262,8 @@ bRelayPacketSend ( pDevice->wCurrentRate = pMgmt->sNodeDBTable[uNodeIndex].wTxDataRate; } - if (wKeepRate != pDevice->wCurrentRate) { - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SETPOWER, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_SETPOWER, NULL); } if (pDevice->wCurrentRate <= RATE_11M) diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index 692b63e4..13e8bbb 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -133,11 +133,4 @@ typedef DWORD * PDWORD; typedef QWORD * PQWORD; -// handle declaration -#ifdef STRICT -typedef void *HANDLE; -#else -typedef void *HANDLE; -#endif - #endif /* __TTYPE_H__ */ diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 23db5f6..6fec9094 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -94,18 +94,12 @@ s_bCommandComplete ( ); -static -BOOL s_bClearBSSID_SCAN ( - HANDLE hDeviceContext - ); +static BOOL s_bClearBSSID_SCAN(void *hDeviceContext); /*--------------------- Export Variables --------------------------*/ - /*--------------------- Export Functions --------------------------*/ - - /* * Description: * Stop AdHoc beacon during scan process @@ -119,6 +113,7 @@ BOOL s_bClearBSSID_SCAN ( * Return Value: none * */ + static void vAdHocBeaconStop(PSDevice pDevice) @@ -321,15 +316,7 @@ s_MgrMakeProbeRequest( return pTxPacket; } - - - - -void -vCommandTimerWait( - HANDLE hDeviceContext, - UINT MSecond - ) +void vCommandTimerWait(void *hDeviceContext, UINT MSecond) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -342,13 +329,7 @@ vCommandTimerWait( return; } - - - -void -vRunCommand( - HANDLE hDeviceContext - ) +void vRunCommand(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -435,7 +416,8 @@ vRunCommand( pMgmt->abyScanBSSID[5] = 0xFF; pItemSSID->byElementID = WLAN_EID_SSID; // clear bssid list - // BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); + /* BSSvClearBSSList((void *) pDevice, + pDevice->bLinkPass); */ pMgmt->eScanState = WMAC_IS_SCANNING; pDevice->byScanBBType = pDevice->byBBType; //lucas pDevice->bStopDataPkt = TRUE; @@ -480,11 +462,11 @@ vRunCommand( (pMgmt->uScanChannel < CB_MAX_CHANNEL_24G)) { s_vProbeChannel(pDevice); spin_unlock_irq(&pDevice->lock); - vCommandTimerWait((HANDLE)pDevice, 100); + vCommandTimerWait((void *) pDevice, 100); return; } else { spin_unlock_irq(&pDevice->lock); - vCommandTimerWait((HANDLE)pDevice, WCMD_PASSIVE_SCAN_TIME); + vCommandTimerWait((void *) pDevice, WCMD_PASSIVE_SCAN_TIME); return; } @@ -552,7 +534,11 @@ vRunCommand( DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Send Disassociation Packet..\n"); // reason = 8 : disassoc because sta has left - vMgrDisassocBeginSta((HANDLE)pDevice, pMgmt, pMgmt->abyCurrBSSID, (8), &Status); + vMgrDisassocBeginSta((void *) pDevice, + pMgmt, + pMgmt->abyCurrBSSID, + (8), + &Status); pDevice->bLinkPass = FALSE; ControlvMaskByte(pDevice,MESSAGE_REQUEST_MACREG,MAC_REG_PAPEDELAY,LEDSTS_STS,LEDSTS_SLOW); // unlock command busy @@ -614,22 +600,26 @@ vRunCommand( // set initial state pMgmt->eCurrState = WMAC_STATE_IDLE; pMgmt->eCurrMode = WMAC_MODE_STANDBY; - PSvDisablePowerSaving((HANDLE)pDevice); + PSvDisablePowerSaving((void *) pDevice); BSSvClearNodeDBTable(pDevice, 0); - vMgrJoinBSSBegin((HANDLE)pDevice, &Status); + vMgrJoinBSSBegin((void *) pDevice, &Status); // if Infra mode if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && (pMgmt->eCurrState == WMAC_STATE_JOINTED)) { // Call mgr to begin the deauthentication // reason = (3) beacuse sta has left ESS - if (pMgmt->eCurrState>= WMAC_STATE_AUTH) { - vMgrDeAuthenBeginSta((HANDLE)pDevice, pMgmt, pMgmt->abyCurrBSSID, (3), &Status); - } + if (pMgmt->eCurrState >= WMAC_STATE_AUTH) { + vMgrDeAuthenBeginSta((void *)pDevice, + pMgmt, + pMgmt->abyCurrBSSID, + (3), + &Status); + } // Call mgr to begin the authentication - vMgrAuthenBeginSta((HANDLE)pDevice, pMgmt, &Status); + vMgrAuthenBeginSta((void *) pDevice, pMgmt, &Status); if (Status == CMD_STATUS_SUCCESS) { pDevice->byLinkWaitCount = 0; pDevice->eCommandState = WLAN_AUTHENTICATE_WAIT; - vCommandTimerWait((HANDLE)pDevice, AUTHENTICATE_TIMEOUT); + vCommandTimerWait((void *) pDevice, AUTHENTICATE_TIMEOUT); spin_unlock_irq(&pDevice->lock); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" Set eCommandState = WLAN_AUTHENTICATE_WAIT\n"); return; @@ -648,10 +638,12 @@ vRunCommand( } else { // start own IBSS - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "CreateOwn IBSS by CurrMode = IBSS_STA \n"); - vMgrCreateOwnIBSS((HANDLE)pDevice, &Status); + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "CreateOwn IBSS by CurrMode = IBSS_STA\n"); + vMgrCreateOwnIBSS((void *) pDevice, &Status); if (Status != CMD_STATUS_SUCCESS){ - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " WLAN_CMD_IBSS_CREATE fail ! \n"); + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "WLAN_CMD_IBSS_CREATE fail!\n"); }; BSSvAddMulticastNode(pDevice); } @@ -662,10 +654,12 @@ vRunCommand( if (pMgmt->eConfigMode == WMAC_CONFIG_IBSS_STA || pMgmt->eConfigMode == WMAC_CONFIG_AUTO) { // start own IBSS - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "CreateOwn IBSS by CurrMode = STANDBY \n"); - vMgrCreateOwnIBSS((HANDLE)pDevice, &Status); + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "CreateOwn IBSS by CurrMode = STANDBY\n"); + vMgrCreateOwnIBSS((void *) pDevice, &Status); if (Status != CMD_STATUS_SUCCESS){ - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" WLAN_CMD_IBSS_CREATE fail ! \n"); + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "WLAN_CMD_IBSS_CREATE fail!\n"); }; BSSvAddMulticastNode(pDevice); s_bClearBSSID_SCAN(pDevice); @@ -701,12 +695,12 @@ vRunCommand( pDevice->byLinkWaitCount = 0; // Call mgr to begin the association DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCurrState == WMAC_STATE_AUTH\n"); - vMgrAssocBeginSta((HANDLE)pDevice, pMgmt, &Status); + vMgrAssocBeginSta((void *) pDevice, pMgmt, &Status); if (Status == CMD_STATUS_SUCCESS) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState = WLAN_ASSOCIATE_WAIT\n"); pDevice->byLinkWaitCount = 0; pDevice->eCommandState = WLAN_ASSOCIATE_WAIT; - vCommandTimerWait((HANDLE)pDevice, ASSOCIATE_TIMEOUT); + vCommandTimerWait((void *) pDevice, ASSOCIATE_TIMEOUT); spin_unlock_irq(&pDevice->lock); return; } @@ -718,7 +712,7 @@ vRunCommand( pDevice->byLinkWaitCount ++; printk("WLAN_AUTHENTICATE_WAIT:wait %d times!!\n",pDevice->byLinkWaitCount); spin_unlock_irq(&pDevice->lock); - vCommandTimerWait((HANDLE)pDevice, AUTHENTICATE_TIMEOUT/2); + vCommandTimerWait((void *) pDevice, AUTHENTICATE_TIMEOUT/2); return; } pDevice->byLinkWaitCount = 0; @@ -742,7 +736,8 @@ vRunCommand( if (pMgmt->eCurrState == WMAC_STATE_ASSOC) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCurrState == WMAC_STATE_ASSOC\n"); if (pDevice->ePSMode != WMAC_POWER_CAM) { - PSvEnablePowerSaving((HANDLE)pDevice, pMgmt->wListenInterval); + PSvEnablePowerSaving((void *) pDevice, + pMgmt->wListenInterval); } /* if (pMgmt->eAuthenMode >= WMAC_AUTH_WPA) { @@ -786,7 +781,7 @@ vRunCommand( pDevice->byLinkWaitCount ++; printk("WLAN_ASSOCIATE_WAIT:wait %d times!!\n",pDevice->byLinkWaitCount); spin_unlock_irq(&pDevice->lock); - vCommandTimerWait((HANDLE)pDevice, ASSOCIATE_TIMEOUT/2); + vCommandTimerWait((void *) pDevice, ASSOCIATE_TIMEOUT/2); return; } pDevice->byLinkWaitCount = 0; @@ -823,9 +818,10 @@ vRunCommand( pMgmt->eCurrState = WMAC_STATE_IDLE; pDevice->bFixRate = FALSE; - vMgrCreateOwnIBSS((HANDLE)pDevice, &Status); - if (Status != CMD_STATUS_SUCCESS){ - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " vMgrCreateOwnIBSS fail ! \n"); + vMgrCreateOwnIBSS((void *) pDevice, &Status); + if (Status != CMD_STATUS_SUCCESS) { + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "vMgrCreateOwnIBSS fail!\n"); }; // alway turn off unicast bit MACvRegBitsOff(pDevice, MAC_REG_RCR, RCR_UNICAST); @@ -948,7 +944,11 @@ vRunCommand( if (pDevice->bLinkPass == TRUE) { // reason = 8 : disassoc because sta has left - vMgrDisassocBeginSta((HANDLE)pDevice, pMgmt, pMgmt->abyCurrBSSID, (8), &Status); + vMgrDisassocBeginSta((void *) pDevice, + pMgmt, + pMgmt->abyCurrBSSID, + (8), + &Status); pDevice->bLinkPass = FALSE; // unlock command busy pMgmt->eCurrState = WMAC_STATE_IDLE; @@ -1185,18 +1185,15 @@ s_bCommandComplete ( break; } - - vCommandTimerWait((HANDLE)pDevice, 0); + vCommandTimerWait((void *) pDevice, 0); } return TRUE; } -BOOL bScheduleCommand ( - HANDLE hDeviceContext, - CMD_CODE eCommand, - PBYTE pbyItem0 - ) +BOOL bScheduleCommand(void *hDeviceContext, + CMD_CODE eCommand, + PBYTE pbyItem0) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1264,10 +1261,7 @@ BOOL bScheduleCommand ( * Return Value: TRUE if success; otherwise FALSE * */ -static -BOOL s_bClearBSSID_SCAN ( - HANDLE hDeviceContext - ) +static BOOL s_bClearBSSID_SCAN(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; UINT uCmdDequeueIdx = pDevice->uCmdDequeueIdx; @@ -1287,10 +1281,7 @@ BOOL s_bClearBSSID_SCAN ( //mike add:reset command timer -void -vResetCommandTimer( - HANDLE hDeviceContext - ) +void vResetCommandTimer(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1311,10 +1302,7 @@ vResetCommandTimer( //2007-0115-08by MikeLiu #ifdef TxInSleep -void -BSSvSecondTxData( - HANDLE hDeviceContext - ) +void BSSvSecondTxData(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); diff --git a/drivers/staging/vt6656/wcmd.h b/drivers/staging/vt6656/wcmd.h index a14e564..09c4411 100644 --- a/drivers/staging/vt6656/wcmd.h +++ b/drivers/staging/vt6656/wcmd.h @@ -105,33 +105,22 @@ typedef enum tagCMD_STATE { WLAN_CMD_IDLE } CMD_STATE, *PCMD_STATE; - - /*--------------------- Export Classes ----------------------------*/ /*--------------------- Export Variables --------------------------*/ - /*--------------------- Export Types ------------------------------*/ - /*--------------------- Export Functions --------------------------*/ -void -vResetCommandTimer( - HANDLE hDeviceContext - ); -BOOL -bScheduleCommand( - HANDLE hDeviceContext, - CMD_CODE eCommand, - PBYTE pbyItem0 - ); +void vResetCommandTimer(void *hDeviceContext); + +BOOL bScheduleCommand(void *hDeviceContext, + CMD_CODE eCommand, + PBYTE pbyItem0); + +void vRunCommand(void *hDeviceContext); -void -vRunCommand( - HANDLE hDeviceContext - ); /* void WCMDvCommandThread( @@ -141,10 +130,7 @@ WCMDvCommandThread( //2007-0115-09by MikeLiu #ifdef TxInSleep -void -BSSvSecondTxData( - HANDLE hDeviceContext - ); +void BSSvSecondTxData(void *hDeviceContext); #endif #endif /* __WCMD_H__ */ diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index 5af98e9..aaba522 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -329,14 +329,10 @@ s_bCipherMatch ( PKnownBSS pCurr ); - - /*--------------------- Export Variables --------------------------*/ - /*--------------------- Export Functions --------------------------*/ - /*+ * * Routine Description: @@ -347,10 +343,7 @@ s_bCipherMatch ( * -*/ -void -vMgrObjectInit( - HANDLE hDeviceContext - ) +void vMgrObjectInit(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -368,7 +361,7 @@ vMgrObjectInit( pMgmt->byCSSPK = KEY_CTL_NONE; pMgmt->byCSSGK = KEY_CTL_NONE; pMgmt->wIBSSBeaconPeriod = DEFAULT_IBSS_BI; - BSSvClearBSSList((HANDLE)pDevice, FALSE); + BSSvClearBSSList((void *) pDevice, FALSE); init_timer(&pMgmt->sTimerSecondCallback); pMgmt->sTimerSecondCallback.data = (ULONG)pDevice; @@ -401,8 +394,6 @@ vMgrObjectInit( return; } - - /*+ * * Routine Description: @@ -414,13 +405,9 @@ vMgrObjectInit( * -*/ - -void -vMgrAssocBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PCMD_STATUS pStatus - ) +void vMgrAssocBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PCMD_STATUS pStatus) { PSDevice pDevice = (PSDevice)hDeviceContext; PSTxMgmtPacket pTxPacket; @@ -491,12 +478,9 @@ vMgrAssocBeginSta( * -*/ -void -vMgrReAssocBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PCMD_STATUS pStatus - ) +void vMgrReAssocBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PCMD_STATUS pStatus) { PSDevice pDevice = (PSDevice)hDeviceContext; PSTxMgmtPacket pTxPacket; @@ -570,14 +554,11 @@ vMgrReAssocBeginSta( * -*/ -void -vMgrDisassocBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PBYTE abyDestAddress, - WORD wReason, - PCMD_STATUS pStatus - ) +void vMgrDisassocBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, + PCMD_STATUS pStatus) { PSDevice pDevice = (PSDevice)hDeviceContext; PSTxMgmtPacket pTxPacket = NULL; @@ -987,7 +968,10 @@ s_vMgrRxAssocResponse( }; DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Association Successful, AID=%d.\n", pMgmt->wCurrAID & ~(BIT14|BIT15)); pMgmt->eCurrState = WMAC_STATE_ASSOC; - BSSvUpdateAPNode((HANDLE)pDevice, sFrame.pwCapInfo, sFrame.pSuppRates, sFrame.pExtSuppRates); + BSSvUpdateAPNode((void *) pDevice, + sFrame.pwCapInfo, + sFrame.pSuppRates, + sFrame.pExtSuppRates); pItemSSID = (PWLAN_IE_SSID)pMgmt->abyCurrSSID; DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Link with AP(SSID): %s\n", pItemSSID->abySSID); pDevice->bLinkPass = TRUE; @@ -1089,8 +1073,6 @@ if(pMgmt->eCurrState == WMAC_STATE_ASSOC) return; } - - /*+ * * Routine Description: @@ -1102,12 +1084,9 @@ if(pMgmt->eCurrState == WMAC_STATE_ASSOC) * -*/ -void -vMgrAuthenBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PCMD_STATUS pStatus - ) +void vMgrAuthenBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PCMD_STATUS pStatus) { PSDevice pDevice = (PSDevice)hDeviceContext; WLAN_FR_AUTHEN sFrame; @@ -1147,8 +1126,6 @@ vMgrAuthenBeginSta( return ; } - - /*+ * * Routine Description: @@ -1160,14 +1137,11 @@ vMgrAuthenBeginSta( * -*/ -void -vMgrDeAuthenBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PBYTE abyDestAddress, - WORD wReason, - PCMD_STATUS pStatus - ) +void vMgrDeAuthenBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, + PCMD_STATUS pStatus) { PSDevice pDevice = (PSDevice)hDeviceContext; WLAN_FR_DEAUTHEN sFrame; @@ -1405,12 +1379,11 @@ s_vMgrRxAuthenSequence_2( s_vMgrLogStatus(pMgmt, cpu_to_le16((*(pFrame->pwStatus)))); pMgmt->eCurrState = WMAC_STATE_IDLE; } - if (pDevice->eCommandState == WLAN_AUTHENTICATE_WAIT ) { -// spin_unlock_irq(&pDevice->lock); -// vCommandTimerWait((HANDLE)pDevice, 0); -// spin_lock_irq(&pDevice->lock); + if (pDevice->eCommandState == WLAN_AUTHENTICATE_WAIT) { + /* spin_unlock_irq(&pDevice->lock); + vCommandTimerWait((void *) pDevice, 0); + spin_lock_irq(&pDevice->lock); */ } - break; case WLAN_AUTH_ALG_SHAREDKEY: @@ -1453,9 +1426,9 @@ s_vMgrRxAuthenSequence_2( else { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:rx Auth_reply sequence_2 status error ...\n"); if ( pDevice->eCommandState == WLAN_AUTHENTICATE_WAIT ) { -// spin_unlock_irq(&pDevice->lock); -// vCommandTimerWait((HANDLE)pDevice, 0); -// spin_lock_irq(&pDevice->lock); + /* spin_unlock_irq(&pDevice->lock); + vCommandTimerWait((void *) pDevice, 0); + spin_lock_irq(&pDevice->lock); */ } s_vMgrLogStatus(pMgmt, cpu_to_le16((*(pFrame->pwStatus)))); } @@ -1591,11 +1564,10 @@ s_vMgrRxAuthenSequence_4( } if ( pDevice->eCommandState == WLAN_AUTHENTICATE_WAIT ) { -// spin_unlock_irq(&pDevice->lock); -// vCommandTimerWait((HANDLE)pDevice, 0); -// spin_lock_irq(&pDevice->lock); + /* spin_unlock_irq(&pDevice->lock); + vCommandTimerWait((void *) pDevice, 0); + spin_lock_irq(&pDevice->lock); */ } - } /*+ @@ -1913,10 +1885,12 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) sERP.byERP = 0; } - pBSSList = BSSpAddrIsInBSSList((HANDLE)pDevice, sFrame.pHdr->sA3.abyAddr3, sFrame.pSSID); + pBSSList = BSSpAddrIsInBSSList((void *) pDevice, + sFrame.pHdr->sA3.abyAddr3, + sFrame.pSSID); if (pBSSList == NULL) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Beacon/insert: RxChannel = : %d\n", byCurrChannel); - BSSbInsertToBSSList((HANDLE)pDevice, + BSSbInsertToBSSList((void *) pDevice, sFrame.pHdr->sA3.abyAddr3, *sFrame.pqwTimestamp, *sFrame.pwBeaconInterval, @@ -1932,12 +1906,11 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) sFrame.pIE_Quiet, sFrame.len - WLAN_HDR_ADDR3_LEN, sFrame.pHdr->sA4.abyAddr4, // payload of beacon - (HANDLE)pRxPacket - ); + (void *) pRxPacket); } else { // DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"update bcn: RxChannel = : %d\n", byCurrChannel); - BSSbUpdateToBSSList((HANDLE)pDevice, + BSSbUpdateToBSSList((void *) pDevice, *sFrame.pqwTimestamp, *sFrame.pwBeaconInterval, *sFrame.pwCapInfo, @@ -1954,8 +1927,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) pBSSList, sFrame.len - WLAN_HDR_ADDR3_LEN, sFrame.pHdr->sA4.abyAddr4, // payload of probresponse - (HANDLE)pRxPacket - ); + (void *) pRxPacket); } @@ -2324,7 +2296,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) // set highest basic rate // s_vSetHighestBasicRate(pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates); // Prepare beacon frame - bMgrPrepareBeaconToSend((HANDLE)pDevice, pMgmt); + bMgrPrepareBeaconToSend((void *) pDevice, pMgmt); // } }; } @@ -2341,8 +2313,6 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) return; } - - /*+ * * Routine Description: @@ -2355,11 +2325,9 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) * CMD_STATUS * -*/ -void -vMgrCreateOwnIBSS( - HANDLE hDeviceContext, - PCMD_STATUS pStatus - ) + +void vMgrCreateOwnIBSS(void *hDeviceContext, + PCMD_STATUS pStatus) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -2609,13 +2577,11 @@ vMgrCreateOwnIBSS( pMgmt->eCurrState = WMAC_STATE_STARTED; // Prepare beacon to send - if (bMgrPrepareBeaconToSend((HANDLE)pDevice, pMgmt)) { - *pStatus = CMD_STATUS_SUCCESS; - } - return ; -} - + if (bMgrPrepareBeaconToSend((void *) pDevice, pMgmt)) + *pStatus = CMD_STATUS_SUCCESS; + return; +} /*+ * @@ -2630,13 +2596,8 @@ vMgrCreateOwnIBSS( * -*/ -void -vMgrJoinBSSBegin( - HANDLE hDeviceContext, - PCMD_STATUS pStatus - ) +void vMgrJoinBSSBegin(void *hDeviceContext, PCMD_STATUS pStatus) { - PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); PKnownBSS pCurr = NULL; @@ -2782,12 +2743,17 @@ vMgrJoinBSSBegin( // Add current BSS to Candidate list // This should only works for WPA2 BSS, and WPA2 BSS check must be done before. if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2) { - BOOL bResult = bAdd_PMKID_Candidate((HANDLE)pDevice, pMgmt->abyCurrBSSID, &pCurr->sRSNCapObj); + BOOL bResult = bAdd_PMKID_Candidate((void *) pDevice, + pMgmt->abyCurrBSSID, + &pCurr->sRSNCapObj); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"bAdd_PMKID_Candidate: 1(%d)\n", bResult); if (bResult == FALSE) { - vFlush_PMKID_Candidate((HANDLE)pDevice); - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"vFlush_PMKID_Candidate: 4\n"); - bAdd_PMKID_Candidate((HANDLE)pDevice, pMgmt->abyCurrBSSID, &pCurr->sRSNCapObj); + vFlush_PMKID_Candidate((void *) pDevice); + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "vFlush_PMKID_Candidate: 4\n"); + bAdd_PMKID_Candidate((void *) pDevice, + pMgmt->abyCurrBSSID, + &pCurr->sRSNCapObj); } } @@ -2940,7 +2906,7 @@ vMgrJoinBSSBegin( CARDvSetRSPINF(pDevice, (BYTE)pDevice->byBBType); // Prepare beacon - bMgrPrepareBeaconToSend((HANDLE)pDevice, pMgmt); + bMgrPrepareBeaconToSend((void *) pDevice, pMgmt); } else { pMgmt->eCurrState = WMAC_STATE_IDLE; @@ -4299,31 +4265,32 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) // update or insert the bss - pBSSList = BSSpAddrIsInBSSList((HANDLE)pDevice, sFrame.pHdr->sA3.abyAddr3, sFrame.pSSID); + pBSSList = BSSpAddrIsInBSSList((void *) pDevice, + sFrame.pHdr->sA3.abyAddr3, + sFrame.pSSID); if (pBSSList) { - BSSbUpdateToBSSList((HANDLE)pDevice, - *sFrame.pqwTimestamp, - *sFrame.pwBeaconInterval, - *sFrame.pwCapInfo, - byCurrChannel, - bChannelHit, - sFrame.pSSID, - sFrame.pSuppRates, - sFrame.pExtSuppRates, - &sERP, - sFrame.pRSN, - sFrame.pRSNWPA, - sFrame.pIE_Country, - sFrame.pIE_Quiet, - pBSSList, - sFrame.len - WLAN_HDR_ADDR3_LEN, - sFrame.pHdr->sA4.abyAddr4, // payload of probresponse - (HANDLE)pRxPacket - ); - } - else { + BSSbUpdateToBSSList((void *) pDevice, + *sFrame.pqwTimestamp, + *sFrame.pwBeaconInterval, + *sFrame.pwCapInfo, + byCurrChannel, + bChannelHit, + sFrame.pSSID, + sFrame.pSuppRates, + sFrame.pExtSuppRates, + &sERP, + sFrame.pRSN, + sFrame.pRSNWPA, + sFrame.pIE_Country, + sFrame.pIE_Quiet, + pBSSList, + sFrame.len - WLAN_HDR_ADDR3_LEN, + /* payload of probresponse */ + sFrame.pHdr->sA4.abyAddr4, + (void *) pRxPacket); + } else { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Probe resp/insert: RxChannel = : %d\n", byCurrChannel); - BSSbInsertToBSSList((HANDLE)pDevice, + BSSbInsertToBSSList((void *) pDevice, sFrame.pHdr->sA3.abyAddr3, *sFrame.pqwTimestamp, *sFrame.pwBeaconInterval, @@ -4338,9 +4305,8 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) sFrame.pIE_Country, sFrame.pIE_Quiet, sFrame.len - WLAN_HDR_ADDR3_LEN, - sFrame.pHdr->sA4.abyAddr4, // payload of beacon - (HANDLE)pRxPacket - ); + sFrame.pHdr->sA4.abyAddr4, /* payload of beacon */ + (void *) pRxPacket); } return; @@ -4436,10 +4402,6 @@ s_vMgrRxProbeRequest( return; } - - - - /*+ * * Routine Description: @@ -4454,13 +4416,9 @@ s_vMgrRxProbeRequest( * -*/ - -void -vMgrRxManagePacket( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PSRxMgmtPacket pRxPacket - ) +void vMgrRxManagePacket(void *hDeviceContext, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket) { PSDevice pDevice = (PSDevice)hDeviceContext; BOOL bInScan = FALSE; @@ -4593,9 +4551,6 @@ vMgrRxManagePacket( return; } - - - /*+ * * Routine Description: @@ -4607,11 +4562,7 @@ vMgrRxManagePacket( * TRUE if success; FALSE if failed. * -*/ -BOOL -bMgrPrepareBeaconToSend( - HANDLE hDeviceContext, - PSMgmtObject pMgmt - ) +BOOL bMgrPrepareBeaconToSend(void *hDeviceContext, PSMgmtObject pMgmt) { PSDevice pDevice = (PSDevice)hDeviceContext; PSTxMgmtPacket pTxPacket; @@ -4715,7 +4666,6 @@ s_vMgrLogStatus( } } - /* * * Description: @@ -4732,12 +4682,10 @@ s_vMgrLogStatus( * Return Value: none. * -*/ -BOOL -bAdd_PMKID_Candidate ( - HANDLE hDeviceContext, - PBYTE pbyBSSID, - PSRSNCapObject psRSNCapObj - ) + +BOOL bAdd_PMKID_Candidate(void *hDeviceContext, + PBYTE pbyBSSID, + PSRSNCapObject psRSNCapObj) { PSDevice pDevice = (PSDevice)hDeviceContext; PPMKID_CANDIDATE pCandidateList; @@ -4796,10 +4744,8 @@ bAdd_PMKID_Candidate ( * Return Value: none. * -*/ -void -vFlush_PMKID_Candidate ( - HANDLE hDeviceContext - ) + +void vFlush_PMKID_Candidate(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index 0eda12a..ec2ee78 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -400,102 +400,61 @@ typedef struct tagSMgmtObject } SMgmtObject, *PSMgmtObject; - /*--------------------- Export Macros ------------------------------*/ - /*--------------------- Export Functions --------------------------*/ +void vMgrObjectInit(void *hDeviceContext); -void -vMgrObjectInit( - HANDLE hDeviceContext - ); +void vMgrAssocBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PCMD_STATUS pStatus); +void vMgrReAssocBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PCMD_STATUS pStatus); -void -vMgrAssocBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PCMD_STATUS pStatus - ); +void vMgrDisassocBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, + PCMD_STATUS pStatus); -void -vMgrReAssocBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PCMD_STATUS pStatus - ); - -void -vMgrDisassocBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PBYTE abyDestAddress, - WORD wReason, - PCMD_STATUS pStatus - ); - -void -vMgrAuthenBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PCMD_STATUS pStatus - ); +void vMgrAuthenBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PCMD_STATUS pStatus); -void -vMgrCreateOwnIBSS( - HANDLE hDeviceContext, - PCMD_STATUS pStatus - ); +void vMgrCreateOwnIBSS(void *hDeviceContext, + PCMD_STATUS pStatus); -void -vMgrJoinBSSBegin( - HANDLE hDeviceContext, - PCMD_STATUS pStatus - ); +void vMgrJoinBSSBegin(void *hDeviceContext, + PCMD_STATUS pStatus); -void -vMgrRxManagePacket( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PSRxMgmtPacket pRxPacket - ); +void vMgrRxManagePacket(void *hDeviceContext, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket); /* void vMgrScanBegin( - HANDLE hDeviceContext, + void *hDeviceContext, PCMD_STATUS pStatus ); */ -void -vMgrDeAuthenBeginSta( - HANDLE hDeviceContext, - PSMgmtObject pMgmt, - PBYTE abyDestAddress, - WORD wReason, - PCMD_STATUS pStatus - ); - -BOOL -bMgrPrepareBeaconToSend( - HANDLE hDeviceContext, - PSMgmtObject pMgmt - ); +void vMgrDeAuthenBeginSta(void *hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, + PCMD_STATUS pStatus); +BOOL bMgrPrepareBeaconToSend(void *hDeviceContext, + PSMgmtObject pMgmt); -BOOL -bAdd_PMKID_Candidate ( - HANDLE hDeviceContext, - PBYTE pbyBSSID, - PSRSNCapObject psRSNCapObj - ); +BOOL bAdd_PMKID_Candidate(void *hDeviceContext, + PBYTE pbyBSSID, + PSRSNCapObject psRSNCapObj); -void -vFlush_PMKID_Candidate ( - HANDLE hDeviceContext - ); +void vFlush_PMKID_Candidate(void *hDeviceContext); #endif /* __WMGR_H__ */ diff --git a/drivers/staging/vt6656/wpactl.c b/drivers/staging/vt6656/wpactl.c index 25b784c..04a4875e 100644 --- a/drivers/staging/vt6656/wpactl.c +++ b/drivers/staging/vt6656/wpactl.c @@ -489,7 +489,7 @@ static int wpa_set_disassociate(PSDevice pDevice, spin_lock_irq(&pDevice->lock); if (pDevice->bLinkPass) { if (!memcmp(param->addr, pMgmt->abyCurrBSSID, 6)) - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_DISASSOCIATE, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_DISASSOCIATE, NULL); } spin_unlock_irq(&pDevice->lock); @@ -513,7 +513,7 @@ static int wpa_set_disassociate(PSDevice pDevice, */ static int wpa_set_scan(PSDevice pDevice, - struct viawget_wpa_param *param) + struct viawget_wpa_param *param) { int ret = 0; @@ -531,9 +531,11 @@ memcpy(pItemSSID->abySSID, param->u.scan_req.ssid, param->u.scan_req.ssid_len); pItemSSID->len = param->u.scan_req.ssid_len; spin_lock_irq(&pDevice->lock); - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); - // bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); + BSSvClearBSSList((void *) pDevice, pDevice->bLinkPass); + /* bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); */ + bScheduleCommand((void *) pDevice, + WLAN_CMD_BSSID_SCAN, + pMgmt->abyDesireSSID); spin_unlock_irq(&pDevice->lock); return ret; @@ -886,12 +888,14 @@ static int wpa_set_associate(PSDevice pDevice, if (pCurr == NULL){ printk("wpa_set_associate---->hidden mode site survey before associate.......\n"); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, + WLAN_CMD_BSSID_SCAN, + pMgmt->abyDesireSSID); }; } /****************************************************************/ - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, NULL); spin_unlock_irq(&pDevice->lock); return ret; -- cgit v0.10.2 From 717f4a5f55e307b3ba2b1a8c05428bb5dd35047e Mon Sep 17 00:00:00 2001 From: Marin Mitov Date: Fri, 7 May 2010 11:00:35 +0300 Subject: staging: dt3155v4l syncronize with API changes dt3155v4l driver, as in -rc6-next-20100506 compiles, but will not run properly due to recent changes in the videobuf APIs. This patch synchronizes some functions that have been copied from drivers/media/video/videobuf-dma-contig.c (and modified) with the recent (-rc6 -> -rc6-next-) changes in videobuf layer especially drivers/media/video/videobuf-dma-contig.c Signed-off-by: Marin Mitov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155v4l/dt3155v4l.c b/drivers/staging/dt3155v4l/dt3155v4l.c index 881c3e9..b1695ad 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.c +++ b/drivers/staging/dt3155v4l/dt3155v4l.c @@ -1,3 +1,23 @@ +/*************************************************************************** + * Copyright (C) 2006-2010 by Marin Mitov * + * mitov@issp.bas.bg * + * * + * 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. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + ***************************************************************************/ + #include #include #include @@ -260,9 +280,11 @@ dt3155_dma_contig_user_get(struct videobuf_dma_contig_memory *mem, struct vm_area_struct *vma; unsigned long prev_pfn, this_pfn; unsigned long pages_done, user_address; + unsigned int offset; int ret; - mem->size = PAGE_ALIGN(vb->size); + offset = vb->baddr & ~PAGE_MASK; + mem->size = PAGE_ALIGN(vb->size + offset); mem->is_userptr = 0; ret = -EINVAL; @@ -285,7 +307,7 @@ dt3155_dma_contig_user_get(struct videobuf_dma_contig_memory *mem, break; if (pages_done == 0) - mem->dma_handle = this_pfn << PAGE_SHIFT; + mem->dma_handle = (this_pfn << PAGE_SHIFT) + offset; else if (this_pfn != (prev_pfn + 1)) ret = -EFAULT; @@ -416,14 +438,14 @@ dt3155_vm_close(struct vm_area_struct *vma) struct videobuf_queue *q = map->q; int i; - dev_dbg(map->q->dev, "vm_close %p [count=%u,vma=%08lx-%08lx]\n", + dev_dbg(q->dev, "vm_close %p [count=%u,vma=%08lx-%08lx]\n", map, map->count, vma->vm_start, vma->vm_end); map->count--; if (0 == map->count) { struct videobuf_dma_contig_memory *mem; - dev_dbg(map->q->dev, "munmap %p q=%p\n", map, q); + dev_dbg(q->dev, "munmap %p q=%p\n", map, q); mutex_lock(&q->vb_lock); /* We need first to cancel streams, before unmapping */ @@ -450,7 +472,7 @@ dt3155_vm_close(struct vm_area_struct *vma) /* vfree is not atomic - can't be called with IRQ's disabled */ - dev_dbg(map->q->dev, "buf[%d] freeing %p\n", + dev_dbg(q->dev, "buf[%d] freeing %p\n", i, mem->vaddr); dt3155_free_buffer(q->dev, mem->size, @@ -475,51 +497,33 @@ static const struct vm_operations_struct dt3155_vm_ops = { /* same as videobuf_mmap_mapper(), but allocates from the pool */ static int -dt3155_mmap_mapper(struct videobuf_queue *q, struct vm_area_struct *vma) +dt3155_mmap_mapper(struct videobuf_queue *q, struct videobuf_buffer *buf, + struct vm_area_struct *vma) { struct videobuf_dma_contig_memory *mem; struct videobuf_mapping *map; - unsigned int first; int retval; - unsigned long size, offset = vma->vm_pgoff << PAGE_SHIFT; + unsigned long size; dev_dbg(q->dev, "%s\n", __func__); - if (!(vma->vm_flags & VM_WRITE) || !(vma->vm_flags & VM_SHARED)) - return -EINVAL; - - /* look for first buffer to map */ - for (first = 0; first < VIDEO_MAX_FRAME; first++) { - if (!q->bufs[first]) - continue; - - if (V4L2_MEMORY_MMAP != q->bufs[first]->memory) - continue; - if (q->bufs[first]->boff == offset) - break; - } - if (VIDEO_MAX_FRAME == first) { - dev_dbg(q->dev, "invalid user space offset [offset=0x%lx]\n", - offset); - return -EINVAL; - } /* create mapping + update buffer list */ map = kzalloc(sizeof(struct videobuf_mapping), GFP_KERNEL); if (!map) return -ENOMEM; - q->bufs[first]->map = map; + buf->map = map; map->start = vma->vm_start; map->end = vma->vm_end; map->q = q; - q->bufs[first]->baddr = vma->vm_start; + buf->baddr = vma->vm_start; - mem = q->bufs[first]->priv; + mem = buf->priv; BUG_ON(!mem); MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); - mem->size = PAGE_ALIGN(q->bufs[first]->bsize); + mem->size = PAGE_ALIGN(buf->bsize); mem->vaddr = dt3155_alloc_buffer(q->dev, mem->size, &mem->dma_handle, GFP_KERNEL); if (!mem->vaddr) { @@ -552,8 +556,8 @@ dt3155_mmap_mapper(struct videobuf_queue *q, struct vm_area_struct *vma) dev_dbg(q->dev, "mmap %p: q=%p %08lx-%08lx (%lx) pgoff %08lx buf %d\n", map, q, vma->vm_start, vma->vm_end, - (long int) q->bufs[first]->bsize, - vma->vm_pgoff, first); + (long int)buf->bsize, + vma->vm_pgoff, buf->i); dt3155_vm_open(vma); -- cgit v0.10.2 From f9bd64952037d0f58eeffa07e30da1fff4c39b8f Mon Sep 17 00:00:00 2001 From: Christos Tzoumakis Date: Fri, 7 May 2010 06:17:24 +0300 Subject: Staging: wlan-ng : fixing coding style issues in prism2sta.c Signed-off-by: Christos Tzoumakis Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/prism2sta.c b/drivers/staging/wlan-ng/prism2sta.c index 31ac8da..6cd0935 100644 --- a/drivers/staging/wlan-ng/prism2sta.c +++ b/drivers/staging/wlan-ng/prism2sta.c @@ -426,7 +426,7 @@ static int prism2sta_mlmerequest(wlandevice_t *wlandev, p80211msg_t *msg) * msgp ptr to msg buffer * * Returns: -* A p80211 message resultcode value. +* A p80211 message resultcode value. * * Side effects: * @@ -458,7 +458,7 @@ u32 prism2sta_ifstate(wlandevice_t *wlandev, u32 ifstate) "hfa384x_drvr_start() failed," "result=%d\n", (int)result); result = - P80211ENUM_resultcode_implementation_failure; + P80211ENUM_resultcode_implementation_failure; wlandev->msdstate = WLAN_MSD_HWPRESENT; break; } @@ -503,7 +503,7 @@ u32 prism2sta_ifstate(wlandevice_t *wlandev, u32 ifstate) "hfa384x_drvr_start() failed," "result=%d\n", (int)result); result = - P80211ENUM_resultcode_implementation_failure; + P80211ENUM_resultcode_implementation_failure; wlandev->msdstate = WLAN_MSD_HWPRESENT; break; } @@ -514,7 +514,7 @@ u32 prism2sta_ifstate(wlandevice_t *wlandev, u32 ifstate) "prism2sta_getcardinfo() failed," "result=%d\n", (int)result); result = - P80211ENUM_resultcode_implementation_failure; + P80211ENUM_resultcode_implementation_failure; hfa384x_drvr_stop(hw); wlandev->msdstate = WLAN_MSD_HWPRESENT; break; @@ -525,7 +525,7 @@ u32 prism2sta_ifstate(wlandevice_t *wlandev, u32 ifstate) "prism2sta_globalsetup() failed," "result=%d\n", (int)result); result = - P80211ENUM_resultcode_implementation_failure; + P80211ENUM_resultcode_implementation_failure; hfa384x_drvr_stop(hw); wlandev->msdstate = WLAN_MSD_HWPRESENT; break; @@ -1178,8 +1178,8 @@ static void prism2sta_inf_chinforesults(wlandevice_t *wlandev, chinforesult->active = le16_to_cpu(inf->info.chinforesult.result[n]. active); - pr_debug - ("chinfo: channel %d, %s level (avg/peak)=%d/%d dB, pcf %d\n", + pr_debug + ("chinfo: channel %d, %s level (avg/peak)=%d/%d dB, pcf %d\n", channel + 1, chinforesult-> active & HFA384x_CHINFORESULT_BSSACTIVE ? "signal" @@ -1246,7 +1246,9 @@ void prism2sta_processing_defer(struct work_struct *data) netif_carrier_on(wlandev->netdev); - /* If we are joining a specific AP, set our state and reset retries */ + /* If we are joining a specific AP, set our + * state and reset retries + */ if (hw->join_ap == 1) hw->join_ap = 2; hw->join_retries = 60; @@ -1261,9 +1263,9 @@ void prism2sta_processing_defer(struct work_struct *data) /* Collect the BSSID, and set state to allow tx */ result = hfa384x_drvr_getconfig(hw, - HFA384x_RID_CURRENTBSSID, - wlandev->bssid, - WLAN_BSSID_LEN); + HFA384x_RID_CURRENTBSSID, + wlandev->bssid, + WLAN_BSSID_LEN); if (result) { pr_debug ("getconfig(0x%02x) failed, result = %d\n", @@ -1286,8 +1288,8 @@ void prism2sta_processing_defer(struct work_struct *data) /* Collect the port status */ result = hfa384x_drvr_getconfig16(hw, - HFA384x_RID_PORTSTATUS, - &portstatus); + HFA384x_RID_PORTSTATUS, + &portstatus); if (result) { pr_debug ("getconfig(0x%02x) failed, result = %d\n", @@ -1322,7 +1324,7 @@ void prism2sta_processing_defer(struct work_struct *data) &joinreq, HFA384x_RID_JOINREQUEST_LEN); printk(KERN_INFO - "linkstatus=DISCONNECTED (re-submitting join)\n"); + "linkstatus=DISCONNECTED (re-submitting join)\n"); } else { if (wlandev->netdev->type == ARPHRD_ETHER) printk(KERN_INFO @@ -1509,14 +1511,15 @@ static void prism2sta_inf_assocstatus(wlandevice_t *wlandev, rec.reason = le16_to_cpu(rec.reason); /* - ** Find the address in the list of authenticated stations. If it wasn't - ** found, then this address has not been previously authenticated and - ** something weird has happened if this is anything other than an - ** "authentication failed" message. If the address was found, then - ** set the "associated" flag for that station, based on whether the - ** station is associating or losing its association. Something weird - ** has also happened if we find the address in the list of authenticated - ** stations but we are getting an "authentication failed" message. + ** Find the address in the list of authenticated stations. + ** If it wasn't found, then this address has not been previously + ** authenticated and something weird has happened if this is + ** anything other than an "authentication failed" message. + ** If the address was found, then set the "associated" flag for + ** that station, based on whether the station is associating or + ** losing its association. Something weird has also happened + ** if we find the address in the list of authenticated stations + ** but we are getting an "authentication failed" message. */ for (i = 0; i < hw->authlist.cnt; i++) @@ -1526,7 +1529,7 @@ static void prism2sta_inf_assocstatus(wlandevice_t *wlandev, if (i >= hw->authlist.cnt) { if (rec.assocstatus != HFA384x_ASSOCSTATUS_AUTHFAIL) printk(KERN_WARNING - "assocstatus info frame received for non-authenticated station.\n"); + "assocstatus info frame received for non-authenticated station.\n"); } else { hw->authlist.assoc[i] = (rec.assocstatus == HFA384x_ASSOCSTATUS_STAASSOC || @@ -1534,7 +1537,7 @@ static void prism2sta_inf_assocstatus(wlandevice_t *wlandev, if (rec.assocstatus == HFA384x_ASSOCSTATUS_AUTHFAIL) printk(KERN_WARNING - "authfail assocstatus info frame received for authenticated station.\n"); +"authfail assocstatus info frame received for authenticated station.\n"); } return; @@ -1681,12 +1684,12 @@ static void prism2sta_inf_authreq_defer(wlandevice_t *wlandev, } /* - ** If the authentication is okay, then add the MAC address to the list - ** of authenticated stations. Don't add the address if it is already in - ** the list. (802.11b does not seem to disallow a station from issuing - ** an authentication request when the station is already authenticated. - ** Does this sort of thing ever happen? We might as well do the check - ** just in case.) + ** If the authentication is okay, then add the MAC address to the + ** list of authenticated stations. Don't add the address if it + ** is already in the list. (802.11b does not seem to disallow + ** a station from issuing an authentication request when the + ** station is already authenticated. Does this sort of thing + ** ever happen? We might as well do the check just in case.) */ added = 0; @@ -1931,7 +1934,7 @@ void prism2sta_ev_alloc(wlandevice_t *wlandev) * the created wlandevice_t structure. * * Side effects: -* also allocates the priv/hw structures. +* also allocates the priv/hw structures. * * Call context: * process thread @@ -1995,9 +1998,9 @@ void prism2sta_commsqual_defer(struct work_struct *data) /* It only makes sense to poll these in non-IBSS */ if (wlandev->macmode != WLAN_MACMODE_IBSS_STA) { - result = hfa384x_drvr_getconfig(hw, HFA384x_RID_DBMCOMMSQUALITY, - &hw->qual, - HFA384x_RID_DBMCOMMSQUALITY_LEN); + result = hfa384x_drvr_getconfig( + hw, HFA384x_RID_DBMCOMMSQUALITY, + &hw->qual, HFA384x_RID_DBMCOMMSQUALITY_LEN); if (result) { printk(KERN_ERR "error fetching commsqual\n"); -- cgit v0.10.2 From 85798ec85ec6146bff3af886c06d72cc66940a05 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Fri, 7 May 2010 15:38:54 +0100 Subject: staging: iio: Documentation fixes Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/Documentation/sysfs-class-iio b/drivers/staging/iio/Documentation/sysfs-class-iio index 7238582..ff19f6e 100644 --- a/drivers/staging/iio/Documentation/sysfs-class-iio +++ b/drivers/staging/iio/Documentation/sysfs-class-iio @@ -66,7 +66,7 @@ KernelVersion: 2.6.35 Contact: linux-iio@vger.kernel.org Description: If known for a device, offset to be added to in[m]_raw prior - to scaling by volt[m]_scale in order to obtain voltage in + to scaling by in[_name][m]_scale in order to obtain voltage in millivolts. Not present if the offset is always 0 or unknown. If m is not present, then voltage offset applies to all in channels. May be writable if a variable offset is controlled @@ -111,8 +111,8 @@ KernelVersion: 2.6.35 Contact: linux-iio@vger.kernel.org Description: If known for a device, scale to be applied to volt[m]_raw post - addition of volt[m]_offset in order to obtain the measured voltage - in millivolts. If shared across all in channels then m is not present. + addition of in[_name][m]_offset in order to obtain the measured + voltage in millivolts. If shared across all in channels then m is not present. What: /sys/.../device[n]/in[m]-in[o]_raw KernelVersion: 2.6.35 -- cgit v0.10.2 From a1169c5a0bfec75730a080a5f5d668e65144d1d1 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Fri, 7 May 2010 15:38:55 +0100 Subject: staging: iio: Break up gyro.h and move to new abi Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/accel/inclinometer.h b/drivers/staging/iio/accel/inclinometer.h new file mode 100644 index 0000000..5b49f83 --- /dev/null +++ b/drivers/staging/iio/accel/inclinometer.h @@ -0,0 +1,23 @@ +/* + * Inclinometer related attributes + */ +#include "../sysfs.h" + +#define IIO_DEV_ATTR_INCLI_X(_show, _addr) \ + IIO_DEVICE_ATTR(incli_x_raw, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_INCLI_Y(_show, _addr) \ + IIO_DEVICE_ATTR(incli_y_raw, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_INCLI_Z(_show, _addr) \ + IIO_DEVICE_ATTR(incli_z_raw, S_IRUGO, _show, NULL, _addr) + +#define IIO_DEV_ATTR_INCLI_X_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(incli_x_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_INCLI_Y_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(incli_y_offset, _mode, _show, _store, _addr) + +#define IIO_DEV_ATTR_INCLI_Z_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(incli_z_offset, _mode, _show, _store, _addr) + diff --git a/drivers/staging/iio/gyro/gyro.h b/drivers/staging/iio/gyro/gyro.h index 7c4dcf2..16f6ffa 100644 --- a/drivers/staging/iio/gyro/gyro.h +++ b/drivers/staging/iio/gyro/gyro.h @@ -28,49 +28,14 @@ IIO_DEVICE_ATTR(gyro_scale, S_IRUGO, _show, _store, _addr) #define IIO_DEV_ATTR_GYRO(_show, _addr) \ - IIO_DEVICE_ATTR(gyro, S_IRUGO, _show, NULL, _addr) + IIO_DEVICE_ATTR(gyro_raw, S_IRUGO, _show, NULL, _addr) #define IIO_DEV_ATTR_GYRO_X(_show, _addr) \ - IIO_DEVICE_ATTR(gyro_x, S_IRUGO, _show, NULL, _addr) + IIO_DEVICE_ATTR(gyro_x_raw, S_IRUGO, _show, NULL, _addr) #define IIO_DEV_ATTR_GYRO_Y(_show, _addr) \ - IIO_DEVICE_ATTR(gyro_y, S_IRUGO, _show, NULL, _addr) + IIO_DEVICE_ATTR(gyro_y_raw, S_IRUGO, _show, NULL, _addr) #define IIO_DEV_ATTR_GYRO_Z(_show, _addr) \ - IIO_DEVICE_ATTR(gyro_z, S_IRUGO, _show, NULL, _addr) + IIO_DEVICE_ATTR(gyro_z_raw, S_IRUGO, _show, NULL, _addr) -#define IIO_DEV_ATTR_TEMP_X(_show, _addr) \ - IIO_DEVICE_ATTR(temp_x, S_IRUGO, _show, NULL, _addr) - -#define IIO_DEV_ATTR_TEMP_Y(_show, _addr) \ - IIO_DEVICE_ATTR(temp_y, S_IRUGO, _show, NULL, _addr) - -#define IIO_DEV_ATTR_TEMP_Z(_show, _addr) \ - IIO_DEVICE_ATTR(temp_z, S_IRUGO, _show, NULL, _addr) - -#define IIO_DEV_ATTR_INCLI_X(_show, _addr) \ - IIO_DEVICE_ATTR(incli_x, S_IRUGO, _show, NULL, _addr) - -#define IIO_DEV_ATTR_INCLI_Y(_show, _addr) \ - IIO_DEVICE_ATTR(incli_y, S_IRUGO, _show, NULL, _addr) - -#define IIO_DEV_ATTR_INCLI_Z(_show, _addr) \ - IIO_DEVICE_ATTR(incli_z, S_IRUGO, _show, NULL, _addr) - -#define IIO_DEV_ATTR_INCLI_X_OFFSET(_mode, _show, _store, _addr) \ - IIO_DEVICE_ATTR(incli_x_offset, _mode, _show, _store, _addr) - -#define IIO_DEV_ATTR_INCLI_Y_OFFSET(_mode, _show, _store, _addr) \ - IIO_DEVICE_ATTR(incli_y_offset, _mode, _show, _store, _addr) - -#define IIO_DEV_ATTR_INCLI_Z_OFFSET(_mode, _show, _store, _addr) \ - IIO_DEVICE_ATTR(incli_z_offset, _mode, _show, _store, _addr) - -#define IIO_DEV_ATTR_ROT(_show, _addr) \ - IIO_DEVICE_ATTR(rot, S_IRUGO, _show, NULL, _addr) - -#define IIO_DEV_ATTR_ROT_OFFSET(_mode, _show, _store, _addr) \ - IIO_DEVICE_ATTR(rot_offset, _mode, _show, _store, _addr) - -#define IIO_DEV_ATTR_ANGL(_show, _addr) \ - IIO_DEVICE_ATTR(angl, S_IRUGO, _show, NULL, _addr) diff --git a/drivers/staging/iio/imu/adis16300_core.c b/drivers/staging/iio/imu/adis16300_core.c index 9f5f8cb..b923ecc 100644 --- a/drivers/staging/iio/imu/adis16300_core.c +++ b/drivers/staging/iio/imu/adis16300_core.c @@ -21,6 +21,7 @@ #include "../iio.h" #include "../sysfs.h" #include "../accel/accel.h" +#include "../accel/inclinometer.h" #include "../gyro/gyro.h" #include "../adc/adc.h" @@ -613,7 +614,7 @@ static IIO_DEV_ATTR_INCLI_Y(adis16300_read_13bit_signed, ADIS16300_YINCLI_OUT); static IIO_CONST_ATTR(incli_scale, "0.044 d"); -static IIO_DEV_ATTR_TEMP(adis16300_read_12bit_signed); +static IIO_DEV_ATTR_TEMP_RAW(adis16300_read_12bit_signed); static IIO_CONST_ATTR(temp_offset, "198.16 K"); static IIO_CONST_ATTR(temp_scale, "0.14 K"); @@ -645,16 +646,16 @@ static struct attribute *adis16300_attributes[] = { &iio_dev_attr_accel_z_offset.dev_attr.attr, &iio_dev_attr_in_supply_raw.dev_attr.attr, &iio_const_attr_in_supply_scale.dev_attr.attr, - &iio_dev_attr_gyro_x.dev_attr.attr, + &iio_dev_attr_gyro_x_raw.dev_attr.attr, &iio_const_attr_gyro_scale.dev_attr.attr, &iio_dev_attr_accel_x_raw.dev_attr.attr, &iio_dev_attr_accel_y_raw.dev_attr.attr, &iio_dev_attr_accel_z_raw.dev_attr.attr, &iio_const_attr_accel_scale.dev_attr.attr, - &iio_dev_attr_incli_x.dev_attr.attr, - &iio_dev_attr_incli_y.dev_attr.attr, + &iio_dev_attr_incli_x_raw.dev_attr.attr, + &iio_dev_attr_incli_y_raw.dev_attr.attr, &iio_const_attr_incli_scale.dev_attr.attr, - &iio_dev_attr_temp.dev_attr.attr, + &iio_dev_attr_temp_raw.dev_attr.attr, &iio_const_attr_temp_offset.dev_attr.attr, &iio_const_attr_temp_scale.dev_attr.attr, &iio_dev_attr_in0_raw.dev_attr.attr, diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c index 27e4a73..868c526 100644 --- a/drivers/staging/iio/imu/adis16400_core.c +++ b/drivers/staging/iio/imu/adis16400_core.c @@ -626,7 +626,7 @@ static IIO_DEV_ATTR_MAGN_Z(adis16400_read_14bit_signed, static IIO_CONST_ATTR(magn_scale, "0.0005 Gs"); -static IIO_DEV_ATTR_TEMP(adis16400_read_12bit_signed); +static IIO_DEV_ATTR_TEMP_RAW(adis16400_read_12bit_signed); static IIO_CONST_ATTR(temp_offset, "198.16 K"); static IIO_CONST_ATTR(temp_scale, "0.14 K"); @@ -658,19 +658,19 @@ static struct attribute *adis16400_attributes[] = { &iio_dev_attr_accel_z_offset.dev_attr.attr, &iio_dev_attr_in_supply_raw.dev_attr.attr, &iio_const_attr_in_supply_scale.dev_attr.attr, - &iio_dev_attr_gyro_x.dev_attr.attr, - &iio_dev_attr_gyro_y.dev_attr.attr, - &iio_dev_attr_gyro_z.dev_attr.attr, + &iio_dev_attr_gyro_x_raw.dev_attr.attr, + &iio_dev_attr_gyro_y_raw.dev_attr.attr, + &iio_dev_attr_gyro_z_raw.dev_attr.attr, &iio_const_attr_gyro_scale.dev_attr.attr, &iio_dev_attr_accel_x_raw.dev_attr.attr, &iio_dev_attr_accel_y_raw.dev_attr.attr, &iio_dev_attr_accel_z_raw.dev_attr.attr, &iio_const_attr_accel_scale.dev_attr.attr, - &iio_dev_attr_magn_x.dev_attr.attr, - &iio_dev_attr_magn_y.dev_attr.attr, - &iio_dev_attr_magn_z.dev_attr.attr, + &iio_dev_attr_magn_x_raw.dev_attr.attr, + &iio_dev_attr_magn_y_raw.dev_attr.attr, + &iio_dev_attr_magn_z_raw.dev_attr.attr, &iio_const_attr_magn_scale.dev_attr.attr, - &iio_dev_attr_temp.dev_attr.attr, + &iio_dev_attr_temp_raw.dev_attr.attr, &iio_const_attr_temp_offset.dev_attr.attr, &iio_const_attr_temp_scale.dev_attr.attr, &iio_dev_attr_in0_raw.dev_attr.attr, diff --git a/drivers/staging/iio/magnetometer/magnet.h b/drivers/staging/iio/magnetometer/magnet.h index 6f6c6ed..6433830 100644 --- a/drivers/staging/iio/magnetometer/magnet.h +++ b/drivers/staging/iio/magnetometer/magnet.h @@ -21,11 +21,11 @@ #define IIO_DEV_ATTR_MAGN_Z_GAIN(_mode, _show, _store, _addr) \ IIO_DEVICE_ATTR(magn_z_gain, _mode, _show, _store, _addr) -#define IIO_DEV_ATTR_MAGN_X(_show, _addr) \ - IIO_DEVICE_ATTR(magn_x, S_IRUGO, _show, NULL, _addr) +#define IIO_DEV_ATTR_MAGN_X(_show, _addr) \ + IIO_DEVICE_ATTR(magn_x_raw, S_IRUGO, _show, NULL, _addr) -#define IIO_DEV_ATTR_MAGN_Y(_show, _addr) \ - IIO_DEVICE_ATTR(magn_y, S_IRUGO, _show, NULL, _addr) +#define IIO_DEV_ATTR_MAGN_Y(_show, _addr) \ + IIO_DEVICE_ATTR(magn_y_raw, S_IRUGO, _show, NULL, _addr) -#define IIO_DEV_ATTR_MAGN_Z(_show, _addr) \ - IIO_DEVICE_ATTR(magn_z, S_IRUGO, _show, NULL, _addr) +#define IIO_DEV_ATTR_MAGN_Z(_show, _addr) \ + IIO_DEVICE_ATTR(magn_z_raw, S_IRUGO, _show, NULL, _addr) -- cgit v0.10.2 From 4da54d93abe7bdad6880e27270ad50b6303898b6 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Fri, 7 May 2010 15:38:56 +0100 Subject: staging: iio: adis16300 clean out some unused code Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/imu/adis16300.h b/drivers/staging/iio/imu/adis16300.h index 77d890d..1c7ea5c 100644 --- a/drivers/staging/iio/imu/adis16300.h +++ b/drivers/staging/iio/imu/adis16300.h @@ -115,21 +115,12 @@ struct adis16300_state { struct mutex buf_lock; }; -int adis16300_spi_write_reg_8(struct device *dev, - u8 reg_address, - u8 val); - int adis16300_spi_read_burst(struct device *dev, u8 *rx); -int adis16300_spi_read_sequence(struct device *dev, - u8 *tx, u8 *rx, int num); - int adis16300_set_irq(struct device *dev, bool enable); int adis16300_reset(struct device *dev); -int adis16300_stop_device(struct device *dev); - int adis16300_check_status(struct device *dev); #ifdef CONFIG_IIO_RING_BUFFER diff --git a/drivers/staging/iio/imu/adis16300_core.c b/drivers/staging/iio/imu/adis16300_core.c index b923ecc..5a7e5ef 100644 --- a/drivers/staging/iio/imu/adis16300_core.c +++ b/drivers/staging/iio/imu/adis16300_core.c @@ -40,7 +40,7 @@ * @reg_address: the address of the register to be written * @val: the value to write **/ -int adis16300_spi_write_reg_8(struct device *dev, +static int adis16300_spi_write_reg_8(struct device *dev, u8 reg_address, u8 val) { @@ -202,55 +202,6 @@ int adis16300_spi_read_burst(struct device *dev, u8 *rx) return ret; } -/** - * adis16300_spi_read_sequence() - read a sequence of 16-bit registers - * @dev: device associated with child of actual device (iio_dev or iio_trig) - * @tx: register addresses in bytes 0,2,4,6... (min size is 2*num bytes) - * @rx: somewhere to pass back the value read (min size is 2*num bytes) - **/ -int adis16300_spi_read_sequence(struct device *dev, - u8 *tx, u8 *rx, int num) -{ - struct spi_message msg; - struct spi_transfer *xfers; - struct iio_dev *indio_dev = dev_get_drvdata(dev); - struct adis16300_state *st = iio_dev_get_devdata(indio_dev); - int ret, i; - - xfers = kzalloc(num + 1, GFP_KERNEL); - if (xfers == NULL) { - dev_err(&st->us->dev, "memory alloc failed"); - ret = -ENOMEM; - goto error_ret; - } - - /* tx: |add1|addr2|addr3|...|addrN |zero| - * rx: |zero|res1 |res2 |...|resN-1|resN| */ - spi_message_init(&msg); - for (i = 0; i < num + 1; i++) { - if (i > 0) - xfers[i].rx_buf = st->rx + 2*(i - 1); - if (i < num) - xfers[i].tx_buf = st->tx + 2*i; - xfers[i].bits_per_word = 8; - xfers[i].len = 2; - xfers[i].cs_change = 1; - spi_message_add_tail(&xfers[i], &msg); - } - - mutex_lock(&st->buf_lock); - - ret = spi_sync(st->us, &msg); - if (ret) - dev_err(&st->us->dev, "problem when reading sequence"); - - mutex_unlock(&st->buf_lock); - kfree(xfers); - -error_ret: - return ret; -} - static ssize_t adis16300_spi_read_signed(struct device *dev, struct device_attribute *attr, char *buf, @@ -458,7 +409,7 @@ int adis16300_reset(struct device *dev) } /* Power down the device */ -int adis16300_stop_device(struct device *dev) +static int adis16300_stop_device(struct device *dev) { int ret; u16 val = ADIS16300_SLP_CNT_POWER_OFF; @@ -470,23 +421,6 @@ int adis16300_stop_device(struct device *dev) return ret; } -int adis16300_self_test(struct device *dev) -{ - int ret; - ret = adis16300_spi_write_reg_16(dev, - ADIS16300_MSC_CTRL, - ADIS16300_MSC_CTRL_MEM_TEST); - if (ret) { - dev_err(dev, "problem starting self test"); - goto err_ret; - } - - adis16300_check_status(dev); - -err_ret: - return ret; -} - int adis16300_check_status(struct device *dev) { u16 status; -- cgit v0.10.2 From e5107fb87018c8fc6b7376c4669dc877ab65db47 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Fri, 7 May 2010 15:38:57 +0100 Subject: staging: iio: Documentation update to add incli and switch to magn Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/Documentation/sysfs-class-iio b/drivers/staging/iio/Documentation/sysfs-class-iio index ff19f6e..714b4c5 100644 --- a/drivers/staging/iio/Documentation/sysfs-class-iio +++ b/drivers/staging/iio/Documentation/sysfs-class-iio @@ -143,7 +143,16 @@ Description: Data converted by application of offset then scale to radians per second. Has all the equivalent parameters as per in[m]. -What: /sys/.../device[n]/mag[_x|_y|_z][m]_raw +What: /sys/.../device[n]/incli[_x|_y|_z][m]_raw +KernelVersion: 2.6.35 +Contact: linux-iio@vger.kernel.org +Description: + Inclination raw reading about axis x, y or z (may be arbitarily + assigned) channel m (not present if only one inclinometer at + this orientation). Data converted by application of offset + and scale to Degrees. + +What: /sys/.../device[n]/magn[_x|_y|_z][m]_raw KernelVersion: 2.6.35 Contact: linux-iio@vger.kernel.org Description: -- cgit v0.10.2 From b155498b1842090f2cf5164908deaa0762a9a8b1 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Fri, 7 May 2010 15:38:58 +0100 Subject: staging: iio: adis16400 clean out some unused code Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/imu/adis16400.h b/drivers/staging/iio/imu/adis16400.h index a8062f6..5a69a7a 100644 --- a/drivers/staging/iio/imu/adis16400.h +++ b/drivers/staging/iio/imu/adis16400.h @@ -147,21 +147,12 @@ struct adis16400_state { struct mutex buf_lock; }; -int adis16400_spi_write_reg_8(struct device *dev, - u8 reg_address, - u8 val); - int adis16400_spi_read_burst(struct device *dev, u8 *rx); -int adis16400_spi_read_sequence(struct device *dev, - u8 *tx, u8 *rx, int num); - int adis16400_set_irq(struct device *dev, bool enable); int adis16400_reset(struct device *dev); -int adis16400_stop_device(struct device *dev); - int adis16400_check_status(struct device *dev); #ifdef CONFIG_IIO_RING_BUFFER diff --git a/drivers/staging/iio/imu/adis16400_core.c b/drivers/staging/iio/imu/adis16400_core.c index 868c526..e69e2ce 100644 --- a/drivers/staging/iio/imu/adis16400_core.c +++ b/drivers/staging/iio/imu/adis16400_core.c @@ -47,7 +47,7 @@ * @reg_address: the address of the register to be written * @val: the value to write **/ -int adis16400_spi_write_reg_8(struct device *dev, +static int adis16400_spi_write_reg_8(struct device *dev, u8 reg_address, u8 val) { @@ -209,55 +209,6 @@ int adis16400_spi_read_burst(struct device *dev, u8 *rx) return ret; } -/** - * adis16400_spi_read_sequence() - read a sequence of 16-bit registers - * @dev: device associated with child of actual device (iio_dev or iio_trig) - * @tx: register addresses in bytes 0,2,4,6... (min size is 2*num bytes) - * @rx: somewhere to pass back the value read (min size is 2*num bytes) - **/ -int adis16400_spi_read_sequence(struct device *dev, - u8 *tx, u8 *rx, int num) -{ - struct spi_message msg; - struct spi_transfer *xfers; - struct iio_dev *indio_dev = dev_get_drvdata(dev); - struct adis16400_state *st = iio_dev_get_devdata(indio_dev); - int ret, i; - - xfers = kzalloc(num + 1, GFP_KERNEL); - if (xfers == NULL) { - dev_err(&st->us->dev, "memory alloc failed"); - ret = -ENOMEM; - goto error_ret; - } - - /* tx: |add1|addr2|addr3|...|addrN |zero| - * rx: |zero|res1 |res2 |...|resN-1|resN| */ - spi_message_init(&msg); - for (i = 0; i < num + 1; i++) { - if (i > 0) - xfers[i].rx_buf = st->rx + 2*(i - 1); - if (i < num) - xfers[i].tx_buf = st->tx + 2*i; - xfers[i].bits_per_word = 8; - xfers[i].len = 2; - xfers[i].cs_change = 1; - spi_message_add_tail(&xfers[i], &msg); - } - - mutex_lock(&st->buf_lock); - - ret = spi_sync(st->us, &msg); - if (ret) - dev_err(&st->us->dev, "problem when reading sequence"); - - mutex_unlock(&st->buf_lock); - kfree(xfers); - -error_ret: - return ret; -} - static ssize_t adis16400_spi_read_signed(struct device *dev, struct device_attribute *attr, char *buf, @@ -450,7 +401,7 @@ int adis16400_reset(struct device *dev) } /* Power down the device */ -int adis16400_stop_device(struct device *dev) +static int adis16400_stop_device(struct device *dev) { int ret; u16 val = ADIS16400_SLP_CNT_POWER_OFF; @@ -462,7 +413,7 @@ int adis16400_stop_device(struct device *dev) return ret; } -int adis16400_self_test(struct device *dev) +static int adis16400_self_test(struct device *dev) { int ret; ret = adis16400_spi_write_reg_16(dev, -- cgit v0.10.2 From 671ece14bc58a88dea76b11c5745a09c33934663 Mon Sep 17 00:00:00 2001 From: Barry Song Date: Fri, 7 May 2010 15:38:59 +0100 Subject: staging: iio: adis16209 driver Signed-off-by: Barry Song Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/accel/Kconfig b/drivers/staging/iio/accel/Kconfig index 3d3c333..1d89e21 100644 --- a/drivers/staging/iio/accel/Kconfig +++ b/drivers/staging/iio/accel/Kconfig @@ -3,6 +3,15 @@ # comment "Accelerometers" +config ADIS16209 + tristate "Analog Devices ADIS16209 Dual-Axis Digital Inclinometer and Accelerometer" + depends on SPI + select IIO_TRIGGER if IIO_RING_BUFFER + select IIO_SW_RING if IIO_RING_BUFFER + help + Say yes here to build support for Analog Devices adis16209 dual-axis digital inclinometer + and accelerometer. + config KXSD9 tristate "Kionix KXSD9 Accelerometer Driver" depends on SPI diff --git a/drivers/staging/iio/accel/Makefile b/drivers/staging/iio/accel/Makefile index d5335f9..f8f2124 100644 --- a/drivers/staging/iio/accel/Makefile +++ b/drivers/staging/iio/accel/Makefile @@ -1,6 +1,10 @@ # # Makefile for industrial I/O accelerometer drivers # +adis16209-y := adis16209_core.o +adis16209-$(CONFIG_IIO_RING_BUFFER) += adis16209_ring.o adis16209_trigger.o +obj-$(CONFIG_ADIS16209) += adis16209.o + obj-$(CONFIG_KXSD9) += kxsd9.o lis3l02dq-y := lis3l02dq_core.o diff --git a/drivers/staging/iio/accel/adis16209.h b/drivers/staging/iio/accel/adis16209.h new file mode 100644 index 0000000..877fd2a --- /dev/null +++ b/drivers/staging/iio/accel/adis16209.h @@ -0,0 +1,193 @@ +#ifndef SPI_ADIS16209_H_ +#define SPI_ADIS16209_H_ + +#define ADIS16209_STARTUP_DELAY 220 /* ms */ + +#define ADIS16209_READ_REG(a) a +#define ADIS16209_WRITE_REG(a) ((a) | 0x80) + +/* Flash memory write count */ +#define ADIS16209_FLASH_CNT 0x00 +/* Output, power supply */ +#define ADIS16209_SUPPLY_OUT 0x02 +/* Output, x-axis accelerometer */ +#define ADIS16209_XACCL_OUT 0x04 +/* Output, y-axis accelerometer */ +#define ADIS16209_YACCL_OUT 0x06 +/* Output, auxiliary ADC input */ +#define ADIS16209_AUX_ADC 0x08 +/* Output, temperature */ +#define ADIS16209_TEMP_OUT 0x0A +/* Output, x-axis inclination */ +#define ADIS16209_XINCL_OUT 0x0C +/* Output, y-axis inclination */ +#define ADIS16209_YINCL_OUT 0x0E +/* Output, +/-180 vertical rotational position */ +#define ADIS16209_ROT_OUT 0x10 +/* Calibration, x-axis acceleration offset null */ +#define ADIS16209_XACCL_NULL 0x12 +/* Calibration, y-axis acceleration offset null */ +#define ADIS16209_YACCL_NULL 0x14 +/* Calibration, x-axis inclination offset null */ +#define ADIS16209_XINCL_NULL 0x16 +/* Calibration, y-axis inclination offset null */ +#define ADIS16209_YINCL_NULL 0x18 +/* Calibration, vertical rotation offset null */ +#define ADIS16209_ROT_NULL 0x1A +/* Alarm 1 amplitude threshold */ +#define ADIS16209_ALM_MAG1 0x20 +/* Alarm 2 amplitude threshold */ +#define ADIS16209_ALM_MAG2 0x22 +/* Alarm 1, sample period */ +#define ADIS16209_ALM_SMPL1 0x24 +/* Alarm 2, sample period */ +#define ADIS16209_ALM_SMPL2 0x26 +/* Alarm control */ +#define ADIS16209_ALM_CTRL 0x28 +/* Auxiliary DAC data */ +#define ADIS16209_AUX_DAC 0x30 +/* General-purpose digital input/output control */ +#define ADIS16209_GPIO_CTRL 0x32 +/* Miscellaneous control */ +#define ADIS16209_MSC_CTRL 0x34 +/* Internal sample period (rate) control */ +#define ADIS16209_SMPL_PRD 0x36 +/* Operation, filter configuration */ +#define ADIS16209_AVG_CNT 0x38 +/* Operation, sleep mode control */ +#define ADIS16209_SLP_CNT 0x3A +/* Diagnostics, system status register */ +#define ADIS16209_DIAG_STAT 0x3C +/* Operation, system command register */ +#define ADIS16209_GLOB_CMD 0x3E + +#define ADIS16209_OUTPUTS 8 + +/* MSC_CTRL */ +/* Self-test at power-on: 1 = disabled, 0 = enabled */ +#define ADIS16209_MSC_CTRL_PWRUP_SELF_TEST (1 << 10) +/* Self-test enable */ +#define ADIS16209_MSC_CTRL_SELF_TEST_EN (1 << 8) +/* Data-ready enable: 1 = enabled, 0 = disabled */ +#define ADIS16209_MSC_CTRL_DATA_RDY_EN (1 << 2) +/* Data-ready polarity: 1 = active high, 0 = active low */ +#define ADIS16209_MSC_CTRL_ACTIVE_HIGH (1 << 1) +/* Data-ready line selection: 1 = DIO2, 0 = DIO1 */ +#define ADIS16209_MSC_CTRL_DATA_RDY_DIO2 (1 << 0) + +/* DIAG_STAT */ +/* Alarm 2 status: 1 = alarm active, 0 = alarm inactive */ +#define ADIS16209_DIAG_STAT_ALARM2 (1<<9) +/* Alarm 1 status: 1 = alarm active, 0 = alarm inactive */ +#define ADIS16209_DIAG_STAT_ALARM1 (1<<8) +/* Self-test diagnostic error flag: 1 = error condition, 0 = normal operation */ +#define ADIS16209_DIAG_STAT_SELFTEST_FAIL (1<<5) +/* SPI communications failure */ +#define ADIS16209_DIAG_STAT_SPI_FAIL (1<<3) +/* Flash update failure */ +#define ADIS16209_DIAG_STAT_FLASH_UPT (1<<2) +/* Power supply above 3.625 V */ +#define ADIS16209_DIAG_STAT_POWER_HIGH (1<<1) +/* Power supply below 3.15 V */ +#define ADIS16209_DIAG_STAT_POWER_LOW (1<<0) + +/* GLOB_CMD */ +#define ADIS16209_GLOB_CMD_SW_RESET (1<<7) +#define ADIS16209_GLOB_CMD_CLEAR_STAT (1<<4) +#define ADIS16209_GLOB_CMD_FACTORY_CAL (1<<1) + +#define ADIS16209_MAX_TX 24 +#define ADIS16209_MAX_RX 24 + +#define ADIS16209_ERROR_ACTIVE (1<<14) + +/** + * struct adis16209_state - device instance specific data + * @us: actual spi_device + * @work_trigger_to_ring: bh for triggered event handling + * @work_cont_thresh: CLEAN + * @inter: used to check if new interrupt has been triggered + * @last_timestamp: passing timestamp from th to bh of interrupt handler + * @indio_dev: industrial I/O device structure + * @trig: data ready trigger registered with iio + * @tx: transmit buffer + * @rx: recieve buffer + * @buf_lock: mutex to protect tx and rx + **/ +struct adis16209_state { + struct spi_device *us; + struct work_struct work_trigger_to_ring; + struct iio_work_cont work_cont_thresh; + s64 last_timestamp; + struct iio_dev *indio_dev; + struct iio_trigger *trig; + u8 *tx; + u8 *rx; + struct mutex buf_lock; +}; + +int adis16209_set_irq(struct device *dev, bool enable); + +#ifdef CONFIG_IIO_RING_BUFFER +enum adis16209_scan { + ADIS16209_SCAN_SUPPLY, + ADIS16209_SCAN_ACC_X, + ADIS16209_SCAN_ACC_Y, + ADIS16209_SCAN_AUX_ADC, + ADIS16209_SCAN_TEMP, + ADIS16209_SCAN_INCLI_X, + ADIS16209_SCAN_INCLI_Y, + ADIS16209_SCAN_ROT, +}; + +void adis16209_remove_trigger(struct iio_dev *indio_dev); +int adis16209_probe_trigger(struct iio_dev *indio_dev); + +ssize_t adis16209_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf); + +int adis16209_configure_ring(struct iio_dev *indio_dev); +void adis16209_unconfigure_ring(struct iio_dev *indio_dev); + +int adis16209_initialize_ring(struct iio_ring_buffer *ring); +void adis16209_uninitialize_ring(struct iio_ring_buffer *ring); +#else /* CONFIG_IIO_RING_BUFFER */ + +static inline void adis16209_remove_trigger(struct iio_dev *indio_dev) +{ +} + +static inline int adis16209_probe_trigger(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline ssize_t +adis16209_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return 0; +} + +static int adis16209_configure_ring(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline void adis16209_unconfigure_ring(struct iio_dev *indio_dev) +{ +} + +static inline int adis16209_initialize_ring(struct iio_ring_buffer *ring) +{ + return 0; +} + +static inline void adis16209_uninitialize_ring(struct iio_ring_buffer *ring) +{ +} + +#endif /* CONFIG_IIO_RING_BUFFER */ +#endif /* SPI_ADIS16209_H_ */ diff --git a/drivers/staging/iio/accel/adis16209_core.c b/drivers/staging/iio/accel/adis16209_core.c new file mode 100644 index 0000000..ac375c5 --- /dev/null +++ b/drivers/staging/iio/accel/adis16209_core.c @@ -0,0 +1,615 @@ +/* + * ADIS16209 Programmable Digital Vibration Sensor driver + * + * Copyright 2010 Analog Devices Inc. + * + * Licensed under the GPL-2 or later. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "accel.h" +#include "inclinometer.h" +#include "../gyro/gyro.h" +#include "../adc/adc.h" + +#include "adis16209.h" + +#define DRIVER_NAME "adis16209" + +static int adis16209_check_status(struct device *dev); + +/** + * adis16209_spi_write_reg_8() - write single byte to a register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the register to be written + * @val: the value to write + **/ +static int adis16209_spi_write_reg_8(struct device *dev, + u8 reg_address, + u8 val) +{ + int ret; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16209_state *st = iio_dev_get_devdata(indio_dev); + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16209_WRITE_REG(reg_address); + st->tx[1] = val; + + ret = spi_write(st->us, st->tx, 2); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16209_spi_write_reg_16() - write 2 bytes to a pair of registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: value to be written + **/ +static int adis16209_spi_write_reg_16(struct device *dev, + u8 lower_reg_address, + u16 value) +{ + int ret; + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16209_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + }, { + .tx_buf = st->tx + 2, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16209_WRITE_REG(lower_reg_address); + st->tx[1] = value & 0xFF; + st->tx[2] = ADIS16209_WRITE_REG(lower_reg_address + 1); + st->tx[3] = (value >> 8) & 0xFF; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16209_spi_read_reg_16() - read 2 bytes from a 16-bit register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: somewhere to pass back the value read + **/ +static int adis16209_spi_read_reg_16(struct device *dev, + u8 lower_reg_address, + u16 *val) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16209_state *st = iio_dev_get_devdata(indio_dev); + int ret; + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 20, + }, { + .rx_buf = st->rx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 20, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16209_READ_REG(lower_reg_address); + st->tx[1] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + if (ret) { + dev_err(&st->us->dev, + "problem when reading 16 bit register 0x%02X", + lower_reg_address); + goto error_ret; + } + *val = (st->rx[0] << 8) | st->rx[1]; + +error_ret: + mutex_unlock(&st->buf_lock); + return ret; +} + +static ssize_t adis16209_read_12bit_unsigned(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret; + u16 val = 0; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16209_spi_read_reg_16(dev, this_attr->address, &val); + if (ret) + return ret; + + if (val & ADIS16209_ERROR_ACTIVE) + adis16209_check_status(dev); + + return sprintf(buf, "%u\n", val & 0x0FFF); +} + +static ssize_t adis16209_read_14bit_unsigned(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret; + u16 val = 0; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16209_spi_read_reg_16(dev, this_attr->address, &val); + if (ret) + return ret; + + if (val & ADIS16209_ERROR_ACTIVE) + adis16209_check_status(dev); + + return sprintf(buf, "%u\n", val & 0x3FFF); +} + +static ssize_t adis16209_read_temp(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + u16 val; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + + ret = adis16209_spi_read_reg_16(dev, ADIS16209_TEMP_OUT, (u16 *)&val); + if (ret) + goto error_ret; + + if (val & ADIS16209_ERROR_ACTIVE) + adis16209_check_status(dev); + + val &= 0xFFF; + ret = sprintf(buf, "%d\n", val); + +error_ret: + mutex_unlock(&indio_dev->mlock); + return ret; +} + +static ssize_t adis16209_read_14bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + s16 val = 0; + ssize_t ret; + + mutex_lock(&indio_dev->mlock); + + ret = adis16209_spi_read_reg_16(dev, this_attr->address, (u16 *)&val); + if (!ret) { + if (val & ADIS16209_ERROR_ACTIVE) + adis16209_check_status(dev); + + val = ((s16)(val << 2) >> 2); + ret = sprintf(buf, "%d\n", val); + } + + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16209_write_16bit(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + int ret; + long val; + + ret = strict_strtol(buf, 10, &val); + if (ret) + goto error_ret; + ret = adis16209_spi_write_reg_16(dev, this_attr->address, val); + +error_ret: + return ret ? ret : len; +} + +static int adis16209_reset(struct device *dev) +{ + int ret; + ret = adis16209_spi_write_reg_8(dev, + ADIS16209_GLOB_CMD, + ADIS16209_GLOB_CMD_SW_RESET); + if (ret) + dev_err(dev, "problem resetting device"); + + return ret; +} + +static ssize_t adis16209_write_reset(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + if (len < 1) + return -EINVAL; + switch (buf[0]) { + case '1': + case 'y': + case 'Y': + return adis16209_reset(dev); + } + return -EINVAL; +} + +int adis16209_set_irq(struct device *dev, bool enable) +{ + int ret = 0; + u16 msc; + + ret = adis16209_spi_read_reg_16(dev, ADIS16209_MSC_CTRL, &msc); + if (ret) + goto error_ret; + + msc |= ADIS16209_MSC_CTRL_ACTIVE_HIGH; + msc &= ~ADIS16209_MSC_CTRL_DATA_RDY_DIO2; + if (enable) + msc |= ADIS16209_MSC_CTRL_DATA_RDY_EN; + else + msc &= ~ADIS16209_MSC_CTRL_DATA_RDY_EN; + + ret = adis16209_spi_write_reg_16(dev, ADIS16209_MSC_CTRL, msc); + +error_ret: + return ret; +} + +static int adis16209_check_status(struct device *dev) +{ + u16 status; + int ret; + + ret = adis16209_spi_read_reg_16(dev, ADIS16209_DIAG_STAT, &status); + if (ret < 0) { + dev_err(dev, "Reading status failed\n"); + goto error_ret; + } + ret = status & 0x1F; + + if (status & ADIS16209_DIAG_STAT_SELFTEST_FAIL) + dev_err(dev, "Self test failure\n"); + if (status & ADIS16209_DIAG_STAT_SPI_FAIL) + dev_err(dev, "SPI failure\n"); + if (status & ADIS16209_DIAG_STAT_FLASH_UPT) + dev_err(dev, "Flash update failed\n"); + if (status & ADIS16209_DIAG_STAT_POWER_HIGH) + dev_err(dev, "Power supply above 3.625V\n"); + if (status & ADIS16209_DIAG_STAT_POWER_LOW) + dev_err(dev, "Power supply below 3.15V\n"); + +error_ret: + return ret; +} + +static int adis16209_self_test(struct device *dev) +{ + int ret; + ret = adis16209_spi_write_reg_16(dev, + ADIS16209_MSC_CTRL, + ADIS16209_MSC_CTRL_SELF_TEST_EN); + if (ret) { + dev_err(dev, "problem starting self test"); + goto err_ret; + } + + adis16209_check_status(dev); + +err_ret: + return ret; +} + +static int adis16209_initial_setup(struct adis16209_state *st) +{ + int ret; + struct device *dev = &st->indio_dev->dev; + + /* Disable IRQ */ + ret = adis16209_set_irq(dev, false); + if (ret) { + dev_err(dev, "disable irq failed"); + goto err_ret; + } + + /* Do self test */ + ret = adis16209_self_test(dev); + if (ret) { + dev_err(dev, "self test failure"); + goto err_ret; + } + + /* Read status register to check the result */ + ret = adis16209_check_status(dev); + if (ret) { + adis16209_reset(dev); + dev_err(dev, "device not playing ball -> reset"); + msleep(ADIS16209_STARTUP_DELAY); + ret = adis16209_check_status(dev); + if (ret) { + dev_err(dev, "giving up"); + goto err_ret; + } + } + + printk(KERN_INFO DRIVER_NAME ": at CS%d (irq %d)\n", + st->us->chip_select, st->us->irq); + +err_ret: + return ret; +} + +static IIO_DEV_ATTR_IN_NAMED_RAW(supply, adis16209_read_14bit_unsigned, + ADIS16209_SUPPLY_OUT); +static IIO_CONST_ATTR(in_supply_scale, "0.30518"); +static IIO_DEV_ATTR_IN_RAW(0, adis16209_read_12bit_unsigned, + ADIS16209_AUX_ADC); +static IIO_CONST_ATTR(in0_scale, "0.6105"); + +static IIO_DEV_ATTR_ACCEL_X(adis16209_read_14bit_signed, + ADIS16209_XACCL_OUT); +static IIO_DEV_ATTR_ACCEL_Y(adis16209_read_14bit_signed, + ADIS16209_YACCL_OUT); +static IIO_DEV_ATTR_ACCEL_X_OFFSET(S_IWUSR | S_IRUGO, + adis16209_read_14bit_signed, + adis16209_write_16bit, + ADIS16209_XACCL_NULL); +static IIO_DEV_ATTR_ACCEL_Y_OFFSET(S_IWUSR | S_IRUGO, + adis16209_read_14bit_signed, + adis16209_write_16bit, + ADIS16209_YACCL_NULL); +static IIO_CONST_ATTR(accel_scale, "0.24414"); + +static IIO_DEV_ATTR_INCLI_X(adis16209_read_14bit_signed, + ADIS16209_XINCL_OUT); +static IIO_DEV_ATTR_INCLI_Y(adis16209_read_14bit_signed, + ADIS16209_YINCL_OUT); +static IIO_DEV_ATTR_INCLI_X_OFFSET(S_IWUSR | S_IRUGO, + adis16209_read_14bit_signed, + adis16209_write_16bit, + ADIS16209_XACCL_NULL); +static IIO_DEV_ATTR_INCLI_Y_OFFSET(S_IWUSR | S_IRUGO, + adis16209_read_14bit_signed, + adis16209_write_16bit, + ADIS16209_YACCL_NULL); +static IIO_CONST_ATTR(incli_scale, "0.025"); + +static IIO_DEVICE_ATTR(rot_raw, S_IRUGO, adis16209_read_14bit_signed, + NULL, ADIS16209_ROT_OUT); + +static IIO_DEV_ATTR_TEMP(adis16209_read_temp); +static IIO_CONST_ATTR(temp_offset, "25"); +static IIO_CONST_ATTR(temp_scale, "-0.47"); + +static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16209_write_reset, 0); + +static IIO_CONST_ATTR(name, "adis16209"); + +static struct attribute *adis16209_event_attributes[] = { + NULL +}; + +static struct attribute_group adis16209_event_attribute_group = { + .attrs = adis16209_event_attributes, +}; + +static struct attribute *adis16209_attributes[] = { + &iio_dev_attr_in_supply_raw.dev_attr.attr, + &iio_const_attr_in_supply_scale.dev_attr.attr, + &iio_dev_attr_temp.dev_attr.attr, + &iio_const_attr_temp_offset.dev_attr.attr, + &iio_const_attr_temp_scale.dev_attr.attr, + &iio_dev_attr_reset.dev_attr.attr, + &iio_const_attr_name.dev_attr.attr, + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_const_attr_in0_scale.dev_attr.attr, + &iio_dev_attr_accel_x_raw.dev_attr.attr, + &iio_dev_attr_accel_y_raw.dev_attr.attr, + &iio_dev_attr_accel_x_offset.dev_attr.attr, + &iio_dev_attr_accel_y_offset.dev_attr.attr, + &iio_const_attr_accel_scale.dev_attr.attr, + &iio_dev_attr_incli_x_raw.dev_attr.attr, + &iio_dev_attr_incli_y_raw.dev_attr.attr, + &iio_dev_attr_incli_x_offset.dev_attr.attr, + &iio_dev_attr_incli_y_offset.dev_attr.attr, + &iio_const_attr_incli_scale.dev_attr.attr, + &iio_dev_attr_rot_raw.dev_attr.attr, + NULL +}; + +static const struct attribute_group adis16209_attribute_group = { + .attrs = adis16209_attributes, +}; + +static int __devinit adis16209_probe(struct spi_device *spi) +{ + int ret, regdone = 0; + struct adis16209_state *st = kzalloc(sizeof *st, GFP_KERNEL); + if (!st) { + ret = -ENOMEM; + goto error_ret; + } + /* this is only used for removal purposes */ + spi_set_drvdata(spi, st); + + /* Allocate the comms buffers */ + st->rx = kzalloc(sizeof(*st->rx)*ADIS16209_MAX_RX, GFP_KERNEL); + if (st->rx == NULL) { + ret = -ENOMEM; + goto error_free_st; + } + st->tx = kzalloc(sizeof(*st->tx)*ADIS16209_MAX_TX, GFP_KERNEL); + if (st->tx == NULL) { + ret = -ENOMEM; + goto error_free_rx; + } + st->us = spi; + mutex_init(&st->buf_lock); + /* setup the industrialio driver allocated elements */ + st->indio_dev = iio_allocate_device(); + if (st->indio_dev == NULL) { + ret = -ENOMEM; + goto error_free_tx; + } + + st->indio_dev->dev.parent = &spi->dev; + st->indio_dev->num_interrupt_lines = 1; + st->indio_dev->event_attrs = &adis16209_event_attribute_group; + st->indio_dev->attrs = &adis16209_attribute_group; + st->indio_dev->dev_data = (void *)(st); + st->indio_dev->driver_module = THIS_MODULE; + st->indio_dev->modes = INDIO_DIRECT_MODE; + + ret = adis16209_configure_ring(st->indio_dev); + if (ret) + goto error_free_dev; + + ret = iio_device_register(st->indio_dev); + if (ret) + goto error_unreg_ring_funcs; + regdone = 1; + + ret = adis16209_initialize_ring(st->indio_dev->ring); + if (ret) { + printk(KERN_ERR "failed to initialize the ring\n"); + goto error_unreg_ring_funcs; + } + + if (spi->irq) { + ret = iio_register_interrupt_line(spi->irq, + st->indio_dev, + 0, + IRQF_TRIGGER_RISING, + "adis16209"); + if (ret) + goto error_uninitialize_ring; + + ret = adis16209_probe_trigger(st->indio_dev); + if (ret) + goto error_unregister_line; + } + + /* Get the device into a sane initial state */ + ret = adis16209_initial_setup(st); + if (ret) + goto error_remove_trigger; + return 0; + +error_remove_trigger: + adis16209_remove_trigger(st->indio_dev); +error_unregister_line: + if (spi->irq) + iio_unregister_interrupt_line(st->indio_dev, 0); +error_uninitialize_ring: + adis16209_uninitialize_ring(st->indio_dev->ring); +error_unreg_ring_funcs: + adis16209_unconfigure_ring(st->indio_dev); +error_free_dev: + if (regdone) + iio_device_unregister(st->indio_dev); + else + iio_free_device(st->indio_dev); +error_free_tx: + kfree(st->tx); +error_free_rx: + kfree(st->rx); +error_free_st: + kfree(st); +error_ret: + return ret; +} + +static int adis16209_remove(struct spi_device *spi) +{ + struct adis16209_state *st = spi_get_drvdata(spi); + struct iio_dev *indio_dev = st->indio_dev; + + flush_scheduled_work(); + + adis16209_remove_trigger(indio_dev); + if (spi->irq) + iio_unregister_interrupt_line(indio_dev, 0); + + adis16209_uninitialize_ring(indio_dev->ring); + iio_device_unregister(indio_dev); + adis16209_unconfigure_ring(indio_dev); + kfree(st->tx); + kfree(st->rx); + kfree(st); + + return 0; +} + +static struct spi_driver adis16209_driver = { + .driver = { + .name = "adis16209", + .owner = THIS_MODULE, + }, + .probe = adis16209_probe, + .remove = __devexit_p(adis16209_remove), +}; + +static __init int adis16209_init(void) +{ + return spi_register_driver(&adis16209_driver); +} +module_init(adis16209_init); + +static __exit void adis16209_exit(void) +{ + spi_unregister_driver(&adis16209_driver); +} +module_exit(adis16209_exit); + +MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>"); +MODULE_DESCRIPTION("Analog Devices ADIS16209 Digital Vibration Sensor driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/iio/accel/adis16209_ring.c b/drivers/staging/iio/accel/adis16209_ring.c new file mode 100644 index 0000000..533e285 --- /dev/null +++ b/drivers/staging/iio/accel/adis16209_ring.c @@ -0,0 +1,266 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../ring_sw.h" +#include "accel.h" +#include "../trigger.h" +#include "adis16209.h" + +/** + * combine_8_to_16() utility function to munge to u8s into u16 + **/ +static inline u16 combine_8_to_16(u8 lower, u8 upper) +{ + u16 _lower = lower; + u16 _upper = upper; + return _lower | (_upper << 8); +} + +static IIO_SCAN_EL_C(supply, ADIS16209_SCAN_SUPPLY, IIO_UNSIGNED(14), + ADIS16209_SUPPLY_OUT, NULL); +static IIO_SCAN_EL_C(accel_x, ADIS16209_SCAN_ACC_X, IIO_SIGNED(14), + ADIS16209_XACCL_OUT, NULL); +static IIO_SCAN_EL_C(accel_y, ADIS16209_SCAN_ACC_Y, IIO_SIGNED(14), + ADIS16209_YACCL_OUT, NULL); +static IIO_SCAN_EL_C(aux_adc, ADIS16209_SCAN_AUX_ADC, IIO_UNSIGNED(12), + ADIS16209_AUX_ADC, NULL); +static IIO_SCAN_EL_C(temp, ADIS16209_SCAN_TEMP, IIO_UNSIGNED(12), + ADIS16209_TEMP_OUT, NULL); +static IIO_SCAN_EL_C(incli_x, ADIS16209_SCAN_INCLI_X, IIO_SIGNED(14), + ADIS16209_XINCL_OUT, NULL); +static IIO_SCAN_EL_C(incli_y, ADIS16209_SCAN_INCLI_Y, IIO_SIGNED(14), + ADIS16209_YINCL_OUT, NULL); +static IIO_SCAN_EL_C(rot, ADIS16209_SCAN_ROT, IIO_SIGNED(14), + ADIS16209_ROT_OUT, NULL); + +static IIO_SCAN_EL_TIMESTAMP(8); + +static struct attribute *adis16209_scan_el_attrs[] = { + &iio_scan_el_supply.dev_attr.attr, + &iio_scan_el_accel_x.dev_attr.attr, + &iio_scan_el_accel_y.dev_attr.attr, + &iio_scan_el_aux_adc.dev_attr.attr, + &iio_scan_el_temp.dev_attr.attr, + &iio_scan_el_incli_x.dev_attr.attr, + &iio_scan_el_incli_y.dev_attr.attr, + &iio_scan_el_rot.dev_attr.attr, + &iio_scan_el_timestamp.dev_attr.attr, + NULL, +}; + +static struct attribute_group adis16209_scan_el_group = { + .attrs = adis16209_scan_el_attrs, + .name = "scan_elements", +}; + +/** + * adis16209_poll_func_th() top half interrupt handler called by trigger + * @private_data: iio_dev + **/ +static void adis16209_poll_func_th(struct iio_dev *indio_dev) +{ + struct adis16209_state *st = iio_dev_get_devdata(indio_dev); + st->last_timestamp = indio_dev->trig->timestamp; + schedule_work(&st->work_trigger_to_ring); +} + +/** + * adis16209_read_ring_data() read data registers which will be placed into ring + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @rx: somewhere to pass back the value read + **/ +static int adis16209_read_ring_data(struct device *dev, u8 *rx) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16209_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[ADIS16209_OUTPUTS + 1]; + int ret; + int i; + + mutex_lock(&st->buf_lock); + + spi_message_init(&msg); + + memset(xfers, 0, sizeof(xfers)); + for (i = 0; i <= ADIS16209_OUTPUTS; i++) { + xfers[i].bits_per_word = 8; + xfers[i].cs_change = 1; + xfers[i].len = 2; + xfers[i].delay_usecs = 20; + xfers[i].tx_buf = st->tx + 2 * i; + st->tx[2 * i] + = ADIS16209_READ_REG(ADIS16209_SUPPLY_OUT + 2 * i); + st->tx[2 * i + 1] = 0; + if (i >= 1) + xfers[i].rx_buf = rx + 2 * (i - 1); + spi_message_add_tail(&xfers[i], &msg); + } + + ret = spi_sync(st->us, &msg); + if (ret) + dev_err(&st->us->dev, "problem when burst reading"); + + mutex_unlock(&st->buf_lock); + + return ret; +} + +/* Whilst this makes a lot of calls to iio_sw_ring functions - it is to device + * specific to be rolled into the core. + */ +static void adis16209_trigger_bh_to_ring(struct work_struct *work_s) +{ + struct adis16209_state *st + = container_of(work_s, struct adis16209_state, + work_trigger_to_ring); + + int i = 0; + s16 *data; + size_t datasize = st->indio_dev + ->ring->access.get_bpd(st->indio_dev->ring); + + data = kmalloc(datasize , GFP_KERNEL); + if (data == NULL) { + dev_err(&st->us->dev, "memory alloc failed in ring bh"); + return; + } + + if (st->indio_dev->scan_count) + if (adis16209_read_ring_data(&st->indio_dev->dev, st->rx) >= 0) + for (; i < st->indio_dev->scan_count; i++) { + data[i] = combine_8_to_16(st->rx[i*2+1], + st->rx[i*2]); + } + + /* Guaranteed to be aligned with 8 byte boundary */ + if (st->indio_dev->scan_timestamp) + *((s64 *)(data + ((i + 3)/4)*4)) = st->last_timestamp; + + st->indio_dev->ring->access.store_to(st->indio_dev->ring, + (u8 *)data, + st->last_timestamp); + + iio_trigger_notify_done(st->indio_dev->trig); + kfree(data); + + return; +} + +/* in these circumstances is it better to go with unaligned packing and + * deal with the cost?*/ +static int adis16209_data_rdy_ring_preenable(struct iio_dev *indio_dev) +{ + size_t size; + dev_dbg(&indio_dev->dev, "%s\n", __func__); + /* Check if there are any scan elements enabled, if not fail*/ + if (!(indio_dev->scan_count || indio_dev->scan_timestamp)) + return -EINVAL; + + if (indio_dev->ring->access.set_bpd) { + if (indio_dev->scan_timestamp) + if (indio_dev->scan_count) + /* Timestamp (aligned to s64) and data */ + size = (((indio_dev->scan_count * sizeof(s16)) + + sizeof(s64) - 1) + & ~(sizeof(s64) - 1)) + + sizeof(s64); + else /* Timestamp only */ + size = sizeof(s64); + else /* Data only */ + size = indio_dev->scan_count*sizeof(s16); + indio_dev->ring->access.set_bpd(indio_dev->ring, size); + } + + return 0; +} + +static int adis16209_data_rdy_ring_postenable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_attach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +static int adis16209_data_rdy_ring_predisable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_dettach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +void adis16209_unconfigure_ring(struct iio_dev *indio_dev) +{ + kfree(indio_dev->pollfunc); + iio_sw_rb_free(indio_dev->ring); +} + +int adis16209_configure_ring(struct iio_dev *indio_dev) +{ + int ret = 0; + struct adis16209_state *st = indio_dev->dev_data; + struct iio_ring_buffer *ring; + INIT_WORK(&st->work_trigger_to_ring, adis16209_trigger_bh_to_ring); + /* Set default scan mode */ + + iio_scan_mask_set(indio_dev, iio_scan_el_supply.number); + iio_scan_mask_set(indio_dev, iio_scan_el_rot.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_y.number); + iio_scan_mask_set(indio_dev, iio_scan_el_temp.number); + iio_scan_mask_set(indio_dev, iio_scan_el_aux_adc.number); + iio_scan_mask_set(indio_dev, iio_scan_el_incli_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_incli_y.number); + indio_dev->scan_timestamp = true; + + indio_dev->scan_el_attrs = &adis16209_scan_el_group; + + ring = iio_sw_rb_allocate(indio_dev); + if (!ring) { + ret = -ENOMEM; + return ret; + } + indio_dev->ring = ring; + /* Effectively select the ring buffer implementation */ + iio_ring_sw_register_funcs(&ring->access); + ring->preenable = &adis16209_data_rdy_ring_preenable; + ring->postenable = &adis16209_data_rdy_ring_postenable; + ring->predisable = &adis16209_data_rdy_ring_predisable; + ring->owner = THIS_MODULE; + + indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); + if (indio_dev->pollfunc == NULL) { + ret = -ENOMEM; + goto error_iio_sw_rb_free;; + } + indio_dev->pollfunc->poll_func_main = &adis16209_poll_func_th; + indio_dev->pollfunc->private_data = indio_dev; + indio_dev->modes |= INDIO_RING_TRIGGERED; + return 0; + +error_iio_sw_rb_free: + iio_sw_rb_free(indio_dev->ring); + return ret; +} + +int adis16209_initialize_ring(struct iio_ring_buffer *ring) +{ + return iio_ring_buffer_register(ring, 0); +} + +void adis16209_uninitialize_ring(struct iio_ring_buffer *ring) +{ + iio_ring_buffer_unregister(ring); +} diff --git a/drivers/staging/iio/accel/adis16209_trigger.c b/drivers/staging/iio/accel/adis16209_trigger.c new file mode 100644 index 0000000..4a0507c --- /dev/null +++ b/drivers/staging/iio/accel/adis16209_trigger.c @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../trigger.h" +#include "adis16209.h" + +/** + * adis16209_data_rdy_trig_poll() the event handler for the data rdy trig + **/ +static int adis16209_data_rdy_trig_poll(struct iio_dev *dev_info, + int index, + s64 timestamp, + int no_test) +{ + struct adis16209_state *st = iio_dev_get_devdata(dev_info); + struct iio_trigger *trig = st->trig; + + trig->timestamp = timestamp; + iio_trigger_poll(trig); + + return IRQ_HANDLED; +} + +IIO_EVENT_SH(data_rdy_trig, &adis16209_data_rdy_trig_poll); + +static DEVICE_ATTR(name, S_IRUGO, iio_trigger_read_name, NULL); + +static struct attribute *adis16209_trigger_attrs[] = { + &dev_attr_name.attr, + NULL, +}; + +static const struct attribute_group adis16209_trigger_attr_group = { + .attrs = adis16209_trigger_attrs, +}; + +/** + * adis16209_data_rdy_trigger_set_state() set datardy interrupt state + **/ +static int adis16209_data_rdy_trigger_set_state(struct iio_trigger *trig, + bool state) +{ + struct adis16209_state *st = trig->private_data; + struct iio_dev *indio_dev = st->indio_dev; + int ret = 0; + + dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state); + ret = adis16209_set_irq(&st->indio_dev->dev, state); + if (state == false) { + iio_remove_event_from_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0] + ->ev_list); + flush_scheduled_work(); + } else { + iio_add_event_to_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0]->ev_list); + } + return ret; +} + +/** + * adis16209_trig_try_reen() try renabling irq for data rdy trigger + * @trig: the datardy trigger + **/ +static int adis16209_trig_try_reen(struct iio_trigger *trig) +{ + struct adis16209_state *st = trig->private_data; + enable_irq(st->us->irq); + return 0; +} + +int adis16209_probe_trigger(struct iio_dev *indio_dev) +{ + int ret; + struct adis16209_state *st = indio_dev->dev_data; + + st->trig = iio_allocate_trigger(); + st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL); + if (!st->trig->name) { + ret = -ENOMEM; + goto error_free_trig; + } + snprintf((char *)st->trig->name, + IIO_TRIGGER_NAME_LENGTH, + "adis16209-dev%d", indio_dev->id); + st->trig->dev.parent = &st->us->dev; + st->trig->owner = THIS_MODULE; + st->trig->private_data = st; + st->trig->set_trigger_state = &adis16209_data_rdy_trigger_set_state; + st->trig->try_reenable = &adis16209_trig_try_reen; + st->trig->control_attrs = &adis16209_trigger_attr_group; + ret = iio_trigger_register(st->trig); + + /* select default trigger */ + indio_dev->trig = st->trig; + if (ret) + goto error_free_trig_name; + + return 0; + +error_free_trig_name: + kfree(st->trig->name); +error_free_trig: + iio_free_trigger(st->trig); + + return ret; +} + +void adis16209_remove_trigger(struct iio_dev *indio_dev) +{ + struct adis16209_state *state = indio_dev->dev_data; + + iio_trigger_unregister(state->trig); + kfree(state->trig->name); + iio_free_trigger(state->trig); +} -- cgit v0.10.2 From 2c834b4d2d30c8f8ae5365a66c50da95aed7b7ea Mon Sep 17 00:00:00 2001 From: Barry Song Date: Fri, 7 May 2010 15:39:00 +0100 Subject: staging: iio: adis16240 driver Signed-off-by: Barry Song Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/accel/Kconfig b/drivers/staging/iio/accel/Kconfig index 1d89e21..8f3f70f 100644 --- a/drivers/staging/iio/accel/Kconfig +++ b/drivers/staging/iio/accel/Kconfig @@ -12,6 +12,15 @@ config ADIS16209 Say yes here to build support for Analog Devices adis16209 dual-axis digital inclinometer and accelerometer. +config ADIS16240 + tristate "Analog Devices ADIS16240 Programmable Impact Sensor and Recorder" + depends on SPI + select IIO_TRIGGER if IIO_RING_BUFFER + select IIO_SW_RING if IIO_RING_BUFFER + help + Say yes here to build support for Analog Devices adis16240 programmable + impact Sensor and recorder. + config KXSD9 tristate "Kionix KXSD9 Accelerometer Driver" depends on SPI diff --git a/drivers/staging/iio/accel/Makefile b/drivers/staging/iio/accel/Makefile index f8f2124..0e6762c 100644 --- a/drivers/staging/iio/accel/Makefile +++ b/drivers/staging/iio/accel/Makefile @@ -5,6 +5,10 @@ adis16209-y := adis16209_core.o adis16209-$(CONFIG_IIO_RING_BUFFER) += adis16209_ring.o adis16209_trigger.o obj-$(CONFIG_ADIS16209) += adis16209.o +adis16240-y := adis16240_core.o +adis16240-$(CONFIG_IIO_RING_BUFFER) += adis16240_ring.o adis16240_trigger.o +obj-$(CONFIG_ADIS16240) += adis16240.o + obj-$(CONFIG_KXSD9) += kxsd9.o lis3l02dq-y := lis3l02dq_core.o diff --git a/drivers/staging/iio/accel/adis16240.h b/drivers/staging/iio/accel/adis16240.h new file mode 100644 index 0000000..dcff43c --- /dev/null +++ b/drivers/staging/iio/accel/adis16240.h @@ -0,0 +1,218 @@ +#ifndef SPI_ADIS16240_H_ +#define SPI_ADIS16240_H_ + +#define ADIS16240_STARTUP_DELAY 220 /* ms */ + +#define ADIS16240_READ_REG(a) a +#define ADIS16240_WRITE_REG(a) ((a) | 0x80) + +/* Flash memory write count */ +#define ADIS16240_FLASH_CNT 0x00 +/* Output, power supply */ +#define ADIS16240_SUPPLY_OUT 0x02 +/* Output, x-axis accelerometer */ +#define ADIS16240_XACCL_OUT 0x04 +/* Output, y-axis accelerometer */ +#define ADIS16240_YACCL_OUT 0x06 +/* Output, z-axis accelerometer */ +#define ADIS16240_ZACCL_OUT 0x08 +/* Output, auxiliary ADC input */ +#define ADIS16240_AUX_ADC 0x0A +/* Output, temperature */ +#define ADIS16240_TEMP_OUT 0x0C +/* Output, x-axis acceleration peak */ +#define ADIS16240_XPEAK_OUT 0x0E +/* Output, y-axis acceleration peak */ +#define ADIS16240_YPEAK_OUT 0x10 +/* Output, z-axis acceleration peak */ +#define ADIS16240_ZPEAK_OUT 0x12 +/* Output, sum-of-squares acceleration peak */ +#define ADIS16240_XYZPEAK_OUT 0x14 +/* Output, Capture Buffer 1, X and Y acceleration */ +#define ADIS16240_CAPT_BUF1 0x16 +/* Output, Capture Buffer 2, Z acceleration */ +#define ADIS16240_CAPT_BUF2 0x18 +/* Diagnostic, error flags */ +#define ADIS16240_DIAG_STAT 0x1A +/* Diagnostic, event counter */ +#define ADIS16240_EVNT_CNTR 0x1C +/* Diagnostic, check sum value from firmware test */ +#define ADIS16240_CHK_SUM 0x1E +/* Calibration, x-axis acceleration offset adjustment */ +#define ADIS16240_XACCL_OFF 0x20 +/* Calibration, y-axis acceleration offset adjustment */ +#define ADIS16240_YACCL_OFF 0x22 +/* Calibration, z-axis acceleration offset adjustment */ +#define ADIS16240_ZACCL_OFF 0x24 +/* Clock, hour and minute */ +#define ADIS16240_CLK_TIME 0x2E +/* Clock, month and day */ +#define ADIS16240_CLK_DATE 0x30 +/* Clock, year */ +#define ADIS16240_CLK_YEAR 0x32 +/* Wake-up setting, hour and minute */ +#define ADIS16240_WAKE_TIME 0x34 +/* Wake-up setting, month and day */ +#define ADIS16240_WAKE_DATE 0x36 +/* Alarm 1 amplitude threshold */ +#define ADIS16240_ALM_MAG1 0x38 +/* Alarm 2 amplitude threshold */ +#define ADIS16240_ALM_MAG2 0x3A +/* Alarm control */ +#define ADIS16240_ALM_CTRL 0x3C +/* Capture, external trigger control */ +#define ADIS16240_XTRIG_CTRL 0x3E +/* Capture, address pointer */ +#define ADIS16240_CAPT_PNTR 0x40 +/* Capture, configuration and control */ +#define ADIS16240_CAPT_CTRL 0x42 +/* General-purpose digital input/output control */ +#define ADIS16240_GPIO_CTRL 0x44 +/* Miscellaneous control */ +#define ADIS16240_MSC_CTRL 0x46 +/* Internal sample period (rate) control */ +#define ADIS16240_SMPL_PRD 0x48 +/* System command */ +#define ADIS16240_GLOB_CMD 0x4A + +#define ADIS16240_OUTPUTS 6 + +/* MSC_CTRL */ +/* Enables sum-of-squares output (XYZPEAK_OUT) */ +#define ADIS16240_MSC_CTRL_XYZPEAK_OUT_EN (1 << 15) +/* Enables peak tracking output (XPEAK_OUT, YPEAK_OUT, and ZPEAK_OUT) */ +#define ADIS16240_MSC_CTRL_X_Y_ZPEAK_OUT_EN (1 << 14) +/* Self-test enable: 1 = apply electrostatic force, 0 = disabled */ +#define ADIS16240_MSC_CTRL_SELF_TEST_EN (1 << 8) +/* Data-ready enable: 1 = enabled, 0 = disabled */ +#define ADIS16240_MSC_CTRL_DATA_RDY_EN (1 << 2) +/* Data-ready polarity: 1 = active high, 0 = active low */ +#define ADIS16240_MSC_CTRL_ACTIVE_HIGH (1 << 1) +/* Data-ready line selection: 1 = DIO2, 0 = DIO1 */ +#define ADIS16240_MSC_CTRL_DATA_RDY_DIO2 (1 << 0) + +/* DIAG_STAT */ +/* Alarm 2 status: 1 = alarm active, 0 = alarm inactive */ +#define ADIS16240_DIAG_STAT_ALARM2 (1<<9) +/* Alarm 1 status: 1 = alarm active, 0 = alarm inactive */ +#define ADIS16240_DIAG_STAT_ALARM1 (1<<8) +/* Capture buffer full: 1 = capture buffer is full */ +#define ADIS16240_DIAG_STAT_CPT_BUF_FUL (1<<7) +/* Flash test, checksum flag: 1 = mismatch, 0 = match */ +#define ADIS16240_DIAG_STAT_CHKSUM (1<<6) +/* Power-on, self-test flag: 1 = failure, 0 = pass */ +#define ADIS16240_DIAG_STAT_PWRON_FAIL (1<<5) +/* Power-on self-test: 1 = in-progress, 0 = complete */ +#define ADIS16240_DIAG_STAT_PWRON_BUSY (1<<4) +/* SPI communications failure */ +#define ADIS16240_DIAG_STAT_SPI_FAIL (1<<3) +/* Flash update failure */ +#define ADIS16240_DIAG_STAT_FLASH_UPT (1<<2) +/* Power supply above 3.625 V */ +#define ADIS16240_DIAG_STAT_POWER_HIGH (1<<1) + /* Power supply below 3.15 V */ +#define ADIS16240_DIAG_STAT_POWER_LOW (1<<0) + +/* GLOB_CMD */ +#define ADIS16240_GLOB_CMD_RESUME (1<<8) +#define ADIS16240_GLOB_CMD_SW_RESET (1<<7) +#define ADIS16240_GLOB_CMD_STANDBY (1<<2) + +#define ADIS16240_ERROR_ACTIVE (1<<14) + +#define ADIS16240_MAX_TX 24 +#define ADIS16240_MAX_RX 24 + +/** + * struct adis16240_state - device instance specific data + * @us: actual spi_device + * @work_trigger_to_ring: bh for triggered event handling + * @work_cont_thresh: CLEAN + * @inter: used to check if new interrupt has been triggered + * @last_timestamp: passing timestamp from th to bh of interrupt handler + * @indio_dev: industrial I/O device structure + * @trig: data ready trigger registered with iio + * @tx: transmit buffer + * @rx: recieve buffer + * @buf_lock: mutex to protect tx and rx + **/ +struct adis16240_state { + struct spi_device *us; + struct work_struct work_trigger_to_ring; + struct iio_work_cont work_cont_thresh; + s64 last_timestamp; + struct iio_dev *indio_dev; + struct iio_trigger *trig; + u8 *tx; + u8 *rx; + struct mutex buf_lock; +}; + +int adis16240_set_irq(struct device *dev, bool enable); + +#ifdef CONFIG_IIO_RING_BUFFER +/* At the moment triggers are only used for ring buffer + * filling. This may change! + */ + +enum adis16240_scan { + ADIS16240_SCAN_SUPPLY, + ADIS16240_SCAN_ACC_X, + ADIS16240_SCAN_ACC_Y, + ADIS16240_SCAN_ACC_Z, + ADIS16240_SCAN_AUX_ADC, + ADIS16240_SCAN_TEMP, +}; + +void adis16240_remove_trigger(struct iio_dev *indio_dev); +int adis16240_probe_trigger(struct iio_dev *indio_dev); + +ssize_t adis16240_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf); + + +int adis16240_configure_ring(struct iio_dev *indio_dev); +void adis16240_unconfigure_ring(struct iio_dev *indio_dev); + +int adis16240_initialize_ring(struct iio_ring_buffer *ring); +void adis16240_uninitialize_ring(struct iio_ring_buffer *ring); +#else /* CONFIG_IIO_RING_BUFFER */ + +static inline void adis16240_remove_trigger(struct iio_dev *indio_dev) +{ +} + +static inline int adis16240_probe_trigger(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline ssize_t +adis16240_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return 0; +} + +static int adis16240_configure_ring(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline void adis16240_unconfigure_ring(struct iio_dev *indio_dev) +{ +} + +static inline int adis16240_initialize_ring(struct iio_ring_buffer *ring) +{ + return 0; +} + +static inline void adis16240_uninitialize_ring(struct iio_ring_buffer *ring) +{ +} + +#endif /* CONFIG_IIO_RING_BUFFER */ +#endif /* SPI_ADIS16240_H_ */ diff --git a/drivers/staging/iio/accel/adis16240_core.c b/drivers/staging/iio/accel/adis16240_core.c new file mode 100644 index 0000000..54fd6d7 --- /dev/null +++ b/drivers/staging/iio/accel/adis16240_core.c @@ -0,0 +1,599 @@ +/* + * ADIS16240 Programmable Impact Sensor and Recorder driver + * + * Copyright 2010 Analog Devices Inc. + * + * Licensed under the GPL-2 or later. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "accel.h" +#include "../adc/adc.h" + +#include "adis16240.h" + +#define DRIVER_NAME "adis16240" + +static int adis16240_check_status(struct device *dev); + +/** + * adis16240_spi_write_reg_8() - write single byte to a register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the register to be written + * @val: the value to write + **/ +static int adis16240_spi_write_reg_8(struct device *dev, + u8 reg_address, + u8 val) +{ + int ret; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16240_state *st = iio_dev_get_devdata(indio_dev); + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16240_WRITE_REG(reg_address); + st->tx[1] = val; + + ret = spi_write(st->us, st->tx, 2); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16240_spi_write_reg_16() - write 2 bytes to a pair of registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: value to be written + **/ +static int adis16240_spi_write_reg_16(struct device *dev, + u8 lower_reg_address, + u16 value) +{ + int ret; + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16240_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, { + .tx_buf = st->tx + 2, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16240_WRITE_REG(lower_reg_address); + st->tx[1] = value & 0xFF; + st->tx[2] = ADIS16240_WRITE_REG(lower_reg_address + 1); + st->tx[3] = (value >> 8) & 0xFF; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16240_spi_read_reg_16() - read 2 bytes from a 16-bit register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: somewhere to pass back the value read + **/ +static int adis16240_spi_read_reg_16(struct device *dev, + u8 lower_reg_address, + u16 *val) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16240_state *st = iio_dev_get_devdata(indio_dev); + int ret; + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, { + .rx_buf = st->rx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16240_READ_REG(lower_reg_address); + st->tx[1] = 0; + st->tx[2] = 0; + st->tx[3] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + if (ret) { + dev_err(&st->us->dev, + "problem when reading 16 bit register 0x%02X", + lower_reg_address); + goto error_ret; + } + *val = (st->rx[0] << 8) | st->rx[1]; + +error_ret: + mutex_unlock(&st->buf_lock); + return ret; +} + +static ssize_t adis16240_spi_read_signed(struct device *dev, + struct device_attribute *attr, + char *buf, + unsigned bits) +{ + int ret; + s16 val = 0; + unsigned shift = 16 - bits; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16240_spi_read_reg_16(dev, this_attr->address, (u16 *)&val); + if (ret) + return ret; + + if (val & ADIS16240_ERROR_ACTIVE) + adis16240_check_status(dev); + + val = ((s16)(val << shift) >> shift); + return sprintf(buf, "%d\n", val); +} + +static ssize_t adis16240_read_10bit_unsigned(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret; + u16 val = 0; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16240_spi_read_reg_16(dev, this_attr->address, &val); + if (ret) + return ret; + + if (val & ADIS16240_ERROR_ACTIVE) + adis16240_check_status(dev); + + return sprintf(buf, "%u\n", val & 0x03FF); +} + +static ssize_t adis16240_read_10bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16240_spi_read_signed(dev, attr, buf, 10); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16240_read_12bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16240_spi_read_signed(dev, attr, buf, 12); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16240_write_16bit(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + int ret; + long val; + + ret = strict_strtol(buf, 10, &val); + if (ret) + goto error_ret; + ret = adis16240_spi_write_reg_16(dev, this_attr->address, val); + +error_ret: + return ret ? ret : len; +} + +static int adis16240_reset(struct device *dev) +{ + int ret; + ret = adis16240_spi_write_reg_8(dev, + ADIS16240_GLOB_CMD, + ADIS16240_GLOB_CMD_SW_RESET); + if (ret) + dev_err(dev, "problem resetting device"); + + return ret; +} + +static ssize_t adis16240_write_reset(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + if (len < 1) + return -EINVAL; + switch (buf[0]) { + case '1': + case 'y': + case 'Y': + return adis16240_reset(dev); + } + return -EINVAL; +} + +int adis16240_set_irq(struct device *dev, bool enable) +{ + int ret = 0; + u16 msc; + + ret = adis16240_spi_read_reg_16(dev, ADIS16240_MSC_CTRL, &msc); + if (ret) + goto error_ret; + + msc |= ADIS16240_MSC_CTRL_ACTIVE_HIGH; + msc &= ~ADIS16240_MSC_CTRL_DATA_RDY_DIO2; + if (enable) + msc |= ADIS16240_MSC_CTRL_DATA_RDY_EN; + else + msc &= ~ADIS16240_MSC_CTRL_DATA_RDY_EN; + + ret = adis16240_spi_write_reg_16(dev, ADIS16240_MSC_CTRL, msc); + +error_ret: + return ret; +} + +static int adis16240_self_test(struct device *dev) +{ + int ret; + ret = adis16240_spi_write_reg_16(dev, + ADIS16240_MSC_CTRL, + ADIS16240_MSC_CTRL_SELF_TEST_EN); + if (ret) { + dev_err(dev, "problem starting self test"); + goto err_ret; + } + + msleep(ADIS16240_STARTUP_DELAY); + + adis16240_check_status(dev); + +err_ret: + return ret; +} + +static int adis16240_check_status(struct device *dev) +{ + u16 status; + int ret; + + ret = adis16240_spi_read_reg_16(dev, ADIS16240_DIAG_STAT, &status); + + if (ret < 0) { + dev_err(dev, "Reading status failed\n"); + goto error_ret; + } + + ret = status & 0x2F; + if (status & ADIS16240_DIAG_STAT_PWRON_FAIL) + dev_err(dev, "Power-on, self-test fail\n"); + if (status & ADIS16240_DIAG_STAT_SPI_FAIL) + dev_err(dev, "SPI failure\n"); + if (status & ADIS16240_DIAG_STAT_FLASH_UPT) + dev_err(dev, "Flash update failed\n"); + if (status & ADIS16240_DIAG_STAT_POWER_HIGH) + dev_err(dev, "Power supply above 3.625V\n"); + if (status & ADIS16240_DIAG_STAT_POWER_LOW) + dev_err(dev, "Power supply below 2.225V\n"); + +error_ret: + return ret; +} + +static int adis16240_initial_setup(struct adis16240_state *st) +{ + int ret; + struct device *dev = &st->indio_dev->dev; + + /* Disable IRQ */ + ret = adis16240_set_irq(dev, false); + if (ret) { + dev_err(dev, "disable irq failed"); + goto err_ret; + } + + /* Do self test */ + ret = adis16240_self_test(dev); + if (ret) { + dev_err(dev, "self test failure"); + goto err_ret; + } + + /* Read status register to check the result */ + ret = adis16240_check_status(dev); + if (ret) { + adis16240_reset(dev); + dev_err(dev, "device not playing ball -> reset"); + msleep(ADIS16240_STARTUP_DELAY); + ret = adis16240_check_status(dev); + if (ret) { + dev_err(dev, "giving up"); + goto err_ret; + } + } + + printk(KERN_INFO DRIVER_NAME ": at CS%d (irq %d)\n", + st->us->chip_select, st->us->irq); + +err_ret: + return ret; +} + +static IIO_DEV_ATTR_IN_NAMED_RAW(supply, adis16240_read_10bit_unsigned, + ADIS16240_SUPPLY_OUT); +static IIO_DEV_ATTR_IN_RAW(0, adis16240_read_10bit_signed, + ADIS16240_AUX_ADC); +static IIO_CONST_ATTR(in_supply_scale, "0.00488"); +static IIO_DEV_ATTR_ACCEL_X(adis16240_read_10bit_signed, + ADIS16240_XACCL_OUT); +static IIO_DEVICE_ATTR(accel_x_peak_raw, S_IRUGO, + adis16240_read_10bit_signed, NULL, + ADIS16240_XPEAK_OUT); +static IIO_DEV_ATTR_ACCEL_Y(adis16240_read_10bit_signed, + ADIS16240_YACCL_OUT); +static IIO_DEVICE_ATTR(accel_y_peak_raw, S_IRUGO, + adis16240_read_10bit_signed, NULL, + ADIS16240_YPEAK_OUT); +static IIO_DEV_ATTR_ACCEL_Z(adis16240_read_10bit_signed, + ADIS16240_ZACCL_OUT); +static IIO_DEVICE_ATTR(accel_z_peak_raw, S_IRUGO, + adis16240_read_10bit_signed, NULL, + ADIS16240_ZPEAK_OUT); + +static IIO_DEVICE_ATTR(accel_xyz_squared_peak_raw, S_IRUGO, + adis16240_read_12bit_signed, NULL, + ADIS16240_XYZPEAK_OUT); +static IIO_DEV_ATTR_ACCEL_X_OFFSET(S_IWUSR | S_IRUGO, + adis16240_read_10bit_signed, + adis16240_write_16bit, + ADIS16240_XACCL_OFF); +static IIO_DEV_ATTR_ACCEL_Y_OFFSET(S_IWUSR | S_IRUGO, + adis16240_read_10bit_signed, + adis16240_write_16bit, + ADIS16240_YACCL_OFF); +static IIO_DEV_ATTR_ACCEL_Z_OFFSET(S_IWUSR | S_IRUGO, + adis16240_read_10bit_signed, + adis16240_write_16bit, + ADIS16240_ZACCL_OFF); +static IIO_DEV_ATTR_TEMP_RAW(adis16240_read_10bit_unsigned); +static IIO_CONST_ATTR(temp_scale, "0.244"); + +static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16240_write_reset, 0); + +static IIO_CONST_ATTR_AVAIL_SAMP_FREQ("4096"); + +static IIO_CONST_ATTR(name, "adis16240"); + +static struct attribute *adis16240_event_attributes[] = { + NULL +}; + +static struct attribute_group adis16240_event_attribute_group = { + .attrs = adis16240_event_attributes, +}; + +static struct attribute *adis16240_attributes[] = { + &iio_dev_attr_in_supply_raw.dev_attr.attr, + &iio_const_attr_in_supply_scale.dev_attr.attr, + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_dev_attr_accel_x_raw.dev_attr.attr, + &iio_dev_attr_accel_x_offset.dev_attr.attr, + &iio_dev_attr_accel_x_peak_raw.dev_attr.attr, + &iio_dev_attr_accel_y_raw.dev_attr.attr, + &iio_dev_attr_accel_y_offset.dev_attr.attr, + &iio_dev_attr_accel_y_peak_raw.dev_attr.attr, + &iio_dev_attr_accel_z_raw.dev_attr.attr, + &iio_dev_attr_accel_z_offset.dev_attr.attr, + &iio_dev_attr_accel_z_peak_raw.dev_attr.attr, + &iio_dev_attr_accel_xyz_squared_peak_raw.dev_attr.attr, + &iio_dev_attr_temp_raw.dev_attr.attr, + &iio_const_attr_temp_scale.dev_attr.attr, + &iio_const_attr_available_sampling_frequency.dev_attr.attr, + &iio_dev_attr_reset.dev_attr.attr, + &iio_const_attr_name.dev_attr.attr, + NULL +}; + +static const struct attribute_group adis16240_attribute_group = { + .attrs = adis16240_attributes, +}; + +static int __devinit adis16240_probe(struct spi_device *spi) +{ + int ret, regdone = 0; + struct adis16240_state *st = kzalloc(sizeof *st, GFP_KERNEL); + if (!st) { + ret = -ENOMEM; + goto error_ret; + } + /* this is only used for removal purposes */ + spi_set_drvdata(spi, st); + + /* Allocate the comms buffers */ + st->rx = kzalloc(sizeof(*st->rx)*ADIS16240_MAX_RX, GFP_KERNEL); + if (st->rx == NULL) { + ret = -ENOMEM; + goto error_free_st; + } + st->tx = kzalloc(sizeof(*st->tx)*ADIS16240_MAX_TX, GFP_KERNEL); + if (st->tx == NULL) { + ret = -ENOMEM; + goto error_free_rx; + } + st->us = spi; + mutex_init(&st->buf_lock); + /* setup the industrialio driver allocated elements */ + st->indio_dev = iio_allocate_device(); + if (st->indio_dev == NULL) { + ret = -ENOMEM; + goto error_free_tx; + } + + st->indio_dev->dev.parent = &spi->dev; + st->indio_dev->num_interrupt_lines = 1; + st->indio_dev->event_attrs = &adis16240_event_attribute_group; + st->indio_dev->attrs = &adis16240_attribute_group; + st->indio_dev->dev_data = (void *)(st); + st->indio_dev->driver_module = THIS_MODULE; + st->indio_dev->modes = INDIO_DIRECT_MODE; + + ret = adis16240_configure_ring(st->indio_dev); + if (ret) + goto error_free_dev; + + ret = iio_device_register(st->indio_dev); + if (ret) + goto error_unreg_ring_funcs; + regdone = 1; + + ret = adis16240_initialize_ring(st->indio_dev->ring); + if (ret) { + printk(KERN_ERR "failed to initialize the ring\n"); + goto error_unreg_ring_funcs; + } + + if (spi->irq) { + ret = iio_register_interrupt_line(spi->irq, + st->indio_dev, + 0, + IRQF_TRIGGER_RISING, + "adis16240"); + if (ret) + goto error_uninitialize_ring; + + ret = adis16240_probe_trigger(st->indio_dev); + if (ret) + goto error_unregister_line; + } + + /* Get the device into a sane initial state */ + ret = adis16240_initial_setup(st); + if (ret) + goto error_remove_trigger; + return 0; + +error_remove_trigger: + adis16240_remove_trigger(st->indio_dev); +error_unregister_line: + if (spi->irq) + iio_unregister_interrupt_line(st->indio_dev, 0); +error_uninitialize_ring: + adis16240_uninitialize_ring(st->indio_dev->ring); +error_unreg_ring_funcs: + adis16240_unconfigure_ring(st->indio_dev); +error_free_dev: + if (regdone) + iio_device_unregister(st->indio_dev); + else + iio_free_device(st->indio_dev); +error_free_tx: + kfree(st->tx); +error_free_rx: + kfree(st->rx); +error_free_st: + kfree(st); +error_ret: + return ret; +} + +static int adis16240_remove(struct spi_device *spi) +{ + struct adis16240_state *st = spi_get_drvdata(spi); + struct iio_dev *indio_dev = st->indio_dev; + + flush_scheduled_work(); + + adis16240_remove_trigger(indio_dev); + if (spi->irq) + iio_unregister_interrupt_line(indio_dev, 0); + + adis16240_uninitialize_ring(indio_dev->ring); + iio_device_unregister(indio_dev); + adis16240_unconfigure_ring(indio_dev); + kfree(st->tx); + kfree(st->rx); + kfree(st); + + return 0; +} + +static struct spi_driver adis16240_driver = { + .driver = { + .name = "adis16240", + .owner = THIS_MODULE, + }, + .probe = adis16240_probe, + .remove = __devexit_p(adis16240_remove), +}; + +static __init int adis16240_init(void) +{ + return spi_register_driver(&adis16240_driver); +} +module_init(adis16240_init); + +static __exit void adis16240_exit(void) +{ + spi_unregister_driver(&adis16240_driver); +} +module_exit(adis16240_exit); + +MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>"); +MODULE_DESCRIPTION("Analog Devices Programmable Impact Sensor and Recorder"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/iio/accel/adis16240_ring.c b/drivers/staging/iio/accel/adis16240_ring.c new file mode 100644 index 0000000..26b677b --- /dev/null +++ b/drivers/staging/iio/accel/adis16240_ring.c @@ -0,0 +1,254 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../ring_sw.h" +#include "accel.h" +#include "../trigger.h" +#include "adis16240.h" + +/** + * combine_8_to_16() utility function to munge to u8s into u16 + **/ +static inline u16 combine_8_to_16(u8 lower, u8 upper) +{ + u16 _lower = lower; + u16 _upper = upper; + return _lower | (_upper << 8); +} + +static IIO_SCAN_EL_C(supply, ADIS16240_SCAN_SUPPLY, IIO_UNSIGNED(10), + ADIS16240_SUPPLY_OUT, NULL); +static IIO_SCAN_EL_C(accel_x, ADIS16240_SCAN_ACC_X, IIO_SIGNED(10), + ADIS16240_XACCL_OUT, NULL); +static IIO_SCAN_EL_C(accel_y, ADIS16240_SCAN_ACC_Y, IIO_SIGNED(10), + ADIS16240_YACCL_OUT, NULL); +static IIO_SCAN_EL_C(accel_z, ADIS16240_SCAN_ACC_Z, IIO_SIGNED(10), + ADIS16240_ZACCL_OUT, NULL); +static IIO_SCAN_EL_C(aux_adc, ADIS16240_SCAN_AUX_ADC, IIO_UNSIGNED(10), + ADIS16240_AUX_ADC, NULL); +static IIO_SCAN_EL_C(temp, ADIS16240_SCAN_TEMP, IIO_UNSIGNED(10), + ADIS16240_TEMP_OUT, NULL); + +static IIO_SCAN_EL_TIMESTAMP(6); + +static struct attribute *adis16240_scan_el_attrs[] = { + &iio_scan_el_supply.dev_attr.attr, + &iio_scan_el_accel_x.dev_attr.attr, + &iio_scan_el_accel_y.dev_attr.attr, + &iio_scan_el_accel_z.dev_attr.attr, + &iio_scan_el_aux_adc.dev_attr.attr, + &iio_scan_el_temp.dev_attr.attr, + &iio_scan_el_timestamp.dev_attr.attr, + NULL, +}; + +static struct attribute_group adis16240_scan_el_group = { + .attrs = adis16240_scan_el_attrs, + .name = "scan_elements", +}; + +/** + * adis16240_poll_func_th() top half interrupt handler called by trigger + * @private_data: iio_dev + **/ +static void adis16240_poll_func_th(struct iio_dev *indio_dev) +{ + struct adis16240_state *st = iio_dev_get_devdata(indio_dev); + st->last_timestamp = indio_dev->trig->timestamp; + schedule_work(&st->work_trigger_to_ring); +} + +/** + * adis16240_read_ring_data() read data registers which will be placed into ring + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @rx: somewhere to pass back the value read + **/ +static int adis16240_read_ring_data(struct device *dev, u8 *rx) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16240_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[ADIS16240_OUTPUTS + 1]; + int ret; + int i; + + mutex_lock(&st->buf_lock); + + spi_message_init(&msg); + + memset(xfers, 0, sizeof(xfers)); + for (i = 0; i <= ADIS16240_OUTPUTS; i++) { + xfers[i].bits_per_word = 8; + xfers[i].cs_change = 1; + xfers[i].len = 2; + xfers[i].delay_usecs = 30; + xfers[i].tx_buf = st->tx + 2 * i; + st->tx[2 * i] + = ADIS16240_READ_REG(ADIS16240_SUPPLY_OUT + 2 * i); + st->tx[2 * i + 1] = 0; + if (i >= 1) + xfers[i].rx_buf = rx + 2 * (i - 1); + spi_message_add_tail(&xfers[i], &msg); + } + + ret = spi_sync(st->us, &msg); + if (ret) + dev_err(&st->us->dev, "problem when burst reading"); + + mutex_unlock(&st->buf_lock); + + return ret; +} + + +static void adis16240_trigger_bh_to_ring(struct work_struct *work_s) +{ + struct adis16240_state *st + = container_of(work_s, struct adis16240_state, + work_trigger_to_ring); + + int i = 0; + s16 *data; + size_t datasize = st->indio_dev + ->ring->access.get_bpd(st->indio_dev->ring); + + data = kmalloc(datasize , GFP_KERNEL); + if (data == NULL) { + dev_err(&st->us->dev, "memory alloc failed in ring bh"); + return; + } + + if (st->indio_dev->scan_count) + if (adis16240_read_ring_data(&st->indio_dev->dev, st->rx) >= 0) + for (; i < st->indio_dev->scan_count; i++) { + data[i] = combine_8_to_16(st->rx[i*2+1], + st->rx[i*2]); + } + + /* Guaranteed to be aligned with 8 byte boundary */ + if (st->indio_dev->scan_timestamp) + *((s64 *)(data + ((i + 3)/4)*4)) = st->last_timestamp; + + st->indio_dev->ring->access.store_to(st->indio_dev->ring, + (u8 *)data, + st->last_timestamp); + + iio_trigger_notify_done(st->indio_dev->trig); + kfree(data); + + return; +} + +static int adis16240_data_rdy_ring_preenable(struct iio_dev *indio_dev) +{ + size_t size; + dev_dbg(&indio_dev->dev, "%s\n", __func__); + /* Check if there are any scan elements enabled, if not fail*/ + if (!(indio_dev->scan_count || indio_dev->scan_timestamp)) + return -EINVAL; + + if (indio_dev->ring->access.set_bpd) { + if (indio_dev->scan_timestamp) + if (indio_dev->scan_count) + /* Timestamp (aligned sizeof(s64) and data */ + size = (((indio_dev->scan_count * sizeof(s16)) + + sizeof(s64) - 1) + & ~(sizeof(s64) - 1)) + + sizeof(s64); + else /* Timestamp only */ + size = sizeof(s64); + else /* Data only */ + size = indio_dev->scan_count*sizeof(s16); + indio_dev->ring->access.set_bpd(indio_dev->ring, size); + } + + return 0; +} + +static int adis16240_data_rdy_ring_postenable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_attach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +static int adis16240_data_rdy_ring_predisable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_dettach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +void adis16240_unconfigure_ring(struct iio_dev *indio_dev) +{ + kfree(indio_dev->pollfunc); + iio_sw_rb_free(indio_dev->ring); +} + +int adis16240_configure_ring(struct iio_dev *indio_dev) +{ + int ret = 0; + struct adis16240_state *st = indio_dev->dev_data; + struct iio_ring_buffer *ring; + INIT_WORK(&st->work_trigger_to_ring, adis16240_trigger_bh_to_ring); + /* Set default scan mode */ + + iio_scan_mask_set(indio_dev, iio_scan_el_supply.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_y.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_z.number); + iio_scan_mask_set(indio_dev, iio_scan_el_temp.number); + iio_scan_mask_set(indio_dev, iio_scan_el_aux_adc.number); + indio_dev->scan_timestamp = true; + + indio_dev->scan_el_attrs = &adis16240_scan_el_group; + + ring = iio_sw_rb_allocate(indio_dev); + if (!ring) { + ret = -ENOMEM; + return ret; + } + indio_dev->ring = ring; + /* Effectively select the ring buffer implementation */ + iio_ring_sw_register_funcs(&ring->access); + ring->preenable = &adis16240_data_rdy_ring_preenable; + ring->postenable = &adis16240_data_rdy_ring_postenable; + ring->predisable = &adis16240_data_rdy_ring_predisable; + ring->owner = THIS_MODULE; + + indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); + if (indio_dev->pollfunc == NULL) { + ret = -ENOMEM; + goto error_iio_sw_rb_free;; + } + indio_dev->pollfunc->poll_func_main = &adis16240_poll_func_th; + indio_dev->pollfunc->private_data = indio_dev; + indio_dev->modes |= INDIO_RING_TRIGGERED; + return 0; + +error_iio_sw_rb_free: + iio_sw_rb_free(indio_dev->ring); + return ret; +} + +int adis16240_initialize_ring(struct iio_ring_buffer *ring) +{ + return iio_ring_buffer_register(ring, 0); +} + +void adis16240_uninitialize_ring(struct iio_ring_buffer *ring) +{ + iio_ring_buffer_unregister(ring); +} diff --git a/drivers/staging/iio/accel/adis16240_trigger.c b/drivers/staging/iio/accel/adis16240_trigger.c new file mode 100644 index 0000000..df1312e --- /dev/null +++ b/drivers/staging/iio/accel/adis16240_trigger.c @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../trigger.h" +#include "adis16240.h" + +/** + * adis16240_data_rdy_trig_poll() the event handler for the data rdy trig + **/ +static int adis16240_data_rdy_trig_poll(struct iio_dev *dev_info, + int index, + s64 timestamp, + int no_test) +{ + struct adis16240_state *st = iio_dev_get_devdata(dev_info); + struct iio_trigger *trig = st->trig; + + trig->timestamp = timestamp; + iio_trigger_poll(trig); + + return IRQ_HANDLED; +} + +IIO_EVENT_SH(data_rdy_trig, &adis16240_data_rdy_trig_poll); + +static DEVICE_ATTR(name, S_IRUGO, iio_trigger_read_name, NULL); + +static struct attribute *adis16240_trigger_attrs[] = { + &dev_attr_name.attr, + NULL, +}; + +static const struct attribute_group adis16240_trigger_attr_group = { + .attrs = adis16240_trigger_attrs, +}; + +/** + * adis16240_data_rdy_trigger_set_state() set datardy interrupt state + **/ +static int adis16240_data_rdy_trigger_set_state(struct iio_trigger *trig, + bool state) +{ + struct adis16240_state *st = trig->private_data; + struct iio_dev *indio_dev = st->indio_dev; + int ret = 0; + + dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state); + ret = adis16240_set_irq(&st->indio_dev->dev, state); + if (state == false) { + iio_remove_event_from_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0] + ->ev_list); + flush_scheduled_work(); + } else { + iio_add_event_to_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0]->ev_list); + } + return ret; +} + +/** + * adis16240_trig_try_reen() try renabling irq for data rdy trigger + * @trig: the datardy trigger + **/ +static int adis16240_trig_try_reen(struct iio_trigger *trig) +{ + struct adis16240_state *st = trig->private_data; + enable_irq(st->us->irq); + return 0; +} + +int adis16240_probe_trigger(struct iio_dev *indio_dev) +{ + int ret; + struct adis16240_state *st = indio_dev->dev_data; + + st->trig = iio_allocate_trigger(); + st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL); + if (!st->trig->name) { + ret = -ENOMEM; + goto error_free_trig; + } + snprintf((char *)st->trig->name, + IIO_TRIGGER_NAME_LENGTH, + "adis16240-dev%d", indio_dev->id); + st->trig->dev.parent = &st->us->dev; + st->trig->owner = THIS_MODULE; + st->trig->private_data = st; + st->trig->set_trigger_state = &adis16240_data_rdy_trigger_set_state; + st->trig->try_reenable = &adis16240_trig_try_reen; + st->trig->control_attrs = &adis16240_trigger_attr_group; + ret = iio_trigger_register(st->trig); + + /* select default trigger */ + indio_dev->trig = st->trig; + if (ret) + goto error_free_trig_name; + + return 0; + +error_free_trig_name: + kfree(st->trig->name); +error_free_trig: + iio_free_trigger(st->trig); + + return ret; +} + +void adis16240_remove_trigger(struct iio_dev *indio_dev) +{ + struct adis16240_state *state = indio_dev->dev_data; + + iio_trigger_unregister(state->trig); + kfree(state->trig->name); + iio_free_trigger(state->trig); +} -- cgit v0.10.2 From e390b07bc50fc96caa15c594374782e472c27419 Mon Sep 17 00:00:00 2001 From: Matthias Brugger Date: Fri, 7 May 2010 21:39:56 +0200 Subject: staging: adis16255 - TODO issues resolved and typos removed This patch adds the adis16255 driver to the build system under the staging directory. It solves also most issues mentioned in TODO list: - sample rate exported to sysfs - spi_adis16255_bringup and spi_adis16255_shutdown encapsulated - chip selftest in spi_adis16255_bringup - kernel messages reduced to a reasonable number I removed the TODO file, because ther was only the reset of the gyroscope left. This is IMOH not necessary for the actual driver. There are also some typos in adis.c file. This patch should get rid of them as well. Signed-off-by: Matthias Brugger Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig index e062b09..06d3b10 100644 --- a/drivers/staging/Kconfig +++ b/drivers/staging/Kconfig @@ -137,5 +137,7 @@ source "drivers/staging/cxt1e1/Kconfig" source "drivers/staging/ti-st/Kconfig" +source "drivers/staging/adis16255/Kconfig" + endif # !STAGING_EXCLUDE_BUILD endif # STAGING diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 097c158..5526870 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -49,3 +49,4 @@ obj-$(CONFIG_VIDEO_DT3155) += dt3155v4l/ obj-$(CONFIG_CRYSTALHD) += crystalhd/ obj-$(CONFIG_CXT1E1) += cxt1e1/ obj-$(CONFIG_TI_ST) += ti-st/ +obj-$(CONFIG_ADIS16255)) += adis16255/ diff --git a/drivers/staging/adis16255/Kconfig b/drivers/staging/adis16255/Kconfig index 3952cf9..a642be6 100644 --- a/drivers/staging/adis16255/Kconfig +++ b/drivers/staging/adis16255/Kconfig @@ -2,8 +2,10 @@ config ADIS16255 tristate "Ananlog Devices ADIS16250/16255" depends on SPI && SYSFS ---help--- - If you say yes here you get support for the Analog Devices - ADIS16250/16255 Low Power Gyroscope. + If you say yes here you get support for the Analog Devices + ADIS16250/16255 Low Power Gyroscope. The driver exposes + orientation and gyroscope value, as well as sample rate + to the sysfs. - This driver can also be built as a module. If so, the module - will be called adis16255. + This driver can also be built as a module. If so, the module + will be called adis16255. diff --git a/drivers/staging/adis16255/Makefile b/drivers/staging/adis16255/Makefile index 8057372..8c39081 100644 --- a/drivers/staging/adis16255/Makefile +++ b/drivers/staging/adis16255/Makefile @@ -1 +1 @@ -obj-$(CONFIG_ADIS16255) += adis1625.o +obj-$(CONFIG_ADIS16255) += adis16255.o diff --git a/drivers/staging/adis16255/TODO b/drivers/staging/adis16255/TODO deleted file mode 100644 index 31e4ac3..0000000 --- a/drivers/staging/adis16255/TODO +++ /dev/null @@ -1,8 +0,0 @@ -* sample rate changeable or at least readable from sysfs -* reset gyroscope -* encapsulate adis_init and adis_turn_off -* AD_CHK deletion -* chip selftest in adis_init -* reduce kernel messages to reasonable amount - -Contact: Matthias Brugger diff --git a/drivers/staging/adis16255/adis16255.c b/drivers/staging/adis16255/adis16255.c index 8d11069..1ba11f0 100644 --- a/drivers/staging/adis16255/adis16255.c +++ b/drivers/staging/adis16255/adis16255.c @@ -21,6 +21,14 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* + * The driver just has a bare interface to the sysfs (sample rate in Hz, + * orientation (x, y, z) and gyroscope data in °/sec. + * + * It should be added to iio subsystem when this has left staging. + * + */ + #include #include #include @@ -62,14 +70,13 @@ * @data: Last read data from device. * @irq_adis: GPIO Number of IRQ signal * @irq: irq line manage by kernel - * @negative: indicates if sensor is upside down (negative ÿ1) + * @negative: indicates if sensor is upside down (negative == 1) * @direction: indicates axis (x, y, z) the sensor is meassuring */ struct spi_adis16255_data { struct device dev; struct spi_device *spi; s16 data; - int irq_adis; int irq; u8 negative; char direction; @@ -81,47 +88,44 @@ static int spi_adis16255_read_data(struct spi_adis16255_data *spiadis, u8 adr, u8 *rbuf) { - struct spi_device *spi ÿpiadis->spi; + struct spi_device *spi = spiadis->spi; struct spi_message msg; struct spi_transfer xfer1, xfer2; u8 *buf, *rx; int ret; - buf ÿmalloc(4, GFP_KERNEL); - if (buf ÿNULL) + buf = kzalloc(4, GFP_KERNEL); + if (buf == NULL) return -ENOMEM; - rx ÿzalloc(4, GFP_KERNEL); - if (rx ÿNULL) { - ret ÿENOMEM; + rx = kzalloc(4, GFP_KERNEL); + if (rx == NULL) { + ret = -ENOMEM; goto err_buf; } - buf[0] údr; - buf[1] ðx00; - buf[2] ðx00; - buf[3] ðx00; + buf[0] = adr; spi_message_init(&msg); memset(&xfer1, 0, sizeof(xfer1)); memset(&xfer2, 0, sizeof(xfer2)); - xfer1.tx_buf ûuf; - xfer1.rx_buf ûuf + 2; - xfer1.len ò; - xfer1.delay_usecs ù; + xfer1.tx_buf = buf; + xfer1.rx_buf = buf + 2; + xfer1.len = 2; + xfer1.delay_usecs = 9; - xfer2.tx_buf ÿx + 2; - xfer2.rx_buf ÿx; - xfer2.len ò; + xfer2.tx_buf = rx + 2; + xfer2.rx_buf = rx; + xfer2.len = 2; spi_message_add_tail(&xfer1, &msg); spi_message_add_tail(&xfer2, &msg); - ret ÿpi_sync(spi, &msg); - if (ret ÿ0) { - rbuf[0] ÿx[0]; - rbuf[1] ÿx[1]; + ret = spi_sync(spi, &msg); + if (ret == 0) { + rbuf[0] = rx[0]; + rbuf[1] = rx[1]; } kfree(rx); @@ -136,19 +140,19 @@ static int spi_adis16255_write_data(struct spi_adis16255_data *spiadis, u8 adr2, u8 *wbuf) { - struct spi_device *spi ÿpiadis->spi; + struct spi_device *spi = spiadis->spi; struct spi_message msg; struct spi_transfer xfer1, xfer2; u8 *buf, *rx; int ret; - buf ÿmalloc(4, GFP_KERNEL); - if (buf ÿNULL) + buf = kmalloc(4, GFP_KERNEL); + if (buf == NULL) return -ENOMEM; - rx ÿzalloc(4, GFP_KERNEL); - if (rx ÿNULL) { - ret ÿENOMEM; + rx = kzalloc(4, GFP_KERNEL); + if (rx == NULL) { + ret = -ENOMEM; goto err_buf; } @@ -156,27 +160,27 @@ static int spi_adis16255_write_data(struct spi_adis16255_data *spiadis, memset(&xfer1, 0, sizeof(xfer1)); memset(&xfer2, 0, sizeof(xfer2)); - buf[0] údr1 | 0x80; - buf[1] ÿwbuf; + buf[0] = adr1 | 0x80; + buf[1] = *wbuf; - buf[2] údr2 | 0x80; - buf[3] ÿ(wbuf + 1); + buf[2] = adr2 | 0x80; + buf[3] = *(wbuf + 1); - xfer1.tx_buf ûuf; - xfer1.rx_buf ÿx; - xfer1.len ò; - xfer1.delay_usecs ù; + xfer1.tx_buf = buf; + xfer1.rx_buf = rx; + xfer1.len = 2; + xfer1.delay_usecs = 9; - xfer2.tx_buf ûuf+2; - xfer2.rx_buf ÿx+2; - xfer2.len ò; + xfer2.tx_buf = buf+2; + xfer2.rx_buf = rx+2; + xfer2.len = 2; spi_message_add_tail(&xfer1, &msg); spi_message_add_tail(&xfer2, &msg); - ret ÿpi_sync(spi, &msg); - if (ret !ð) - dev_warn(&spi->dev, "wirte data to %#x %#x failed\n", + ret = spi_sync(spi, &msg); + if (ret != 0) + dev_warn(&spi->dev, "write data to %#x %#x failed\n", buf[0], buf[2]); kfree(rx); @@ -189,29 +193,31 @@ err_buf: static irqreturn_t adis_irq_thread(int irq, void *dev_id) { - struct spi_adis16255_data *spiadis ýev_id; + struct spi_adis16255_data *spiadis = dev_id; int status; - u16 value; - - status ÿspi_adis16255_read_data(spiadis, ADIS_GYRO_OUT, (u8 *)&value); - if (status ÿ0) { - /* perform on new data only... */ - if (value & 0x8000) { - /* delete error and new data bit */ - value ÿalue & 0x3fff; - /* set negative value */ - if (value & 0x2000) - value ÿalue | 0xe000; - - if (likely(spiadis->negative)) - value ÿvalue; - - spiadis->data ÿs16) value; - } - } else { + u16 value = 0; + + status = spi_adis16255_read_data(spiadis, ADIS_GYRO_OUT, (u8 *)&value); + if (status != 0) { dev_warn(&spiadis->spi->dev, "SPI FAILED\n"); + goto exit; } + /* perform on new data only... */ + if (value & 0x8000) { + /* delete error and new data bit */ + value = value & 0x3fff; + /* set negative value */ + if (value & 0x2000) + value = value | 0xe000; + + if (likely(spiadis->negative)) + value = -value; + + spiadis->data = (s16) value; + } + +exit: return IRQ_HANDLED; } @@ -221,7 +227,7 @@ ssize_t adis16255_show_data(struct device *device, struct device_attribute *da, char *buf) { - struct spi_adis16255_data *spiadis ýev_get_drvdata(device); + struct spi_adis16255_data *spiadis = dev_get_drvdata(device); return snprintf(buf, PAGE_SIZE, "%d\n", spiadis->data); } DEVICE_ATTR(data, S_IRUGO , adis16255_show_data, NULL); @@ -230,112 +236,186 @@ ssize_t adis16255_show_direction(struct device *device, struct device_attribute *da, char *buf) { - struct spi_adis16255_data *spiadis ýev_get_drvdata(device); + struct spi_adis16255_data *spiadis = dev_get_drvdata(device); return snprintf(buf, PAGE_SIZE, "%c\n", spiadis->direction); } DEVICE_ATTR(direction, S_IRUGO , adis16255_show_direction, NULL); -static struct attribute *adis16255_attributes[] ÿ +ssize_t adis16255_show_sample_rate(struct device *device, + struct device_attribute *da, + char *buf) +{ + struct spi_adis16255_data *spiadis = dev_get_drvdata(device); + int status = 0; + u16 value = 0; + int ts = 0; + + status = spi_adis16255_read_data(spiadis, ADIS_SMPL_PRD_MSB, + (u8 *)&value); + if (status != 0) + return -EINVAL; + + if (value & 0x80) { + /* timebase = 60.54 ms */ + ts = 60540 * ((0x7f & value) + 1); + } else { + /* timebase = 1.953 ms */ + ts = 1953 * ((0x7f & value) + 1); + } + + return snprintf(buf, PAGE_SIZE, "%d\n", (1000*1000)/ts); +} +DEVICE_ATTR(sample_rate, S_IRUGO , adis16255_show_sample_rate, NULL); + +static struct attribute *adis16255_attributes[] = { &dev_attr_data.attr, &dev_attr_direction.attr, + &dev_attr_sample_rate.attr, NULL }; -static const struct attribute_group adis16255_attr_group ÿ - .attrs údis16255_attributes, +static const struct attribute_group adis16255_attr_group = { + .attrs = adis16255_attributes, }; /*-------------------------------------------------------------------------*/ -static int spi_adis16255_probe(struct spi_device *spi) +static int spi_adis16255_shutdown(struct spi_adis16255_data *spiadis) +{ + u16 value = 0; + /* turn sensor off */ + spi_adis16255_write_data(spiadis, + ADIS_SMPL_PRD_MSB, ADIS_SMPL_PRD_LSB, + (u8 *)&value); + spi_adis16255_write_data(spiadis, + ADIS_MSC_CTRL_MSB, ADIS_MSC_CTRL_LSB, + (u8 *)&value); + return 0; +} + +static int spi_adis16255_bringup(struct spi_adis16255_data *spiadis) { + int status = 0; + u16 value = 0; + + status = spi_adis16255_read_data(spiadis, ADIS_GYRO_SCALE, + (u8 *)&value); + if (status != 0) + goto err; + if (value != 0x0800) { + dev_warn(&spiadis->spi->dev, "Scale factor is none default" + "value (%.4x)\n", value); + } + + /* timebase = 1.953 ms, Ns = 0 -> 512 Hz sample rate */ + value = 0x0001; + status = spi_adis16255_write_data(spiadis, + ADIS_SMPL_PRD_MSB, ADIS_SMPL_PRD_LSB, + (u8 *)&value); + if (status != 0) + goto err; + + /* start internal self-test */ + value = 0x0400; + status = spi_adis16255_write_data(spiadis, + ADIS_MSC_CTRL_MSB, ADIS_MSC_CTRL_LSB, + (u8 *)&value); + if (status != 0) + goto err; + + /* wait 35 ms to finish self-test */ + msleep(35); + + value = 0x0000; + status = spi_adis16255_read_data(spiadis, ADIS_STATUS, + (u8 *)&value); + if (status != 0) + goto err; + + if (value & 0x23) { + if (value & 0x20) { + dev_warn(&spiadis->spi->dev, "self-test error\n"); + status = -ENODEV; + goto err; + } else if (value & 0x3) { + dev_warn(&spiadis->spi->dev, "Sensor voltage" + "out of range.\n"); + status = -ENODEV; + goto err; + } + } -#define AD_CHK(_ss)\ - do {\ - status ÿss;\ - if (status !ð)\ - goto irq_err;\ - } while (0); + /* set interrupt to active high on DIO0 when data ready */ + value = 0x0006; + status = spi_adis16255_write_data(spiadis, + ADIS_MSC_CTRL_MSB, ADIS_MSC_CTRL_LSB, + (u8 *)&value); + if (status != 0) + goto err; + return status; + +err: + spi_adis16255_shutdown(spiadis); + return status; +} + +/*-------------------------------------------------------------------------*/ - struct adis16255_init_data *init_data ÿpi->dev.platform_data; +static int spi_adis16255_probe(struct spi_device *spi) +{ + + struct adis16255_init_data *init_data = spi->dev.platform_data; struct spi_adis16255_data *spiadis; - int status ð; - u16 value; + int status = 0; - spiadis ÿzalloc(sizeof(*spiadis), GFP_KERNEL); + spiadis = kzalloc(sizeof(*spiadis), GFP_KERNEL); if (!spiadis) return -ENOMEM; - spiadis->spi ÿpi; - spiadis->irq_adis ÿnit_data->irq; - spiadis->direction ÿnit_data->direction; + spiadis->spi = spi; + spiadis->direction = init_data->direction; if (init_data->negative) - spiadis->negative ñ; + spiadis->negative = 1; - status ÿpio_request(spiadis->irq_adis, "adis16255"); - if (status !ð) + status = gpio_request(init_data->irq, "adis16255"); + if (status != 0) goto err; - status ÿpio_direction_input(spiadis->irq_adis); - if (status !ð) + status = gpio_direction_input(init_data->irq); + if (status != 0) goto gpio_err; - spiadis->irq ÿpio_to_irq(spiadis->irq_adis); + spiadis->irq = gpio_to_irq(init_data->irq); - status ÿequest_threaded_irq(spiadis->irq, + status = request_threaded_irq(spiadis->irq, NULL, adis_irq_thread, IRQF_DISABLED, "adis-driver", spiadis); - if (status !ð) { + if (status != 0) { dev_err(&spi->dev, "IRQ request failed\n"); goto gpio_err; } - dev_dbg(&spi->dev, "GPIO %d IRQ %d\n", spiadis->irq_adis, spiadis->irq); + dev_dbg(&spi->dev, "GPIO %d IRQ %d\n", init_data->irq, spiadis->irq); dev_set_drvdata(&spi->dev, spiadis); - AD_CHK(sysfs_create_group(&spi->dev.kobj, &adis16255_attr_group)); - - dev_info(&spi->dev, "spi_adis16255 driver added!\n"); + status = sysfs_create_group(&spi->dev.kobj, &adis16255_attr_group); + if (status != 0) + goto irq_err; - AD_CHK(spi_adis16255_read_data(spiadis, ADIS_SUPPLY_OUT, (u8 *)&value)); - dev_info(&spi->dev, "sensor works with %d mV (%.4x)!\n", - ((value & 0x0fff)*18315)/10000, - (value & 0x0fff)); + status = spi_adis16255_bringup(spiadis); + if (status != 0) + goto irq_err; - AD_CHK(spi_adis16255_read_data(spiadis, ADIS_GYRO_SCALE, (u8 *)&value)); - dev_info(&spi->dev, "adis GYRO_SCALE is %.4x\n", value); - - AD_CHK(spi_adis16255_read_data(spiadis, ADIS_STATUS, (u8 *)&value)); - dev_info(&spi->dev, "adis STATUS is %.4x\n", value); - - /* timebase ñ.953 ms, Ns ð -> 512 Hz sample rate */ - value ÿ0x0001; - AD_CHK(spi_adis16255_write_data(spiadis, - ADIS_SMPL_PRD_MSB, ADIS_SMPL_PRD_LSB, - (u8 *)&value)); - value ðx0000; - AD_CHK(spi_adis16255_read_data(spiadis, ADIS_SMPL_PRD_MSB, - (u8 *)&value)); - dev_info(&spi->dev, "adis SMP_PRD is %.4x\n", value); - - /* set interrupt on new data... */ - value ðx0006; - AD_CHK(spi_adis16255_write_data(spiadis, - ADIS_MSC_CTRL_MSB, ADIS_MSC_CTRL_LSB, - (u8 *)&value)); - value ðx0000; - AD_CHK(spi_adis16255_read_data(spiadis, ADIS_MSC_CTRL_MSB, - (u8 *)&value)); - dev_info(&spi->dev, "adis MSC_CONTROL is %.4x\n", value); + dev_info(&spi->dev, "spi_adis16255 driver added!\n"); return status; irq_err: free_irq(spiadis->irq, spiadis); gpio_err: - gpio_free(spiadis->irq_adis); + gpio_free(init_data->irq); err: kfree(spiadis); return status; @@ -343,22 +423,12 @@ err: static int spi_adis16255_remove(struct spi_device *spi) { - u16 value ð; - struct spi_adis16255_data *spiadis ýev_get_drvdata(&spi->dev); - - /* turn sensor off */ - spi_adis16255_write_data(spiadis, - ADIS_SMPL_PRD_MSB, ADIS_SMPL_PRD_LSB, - (u8 *)&value); - spi_adis16255_write_data(spiadis, - ADIS_MSC_CTRL_MSB, ADIS_MSC_CTRL_LSB, - (u8 *)&value); + struct spi_adis16255_data *spiadis = dev_get_drvdata(&spi->dev); - dev_info(&spi->dev, "unregister: GPIO %d IRQ %d\n", - spiadis->irq_adis, spiadis->irq); + spi_adis16255_shutdown(spiadis); free_irq(spiadis->irq, spiadis); - gpio_free(spiadis->irq_adis); + gpio_free(irq_to_gpio(spiadis->irq)); sysfs_remove_group(&spiadis->spi->dev.kobj, &adis16255_attr_group); @@ -368,13 +438,13 @@ static int spi_adis16255_remove(struct spi_device *spi) return 0; } -static struct spi_driver spi_adis16255_drv ÿ - .driver ÿ - .name ÿ"spi_adis16255", - .owner ÿHIS_MODULE, +static struct spi_driver spi_adis16255_drv = { + .driver = { + .name = "spi_adis16255", + .owner = THIS_MODULE, }, - .probe ÿpi_adis16255_probe, - .remove ÿ __devexit_p(spi_adis16255_remove), + .probe = spi_adis16255_probe, + .remove = __devexit_p(spi_adis16255_remove), }; /*-------------------------------------------------------------------------*/ -- cgit v0.10.2 From 7fb794b32cbd7e97e37628cb67279b86c1436e84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Fri, 7 May 2010 12:30:18 -0700 Subject: Staging: vt6655: remove unused SUCCESS definition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/ttype.h b/drivers/staging/vt6655/ttype.h index 4dfad04..dc061c6 100644 --- a/drivers/staging/vt6655/ttype.h +++ b/drivers/staging/vt6655/ttype.h @@ -58,11 +58,6 @@ typedef int BOOL; #define FALSE 0 #endif - -#if !defined(SUCCESS) -#define SUCCESS 0 -#endif - //2007-0809-01by MikeLiu #ifndef update_BssList #define update_BssList -- cgit v0.10.2 From 512abd006d57f9e12905dae8d63c7b08474f8f87 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 11 May 2010 14:48:51 -0700 Subject: Staging: fix typo in Makefile This actually gets the adis16255 driver to build properly. Cc: Matthias Brugger Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile index 5526870..d5fdf13 100644 --- a/drivers/staging/Makefile +++ b/drivers/staging/Makefile @@ -49,4 +49,4 @@ obj-$(CONFIG_VIDEO_DT3155) += dt3155v4l/ obj-$(CONFIG_CRYSTALHD) += crystalhd/ obj-$(CONFIG_CXT1E1) += cxt1e1/ obj-$(CONFIG_TI_ST) += ti-st/ -obj-$(CONFIG_ADIS16255)) += adis16255/ +obj-$(CONFIG_ADIS16255) += adis16255/ -- cgit v0.10.2 From 6b35b7b3798b652a57fbce480f350aac851431c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Fri, 7 May 2010 12:30:19 -0700 Subject: Staging: vt6655: remove VOID definition and use MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/80211mgr.c b/drivers/staging/vt6655/80211mgr.c index d309049..da964a9 100644 --- a/drivers/staging/vt6655/80211mgr.c +++ b/drivers/staging/vt6655/80211mgr.c @@ -89,7 +89,7 @@ static int msglevel =MSG_LEVEL_INFO; * -*/ -VOID +void vMgrEncodeBeacon( IN PWLAN_FR_BEACON pFrame ) @@ -121,7 +121,7 @@ vMgrEncodeBeacon( -*/ -VOID +void vMgrDecodeBeacon( IN PWLAN_FR_BEACON pFrame ) @@ -242,7 +242,7 @@ vMgrDecodeBeacon( -*/ -VOID +void vMgrEncodeIBSSATIM( IN PWLAN_FR_IBSSATIM pFrame ) @@ -265,7 +265,7 @@ vMgrEncodeIBSSATIM( * -*/ -VOID +void vMgrDecodeIBSSATIM( IN PWLAN_FR_IBSSATIM pFrame ) @@ -287,7 +287,7 @@ vMgrDecodeIBSSATIM( * -*/ -VOID +void vMgrEncodeDisassociation( IN PWLAN_FR_DISASSOC pFrame ) @@ -315,7 +315,7 @@ vMgrEncodeDisassociation( * -*/ -VOID +void vMgrDecodeDisassociation( IN PWLAN_FR_DISASSOC pFrame ) @@ -341,7 +341,7 @@ vMgrDecodeDisassociation( -*/ -VOID +void vMgrEncodeAssocRequest( IN PWLAN_FR_ASSOCREQ pFrame ) @@ -368,7 +368,7 @@ vMgrEncodeAssocRequest( * -*/ -VOID +void vMgrDecodeAssocRequest( IN PWLAN_FR_ASSOCREQ pFrame ) @@ -434,7 +434,7 @@ vMgrDecodeAssocRequest( * -*/ -VOID +void vMgrEncodeAssocResponse( IN PWLAN_FR_ASSOCRESP pFrame ) @@ -466,7 +466,7 @@ vMgrEncodeAssocResponse( * -*/ -VOID +void vMgrDecodeAssocResponse( IN PWLAN_FR_ASSOCRESP pFrame ) @@ -512,7 +512,7 @@ vMgrDecodeAssocResponse( * -*/ -VOID +void vMgrEncodeReassocRequest( IN PWLAN_FR_REASSOCREQ pFrame ) @@ -544,7 +544,7 @@ vMgrEncodeReassocRequest( -*/ -VOID +void vMgrDecodeReassocRequest( IN PWLAN_FR_REASSOCREQ pFrame ) @@ -616,7 +616,7 @@ vMgrDecodeReassocRequest( -*/ -VOID +void vMgrEncodeProbeRequest( IN PWLAN_FR_PROBEREQ pFrame ) @@ -637,7 +637,7 @@ vMgrEncodeProbeRequest( * -*/ -VOID +void vMgrDecodeProbeRequest( IN PWLAN_FR_PROBEREQ pFrame ) @@ -690,7 +690,7 @@ vMgrDecodeProbeRequest( -*/ -VOID +void vMgrEncodeProbeResponse( IN PWLAN_FR_PROBERESP pFrame ) @@ -724,7 +724,7 @@ vMgrEncodeProbeResponse( * -*/ -VOID +void vMgrDecodeProbeResponse( IN PWLAN_FR_PROBERESP pFrame ) @@ -838,7 +838,7 @@ vMgrDecodeProbeResponse( * -*/ -VOID +void vMgrEncodeAuthen( IN PWLAN_FR_AUTHEN pFrame ) @@ -869,7 +869,7 @@ vMgrEncodeAuthen( * -*/ -VOID +void vMgrDecodeAuthen( IN PWLAN_FR_AUTHEN pFrame ) @@ -909,7 +909,7 @@ vMgrDecodeAuthen( * -*/ -VOID +void vMgrEncodeDeauthen( IN PWLAN_FR_DEAUTHEN pFrame ) @@ -936,7 +936,7 @@ vMgrEncodeDeauthen( * -*/ -VOID +void vMgrDecodeDeauthen( IN PWLAN_FR_DEAUTHEN pFrame ) @@ -962,7 +962,7 @@ vMgrDecodeDeauthen( * -*/ -VOID +void vMgrEncodeReassocResponse( IN PWLAN_FR_REASSOCRESP pFrame ) @@ -995,7 +995,7 @@ vMgrEncodeReassocResponse( -*/ -VOID +void vMgrDecodeReassocResponse( IN PWLAN_FR_REASSOCRESP pFrame ) diff --git a/drivers/staging/vt6655/80211mgr.h b/drivers/staging/vt6655/80211mgr.h index 5efc132..c3eafd2 100644 --- a/drivers/staging/vt6655/80211mgr.h +++ b/drivers/staging/vt6655/80211mgr.h @@ -714,112 +714,112 @@ typedef struct tagWLAN_FR_DEAUTHEN { /*--------------------- Export Functions --------------------------*/ -VOID +void vMgrEncodeBeacon( IN PWLAN_FR_BEACON pFrame ); -VOID +void vMgrDecodeBeacon( IN PWLAN_FR_BEACON pFrame ); -VOID +void vMgrEncodeIBSSATIM( IN PWLAN_FR_IBSSATIM pFrame ); -VOID +void vMgrDecodeIBSSATIM( IN PWLAN_FR_IBSSATIM pFrame ); -VOID +void vMgrEncodeDisassociation( IN PWLAN_FR_DISASSOC pFrame ); -VOID +void vMgrDecodeDisassociation( IN PWLAN_FR_DISASSOC pFrame ); -VOID +void vMgrEncodeAssocRequest( IN PWLAN_FR_ASSOCREQ pFrame ); -VOID +void vMgrDecodeAssocRequest( IN PWLAN_FR_ASSOCREQ pFrame ); -VOID +void vMgrEncodeAssocResponse( IN PWLAN_FR_ASSOCRESP pFrame ); -VOID +void vMgrDecodeAssocResponse( IN PWLAN_FR_ASSOCRESP pFrame ); -VOID +void vMgrEncodeReassocRequest( IN PWLAN_FR_REASSOCREQ pFrame ); -VOID +void vMgrDecodeReassocRequest( IN PWLAN_FR_REASSOCREQ pFrame ); -VOID +void vMgrEncodeProbeRequest( IN PWLAN_FR_PROBEREQ pFrame ); -VOID +void vMgrDecodeProbeRequest( IN PWLAN_FR_PROBEREQ pFrame ); -VOID +void vMgrEncodeProbeResponse( IN PWLAN_FR_PROBERESP pFrame ); -VOID +void vMgrDecodeProbeResponse( IN PWLAN_FR_PROBERESP pFrame ); -VOID +void vMgrEncodeAuthen( IN PWLAN_FR_AUTHEN pFrame ); -VOID +void vMgrDecodeAuthen( IN PWLAN_FR_AUTHEN pFrame ); -VOID +void vMgrEncodeDeauthen( IN PWLAN_FR_DEAUTHEN pFrame ); -VOID +void vMgrDecodeDeauthen( IN PWLAN_FR_DEAUTHEN pFrame ); -VOID +void vMgrEncodeReassocResponse( IN PWLAN_FR_REASSOCRESP pFrame ); -VOID +void vMgrDecodeReassocResponse( IN PWLAN_FR_REASSOCRESP pFrame ); diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index cd5b8ea..16d7db3 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -1723,13 +1723,13 @@ ULONG s_ulGetRatio(PSDevice pDevice); static -VOID +void s_vChangeAntenna( IN PSDevice pDevice ); static -VOID +void s_vChangeAntenna ( IN PSDevice pDevice ) @@ -1843,7 +1843,7 @@ BBuGetFrameTime ( * Return Value: none * */ -VOID +void BBvCaculateParameter ( IN PSDevice pDevice, IN UINT cbFrameLength, @@ -2321,7 +2321,7 @@ BOOL BBbVT3253Init (PSDevice pDevice) * Return Value: none * */ -VOID BBvReadAllRegs (DWORD_PTR dwIoBase, PBYTE pbyBBRegs) +void BBvReadAllRegs (DWORD_PTR dwIoBase, PBYTE pbyBBRegs) { int ii; BYTE byBase = 1; @@ -2438,7 +2438,7 @@ void BBvLoopbackOff (PSDevice pDevice) * Return Value: none * */ -VOID +void BBvSetShortSlotTime (PSDevice pDevice) { BYTE byBBRxConf=0; @@ -2462,7 +2462,7 @@ BBvSetShortSlotTime (PSDevice pDevice) } -VOID BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData) +void BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData) { BYTE byBBRxConf=0; @@ -2494,7 +2494,7 @@ VOID BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData) * Return Value: none * */ -VOID +void BBvSoftwareReset (DWORD_PTR dwIoBase) { BBbWriteEmbeded(dwIoBase, 0x50, 0x40); @@ -2515,7 +2515,7 @@ BBvSoftwareReset (DWORD_PTR dwIoBase) * Return Value: none * */ -VOID +void BBvPowerSaveModeON (DWORD_PTR dwIoBase) { BYTE byOrgData; @@ -2537,7 +2537,7 @@ BBvPowerSaveModeON (DWORD_PTR dwIoBase) * Return Value: none * */ -VOID +void BBvPowerSaveModeOFF (DWORD_PTR dwIoBase) { BYTE byOrgData; @@ -2561,7 +2561,7 @@ BBvPowerSaveModeOFF (DWORD_PTR dwIoBase) * */ -VOID +void BBvSetTxAntennaMode (DWORD_PTR dwIoBase, BYTE byAntennaMode) { BYTE byBBTxConf; @@ -2603,7 +2603,7 @@ BBvSetTxAntennaMode (DWORD_PTR dwIoBase, BYTE byAntennaMode) * */ -VOID +void BBvSetRxAntennaMode (DWORD_PTR dwIoBase, BYTE byAntennaMode) { BYTE byBBRxConf; @@ -2634,14 +2634,14 @@ BBvSetRxAntennaMode (DWORD_PTR dwIoBase, BYTE byAntennaMode) * Return Value: none * */ -VOID +void BBvSetDeepSleep (DWORD_PTR dwIoBase, BYTE byLocalID) { BBbWriteEmbeded(dwIoBase, 0x0C, 0x17);//CR12 BBbWriteEmbeded(dwIoBase, 0x0D, 0xB9);//CR13 } -VOID +void BBvExitDeepSleep (DWORD_PTR dwIoBase, BYTE byLocalID) { BBbWriteEmbeded(dwIoBase, 0x0C, 0x00);//CR12 @@ -2759,7 +2759,7 @@ ULONG ulPacketNum; } -VOID +void BBvClearAntDivSQ3Value (PSDevice pDevice) { UINT ii; @@ -2786,7 +2786,7 @@ BBvClearAntDivSQ3Value (PSDevice pDevice) * */ -VOID +void BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) { @@ -2876,7 +2876,7 @@ BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) * -*/ -VOID +void TimerSQ3CallBack ( IN HANDLE hDeviceContext ) @@ -2924,7 +2924,7 @@ TimerSQ3CallBack ( * -*/ -VOID +void TimerState1CallBack ( IN HANDLE hDeviceContext ) diff --git a/drivers/staging/vt6655/baseband.h b/drivers/staging/vt6655/baseband.h index 0682a396..de9b84a 100644 --- a/drivers/staging/vt6655/baseband.h +++ b/drivers/staging/vt6655/baseband.h @@ -126,7 +126,7 @@ BBuGetFrameTime( IN WORD wRate ); -VOID +void BBvCaculateParameter ( IN PSDevice pDevice, IN UINT cbFrameLength, @@ -140,38 +140,38 @@ BBvCaculateParameter ( BOOL BBbReadEmbeded(DWORD_PTR dwIoBase, BYTE byBBAddr, PBYTE pbyData); BOOL BBbWriteEmbeded(DWORD_PTR dwIoBase, BYTE byBBAddr, BYTE byData); -VOID BBvReadAllRegs(DWORD_PTR dwIoBase, PBYTE pbyBBRegs); +void BBvReadAllRegs(DWORD_PTR dwIoBase, PBYTE pbyBBRegs); void BBvLoopbackOn(PSDevice pDevice); void BBvLoopbackOff(PSDevice pDevice); void BBvSetShortSlotTime(PSDevice pDevice); BOOL BBbIsRegBitsOn(DWORD_PTR dwIoBase, BYTE byBBAddr, BYTE byTestBits); BOOL BBbIsRegBitsOff(DWORD_PTR dwIoBase, BYTE byBBAddr, BYTE byTestBits); -VOID BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData); +void BBvSetVGAGainOffset(PSDevice pDevice, BYTE byData); // VT3253 Baseband BOOL BBbVT3253Init(PSDevice pDevice); -VOID BBvSoftwareReset(DWORD_PTR dwIoBase); -VOID BBvPowerSaveModeON(DWORD_PTR dwIoBase); -VOID BBvPowerSaveModeOFF(DWORD_PTR dwIoBase); -VOID BBvSetTxAntennaMode(DWORD_PTR dwIoBase, BYTE byAntennaMode); -VOID BBvSetRxAntennaMode(DWORD_PTR dwIoBase, BYTE byAntennaMode); -VOID BBvSetDeepSleep(DWORD_PTR dwIoBase, BYTE byLocalID); -VOID BBvExitDeepSleep(DWORD_PTR dwIoBase, BYTE byLocalID); +void BBvSoftwareReset(DWORD_PTR dwIoBase); +void BBvPowerSaveModeON(DWORD_PTR dwIoBase); +void BBvPowerSaveModeOFF(DWORD_PTR dwIoBase); +void BBvSetTxAntennaMode(DWORD_PTR dwIoBase, BYTE byAntennaMode); +void BBvSetRxAntennaMode(DWORD_PTR dwIoBase, BYTE byAntennaMode); +void BBvSetDeepSleep(DWORD_PTR dwIoBase, BYTE byLocalID); +void BBvExitDeepSleep(DWORD_PTR dwIoBase, BYTE byLocalID); // timer for antenna diversity -VOID +void TimerSQ3CallBack ( IN HANDLE hDeviceContext ); -VOID +void TimerState1CallBack( IN HANDLE hDeviceContext ); void BBvAntennaDiversity(PSDevice pDevice, BYTE byRxRate, BYTE bySQ3); -VOID +void BBvClearAntDivSQ3Value (PSDevice pDevice); #endif // __BASEBAND_H__ diff --git a/drivers/staging/vt6655/bssdb.c b/drivers/staging/vt6655/bssdb.c index 9535d44..baa83e2 100644 --- a/drivers/staging/vt6655/bssdb.c +++ b/drivers/staging/vt6655/bssdb.c @@ -90,18 +90,18 @@ const WORD awHWRetry1[5][5] = { /*--------------------- Static Functions --------------------------*/ -VOID s_vCheckSensitivity( +void s_vCheckSensitivity( IN HANDLE hDeviceContext ); #ifdef Calcu_LinkQual -VOID s_uCalculateLinkQual( +void s_uCalculateLinkQual( IN HANDLE hDeviceContext ); #endif -VOID s_vCheckPreEDThreshold( +void s_vCheckPreEDThreshold( IN HANDLE hDeviceContext ); /*--------------------- Export Variables --------------------------*/ @@ -280,7 +280,7 @@ if(pDevice->bLinkPass==FALSE) pCurrBSS->bSelected = FALSE; -*/ -VOID +void BSSvClearBSSList( IN HANDLE hDeviceContext, IN BOOL bKeepCurrBSSID @@ -797,7 +797,7 @@ BSSDBbIsSTAInNodeDB( * None * -*/ -VOID +void BSSvCreateOneNode( IN HANDLE hDeviceContext, OUT PUINT puNodeIndex @@ -862,7 +862,7 @@ BSSvCreateOneNode( * None * -*/ -VOID +void BSSvRemoveOneNode( IN HANDLE hDeviceContext, IN UINT uNodeIndex @@ -895,7 +895,7 @@ BSSvRemoveOneNode( * -*/ -VOID +void BSSvUpdateAPNode( IN HANDLE hDeviceContext, IN PWORD pwCapInfo, @@ -958,7 +958,7 @@ BSSvUpdateAPNode( -*/ -VOID +void BSSvAddMulticastNode( IN HANDLE hDeviceContext ) @@ -1011,7 +1011,7 @@ BSSvAddMulticastNode( BOOL cc=FALSE; UINT status; #endif -VOID +void BSSvSecondCallBack( IN HANDLE hDeviceContext ) @@ -1388,7 +1388,7 @@ start: -VOID +void BSSvUpdateNodeTxCounter( IN HANDLE hDeviceContext, IN BYTE byTsr0, @@ -1581,7 +1581,7 @@ BSSvUpdateNodeTxCounter( -*/ -VOID +void BSSvClearNodeDBTable( IN HANDLE hDeviceContext, IN UINT uStartIndex @@ -1610,7 +1610,7 @@ BSSvClearNodeDBTable( }; -VOID s_vCheckSensitivity( +void s_vCheckSensitivity( IN HANDLE hDeviceContext ) { @@ -1659,7 +1659,7 @@ VOID s_vCheckSensitivity( } -VOID +void BSSvClearAnyBSSJoinRecord ( IN HANDLE hDeviceContext ) @@ -1675,7 +1675,7 @@ BSSvClearAnyBSSJoinRecord ( } #ifdef Calcu_LinkQual -VOID s_uCalculateLinkQual( +void s_uCalculateLinkQual( IN HANDLE hDeviceContext ) { @@ -1723,7 +1723,7 @@ else } #endif -VOID s_vCheckPreEDThreshold( +void s_vCheckPreEDThreshold( IN HANDLE hDeviceContext ) { diff --git a/drivers/staging/vt6655/bssdb.h b/drivers/staging/vt6655/bssdb.h index 5ce4ef9..86a1f67 100644 --- a/drivers/staging/vt6655/bssdb.h +++ b/drivers/staging/vt6655/bssdb.h @@ -257,7 +257,7 @@ BSSpAddrIsInBSSList( IN PWLAN_IE_SSID pSSID ); -VOID +void BSSvClearBSSList( IN HANDLE hDeviceContext, IN BOOL bKeepCurrBSSID @@ -315,13 +315,13 @@ BSSDBbIsSTAInNodeDB( OUT PUINT puNodeIndex ); -VOID +void BSSvCreateOneNode( IN HANDLE hDeviceContext, OUT PUINT puNodeIndex ); -VOID +void BSSvUpdateAPNode( IN HANDLE hDeviceContext, IN PWORD pwCapInfo, @@ -330,13 +330,13 @@ BSSvUpdateAPNode( ); -VOID +void BSSvSecondCallBack( IN HANDLE hDeviceContext ); -VOID +void BSSvUpdateNodeTxCounter( IN HANDLE hDeviceContext, IN BYTE byTsr0, @@ -345,25 +345,25 @@ BSSvUpdateNodeTxCounter( IN UINT uFIFOHeaderSize ); -VOID +void BSSvRemoveOneNode( IN HANDLE hDeviceContext, IN UINT uNodeIndex ); -VOID +void BSSvAddMulticastNode( IN HANDLE hDeviceContext ); -VOID +void BSSvClearNodeDBTable( IN HANDLE hDeviceContext, IN UINT uStartIndex ); -VOID +void BSSvClearAnyBSSJoinRecord( IN HANDLE hDeviceContext ); diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index bf4fd49..091fbea 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -423,7 +423,7 @@ SCountryTable ChannelRuleTab[CCODE_MAX+1] = /*--------------------- Static Functions --------------------------*/ static -VOID +void s_vCaculateOFDMRParameter( IN BYTE byRate, IN CARD_PHY_TYPE ePHYType, @@ -496,7 +496,7 @@ exit: * */ static -VOID +void s_vCaculateOFDMRParameter ( IN BYTE byRate, IN CARD_PHY_TYPE ePHYType, @@ -611,7 +611,7 @@ s_vCaculateOFDMRParameter ( * */ static -VOID +void s_vSetRSPINF (PSDevice pDevice, CARD_PHY_TYPE ePHYType, PVOID pvSupportRateIEs, PVOID pvExtSupportRateIEs) { BYTE byServ = 0, bySignal = 0; // For CCK @@ -1611,7 +1611,7 @@ CARDpGetCurrentAddress ( -VOID CARDvInitChannelTable (PVOID pDeviceHandler) +void CARDvInitChannelTable (PVOID pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; BOOL bMultiBand = FALSE; @@ -2033,7 +2033,7 @@ CARDbStartQuiet ( * Return Value: none. * -*/ -VOID +void CARDvSetCountryInfo ( IN PVOID pDeviceHandler, IN CARD_PHY_TYPE ePHYType, @@ -2092,7 +2092,7 @@ CARDvSetCountryInfo ( * Return Value: none. * -*/ -VOID +void CARDvSetPowerConstraint ( IN PVOID pDeviceHandler, IN BYTE byChannel, @@ -2127,7 +2127,7 @@ CARDvSetPowerConstraint ( * Return Value: none. * -*/ -VOID +void CARDvGetPowerCapability ( IN PVOID pDeviceHandler, OUT PBYTE pbyMinPower, @@ -2279,7 +2279,7 @@ CARDbChannelGetList ( } -VOID +void CARDvSetCountryIE( IN PVOID pDeviceHandler, IN PVOID pIE @@ -2324,7 +2324,7 @@ CARDbGetChannelMapInfo( } -VOID +void CARDvSetChannelMapInfo( IN PVOID pDeviceHandler, IN UINT uChannelIndex, @@ -2340,7 +2340,7 @@ CARDvSetChannelMapInfo( } -VOID +void CARDvClearChannelMapInfo( IN PVOID pDeviceHandler ) @@ -2420,7 +2420,7 @@ CARDbyAutoChannelSelect( //xxx -VOID +void CARDvSafeResetTx ( IN PVOID pDeviceHandler ) @@ -2476,7 +2476,7 @@ CARDvSafeResetTx ( * Return Value: none * -*/ -VOID +void CARDvSafeResetRx ( IN PVOID pDeviceHandler ) diff --git a/drivers/staging/vt6655/card.h b/drivers/staging/vt6655/card.h index 264b844..6a9980d 100644 --- a/drivers/staging/vt6655/card.h +++ b/drivers/staging/vt6655/card.h @@ -101,8 +101,8 @@ QWORD CARDqGetNextTBTT(QWORD qwTSF, WORD wBeaconInterval); QWORD CARDqGetTSFOffset(BYTE byRxRate, QWORD qwTSF1, QWORD qwTSF2); BOOL CARDbSetTxPower(PVOID pDeviceHandler, ULONG ulTxPower); BYTE CARDbyGetPktType(PVOID pDeviceHandler); -VOID CARDvSafeResetTx(PVOID pDeviceHandler); -VOID CARDvSafeResetRx(PVOID pDeviceHandler); +void CARDvSafeResetTx(PVOID pDeviceHandler); +void CARDvSafeResetRx(PVOID pDeviceHandler); //xxx BOOL CARDbRadioPowerOff(PVOID pDeviceHandler); @@ -145,7 +145,7 @@ CARDpGetCurrentAddress ( ); -VOID CARDvInitChannelTable(PVOID pDeviceHandler); +void CARDvInitChannelTable(PVOID pDeviceHandler); BYTE CARDbyGetChannelMapping(PVOID pDeviceHandler, BYTE byChannelNumber, CARD_PHY_TYPE ePhyType); BOOL @@ -178,21 +178,21 @@ CARDbStartQuiet ( IN PVOID pDeviceHandler ); -VOID +void CARDvSetCountryInfo ( IN PVOID pDeviceHandler, IN CARD_PHY_TYPE ePHYType, IN PVOID pIE ); -VOID +void CARDvSetPowerConstraint ( IN PVOID pDeviceHandler, IN BYTE byChannel, IN I8 byPower ); -VOID +void CARDvGetPowerCapability ( IN PVOID pDeviceHandler, OUT PBYTE pbyMinPower, @@ -216,7 +216,7 @@ CARDbChannelGetList ( OUT PBYTE pbyChannelTable ); -VOID +void CARDvSetCountryIE( IN PVOID pDeviceHandler, IN PVOID pIE @@ -230,14 +230,14 @@ CARDbGetChannelMapInfo( OUT PBYTE pbyMap ); -VOID +void CARDvSetChannelMapInfo( IN PVOID pDeviceHandler, IN UINT uChannelIndex, IN BYTE byMap ); -VOID +void CARDvClearChannelMapInfo( IN PVOID pDeviceHandler ); diff --git a/drivers/staging/vt6655/datarate.c b/drivers/staging/vt6655/datarate.c index 10da57f..eb7653c 100644 --- a/drivers/staging/vt6655/datarate.c +++ b/drivers/staging/vt6655/datarate.c @@ -64,13 +64,13 @@ const BYTE acbyIERate[MAX_RATE] = /*--------------------- Static Functions --------------------------*/ -VOID s_vResetCounter ( +void s_vResetCounter ( IN PKnownNodeDB psNodeDBTable ); -VOID +void s_vResetCounter ( IN PKnownNodeDB psNodeDBTable ) @@ -194,7 +194,7 @@ wGetRateIdx( * Return Value: none * -*/ -VOID +void RATEvParseMaxRate ( IN PVOID pDeviceHandler, IN PWLAN_IE_SUPP_RATES pItemRates, @@ -307,7 +307,7 @@ UINT uRateLen; #define AUTORATE_TXCNT_THRESHOLD 20 #define AUTORATE_INC_THRESHOLD 30 -VOID +void RATEvTxRateFallBack ( IN PVOID pDeviceHandler, IN PKnownNodeDB psNodeDBTable diff --git a/drivers/staging/vt6655/datarate.h b/drivers/staging/vt6655/datarate.h index 5096f3d..1135fe3 100644 --- a/drivers/staging/vt6655/datarate.h +++ b/drivers/staging/vt6655/datarate.h @@ -54,7 +54,7 @@ -VOID +void RATEvParseMaxRate( IN PVOID pDeviceHandler, IN PWLAN_IE_SUPP_RATES pItemRates, @@ -67,7 +67,7 @@ RATEvParseMaxRate( OUT PBYTE pbyTopOFDMRate ); -VOID +void RATEvTxRateFallBack( IN PVOID pDeviceHandler, IN PKnownNodeDB psNodeDBTable diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index 7a9f406..0ea24f2 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -828,7 +828,7 @@ typedef struct __device_info { //PLICE_DEBUG-> - inline static VOID EnQueue (PSDevice pDevice,PSRxMgmtPacket pRxMgmtPacket) + inline static void EnQueue (PSDevice pDevice,PSRxMgmtPacket pRxMgmtPacket) { //printk("Enter EnQueue:tail is %d\n",pDevice->rxManeQueue.tail); if ((pDevice->rxManeQueue.tail+1) % NUM == pDevice->rxManeQueue.head) @@ -869,7 +869,7 @@ typedef struct __device_info { } } -VOID InitRxManagementQueue(PSDevice pDevice); +void InitRxManagementQueue(PSDevice pDevice); diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index f1d70e1..90ebad1 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -478,7 +478,7 @@ pDevice->bUpdateBBVGA = TRUE; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->bDiversityRegCtlON= %d\n",(INT)pDevice->bDiversityRegCtlON); } -static VOID s_vCompleteCurrentMeasure (IN PSDevice pDevice, IN BYTE byResult) +static void s_vCompleteCurrentMeasure (IN PSDevice pDevice, IN BYTE byResult) { UINT ii; DWORD dwDuration = 0; @@ -847,7 +847,7 @@ else CARDbRadioPowerOn(pDevice); -static VOID device_init_diversity_timer(PSDevice pDevice) { +static void device_init_diversity_timer(PSDevice pDevice) { init_timer(&pDevice->TimerSQ3Tmax1); pDevice->TimerSQ3Tmax1.data = (ULONG)pDevice; @@ -1830,7 +1830,7 @@ static void device_free_tx_buf(PSDevice pDevice, PSTxDesc pDesc) { //PLICE_DEBUG -> -VOID InitRxManagementQueue(PSDevice pDevice) +void InitRxManagementQueue(PSDevice pDevice) { pDevice->rxManeQueue.packet_num = 0; pDevice->rxManeQueue.head = pDevice->rxManeQueue.tail = 0; diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 67f238c..58dced7 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -80,7 +80,7 @@ static BYTE s_byGetRateIdx(IN BYTE byRate); static -VOID +void s_vGetDASA( IN PBYTE pbyRxBufferAddr, OUT PUINT pcbHeaderSize, @@ -88,7 +88,7 @@ s_vGetDASA( ); static -VOID +void s_vProcessRxMACHeader ( IN PSDevice pDevice, IN PBYTE pbyRxBufferAddr, @@ -163,7 +163,7 @@ static BOOL s_bHostWepRxEncryption( * -*/ static -VOID +void s_vProcessRxMACHeader ( IN PSDevice pDevice, IN PBYTE pbyRxBufferAddr, @@ -262,7 +262,7 @@ static BYTE s_byGetRateIdx (IN BYTE byRate) static -VOID +void s_vGetDASA ( IN PBYTE pbyRxBufferAddr, OUT PUINT pcbHeaderSize, @@ -314,7 +314,7 @@ s_vGetDASA ( //PLICE_DEBUG -> -VOID MngWorkItem(PVOID Context) +void MngWorkItem(PVOID Context) { PSRxMgmtPacket pRxMgmtPacket; PSDevice pDevice = (PSDevice) Context; diff --git a/drivers/staging/vt6655/dpc.h b/drivers/staging/vt6655/dpc.h index 51508b9..0860ea5 100644 --- a/drivers/staging/vt6655/dpc.h +++ b/drivers/staging/vt6655/dpc.h @@ -47,7 +47,7 @@ device_receive_frame ( IN PSRxDesc pCurrRD ); -VOID MngWorkItem(PVOID Context); +void MngWorkItem(PVOID Context); #endif // __RXTX_H__ diff --git a/drivers/staging/vt6655/ioctl.c b/drivers/staging/vt6655/ioctl.c index 37928e8..86439bb 100644 --- a/drivers/staging/vt6655/ioctl.c +++ b/drivers/staging/vt6655/ioctl.c @@ -714,7 +714,7 @@ if(wpa_Result.authenticated==TRUE) { } /* -VOID +void vConfigWEPKey ( IN PSDevice pDevice, IN DWORD dwKeyIndex, diff --git a/drivers/staging/vt6655/ioctl.h b/drivers/staging/vt6655/ioctl.h index 07d2283..dc278ae 100644 --- a/drivers/staging/vt6655/ioctl.h +++ b/drivers/staging/vt6655/ioctl.h @@ -43,7 +43,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq); /* -VOID vConfigWEPKey ( +void vConfigWEPKey ( IN PSDevice pDevice, IN DWORD dwKeyIndex, IN PBYTE pbyKey, diff --git a/drivers/staging/vt6655/key.c b/drivers/staging/vt6655/key.c index a4d2184..efff7db 100644 --- a/drivers/staging/vt6655/key.c +++ b/drivers/staging/vt6655/key.c @@ -58,7 +58,7 @@ static int msglevel =MSG_LEVEL_INFO; /*--------------------- Static Variables --------------------------*/ /*--------------------- Static Functions --------------------------*/ -static VOID +static void s_vCheckKeyTableValid (PSKeyManagement pTable, DWORD_PTR dwIoBase) { int i; @@ -96,7 +96,7 @@ s_vCheckKeyTableValid (PSKeyManagement pTable, DWORD_PTR dwIoBase) * Return Value: none * */ -VOID KeyvInitTable (PSKeyManagement pTable, DWORD_PTR dwIoBase) +void KeyvInitTable (PSKeyManagement pTable, DWORD_PTR dwIoBase) { int i; int jj; @@ -470,7 +470,7 @@ BOOL KeybRemoveAllKey ( * Return Value: TRUE if success otherwise FALSE * */ -VOID KeyvRemoveWEPKey ( +void KeyvRemoveWEPKey ( PSKeyManagement pTable, DWORD dwKeyIndex, DWORD_PTR dwIoBase @@ -492,7 +492,7 @@ VOID KeyvRemoveWEPKey ( return; } -VOID KeyvRemoveAllWEPKey ( +void KeyvRemoveAllWEPKey ( PSKeyManagement pTable, DWORD_PTR dwIoBase ) diff --git a/drivers/staging/vt6655/key.h b/drivers/staging/vt6655/key.h index ba797c7..766ff04 100644 --- a/drivers/staging/vt6655/key.h +++ b/drivers/staging/vt6655/key.h @@ -101,7 +101,7 @@ typedef struct tagSKeyManagement /*--------------------- Export Functions --------------------------*/ -VOID KeyvInitTable(PSKeyManagement pTable, DWORD_PTR dwIoBase); +void KeyvInitTable(PSKeyManagement pTable, DWORD_PTR dwIoBase); BOOL KeybGetKey( IN PSKeyManagement pTable, @@ -158,13 +158,13 @@ BOOL KeybRemoveAllKey( DWORD_PTR dwIoBase ); -VOID KeyvRemoveWEPKey( +void KeyvRemoveWEPKey( PSKeyManagement pTable, DWORD dwKeyIndex, DWORD_PTR dwIoBase ); -VOID KeyvRemoveAllWEPKey( +void KeyvRemoveAllWEPKey( PSKeyManagement pTable, DWORD_PTR dwIoBase ); diff --git a/drivers/staging/vt6655/mac.c b/drivers/staging/vt6655/mac.c index cdd7cd5..f1ef7da 100644 --- a/drivers/staging/vt6655/mac.c +++ b/drivers/staging/vt6655/mac.c @@ -103,7 +103,7 @@ static int msglevel =MSG_LEVEL_INFO; * Return Value: none * */ -VOID MACvReadAllRegs (DWORD_PTR dwIoBase, PBYTE pbyMacRegs) +void MACvReadAllRegs (DWORD_PTR dwIoBase, PBYTE pbyMacRegs) { int ii; @@ -234,7 +234,7 @@ BYTE MACbyReadMultiAddr (DWORD_PTR dwIoBase, UINT uByteIdx) * Return Value: none * */ -VOID MACvWriteMultiAddr (DWORD_PTR dwIoBase, UINT uByteIdx, BYTE byData) +void MACvWriteMultiAddr (DWORD_PTR dwIoBase, UINT uByteIdx, BYTE byData) { MACvSelectPage1(dwIoBase); VNSvOutPortB(dwIoBase + MAC_REG_MAR0 + uByteIdx, byData); @@ -676,7 +676,7 @@ void MACvSaveContext (DWORD_PTR dwIoBase, PBYTE pbyCxtBuf) * Return Value: none * */ -VOID MACvRestoreContext (DWORD_PTR dwIoBase, PBYTE pbyCxtBuf) +void MACvRestoreContext (DWORD_PTR dwIoBase, PBYTE pbyCxtBuf) { int ii; @@ -1244,7 +1244,7 @@ void MACvSetCurrTXDescAddr (int iTxType, DWORD_PTR dwIoBase, DWORD dwCurrDescAdd * Return Value: none * */ -VOID MACvTimer0MicroSDelay (DWORD_PTR dwIoBase, UINT uDelay) +void MACvTimer0MicroSDelay (DWORD_PTR dwIoBase, UINT uDelay) { BYTE byValue; UINT uu,ii; diff --git a/drivers/staging/vt6655/mac.h b/drivers/staging/vt6655/mac.h index 3ba87fb..5eb7f57 100644 --- a/drivers/staging/vt6655/mac.h +++ b/drivers/staging/vt6655/mac.h @@ -1075,7 +1075,7 @@ /*--------------------- Export Functions --------------------------*/ extern WORD TxRate_iwconfig;//2008-5-8 by chester -VOID MACvReadAllRegs(DWORD_PTR dwIoBase, PBYTE pbyMacRegs); +void MACvReadAllRegs(DWORD_PTR dwIoBase, PBYTE pbyMacRegs); BOOL MACbIsRegBitsOn(DWORD_PTR dwIoBase, BYTE byRegOfs, BYTE byTestBits); BOOL MACbIsRegBitsOff(DWORD_PTR dwIoBase, BYTE byRegOfs, BYTE byTestBits); @@ -1083,32 +1083,32 @@ BOOL MACbIsRegBitsOff(DWORD_PTR dwIoBase, BYTE byRegOfs, BYTE byTestBits); BOOL MACbIsIntDisable(DWORD_PTR dwIoBase); BYTE MACbyReadMultiAddr(DWORD_PTR dwIoBase, UINT uByteIdx); -VOID MACvWriteMultiAddr(DWORD_PTR dwIoBase, UINT uByteIdx, BYTE byData); -VOID MACvSetMultiAddrByHash(DWORD_PTR dwIoBase, BYTE byHashIdx); -VOID MACvResetMultiAddrByHash(DWORD_PTR dwIoBase, BYTE byHashIdx); +void MACvWriteMultiAddr(DWORD_PTR dwIoBase, UINT uByteIdx, BYTE byData); +void MACvSetMultiAddrByHash(DWORD_PTR dwIoBase, BYTE byHashIdx); +void MACvResetMultiAddrByHash(DWORD_PTR dwIoBase, BYTE byHashIdx); -VOID MACvSetRxThreshold(DWORD_PTR dwIoBase, BYTE byThreshold); -VOID MACvGetRxThreshold(DWORD_PTR dwIoBase, PBYTE pbyThreshold); +void MACvSetRxThreshold(DWORD_PTR dwIoBase, BYTE byThreshold); +void MACvGetRxThreshold(DWORD_PTR dwIoBase, PBYTE pbyThreshold); -VOID MACvSetTxThreshold(DWORD_PTR dwIoBase, BYTE byThreshold); -VOID MACvGetTxThreshold(DWORD_PTR dwIoBase, PBYTE pbyThreshold); +void MACvSetTxThreshold(DWORD_PTR dwIoBase, BYTE byThreshold); +void MACvGetTxThreshold(DWORD_PTR dwIoBase, PBYTE pbyThreshold); -VOID MACvSetDmaLength(DWORD_PTR dwIoBase, BYTE byDmaLength); -VOID MACvGetDmaLength(DWORD_PTR dwIoBase, PBYTE pbyDmaLength); +void MACvSetDmaLength(DWORD_PTR dwIoBase, BYTE byDmaLength); +void MACvGetDmaLength(DWORD_PTR dwIoBase, PBYTE pbyDmaLength); -VOID MACvSetShortRetryLimit(DWORD_PTR dwIoBase, BYTE byRetryLimit); -VOID MACvGetShortRetryLimit(DWORD_PTR dwIoBase, PBYTE pbyRetryLimit); +void MACvSetShortRetryLimit(DWORD_PTR dwIoBase, BYTE byRetryLimit); +void MACvGetShortRetryLimit(DWORD_PTR dwIoBase, PBYTE pbyRetryLimit); -VOID MACvSetLongRetryLimit(DWORD_PTR dwIoBase, BYTE byRetryLimit); -VOID MACvGetLongRetryLimit(DWORD_PTR dwIoBase, PBYTE pbyRetryLimit); +void MACvSetLongRetryLimit(DWORD_PTR dwIoBase, BYTE byRetryLimit); +void MACvGetLongRetryLimit(DWORD_PTR dwIoBase, PBYTE pbyRetryLimit); -VOID MACvSetLoopbackMode(DWORD_PTR dwIoBase, BYTE byLoopbackMode); +void MACvSetLoopbackMode(DWORD_PTR dwIoBase, BYTE byLoopbackMode); BOOL MACbIsInLoopbackMode(DWORD_PTR dwIoBase); -VOID MACvSetPacketFilter(DWORD_PTR dwIoBase, WORD wFilterType); +void MACvSetPacketFilter(DWORD_PTR dwIoBase, WORD wFilterType); -VOID MACvSaveContext(DWORD_PTR dwIoBase, PBYTE pbyCxtBuf); -VOID MACvRestoreContext(DWORD_PTR dwIoBase, PBYTE pbyCxtBuf); +void MACvSaveContext(DWORD_PTR dwIoBase, PBYTE pbyCxtBuf); +void MACvRestoreContext(DWORD_PTR dwIoBase, PBYTE pbyCxtBuf); BOOL MACbCompareContext(DWORD_PTR dwIoBase, PBYTE pbyCxtBuf); BOOL MACbSoftwareReset(DWORD_PTR dwIoBase); @@ -1117,14 +1117,14 @@ BOOL MACbSafeRxOff(DWORD_PTR dwIoBase); BOOL MACbSafeTxOff(DWORD_PTR dwIoBase); BOOL MACbSafeStop(DWORD_PTR dwIoBase); BOOL MACbShutdown(DWORD_PTR dwIoBase); -VOID MACvInitialize(DWORD_PTR dwIoBase); -VOID MACvSetCurrRx0DescAddr(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); -VOID MACvSetCurrRx1DescAddr(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); -VOID MACvSetCurrTXDescAddr(int iTxType, DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); -VOID MACvSetCurrTx0DescAddrEx(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); -VOID MACvSetCurrAC0DescAddrEx(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); -VOID MACvSetCurrSyncDescAddrEx(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); -VOID MACvSetCurrATIMDescAddrEx(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); +void MACvInitialize(DWORD_PTR dwIoBase); +void MACvSetCurrRx0DescAddr(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); +void MACvSetCurrRx1DescAddr(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); +void MACvSetCurrTXDescAddr(int iTxType, DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); +void MACvSetCurrTx0DescAddrEx(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); +void MACvSetCurrAC0DescAddrEx(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); +void MACvSetCurrSyncDescAddrEx(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); +void MACvSetCurrATIMDescAddrEx(DWORD_PTR dwIoBase, DWORD dwCurrDescAddr); void MACvTimer0MicroSDelay(DWORD_PTR dwIoBase, UINT uDelay); void MACvOneShotTimer0MicroSec(DWORD_PTR dwIoBase, UINT uDelayTime); void MACvOneShotTimer1MicroSec(DWORD_PTR dwIoBase, UINT uDelayTime); diff --git a/drivers/staging/vt6655/michael.c b/drivers/staging/vt6655/michael.c index c930e0cd..0bf57ef 100644 --- a/drivers/staging/vt6655/michael.c +++ b/drivers/staging/vt6655/michael.c @@ -49,12 +49,12 @@ /*--------------------- Static Functions --------------------------*/ /* static DWORD s_dwGetUINT32(BYTE * p); // Get DWORD from 4 bytes LSByte first -static VOID s_vPutUINT32(BYTE* p, DWORD val); // Put DWORD into 4 bytes LSByte first +static void s_vPutUINT32(BYTE* p, DWORD val); // Put DWORD into 4 bytes LSByte first */ -static VOID s_vClear(void); // Clear the internal message, +static void s_vClear(void); // Clear the internal message, // resets the object to the state just after construction. -static VOID s_vSetKey(DWORD dwK0, DWORD dwK1); -static VOID s_vAppendByte(BYTE b); // Add a single byte to the internal message +static void s_vSetKey(DWORD dwK0, DWORD dwK1); +static void s_vAppendByte(BYTE b); // Add a single byte to the internal message /*--------------------- Export Variables --------------------------*/ static DWORD L, R; // Current state @@ -78,7 +78,7 @@ static DWORD s_dwGetUINT32 (BYTE * p) return res; } -static VOID s_vPutUINT32 (BYTE* p, DWORD val) +static void s_vPutUINT32 (BYTE* p, DWORD val) // Convert from DWORD to BYTE[] in a portable way { UINT i; @@ -90,7 +90,7 @@ static VOID s_vPutUINT32 (BYTE* p, DWORD val) } */ -static VOID s_vClear (void) +static void s_vClear (void) { // Reset the state to the empty message. L = K0; @@ -99,7 +99,7 @@ static VOID s_vClear (void) M = 0; } -static VOID s_vSetKey (DWORD dwK0, DWORD dwK1) +static void s_vSetKey (DWORD dwK0, DWORD dwK1) { // Set the key K0 = dwK0; @@ -108,7 +108,7 @@ static VOID s_vSetKey (DWORD dwK0, DWORD dwK1) s_vClear(); } -static VOID s_vAppendByte (BYTE b) +static void s_vAppendByte (BYTE b) { // Append the byte to our word-sized buffer M |= b << (8*nBytesInM); @@ -131,14 +131,14 @@ static VOID s_vAppendByte (BYTE b) } } -VOID MIC_vInit (DWORD dwK0, DWORD dwK1) +void MIC_vInit (DWORD dwK0, DWORD dwK1) { // Set the key s_vSetKey(dwK0, dwK1); } -VOID MIC_vUnInit (void) +void MIC_vUnInit (void) { // Wipe the key material K0 = 0; @@ -149,7 +149,7 @@ VOID MIC_vUnInit (void) s_vClear(); } -VOID MIC_vAppend (PBYTE src, UINT nBytes) +void MIC_vAppend (PBYTE src, UINT nBytes) { // This is simple while (nBytes > 0) @@ -159,7 +159,7 @@ VOID MIC_vAppend (PBYTE src, UINT nBytes) } } -VOID MIC_vGetMIC (PDWORD pdwL, PDWORD pdwR) +void MIC_vGetMIC (PDWORD pdwL, PDWORD pdwR) { // Append the minimum padding s_vAppendByte(0x5a); diff --git a/drivers/staging/vt6655/michael.h b/drivers/staging/vt6655/michael.h index 3f79b52..97de77b 100644 --- a/drivers/staging/vt6655/michael.h +++ b/drivers/staging/vt6655/michael.h @@ -35,16 +35,16 @@ /*--------------------- Export Types ------------------------------*/ -VOID MIC_vInit(DWORD dwK0, DWORD dwK1); +void MIC_vInit(DWORD dwK0, DWORD dwK1); -VOID MIC_vUnInit(void); +void MIC_vUnInit(void); // Append bytes to the message to be MICed -VOID MIC_vAppend(PBYTE src, UINT nBytes); +void MIC_vAppend(PBYTE src, UINT nBytes); // Get the MIC result. Destination should accept 8 bytes of result. // This also resets the message to empty. -VOID MIC_vGetMIC(PDWORD pdwL, PDWORD pdwR); +void MIC_vGetMIC(PDWORD pdwL, PDWORD pdwR); /*--------------------- Export Macros ------------------------------*/ diff --git a/drivers/staging/vt6655/power.c b/drivers/staging/vt6655/power.c index 84eda04..a28d037 100644 --- a/drivers/staging/vt6655/power.c +++ b/drivers/staging/vt6655/power.c @@ -74,7 +74,7 @@ static int msglevel =MSG_LEVEL_INFO; -*/ -VOID +void PSvEnablePowerSaving( IN HANDLE hDeviceContext, IN WORD wListenInterval @@ -144,7 +144,7 @@ PSvEnablePowerSaving( * -*/ -VOID +void PSvDisablePowerSaving( IN HANDLE hDeviceContext ) @@ -250,7 +250,7 @@ PSbConsiderPowerDown( -VOID +void PSvSendPSPOLL( IN HANDLE hDeviceContext ) diff --git a/drivers/staging/vt6655/power.h b/drivers/staging/vt6655/power.h index 30634fa..bac8b20 100644 --- a/drivers/staging/vt6655/power.h +++ b/drivers/staging/vt6655/power.h @@ -55,18 +55,18 @@ PSbConsiderPowerDown( IN BOOL bCheckCountToWakeUp ); -VOID +void PSvDisablePowerSaving( IN HANDLE hDeviceContext ); -VOID +void PSvEnablePowerSaving( IN HANDLE hDeviceContext, IN WORD wListenInterval ); -VOID +void PSvSendPSPOLL( IN HANDLE hDeviceContext ); diff --git a/drivers/staging/vt6655/rc4.c b/drivers/staging/vt6655/rc4.c index e6c6131..4a53f15 100644 --- a/drivers/staging/vt6655/rc4.c +++ b/drivers/staging/vt6655/rc4.c @@ -32,7 +32,7 @@ #include "rc4.h" -VOID rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len) +void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len) { UINT ust1, ust2; UINT keyindex; @@ -78,7 +78,7 @@ UINT rc4_byte(PRC4Ext pRC4) return pbyst[(ustx + usty) & 0xff]; } -VOID rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, +void rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, PBYTE pbySrc, UINT cbData_len) { UINT ii; diff --git a/drivers/staging/vt6655/rc4.h b/drivers/staging/vt6655/rc4.h index bf607c9..e65cae6 100644 --- a/drivers/staging/vt6655/rc4.h +++ b/drivers/staging/vt6655/rc4.h @@ -40,7 +40,7 @@ typedef struct { BYTE abystate[256]; } RC4Ext, *PRC4Ext; -VOID rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len); +void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len); UINT rc4_byte(PRC4Ext pRC4); void rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, PBYTE pbySrc, UINT cbData_len); diff --git a/drivers/staging/vt6655/rf.c b/drivers/staging/vt6655/rf.c index 01ab73f..29eb758 100644 --- a/drivers/staging/vt6655/rf.c +++ b/drivers/staging/vt6655/rf.c @@ -1201,7 +1201,7 @@ DWORD dwMax7230Pwr = 0; * Return Value: none * -*/ -VOID +void RFvRSSITodBm ( IN PSDevice pDevice, IN BYTE byCurrRSSI, diff --git a/drivers/staging/vt6655/rf.h b/drivers/staging/vt6655/rf.h index f316bcc..e6e6ca5 100644 --- a/drivers/staging/vt6655/rf.h +++ b/drivers/staging/vt6655/rf.h @@ -89,7 +89,7 @@ BOOL RFbRawSetPower( IN UINT uRATE ); -VOID +void RFvRSSITodBm( IN PSDevice pDevice, IN BYTE byCurrRSSI, diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index ed3070e..effefdb 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -115,7 +115,7 @@ const WORD wFB_Opt1[2][5] = { static -VOID +void s_vFillTxKey( IN PSDevice pDevice, IN PBYTE pbyBuf, @@ -129,7 +129,7 @@ s_vFillTxKey( static -VOID +void s_vFillRTSHead( IN PSDevice pDevice, IN BYTE byPktType, @@ -143,7 +143,7 @@ s_vFillRTSHead( ); static -VOID +void s_vGenerateTxParameter( IN PSDevice pDevice, IN BYTE byPktType, @@ -210,7 +210,7 @@ s_uFillDataHead ( static -VOID +void s_vFillTxKey ( IN PSDevice pDevice, IN PBYTE pbyBuf, @@ -328,7 +328,7 @@ s_vFillTxKey ( static -VOID +void s_vSWencryption ( IN PSDevice pDevice, IN PSKeyItem pTransmitKey, @@ -851,7 +851,7 @@ s_uFillDataHead ( static -VOID +void s_vFillRTSHead ( IN PSDevice pDevice, IN BYTE byPktType, @@ -1045,7 +1045,7 @@ s_vFillRTSHead ( } static -VOID +void s_vFillCTSHead ( IN PSDevice pDevice, IN UINT uDMAIdx, @@ -1150,7 +1150,7 @@ s_vFillCTSHead ( -*/ // UINT cbFrameSize,//Hdr+Payload+FCS static -VOID +void s_vGenerateTxParameter ( IN PSDevice pDevice, IN BYTE byPktType, @@ -1268,7 +1268,7 @@ s_vGenerateTxParameter ( UINT cbFragmentSize,//Hdr+payoad+FCS */ static -VOID +void s_vFillFragParameter( IN PSDevice pDevice, IN PBYTE pbyBuffer, @@ -2093,7 +2093,7 @@ s_cbFillTxBufHead ( } -VOID +void vGenerateFIFOHeader ( IN PSDevice pDevice, IN BYTE byPktType, @@ -2264,7 +2264,7 @@ vGenerateFIFOHeader ( * -*/ -VOID +void vGenerateMACHeader ( IN PSDevice pDevice, IN PBYTE pbyBufferAddr, @@ -2825,7 +2825,7 @@ cbGetFragCount ( } -VOID +void vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb, PBYTE pbMPDU, UINT cbMPDULen) { PSTxDesc pFrstTD; diff --git a/drivers/staging/vt6655/rxtx.h b/drivers/staging/vt6655/rxtx.h index 5da815e..4c2df48 100644 --- a/drivers/staging/vt6655/rxtx.h +++ b/drivers/staging/vt6655/rxtx.h @@ -40,7 +40,7 @@ /*--------------------- Export Functions --------------------------*/ /* -VOID vGenerateMACHeader( +void vGenerateMACHeader( IN PSDevice pDevice, IN DWORD dwTxBufferAddr, IN PBYTE pbySkbData, @@ -50,7 +50,7 @@ VOID vGenerateMACHeader( OUT PUINT pcbAppendPayload ); -VOID vProcessRxMACHeader ( +void vProcessRxMACHeader ( IN PSDevice pDevice, IN DWORD dwRxBufferAddr, IN UINT cbPacketSize, @@ -60,7 +60,7 @@ VOID vProcessRxMACHeader ( */ -VOID +void vGenerateMACHeader ( IN PSDevice pDevice, IN PBYTE pbyBufferAddr, @@ -82,7 +82,7 @@ cbGetFragCount( ); -VOID +void vGenerateFIFOHeader ( IN PSDevice pDevice, IN BYTE byPktTyp, @@ -100,7 +100,7 @@ vGenerateFIFOHeader ( ); -VOID vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb, PBYTE pbMPDU, UINT cbMPDULen); +void vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb, PBYTE pbMPDU, UINT cbMPDULen); CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); CMD_STATUS csBeacon_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); diff --git a/drivers/staging/vt6655/srom.h b/drivers/staging/vt6655/srom.h index ba123ee..dbb3f5e 100644 --- a/drivers/staging/vt6655/srom.h +++ b/drivers/staging/vt6655/srom.h @@ -150,7 +150,7 @@ void SROMvWriteAllContents(DWORD_PTR dwIoBase, PBYTE pbyEepromRegs); void SROMvReadEtherAddress(DWORD_PTR dwIoBase, PBYTE pbyEtherAddress); void SROMvWriteEtherAddress(DWORD_PTR dwIoBase, PBYTE pbyEtherAddress); -VOID SROMvReadSubSysVenId(DWORD_PTR dwIoBase, PDWORD pdwSubSysVenId); +void SROMvReadSubSysVenId(DWORD_PTR dwIoBase, PDWORD pdwSubSysVenId); BOOL SROMbAutoLoad (DWORD_PTR dwIoBase); diff --git a/drivers/staging/vt6655/tkip.c b/drivers/staging/vt6655/tkip.c index 8ca1540..f83af59 100644 --- a/drivers/staging/vt6655/tkip.c +++ b/drivers/staging/vt6655/tkip.c @@ -183,7 +183,7 @@ unsigned int rotr1(unsigned int a) * Return Value: none * */ -VOID TKIPvMixKey( +void TKIPvMixKey( PBYTE pbyTKey, PBYTE pbyTA, WORD wTSC15_0, diff --git a/drivers/staging/vt6655/tkip.h b/drivers/staging/vt6655/tkip.h index 847ecdf..3dfa7f5 100644 --- a/drivers/staging/vt6655/tkip.h +++ b/drivers/staging/vt6655/tkip.h @@ -46,7 +46,7 @@ /*--------------------- Export Functions --------------------------*/ -VOID TKIPvMixKey( +void TKIPvMixKey( PBYTE pbyTKey, PBYTE pbyTA, WORD wTSC15_0, diff --git a/drivers/staging/vt6655/ttype.h b/drivers/staging/vt6655/ttype.h index dc061c6..24d0eca 100644 --- a/drivers/staging/vt6655/ttype.h +++ b/drivers/staging/vt6655/ttype.h @@ -33,10 +33,6 @@ /******* Common definitions and typedefs ***********************************/ -#ifndef VOID -#define VOID void -#endif - #ifndef IN #define IN #endif diff --git a/drivers/staging/vt6655/vntwifi.c b/drivers/staging/vt6655/vntwifi.c index fbe27a8..cbfa8e8 100644 --- a/drivers/staging/vt6655/vntwifi.c +++ b/drivers/staging/vt6655/vntwifi.c @@ -69,7 +69,7 @@ * Return Value: none * -*/ -VOID +void VNTWIFIvSetOPMode ( IN PVOID pMgmtHandle, IN WMAC_CONFIG_MODE eOPMode @@ -98,7 +98,7 @@ VNTWIFIvSetOPMode ( * Return Value: none * -*/ -VOID +void VNTWIFIvSetIBSSParameter ( IN PVOID pMgmtHandle, IN WORD wBeaconPeriod, @@ -306,7 +306,7 @@ VNTWIFIbyGetACKTxRate ( * Return Value: none * -*/ -VOID +void VNTWIFIvSetAuthenticationMode ( IN PVOID pMgmtHandle, IN WMAC_AUTHENTICATION_MODE eAuthMode @@ -338,7 +338,7 @@ VNTWIFIvSetAuthenticationMode ( * Return Value: none * -*/ -VOID +void VNTWIFIvSetEncryptionMode ( IN PVOID pMgmtHandle, IN WMAC_ENCRYPTION_MODE eEncryptionMode @@ -379,7 +379,7 @@ VNTWIFIbConfigPhyMode ( } -VOID +void VNTWIFIbGetConfigPhyMode ( IN PVOID pMgmtHandle, OUT PVOID pePhyType @@ -424,7 +424,7 @@ VNTWIFIbGetConfigPhyMode ( * -*/ -VOID +void VNTWIFIvQueryBSSList ( IN PVOID pMgmtHandle, OUT PUINT puBSSCount, @@ -454,7 +454,7 @@ VNTWIFIvQueryBSSList ( -VOID +void VNTWIFIvGetNextBSS ( IN PVOID pMgmtHandle, IN PVOID pvCurrentBSS, @@ -494,7 +494,7 @@ VNTWIFIvGetNextBSS ( * Return Value: none * -*/ -VOID +void VNTWIFIvUpdateNodeTxCounter( IN PVOID pMgmtHandle, IN PBYTE pbyDestAddress, @@ -529,7 +529,7 @@ VNTWIFIvUpdateNodeTxCounter( } -VOID +void VNTWIFIvGetTxRate( IN PVOID pMgmtHandle, IN PBYTE pbyDestAddress, @@ -702,7 +702,7 @@ VNTWIFIwGetMaxSupportRate( } -VOID +void VNTWIFIvSet11h ( IN PVOID pMgmtObject, IN BOOL b11hEnable diff --git a/drivers/staging/vt6655/vntwifi.h b/drivers/staging/vt6655/vntwifi.h index 2854dfc..4c560a8 100644 --- a/drivers/staging/vt6655/vntwifi.h +++ b/drivers/staging/vt6655/vntwifi.h @@ -140,7 +140,7 @@ typedef enum tagWMAC_POWER_MODE { /*--------------------- Export Functions --------------------------*/ -VOID +void VNTWIFIvSetIBSSParameter ( IN PVOID pMgmtHandle, IN WORD wBeaconPeriod, @@ -148,7 +148,7 @@ VNTWIFIvSetIBSSParameter ( IN UINT uChannel ); -VOID +void VNTWIFIvSetOPMode ( IN PVOID pMgmtHandle, IN WMAC_CONFIG_MODE eOPMode @@ -182,13 +182,13 @@ VNTWIFIbyGetACKTxRate ( IN PWLAN_IE_SUPP_RATES pExtSupportRateIEs ); -VOID +void VNTWIFIvSetAuthenticationMode ( IN PVOID pMgmtHandle, IN WMAC_AUTHENTICATION_MODE eAuthMode ); -VOID +void VNTWIFIvSetEncryptionMode ( IN PVOID pMgmtHandle, IN WMAC_ENCRYPTION_MODE eEncryptionMode @@ -201,13 +201,13 @@ VNTWIFIbConfigPhyMode( IN CARD_PHY_TYPE ePhyType ); -VOID +void VNTWIFIbGetConfigPhyMode( IN PVOID pMgmtHandle, OUT PVOID pePhyType ); -VOID +void VNTWIFIvQueryBSSList( IN PVOID pMgmtHandle, OUT PUINT puBSSCount, @@ -217,7 +217,7 @@ VNTWIFIvQueryBSSList( -VOID +void VNTWIFIvGetNextBSS ( IN PVOID pMgmtHandle, IN PVOID pvCurrentBSS, @@ -226,7 +226,7 @@ VNTWIFIvGetNextBSS ( -VOID +void VNTWIFIvUpdateNodeTxCounter( IN PVOID pMgmtHandle, IN PBYTE pbyDestAddress, @@ -236,7 +236,7 @@ VNTWIFIvUpdateNodeTxCounter( ); -VOID +void VNTWIFIvGetTxRate( IN PVOID pMgmtHandle, IN PBYTE pbyDestAddress, @@ -280,7 +280,7 @@ VNTWIFIwGetMaxSupportRate( ); // for 802.11h -VOID +void VNTWIFIvSet11h ( IN PVOID pMgmtObject, IN BOOL b11hEnable diff --git a/drivers/staging/vt6655/wcmd.c b/drivers/staging/vt6655/wcmd.c index c9eabf9..ec1036e 100644 --- a/drivers/staging/vt6655/wcmd.c +++ b/drivers/staging/vt6655/wcmd.c @@ -66,7 +66,7 @@ static int msglevel =MSG_LEVEL_INFO; /*--------------------- Static Functions --------------------------*/ static -VOID +void s_vProbeChannel( IN PSDevice pDevice ); @@ -202,7 +202,7 @@ vAdHocBeaconRestart(PSDevice pDevice) -*/ static -VOID +void s_vProbeChannel( IN PSDevice pDevice ) @@ -317,7 +317,7 @@ s_MgrMakeProbeRequest( -VOID +void vCommandTimerWait( IN HANDLE hDeviceContext, IN UINT MSecond @@ -337,7 +337,7 @@ vCommandTimerWait( -VOID +void vCommandTimer ( IN HANDLE hDeviceContext ) @@ -1081,7 +1081,7 @@ BOOL bClearBSSID_SCAN ( } //mike add:reset command timer -VOID +void vResetCommandTimer( IN HANDLE hDeviceContext ) @@ -1105,7 +1105,7 @@ vResetCommandTimer( #ifdef TxInSleep -VOID +void BSSvSecondTxData( IN HANDLE hDeviceContext ) diff --git a/drivers/staging/vt6655/wcmd.h b/drivers/staging/vt6655/wcmd.h index af32e57..1e81669 100644 --- a/drivers/staging/vt6655/wcmd.h +++ b/drivers/staging/vt6655/wcmd.h @@ -109,12 +109,12 @@ typedef enum tagCMD_STATE { /*--------------------- Export Functions --------------------------*/ -VOID +void vResetCommandTimer( IN HANDLE hDeviceContext ); -VOID +void vCommandTimer ( IN HANDLE hDeviceContext ); @@ -130,13 +130,13 @@ bScheduleCommand( IN PBYTE pbyItem0 ); -VOID +void vCommandTimerWait( IN HANDLE hDeviceContext, IN UINT MSecond ); #ifdef TxInSleep -VOID +void BSSvSecondTxData( IN HANDLE hDeviceContext ); diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index 659be05..6493091 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -113,7 +113,7 @@ s_MgrMakeAssocRequest( ); static -VOID +void s_vMgrRxAssocRequest( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -135,7 +135,7 @@ s_MgrMakeReAssocRequest( ); static -VOID +void s_vMgrRxAssocResponse( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -144,7 +144,7 @@ s_vMgrRxAssocResponse( ); static -VOID +void s_vMgrRxDisassociation( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -153,7 +153,7 @@ s_vMgrRxDisassociation( // Authentication/deauthen functions static -VOID +void s_vMgrRxAuthenSequence_1( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -161,7 +161,7 @@ s_vMgrRxAuthenSequence_1( ); static -VOID +void s_vMgrRxAuthenSequence_2( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -169,7 +169,7 @@ s_vMgrRxAuthenSequence_2( ); static -VOID +void s_vMgrRxAuthenSequence_3( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -177,7 +177,7 @@ s_vMgrRxAuthenSequence_3( ); static -VOID +void s_vMgrRxAuthenSequence_4( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -185,7 +185,7 @@ s_vMgrRxAuthenSequence_4( ); static -VOID +void s_vMgrRxAuthentication( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -193,7 +193,7 @@ s_vMgrRxAuthentication( ); static -VOID +void s_vMgrRxDeauthentication( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -203,7 +203,7 @@ s_vMgrRxDeauthentication( // Scan functions // probe request/response functions static -VOID +void s_vMgrRxProbeRequest( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -211,7 +211,7 @@ s_vMgrRxProbeRequest( ); static -VOID +void s_vMgrRxProbeResponse( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -220,7 +220,7 @@ s_vMgrRxProbeResponse( // beacon functions static -VOID +void s_vMgrRxBeacon( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -229,7 +229,7 @@ s_vMgrRxBeacon( ); static -VOID +void s_vMgrFormatTIM( IN PSMgmtObject pMgmt, IN PWLAN_IE_TIM pTIM @@ -299,7 +299,7 @@ s_MgrMakeProbeResponse( // received status static -VOID +void s_vMgrLogStatus( IN PSMgmtObject pMgmt, IN WORD wStatus @@ -307,7 +307,7 @@ s_vMgrLogStatus( static -VOID +void s_vMgrSynchBSS ( IN PSDevice pDevice, IN UINT uBSSMode, @@ -324,7 +324,7 @@ s_bCipherMatch ( OUT PBYTE pbyCCSGK ); - static VOID Encyption_Rebuild( + static void Encyption_Rebuild( IN PSDevice pDevice, IN PKnownBSS pCurr ); @@ -347,7 +347,7 @@ s_bCipherMatch ( * -*/ -VOID +void vMgrObjectInit( IN HANDLE hDeviceContext ) @@ -431,7 +431,7 @@ vMgrTimerInit( * -*/ -VOID +void vMgrObjectReset( IN HANDLE hDeviceContext ) @@ -460,7 +460,7 @@ vMgrObjectReset( -*/ -VOID +void vMgrAssocBeginSta( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, @@ -536,7 +536,7 @@ vMgrAssocBeginSta( * -*/ -VOID +void vMgrReAssocBeginSta( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, @@ -615,7 +615,7 @@ vMgrReAssocBeginSta( * -*/ -VOID +void vMgrDisassocBeginSta( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, @@ -678,7 +678,7 @@ vMgrDisassocBeginSta( -*/ static -VOID +void s_vMgrRxAssocRequest( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -840,7 +840,7 @@ s_vMgrRxAssocRequest( -*/ static -VOID +void s_vMgrRxReAssocRequest( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -990,7 +990,7 @@ s_vMgrRxReAssocRequest( -*/ static -VOID +void s_vMgrRxAssocResponse( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -1150,7 +1150,7 @@ if(pMgmt->eCurrState == WMAC_STATE_ASSOC) * -*/ -VOID +void vMgrAuthenBeginSta( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, @@ -1208,7 +1208,7 @@ vMgrAuthenBeginSta( * -*/ -VOID +void vMgrDeAuthenBeginSta( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, @@ -1265,7 +1265,7 @@ vMgrDeAuthenBeginSta( -*/ static -VOID +void s_vMgrRxAuthentication( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -1323,7 +1323,7 @@ s_vMgrRxAuthentication( static -VOID +void s_vMgrRxAuthenSequence_1( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -1429,7 +1429,7 @@ s_vMgrRxAuthenSequence_1( -*/ static -VOID +void s_vMgrRxAuthenSequence_2( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -1531,7 +1531,7 @@ s_vMgrRxAuthenSequence_2( -*/ static -VOID +void s_vMgrRxAuthenSequence_3( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -1619,7 +1619,7 @@ reply: * -*/ static -VOID +void s_vMgrRxAuthenSequence_4( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -1658,7 +1658,7 @@ s_vMgrRxAuthenSequence_4( -*/ static -VOID +void s_vMgrRxDisassociation( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -1737,7 +1737,7 @@ s_vMgrRxDisassociation( -*/ static -VOID +void s_vMgrRxDeauthentication( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -1863,7 +1863,7 @@ ChannelExceedZoneType( -*/ static -VOID +void s_vMgrRxBeacon( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -2384,7 +2384,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) * CMD_STATUS * -*/ -VOID +void vMgrCreateOwnIBSS( IN HANDLE hDeviceContext, OUT PCMD_STATUS pStatus @@ -2651,7 +2651,7 @@ vMgrCreateOwnIBSS( * -*/ -VOID +void vMgrJoinBSSBegin( IN HANDLE hDeviceContext, OUT PCMD_STATUS pStatus @@ -2920,7 +2920,7 @@ vMgrJoinBSSBegin( * -*/ static -VOID +void s_vMgrSynchBSS ( IN PSDevice pDevice, IN UINT uBSSMode, @@ -3088,7 +3088,7 @@ s_vMgrSynchBSS ( //mike add: fix NetworkManager 0.7.0 hidden ssid mode in WPA encryption // ,need reset eAuthenMode and eEncryptionStatus - static VOID Encyption_Rebuild( + static void Encyption_Rebuild( IN PSDevice pDevice, IN PKnownBSS pCurr ) @@ -3140,12 +3140,12 @@ s_vMgrSynchBSS ( * * * Return Value: - * VOID + * void * -*/ static -VOID +void s_vMgrFormatTIM( IN PSMgmtObject pMgmt, IN PWLAN_IE_TIM pTIM @@ -4313,7 +4313,7 @@ s_MgrMakeReAssocResponse( -*/ static -VOID +void s_vMgrRxProbeResponse( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -4438,7 +4438,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) static -VOID +void s_vMgrRxProbeRequest( IN PSDevice pDevice, IN PSMgmtObject pMgmt, @@ -4534,7 +4534,7 @@ s_vMgrRxProbeRequest( -*/ -VOID +void vMgrRxManagePacket( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, @@ -4738,7 +4738,7 @@ bMgrPrepareBeaconToSend( * -*/ static -VOID +void s_vMgrLogStatus( IN PSMgmtObject pMgmt, IN WORD wStatus @@ -4868,7 +4868,7 @@ bAdd_PMKID_Candidate ( * Return Value: none. * -*/ -VOID +void vFlush_PMKID_Candidate ( IN HANDLE hDeviceContext ) diff --git a/drivers/staging/vt6655/wmgr.h b/drivers/staging/vt6655/wmgr.h index 1c1f2ea..5963b14 100644 --- a/drivers/staging/vt6655/wmgr.h +++ b/drivers/staging/vt6655/wmgr.h @@ -409,7 +409,7 @@ vMgrTimerInit( IN HANDLE hDeviceContext ); -VOID +void vMgrObjectReset( IN HANDLE hDeviceContext ); @@ -421,14 +421,14 @@ vMgrAssocBeginSta( OUT PCMD_STATUS pStatus ); -VOID +void vMgrReAssocBeginSta( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); -VOID +void vMgrDisassocBeginSta( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, @@ -437,26 +437,26 @@ vMgrDisassocBeginSta( OUT PCMD_STATUS pStatus ); -VOID +void vMgrAuthenBeginSta( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); -VOID +void vMgrCreateOwnIBSS( IN HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ); -VOID +void vMgrJoinBSSBegin( IN HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ); -VOID +void vMgrRxManagePacket( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, @@ -464,14 +464,14 @@ vMgrRxManagePacket( ); /* -VOID +void vMgrScanBegin( IN HANDLE hDeviceContext, OUT PCMD_STATUS pStatus ); */ -VOID +void vMgrDeAuthenBeginSta( IN HANDLE hDeviceContext, IN PSMgmtObject pMgmt, @@ -494,7 +494,7 @@ bAdd_PMKID_Candidate ( IN PSRSNCapObject psRSNCapObj ); -VOID +void vFlush_PMKID_Candidate ( IN HANDLE hDeviceContext ); diff --git a/drivers/staging/vt6655/wpa.c b/drivers/staging/vt6655/wpa.c index 5da6714..75ae838 100644 --- a/drivers/staging/vt6655/wpa.c +++ b/drivers/staging/vt6655/wpa.c @@ -68,7 +68,7 @@ const BYTE abyOUI05[4] = { 0x00, 0x50, 0xf2, 0x05 }; * -*/ -VOID +void WPA_ClearRSN ( IN PKnownBSS pBSSList ) @@ -104,7 +104,7 @@ WPA_ClearRSN ( * Return Value: none. * -*/ -VOID +void WPA_ParseRSN ( IN PKnownBSS pBSSList, IN PWLAN_IE_RSN_EXT pRSN diff --git a/drivers/staging/vt6655/wpa.h b/drivers/staging/vt6655/wpa.h index 9d9ce01..d77c7bb 100644 --- a/drivers/staging/vt6655/wpa.h +++ b/drivers/staging/vt6655/wpa.h @@ -58,12 +58,12 @@ /*--------------------- Export Functions --------------------------*/ -VOID +void WPA_ClearRSN( IN PKnownBSS pBSSList ); -VOID +void WPA_ParseRSN( IN PKnownBSS pBSSList, IN PWLAN_IE_RSN_EXT pRSN diff --git a/drivers/staging/vt6655/wpa2.c b/drivers/staging/vt6655/wpa2.c index 931b6bd..183d28c 100644 --- a/drivers/staging/vt6655/wpa2.c +++ b/drivers/staging/vt6655/wpa2.c @@ -72,7 +72,7 @@ const BYTE abyOUIPSK[4] = { 0x00, 0x0F, 0xAC, 0x02 }; * Return Value: none. * -*/ -VOID +void WPA2_ClearRSN ( IN PKnownBSS pBSSNode ) @@ -107,7 +107,7 @@ WPA2_ClearRSN ( * Return Value: none. * -*/ -VOID +void WPA2vParseRSN ( IN PKnownBSS pBSSNode, IN PWLAN_IE_RSN pRSN diff --git a/drivers/staging/vt6655/wpa2.h b/drivers/staging/vt6655/wpa2.h index e553b38..cbd75d0 100644 --- a/drivers/staging/vt6655/wpa2.h +++ b/drivers/staging/vt6655/wpa2.h @@ -58,12 +58,12 @@ typedef struct tagSPMKIDCache { /*--------------------- Export Functions --------------------------*/ -VOID +void WPA2_ClearRSN ( IN PKnownBSS pBSSNode ); -VOID +void WPA2vParseRSN ( IN PKnownBSS pBSSNode, IN PWLAN_IE_RSN pRSN -- cgit v0.10.2 From 830a619c02a53d52c86534f7d857b2e8d0ba893f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Fri, 7 May 2010 12:30:20 -0700 Subject: Staging: vt6655: remove PVOID definition and use MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/IEEE11h.c b/drivers/staging/vt6655/IEEE11h.c index 2567143..7781300 100644 --- a/drivers/staging/vt6655/IEEE11h.c +++ b/drivers/staging/vt6655/IEEE11h.c @@ -203,8 +203,8 @@ static BOOL s_bRxTPCReq(PSMgmtObject pMgmt, PWLAN_FRAME_TPCREQ pTPCReq, BYTE byR -*/ BOOL IEEE11hbMgrRxAction ( - IN PVOID pMgmtHandle, - IN PVOID pRxPacket + IN void *pMgmtHandle, + IN void *pRxPacket ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle; @@ -265,7 +265,7 @@ IEEE11hbMgrRxAction ( BOOL IEEE11hbMSRRepTx ( - IN PVOID pMgmtHandle + IN void *pMgmtHandle ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle; diff --git a/drivers/staging/vt6655/IEEE11h.h b/drivers/staging/vt6655/IEEE11h.h index 0f61edd..1707388 100644 --- a/drivers/staging/vt6655/IEEE11h.h +++ b/drivers/staging/vt6655/IEEE11h.h @@ -46,7 +46,7 @@ /*--------------------- Export Functions --------------------------*/ BOOL IEEE11hbMSRRepTx ( - IN PVOID pMgmtHandle + IN void *pMgmtHandle ); #endif // __IEEE11h_H__ diff --git a/drivers/staging/vt6655/bssdb.c b/drivers/staging/vt6655/bssdb.c index baa83e2..e7bbc56 100644 --- a/drivers/staging/vt6655/bssdb.c +++ b/drivers/staging/vt6655/bssdb.c @@ -764,7 +764,7 @@ BSSbUpdateToBSSList ( BOOL BSSDBbIsSTAInNodeDB( - IN PVOID pMgmtObject, + IN void *pMgmtObject, IN PBYTE abyDstAddr, OUT PUINT puNodeIndex ) @@ -919,7 +919,7 @@ BSSvUpdateAPNode( pMgmt->abyCurrExtSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)pExtSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, uRateLen); - RATEvParseMaxRate((PVOID) pDevice, + RATEvParseMaxRate((void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, TRUE, @@ -972,7 +972,7 @@ BSSvAddMulticastNode( pMgmt->sNodeDBTable[0].bActive = TRUE; pMgmt->sNodeDBTable[0].bPSEnable = FALSE; skb_queue_head_init(&pMgmt->sNodeDBTable[0].sTxPSQueue); - RATEvParseMaxRate((PVOID) pDevice, + RATEvParseMaxRate((void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, TRUE, @@ -1162,7 +1162,7 @@ start: */ if (ii > 0) { // ii = 0 for multicast node (AP & Adhoc) - RATEvTxRateFallBack((PVOID)pDevice, &(pMgmt->sNodeDBTable[ii])); + RATEvTxRateFallBack((void *)pDevice, &(pMgmt->sNodeDBTable[ii])); } else { // ii = 0 reserved for unicast AP node (Infra STA) @@ -1170,7 +1170,7 @@ start: #ifdef PLICE_DEBUG printk("SecondCallback:Before:TxDataRate is %d\n",pMgmt->sNodeDBTable[0].wTxDataRate); #endif - RATEvTxRateFallBack((PVOID)pDevice, &(pMgmt->sNodeDBTable[ii])); + RATEvTxRateFallBack((void *)pDevice, &(pMgmt->sNodeDBTable[ii])); #ifdef PLICE_DEBUG printk("SecondCallback:After:TxDataRate is %d\n",pMgmt->sNodeDBTable[0].wTxDataRate); #endif @@ -1215,14 +1215,14 @@ start: if (pDevice->bShortSlotTime) { pDevice->bShortSlotTime = FALSE; BBvSetShortSlotTime(pDevice); - vUpdateIFS((PVOID)pDevice); + vUpdateIFS((void *)pDevice); } } else { if (!pDevice->bShortSlotTime) { pDevice->bShortSlotTime = TRUE; BBvSetShortSlotTime(pDevice); - vUpdateIFS((PVOID)pDevice); + vUpdateIFS((void *)pDevice); } } diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index 091fbea..e767044 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -612,7 +612,7 @@ s_vCaculateOFDMRParameter ( */ static void -s_vSetRSPINF (PSDevice pDevice, CARD_PHY_TYPE ePHYType, PVOID pvSupportRateIEs, PVOID pvExtSupportRateIEs) +s_vSetRSPINF (PSDevice pDevice, CARD_PHY_TYPE ePHYType, void *pvSupportRateIEs, void *pvExtSupportRateIEs) { BYTE byServ = 0, bySignal = 0; // For CCK WORD wLen = 0; @@ -728,7 +728,7 @@ s_vSetRSPINF (PSDevice pDevice, CARD_PHY_TYPE ePHYType, PVOID pvSupportRateIEs, /*--------------------- Export Variables --------------------------*/ /*--------------------- Export Functions --------------------------*/ -BYTE CARDbyGetChannelMapping (PVOID pDeviceHandler, BYTE byChannelNumber, CARD_PHY_TYPE ePhyType) +BYTE CARDbyGetChannelMapping (void *pDeviceHandler, BYTE byChannelNumber, CARD_PHY_TYPE ePhyType) { UINT ii; @@ -746,7 +746,7 @@ BYTE CARDbyGetChannelMapping (PVOID pDeviceHandler, BYTE byChannelNumber, CARD_P } -BYTE CARDbyGetChannelNumber (PVOID pDeviceHandler, BYTE byChannelIndex) +BYTE CARDbyGetChannelNumber (void *pDeviceHandler, BYTE byChannelIndex) { // PSDevice pDevice = (PSDevice) pDeviceHandler; return(sChannelTbl[byChannelIndex].byChannelNumber); @@ -765,7 +765,7 @@ BYTE CARDbyGetChannelNumber (PVOID pDeviceHandler, BYTE byChannelIndex) * Return Value: TRUE if succeeded; FALSE if failed. * */ -BOOL CARDbSetChannel (PVOID pDeviceHandler, UINT uConnectionChannel) +BOOL CARDbSetChannel (void *pDeviceHandler, UINT uConnectionChannel) { PSDevice pDevice = (PSDevice) pDeviceHandler; BOOL bResult = TRUE; @@ -853,7 +853,7 @@ BOOL CARDbSetChannel (PVOID pDeviceHandler, UINT uConnectionChannel) * */ /* -BOOL CARDbSendPacket (PVOID pDeviceHandler, PVOID pPacket, CARD_PKT_TYPE ePktType, UINT uLength) +BOOL CARDbSendPacket (void *pDeviceHandler, void *pPacket, CARD_PKT_TYPE ePktType, UINT uLength) { PSDevice pDevice = (PSDevice) pDeviceHandler; if (ePktType == PKT_TYPE_802_11_MNG) { @@ -881,7 +881,7 @@ BOOL CARDbSendPacket (PVOID pDeviceHandler, PVOID pPacket, CARD_PKT_TYPE ePktTyp * Return Value: TRUE if short preamble; otherwise FALSE * */ -BOOL CARDbIsShortPreamble (PVOID pDeviceHandler) +BOOL CARDbIsShortPreamble (void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; if (pDevice->byPreambleType == 0) { @@ -902,7 +902,7 @@ BOOL CARDbIsShortPreamble (PVOID pDeviceHandler) * Return Value: TRUE if short slot time; otherwise FALSE * */ -BOOL CARDbIsShorSlotTime (PVOID pDeviceHandler) +BOOL CARDbIsShorSlotTime (void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; return(pDevice->bShortSlotTime); @@ -921,7 +921,7 @@ BOOL CARDbIsShorSlotTime (PVOID pDeviceHandler) * Return Value: None. * */ -BOOL CARDbSetPhyParameter (PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType, WORD wCapInfo, BYTE byERPField, PVOID pvSupportRateIEs, PVOID pvExtSupportRateIEs) +BOOL CARDbSetPhyParameter (void *pDeviceHandler, CARD_PHY_TYPE ePHYType, WORD wCapInfo, BYTE byERPField, void *pvSupportRateIEs, void *pvExtSupportRateIEs) { PSDevice pDevice = (PSDevice) pDeviceHandler; BYTE byCWMaxMin = 0; @@ -1108,7 +1108,7 @@ BOOL CARDbSetPhyParameter (PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType, WORD wC * Return Value: none * */ -BOOL CARDbUpdateTSF (PVOID pDeviceHandler, BYTE byRxRate, QWORD qwBSSTimestamp, QWORD qwLocalTSF) +BOOL CARDbUpdateTSF (void *pDeviceHandler, BYTE byRxRate, QWORD qwBSSTimestamp, QWORD qwLocalTSF) { PSDevice pDevice = (PSDevice) pDeviceHandler; QWORD qwTSFOffset; @@ -1143,7 +1143,7 @@ BOOL CARDbUpdateTSF (PVOID pDeviceHandler, BYTE byRxRate, QWORD qwBSSTimestamp, * Return Value: TRUE if succeed; otherwise FALSE * */ -BOOL CARDbSetBeaconPeriod (PVOID pDeviceHandler, WORD wBeaconInterval) +BOOL CARDbSetBeaconPeriod (void *pDeviceHandler, WORD wBeaconInterval) { PSDevice pDevice = (PSDevice) pDeviceHandler; UINT uBeaconInterval = 0; @@ -1197,7 +1197,7 @@ BOOL CARDbSetBeaconPeriod (PVOID pDeviceHandler, WORD wBeaconInterval) * Return Value: TRUE if all data packet complete; otherwise FALSE. * */ -BOOL CARDbStopTxPacket (PVOID pDeviceHandler, CARD_PKT_TYPE ePktType) +BOOL CARDbStopTxPacket (void *pDeviceHandler, CARD_PKT_TYPE ePktType) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1255,7 +1255,7 @@ BOOL CARDbStopTxPacket (PVOID pDeviceHandler, CARD_PKT_TYPE ePktType) * Return Value: TRUE if success; FALSE if failed. * */ -BOOL CARDbStartTxPacket (PVOID pDeviceHandler, CARD_PKT_TYPE ePktType) +BOOL CARDbStartTxPacket (void *pDeviceHandler, CARD_PKT_TYPE ePktType) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1297,7 +1297,7 @@ BOOL CARDbStartTxPacket (PVOID pDeviceHandler, CARD_PKT_TYPE ePktType) * Return Value: TRUE if success; FALSE if failed. * */ -BOOL CARDbSetBSSID(PVOID pDeviceHandler, PBYTE pbyBSSID, CARD_OP_MODE eOPMode) +BOOL CARDbSetBSSID(void *pDeviceHandler, PBYTE pbyBSSID, CARD_OP_MODE eOPMode) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1367,7 +1367,7 @@ BOOL CARDbSetBSSID(PVOID pDeviceHandler, PBYTE pbyBSSID, CARD_OP_MODE eOPMode) * */ BOOL CARDbSetTxDataRate( - PVOID pDeviceHandler, + void *pDeviceHandler, WORD wDataRate ) { @@ -1393,7 +1393,7 @@ BOOL CARDbSetTxDataRate( -*/ BOOL CARDbPowerDown( - PVOID pDeviceHandler + void *pDeviceHandler ) { PSDevice pDevice = (PSDevice)pDeviceHandler; @@ -1430,7 +1430,7 @@ CARDbPowerDown( * Return Value: TRUE if success; otherwise FALSE * */ -BOOL CARDbRadioPowerOff (PVOID pDeviceHandler) +BOOL CARDbRadioPowerOff (void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; BOOL bResult = TRUE; @@ -1479,7 +1479,7 @@ MACvRegBitsOn(pDevice->PortOffset, MAC_REG_GPIOCTL0, LED_ACTSET); //LED issue * Return Value: TRUE if success; otherwise FALSE * */ -BOOL CARDbRadioPowerOn (PVOID pDeviceHandler) +BOOL CARDbRadioPowerOn (void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; BOOL bResult = TRUE; @@ -1523,7 +1523,7 @@ MACvRegBitsOff(pDevice->PortOffset, MAC_REG_GPIOCTL0, LED_ACTSET); //LED issue -BOOL CARDbRemoveKey (PVOID pDeviceHandler, PBYTE pbyBSSID) +BOOL CARDbRemoveKey (void *pDeviceHandler, PBYTE pbyBSSID) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1550,7 +1550,7 @@ BOOL CARDbRemoveKey (PVOID pDeviceHandler, PBYTE pbyBSSID) -*/ BOOL CARDbAdd_PMKID_Candidate ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN PBYTE pbyBSSID, IN BOOL bRSNCapExist, IN WORD wRSNCap @@ -1599,9 +1599,9 @@ CARDbAdd_PMKID_Candidate ( return TRUE; } -PVOID +void * CARDpGetCurrentAddress ( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1611,7 +1611,7 @@ CARDpGetCurrentAddress ( -void CARDvInitChannelTable (PVOID pDeviceHandler) +void CARDvInitChannelTable (void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; BOOL bMultiBand = FALSE; @@ -1708,8 +1708,8 @@ void CARDvInitChannelTable (PVOID pDeviceHandler) -*/ BOOL CARDbStartMeasure ( - IN PVOID pDeviceHandler, - IN PVOID pvMeasureEIDs, + IN void *pDeviceHandler, + IN void *pvMeasureEIDs, IN UINT uNumOfMeasureEIDs ) { @@ -1835,7 +1835,7 @@ CARDbStartMeasure ( -*/ BOOL CARDbChannelSwitch ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN BYTE byMode, IN BYTE byNewChannel, IN BYTE byCount @@ -1878,7 +1878,7 @@ CARDbChannelSwitch ( -*/ BOOL CARDbSetQuiet ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN BOOL bResetQuiet, IN BYTE byQuietCount, IN BYTE byQuietPeriod, @@ -1934,7 +1934,7 @@ CARDbSetQuiet ( -*/ BOOL CARDbStartQuiet ( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2035,9 +2035,9 @@ CARDbStartQuiet ( -*/ void CARDvSetCountryInfo ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN CARD_PHY_TYPE ePHYType, - IN PVOID pIE + IN void *pIE ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2094,7 +2094,7 @@ CARDvSetCountryInfo ( -*/ void CARDvSetPowerConstraint ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN BYTE byChannel, IN I8 byPower ) @@ -2129,7 +2129,7 @@ CARDvSetPowerConstraint ( -*/ void CARDvGetPowerCapability ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, OUT PBYTE pbyMinPower, OUT PBYTE pbyMaxPower ) @@ -2165,7 +2165,7 @@ CARDvGetPowerCapability ( -*/ BYTE CARDbySetSupportChannels ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN OUT PBYTE pbyIEs ) { @@ -2256,7 +2256,7 @@ CARDbySetSupportChannels ( -*/ I8 CARDbyGetTransmitPower ( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2281,8 +2281,8 @@ CARDbChannelGetList ( void CARDvSetCountryIE( - IN PVOID pDeviceHandler, - IN PVOID pIE + IN void *pDeviceHandler, + IN void *pIE ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2307,7 +2307,7 @@ CARDvSetCountryIE( BOOL CARDbGetChannelMapInfo( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN UINT uChannelIndex, OUT PBYTE pbyChannelNumber, OUT PBYTE pbyMap @@ -2326,7 +2326,7 @@ CARDbGetChannelMapInfo( void CARDvSetChannelMapInfo( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN UINT uChannelIndex, IN BYTE byMap ) @@ -2342,7 +2342,7 @@ CARDvSetChannelMapInfo( void CARDvClearChannelMapInfo( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ) { // PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2356,7 +2356,7 @@ CARDvClearChannelMapInfo( BYTE CARDbyAutoChannelSelect( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, CARD_PHY_TYPE ePHYType ) { @@ -2422,7 +2422,7 @@ CARDbyAutoChannelSelect( //xxx void CARDvSafeResetTx ( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2478,7 +2478,7 @@ CARDvSafeResetTx ( -*/ void CARDvSafeResetRx ( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2537,7 +2537,7 @@ CARDvSafeResetRx ( * Return Value: response Control frame rate * */ -WORD CARDwGetCCKControlRate(PVOID pDeviceHandler, WORD wRateIdx) +WORD CARDwGetCCKControlRate(void *pDeviceHandler, WORD wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; UINT ui = (UINT)wRateIdx; @@ -2564,14 +2564,14 @@ WORD CARDwGetCCKControlRate(PVOID pDeviceHandler, WORD wRateIdx) * Return Value: response Control frame rate * */ -WORD CARDwGetOFDMControlRate (PVOID pDeviceHandler, WORD wRateIdx) +WORD CARDwGetOFDMControlRate (void *pDeviceHandler, WORD wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; UINT ui = (UINT)wRateIdx; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"BASIC RATE: %X\n", pDevice->wBasicRate); - if (!CARDbIsOFDMinBasicRate((PVOID)pDevice)) { + if (!CARDbIsOFDMinBasicRate((void *)pDevice)) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"CARDwGetOFDMControlRate:(NO OFDM) %d\n", wRateIdx); if (wRateIdx > RATE_24M) wRateIdx = RATE_24M; @@ -2601,7 +2601,7 @@ WORD CARDwGetOFDMControlRate (PVOID pDeviceHandler, WORD wRateIdx) * Return Value: None. * */ -void CARDvSetRSPINF (PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType) +void CARDvSetRSPINF (void *pDeviceHandler, CARD_PHY_TYPE ePHYType) { PSDevice pDevice = (PSDevice) pDeviceHandler; BYTE byServ = 0x00, bySignal = 0x00; //For CCK @@ -2614,7 +2614,7 @@ void CARDvSetRSPINF (PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType) //RSPINF_b_1 BBvCaculateParameter(pDevice, 14, - CARDwGetCCKControlRate((PVOID)pDevice, RATE_1M), + CARDwGetCCKControlRate((void *)pDevice, RATE_1M), PK_TYPE_11B, &wLen, &byServ, @@ -2625,7 +2625,7 @@ void CARDvSetRSPINF (PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType) ///RSPINF_b_2 BBvCaculateParameter(pDevice, 14, - CARDwGetCCKControlRate((PVOID)pDevice, RATE_2M), + CARDwGetCCKControlRate((void *)pDevice, RATE_2M), PK_TYPE_11B, &wLen, &byServ, @@ -2636,7 +2636,7 @@ void CARDvSetRSPINF (PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType) //RSPINF_b_5 BBvCaculateParameter(pDevice, 14, - CARDwGetCCKControlRate((PVOID)pDevice, RATE_5M), + CARDwGetCCKControlRate((void *)pDevice, RATE_5M), PK_TYPE_11B, &wLen, &byServ, @@ -2647,7 +2647,7 @@ void CARDvSetRSPINF (PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType) //RSPINF_b_11 BBvCaculateParameter(pDevice, 14, - CARDwGetCCKControlRate((PVOID)pDevice, RATE_11M), + CARDwGetCCKControlRate((void *)pDevice, RATE_11M), PK_TYPE_11B, &wLen, &byServ, @@ -2686,26 +2686,26 @@ void CARDvSetRSPINF (PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType) &byRsvTime); VNSvOutPortW(pDevice->PortOffset + MAC_REG_RSPINF_A_24, MAKEWORD(byTxRate,byRsvTime)); //RSPINF_a_36 - s_vCaculateOFDMRParameter(CARDwGetOFDMControlRate((PVOID)pDevice, RATE_36M), + s_vCaculateOFDMRParameter(CARDwGetOFDMControlRate((void *)pDevice, RATE_36M), ePHYType, &byTxRate, &byRsvTime); VNSvOutPortW(pDevice->PortOffset + MAC_REG_RSPINF_A_36, MAKEWORD(byTxRate,byRsvTime)); //RSPINF_a_48 - s_vCaculateOFDMRParameter(CARDwGetOFDMControlRate((PVOID)pDevice, RATE_48M), + s_vCaculateOFDMRParameter(CARDwGetOFDMControlRate((void *)pDevice, RATE_48M), ePHYType, &byTxRate, &byRsvTime); VNSvOutPortW(pDevice->PortOffset + MAC_REG_RSPINF_A_48, MAKEWORD(byTxRate,byRsvTime)); //RSPINF_a_54 - s_vCaculateOFDMRParameter(CARDwGetOFDMControlRate((PVOID)pDevice, RATE_54M), + s_vCaculateOFDMRParameter(CARDwGetOFDMControlRate((void *)pDevice, RATE_54M), ePHYType, &byTxRate, &byRsvTime); VNSvOutPortW(pDevice->PortOffset + MAC_REG_RSPINF_A_54, MAKEWORD(byTxRate,byRsvTime)); //RSPINF_a_72 - s_vCaculateOFDMRParameter(CARDwGetOFDMControlRate((PVOID)pDevice, RATE_54M), + s_vCaculateOFDMRParameter(CARDwGetOFDMControlRate((void *)pDevice, RATE_54M), ePHYType, &byTxRate, &byRsvTime); @@ -2726,7 +2726,7 @@ void CARDvSetRSPINF (PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType) * Return Value: None. * */ -void vUpdateIFS (PVOID pDeviceHandler) +void vUpdateIFS (void *pDeviceHandler) { //Set SIFS, DIFS, EIFS, SlotTime, CwMin PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2780,7 +2780,7 @@ void vUpdateIFS (PVOID pDeviceHandler) VNSvOutPortB(pDevice->PortOffset + MAC_REG_CWMAXMIN0, (BYTE)byMaxMin); } -void CARDvUpdateBasicTopRate (PVOID pDeviceHandler) +void CARDvUpdateBasicTopRate (void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; BYTE byTopOFDM = RATE_24M, byTopCCK = RATE_1M; @@ -2820,7 +2820,7 @@ void CARDvUpdateBasicTopRate (PVOID pDeviceHandler) * Return Value: TRUE if succeeded; FALSE if failed. * */ -BOOL CARDbAddBasicRate (PVOID pDeviceHandler, WORD wRateIdx) +BOOL CARDbAddBasicRate (void *pDeviceHandler, WORD wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; WORD wRate = (WORD)(1<wBasicRate |= wRate; //Determines the highest basic rate. - CARDvUpdateBasicTopRate((PVOID)pDevice); + CARDvUpdateBasicTopRate((void *)pDevice); return(TRUE); } -BOOL CARDbIsOFDMinBasicRate (PVOID pDeviceHandler) +BOOL CARDbIsOFDMinBasicRate (void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; int ii; @@ -2845,14 +2845,14 @@ BOOL CARDbIsOFDMinBasicRate (PVOID pDeviceHandler) return FALSE; } -BYTE CARDbyGetPktType (PVOID pDeviceHandler) +BYTE CARDbyGetPktType (void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; if (pDevice->byBBType == BB_TYPE_11A || pDevice->byBBType == BB_TYPE_11B) { return (BYTE)pDevice->byBBType; } - else if (CARDbIsOFDMinBasicRate((PVOID)pDevice)) { + else if (CARDbIsOFDMinBasicRate((void *)pDevice)) { return PK_TYPE_11GA; } else { @@ -2902,7 +2902,7 @@ void CARDvSetLoopbackMode (DWORD_PTR dwIoBase, WORD wLoopbackMode) * Return Value: none * */ -BOOL CARDbSoftwareReset (PVOID pDeviceHandler) +BOOL CARDbSoftwareReset (void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; diff --git a/drivers/staging/vt6655/card.h b/drivers/staging/vt6655/card.h index 6a9980d..2114e99 100644 --- a/drivers/staging/vt6655/card.h +++ b/drivers/staging/vt6655/card.h @@ -87,77 +87,77 @@ typedef enum _CARD_OP_MODE { /*--------------------- Export Functions --------------------------*/ BOOL ChannelValid(UINT CountryCode, UINT ChannelIndex); -void CARDvSetRSPINF(PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType); -void vUpdateIFS(PVOID pDeviceHandler); -void CARDvUpdateBasicTopRate(PVOID pDeviceHandler); -BOOL CARDbAddBasicRate(PVOID pDeviceHandler, WORD wRateIdx); -BOOL CARDbIsOFDMinBasicRate(PVOID pDeviceHandler); +void CARDvSetRSPINF(void *pDeviceHandler, CARD_PHY_TYPE ePHYType); +void vUpdateIFS(void *pDeviceHandler); +void CARDvUpdateBasicTopRate(void *pDeviceHandler); +BOOL CARDbAddBasicRate(void *pDeviceHandler, WORD wRateIdx); +BOOL CARDbIsOFDMinBasicRate(void *pDeviceHandler); void CARDvSetLoopbackMode(DWORD_PTR dwIoBase, WORD wLoopbackMode); -BOOL CARDbSoftwareReset(PVOID pDeviceHandler); +BOOL CARDbSoftwareReset(void *pDeviceHandler); void CARDvSetFirstNextTBTT(DWORD_PTR dwIoBase, WORD wBeaconInterval); void CARDvUpdateNextTBTT(DWORD_PTR dwIoBase, QWORD qwTSF, WORD wBeaconInterval); BOOL CARDbGetCurrentTSF(DWORD_PTR dwIoBase, PQWORD pqwCurrTSF); QWORD CARDqGetNextTBTT(QWORD qwTSF, WORD wBeaconInterval); QWORD CARDqGetTSFOffset(BYTE byRxRate, QWORD qwTSF1, QWORD qwTSF2); -BOOL CARDbSetTxPower(PVOID pDeviceHandler, ULONG ulTxPower); -BYTE CARDbyGetPktType(PVOID pDeviceHandler); -void CARDvSafeResetTx(PVOID pDeviceHandler); -void CARDvSafeResetRx(PVOID pDeviceHandler); +BOOL CARDbSetTxPower(void *pDeviceHandler, ULONG ulTxPower); +BYTE CARDbyGetPktType(void *pDeviceHandler); +void CARDvSafeResetTx(void *pDeviceHandler); +void CARDvSafeResetRx(void *pDeviceHandler); //xxx -BOOL CARDbRadioPowerOff(PVOID pDeviceHandler); -BOOL CARDbRadioPowerOn(PVOID pDeviceHandler); -BOOL CARDbSetChannel(PVOID pDeviceHandler, UINT uConnectionChannel); -//BOOL CARDbSendPacket(PVOID pDeviceHandler, PVOID pPacket, CARD_PKT_TYPE ePktType, UINT uLength); -BOOL CARDbIsShortPreamble(PVOID pDeviceHandler); -BOOL CARDbIsShorSlotTime(PVOID pDeviceHandler); -BOOL CARDbSetPhyParameter(PVOID pDeviceHandler, CARD_PHY_TYPE ePHYType, WORD wCapInfo, BYTE byERPField, PVOID pvSupportRateIEs, PVOID pvExtSupportRateIEs); -BOOL CARDbUpdateTSF(PVOID pDeviceHandler, BYTE byRxRate, QWORD qwBSSTimestamp, QWORD qwLocalTSF); -BOOL CARDbStopTxPacket(PVOID pDeviceHandler, CARD_PKT_TYPE ePktType); -BOOL CARDbStartTxPacket(PVOID pDeviceHandler, CARD_PKT_TYPE ePktType); -BOOL CARDbSetBeaconPeriod(PVOID pDeviceHandler, WORD wBeaconInterval); -BOOL CARDbSetBSSID(PVOID pDeviceHandler, PBYTE pbyBSSID, CARD_OP_MODE eOPMode); +BOOL CARDbRadioPowerOff(void *pDeviceHandler); +BOOL CARDbRadioPowerOn(void *pDeviceHandler); +BOOL CARDbSetChannel(void *pDeviceHandler, UINT uConnectionChannel); +//BOOL CARDbSendPacket(void *pDeviceHandler, void *pPacket, CARD_PKT_TYPE ePktType, UINT uLength); +BOOL CARDbIsShortPreamble(void *pDeviceHandler); +BOOL CARDbIsShorSlotTime(void *pDeviceHandler); +BOOL CARDbSetPhyParameter(void *pDeviceHandler, CARD_PHY_TYPE ePHYType, WORD wCapInfo, BYTE byERPField, void *pvSupportRateIEs, void *pvExtSupportRateIEs); +BOOL CARDbUpdateTSF(void *pDeviceHandler, BYTE byRxRate, QWORD qwBSSTimestamp, QWORD qwLocalTSF); +BOOL CARDbStopTxPacket(void *pDeviceHandler, CARD_PKT_TYPE ePktType); +BOOL CARDbStartTxPacket(void *pDeviceHandler, CARD_PKT_TYPE ePktType); +BOOL CARDbSetBeaconPeriod(void *pDeviceHandler, WORD wBeaconInterval); +BOOL CARDbSetBSSID(void *pDeviceHandler, PBYTE pbyBSSID, CARD_OP_MODE eOPMode); BOOL CARDbPowerDown( - PVOID pDeviceHandler + void *pDeviceHandler ); BOOL CARDbSetTxDataRate( - PVOID pDeviceHandler, + void *pDeviceHandler, WORD wDataRate ); -BOOL CARDbRemoveKey (PVOID pDeviceHandler, PBYTE pbyBSSID); +BOOL CARDbRemoveKey (void *pDeviceHandler, PBYTE pbyBSSID); BOOL CARDbAdd_PMKID_Candidate ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN PBYTE pbyBSSID, IN BOOL bRSNCapExist, IN WORD wRSNCap ); -PVOID +void * CARDpGetCurrentAddress ( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ); -void CARDvInitChannelTable(PVOID pDeviceHandler); -BYTE CARDbyGetChannelMapping(PVOID pDeviceHandler, BYTE byChannelNumber, CARD_PHY_TYPE ePhyType); +void CARDvInitChannelTable(void *pDeviceHandler); +BYTE CARDbyGetChannelMapping(void *pDeviceHandler, BYTE byChannelNumber, CARD_PHY_TYPE ePhyType); BOOL CARDbStartMeasure ( - IN PVOID pDeviceHandler, - IN PVOID pvMeasureEIDs, + IN void *pDeviceHandler, + IN void *pvMeasureEIDs, IN UINT uNumOfMeasureEIDs ); BOOL CARDbChannelSwitch ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN BYTE byMode, IN BYTE byNewChannel, IN BYTE byCount @@ -165,7 +165,7 @@ CARDbChannelSwitch ( BOOL CARDbSetQuiet ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN BOOL bResetQuiet, IN BYTE byQuietCount, IN BYTE byQuietPeriod, @@ -175,39 +175,39 @@ CARDbSetQuiet ( BOOL CARDbStartQuiet ( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ); void CARDvSetCountryInfo ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN CARD_PHY_TYPE ePHYType, - IN PVOID pIE + IN void *pIE ); void CARDvSetPowerConstraint ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN BYTE byChannel, IN I8 byPower ); void CARDvGetPowerCapability ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, OUT PBYTE pbyMinPower, OUT PBYTE pbyMaxPower ); BYTE CARDbySetSupportChannels ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN OUT PBYTE pbyIEs ); I8 CARDbyGetTransmitPower ( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ); BOOL @@ -218,13 +218,13 @@ CARDbChannelGetList ( void CARDvSetCountryIE( - IN PVOID pDeviceHandler, - IN PVOID pIE + IN void *pDeviceHandler, + IN void *pIE ); BOOL CARDbGetChannelMapInfo( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN UINT uChannelIndex, OUT PBYTE pbyChannelNumber, OUT PBYTE pbyMap @@ -232,23 +232,23 @@ CARDbGetChannelMapInfo( void CARDvSetChannelMapInfo( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN UINT uChannelIndex, IN BYTE byMap ); void CARDvClearChannelMapInfo( - IN PVOID pDeviceHandler + IN void *pDeviceHandler ); BYTE CARDbyAutoChannelSelect( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, CARD_PHY_TYPE ePHYType ); -BYTE CARDbyGetChannelNumber(PVOID pDeviceHandler, BYTE byChannelIndex); +BYTE CARDbyGetChannelNumber(void *pDeviceHandler, BYTE byChannelIndex); #endif // __CARD_H__ diff --git a/drivers/staging/vt6655/datarate.c b/drivers/staging/vt6655/datarate.c index eb7653c..e0d1a94 100644 --- a/drivers/staging/vt6655/datarate.c +++ b/drivers/staging/vt6655/datarate.c @@ -196,7 +196,7 @@ wGetRateIdx( -*/ void RATEvParseMaxRate ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN PWLAN_IE_SUPP_RATES pItemRates, IN PWLAN_IE_SUPP_RATES pItemExtRates, IN BOOL bUpdateBasicRate, @@ -235,7 +235,7 @@ UINT uRateLen; if (WLAN_MGMT_IS_BASICRATE(byRate) && (bUpdateBasicRate == TRUE)) { // Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate - CARDbAddBasicRate((PVOID)pDevice, wGetRateIdx(byRate)); + CARDbAddBasicRate((void *)pDevice, wGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", wGetRateIdx(byRate)); } byRate = (BYTE)(pItemRates->abyRates[ii]&0x7F); @@ -258,7 +258,7 @@ UINT uRateLen; // select highest basic rate if (WLAN_MGMT_IS_BASICRATE(pItemExtRates->abyRates[ii])) { // Add to basic rate set, update pDevice->byTopCCKBasicRate and pDevice->byTopOFDMBasicRate - CARDbAddBasicRate((PVOID)pDevice, wGetRateIdx(byRate)); + CARDbAddBasicRate((void *)pDevice, wGetRateIdx(byRate)); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"ParseMaxRate AddBasicRate: %d\n", wGetRateIdx(byRate)); } byRate = (BYTE)(pItemExtRates->abyRates[ii]&0x7F); @@ -271,7 +271,7 @@ UINT uRateLen; } } //if(pItemExtRates != NULL) - if ((pDevice->byPacketType == PK_TYPE_11GB) && CARDbIsOFDMinBasicRate((PVOID)pDevice)) { + if ((pDevice->byPacketType == PK_TYPE_11GB) && CARDbIsOFDMinBasicRate((void *)pDevice)) { pDevice->byPacketType = PK_TYPE_11GA; } @@ -283,7 +283,7 @@ UINT uRateLen; else *pwMaxBasicRate = pDevice->byTopOFDMBasicRate; if (wOldBasicRate != pDevice->wBasicRate) - CARDvSetRSPINF((PVOID)pDevice, pDevice->eCurrentPHYType); + CARDvSetRSPINF((void *)pDevice, pDevice->eCurrentPHYType); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Exit ParseMaxRate\n"); } @@ -309,7 +309,7 @@ UINT uRateLen; void RATEvTxRateFallBack ( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN PKnownNodeDB psNodeDBTable ) { diff --git a/drivers/staging/vt6655/datarate.h b/drivers/staging/vt6655/datarate.h index 1135fe3..bba4a16 100644 --- a/drivers/staging/vt6655/datarate.h +++ b/drivers/staging/vt6655/datarate.h @@ -56,7 +56,7 @@ void RATEvParseMaxRate( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN PWLAN_IE_SUPP_RATES pItemRates, IN PWLAN_IE_SUPP_RATES pItemExtRates, IN BOOL bUpdateBasicRate, @@ -69,7 +69,7 @@ RATEvParseMaxRate( void RATEvTxRateFallBack( - IN PVOID pDeviceHandler, + IN void *pDeviceHandler, IN PKnownNodeDB psNodeDBTable ); diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 90ebad1..8a63a03 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -729,7 +729,7 @@ else pDevice->abyOFDMPwrTbl[ii+CB_MAX_CHANNEL_24G+1] = SROMbyReadEmbedded(pDevice->PortOffset, (BYTE)(ii + EEP_OFS_OFDMA_PWR_TBL)); pDevice->abyOFDMDefaultPwr[ii+CB_MAX_CHANNEL_24G+1] = SROMbyReadEmbedded(pDevice->PortOffset, (BYTE)(ii + EEP_OFS_OFDMA_PWR_dBm)); } - CARDvInitChannelTable((PVOID)pDevice); + CARDvInitChannelTable((void *)pDevice); if (pDevice->byLocalID > REV_ID_VT3253_B1) { @@ -1074,7 +1074,7 @@ device_found1(struct pci_dev *pcid, const struct pci_device_id *ent) //Enable the chip specified capbilities pDevice->flags = pDevice->sOpts.flags | (pChip_info->flags & 0xFF000000UL); pDevice->tx_80211 = device_dma0_tx_80211; - pDevice->sMgmtObj.pAdapter = (PVOID)pDevice; + pDevice->sMgmtObj.pAdapter = (void *)pDevice; pDevice->pMgmt = &(pDevice->sMgmtObj); dev->irq = pcid->irq; @@ -1249,7 +1249,7 @@ device_release_WPADEV(pDevice); unregister_netdev(dev); if (pDevice->PortOffset) - iounmap((PVOID)pDevice->PortOffset); + iounmap((void *)pDevice->PortOffset); if (pDevice->pcid) pci_release_regions(pDevice->pcid); @@ -1461,7 +1461,7 @@ static void device_free_rd0_ring(PSDevice pDevice) { dev_kfree_skb(pRDInfo->skb); - kfree((PVOID)pDesc->pRDInfo); + kfree((void *)pDesc->pRDInfo); } } @@ -1479,7 +1479,7 @@ static void device_free_rd1_ring(PSDevice pDevice) { dev_kfree_skb(pRDInfo->skb); - kfree((PVOID)pDesc->pRDInfo); + kfree((void *)pDesc->pRDInfo); } } @@ -1564,7 +1564,7 @@ static void device_free_td0_ring(PSDevice pDevice) { if (pTDInfo->skb) dev_kfree_skb(pTDInfo->skb); - kfree((PVOID)pDesc->pTDInfo); + kfree((void *)pDesc->pTDInfo); } } @@ -1582,7 +1582,7 @@ static void device_free_td1_ring(PSDevice pDevice) { if (pTDInfo->skb) dev_kfree_skb(pTDInfo->skb); - kfree((PVOID)pDesc->pTDInfo); + kfree((void *)pDesc->pTDInfo); } } diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 58dced7..ab13bdf 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -314,7 +314,7 @@ s_vGetDASA ( //PLICE_DEBUG -> -void MngWorkItem(PVOID Context) +void MngWorkItem(void *Context) { PSRxMgmtPacket pRxMgmtPacket; PSDevice pDevice = (PSDevice) Context; diff --git a/drivers/staging/vt6655/dpc.h b/drivers/staging/vt6655/dpc.h index 0860ea5..4129c11 100644 --- a/drivers/staging/vt6655/dpc.h +++ b/drivers/staging/vt6655/dpc.h @@ -47,7 +47,7 @@ device_receive_frame ( IN PSRxDesc pCurrRD ); -void MngWorkItem(PVOID Context); +void MngWorkItem(void *Context); #endif // __RXTX_H__ diff --git a/drivers/staging/vt6655/key.c b/drivers/staging/vt6655/key.c index efff7db..b40c400 100644 --- a/drivers/staging/vt6655/key.c +++ b/drivers/staging/vt6655/key.c @@ -104,10 +104,10 @@ void KeyvInitTable (PSKeyManagement pTable, DWORD_PTR dwIoBase) for (i=0;iKeyTable[i].bInUse = FALSE; pTable->KeyTable[i].PairwiseKey.bKeyValid = FALSE; - pTable->KeyTable[i].PairwiseKey.pvKeyTable = (PVOID)&pTable->KeyTable[i]; + pTable->KeyTable[i].PairwiseKey.pvKeyTable = (void *)&pTable->KeyTable[i]; for (jj=0; jj < MAX_GROUP_KEY; jj++) { pTable->KeyTable[i].GroupKey[jj].bKeyValid = FALSE; - pTable->KeyTable[i].GroupKey[jj].pvKeyTable = (PVOID)&pTable->KeyTable[i]; + pTable->KeyTable[i].GroupKey[jj].pvKeyTable = (void *)&pTable->KeyTable[i]; } pTable->KeyTable[i].wKeyCtl = 0; pTable->KeyTable[i].dwGTKeyIndex = 0; diff --git a/drivers/staging/vt6655/key.h b/drivers/staging/vt6655/key.h index 766ff04..4cbd82f 100644 --- a/drivers/staging/vt6655/key.h +++ b/drivers/staging/vt6655/key.h @@ -66,7 +66,7 @@ typedef struct tagSKeyItem BYTE byCipherSuite; BYTE byReserved0; DWORD dwKeyIndex; - PVOID pvKeyTable; + void *pvKeyTable; } SKeyItem, *PSKeyItem; //64 typedef struct tagSKeyTable diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index effefdb..8d1772e 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -133,7 +133,7 @@ void s_vFillRTSHead( IN PSDevice pDevice, IN BYTE byPktType, - IN PVOID pvRTS, + IN void * pvRTS, IN UINT cbFrameLength, IN BOOL bNeedAck, IN BOOL bDisCRC, @@ -147,10 +147,10 @@ void s_vGenerateTxParameter( IN PSDevice pDevice, IN BYTE byPktType, - IN PVOID pTxBufHead, - IN PVOID pvRrvTime, - IN PVOID pvRTS, - IN PVOID pvCTS, + IN void * pTxBufHead, + IN void * pvRrvTime, + IN void * pvRTS, + IN void * pvCTS, IN UINT cbFrameSize, IN BOOL bNeedACK, IN UINT uDMAIdx, @@ -164,7 +164,7 @@ static void s_vFillFragParameter( IN PSDevice pDevice, IN PBYTE pbyBuffer, IN UINT uTxType, - IN PVOID pvtdCurr, + IN void * pvtdCurr, IN WORD wFragType, IN UINT cbReqCount ); @@ -193,7 +193,7 @@ UINT s_uFillDataHead ( IN PSDevice pDevice, IN BYTE byPktType, - IN PVOID pTxDataHead, + IN void * pTxDataHead, IN UINT cbFrameLength, IN UINT uDMAIdx, IN BOOL bNeedAck, @@ -723,7 +723,7 @@ UINT s_uFillDataHead ( IN PSDevice pDevice, IN BYTE byPktType, - IN PVOID pTxDataHead, + IN void * pTxDataHead, IN UINT cbFrameLength, IN UINT uDMAIdx, IN BOOL bNeedAck, @@ -855,7 +855,7 @@ void s_vFillRTSHead ( IN PSDevice pDevice, IN BYTE byPktType, - IN PVOID pvRTS, + IN void * pvRTS, IN UINT cbFrameLength, IN BOOL bNeedAck, IN BOOL bDisCRC, @@ -1050,7 +1050,7 @@ s_vFillCTSHead ( IN PSDevice pDevice, IN UINT uDMAIdx, IN BYTE byPktType, - IN PVOID pvCTS, + IN void * pvCTS, IN UINT cbFrameLength, IN BOOL bNeedAck, IN BOOL bDisCRC, @@ -1154,10 +1154,10 @@ void s_vGenerateTxParameter ( IN PSDevice pDevice, IN BYTE byPktType, - IN PVOID pTxBufHead, - IN PVOID pvRrvTime, - IN PVOID pvRTS, - IN PVOID pvCTS, + IN void * pTxBufHead, + IN void * pvRrvTime, + IN void * pvRTS, + IN void * pvCTS, IN UINT cbFrameSize, IN BOOL bNeedACK, IN UINT uDMAIdx, @@ -1273,7 +1273,7 @@ s_vFillFragParameter( IN PSDevice pDevice, IN PBYTE pbyBuffer, IN UINT uTxType, - IN PVOID pvtdCurr, + IN void * pvtdCurr, IN WORD wFragType, IN UINT cbReqCount ) @@ -1376,11 +1376,11 @@ s_cbFillTxBufHead ( PSTxBufHead psTxBufHd = (PSTxBufHead) pbyTxBufferAddr; // UINT tmpDescIdx; UINT cbHeaderLength = 0; - PVOID pvRrvTime; + void * pvRrvTime; PSMICHDRHead pMICHDR; - PVOID pvRTS; - PVOID pvCTS; - PVOID pvTxDataHd; + void * pvRTS; + void * pvCTS; + void * pvTxDataHd; WORD wTxBufSize; // FFinfo size UINT uTotalCopyLength = 0; BYTE byFBOption = AUTO_FB_NONE; @@ -1544,7 +1544,7 @@ s_cbFillTxBufHead ( } } // Auto Fall Back } - memset((PVOID)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderLength - wTxBufSize)); + memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderLength - wTxBufSize)); ////////////////////////////////////////////////////////////////// if ((bNeedEncrypt == TRUE) && (pTransmitKey != NULL) && (pTransmitKey->byCipherSuite == KEY_CTL_TKIP)) { @@ -1600,7 +1600,7 @@ s_cbFillTxBufHead ( //Fill FIFO,RrvTime,RTS,and CTS - s_vGenerateTxParameter(pDevice, byPktType, (PVOID)psTxBufHd, pvRrvTime, pvRTS, pvCTS, + s_vGenerateTxParameter(pDevice, byPktType, (void *)psTxBufHd, pvRrvTime, pvRTS, pvCTS, cbFragmentSize, bNeedACK, uDMAIdx, psEthHeader, pDevice->wCurrentRate); //Fill DataHead uDuration = s_uFillDataHead(pDevice, byPktType, pvTxDataHd, cbFragmentSize, uDMAIdx, bNeedACK, @@ -1643,7 +1643,7 @@ s_cbFillTxBufHead ( //if (pDevice->bAES) { // s_vFillMICHDR(pDevice, (PBYTE)pMICHDR, pbyMacHdr, (WORD)cbFragPayloadSize); //} - //cbReqCount += s_uDoEncryption(pDevice, psEthHeader, (PVOID)psTxBufHd, byKeySel, + //cbReqCount += s_uDoEncryption(pDevice, psEthHeader, (void *)psTxBufHd, byKeySel, // pbyPayloadHead, (WORD)cbFragPayloadSize, uDMAIdx); @@ -1653,7 +1653,7 @@ s_cbFillTxBufHead ( uLength = cbHeaderLength + cbMACHdLen + uPadding + cbIVlen + cb802_1_H_len; //copy TxBufferHeader + MacHeader to desc - memcpy(pbyBuffer, (PVOID)psTxBufHd, uLength); + memcpy(pbyBuffer, (void *)psTxBufHd, uLength); // Copy the Packet into a tx Buffer memcpy((pbyBuffer + uLength), (pPacket + 14), (cbFragPayloadSize - cb802_1_H_len)); @@ -1685,7 +1685,7 @@ s_cbFillTxBufHead ( //4.Set Sequence Control //5.Get S/W generate FCS //-------------------- - s_vFillFragParameter(pDevice, pbyBuffer, uDMAIdx, (PVOID)ptdCurr, wFragType, cbReqCount); + s_vFillFragParameter(pDevice, pbyBuffer, uDMAIdx, (void *)ptdCurr, wFragType, cbReqCount); ptdCurr->pTDInfo->dwReqCount = cbReqCount - uPadding; ptdCurr->pTDInfo->dwHeaderLength = cbHeaderLength; @@ -1704,7 +1704,7 @@ s_cbFillTxBufHead ( wFragType = FRAGCTL_ENDFRAG; //Fill FIFO,RrvTime,RTS,and CTS - s_vGenerateTxParameter(pDevice, byPktType, (PVOID)psTxBufHd, pvRrvTime, pvRTS, pvCTS, + s_vGenerateTxParameter(pDevice, byPktType, (void *)psTxBufHd, pvRrvTime, pvRTS, pvCTS, cbLastFragmentSize, bNeedACK, uDMAIdx, psEthHeader, pDevice->wCurrentRate); //Fill DataHead uDuration = s_uFillDataHead(pDevice, byPktType, pvTxDataHd, cbLastFragmentSize, uDMAIdx, bNeedACK, @@ -1740,7 +1740,7 @@ s_cbFillTxBufHead ( uLength = cbHeaderLength + cbMACHdLen + uPadding + cbIVlen; //copy TxBufferHeader + MacHeader to desc - memcpy(pbyBuffer, (PVOID)psTxBufHd, uLength); + memcpy(pbyBuffer, (void *)psTxBufHd, uLength); // Copy the Packet into a tx Buffer if (bMIC2Frag == FALSE) { @@ -1814,7 +1814,7 @@ s_cbFillTxBufHead ( //-------------------- - s_vFillFragParameter(pDevice, pbyBuffer, uDMAIdx, (PVOID)ptdCurr, wFragType, cbReqCount); + s_vFillFragParameter(pDevice, pbyBuffer, uDMAIdx, (void *)ptdCurr, wFragType, cbReqCount); ptdCurr->pTDInfo->dwReqCount = cbReqCount - uPadding; ptdCurr->pTDInfo->dwHeaderLength = cbHeaderLength; @@ -1834,7 +1834,7 @@ s_cbFillTxBufHead ( wFragType = FRAGCTL_MIDFRAG; //Fill FIFO,RrvTime,RTS,and CTS - s_vGenerateTxParameter(pDevice, byPktType, (PVOID)psTxBufHd, pvRrvTime, pvRTS, pvCTS, + s_vGenerateTxParameter(pDevice, byPktType, (void *)psTxBufHd, pvRrvTime, pvRTS, pvCTS, cbFragmentSize, bNeedACK, uDMAIdx, psEthHeader, pDevice->wCurrentRate); //Fill DataHead uDuration = s_uFillDataHead(pDevice, byPktType, pvTxDataHd, cbFragmentSize, uDMAIdx, bNeedACK, @@ -1864,7 +1864,7 @@ s_cbFillTxBufHead ( //if (pDevice->bAES) { // s_vFillMICHDR(pDevice, (PBYTE)pMICHDR, pbyMacHdr, (WORD)cbFragPayloadSize); //} - //cbReqCount += s_uDoEncryption(pDevice, psEthHeader, (PVOID)psTxBufHd, byKeySel, + //cbReqCount += s_uDoEncryption(pDevice, psEthHeader, (void *)psTxBufHd, byKeySel, // pbyPayloadHead, (WORD)cbFragPayloadSize, uDMAIdx); @@ -1875,7 +1875,7 @@ s_cbFillTxBufHead ( uLength = cbHeaderLength + cbMACHdLen + uPadding + cbIVlen; //copy TxBufferHeader + MacHeader to desc - memcpy(pbyBuffer, (PVOID)psTxBufHd, uLength); + memcpy(pbyBuffer, (void *)psTxBufHd, uLength); // Copy the Packet into a tx Buffer memcpy((pbyBuffer + uLength), @@ -1941,7 +1941,7 @@ s_cbFillTxBufHead ( //5.Get S/W generate FCS //-------------------- - s_vFillFragParameter(pDevice, pbyBuffer, uDMAIdx, (PVOID)ptdCurr, wFragType, cbReqCount); + s_vFillFragParameter(pDevice, pbyBuffer, uDMAIdx, (void *)ptdCurr, wFragType, cbReqCount); ptdCurr->pTDInfo->dwReqCount = cbReqCount - uPadding; ptdCurr->pTDInfo->dwHeaderLength = cbHeaderLength; @@ -1964,7 +1964,7 @@ s_cbFillTxBufHead ( psTxBufHd->wFragCtl |= (WORD)wFragType; //Fill FIFO,RrvTime,RTS,and CTS - s_vGenerateTxParameter(pDevice, byPktType, (PVOID)psTxBufHd, pvRrvTime, pvRTS, pvCTS, + s_vGenerateTxParameter(pDevice, byPktType, (void *)psTxBufHd, pvRrvTime, pvRTS, pvCTS, cbFrameSize, bNeedACK, uDMAIdx, psEthHeader, pDevice->wCurrentRate); //Fill DataHead uDuration = s_uFillDataHead(pDevice, byPktType, pvTxDataHd, cbFrameSize, uDMAIdx, bNeedACK, @@ -2015,7 +2015,7 @@ s_cbFillTxBufHead ( uLength = cbHeaderLength + cbMACHdLen + uPadding + cbIVlen + cb802_1_H_len; //copy TxBufferHeader + MacHeader to desc - memcpy(pbyBuffer, (PVOID)psTxBufHd, uLength); + memcpy(pbyBuffer, (void *)psTxBufHd, uLength); // Copy the Packet into a tx Buffer memcpy((pbyBuffer + uLength), @@ -2342,9 +2342,9 @@ CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) { PSTxDesc pFrstTD; BYTE byPktType; PBYTE pbyTxBufferAddr; - PVOID pvRTS; + void * pvRTS; PSCTS pCTS; - PVOID pvTxDataHd; + void * pvTxDataHd; UINT uDuration; UINT cbReqCount; PS802_11Header pMACHeader; @@ -2362,8 +2362,8 @@ CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) { WORD wTxBufSize; UINT cbMacHdLen; SEthernetHeader sEthHeader; - PVOID pvRrvTime; - PVOID pMICHDR; + void * pvRrvTime; + void * pMICHDR; PSMgmtObject pMgmt = pDevice->pMgmt; WORD wCurrentRate = RATE_1M; @@ -2516,7 +2516,7 @@ CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) { cbHeaderSize = wTxBufSize + sizeof(SRrvTime_ab) + sizeof(STxDataHead_ab); } - memset((PVOID)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); + memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); memcpy(&(sEthHeader.abyDstAddr[0]), &(pPacket->p80211Header->sA3.abyAddr1[0]), U_ETHER_ADDR_LEN); memcpy(&(sEthHeader.abySrcAddr[0]), &(pPacket->p80211Header->sA3.abyAddr2[0]), U_ETHER_ADDR_LEN); @@ -2831,9 +2831,9 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb, PBYTE pbMPDU, UINT cbMPDU PSTxDesc pFrstTD; BYTE byPktType; PBYTE pbyTxBufferAddr; - PVOID pvRTS; - PVOID pvCTS; - PVOID pvTxDataHd; + void * pvRTS; + void * pvCTS; + void * pvTxDataHd; UINT uDuration; UINT cbReqCount; PS802_11Header pMACHeader; @@ -2857,8 +2857,8 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb, PBYTE pbMPDU, UINT cbMPDU WORD wTxBufSize; UINT cbMacHdLen; SEthernetHeader sEthHeader; - PVOID pvRrvTime; - PVOID pMICHDR; + void * pvRrvTime; + void * pMICHDR; PSMgmtObject pMgmt = pDevice->pMgmt; WORD wCurrentRate = RATE_1M; PUWLAN_80211HDR p80211Header; @@ -3061,7 +3061,7 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb, PBYTE pbMPDU, UINT cbMPDU } - memset((PVOID)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); + memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); memcpy(&(sEthHeader.abyDstAddr[0]), &(p80211Header->sA3.abyAddr1[0]), U_ETHER_ADDR_LEN); memcpy(&(sEthHeader.abySrcAddr[0]), &(p80211Header->sA3.abyAddr2[0]), U_ETHER_ADDR_LEN); //========================= diff --git a/drivers/staging/vt6655/ttype.h b/drivers/staging/vt6655/ttype.h index 24d0eca..b71fe59 100644 --- a/drivers/staging/vt6655/ttype.h +++ b/drivers/staging/vt6655/ttype.h @@ -132,13 +132,6 @@ typedef DWORD * PDWORD; typedef QWORD * PQWORD; -typedef void * PVOID; - -// handle declaration -#ifdef STRICT typedef void *HANDLE; -#else -typedef PVOID HANDLE; -#endif #endif // __TTYPE_H__ diff --git a/drivers/staging/vt6655/vntwifi.c b/drivers/staging/vt6655/vntwifi.c index cbfa8e8..03975da 100644 --- a/drivers/staging/vt6655/vntwifi.c +++ b/drivers/staging/vt6655/vntwifi.c @@ -71,7 +71,7 @@ -*/ void VNTWIFIvSetOPMode ( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, IN WMAC_CONFIG_MODE eOPMode ) { @@ -100,7 +100,7 @@ VNTWIFIvSetOPMode ( -*/ void VNTWIFIvSetIBSSParameter ( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, IN WORD wBeaconPeriod, IN WORD wATIMWindow, IN UINT uChannel @@ -129,7 +129,7 @@ VNTWIFIvSetIBSSParameter ( -*/ PWLAN_IE_SSID VNTWIFIpGetCurrentSSID ( - IN PVOID pMgmtHandle + IN void *pMgmtHandle ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -152,7 +152,7 @@ VNTWIFIpGetCurrentSSID ( -*/ UINT VNTWIFIpGetCurrentChannel ( - IN PVOID pMgmtHandle + IN void *pMgmtHandle ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -178,7 +178,7 @@ VNTWIFIpGetCurrentChannel ( -*/ WORD VNTWIFIwGetAssocID ( - IN PVOID pMgmtHandle + IN void *pMgmtHandle ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -308,7 +308,7 @@ VNTWIFIbyGetACKTxRate ( -*/ void VNTWIFIvSetAuthenticationMode ( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, IN WMAC_AUTHENTICATION_MODE eAuthMode ) { @@ -340,7 +340,7 @@ VNTWIFIvSetAuthenticationMode ( -*/ void VNTWIFIvSetEncryptionMode ( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, IN WMAC_ENCRYPTION_MODE eEncryptionMode ) { @@ -360,7 +360,7 @@ VNTWIFIvSetEncryptionMode ( BOOL VNTWIFIbConfigPhyMode ( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, IN CARD_PHY_TYPE ePhyType ) { @@ -381,8 +381,8 @@ VNTWIFIbConfigPhyMode ( void VNTWIFIbGetConfigPhyMode ( - IN PVOID pMgmtHandle, - OUT PVOID pePhyType + IN void *pMgmtHandle, + OUT void *pePhyType ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -426,9 +426,9 @@ VNTWIFIbGetConfigPhyMode ( void VNTWIFIvQueryBSSList ( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, OUT PUINT puBSSCount, - OUT PVOID *pvFirstBSS + OUT void **pvFirstBSS ) { UINT ii = 0; @@ -456,9 +456,9 @@ VNTWIFIvQueryBSSList ( void VNTWIFIvGetNextBSS ( - IN PVOID pMgmtHandle, - IN PVOID pvCurrentBSS, - OUT PVOID *pvNextBSS + IN void *pMgmtHandle, + IN void *pvCurrentBSS, + OUT void **pvNextBSS ) { PKnownBSS pBSS = (PKnownBSS) pvCurrentBSS; @@ -496,7 +496,7 @@ VNTWIFIvGetNextBSS ( -*/ void VNTWIFIvUpdateNodeTxCounter( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, IN PBYTE pbyDestAddress, IN BOOL bTxOk, IN WORD wRate, @@ -531,7 +531,7 @@ VNTWIFIvUpdateNodeTxCounter( void VNTWIFIvGetTxRate( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, IN PBYTE pbyDestAddress, OUT PWORD pwTxDataRate, OUT PBYTE pbyACKRate, @@ -603,7 +603,7 @@ VNTWIFIvGetTxRate( BYTE VNTWIFIbyGetKeyCypher( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, IN BOOL bGroupKey ) { @@ -620,8 +620,8 @@ VNTWIFIbyGetKeyCypher( /* BOOL VNTWIFIbInit( - IN PVOID pAdapterHandler, - OUT PVOID *pMgmtHandler + IN void *pAdapterHandler, + OUT void **pMgmtHandler ) { @@ -636,7 +636,7 @@ VNTWIFIbInit( } memset(pMgmt, 0, sizeof(SMgmtObject)); - pMgmt->pAdapter = (PVOID) pAdapterHandler; + pMgmt->pAdapter = (void *) pAdapterHandler; // should initial MAC address abyMACAddr for(ii=0;iiabyCurrExtSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)pBSSList->abyExtSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, uRateLen); - RATEvParseMaxRate( (PVOID)pDevice, + RATEvParseMaxRate( (void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, TRUE, @@ -2256,7 +2256,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, WLAN_RATES_MAXLEN_11B); - RATEvParseMaxRate( (PVOID)pDevice, + RATEvParseMaxRate( (void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, NULL, TRUE, @@ -2277,7 +2277,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) pMgmt->abyCurrSuppRates[1] = RATEuSetIE((PWLAN_IE_SUPP_RATES)sFrame.pSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, WLAN_RATES_MAXLEN_11B); - RATEvParseMaxRate( (PVOID)pDevice, + RATEvParseMaxRate( (void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, NULL, TRUE, @@ -2485,7 +2485,7 @@ vMgrCreateOwnIBSS( // set basic rate - RATEvParseMaxRate((PVOID)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, + RATEvParseMaxRate((void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrExtSuppRates, TRUE, &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, &byTopCCKBasicRate, &byTopOFDMBasicRate); @@ -2781,7 +2781,7 @@ vMgrJoinBSSBegin( } } - RATEvParseMaxRate((PVOID)pDevice, pItemRates, pItemExtRates, TRUE, + RATEvParseMaxRate((void *)pDevice, pItemRates, pItemExtRates, TRUE, &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, &byTopCCKBasicRate, &byTopOFDMBasicRate); @@ -2867,7 +2867,7 @@ vMgrJoinBSSBegin( (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, WLAN_RATES_MAXLEN_11B); // set basic rate - RATEvParseMaxRate((PVOID)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, + RATEvParseMaxRate((void *)pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates, NULL, TRUE, &wMaxBasicRate, &wMaxSuppRate, &wSuppRate, &byTopCCKBasicRate, &byTopOFDMBasicRate); @@ -2967,7 +2967,7 @@ s_vMgrSynchBSS ( pDevice->byPreambleType = 0; pDevice->wBasicRate = 0; // Set Basic Rate - CARDbAddBasicRate((PVOID)pDevice, RATE_1M); + CARDbAddBasicRate((void *)pDevice, RATE_1M); // calculate TSF offset // TSF Offset = Received Timestamp TSF - Marked Local's TSF CARDbUpdateTSF(pDevice, pCurr->byRxRate, pCurr->qwBSSTimestamp, pCurr->qwLocalTSF); diff --git a/drivers/staging/vt6655/wmgr.h b/drivers/staging/vt6655/wmgr.h index 5963b14..5eabc19 100644 --- a/drivers/staging/vt6655/wmgr.h +++ b/drivers/staging/vt6655/wmgr.h @@ -249,7 +249,7 @@ typedef struct tagSRxMgmtPacket { typedef struct tagSMgmtObject { - PVOID pAdapter; + void * pAdapter; // MAC address BYTE abyMACAddr[WLAN_ADDR_LEN]; diff --git a/drivers/staging/vt6655/wpa2.c b/drivers/staging/vt6655/wpa2.c index 183d28c..3f377b6 100644 --- a/drivers/staging/vt6655/wpa2.c +++ b/drivers/staging/vt6655/wpa2.c @@ -263,7 +263,7 @@ WPA2vParseRSN ( -*/ UINT WPA2uSetIEs( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, OUT PWLAN_IE_RSN pRSNIEs ) { diff --git a/drivers/staging/vt6655/wpa2.h b/drivers/staging/vt6655/wpa2.h index cbd75d0..7becc74 100644 --- a/drivers/staging/vt6655/wpa2.h +++ b/drivers/staging/vt6655/wpa2.h @@ -71,7 +71,7 @@ WPA2vParseRSN ( UINT WPA2uSetIEs( - IN PVOID pMgmtHandle, + IN void *pMgmtHandle, OUT PWLAN_IE_RSN pRSNIEs ); -- cgit v0.10.2 From 9bf10920a094d71cec1076d3fa941aa6f31b09eb Mon Sep 17 00:00:00 2001 From: Lars Lindley Date: Sat, 8 May 2010 14:53:54 +0200 Subject: staging: winbond: localpara.h whitespace and indentation fixes. I fixed all problems found by checkpatch.pl except a number of long lines that I didn't find a good way to break up and still keep it readable. I added the () to #define MAX_IE_APPEND_SIZE (256 + 4). I also moved som comments around after pointers from Pekka. Signed-off-by: Lars Lindley Acked-by: Pekka Enberg Acked-by: Pavel Machek Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/localpara.h b/drivers/staging/winbond/localpara.h index fcf6a04..d798057 100644 --- a/drivers/staging/winbond/localpara.h +++ b/drivers/staging/winbond/localpara.h @@ -1,263 +1,267 @@ #ifndef __WINBOND_LOCALPARA_H #define __WINBOND_LOCALPARA_H -//============================================================= -// LocalPara.h - -//============================================================= +/* + * ============================================================= + * LocalPara.h - + * ============================================================= + */ #include "mac_structures.h" -//Define the local ability +/* Define the local ability */ -#define LOCAL_DEFAULT_BEACON_PERIOD 100 //ms -#define LOCAL_DEFAULT_ATIM_WINDOW 0 -#define LOCAL_DEFAULT_ERP_CAPABILITY 0x0431 //0x0001: ESS - //0x0010: Privacy - //0x0020: short preamble - //0x0400: short slot time -#define LOCAL_DEFAULT_LISTEN_INTERVAL 5 +#define LOCAL_DEFAULT_BEACON_PERIOD 100 /* ms */ +#define LOCAL_DEFAULT_ATIM_WINDOW 0 +#define LOCAL_DEFAULT_ERP_CAPABILITY 0x0431 /* + * 0x0001: ESS + * 0x0010: Privacy + * 0x0020: short preamble + * 0x0400: short slot time + */ +#define LOCAL_DEFAULT_LISTEN_INTERVAL 5 -//#define LOCAL_DEFAULT_24_CHANNEL_NUM 11 // channel 1..11 -#define LOCAL_DEFAULT_24_CHANNEL_NUM 13 // channel 1..13 -#define LOCAL_DEFAULT_5_CHANNEL_NUM 8 // channel 36..64 +#define LOCAL_DEFAULT_24_CHANNEL_NUM 13 /* channel 1..13 */ +#define LOCAL_DEFAULT_5_CHANNEL_NUM 8 /* channel 36..64 */ -#define LOCAL_USA_24_CHANNEL_NUM 11 -#define LOCAL_USA_5_CHANNEL_NUM 12 -#define LOCAL_EUROPE_24_CHANNEL_NUM 13 -#define LOCAL_EUROPE_5_CHANNEL_NUM 19 -#define LOCAL_JAPAN_24_CHANNEL_NUM 14 -#define LOCAL_JAPAN_5_CHANNEL_NUM 11 -#define LOCAL_UNKNOWN_24_CHANNEL_NUM 14 -#define LOCAL_UNKNOWN_5_CHANNEL_NUM 34 //not include 165 +#define LOCAL_USA_24_CHANNEL_NUM 11 +#define LOCAL_USA_5_CHANNEL_NUM 12 +#define LOCAL_EUROPE_24_CHANNEL_NUM 13 +#define LOCAL_EUROPE_5_CHANNEL_NUM 19 +#define LOCAL_JAPAN_24_CHANNEL_NUM 14 +#define LOCAL_JAPAN_5_CHANNEL_NUM 11 +#define LOCAL_UNKNOWN_24_CHANNEL_NUM 14 +#define LOCAL_UNKNOWN_5_CHANNEL_NUM 34 /* not include 165 */ - -#define psLOCAL (&(adapter->sLocalPara)) +#define psLOCAL (&(adapter->sLocalPara)) #define MODE_802_11_BG 0 #define MODE_802_11_A 1 #define MODE_802_11_ABG 2 #define MODE_802_11_BG_IBSS 3 #define MODE_802_11_B 4 -#define MODE_AUTO 255 +#define MODE_AUTO 255 #define BAND_TYPE_DSSS 0 #define BAND_TYPE_OFDM_24 1 #define BAND_TYPE_OFDM_5 2 -//refer Bitmap2RateValue table -#define LOCAL_ALL_SUPPORTED_RATES_BITMAP 0x130c1a66 //the bitmap value of all the H/W supported rates - //1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 -#define LOCAL_OFDM_SUPPORTED_RATES_BITMAP 0x130c1240 //the bitmap value of all the H/W supported rates - //except to non-OFDM rates - //6, 9, 12, 18, 24, 36, 48, 54 - -#define LOCAL_11B_SUPPORTED_RATE_BITMAP 0x826 -#define LOCAL_11B_BASIC_RATE_BITMAP 0x826 -#define LOCAL_11B_OPERATION_RATE_BITMAP 0x826 -#define LOCAL_11G_BASIC_RATE_BITMAP 0x826 //1, 2, 5.5, 11 -#define LOCAL_11G_OPERATION_RATE_BITMAP 0x130c1240 //6, 9, 12, 18, 24, 36, 48, 54 -#define LOCAL_11A_BASIC_RATE_BITMAP 0x01001040 //6, 12, 24 -#define LOCAL_11A_OPERATION_RATE_BITMAP 0x120c0200 //9, 18, 36, 48, 54 - - - -#define PWR_ACTIVE 0 -#define PWR_SAVE 1 +/* refer Bitmap2RateValue table */ + +/* the bitmap value of all the H/W supported rates: */ +/* 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54 */ +#define LOCAL_ALL_SUPPORTED_RATES_BITMAP 0x130c1a66 +/* the bitmap value of all the H/W supported rates except to non-OFDM rates: */ +/* 6, 9, 12, 18, 24, 36, 48, 54 */ +#define LOCAL_OFDM_SUPPORTED_RATES_BITMAP 0x130c1240 +#define LOCAL_11B_SUPPORTED_RATE_BITMAP 0x826 +#define LOCAL_11B_BASIC_RATE_BITMAP 0x826 +#define LOCAL_11B_OPERATION_RATE_BITMAP 0x826 +#define LOCAL_11G_BASIC_RATE_BITMAP 0x826 /* 1, 2, 5.5, 11 */ +#define LOCAL_11G_OPERATION_RATE_BITMAP 0x130c1240 /* 6, 9, 12, 18, 24, 36, 48, 54 */ +#define LOCAL_11A_BASIC_RATE_BITMAP 0x01001040 /* 6, 12, 24 */ +#define LOCAL_11A_OPERATION_RATE_BITMAP 0x120c0200 /* 9, 18, 36, 48, 54 */ + + +#define PWR_ACTIVE 0 +#define PWR_SAVE 1 #define PWR_TX_IDLE_CYCLE 6 -//bPreambleMode and bSlotTimeMode -#define AUTO_MODE 0 -#define LONG_MODE 1 - -//Region definition -#define REGION_AUTO 0xff -#define REGION_UNKNOWN 0 -#define REGION_EUROPE 1 //ETSI -#define REGION_JAPAN 2 //MKK -#define REGION_USA 3 //FCC -#define REGION_FRANCE 4 //FRANCE -#define REGION_SPAIN 5 //SPAIN -#define REGION_ISRAEL 6 //ISRAEL -//#define REGION_CANADA 7 //IC +/* bPreambleMode and bSlotTimeMode */ +#define AUTO_MODE 0 +#define LONG_MODE 1 + +/* Region definition */ +#define REGION_AUTO 0xff +#define REGION_UNKNOWN 0 +#define REGION_EUROPE 1 /* ETSI */ +#define REGION_JAPAN 2 /* MKK */ +#define REGION_USA 3 /* FCC */ +#define REGION_FRANCE 4 /* FRANCE */ +#define REGION_SPAIN 5 /* SPAIN */ +#define REGION_ISRAEL 6 /* ISRAEL */ #define MAX_BSS_DESCRIPT_ELEMENT 32 -#define MAX_PMKID_CandidateList 16 - -//High byte : Event number, low byte : reason -//Event definition -//-- SME/MLME event -#define EVENT_RCV_DEAUTH 0x0100 -#define EVENT_JOIN_FAIL 0x0200 -#define EVENT_AUTH_FAIL 0x0300 -#define EVENT_ASSOC_FAIL 0x0400 -#define EVENT_LOST_SIGNAL 0x0500 -#define EVENT_BSS_DESCRIPT_LACK 0x0600 -#define EVENT_COUNTERMEASURE 0x0700 -#define EVENT_JOIN_FILTER 0x0800 -//-- TX/RX event -#define EVENT_RX_BUFF_UNAVAILABLE 0x4100 - -#define EVENT_CONNECT 0x8100 -#define EVENT_DISCONNECT 0x8200 -#define EVENT_SCAN_REQ 0x8300 - -//Reason of Event +#define MAX_PMKID_CandidateList 16 + +/* + * High byte : Event number, low byte : reason + * Event definition + * -- SME/MLME event + */ +#define EVENT_RCV_DEAUTH 0x0100 +#define EVENT_JOIN_FAIL 0x0200 +#define EVENT_AUTH_FAIL 0x0300 +#define EVENT_ASSOC_FAIL 0x0400 +#define EVENT_LOST_SIGNAL 0x0500 +#define EVENT_BSS_DESCRIPT_LACK 0x0600 +#define EVENT_COUNTERMEASURE 0x0700 +#define EVENT_JOIN_FILTER 0x0800 +/* -- TX/RX event */ +#define EVENT_RX_BUFF_UNAVAILABLE 0x4100 + +#define EVENT_CONNECT 0x8100 +#define EVENT_DISCONNECT 0x8200 +#define EVENT_SCAN_REQ 0x8300 + +/* Reason of Event */ #define EVENT_REASON_FILTER_BASIC_RATE 0x0001 -#define EVENT_REASON_FILTER_PRIVACY 0x0002 +#define EVENT_REASON_FILTER_PRIVACY 0x0002 #define EVENT_REASON_FILTER_AUTH_MODE 0x0003 -#define EVENT_REASON_TIMEOUT 0x00ff +#define EVENT_REASON_TIMEOUT 0x00ff -// 20061108 WPS IE buffer -#define MAX_IE_APPEND_SIZE 256 + 4 // Due to [E id][Length][OUI][Data] may 257 bytes +/* Due to[E id][Length][OUI][Data] may be 257 bytes */ +#define MAX_IE_APPEND_SIZE (256 + 4) -struct chan_info -{ - u8 band; - u8 ChanNo; +struct chan_info { + u8 band; + u8 ChanNo; }; -struct radio_off -{ - u8 boHwRadioOff; - u8 boSwRadioOff; +struct radio_off { + u8 boHwRadioOff; + u8 boSwRadioOff; }; -//=========================================================================== -struct wb_local_para -{ - u8 PermanentAddress[ MAC_ADDR_LENGTH + 2 ]; // read from EPROM, manufacture set for each NetCard - u8 ThisMacAddress[ MAC_ADDR_LENGTH + 2 ]; // the driver will use actually. - - u32 MTUsize; // Ind to Uplayer, Max transmission unit size - - u8 region_INF; //region setting from INF - u8 region; //real region setting of the device - u8 Reserved_1[2]; - - //// power-save variables - u8 iPowerSaveMode; // 0 indicates it is on, 1 indicates it is off - u8 ATIMmode; - u8 ExcludeUnencrypted; - - u16 CheckCountForPS; //Unit ime count for the decision to enter PS mode - u8 boHasTxActivity; //tx activity has occurred - u8 boMacPsValid; //Power save mode obtained from H/W is valid or not - - //// Rate - u8 TxRateMode; // Initial, input from Registry, may be updated by GUI - //Tx Rate Mode: auto(DTO on), max, 1M, 2M, .. - u8 CurrentTxRate; // The current Tx rate - u8 CurrentTxRateForMng; // The current Tx rate for management frames - // It will be decided before connection succeeds. - u8 CurrentTxFallbackRate; - - //for Rate handler - u8 BRateSet[32]; //basic rate set - u8 SRateSet[32]; //support rate set - - u8 NumOfBRate; - u8 NumOfSRate; - u8 NumOfDsssRateInSRate; //number of DSSS rates in supported rate set - u8 reserved1; - - u32 dwBasicRateBitmap; //bit map of basic rates - u32 dwSupportRateBitmap; //bit map of all support rates including - //basic and operational rates - - ////For SME/MLME handler - u16 wOldSTAindex; // valid when boHandover=TRUE, store old connected STA index - u16 wConnectedSTAindex; // Index of peerly connected AP or IBSS in - // the descriptionset. - u16 Association_ID; // The Association ID in the (Re)Association - // Response frame. - u16 ListenInterval; // The listen interval when SME invoking MLME_ - // (Re)Associate_Request(). - - struct radio_off RadioOffStatus; - u8 Reserved0[2]; - - u8 boMsRadioOff; // Ndis demands to be true when set Disassoc. OID and be false when set SSID OID. - u8 bAntennaNo; //which antenna - u8 bConnectFlag; //the connect status flag for roaming task - - u8 RoamStatus; - u8 reserved7[3]; - - struct chan_info CurrentChan; //Current channel no. and channel band. It may be changed by scanning. - u8 boHandover; // Roaming, Hnadover to other AP. - u8 boCCAbusy; - - u16 CWMax; // It may not be the real value that H/W used - u8 CWMin; // 255: set according to 802.11 spec. - u8 reserved2; - - //11G: - u8 bMacOperationMode; // operation in 802.11b or 802.11g - u8 bSlotTimeMode; //AUTO, s32 - u8 bPreambleMode; //AUTO, s32 - u8 boNonERPpresent; - - u8 boProtectMechanism; // H/W will take the necessary action based on this variable - u8 boShortPreamble; // H/W will take the necessary action based on this variable - u8 boShortSlotTime; // H/W will take the necessary action based on this variable - u8 reserved_3; - - u32 RSN_IE_Bitmap; //added by WS - u32 RSN_OUI_Type; //added by WS - - //For the BSSID - u8 HwBssid[MAC_ADDR_LENGTH + 2]; - u32 HwBssidValid; - - //For scan list - u8 BssListCount; //Total count of valid descriptor indexes - u8 boReceiveUncorrectInfo; //important settings in beacon/probe resp. have been changed - u8 NoOfJoinerInIbss; - u8 reserved_4; - - u8 BssListIndex[ (MAX_BSS_DESCRIPT_ELEMENT+3) & ~0x03 ]; //Store the valid descriptor indexes obtained from scannings - u8 JoinerInIbss[ (MAX_BSS_DESCRIPT_ELEMENT+3) & ~0x03 ]; //save the BssDescriptor index in this - //IBSS. The index 0 is local descriptor - //(psLOCAL->wConnectedSTAindex). - //If CONNECTED : NoOfJoinerInIbss >=2 - // else : NoOfJoinerInIbss <=1 - - //// General Statistics, count at Rx_handler or Tx_callback interrupt handler - u64 GS_XMIT_OK; // Good Frames Transmitted - u64 GS_RCV_OK; // Good Frames Received - u32 GS_RCV_ERROR; // Frames received with crc error - u32 GS_XMIT_ERROR; // Bad Frames Transmitted - u32 GS_RCV_NO_BUFFER; // Receive Buffer underrun - u32 GS_XMIT_ONE_COLLISION; // one collision - u32 GS_XMIT_MORE_COLLISIONS;// more collisions - - //================================================================ - // Statistics (no matter whether it had done successfully) -wkchen - //================================================================ - u32 _NumRxMSDU; - u32 _NumTxMSDU; - u32 _dot11WEPExcludedCount; - u32 _dot11WEPUndecryptableCount; - u32 _dot11FrameDuplicateCount; - - struct chan_info IbssChanSetting; // 2B. Start IBSS Channel setting by registry or WWU. - u8 reserved_5[2]; //It may not be used after considering RF type, - //region and modulation type. - - u8 reserved_6[2]; //two variables are for wep key error detection added by ws 02/02/04 - - u32 bWepKeyError; - u32 bToSelfPacketReceived; - u32 WepKeyDetectTimerCount; - - u16 SignalLostTh; - u16 SignalRoamTh; - - // 20061108 WPS IE Append +struct wb_local_para { + /* read from EPROM, manufacture set for each NetCard */ + u8 PermanentAddress[MAC_ADDR_LENGTH + 2]; + /* the driver will use this one actually. */ + u8 ThisMacAddress[MAC_ADDR_LENGTH + 2]; + u32 MTUsize; /* Ind to Uplayer, Max transmission unit size */ + u8 region_INF; /* region setting from INF */ + u8 region; /* real region setting of the device */ + u8 Reserved_1[2]; + + /* power-save variables */ + u8 iPowerSaveMode; /* 0 indicates on, 1 indicates off */ + u8 ATIMmode; + u8 ExcludeUnencrypted; + /* Unit ime count for the decision to enter PS mode */ + u16 CheckCountForPS; + u8 boHasTxActivity;/* tx activity has occurred */ + u8 boMacPsValid; /* Power save mode obtained from H/W is valid or not */ + + /* Rate */ + u8 TxRateMode; /* + * Initial, input from Registry, + * may be updated by GUI + * Tx Rate Mode: auto(DTO on), max, 1M, 2M, .. + */ + u8 CurrentTxRate; /* The current Tx rate */ + u8 CurrentTxRateForMng; /* + * The current Tx rate for management + * frames. It will be decided before + * connection succeeds. + */ + u8 CurrentTxFallbackRate; + + /* for Rate handler */ + u8 BRateSet[32]; /* basic rate set */ + u8 SRateSet[32]; /* support rate set */ + + u8 NumOfBRate; + u8 NumOfSRate; + u8 NumOfDsssRateInSRate; /* number of DSSS rates in supported rate set */ + u8 reserved1; + + u32 dwBasicRateBitmap; /* bit map of basic rates */ + + u32 dwSupportRateBitmap; /* bit map of all support rates including basic and operational rates */ + + + /* For SME/MLME handler */ + + u16 wOldSTAindex; /* valid when boHandover=TRUE, store old connected STA index */ + u16 wConnectedSTAindex; /* Index of peerly connected AP or IBSS in the descriptionset. */ + u16 Association_ID; /* The Association ID in the (Re)Association Response frame. */ + u16 ListenInterval; /* The listen interval when SME invoking MLME_ (Re)Associate_Request(). */ + + struct radio_off RadioOffStatus; + u8 Reserved0[2]; + u8 boMsRadioOff; /* Ndis demands to be true when set Disassoc. OID and be false when set SSID OID. */ + u8 bAntennaNo; /* which antenna */ + u8 bConnectFlag; /* the connect status flag for roaming task */ + + u8 RoamStatus; + u8 reserved7[3]; + + struct chan_info CurrentChan; /* Current channel no. and channel band. It may be changed by scanning. */ + u8 boHandover; /* Roaming, Hnadover to other AP. */ + u8 boCCAbusy; + + u16 CWMax; /* It may not be the real value that H/W used */ + u8 CWMin; /* 255: set according to 802.11 spec. */ + u8 reserved2; + + /* 11G: */ + u8 bMacOperationMode; /* operation in 802.11b or 802.11g */ + u8 bSlotTimeMode; /* AUTO, s32 */ + u8 bPreambleMode; /* AUTO, s32 */ + u8 boNonERPpresent; + + u8 boProtectMechanism; /* H/W will take the necessary action based on this variable */ + u8 boShortPreamble; /* Same here */ + u8 boShortSlotTime; /* Same here */ + u8 reserved_3; + + u32 RSN_IE_Bitmap; + u32 RSN_OUI_Type; + + /* For the BSSID */ + u8 HwBssid[MAC_ADDR_LENGTH + 2]; + u32 HwBssidValid; + + /* For scan list */ + u8 BssListCount; /* Total count of valid descriptor indexes */ + u8 boReceiveUncorrectInfo; /* important settings in beacon/probe resp. have been changed */ + u8 NoOfJoinerInIbss; + u8 reserved_4; + + /* Store the valid descriptor indexes obtained from scannings */ + u8 BssListIndex[(MAX_BSS_DESCRIPT_ELEMENT + 3) & ~0x03]; + /* + * Save the BssDescriptor index in this IBSS. + * The index 0 is local descriptor (psLOCAL->wConnectedSTAindex). + * If CONNECTED : NoOfJoinerInIbss >= 2 + * else : NoOfJoinerInIbss <= 1 + */ + u8 JoinerInIbss[(MAX_BSS_DESCRIPT_ELEMENT + 3) & ~0x03]; + + /* General Statistics, count at Rx_handler or Tx_callback interrupt handler */ + u64 GS_XMIT_OK; /* Good Frames Transmitted */ + u64 GS_RCV_OK; /* Good Frames Received */ + u32 GS_RCV_ERROR; /* Frames received with crc error */ + u32 GS_XMIT_ERROR; /* Bad Frames Transmitted */ + u32 GS_RCV_NO_BUFFER; /* Receive Buffer underrun */ + u32 GS_XMIT_ONE_COLLISION; /* one collision */ + u32 GS_XMIT_MORE_COLLISIONS;/* more collisions */ + + /* + * ================================================================ + * Statistics (no matter whether it had done successfully) -wkchen + * ================================================================ + */ + u32 _NumRxMSDU; + u32 _NumTxMSDU; + u32 _dot11WEPExcludedCount; + u32 _dot11WEPUndecryptableCount; + u32 _dot11FrameDuplicateCount; + + struct chan_info IbssChanSetting; /* 2B. Start IBSS Channel setting by registry or WWU. */ + u8 reserved_5[2]; /* It may not be used after considering RF type, region and modulation type. */ + + u8 reserved_6[2]; /* two variables are for wep key error detection */ + u32 bWepKeyError; + u32 bToSelfPacketReceived; + u32 WepKeyDetectTimerCount; + + u16 SignalLostTh; + u16 SignalRoamTh; + u8 IE_Append_data[MAX_IE_APPEND_SIZE]; u16 IE_Append_size; u16 reserved_7; - }; #endif -- cgit v0.10.2 From a09fcbd70e612b197af349ef32b090f211542fb3 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 7 May 2010 17:25:36 -0500 Subject: staging: rtl8192x: sync the various rtl819x_TSProc.c files The rtl8192e, rtl8192su, and rtl8192u drivers all share what appears to be a common private ieee80211 stack. Various patches have been applied to the rtl819x_TSProc.c file for some of the drivers but not the others. This sync's the files based on all the applied patches. Signed-off-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192e/ieee80211/rtl819x_TSProc.c b/drivers/staging/rtl8192e/ieee80211/rtl819x_TSProc.c index e869961..5876b4d 100644 --- a/drivers/staging/rtl8192e/ieee80211/rtl819x_TSProc.c +++ b/drivers/staging/rtl8192e/ieee80211/rtl819x_TSProc.c @@ -3,13 +3,6 @@ #include #include "rtl819x_TS.h" -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) -#define list_for_each_entry_safe(pos, n, head, member) \ - for (pos = list_entry((head)->next, typeof(*pos), member), \ - n = list_entry(pos->member.next, typeof(*pos), member); \ - &pos->member != (head); \ - pos = n, n = list_entry(n->member.next, typeof(*n), member)) -#endif void TsSetupTimeOut(unsigned long data) { // Not implement yet @@ -29,7 +22,6 @@ void TsInactTimeout(unsigned long data) * return: NULL * notice: ********************************************************************************************************************/ -#if 1 void RxPktPendingTimeout(unsigned long data) { PRX_TS_RECORD pRxTs = (PRX_TS_RECORD)data; @@ -90,25 +82,16 @@ void RxPktPendingTimeout(unsigned long data) return; } ieee80211_indicate_packets(ieee, stats_IndicateArray, index); - bPktInBuf = false; } if(bPktInBuf && (pRxTs->RxTimeoutIndicateSeq==0xffff)) { pRxTs->RxTimeoutIndicateSeq = pRxTs->RxIndicateSeq; -#if 0 - if(timer_pending(&pRxTs->RxPktPendingTimer)) - del_timer_sync(&pRxTs->RxPktPendingTimer); - pRxTs->RxPktPendingTimer.expires = jiffies + ieee->pHTInfo->RxReorderPendingTime; - add_timer(&pRxTs->RxPktPendingTimer); -#else mod_timer(&pRxTs->RxPktPendingTimer, jiffies + MSECS(ieee->pHTInfo->RxReorderPendingTime)); -#endif } spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); //PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); } -#endif /******************************************************************************************************************** *function: Add BA timer function @@ -372,17 +355,11 @@ bool GetTs( IEEE80211_DEBUG(IEEE80211_DL_ERR, "get TS for Broadcast or Multicast\n"); return false; } -#if 0 - if(ieee->pStaQos->CurrentQosMode == QOS_DISABLE) - { UP = 0; } //only use one TS - else if(ieee->pStaQos->CurrentQosMode & QOS_WMM) - { -#else + if (ieee->current_network.qos_data.supported == 0) UP = 0; else { -#endif // In WMM case: we use 4 TID only if (!IsACValid(TID)) { @@ -553,8 +530,8 @@ void RemoveTsEntry( void RemovePeerTS(struct ieee80211_device* ieee, u8* Addr) { PTS_COMMON_INFO pTS, pTmpTS; + printk("===========>RemovePeerTS,%pM\n", Addr); -#if 1 list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) { if (memcmp(pTS->Addr, Addr, 6) == 0) @@ -595,13 +572,12 @@ void RemovePeerTS(struct ieee80211_device* ieee, u8* Addr) list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); } } -#endif } void RemoveAllTS(struct ieee80211_device* ieee) { PTS_COMMON_INFO pTS, pTmpTS; -#if 1 + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) { RemoveTsEntry(ieee, pTS, TX_DIR); @@ -629,7 +605,6 @@ void RemoveAllTS(struct ieee80211_device* ieee) list_del_init(&pTS->List); list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); } -#endif } void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD pTxTS) @@ -637,7 +612,6 @@ void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD pTxTS) if(pTxTS->bAddBaReqInProgress == false) { pTxTS->bAddBaReqInProgress = true; -#if 1 if(pTxTS->bAddBaReqDelayed) { IEEE80211_DEBUG(IEEE80211_DL_BA, "TsStartAddBaProcess(): Delayed Start ADDBA after 60 sec!!\n"); @@ -648,13 +622,7 @@ void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD pTxTS) IEEE80211_DEBUG(IEEE80211_DL_BA,"TsStartAddBaProcess(): Immediately Start ADDBA now!!\n"); mod_timer(&pTxTS->TsAddBaTimer, jiffies+10); //set 10 ticks } -#endif } else IEEE80211_DEBUG(IEEE80211_DL_ERR, "%s()==>BA timer is already added\n", __FUNCTION__); } -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0) -EXPORT_SYMBOL_NOVERS(RemovePeerTS); -#else -//EXPORT_SYMBOL(RemovePeerTS); -#endif diff --git a/drivers/staging/rtl8192su/ieee80211/rtl819x_TSProc.c b/drivers/staging/rtl8192su/ieee80211/rtl819x_TSProc.c index 38468c5..de143ec 100644 --- a/drivers/staging/rtl8192su/ieee80211/rtl819x_TSProc.c +++ b/drivers/staging/rtl8192su/ieee80211/rtl819x_TSProc.c @@ -22,7 +22,6 @@ void TsInactTimeout(unsigned long data) * return: NULL * notice: ********************************************************************************************************************/ -#if 1 void RxPktPendingTimeout(unsigned long data) { PRX_TS_RECORD pRxTs = (PRX_TS_RECORD)data; @@ -83,8 +82,6 @@ void RxPktPendingTimeout(unsigned long data) return; } ieee80211_indicate_packets(ieee, stats_IndicateArray, index); - bPktInBuf = false; - } if(bPktInBuf && (pRxTs->RxTimeoutIndicateSeq==0xffff)) @@ -95,7 +92,6 @@ void RxPktPendingTimeout(unsigned long data) spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); //PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); } -#endif /******************************************************************************************************************** *function: Add BA timer function @@ -534,8 +530,8 @@ void RemoveTsEntry( void RemovePeerTS(struct ieee80211_device* ieee, u8* Addr) { PTS_COMMON_INFO pTS, pTmpTS; + printk("===========>RemovePeerTS,%pM\n", Addr); -#if 1 list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) { if (memcmp(pTS->Addr, Addr, 6) == 0) @@ -576,13 +572,12 @@ void RemovePeerTS(struct ieee80211_device* ieee, u8* Addr) list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); } } -#endif } void RemoveAllTS(struct ieee80211_device* ieee) { PTS_COMMON_INFO pTS, pTmpTS; -#if 1 + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) { RemoveTsEntry(ieee, pTS, TX_DIR); @@ -610,7 +605,6 @@ void RemoveAllTS(struct ieee80211_device* ieee) list_del_init(&pTS->List); list_add_tail(&pTS->List, &ieee->Rx_TS_Unused_List); } -#endif } void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD pTxTS) @@ -618,7 +612,6 @@ void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD pTxTS) if(pTxTS->bAddBaReqInProgress == false) { pTxTS->bAddBaReqInProgress = true; -#if 1 if(pTxTS->bAddBaReqDelayed) { IEEE80211_DEBUG(IEEE80211_DL_BA, "TsStartAddBaProcess(): Delayed Start ADDBA after 60 sec!!\n"); @@ -629,7 +622,6 @@ void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD pTxTS) IEEE80211_DEBUG(IEEE80211_DL_BA,"TsStartAddBaProcess(): Immediately Start ADDBA now!!\n"); mod_timer(&pTxTS->TsAddBaTimer, jiffies+10); //set 10 ticks } -#endif } else IEEE80211_DEBUG(IEEE80211_DL_ERR, "%s()==>BA timer is already added\n", __FUNCTION__); diff --git a/drivers/staging/rtl8192u/ieee80211/rtl819x_TSProc.c b/drivers/staging/rtl8192u/ieee80211/rtl819x_TSProc.c index 451120f..c3fcaae 100644 --- a/drivers/staging/rtl8192u/ieee80211/rtl819x_TSProc.c +++ b/drivers/staging/rtl8192u/ieee80211/rtl819x_TSProc.c @@ -87,10 +87,7 @@ void RxPktPendingTimeout(unsigned long data) if(bPktInBuf && (pRxTs->RxTimeoutIndicateSeq==0xffff)) { pRxTs->RxTimeoutIndicateSeq = pRxTs->RxIndicateSeq; - if(timer_pending(&pRxTs->RxPktPendingTimer)) - del_timer_sync(&pRxTs->RxPktPendingTimer); - pRxTs->RxPktPendingTimer.expires = jiffies + ieee->pHTInfo->RxReorderPendingTime; - add_timer(&pRxTs->RxPktPendingTimer); + mod_timer(&pRxTs->RxPktPendingTimer, jiffies + MSECS(ieee->pHTInfo->RxReorderPendingTime)); } spin_unlock_irqrestore(&(ieee->reorder_spinlock), flags); //PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); @@ -358,6 +355,7 @@ bool GetTs( IEEE80211_DEBUG(IEEE80211_DL_ERR, "get TS for Broadcast or Multicast\n"); return false; } + if (ieee->current_network.qos_data.supported == 0) UP = 0; else @@ -532,6 +530,7 @@ void RemoveTsEntry( void RemovePeerTS(struct ieee80211_device* ieee, u8* Addr) { PTS_COMMON_INFO pTS, pTmpTS; + printk("===========>RemovePeerTS,%pM\n", Addr); list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) { @@ -578,6 +577,7 @@ void RemovePeerTS(struct ieee80211_device* ieee, u8* Addr) void RemoveAllTS(struct ieee80211_device* ieee) { PTS_COMMON_INFO pTS, pTmpTS; + list_for_each_entry_safe(pTS, pTmpTS, &ieee->Tx_TS_Pending_List, List) { RemoveTsEntry(ieee, pTS, TX_DIR); @@ -626,4 +626,3 @@ void TsStartAddBaProcess(struct ieee80211_device* ieee, PTX_TS_RECORD pTxTS) else IEEE80211_DEBUG(IEEE80211_DL_ERR, "%s()==>BA timer is already added\n", __FUNCTION__); } -EXPORT_SYMBOL(RemovePeerTS); -- cgit v0.10.2 From b63eaed0da3370817f74002b81a57b25c43e72cb Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Fri, 7 May 2010 17:27:22 -0500 Subject: staging: rtl8192x: sync the various rtl819x_Qos.h files The rtl8192e, rtl8192su, and rtl8192u drivers all share what appears to be a common private ieee80211 stack. Various patches have been applied to the rtl819x_Qos.h file for some of the drivers but not the others. This sync's the files based on all the applied patches. Signed-off-by: H Hartley Sweeten Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192e/ieee80211/rtl819x_Qos.h b/drivers/staging/rtl8192e/ieee80211/rtl819x_Qos.h index a50ee0e..d4565ec 100644 --- a/drivers/staging/rtl8192e/ieee80211/rtl819x_Qos.h +++ b/drivers/staging/rtl8192e/ieee80211/rtl819x_Qos.h @@ -69,147 +69,6 @@ typedef enum _ACK_POLICY{ }ACK_POLICY,*PACK_POLICY; #define WMM_PARAM_ELEMENT_SIZE (8+(4*AC_PARAM_SIZE)) -#if 0 -#define GET_QOS_CTRL(_pStart) ReadEF2Byte((u8 *)(_pStart) + 24) -#define SET_QOS_CTRL(_pStart, _value) WriteEF2Byte((u8 *)(_pStart) + 24, _value) - -// WMM control field. -#define GET_QOS_CTRL_WMM_UP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 3)) -#define SET_QOS_CTRL_WMM_UP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 3, (u8)(_value)) - -#define GET_QOS_CTRL_WMM_EOSP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1)) -#define SET_QOS_CTRL_WMM_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value)) - -#define GET_QOS_CTRL_WMM_ACK_POLICY(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2)) -#define SET_QOS_CTRL_WMM_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value)) - -// 802.11e control field (by STA, data) -#define GET_QOS_CTRL_STA_DATA_TID(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 4)) -#define SET_QOS_CTRL_STA_DATA_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 4, (u8)(_value)) - -#define GET_QOS_CTRL_STA_DATA_QSIZE_FLAG(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1)) -#define SET_QOS_CTRL_STA_DATA_QSIZE_FLAG(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value)) - -#define GET_QOS_CTRL_STA_DATA_ACK_POLICY(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2)) -#define SET_QOS_CTRL_STA_DATA_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value)) - -#define GET_QOS_CTRL_STA_DATA_TXOP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 8, 8)) -#define SET_QOS_CTRL_STA_DATA_TXOP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 8, 8, (u8)(_value)) - -#define GET_QOS_CTRL_STA_DATA_QSIZE(_pStart) GET_QOS_CTRL_STA_DATA_TXOP(_pStart) -#define SET_QOS_CTRL_STA_DATA_QSIZE(_pStart, _value) SET_QOS_CTRL_STA_DATA_TXOP(_pStart) - -// 802.11e control field (by HC, data) -#define GET_QOS_CTRL_HC_DATA_TID(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 4)) -#define SET_QOS_CTRL_HC_DATA_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 4, (u8)(_value)) - -#define GET_QOS_CTRL_HC_DATA_EOSP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1)) -#define SET_QOS_CTRL_HC_DATA_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value)) - -#define GET_QOS_CTRL_HC_DATA_ACK_POLICY(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2)) -#define SET_QOS_CTRL_HC_DATA_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value)) - -#define GET_QOS_CTRL_HC_DATA_PS_BUFSTATE(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 8, 8)) -#define SET_QOS_CTRL_HC_DATA_PS_BUFSTATE(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 8, 8, (u8)(_value)) - -// 802.11e control field (by HC, CFP) -#define GET_QOS_CTRL_HC_CFP_TID(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 0, 4)) -#define SET_QOS_CTRL_HC_CFP_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 0, 4, (u8)(_value)) - -#define GET_QOS_CTRL_HC_CFP_EOSP(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 4, 1)) -#define SET_QOS_CTRL_HC_CFP_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 4, 1, (u8)(_value)) - -#define GET_QOS_CTRL_HC_CFP_ACK_POLICY(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 5, 2)) -#define SET_QOS_CTRL_HC_CFP_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 5, 2, (u8)(_value)) - -#define GET_QOS_CTRL_HC_CFP_TXOP_LIMIT(_pStart) ((u8)LE_BITS_TO_2BYTE((u8 *)(_pStart)+24, 8, 8)) -#define SET_QOS_CTRL_HC_CFP_TXOP_LIMIT(_pStart, _value) SET_BITS_TO_LE_2BYTE((u8 *)(_pStart)+24, 8, 8, (u8)(_value)) - -#define SET_WMM_QOS_INFO_FIELD(_pStart, _val) WriteEF1Byte(_pStart, _val) - -#define GET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart) LE_BITS_TO_1BYTE(_pStart, 0, 4) -#define SET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 0, 4, _val) - -#define GET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 7, 1) -#define SET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 7, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 0, 1) -#define SET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 0, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 1, 1) -#define SET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 1, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 2, 1) -#define SET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 2, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 3, 1) -#define SET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 3, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart) LE_BITS_TO_1BYTE(_pStart, 5, 2) -#define SET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 5, 2, _val) - - -#define WMM_INFO_ELEMENT_SIZE 7 - -#define GET_WMM_INFO_ELE_OUI(_pStart) ((u8 *)(_pStart)) -#define SET_WMM_INFO_ELE_OUI(_pStart, _pVal) PlatformMoveMemory(_pStart, _pVal, 3); - -#define GET_WMM_INFO_ELE_OUI_TYPE(_pStart) ( EF1Byte( *((u8 *)(_pStart)+3) ) ) -#define SET_WMM_INFO_ELE_OUI_TYPE(_pStart, _val) ( *((u8 *)(_pStart)+3) = EF1Byte(_val) ) - -#define GET_WMM_INFO_ELE_OUI_SUBTYPE(_pStart) ( EF1Byte( *((u8 *)(_pStart)+4) ) ) -#define SET_WMM_INFO_ELE_OUI_SUBTYPE(_pStart, _val) ( *((u8 *)(_pStart)+4) = EF1Byte(_val) ) - -#define GET_WMM_INFO_ELE_VERSION(_pStart) ( EF1Byte( *((u8 *)(_pStart)+5) ) ) -#define SET_WMM_INFO_ELE_VERSION(_pStart, _val) ( *((u8 *)(_pStart)+5) = EF1Byte(_val) ) - -#define GET_WMM_INFO_ELE_QOS_INFO_FIELD(_pStart) ( EF1Byte( *((u8 *)(_pStart)+6) ) ) -#define SET_WMM_INFO_ELE_QOS_INFO_FIELD(_pStart, _val) ( *((u8 *)(_pStart)+6) = EF1Byte(_val) ) - - - -#define GET_WMM_AC_PARAM_AIFSN(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 0, 4) ) -#define SET_WMM_AC_PARAM_AIFSN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 0, 4, _val) - -#define GET_WMM_AC_PARAM_ACM(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 4, 1) ) -#define SET_WMM_AC_PARAM_ACM(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 4, 1, _val) - -#define GET_WMM_AC_PARAM_ACI(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 5, 2) ) -#define SET_WMM_AC_PARAM_ACI(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 5, 2, _val) - -#define GET_WMM_AC_PARAM_ACI_AIFSN(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 0, 8) ) -#define SET_WMM_AC_PARAM_ACI_AIFSN(_pStart, _val) SET_BTIS_TO_LE_4BYTE(_pStart, 0, 8, _val) - -#define GET_WMM_AC_PARAM_ECWMIN(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 8, 4) ) -#define SET_WMM_AC_PARAM_ECWMIN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 8, 4, _val) - -#define GET_WMM_AC_PARAM_ECWMAX(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 12, 4) ) -#define SET_WMM_AC_PARAM_ECWMAX(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 12, 4, _val) - -#define GET_WMM_AC_PARAM_TXOP_LIMIT(_pStart) ( (u16)LE_BITS_TO_4BYTE(_pStart, 16, 16) ) -#define SET_WMM_AC_PARAM_TXOP_LIMIT(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 16, 16, _val) - - - - -#define GET_WMM_PARAM_ELE_OUI(_pStart) ((u8 *)(_pStart)) -#define SET_WMM_PARAM_ELE_OUI(_pStart, _pVal) PlatformMoveMemory(_pStart, _pVal, 3) - -#define GET_WMM_PARAM_ELE_OUI_TYPE(_pStart) ( EF1Byte( *((u8 *)(_pStart)+3) ) ) -#define SET_WMM_PARAM_ELE_OUI_TYPE(_pStart, _val) ( *((u8 *)(_pStart)+3) = EF1Byte(_val) ) - -#define GET_WMM_PARAM_ELE_OUI_SUBTYPE(_pStart) ( EF1Byte( *((u8 *)(_pStart)+4) ) ) -#define SET_WMM_PARAM_ELE_OUI_SUBTYPE(_pStart, _val) ( *((u8 *)(_pStart)+4) = EF1Byte(_val) ) - -#define GET_WMM_PARAM_ELE_VERSION(_pStart) ( EF1Byte( *((u8 *)(_pStart)+5) ) ) -#define SET_WMM_PARAM_ELE_VERSION(_pStart, _val) ( *((u8 *)(_pStart)+5) = EF1Byte(_val) ) - -#define GET_WMM_PARAM_ELE_QOS_INFO_FIELD(_pStart) ( EF1Byte( *((u8 *)(_pStart)+6) ) ) -#define SET_WMM_PARAM_ELE_QOS_INFO_FIELD(_pStart, _val) ( *((u8 *)(_pStart)+6) = EF1Byte(_val) ) - -#define GET_WMM_PARAM_ELE_AC_PARAM(_pStart) ( (u8 *)(_pStart)+8 ) -#define SET_WMM_PARAM_ELE_AC_PARAM(_pStart, _pVal) PlatformMoveMemory((_pStart)+8, _pVal, 16) -#endif // // QoS Control Field @@ -360,22 +219,6 @@ typedef union _QOS_INFO_FIELD{ }QOS_INFO_FIELD, *PQOS_INFO_FIELD; -#if 0 -// -// WMM Information Element -// Ref: WMM spec 2.2.1: WME Information Element, p.10. -// -typedef struct _WMM_INFO_ELEMENT{ -// u8 ElementID; -// u8 Length; - u8 OUI[3]; - u8 OUI_Type; - u8 OUI_SubType; - u8 Version; - QOS_INFO_FIELD QosInfo; -}WMM_INFO_ELEMENT, *PWMM_INFO_ELEMENT; -#endif - // // ACI to AC coding. // Ref: WMM spec 2.2.2: WME Parameter Element, p.13. @@ -649,16 +492,7 @@ typedef struct _OCTET_STRING{ u8 *Octet; u16 Length; }OCTET_STRING, *POCTET_STRING; -#if 0 -#define FillOctetString(_os,_octet,_len) \ - (_os).Octet=(u8 *)(_octet); \ - (_os).Length=(_len); - -#define WMM_ELEM_HDR_LEN 6 -#define WMMElemSkipHdr(_osWMMElem) \ - (_osWMMElem).Octet += WMM_ELEM_HDR_LEN; \ - (_osWMMElem).Length -= WMM_ELEM_HDR_LEN; -#endif + // // STA QoS data. // Ref: DOT11_QOS in 8185 code. [def. in QoS_mp.h] diff --git a/drivers/staging/rtl8192su/ieee80211/rtl819x_Qos.h b/drivers/staging/rtl8192su/ieee80211/rtl819x_Qos.h index 7aa9a77..d4565ec 100644 --- a/drivers/staging/rtl8192su/ieee80211/rtl819x_Qos.h +++ b/drivers/staging/rtl8192su/ieee80211/rtl819x_Qos.h @@ -1,7 +1,6 @@ #ifndef __INC_QOS_TYPE_H #define __INC_QOS_TYPE_H -//#include "EndianFree.h" #define BIT0 0x00000001 #define BIT1 0x00000002 #define BIT2 0x00000004 diff --git a/drivers/staging/rtl8192u/ieee80211/rtl819x_Qos.h b/drivers/staging/rtl8192u/ieee80211/rtl819x_Qos.h index 13b1e5c..9e4ced1 100644 --- a/drivers/staging/rtl8192u/ieee80211/rtl819x_Qos.h +++ b/drivers/staging/rtl8192u/ieee80211/rtl819x_Qos.h @@ -1,7 +1,6 @@ #ifndef __INC_QOS_TYPE_H #define __INC_QOS_TYPE_H -//#include "EndianFree.h" #define BIT0 0x00000001 #define BIT1 0x00000002 #define BIT2 0x00000004 @@ -220,7 +219,6 @@ typedef union _QOS_INFO_FIELD{ }QOS_INFO_FIELD, *PQOS_INFO_FIELD; - // // ACI to AC coding. // Ref: WMM spec 2.2.2: WME Parameter Element, p.13. @@ -494,6 +492,7 @@ typedef struct _OCTET_STRING{ u8 *Octet; u16 Length; }OCTET_STRING, *POCTET_STRING; + // // STA QoS data. // Ref: DOT11_QOS in 8185 code. [def. in QoS_mp.h] -- cgit v0.10.2 From 48f658bb3d582c13b5d0b86b0295d5e0050e60c9 Mon Sep 17 00:00:00 2001 From: Takanori Suzuki Date: Sat, 8 May 2010 22:56:24 +0900 Subject: Staging: panel: change asm/uaccess.h to linux/uaccess.h This patch replaces with to comply with the checkpatch.pl hint. Signed-off-by: Takanori Suzuki Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c index 377884f..f9fcb2f 100644 --- a/drivers/staging/panel/panel.c +++ b/drivers/staging/panel/panel.c @@ -57,7 +57,7 @@ #include #include -#include +#include #include #define LCD_MINOR 156 -- cgit v0.10.2 From b8aab1278147e3b067903983a835ef3c68281b13 Mon Sep 17 00:00:00 2001 From: Marin Mitov Date: Sun, 9 May 2010 14:50:40 +0300 Subject: Staging: dt3155v4l: correcting a bug dt3155v4l driver, as in -rc6-next-20100506 has a BUG. When it modifies q->int_ops structure in videobuf-dma-contig module the change is visible for all other modules using it. Make a local copy of this structure and use its modification to solve the bug. Signed-off-by: Marin Mitov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155v4l/dt3155v4l.c b/drivers/staging/dt3155v4l/dt3155v4l.c index b1695ad..a5e4091 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.c +++ b/drivers/staging/dt3155v4l/dt3155v4l.c @@ -612,9 +612,14 @@ dt3155_queue_dma_contig_init(struct videobuf_queue *q, unsigned int msize, void *priv) { + struct dt3155_priv *pd = q->priv_data; + videobuf_queue_dma_contig_init(q, ops, dev, irqlock, type, field, msize, priv); - /* overwrite with our methods */ + /* replace with local copy */ + pd->qt_ops = *q->int_ops; + q->int_ops = &pd->qt_ops; + /* and overwrite with our methods */ q->int_ops->iolock = dt3155_iolock; q->int_ops->mmap_mapper = dt3155_mmap_mapper; q->int_ops->sync = dt3155_sync_for_cpu; diff --git a/drivers/staging/dt3155v4l/dt3155v4l.h b/drivers/staging/dt3155v4l/dt3155v4l.h index e5c4ad0..4c6a0ee 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.h +++ b/drivers/staging/dt3155v4l/dt3155v4l.h @@ -185,6 +185,7 @@ struct dt3155_stats { * @curr_buf: pointer to curren buffer * @thread pointer to worker thraed * @irq_handler: irq handler for the driver + * @qt_ops local copy of dma-contig qtype_ops * @dmaq queue for dma buffers * @do_dma wait queue of the kernel thread * @mux: mutex to protect the instance @@ -204,6 +205,7 @@ struct dt3155_priv { struct videobuf_buffer *curr_buf; struct task_struct *thread; irq_handler_t irq_handler; + struct videobuf_qtype_ops qt_ops; struct list_head dmaq; wait_queue_head_t do_dma; struct mutex mux; -- cgit v0.10.2 From ad602259451ddc8b0f83cb312cb54223317eda74 Mon Sep 17 00:00:00 2001 From: Marin Mitov Date: Tue, 11 May 2010 11:05:25 +0300 Subject: staging: dt3155v4l: last fix to correct a bug introduces a bug. Correct it. The previous patch "use_local_copy_qtype_ops.patch" http://lkml.org/lkml/2010/5/9/40 has introduced a new BUG. This patch corrects it. Signed-off-by: Marin Mitov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155v4l/dt3155v4l.c b/drivers/staging/dt3155v4l/dt3155v4l.c index a5e4091..4946361 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.c +++ b/drivers/staging/dt3155v4l/dt3155v4l.c @@ -612,7 +612,7 @@ dt3155_queue_dma_contig_init(struct videobuf_queue *q, unsigned int msize, void *priv) { - struct dt3155_priv *pd = q->priv_data; + struct dt3155_priv *pd = priv; videobuf_queue_dma_contig_init(q, ops, dev, irqlock, type, field, msize, priv); -- cgit v0.10.2 From d101b958cb334c757edd4998fa0f2454755d7c3e Mon Sep 17 00:00:00 2001 From: "Prashant P. Shah" Date: Sun, 9 May 2010 22:41:16 +0530 Subject: Staging: wlags49_h2: fixed whitespace issues in wl_profile.c This is a patch to the wl_profile.c file that fixes whitespace issues found by the checkpatch.pl tool. Signed-off-by: Prashant P. Shah Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/wl_profile.c b/drivers/staging/wlags49_h2/wl_profile.c index 1e0c75f..e4e78a4 100644 --- a/drivers/staging/wlags49_h2/wl_profile.c +++ b/drivers/staging/wlags49_h2/wl_profile.c @@ -113,17 +113,19 @@ extern p_u32 DebugFlag; extern dbg_info_t *DbgInfo; #endif -int parse_yes_no( char* value ); +int parse_yes_no(char *value); -int parse_yes_no( char* value ) { +int parse_yes_no(char *value) +{ int rc = 0; //default to NO for invalid parameters - if ( strlen( value ) == 1 ) { - if ( ( value[0] | ('Y'^'y') ) == 'y' ) rc = 1; + if (strlen(value) == 1) { + if ((value[0] | ('Y'^'y')) == 'y') + rc = 1; // } else { // this should not be debug time info, it is an enduser data entry error ;? -// DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MICROWAVE_ROBUSTNESS ); +// DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MICROWAVE_ROBUSTNESS); } return rc; } // parse_yes_no @@ -149,11 +151,11 @@ int rc = 0; //default to NO for invalid parameters * N/A * ******************************************************************************/ -void parse_config( struct net_device *dev ) +void parse_config(struct net_device *dev) { int file_desc; #if 0 // BIN_DL - int rc; + int rc; char *cp = NULL; #endif // BIN_DL char buffer[MAX_LINE_SIZE]; @@ -163,48 +165,48 @@ void parse_config( struct net_device *dev ) ENCSTRCT sEncryption; /*------------------------------------------------------------------------*/ - DBG_FUNC( "parse_config" ); - DBG_ENTER( DbgInfo ); + DBG_FUNC("parse_config"); + DBG_ENTER(DbgInfo); /* Get the wavelan specific info for this device */ wvlan_config = (struct wl_private *)dev->priv; - if ( wvlan_config == NULL ) { - DBG_ERROR( DbgInfo, "Wavelan specific info struct not present?\n" ); + if (wvlan_config == NULL) { + DBG_ERROR(DbgInfo, "Wavelan specific info struct not present?\n"); return; } /* setup the default encryption string */ - strcpy( wvlan_config->szEncryption, DEF_CRYPT_STR ); + strcpy(wvlan_config->szEncryption, DEF_CRYPT_STR); /* Obtain a user-space process context, storing the original context */ - fs = get_fs( ); - set_fs( get_ds( )); + fs = get_fs(); + set_fs(get_ds()); /* Determine the filename for this device and attempt to open it */ - sprintf( filename, "%s%s", ROOT_CONFIG_FILENAME, dev->name ); - file_desc = open( filename, O_RDONLY, 0 ); - if ( file_desc != -1 ) { - DBG_TRACE( DbgInfo, "Wireless config file found. Parsing options...\n" ); + sprintf(filename, "%s%s", ROOT_CONFIG_FILENAME, dev->name); + file_desc = open(filename, O_RDONLY, 0); + if (file_desc != -1) { + DBG_TRACE(DbgInfo, "Wireless config file found. Parsing options...\n"); /* Read out the options */ - while( readline( file_desc, buffer )) { - translate_option( buffer, wvlan_config ); + while (readline(file_desc, buffer)) { + translate_option(buffer, wvlan_config); } /* Close the file */ - close( file_desc ); //;?even if file_desc == -1 ??? + close(file_desc); //;?even if file_desc == -1 ??? } else { - DBG_TRACE( DbgInfo, "No iwconfig file found for this device; " - "config.opts or wireless.opts will be used\n" ); + DBG_TRACE(DbgInfo, "No iwconfig file found for this device; " + "config.opts or wireless.opts will be used\n"); } /* Return to the original context */ - set_fs( fs ); + set_fs(fs); /* convert the WEP keys, if read in as key1, key2, type of data */ - if ( wvlan_config->EnableEncryption ) { - memset( &sEncryption, 0, sizeof( sEncryption )); + if (wvlan_config->EnableEncryption) { + memset(&sEncryption, 0, sizeof(sEncryption)); - wl_wep_decode( CRYPT_CODE, &sEncryption, - wvlan_config->szEncryption ); + wl_wep_decode(CRYPT_CODE, &sEncryption, + wvlan_config->szEncryption); /* the Linux driver likes to use 1-4 for the key IDs, and then convert to 0-3 when sending to the card. The Windows code @@ -216,63 +218,63 @@ void parse_config( struct net_device *dev ) sEncryption.wEnabled = wvlan_config->EnableEncryption; sEncryption.wTxKeyID = wvlan_config->TransmitKeyID - 1; - memcpy( &sEncryption.EncStr, &wvlan_config->DefaultKeys, - sizeof( CFG_DEFAULT_KEYS_STRCT )); + memcpy(&sEncryption.EncStr, &wvlan_config->DefaultKeys, + sizeof(CFG_DEFAULT_KEYS_STRCT)); - memset( wvlan_config->szEncryption, 0, sizeof( wvlan_config->szEncryption )); + memset(wvlan_config->szEncryption, 0, sizeof(wvlan_config->szEncryption)); - wl_wep_code( CRYPT_CODE, wvlan_config->szEncryption, &sEncryption, - sizeof( sEncryption )); + wl_wep_code(CRYPT_CODE, wvlan_config->szEncryption, &sEncryption, + sizeof(sEncryption)); } /* decode the encryption string for the call to wl_commit() */ - wl_wep_decode( CRYPT_CODE, &sEncryption, wvlan_config->szEncryption ); + wl_wep_decode(CRYPT_CODE, &sEncryption, wvlan_config->szEncryption); wvlan_config->TransmitKeyID = sEncryption.wTxKeyID + 1; wvlan_config->EnableEncryption = sEncryption.wEnabled; - memcpy( &wvlan_config->DefaultKeys, &sEncryption.EncStr, - sizeof( CFG_DEFAULT_KEYS_STRCT )); + memcpy(&wvlan_config->DefaultKeys, &sEncryption.EncStr, + sizeof(CFG_DEFAULT_KEYS_STRCT)); #if 0 //BIN_DL /* Obtain a user-space process context, storing the original context */ - fs = get_fs( ); - set_fs( get_ds( )); + fs = get_fs(); + set_fs(get_ds()); //;?just to fake something - strcpy(/*wvlan_config->fw_image_*/filename, "/etc/agere/fw.bin" ); - file_desc = open( /*wvlan_config->fw_image_*/filename, 0, 0 ); - if ( file_desc == -1 ) { - DBG_ERROR( DbgInfo, "No image file found\n" ); + strcpy(/*wvlan_config->fw_image_*/filename, "/etc/agere/fw.bin"); + file_desc = open(/*wvlan_config->fw_image_*/filename, 0, 0); + if (file_desc == -1) { + DBG_ERROR(DbgInfo, "No image file found\n"); } else { - DBG_TRACE( DbgInfo, "F/W image file found\n" ); + DBG_TRACE(DbgInfo, "F/W image file found\n"); #define DHF_ALLOC_SIZE 96000 //just below 96K, let's hope it suffices for now and for the future - cp = (char*)vmalloc( DHF_ALLOC_SIZE ); - if ( cp == NULL ) { - DBG_ERROR( DbgInfo, "error in vmalloc\n" ); + cp = (char *)vmalloc(DHF_ALLOC_SIZE); + if (cp == NULL) { + DBG_ERROR(DbgInfo, "error in vmalloc\n"); } else { - rc = read( file_desc, cp, DHF_ALLOC_SIZE ); - if ( rc == DHF_ALLOC_SIZE ) { - DBG_ERROR( DbgInfo, "buffer too small, %d\n", DHF_ALLOC_SIZE ); - } else if ( rc > 0 ) { - DBG_TRACE( DbgInfo, "read O.K.: %d bytes %.12s\n", rc, cp ); - rc = read( file_desc, &cp[rc], 1 ); - if ( rc == 0 ) { - DBG_TRACE( DbgInfo, "no more to read\n" ); + rc = read(file_desc, cp, DHF_ALLOC_SIZE); + if (rc == DHF_ALLOC_SIZE) { + DBG_ERROR(DbgInfo, "buffer too small, %d\n", DHF_ALLOC_SIZE); + } else if (rc > 0) { + DBG_TRACE(DbgInfo, "read O.K.: %d bytes %.12s\n", rc, cp); + rc = read(file_desc, &cp[rc], 1); + if (rc == 0) { + DBG_TRACE(DbgInfo, "no more to read\n"); } } - if ( rc != 0 ) { - DBG_ERROR( DbgInfo, "file not read in one swoop or other error"\ - ", give up, too complicated, rc = %0X\n", rc ); + if (rc != 0) { + DBG_ERROR(DbgInfo, "file not read in one swoop or other error"\ + ", give up, too complicated, rc = %0X\n", rc); } - vfree( cp ); + vfree(cp); } - close( file_desc ); + close(file_desc); } - set_fs( fs ); /* Return to the original context */ + set_fs(fs); /* Return to the original context */ #endif // BIN_DL - DBG_LEAVE( DbgInfo ); + DBG_LEAVE(DbgInfo); return; } // parse_config @@ -298,17 +300,17 @@ void parse_config( struct net_device *dev ) * -1 on error * ******************************************************************************/ -int readline( int filedesc, char *buffer ) +int readline(int filedesc, char *buffer) { int result = -1; int bytes_read = 0; /*------------------------------------------------------------------------*/ /* Make sure the file descriptor is good */ - if ( filedesc != -1 ) { + if (filedesc != -1) { /* Read in from the file byte by byte until a newline is reached */ - while(( result = read( filedesc, &buffer[bytes_read], 1 )) == 1 ) { - if ( buffer[bytes_read] == '\n' ) { + while ((result = read(filedesc, &buffer[bytes_read], 1)) == 1) { + if (buffer[bytes_read] == '\n') { buffer[bytes_read] = '\0'; bytes_read++; break; @@ -318,7 +320,7 @@ int readline( int filedesc, char *buffer ) } /* Return the number of bytes read */ - if ( result == -1 ) { + if (result == -1) { return result; } else { return bytes_read; @@ -346,7 +348,7 @@ int readline( int filedesc, char *buffer ) * N/A * ******************************************************************************/ -void translate_option( char *buffer, struct wl_private *lp ) +void translate_option(char *buffer, struct wl_private *lp) { unsigned int value_convert = 0; int string_length = 0; @@ -355,16 +357,16 @@ void translate_option( char *buffer, struct wl_private *lp ) u_char mac_value[ETH_ALEN]; /*------------------------------------------------------------------------*/ - DBG_FUNC( "translate_option" ); + DBG_FUNC("translate_option"); - if ( buffer == NULL || lp == NULL ) { - DBG_ERROR( DbgInfo, "Config file buffer and/or wavelan buffer ptr NULL\n" ); + if (buffer == NULL || lp == NULL) { + DBG_ERROR(DbgInfo, "Config file buffer and/or wavelan buffer ptr NULL\n"); return; } - ParseConfigLine( buffer, &key, &value ); + ParseConfigLine(buffer, &key, &value); - if ( key == NULL || value == NULL ) { + if (key == NULL || value == NULL) { return; } @@ -375,9 +377,9 @@ void translate_option( char *buffer, struct wl_private *lp ) /* handle DebugFlag as early as possible so it starts its influence as early * as possible */ - if ( strcmp( key, PARM_NAME_DEBUG_FLAG ) == 0 ) { - if ( DebugFlag == ~0 ) { //if DebugFlag is not specified on the command line - if ( DbgInfo->DebugFlag == 0 ) { /* if pc_debug did not set DebugFlag (i.e.pc_debug is + if (strcmp(key, PARM_NAME_DEBUG_FLAG) == 0) { + if (DebugFlag == ~0) { /* if DebugFlag is not specified on the command line */ + if (DbgInfo->DebugFlag == 0) { /* if pc_debug did not set DebugFlag (i.e.pc_debug is * not specified or specified outside the 4-8 range */ DbgInfo->DebugFlag |= DBG_DEFAULTS; @@ -388,250 +390,230 @@ void translate_option( char *buffer, struct wl_private *lp ) DbgInfo->DebugFlag = simple_strtoul(value, NULL, 0); //;?Delete ASAP } #endif /* DBG */ - if ( strcmp( key, PARM_NAME_AUTH_KEY_MGMT_SUITE ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_AUTH_KEY_MGMT_SUITE, value ); + if (strcmp(key, PARM_NAME_AUTH_KEY_MGMT_SUITE) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_AUTH_KEY_MGMT_SUITE, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_AUTH_KEY_MGMT_SUITE ) || ( value_convert <= PARM_MAX_AUTH_KEY_MGMT_SUITE )) { + if ((value_convert >= PARM_MIN_AUTH_KEY_MGMT_SUITE) || (value_convert <= PARM_MAX_AUTH_KEY_MGMT_SUITE)) { lp->AuthKeyMgmtSuite = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_AUTH_KEY_MGMT_SUITE ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_AUTH_KEY_MGMT_SUITE); } - } - else if ( strcmp( key, PARM_NAME_BRSC_2GHZ ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_BRSC_2GHZ, value ); + } else if (strcmp(key, PARM_NAME_BRSC_2GHZ) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_BRSC_2GHZ, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_BRSC ) || ( value_convert <= PARM_MAX_BRSC )) { + if ((value_convert >= PARM_MIN_BRSC) || (value_convert <= PARM_MAX_BRSC)) { lp->brsc[0] = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_BRSC_2GHZ ); + DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_BRSC_2GHZ); } - } - else if ( strcmp( key, PARM_NAME_BRSC_5GHZ ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_BRSC_5GHZ, value ); + } else if (strcmp(key, PARM_NAME_BRSC_5GHZ) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_BRSC_5GHZ, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_BRSC ) || ( value_convert <= PARM_MAX_BRSC )) { + if ((value_convert >= PARM_MIN_BRSC) || (value_convert <= PARM_MAX_BRSC)) { lp->brsc[1] = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_BRSC_5GHZ ); + DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_BRSC_5GHZ); } - } - else if (( strcmp( key, PARM_NAME_DESIRED_SSID ) == 0 ) || ( strcmp( key, PARM_NAME_OWN_SSID ) == 0 )) { - DBG_TRACE( DbgInfo, "SSID, value: %s\n", value ); + } else if ((strcmp(key, PARM_NAME_DESIRED_SSID) == 0) || (strcmp(key, PARM_NAME_OWN_SSID) == 0)) { + DBG_TRACE(DbgInfo, "SSID, value: %s\n", value); - memset( lp->NetworkName, 0, ( PARM_MAX_NAME_LEN + 1 )); + memset(lp->NetworkName, 0, (PARM_MAX_NAME_LEN + 1)); /* Make sure the value isn't too long */ - string_length = strlen( value ); - if ( string_length > PARM_MAX_NAME_LEN ) { - DBG_WARNING( DbgInfo, "SSID too long; will be truncated\n" ); + string_length = strlen(value); + if (string_length > PARM_MAX_NAME_LEN) { + DBG_WARNING(DbgInfo, "SSID too long; will be truncated\n"); string_length = PARM_MAX_NAME_LEN; } - memcpy( lp->NetworkName, value, string_length ); + memcpy(lp->NetworkName, value, string_length); } #if 0 - else if ( strcmp( key, PARM_NAME_DOWNLOAD_FIRMWARE ) == 0 ) { - DBG_TRACE( DbgInfo, "DOWNLOAD_FIRMWARE, value: %s\n", value ); - memset( lp->fw_image_filename, 0, ( MAX_LINE_SIZE + 1 )); + else if (strcmp(key, PARM_NAME_DOWNLOAD_FIRMWARE) == 0) { + DBG_TRACE(DbgInfo, "DOWNLOAD_FIRMWARE, value: %s\n", value); + memset(lp->fw_image_filename, 0, (MAX_LINE_SIZE + 1)); /* Make sure the value isn't too long */ - string_length = strlen( value ); - if ( string_length > MAX_LINE_SIZE ) { - DBG_WARNING( DbgInfo, "F/W image file name too long; will be ignored\n" ); + string_length = strlen(value); + if (string_length > MAX_LINE_SIZE) { + DBG_WARNING(DbgInfo, "F/W image file name too long; will be ignored\n"); } else { - memcpy( lp->fw_image_filename, value, string_length ); + memcpy(lp->fw_image_filename, value, string_length); } } #endif - else if ( strcmp( key, PARM_NAME_ENABLE_ENCRYPTION ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_ENABLE_ENCRYPTION, value ); + else if (strcmp(key, PARM_NAME_ENABLE_ENCRYPTION) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_ENABLE_ENCRYPTION, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_ENABLE_ENCRYPTION ) && ( value_convert <= PARM_MAX_ENABLE_ENCRYPTION )) { + if ((value_convert >= PARM_MIN_ENABLE_ENCRYPTION) && (value_convert <= PARM_MAX_ENABLE_ENCRYPTION)) { lp->EnableEncryption = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_ENABLE_ENCRYPTION ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_ENABLE_ENCRYPTION); } - } - else if ( strcmp( key, PARM_NAME_ENCRYPTION ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_ENCRYPTION, value ); + } else if (strcmp(key, PARM_NAME_ENCRYPTION) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_ENCRYPTION, value); - memset( lp->szEncryption, 0, sizeof( lp->szEncryption )); + memset(lp->szEncryption, 0, sizeof(lp->szEncryption)); /* Make sure the value isn't too long */ - string_length = strlen( value ); - if ( string_length > sizeof( lp->szEncryption ) ) { - DBG_WARNING( DbgInfo, "%s too long; will be truncated\n", PARM_NAME_ENCRYPTION ); - string_length = sizeof( lp->szEncryption ); + string_length = strlen(value); + if (string_length > sizeof(lp->szEncryption)) { + DBG_WARNING(DbgInfo, "%s too long; will be truncated\n", PARM_NAME_ENCRYPTION); + string_length = sizeof(lp->szEncryption); } - memcpy( lp->szEncryption, value, string_length ); - } - else if ( strcmp( key, PARM_NAME_KEY1 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_KEY1, value ); + memcpy(lp->szEncryption, value, string_length); + } else if (strcmp(key, PARM_NAME_KEY1) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_KEY1, value); - if ( is_valid_key_string( value )) { - memset( lp->DefaultKeys.key[0].key, 0, MAX_KEY_SIZE ); + if (is_valid_key_string(value)) { + memset(lp->DefaultKeys.key[0].key, 0, MAX_KEY_SIZE); - key_string2key( value, &lp->DefaultKeys.key[0] ); + key_string2key(value, &lp->DefaultKeys.key[0]); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY1 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY1); } - } - else if ( strcmp( key, PARM_NAME_KEY2 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_KEY2, value ); + } else if (strcmp(key, PARM_NAME_KEY2) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_KEY2, value); - if ( is_valid_key_string( value )) { - memset( lp->DefaultKeys.key[1].key, 0, MAX_KEY_SIZE ); + if (is_valid_key_string(value)) { + memset(lp->DefaultKeys.key[1].key, 0, MAX_KEY_SIZE); - key_string2key( value, &lp->DefaultKeys.key[1] ); + key_string2key(value, &lp->DefaultKeys.key[1]); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY2 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY2); } - } - else if ( strcmp( key, PARM_NAME_KEY3 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_KEY3, value ); + } else if (strcmp(key, PARM_NAME_KEY3) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_KEY3, value); - if ( is_valid_key_string( value )) { - memset( lp->DefaultKeys.key[2].key, 0, MAX_KEY_SIZE ); + if (is_valid_key_string(value)) { + memset(lp->DefaultKeys.key[2].key, 0, MAX_KEY_SIZE); - key_string2key( value, &lp->DefaultKeys.key[2] ); + key_string2key(value, &lp->DefaultKeys.key[2]); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY3 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY3); } - } - else if ( strcmp( key, PARM_NAME_KEY4 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_KEY4, value ); + } else if (strcmp(key, PARM_NAME_KEY4) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_KEY4, value); - if ( is_valid_key_string( value )) { - memset( lp->DefaultKeys.key[3].key, 0, MAX_KEY_SIZE ); + if (is_valid_key_string(value)) { + memset(lp->DefaultKeys.key[3].key, 0, MAX_KEY_SIZE); - key_string2key( value, &lp->DefaultKeys.key[3] ); + key_string2key(value, &lp->DefaultKeys.key[3]); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY4 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_KEY4); } } /* New Parameters for WARP */ - else if ( strcmp( key, PARM_NAME_LOAD_BALANCING ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_LOAD_BALANCING, value ); + else if (strcmp(key, PARM_NAME_LOAD_BALANCING) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_LOAD_BALANCING, value); lp->loadBalancing = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_MEDIUM_DISTRIBUTION ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_MEDIUM_DISTRIBUTION, value ); + } else if (strcmp(key, PARM_NAME_MEDIUM_DISTRIBUTION) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MEDIUM_DISTRIBUTION, value); lp->mediumDistribution = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_MICROWAVE_ROBUSTNESS) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_MICROWAVE_ROBUSTNESS, value ); + } else if (strcmp(key, PARM_NAME_MICROWAVE_ROBUSTNESS) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MICROWAVE_ROBUSTNESS, value); lp->MicrowaveRobustness = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_MULTICAST_RATE ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_MULTICAST_RATE, value ); + } else if (strcmp(key, PARM_NAME_MULTICAST_RATE) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MULTICAST_RATE, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_MULTICAST_RATE ) && ( value_convert <= PARM_MAX_MULTICAST_RATE )) { + if ((value_convert >= PARM_MIN_MULTICAST_RATE) && (value_convert <= PARM_MAX_MULTICAST_RATE)) { lp->MulticastRate[0] = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MULTICAST_RATE ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MULTICAST_RATE); } - } - else if ( strcmp( key, PARM_NAME_OWN_CHANNEL ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_CHANNEL, value ); + } else if (strcmp(key, PARM_NAME_OWN_CHANNEL) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_CHANNEL, value); value_convert = simple_strtoul(value, NULL, 0); - if ( wl_is_a_valid_chan( value_convert )) { - if ( value_convert > 14 ) { + if (wl_is_a_valid_chan(value_convert)) { + if (value_convert > 14) { value_convert = value_convert | 0x100; } lp->Channel = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_CHANNEL ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_CHANNEL); } - } - else if ( strcmp( key, PARM_NAME_OWN_NAME ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_NAME, value ); + } else if (strcmp(key, PARM_NAME_OWN_NAME) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_NAME, value); - memset( lp->StationName, 0, ( PARM_MAX_NAME_LEN + 1 )); + memset(lp->StationName, 0, (PARM_MAX_NAME_LEN + 1)); /* Make sure the value isn't too long */ - string_length = strlen( value ); - if ( string_length > PARM_MAX_NAME_LEN ) { - DBG_WARNING( DbgInfo, "%s too long; will be truncated\n", PARM_NAME_OWN_NAME ); + string_length = strlen(value); + if (string_length > PARM_MAX_NAME_LEN) { + DBG_WARNING(DbgInfo, "%s too long; will be truncated\n", PARM_NAME_OWN_NAME); string_length = PARM_MAX_NAME_LEN; } - memcpy( lp->StationName, value, string_length ); - } - else if ( strcmp( key, PARM_NAME_RTS_THRESHOLD ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD, value ); + memcpy(lp->StationName, value, string_length); + } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_RTS_THRESHOLD ) && ( value_convert <= PARM_MAX_RTS_THRESHOLD )) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { lp->RTSThreshold = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD); } - } - else if ( strcmp( key, PARM_NAME_SRSC_2GHZ ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_SRSC_2GHZ, value ); + } else if (strcmp(key, PARM_NAME_SRSC_2GHZ) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_SRSC_2GHZ, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_SRSC ) || ( value_convert <= PARM_MAX_SRSC )) { + if ((value_convert >= PARM_MIN_SRSC) || (value_convert <= PARM_MAX_SRSC)) { lp->srsc[0] = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_SRSC_2GHZ ); + DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_SRSC_2GHZ); } - } - else if ( strcmp( key, PARM_NAME_SRSC_5GHZ ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_SRSC_5GHZ, value ); + } else if (strcmp(key, PARM_NAME_SRSC_5GHZ) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_SRSC_5GHZ, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_SRSC ) || ( value_convert <= PARM_MAX_SRSC )) { + if ((value_convert >= PARM_MIN_SRSC) || (value_convert <= PARM_MAX_SRSC)) { lp->srsc[1] = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_SRSC_5GHZ ); + DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_SRSC_5GHZ); } - } - else if ( strcmp( key, PARM_NAME_SYSTEM_SCALE ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_SYSTEM_SCALE, value ); + } else if (strcmp(key, PARM_NAME_SYSTEM_SCALE) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_SYSTEM_SCALE, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_SYSTEM_SCALE ) && ( value_convert <= PARM_MAX_SYSTEM_SCALE )) { + if ((value_convert >= PARM_MIN_SYSTEM_SCALE) && (value_convert <= PARM_MAX_SYSTEM_SCALE)) { lp->DistanceBetweenAPs = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_SYSTEM_SCALE ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_SYSTEM_SCALE); } - } - else if ( strcmp( key, PARM_NAME_TX_KEY ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_TX_KEY, value ); + } else if (strcmp(key, PARM_NAME_TX_KEY) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_KEY, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_TX_KEY ) && ( value_convert <= PARM_MAX_TX_KEY )) { + if ((value_convert >= PARM_MIN_TX_KEY) && (value_convert <= PARM_MAX_TX_KEY)) { lp->TransmitKeyID = simple_strtoul(value, NULL, 0); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_KEY ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_KEY); } - } - else if ( strcmp( key, PARM_NAME_TX_RATE ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE, value ); + } else if (strcmp(key, PARM_NAME_TX_RATE) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_TX_RATE ) && ( value_convert <= PARM_MAX_TX_RATE )) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { lp->TxRateControl[0] = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE); } - } - else if ( strcmp( key, PARM_NAME_TX_POW_LEVEL ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_TX_POW_LEVEL, value ); + } else if (strcmp(key, PARM_NAME_TX_POW_LEVEL) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_POW_LEVEL, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_TX_POW_LEVEL ) || ( value_convert <= PARM_MAX_TX_POW_LEVEL )) { + if ((value_convert >= PARM_MIN_TX_POW_LEVEL) || (value_convert <= PARM_MAX_TX_POW_LEVEL)) { lp->txPowLevel = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_POW_LEVEL ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_POW_LEVEL); } } @@ -640,101 +622,91 @@ void translate_option( char *buffer, struct wl_private *lp ) /* Configuration parameters specific to STA mode */ #if 1 //;? (HCF_TYPE) & HCF_TYPE_STA //;?seems reasonable that even an AP-only driver could afford this small additional footprint - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_STA ) { + if (CNV_INT_TO_LITTLE(lp->hcfCtx.IFB_FWIdentity.comp_id) == COMP_ID_FW_STA) { //;?should we return an error status in AP mode - if ( strcmp( key, PARM_NAME_PORT_TYPE ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_PORT_TYPE, value ); + if (strcmp(key, PARM_NAME_PORT_TYPE) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PORT_TYPE, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert == PARM_MIN_PORT_TYPE ) || ( value_convert == PARM_MAX_PORT_TYPE )) { + if ((value_convert == PARM_MIN_PORT_TYPE) || (value_convert == PARM_MAX_PORT_TYPE)) { lp->PortType = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PORT_TYPE ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PORT_TYPE); } - } - else if ( strcmp( key, PARM_NAME_PM_ENABLED ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_PM_ENABLED, value ); + } else if (strcmp(key, PARM_NAME_PM_ENABLED) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PM_ENABLED, value); value_convert = simple_strtoul(value, NULL, 0); /* ;? how about wl_main.c containing - * VALID_PARAM( PARM_PM_ENABLED <= WVLAN_PM_STATE_STANDARD || - * ( PARM_PM_ENABLED & 0x7FFF ) <= WVLAN_PM_STATE_STANDARD ); + * VALID_PARAM(PARM_PM_ENABLED <= WVLAN_PM_STATE_STANDARD || + * (PARM_PM_ENABLED & 0x7FFF) <= WVLAN_PM_STATE_STANDARD); */ - if ( ( value_convert & 0x7FFF ) <= PARM_MAX_PM_ENABLED) { + if ((value_convert & 0x7FFF) <= PARM_MAX_PM_ENABLED) { lp->PMEnabled = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PM_ENABLED ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PM_ENABLED); //;?this is a data entry error, hence not a DBG_WARNING } - } - else if ( strcmp( key, PARM_NAME_CREATE_IBSS ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_CREATE_IBSS, value ); + } else if (strcmp(key, PARM_NAME_CREATE_IBSS) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_CREATE_IBSS, value); lp->CreateIBSS = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_MULTICAST_RX ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_MULTICAST_RX, value ); + } else if (strcmp(key, PARM_NAME_MULTICAST_RX) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MULTICAST_RX, value); lp->MulticastReceive = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_MAX_SLEEP ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_MAX_SLEEP, value ); + } else if (strcmp(key, PARM_NAME_MAX_SLEEP) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MAX_SLEEP, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= 0 ) && ( value_convert <= 65535 )) { + if ((value_convert >= 0) && (value_convert <= 65535)) { lp->MaxSleepDuration = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MAX_SLEEP ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MAX_SLEEP); } - } - else if ( strcmp( key, PARM_NAME_NETWORK_ADDR ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_NETWORK_ADDR, value ); + } else if (strcmp(key, PARM_NAME_NETWORK_ADDR) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_NETWORK_ADDR, value); - if ( parse_mac_address( value, mac_value ) == ETH_ALEN ) { - memcpy( lp->MACAddress, mac_value, ETH_ALEN ); + if (parse_mac_address(value, mac_value) == ETH_ALEN) { + memcpy(lp->MACAddress, mac_value, ETH_ALEN); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_NETWORK_ADDR ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_NETWORK_ADDR); } - } - else if ( strcmp( key, PARM_NAME_AUTHENTICATION ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_AUTHENTICATION, value ); + } else if (strcmp(key, PARM_NAME_AUTHENTICATION) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_AUTHENTICATION, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_AUTHENTICATION ) && ( value_convert <= PARM_MAX_AUTHENTICATION )) { + if ((value_convert >= PARM_MIN_AUTHENTICATION) && (value_convert <= PARM_MAX_AUTHENTICATION)) { lp->authentication = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_AUTHENTICATION ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_AUTHENTICATION); } - } - else if ( strcmp( key, PARM_NAME_OWN_ATIM_WINDOW ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_ATIM_WINDOW, value ); + } else if (strcmp(key, PARM_NAME_OWN_ATIM_WINDOW) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_ATIM_WINDOW, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_OWN_ATIM_WINDOW ) && ( value_convert <= PARM_MAX_OWN_ATIM_WINDOW )) { + if ((value_convert >= PARM_MIN_OWN_ATIM_WINDOW) && (value_convert <= PARM_MAX_OWN_ATIM_WINDOW)) { lp->atimWindow = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_ATIM_WINDOW ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_ATIM_WINDOW); } - } - else if ( strcmp( key, PARM_NAME_PM_HOLDOVER_DURATION ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_PM_HOLDOVER_DURATION, value ); + } else if (strcmp(key, PARM_NAME_PM_HOLDOVER_DURATION) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PM_HOLDOVER_DURATION, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_PM_HOLDOVER_DURATION ) && ( value_convert <= PARM_MAX_PM_HOLDOVER_DURATION )) { + if ((value_convert >= PARM_MIN_PM_HOLDOVER_DURATION) && (value_convert <= PARM_MAX_PM_HOLDOVER_DURATION)) { lp->holdoverDuration = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PM_HOLDOVER_DURATION ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PM_HOLDOVER_DURATION); } - } - else if ( strcmp( key, PARM_NAME_PROMISCUOUS_MODE ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_PROMISCUOUS_MODE, value ); + } else if (strcmp(key, PARM_NAME_PROMISCUOUS_MODE) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PROMISCUOUS_MODE, value); lp->promiscuousMode = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_CONNECTION_CONTROL ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_CONNECTION_CONTROL, value ); + } else if (strcmp(key, PARM_NAME_CONNECTION_CONTROL) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_CONNECTION_CONTROL, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_CONNECTION_CONTROL ) && ( value_convert <= PARM_MAX_CONNECTION_CONTROL )) { + if ((value_convert >= PARM_MIN_CONNECTION_CONTROL) && (value_convert <= PARM_MAX_CONNECTION_CONTROL)) { lp->connectionControl = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_CONNECTION_CONTROL ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_CONNECTION_CONTROL); } } @@ -745,227 +717,204 @@ void translate_option( char *buffer, struct wl_private *lp ) /* Configuration parameters specific to AP mode */ #if 1 //;? (HCF_TYPE) & HCF_TYPE_AP //;?should we restore this to allow smaller memory footprint - if ( CNV_INT_TO_LITTLE( lp->hcfCtx.IFB_FWIdentity.comp_id ) == COMP_ID_FW_AP ) { - if ( strcmp( key, PARM_NAME_OWN_DTIM_PERIOD ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_DTIM_PERIOD, value ); + if (CNV_INT_TO_LITTLE(lp->hcfCtx.IFB_FWIdentity.comp_id) == COMP_ID_FW_AP) { + if (strcmp(key, PARM_NAME_OWN_DTIM_PERIOD) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_DTIM_PERIOD, value); value_convert = simple_strtoul(value, NULL, 0); - if ( value_convert >= PARM_MIN_OWN_DTIM_PERIOD ) { + if (value_convert >= PARM_MIN_OWN_DTIM_PERIOD) { lp->DTIMPeriod = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_DTIM_PERIOD ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_DTIM_PERIOD); } - } - else if ( strcmp( key, PARM_NAME_REJECT_ANY ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_REJECT_ANY, value ); + } else if (strcmp(key, PARM_NAME_REJECT_ANY) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_REJECT_ANY, value); lp->RejectAny = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_EXCLUDE_UNENCRYPTED ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_EXCLUDE_UNENCRYPTED, value ); + } else if (strcmp(key, PARM_NAME_EXCLUDE_UNENCRYPTED) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_EXCLUDE_UNENCRYPTED, value); lp->ExcludeUnencrypted = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_MULTICAST_PM_BUFFERING ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_MULTICAST_PM_BUFFERING, value ); + } else if (strcmp(key, PARM_NAME_MULTICAST_PM_BUFFERING) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MULTICAST_PM_BUFFERING, value); lp->ExcludeUnencrypted = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_INTRA_BSS_RELAY ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_INTRA_BSS_RELAY, value ); + } else if (strcmp(key, PARM_NAME_INTRA_BSS_RELAY) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_INTRA_BSS_RELAY, value); lp->ExcludeUnencrypted = parse_yes_no(value); - } - else if ( strcmp( key, PARM_NAME_OWN_BEACON_INTERVAL ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_BEACON_INTERVAL, value ); + } else if (strcmp(key, PARM_NAME_OWN_BEACON_INTERVAL) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_BEACON_INTERVAL, value); value_convert = simple_strtoul(value, NULL, 0); - if ( value_convert >= PARM_MIN_OWN_BEACON_INTERVAL ) { + if (value_convert >= PARM_MIN_OWN_BEACON_INTERVAL) { lp->ownBeaconInterval = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_BEACON_INTERVAL ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_BEACON_INTERVAL); } - } - else if ( strcmp( key, PARM_NAME_COEXISTENCE ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_COEXISTENCE, value ); + } else if (strcmp(key, PARM_NAME_COEXISTENCE) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_COEXISTENCE, value); value_convert = simple_strtoul(value, NULL, 0); - if ( value_convert >= PARM_MIN_COEXISTENCE ) { + if (value_convert >= PARM_MIN_COEXISTENCE) { lp->coexistence = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_COEXISTENCE ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_COEXISTENCE); } } #ifdef USE_WDS - else if ( strcmp( key, PARM_NAME_RTS_THRESHOLD1 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD1, value ); + else if (strcmp(key, PARM_NAME_RTS_THRESHOLD1) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD1, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_RTS_THRESHOLD ) && ( value_convert <= PARM_MAX_RTS_THRESHOLD )) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { lp->wds_port[0].rtsThreshold = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD1 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD1); } - } - else if ( strcmp( key, PARM_NAME_RTS_THRESHOLD2 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD2, value ); + } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD2) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD2, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_RTS_THRESHOLD ) && ( value_convert <= PARM_MAX_RTS_THRESHOLD )) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { lp->wds_port[1].rtsThreshold = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD2 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD2); } - } - else if ( strcmp( key, PARM_NAME_RTS_THRESHOLD3 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD3, value ); + } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD3) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD3, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_RTS_THRESHOLD ) && ( value_convert <= PARM_MAX_RTS_THRESHOLD )) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { lp->wds_port[2].rtsThreshold = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD3 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD3); } - } - else if ( strcmp( key, PARM_NAME_RTS_THRESHOLD4 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD4, value ); + } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD4) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD4, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_RTS_THRESHOLD ) && ( value_convert <= PARM_MAX_RTS_THRESHOLD )) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { lp->wds_port[3].rtsThreshold = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD4 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD4); } - } - else if ( strcmp( key, PARM_NAME_RTS_THRESHOLD5 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD5, value ); + } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD5) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD5, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_RTS_THRESHOLD ) && ( value_convert <= PARM_MAX_RTS_THRESHOLD )) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { lp->wds_port[4].rtsThreshold = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD5 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD5); } - } - else if ( strcmp( key, PARM_NAME_RTS_THRESHOLD6 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD6, value ); + } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD6) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD6, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_RTS_THRESHOLD ) && ( value_convert <= PARM_MAX_RTS_THRESHOLD )) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { lp->wds_port[5].rtsThreshold = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD6 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD6); } - } - else if ( strcmp( key, PARM_NAME_TX_RATE1 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE1, value ); + } else if (strcmp(key, PARM_NAME_TX_RATE1) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE1, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_TX_RATE ) && ( value_convert <= PARM_MAX_TX_RATE )) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { lp->wds_port[0].txRateCntl = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE1 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE1); } - } - else if ( strcmp( key, PARM_NAME_TX_RATE2 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE2, value ); + } else if (strcmp(key, PARM_NAME_TX_RATE2) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE2, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_TX_RATE ) && ( value_convert <= PARM_MAX_TX_RATE )) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { lp->wds_port[1].txRateCntl = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE2 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE2); } - } - else if ( strcmp( key, PARM_NAME_TX_RATE3 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE3, value ); + } else if (strcmp(key, PARM_NAME_TX_RATE3) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE3, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_TX_RATE ) && ( value_convert <= PARM_MAX_TX_RATE )) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { lp->wds_port[2].txRateCntl = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE3 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE3); } - } - else if ( strcmp( key, PARM_NAME_TX_RATE4 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE4, value ); + } else if (strcmp(key, PARM_NAME_TX_RATE4) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE4, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_TX_RATE ) && ( value_convert <= PARM_MAX_TX_RATE )) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { lp->wds_port[3].txRateCntl = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE4 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE4); } - } - else if ( strcmp( key, PARM_NAME_TX_RATE5 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE5, value ); + } else if (strcmp(key, PARM_NAME_TX_RATE5) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE5, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_TX_RATE ) && ( value_convert <= PARM_MAX_TX_RATE )) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { lp->wds_port[4].txRateCntl = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE5 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE5); } - } - else if ( strcmp( key, PARM_NAME_TX_RATE6 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE6, value ); + } else if (strcmp(key, PARM_NAME_TX_RATE6) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE6, value); value_convert = simple_strtoul(value, NULL, 0); - if (( value_convert >= PARM_MIN_TX_RATE ) && ( value_convert <= PARM_MAX_TX_RATE )) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { lp->wds_port[5].txRateCntl = value_convert; } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE6 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE6); } - } - else if ( strcmp( key, PARM_NAME_WDS_ADDRESS1 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS1, value ); + } else if (strcmp(key, PARM_NAME_WDS_ADDRESS1) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS1, value); - if ( parse_mac_address( value, mac_value ) == ETH_ALEN ) { - memcpy( lp->wds_port[0].wdsAddress, mac_value, ETH_ALEN ); + if (parse_mac_address(value, mac_value) == ETH_ALEN) { + memcpy(lp->wds_port[0].wdsAddress, mac_value, ETH_ALEN); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS1 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS1); } - } - else if ( strcmp( key, PARM_NAME_WDS_ADDRESS2 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS2, value ); + } else if (strcmp(key, PARM_NAME_WDS_ADDRESS2) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS2, value); - if ( parse_mac_address( value, mac_value ) == ETH_ALEN ) { - memcpy( lp->wds_port[1].wdsAddress, mac_value, ETH_ALEN ); + if (parse_mac_address(value, mac_value) == ETH_ALEN) { + memcpy(lp->wds_port[1].wdsAddress, mac_value, ETH_ALEN); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS2 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS2); } - } - else if ( strcmp( key, PARM_NAME_WDS_ADDRESS3 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS3, value ); + } else if (strcmp(key, PARM_NAME_WDS_ADDRESS3) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS3, value); - if ( parse_mac_address( value, mac_value ) == ETH_ALEN ) { - memcpy( lp->wds_port[2].wdsAddress, mac_value, ETH_ALEN ); + if (parse_mac_address(value, mac_value) == ETH_ALEN) { + memcpy(lp->wds_port[2].wdsAddress, mac_value, ETH_ALEN); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS3 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS3); } - } - else if ( strcmp( key, PARM_NAME_WDS_ADDRESS4 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS4, value ); + } else if (strcmp(key, PARM_NAME_WDS_ADDRESS4) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS4, value); - if ( parse_mac_address( value, mac_value ) == ETH_ALEN ) { - memcpy( lp->wds_port[3].wdsAddress, mac_value, ETH_ALEN ); + if (parse_mac_address(value, mac_value) == ETH_ALEN) { + memcpy(lp->wds_port[3].wdsAddress, mac_value, ETH_ALEN); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS4 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS4); } - } - else if ( strcmp( key, PARM_NAME_WDS_ADDRESS5 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS5, value ); + } else if (strcmp(key, PARM_NAME_WDS_ADDRESS5) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS5, value); - if ( parse_mac_address( value, mac_value ) == ETH_ALEN ) { - memcpy( lp->wds_port[4].wdsAddress, mac_value, ETH_ALEN ); + if (parse_mac_address(value, mac_value) == ETH_ALEN) { + memcpy(lp->wds_port[4].wdsAddress, mac_value, ETH_ALEN); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS5 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS5); } - } - else if ( strcmp( key, PARM_NAME_WDS_ADDRESS6 ) == 0 ) { - DBG_TRACE( DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS6, value ); + } else if (strcmp(key, PARM_NAME_WDS_ADDRESS6) == 0) { + DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS6, value); - if ( parse_mac_address( value, mac_value ) == ETH_ALEN ) { - memcpy( lp->wds_port[5].wdsAddress, mac_value, ETH_ALEN ); + if (parse_mac_address(value, mac_value) == ETH_ALEN) { + memcpy(lp->wds_port[5].wdsAddress, mac_value, ETH_ALEN); } else { - DBG_WARNING( DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS6 ); + DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS6); } } #endif /* USE_WDS */ @@ -996,7 +945,7 @@ void translate_option( char *buffer, struct wl_private *lp ) * The number of bytes in the final MAC address, should equal to ETH_ALEN. * ******************************************************************************/ -int parse_mac_address( char *value, u_char *byte_array ) +int parse_mac_address(char *value, u_char *byte_array) { int value_offset = 0; int array_offset = 0; @@ -1004,11 +953,11 @@ int parse_mac_address( char *value, u_char *byte_array ) char byte_field[3]; /*------------------------------------------------------------------------*/ - memset( byte_field, '\0', 3 ); + memset(byte_field, '\0', 3); - while( value[value_offset] != '\0' ) { + while (value[value_offset] != '\0') { /* Skip over the colon chars seperating the bytes, if they exist */ - if ( value[value_offset] == ':' ) { + if (value[value_offset] == ':') { value_offset++; continue; } @@ -1018,9 +967,9 @@ int parse_mac_address( char *value, u_char *byte_array ) value_offset++; /* Once the byte_field is filled, convert it and store it */ - if ( field_offset == 2 ) { + if (field_offset == 2) { byte_field[field_offset] = '\0'; - byte_array[array_offset] = simple_strtoul( byte_field, NULL, 16 ); + byte_array[array_offset] = simple_strtoul(byte_field, NULL, 16); field_offset = 0; array_offset++; } @@ -1052,42 +1001,42 @@ int parse_mac_address( char *value, u_char *byte_array ) * N/A * ******************************************************************************/ -void ParseConfigLine( char *pszLine, char **ppszLVal, char **ppszRVal ) +void ParseConfigLine(char *pszLine, char **ppszLVal, char **ppszRVal) { int i; int size; /*------------------------------------------------------------------------*/ - DBG_FUNC( "ParseConfigLine" ); - DBG_ENTER( DbgInfo ); + DBG_FUNC("ParseConfigLine"); + DBG_ENTER(DbgInfo); /* get a snapshot of our string size */ - size = strlen( pszLine ); + size = strlen(pszLine); *ppszLVal = NULL; *ppszRVal = NULL; - if ( pszLine[0] != '#' && /* skip the line if it is a comment */ - pszLine[0] != '\n'&& /* if it's an empty UNIX line, do nothing */ - !( pszLine[0] == '\r' && pszLine[1] == '\n' ) /* if it's an empty MS-DOS line, do nothing */ - ) { + if (pszLine[0] != '#' && /* skip the line if it is a comment */ + pszLine[0] != '\n' && /* if it's an empty UNIX line, do nothing */ + !(pszLine[0] == '\r' && pszLine[1] == '\n') /* if it's an empty MS-DOS line, do nothing */ + ) { /* advance past any whitespace, and assign the L-value */ - for( i = 0; i < size; i++ ) { - if ( pszLine[i] != ' ' ) { + for (i = 0; i < size; i++) { + if (pszLine[i] != ' ') { *ppszLVal = &pszLine[i]; break; } } /* advance to the end of the l-value*/ - for( i++; i < size; i++ ) { - if ( pszLine[i] == ' ' || pszLine[i] == '=' ) { + for (i++; i < size; i++) { + if (pszLine[i] == ' ' || pszLine[i] == '=') { pszLine[i] = '\0'; break; } } /* make any whitespace and the equal sign a NULL character, and advance to the R-Value */ - for( i++; i < size; i++ ) { - if ( pszLine[i] == ' ' || pszLine[i] == '=' ) { + for (i++; i < size; i++) { + if (pszLine[i] == ' ' || pszLine[i] == '=') { pszLine[i] = '\0'; continue; } @@ -1095,16 +1044,16 @@ void ParseConfigLine( char *pszLine, char **ppszLVal, char **ppszRVal ) break; } /* make the line ending character(s) a NULL */ - for( i++; i < size; i++ ) { - if ( pszLine[i] == '\n' ) { + for (i++; i < size; i++) { + if (pszLine[i] == '\n') { pszLine[i] = '\0'; } - if (( pszLine[i] == '\r' ) && ( pszLine[i+1] == '\n' )) { + if ((pszLine[i] == '\r') && (pszLine[i+1] == '\n')) { pszLine[i] = '\0'; } } } - DBG_LEAVE( DbgInfo ); + DBG_LEAVE(DbgInfo); } // ParseConfigLine /*============================================================================*/ -- cgit v0.10.2 From ce7f6389790f24e07e7e32518c798451e799a830 Mon Sep 17 00:00:00 2001 From: "Prashant P. Shah" Date: Sun, 9 May 2010 22:41:46 +0530 Subject: Staging: wlags49_h2: fixed unnecessary braces issues in wl_profile.c This is a patch to the wl_profile.c file that fixes the unnecessary braces style issues found by the checkpatch.pl tool. Signed-off-by: Prashant P. Shah Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/wl_profile.c b/drivers/staging/wlags49_h2/wl_profile.c index e4e78a4..13ade70 100644 --- a/drivers/staging/wlags49_h2/wl_profile.c +++ b/drivers/staging/wlags49_h2/wl_profile.c @@ -189,9 +189,8 @@ void parse_config(struct net_device *dev) DBG_TRACE(DbgInfo, "Wireless config file found. Parsing options...\n"); /* Read out the options */ - while (readline(file_desc, buffer)) { + while (readline(file_desc, buffer)) translate_option(buffer, wvlan_config); - } /* Close the file */ close(file_desc); //;?even if file_desc == -1 ??? } else { @@ -259,9 +258,8 @@ void parse_config(struct net_device *dev) } else if (rc > 0) { DBG_TRACE(DbgInfo, "read O.K.: %d bytes %.12s\n", rc, cp); rc = read(file_desc, &cp[rc], 1); - if (rc == 0) { + if (rc == 0) DBG_TRACE(DbgInfo, "no more to read\n"); - } } if (rc != 0) { DBG_ERROR(DbgInfo, "file not read in one swoop or other error"\ @@ -320,11 +318,10 @@ int readline(int filedesc, char *buffer) } /* Return the number of bytes read */ - if (result == -1) { + if (result == -1) return result; - } else { + else return bytes_read; - } } // readline /*============================================================================*/ @@ -366,9 +363,8 @@ void translate_option(char *buffer, struct wl_private *lp) ParseConfigLine(buffer, &key, &value); - if (key == NULL || value == NULL) { + if (key == NULL || value == NULL) return; - } /* Determine which key it is and perform the appropriate action */ @@ -394,29 +390,26 @@ void translate_option(char *buffer, struct wl_private *lp) DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_AUTH_KEY_MGMT_SUITE, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_AUTH_KEY_MGMT_SUITE) || (value_convert <= PARM_MAX_AUTH_KEY_MGMT_SUITE)) { + if ((value_convert >= PARM_MIN_AUTH_KEY_MGMT_SUITE) || (value_convert <= PARM_MAX_AUTH_KEY_MGMT_SUITE)) lp->AuthKeyMgmtSuite = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_AUTH_KEY_MGMT_SUITE); - } } else if (strcmp(key, PARM_NAME_BRSC_2GHZ) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_BRSC_2GHZ, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_BRSC) || (value_convert <= PARM_MAX_BRSC)) { + if ((value_convert >= PARM_MIN_BRSC) || (value_convert <= PARM_MAX_BRSC)) lp->brsc[0] = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_BRSC_2GHZ); - } } else if (strcmp(key, PARM_NAME_BRSC_5GHZ) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_BRSC_5GHZ, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_BRSC) || (value_convert <= PARM_MAX_BRSC)) { + if ((value_convert >= PARM_MIN_BRSC) || (value_convert <= PARM_MAX_BRSC)) lp->brsc[1] = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_BRSC_5GHZ); - } } else if ((strcmp(key, PARM_NAME_DESIRED_SSID) == 0) || (strcmp(key, PARM_NAME_OWN_SSID) == 0)) { DBG_TRACE(DbgInfo, "SSID, value: %s\n", value); @@ -437,22 +430,20 @@ void translate_option(char *buffer, struct wl_private *lp) memset(lp->fw_image_filename, 0, (MAX_LINE_SIZE + 1)); /* Make sure the value isn't too long */ string_length = strlen(value); - if (string_length > MAX_LINE_SIZE) { + if (string_length > MAX_LINE_SIZE) DBG_WARNING(DbgInfo, "F/W image file name too long; will be ignored\n"); - } else { + else memcpy(lp->fw_image_filename, value, string_length); - } } #endif else if (strcmp(key, PARM_NAME_ENABLE_ENCRYPTION) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_ENABLE_ENCRYPTION, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_ENABLE_ENCRYPTION) && (value_convert <= PARM_MAX_ENABLE_ENCRYPTION)) { + if ((value_convert >= PARM_MIN_ENABLE_ENCRYPTION) && (value_convert <= PARM_MAX_ENABLE_ENCRYPTION)) lp->EnableEncryption = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_ENABLE_ENCRYPTION); - } } else if (strcmp(key, PARM_NAME_ENCRYPTION) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_ENCRYPTION, value); @@ -522,19 +513,17 @@ void translate_option(char *buffer, struct wl_private *lp) value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_MULTICAST_RATE) && (value_convert <= PARM_MAX_MULTICAST_RATE)) { + if ((value_convert >= PARM_MIN_MULTICAST_RATE) && (value_convert <= PARM_MAX_MULTICAST_RATE)) lp->MulticastRate[0] = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MULTICAST_RATE); - } } else if (strcmp(key, PARM_NAME_OWN_CHANNEL) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_CHANNEL, value); value_convert = simple_strtoul(value, NULL, 0); if (wl_is_a_valid_chan(value_convert)) { - if (value_convert > 14) { + if (value_convert > 14) value_convert = value_convert | 0x100; - } lp->Channel = value_convert; } else { DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_CHANNEL); @@ -556,65 +545,58 @@ void translate_option(char *buffer, struct wl_private *lp) DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) lp->RTSThreshold = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD); - } } else if (strcmp(key, PARM_NAME_SRSC_2GHZ) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_SRSC_2GHZ, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_SRSC) || (value_convert <= PARM_MAX_SRSC)) { + if ((value_convert >= PARM_MIN_SRSC) || (value_convert <= PARM_MAX_SRSC)) lp->srsc[0] = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_SRSC_2GHZ); - } } else if (strcmp(key, PARM_NAME_SRSC_5GHZ) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_SRSC_5GHZ, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_SRSC) || (value_convert <= PARM_MAX_SRSC)) { + if ((value_convert >= PARM_MIN_SRSC) || (value_convert <= PARM_MAX_SRSC)) lp->srsc[1] = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invaid; will be ignored\n", PARM_NAME_SRSC_5GHZ); - } } else if (strcmp(key, PARM_NAME_SYSTEM_SCALE) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_SYSTEM_SCALE, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_SYSTEM_SCALE) && (value_convert <= PARM_MAX_SYSTEM_SCALE)) { + if ((value_convert >= PARM_MIN_SYSTEM_SCALE) && (value_convert <= PARM_MAX_SYSTEM_SCALE)) lp->DistanceBetweenAPs = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_SYSTEM_SCALE); - } } else if (strcmp(key, PARM_NAME_TX_KEY) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_KEY, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_TX_KEY) && (value_convert <= PARM_MAX_TX_KEY)) { + if ((value_convert >= PARM_MIN_TX_KEY) && (value_convert <= PARM_MAX_TX_KEY)) lp->TransmitKeyID = simple_strtoul(value, NULL, 0); - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_KEY); - } } else if (strcmp(key, PARM_NAME_TX_RATE) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) lp->TxRateControl[0] = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE); - } } else if (strcmp(key, PARM_NAME_TX_POW_LEVEL) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_POW_LEVEL, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_TX_POW_LEVEL) || (value_convert <= PARM_MAX_TX_POW_LEVEL)) { + if ((value_convert >= PARM_MIN_TX_POW_LEVEL) || (value_convert <= PARM_MAX_TX_POW_LEVEL)) lp->txPowLevel = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_POW_LEVEL); - } } /* Need to add? : Country code, Short/Long retry */ @@ -628,11 +610,10 @@ void translate_option(char *buffer, struct wl_private *lp) DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PORT_TYPE, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert == PARM_MIN_PORT_TYPE) || (value_convert == PARM_MAX_PORT_TYPE)) { + if ((value_convert == PARM_MIN_PORT_TYPE) || (value_convert == PARM_MAX_PORT_TYPE)) lp->PortType = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PORT_TYPE); - } } else if (strcmp(key, PARM_NAME_PM_ENABLED) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PM_ENABLED, value); value_convert = simple_strtoul(value, NULL, 0); @@ -656,46 +637,41 @@ void translate_option(char *buffer, struct wl_private *lp) DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_MAX_SLEEP, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= 0) && (value_convert <= 65535)) { + if ((value_convert >= 0) && (value_convert <= 65535)) lp->MaxSleepDuration = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MAX_SLEEP); - } } else if (strcmp(key, PARM_NAME_NETWORK_ADDR) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_NETWORK_ADDR, value); - if (parse_mac_address(value, mac_value) == ETH_ALEN) { + if (parse_mac_address(value, mac_value) == ETH_ALEN) memcpy(lp->MACAddress, mac_value, ETH_ALEN); - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_NETWORK_ADDR); - } } else if (strcmp(key, PARM_NAME_AUTHENTICATION) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_AUTHENTICATION, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_AUTHENTICATION) && (value_convert <= PARM_MAX_AUTHENTICATION)) { + if ((value_convert >= PARM_MIN_AUTHENTICATION) && (value_convert <= PARM_MAX_AUTHENTICATION)) lp->authentication = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_AUTHENTICATION); - } } else if (strcmp(key, PARM_NAME_OWN_ATIM_WINDOW) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_ATIM_WINDOW, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_OWN_ATIM_WINDOW) && (value_convert <= PARM_MAX_OWN_ATIM_WINDOW)) { + if ((value_convert >= PARM_MIN_OWN_ATIM_WINDOW) && (value_convert <= PARM_MAX_OWN_ATIM_WINDOW)) lp->atimWindow = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_ATIM_WINDOW); - } } else if (strcmp(key, PARM_NAME_PM_HOLDOVER_DURATION) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PM_HOLDOVER_DURATION, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_PM_HOLDOVER_DURATION) && (value_convert <= PARM_MAX_PM_HOLDOVER_DURATION)) { + if ((value_convert >= PARM_MIN_PM_HOLDOVER_DURATION) && (value_convert <= PARM_MAX_PM_HOLDOVER_DURATION)) lp->holdoverDuration = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PM_HOLDOVER_DURATION); - } } else if (strcmp(key, PARM_NAME_PROMISCUOUS_MODE) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PROMISCUOUS_MODE, value); lp->promiscuousMode = parse_yes_no(value); @@ -703,11 +679,10 @@ void translate_option(char *buffer, struct wl_private *lp) DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_CONNECTION_CONTROL, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_CONNECTION_CONTROL) && (value_convert <= PARM_MAX_CONNECTION_CONTROL)) { + if ((value_convert >= PARM_MIN_CONNECTION_CONTROL) && (value_convert <= PARM_MAX_CONNECTION_CONTROL)) lp->connectionControl = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_CONNECTION_CONTROL); - } } /* Need to add? : Probe Data Rate */ @@ -722,11 +697,10 @@ void translate_option(char *buffer, struct wl_private *lp) DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_DTIM_PERIOD, value); value_convert = simple_strtoul(value, NULL, 0); - if (value_convert >= PARM_MIN_OWN_DTIM_PERIOD) { + if (value_convert >= PARM_MIN_OWN_DTIM_PERIOD) lp->DTIMPeriod = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_DTIM_PERIOD); - } } else if (strcmp(key, PARM_NAME_REJECT_ANY) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_REJECT_ANY, value); lp->RejectAny = parse_yes_no(value); @@ -743,20 +717,18 @@ void translate_option(char *buffer, struct wl_private *lp) DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_BEACON_INTERVAL, value); value_convert = simple_strtoul(value, NULL, 0); - if (value_convert >= PARM_MIN_OWN_BEACON_INTERVAL) { + if (value_convert >= PARM_MIN_OWN_BEACON_INTERVAL) lp->ownBeaconInterval = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_OWN_BEACON_INTERVAL); - } } else if (strcmp(key, PARM_NAME_COEXISTENCE) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_COEXISTENCE, value); value_convert = simple_strtoul(value, NULL, 0); - if (value_convert >= PARM_MIN_COEXISTENCE) { + if (value_convert >= PARM_MIN_COEXISTENCE) lp->coexistence = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_COEXISTENCE); - } } #ifdef USE_WDS @@ -764,158 +736,140 @@ void translate_option(char *buffer, struct wl_private *lp) DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD1, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) lp->wds_port[0].rtsThreshold = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD1); - } } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD2) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD2, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) lp->wds_port[1].rtsThreshold = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD2); - } } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD3) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD3, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) lp->wds_port[2].rtsThreshold = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD3); - } } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD4) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD4, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) lp->wds_port[3].rtsThreshold = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD4); - } } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD5) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD5, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) lp->wds_port[4].rtsThreshold = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD5); - } } else if (strcmp(key, PARM_NAME_RTS_THRESHOLD6) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_RTS_THRESHOLD6, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) { + if ((value_convert >= PARM_MIN_RTS_THRESHOLD) && (value_convert <= PARM_MAX_RTS_THRESHOLD)) lp->wds_port[5].rtsThreshold = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_RTS_THRESHOLD6); - } } else if (strcmp(key, PARM_NAME_TX_RATE1) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE1, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) lp->wds_port[0].txRateCntl = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE1); - } } else if (strcmp(key, PARM_NAME_TX_RATE2) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE2, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) lp->wds_port[1].txRateCntl = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE2); - } } else if (strcmp(key, PARM_NAME_TX_RATE3) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE3, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) lp->wds_port[2].txRateCntl = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE3); - } } else if (strcmp(key, PARM_NAME_TX_RATE4) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE4, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) lp->wds_port[3].txRateCntl = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE4); - } } else if (strcmp(key, PARM_NAME_TX_RATE5) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE5, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) lp->wds_port[4].txRateCntl = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE5); - } } else if (strcmp(key, PARM_NAME_TX_RATE6) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_TX_RATE6, value); value_convert = simple_strtoul(value, NULL, 0); - if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) { + if ((value_convert >= PARM_MIN_TX_RATE) && (value_convert <= PARM_MAX_TX_RATE)) lp->wds_port[5].txRateCntl = value_convert; - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_TX_RATE6); - } } else if (strcmp(key, PARM_NAME_WDS_ADDRESS1) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS1, value); - if (parse_mac_address(value, mac_value) == ETH_ALEN) { + if (parse_mac_address(value, mac_value) == ETH_ALEN) memcpy(lp->wds_port[0].wdsAddress, mac_value, ETH_ALEN); - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS1); - } } else if (strcmp(key, PARM_NAME_WDS_ADDRESS2) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS2, value); - if (parse_mac_address(value, mac_value) == ETH_ALEN) { + if (parse_mac_address(value, mac_value) == ETH_ALEN) memcpy(lp->wds_port[1].wdsAddress, mac_value, ETH_ALEN); - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS2); - } } else if (strcmp(key, PARM_NAME_WDS_ADDRESS3) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS3, value); - if (parse_mac_address(value, mac_value) == ETH_ALEN) { + if (parse_mac_address(value, mac_value) == ETH_ALEN) memcpy(lp->wds_port[2].wdsAddress, mac_value, ETH_ALEN); - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS3); - } } else if (strcmp(key, PARM_NAME_WDS_ADDRESS4) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS4, value); - if (parse_mac_address(value, mac_value) == ETH_ALEN) { + if (parse_mac_address(value, mac_value) == ETH_ALEN) memcpy(lp->wds_port[3].wdsAddress, mac_value, ETH_ALEN); - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS4); - } } else if (strcmp(key, PARM_NAME_WDS_ADDRESS5) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS5, value); - if (parse_mac_address(value, mac_value) == ETH_ALEN) { + if (parse_mac_address(value, mac_value) == ETH_ALEN) memcpy(lp->wds_port[4].wdsAddress, mac_value, ETH_ALEN); - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS5); - } } else if (strcmp(key, PARM_NAME_WDS_ADDRESS6) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_WDS_ADDRESS6, value); - if (parse_mac_address(value, mac_value) == ETH_ALEN) { + if (parse_mac_address(value, mac_value) == ETH_ALEN) memcpy(lp->wds_port[5].wdsAddress, mac_value, ETH_ALEN); - } else { + else DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_WDS_ADDRESS6); - } } #endif /* USE_WDS */ } @@ -1045,12 +999,10 @@ void ParseConfigLine(char *pszLine, char **ppszLVal, char **ppszRVal) } /* make the line ending character(s) a NULL */ for (i++; i < size; i++) { - if (pszLine[i] == '\n') { + if (pszLine[i] == '\n') pszLine[i] = '\0'; - } - if ((pszLine[i] == '\r') && (pszLine[i+1] == '\n')) { + if ((pszLine[i] == '\r') && (pszLine[i+1] == '\n')) pszLine[i] = '\0'; - } } } DBG_LEAVE(DbgInfo); -- cgit v0.10.2 From e9ec36030cca2549cb656d94347dafecfcf218f6 Mon Sep 17 00:00:00 2001 From: Haiyang Zhang Date: Tue, 11 May 2010 15:11:24 +0000 Subject: staging: hv: Optimize adj_guesttime function and add more detailed comments Credits go to Joe Perches for suggesting the changes. Cc: Joe Perches Signed-off-by: Hank Janssen Signed-off-by: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c index 8f1d3ba..db45d97a 100644 --- a/drivers/staging/hv/hv_utils.c +++ b/drivers/staging/hv/hv_utils.c @@ -106,31 +106,44 @@ static void shutdown_onchannelcallback(void *context) orderly_poweroff(false); } - /* - * Synchronize time with host after reboot, restore, etc. + * Set guest time to host UTC time. */ -static void adj_guesttime(u64 hosttime, u8 flags) +static inline void do_adj_guesttime(u64 hosttime) { s64 host_tns; struct timespec host_ts; - static s32 scnt = 50; host_tns = (hosttime - WLTIMEDELTA) * 100; host_ts = ns_to_timespec(host_tns); + do_settimeofday(&host_ts); +} + +/* + * Synchronize time with host after reboot, restore, etc. + * + * ICTIMESYNCFLAG_SYNC flag bit indicates reboot, restore events of the VM. + * After reboot the flag ICTIMESYNCFLAG_SYNC is included in the first time + * message after the timesync channel is opened. Since the hv_utils module is + * loaded after hv_vmbus, the first message is usually missed. The other + * thing is, systime is automatically set to emulated hardware clock which may + * not be UTC time or in the same time zone. So, to override these effects, we + * use the first 50 time samples for initial system time setting. + */ +static inline void adj_guesttime(u64 hosttime, u8 flags) +{ + static s32 scnt = 50; + if ((flags & ICTIMESYNCFLAG_SYNC) != 0) { - do_settimeofday(&host_ts); + do_adj_guesttime(hosttime); return; } - if ((flags & ICTIMESYNCFLAG_SAMPLE) != 0 && - scnt > 0) { + if ((flags & ICTIMESYNCFLAG_SAMPLE) != 0 && scnt > 0) { scnt--; - do_settimeofday(&host_ts); + do_adj_guesttime(hosttime); } - - return; } /* -- cgit v0.10.2 From 83e13438d6adadce30de40c27e902f9a34eca0ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Sun, 9 May 2010 11:00:51 -0700 Subject: Staging: wlags49_h2*: wireless driver Kconfig update MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change the wireless drivers to depend on CONFIG_WLAN instead of CONFIG_WLAN_80211 which is gone. Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/Kconfig b/drivers/staging/wlags49_h2/Kconfig index 92053fe..b6fc2ca 100644 --- a/drivers/staging/wlags49_h2/Kconfig +++ b/drivers/staging/wlags49_h2/Kconfig @@ -1,6 +1,6 @@ config WLAGS49_H2 tristate "Agere Systems HERMES II Wireless PC Card Model 0110" - depends on WLAN_80211 && WIRELESS_EXT && PCMCIA + depends on WLAN && WIRELESS_EXT && PCMCIA select WEXT_SPY ---help--- Driver for wireless cards using Agere's HERMES II chipset diff --git a/drivers/staging/wlags49_h25/Kconfig b/drivers/staging/wlags49_h25/Kconfig index 304a8c9..dcc1709 100644 --- a/drivers/staging/wlags49_h25/Kconfig +++ b/drivers/staging/wlags49_h25/Kconfig @@ -1,6 +1,6 @@ config WLAGS49_H25 tristate "Linksys HERMES II.5 WCF54G_Wireless-G_CompactFlash_Card" - depends on WLAN_80211 && WIRELESS_EXT && PCMCIA + depends on WLAN && WIRELESS_EXT && PCMCIA select WEXT_SPY ---help--- Driver for wireless cards using Agere's HERMES II.5 chipset -- cgit v0.10.2 From 5ae8cb9525f0481025b9bc156c7a181aff7ded47 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 11 May 2010 15:51:53 -0700 Subject: Staging: wlags49: build fixes Now that the code actually gets selected in the kernel config properly, all of the build errors start showing up. This patch papers over a few of them to get the code to build, I have no idea if it actually works now or not... Cc: Henk de Groot Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/dhf.c b/drivers/staging/wlags49_h2/dhf.c index d5fb1a9..80a4707 100644 --- a/drivers/staging/wlags49_h2/dhf.c +++ b/drivers/staging/wlags49_h2/dhf.c @@ -286,14 +286,14 @@ int i; fw->signature[i+1] != (/* HCF_BIG_ENDIAN ? 'B' : */ 'L')) rc = DHF_ERR_INCOMP_FW; else { /* Little Endian Binary format */ - fw->codep = (CFG_PROG_STRCT FAR*)((PSEUDO_CHARP)fw->codep + (hcf_32)fw); - fw->identity = (CFG_IDENTITY_STRCT FAR*)((PSEUDO_CHARP)fw->identity + (hcf_32)fw); - fw->compat = (CFG_RANGE20_STRCT FAR*)((PSEUDO_CHARP)fw->compat + (hcf_32)fw); + fw->codep = (CFG_PROG_STRCT FAR*)((char *)fw->codep + (hcf_32)fw); + fw->identity = (CFG_IDENTITY_STRCT FAR*)((char *)fw->identity + (hcf_32)fw); + fw->compat = (CFG_RANGE20_STRCT FAR*)((char *)fw->compat + (hcf_32)fw); for (i = 0; fw->p[i]; i++) - fw->p[i] = ((PSEUDO_CHARP)fw->p[i] + (hcf_32)fw); + fw->p[i] = ((char *)fw->p[i] + (hcf_32)fw); p = fw->codep; while (p->len) { - p->host_addr = (PSEUDO_CHARP)p->host_addr + (hcf_32)fw; + p->host_addr = (char *)p->host_addr + (hcf_32)fw; p++; } } diff --git a/drivers/staging/wlags49_h2/wl_cs.c b/drivers/staging/wlags49_h2/wl_cs.c index 9da42e6..7c33ead 100644 --- a/drivers/staging/wlags49_h2/wl_cs.c +++ b/drivers/staging/wlags49_h2/wl_cs.c @@ -157,14 +157,14 @@ static int wl_adapter_attach(struct pcmcia_device *link) link->io.Attributes1 = IO_DATA_PATH_WIDTH_16; link->io.IOAddrLines = 6; link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; - link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID; +// link->irq.IRQInfo1 = IRQ_INFO2_VALID | IRQ_LEVEL_ID; link->irq.Handler = &wl_isr; link->conf.Attributes = CONF_ENABLE_IRQ; link->conf.IntType = INT_MEMORY_AND_IO; link->conf.ConfigIndex = 5; link->conf.Present = PRESENT_OPTION; - link->priv = link->irq.Instance = dev; + link->priv = dev; lp = wl_priv(dev); lp->link = link; @@ -317,15 +317,15 @@ void wl_adapter_insert( struct pcmcia_device *link ) /* Do we need to allocate an interrupt? */ link->conf.Attributes |= CONF_ENABLE_IRQ; - CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); - CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); - CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); +// CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); +// CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); +// CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); dev->irq = link->irq.AssignedIRQ; dev->base_addr = link->io.BasePort1; - SET_NETDEV_DEV(dev, &handle_to_dev(link)); + SET_NETDEV_DEV(dev, &link->dev); if (register_netdev(dev) != 0) { printk("%s: register_netdev() failed\n", MODULE_NAME); goto failed; @@ -345,7 +345,7 @@ void wl_adapter_insert( struct pcmcia_device *link ) cs_failed: - cs_error( link, last_fn, last_ret ); +// cs_error( link, last_fn, last_ret ); failed: -- cgit v0.10.2 From 8ff23777f02209b4c5405be292884990fac68604 Mon Sep 17 00:00:00 2001 From: Andres More Date: Sun, 9 May 2010 22:20:09 -0300 Subject: staging: vt6656: aes_ccmp.c: code cleanup, cleared checkpatch findings Resolved all warnings/errors but lines having over 80 characters. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/aes_ccmp.c b/drivers/staging/vt6656/aes_ccmp.c index a1beaa9..b3d367b 100644 --- a/drivers/staging/vt6656/aes_ccmp.c +++ b/drivers/staging/vt6656/aes_ccmp.c @@ -16,7 +16,6 @@ * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * - * * File: aes_ccmp.c * * Purpose: AES_CCMP decryption @@ -28,9 +27,7 @@ * Functions: * AESbGenCCMP - Parsing RX-packet * - * * Revision History: - * */ #include "device.h" @@ -46,62 +43,61 @@ * SBOX Table */ -BYTE sbox_table[256] = -{ -0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, -0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, -0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, -0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, -0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, -0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, -0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, -0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, -0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, -0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, -0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, -0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, -0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, -0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, -0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, -0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 +BYTE sbox_table[256] = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, + 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, + 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, + 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, + 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, + 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, + 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, + 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, + 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, + 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, + 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 }; BYTE dot2_table[256] = { -0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, -0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, -0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, -0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, -0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, -0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, -0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, -0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, -0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05, -0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25, -0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, -0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65, -0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, -0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, -0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, -0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5 + 0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e, + 0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, + 0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, + 0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, + 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, + 0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe, + 0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde, + 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe, + 0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15, 0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05, + 0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35, 0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25, + 0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55, 0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45, + 0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75, 0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65, + 0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95, 0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85, + 0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5, 0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5, + 0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5, 0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5, + 0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5, 0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5 }; BYTE dot3_table[256] = { -0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, -0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, -0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, -0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41, -0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, -0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1, -0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, -0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, -0x9b, 0x98, 0x9d, 0x9e, 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a, -0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6, 0xbf, 0xbc, 0xb9, 0xba, -0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2, 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea, -0xcb, 0xc8, 0xcd, 0xce, 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda, -0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a, -0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a, -0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a, -0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a + 0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09, 0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11, + 0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39, 0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21, + 0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69, 0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71, + 0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59, 0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41, + 0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9, 0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1, + 0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9, 0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1, + 0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9, 0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1, + 0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99, 0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81, + 0x9b, 0x98, 0x9d, 0x9e, 0x97, 0x94, 0x91, 0x92, 0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a, + 0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2, 0xb3, 0xb0, 0xb5, 0xb6, 0xbf, 0xbc, 0xb9, 0xba, + 0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2, 0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea, + 0xcb, 0xc8, 0xcd, 0xce, 0xc7, 0xc4, 0xc1, 0xc2, 0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda, + 0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52, 0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a, + 0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62, 0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a, + 0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32, 0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a, + 0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02, 0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a }; /*--------------------- Static Functions --------------------------*/ @@ -112,120 +108,111 @@ BYTE dot3_table[256] = { void xor_128(BYTE *a, BYTE *b, BYTE *out) { -PDWORD dwPtrA = (PDWORD) a; -PDWORD dwPtrB = (PDWORD) b; -PDWORD dwPtrOut =(PDWORD) out; - - (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); - (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); - (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); - (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); + PDWORD dwPtrA = (PDWORD) a; + PDWORD dwPtrB = (PDWORD) b; + PDWORD dwPtrOut = (PDWORD) out; + + (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); + (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); + (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); + (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); } void xor_32(BYTE *a, BYTE *b, BYTE *out) { -PDWORD dwPtrA = (PDWORD) a; -PDWORD dwPtrB = (PDWORD) b; -PDWORD dwPtrOut =(PDWORD) out; + PDWORD dwPtrA = (PDWORD) a; + PDWORD dwPtrB = (PDWORD) b; + PDWORD dwPtrOut = (PDWORD) out; - (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); + (*dwPtrOut++) = (*dwPtrA++) ^ (*dwPtrB++); } void AddRoundKey(BYTE *key, int round) { -BYTE sbox_key[4]; -BYTE rcon_table[10] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36}; + BYTE sbox_key[4]; + BYTE rcon_table[10] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36}; - sbox_key[0] = sbox_table[key[13]]; - sbox_key[1] = sbox_table[key[14]]; - sbox_key[2] = sbox_table[key[15]]; - sbox_key[3] = sbox_table[key[12]]; + sbox_key[0] = sbox_table[key[13]]; + sbox_key[1] = sbox_table[key[14]]; + sbox_key[2] = sbox_table[key[15]]; + sbox_key[3] = sbox_table[key[12]]; - key[0] = key[0] ^ rcon_table[round]; - xor_32(&key[0], sbox_key, &key[0]); + key[0] = key[0] ^ rcon_table[round]; + xor_32(&key[0], sbox_key, &key[0]); - xor_32(&key[4], &key[0], &key[4]); - xor_32(&key[8], &key[4], &key[8]); - xor_32(&key[12], &key[8], &key[12]); + xor_32(&key[4], &key[0], &key[4]); + xor_32(&key[8], &key[4], &key[8]); + xor_32(&key[12], &key[8], &key[12]); } void SubBytes(BYTE *in, BYTE *out) { -int i; + int i; - for (i=0; i< 16; i++) - { - out[i] = sbox_table[in[i]]; - } + for (i = 0; i < 16; i++) + out[i] = sbox_table[in[i]]; } void ShiftRows(BYTE *in, BYTE *out) { - out[0] = in[0]; - out[1] = in[5]; - out[2] = in[10]; - out[3] = in[15]; - out[4] = in[4]; - out[5] = in[9]; - out[6] = in[14]; - out[7] = in[3]; - out[8] = in[8]; - out[9] = in[13]; - out[10] = in[2]; - out[11] = in[7]; - out[12] = in[12]; - out[13] = in[1]; - out[14] = in[6]; - out[15] = in[11]; + out[0] = in[0]; + out[1] = in[5]; + out[2] = in[10]; + out[3] = in[15]; + out[4] = in[4]; + out[5] = in[9]; + out[6] = in[14]; + out[7] = in[3]; + out[8] = in[8]; + out[9] = in[13]; + out[10] = in[2]; + out[11] = in[7]; + out[12] = in[12]; + out[13] = in[1]; + out[14] = in[6]; + out[15] = in[11]; } void MixColumns(BYTE *in, BYTE *out) { - out[0] = dot2_table[in[0]] ^ dot3_table[in[1]] ^ in[2] ^ in[3]; - out[1] = in[0] ^ dot2_table[in[1]] ^ dot3_table[in[2]] ^ in[3]; - out[2] = in[0] ^ in[1] ^ dot2_table[in[2]] ^ dot3_table[in[3]]; - out[3] = dot3_table[in[0]] ^ in[1] ^ in[2] ^ dot2_table[in[3]]; + out[0] = dot2_table[in[0]] ^ dot3_table[in[1]] ^ in[2] ^ in[3]; + out[1] = in[0] ^ dot2_table[in[1]] ^ dot3_table[in[2]] ^ in[3]; + out[2] = in[0] ^ in[1] ^ dot2_table[in[2]] ^ dot3_table[in[3]]; + out[3] = dot3_table[in[0]] ^ in[1] ^ in[2] ^ dot2_table[in[3]]; } - void AESv128(BYTE *key, BYTE *data, BYTE *ciphertext) { -int i; -int round; -BYTE TmpdataA[16]; -BYTE TmpdataB[16]; -BYTE abyRoundKey[16]; - - for(i=0; i<16; i++) - abyRoundKey[i] = key[i]; - - for (round = 0; round < 11; round++) - { - if (round == 0) - { - xor_128(abyRoundKey, data, ciphertext); - AddRoundKey(abyRoundKey, round); - } - else if (round == 10) - { - SubBytes(ciphertext, TmpdataA); - ShiftRows(TmpdataA, TmpdataB); - xor_128(TmpdataB, abyRoundKey, ciphertext); - } - else // round 1 ~ 9 - { - SubBytes(ciphertext, TmpdataA); - ShiftRows(TmpdataA, TmpdataB); - MixColumns(&TmpdataB[0], &TmpdataA[0]); - MixColumns(&TmpdataB[4], &TmpdataA[4]); - MixColumns(&TmpdataB[8], &TmpdataA[8]); - MixColumns(&TmpdataB[12], &TmpdataA[12]); - xor_128(TmpdataA, abyRoundKey, ciphertext); - AddRoundKey(abyRoundKey, round); - } - } + int i; + int round; + BYTE TmpdataA[16]; + BYTE TmpdataB[16]; + BYTE abyRoundKey[16]; + + for (i = 0; i < 16; i++) + abyRoundKey[i] = key[i]; + + for (round = 0; round < 11; round++) { + if (round == 0) { + xor_128(abyRoundKey, data, ciphertext); + AddRoundKey(abyRoundKey, round); + } else if (round == 10) { + SubBytes(ciphertext, TmpdataA); + ShiftRows(TmpdataA, TmpdataB); + xor_128(TmpdataB, abyRoundKey, ciphertext); + } else { /* round 1 ~ 9 */ + SubBytes(ciphertext, TmpdataA); + ShiftRows(TmpdataA, TmpdataB); + MixColumns(&TmpdataB[0], &TmpdataA[0]); + MixColumns(&TmpdataB[4], &TmpdataA[4]); + MixColumns(&TmpdataB[8], &TmpdataA[8]); + MixColumns(&TmpdataB[12], &TmpdataA[12]); + xor_128(TmpdataA, abyRoundKey, ciphertext); + AddRoundKey(abyRoundKey, round); + } + } } @@ -243,161 +230,157 @@ BYTE abyRoundKey[16]; * Return Value: MIC compare result * */ + BOOL AESbGenCCMP(PBYTE pbyRxKey, PBYTE pbyFrame, WORD wFrameSize) { -BYTE abyNonce[13]; -BYTE MIC_IV[16]; -BYTE MIC_HDR1[16]; -BYTE MIC_HDR2[16]; -BYTE abyMIC[16]; -BYTE abyCTRPLD[16]; -BYTE abyTmp[16]; -BYTE abyPlainText[16]; -BYTE abyLastCipher[16]; - -PS802_11Header pMACHeader = (PS802_11Header) pbyFrame; -PBYTE pbyIV; -PBYTE pbyPayload; -WORD wHLen = 22; -WORD wPayloadSize = wFrameSize - 8 - 8 - 4 - WLAN_HDR_ADDR3_LEN;//8 is IV, 8 is MIC, 4 is CRC -BOOL bA4 = FALSE; -BYTE byTmp; -WORD wCnt; -int ii,jj,kk; - - - pbyIV = pbyFrame + WLAN_HDR_ADDR3_LEN; - if ( WLAN_GET_FC_TODS(*(PWORD)pbyFrame) && - WLAN_GET_FC_FROMDS(*(PWORD)pbyFrame) ) { - bA4 = TRUE; - pbyIV += 6; // 6 is 802.11 address4 - wHLen += 6; - wPayloadSize -= 6; - } - pbyPayload = pbyIV + 8; //IV-length - - abyNonce[0] = 0x00; //now is 0, if Qos here will be priority - memcpy(&(abyNonce[1]), pMACHeader->abyAddr2, ETH_ALEN); - abyNonce[7] = pbyIV[7]; - abyNonce[8] = pbyIV[6]; - abyNonce[9] = pbyIV[5]; - abyNonce[10] = pbyIV[4]; - abyNonce[11] = pbyIV[1]; - abyNonce[12] = pbyIV[0]; - - //MIC_IV - MIC_IV[0] = 0x59; - memcpy(&(MIC_IV[1]), &(abyNonce[0]), 13); - MIC_IV[14] = (BYTE)(wPayloadSize >> 8); - MIC_IV[15] = (BYTE)(wPayloadSize & 0xff); - - //MIC_HDR1 - MIC_HDR1[0] = (BYTE)(wHLen >> 8); - MIC_HDR1[1] = (BYTE)(wHLen & 0xff); - byTmp = (BYTE)(pMACHeader->wFrameCtl & 0xff); - MIC_HDR1[2] = byTmp & 0x8f; - byTmp = (BYTE)(pMACHeader->wFrameCtl >> 8); - byTmp &= 0x87; - MIC_HDR1[3] = byTmp | 0x40; - memcpy(&(MIC_HDR1[4]), pMACHeader->abyAddr1, ETH_ALEN); - memcpy(&(MIC_HDR1[10]), pMACHeader->abyAddr2, ETH_ALEN); - - //MIC_HDR2 - memcpy(&(MIC_HDR2[0]), pMACHeader->abyAddr3, ETH_ALEN); - byTmp = (BYTE)(pMACHeader->wSeqCtl & 0xff); - MIC_HDR2[6] = byTmp & 0x0f; - MIC_HDR2[7] = 0; - - if ( bA4 ) { + BYTE abyNonce[13]; + BYTE MIC_IV[16]; + BYTE MIC_HDR1[16]; + BYTE MIC_HDR2[16]; + BYTE abyMIC[16]; + BYTE abyCTRPLD[16]; + BYTE abyTmp[16]; + BYTE abyPlainText[16]; + BYTE abyLastCipher[16]; + + PS802_11Header pMACHeader = (PS802_11Header) pbyFrame; + PBYTE pbyIV; + PBYTE pbyPayload; + WORD wHLen = 22; + /* 8 is IV, 8 is MIC, 4 is CRC */ + WORD wPayloadSize = wFrameSize - 8 - 8 - 4 - WLAN_HDR_ADDR3_LEN; + BOOL bA4 = FALSE; + BYTE byTmp; + WORD wCnt; + int ii, jj, kk; + + pbyIV = pbyFrame + WLAN_HDR_ADDR3_LEN; + if (WLAN_GET_FC_TODS(*(PWORD) pbyFrame) && + WLAN_GET_FC_FROMDS(*(PWORD) pbyFrame)) { + bA4 = TRUE; + pbyIV += 6; /* 6 is 802.11 address4 */ + wHLen += 6; + wPayloadSize -= 6; + } + pbyPayload = pbyIV + 8; /* IV-length */ + + abyNonce[0] = 0x00; /* now is 0, if Qos here will be priority */ + memcpy(&(abyNonce[1]), pMACHeader->abyAddr2, ETH_ALEN); + abyNonce[7] = pbyIV[7]; + abyNonce[8] = pbyIV[6]; + abyNonce[9] = pbyIV[5]; + abyNonce[10] = pbyIV[4]; + abyNonce[11] = pbyIV[1]; + abyNonce[12] = pbyIV[0]; + + /* MIC_IV */ + MIC_IV[0] = 0x59; + memcpy(&(MIC_IV[1]), &(abyNonce[0]), 13); + MIC_IV[14] = (BYTE)(wPayloadSize >> 8); + MIC_IV[15] = (BYTE)(wPayloadSize & 0xff); + + /* MIC_HDR1 */ + MIC_HDR1[0] = (BYTE)(wHLen >> 8); + MIC_HDR1[1] = (BYTE)(wHLen & 0xff); + byTmp = (BYTE)(pMACHeader->wFrameCtl & 0xff); + MIC_HDR1[2] = byTmp & 0x8f; + byTmp = (BYTE)(pMACHeader->wFrameCtl >> 8); + byTmp &= 0x87; + MIC_HDR1[3] = byTmp | 0x40; + memcpy(&(MIC_HDR1[4]), pMACHeader->abyAddr1, ETH_ALEN); + memcpy(&(MIC_HDR1[10]), pMACHeader->abyAddr2, ETH_ALEN); + + /* MIC_HDR2 */ + memcpy(&(MIC_HDR2[0]), pMACHeader->abyAddr3, ETH_ALEN); + byTmp = (BYTE)(pMACHeader->wSeqCtl & 0xff); + MIC_HDR2[6] = byTmp & 0x0f; + MIC_HDR2[7] = 0; + + if (bA4) { memcpy(&(MIC_HDR2[8]), pMACHeader->abyAddr4, ETH_ALEN); - } else { - MIC_HDR2[8] = 0x00; - MIC_HDR2[9] = 0x00; - MIC_HDR2[10] = 0x00; - MIC_HDR2[11] = 0x00; - MIC_HDR2[12] = 0x00; - MIC_HDR2[13] = 0x00; - } - MIC_HDR2[14] = 0x00; - MIC_HDR2[15] = 0x00; - - //CCMP - AESv128(pbyRxKey,MIC_IV,abyMIC); - for ( kk=0; kk<16; kk++ ) { - abyTmp[kk] = MIC_HDR1[kk] ^ abyMIC[kk]; - } - AESv128(pbyRxKey,abyTmp,abyMIC); - for ( kk=0; kk<16; kk++ ) { - abyTmp[kk] = MIC_HDR2[kk] ^ abyMIC[kk]; - } - AESv128(pbyRxKey,abyTmp,abyMIC); - - wCnt = 1; - abyCTRPLD[0] = 0x01; - memcpy(&(abyCTRPLD[1]), &(abyNonce[0]), 13); - - for(jj=wPayloadSize; jj>16; jj=jj-16) { - - abyCTRPLD[14] = (BYTE) (wCnt >> 8); - abyCTRPLD[15] = (BYTE) (wCnt & 0xff); - - AESv128(pbyRxKey,abyCTRPLD,abyTmp); - - for ( kk=0; kk<16; kk++ ) { - abyPlainText[kk] = abyTmp[kk] ^ pbyPayload[kk]; - } - for ( kk=0; kk<16; kk++ ) { - abyTmp[kk] = abyMIC[kk] ^ abyPlainText[kk]; - } - AESv128(pbyRxKey,abyTmp,abyMIC); - - memcpy(pbyPayload, abyPlainText, 16); - wCnt++; - pbyPayload += 16; - } //for wPayloadSize - - //last payload - memcpy(&(abyLastCipher[0]), pbyPayload, jj); - for ( ii=jj; ii<16; ii++ ) { - abyLastCipher[ii] = 0x00; - } - - abyCTRPLD[14] = (BYTE) (wCnt >> 8); - abyCTRPLD[15] = (BYTE) (wCnt & 0xff); - - AESv128(pbyRxKey,abyCTRPLD,abyTmp); - for ( kk=0; kk<16; kk++ ) { - abyPlainText[kk] = abyTmp[kk] ^ abyLastCipher[kk]; - } - memcpy(pbyPayload, abyPlainText, jj); - pbyPayload += jj; - - //for MIC calculation - for ( ii=jj; ii<16; ii++ ) { - abyPlainText[ii] = 0x00; - } - for ( kk=0; kk<16; kk++ ) { - abyTmp[kk] = abyMIC[kk] ^ abyPlainText[kk]; - } - AESv128(pbyRxKey,abyTmp,abyMIC); - - //=>above is the calculate MIC - //-------------------------------------------- - - wCnt = 0; - abyCTRPLD[14] = (BYTE) (wCnt >> 8); - abyCTRPLD[15] = (BYTE) (wCnt & 0xff); - AESv128(pbyRxKey,abyCTRPLD,abyTmp); - for ( kk=0; kk<8; kk++ ) { - abyTmp[kk] = abyTmp[kk] ^ pbyPayload[kk]; - } - //=>above is the dec-MIC from packet - //-------------------------------------------- - - if ( !memcmp(abyMIC,abyTmp,8) ) { - return TRUE; - } else { - return FALSE; - } + } else { + MIC_HDR2[8] = 0x00; + MIC_HDR2[9] = 0x00; + MIC_HDR2[10] = 0x00; + MIC_HDR2[11] = 0x00; + MIC_HDR2[12] = 0x00; + MIC_HDR2[13] = 0x00; + } + MIC_HDR2[14] = 0x00; + MIC_HDR2[15] = 0x00; + + /* CCMP */ + AESv128(pbyRxKey, MIC_IV, abyMIC); + for (kk = 0; kk < 16; kk++) + abyTmp[kk] = MIC_HDR1[kk] ^ abyMIC[kk]; + + AESv128(pbyRxKey, abyTmp, abyMIC); + for (kk = 0; kk < 16; kk++) + abyTmp[kk] = MIC_HDR2[kk] ^ abyMIC[kk]; + + AESv128(pbyRxKey, abyTmp, abyMIC); + + wCnt = 1; + abyCTRPLD[0] = 0x01; + memcpy(&(abyCTRPLD[1]), &(abyNonce[0]), 13); + + for (jj = wPayloadSize; jj > 16; jj = jj-16) { + + abyCTRPLD[14] = (BYTE) (wCnt >> 8); + abyCTRPLD[15] = (BYTE) (wCnt & 0xff); + + AESv128(pbyRxKey, abyCTRPLD, abyTmp); + + for (kk = 0; kk < 16; kk++) + abyPlainText[kk] = abyTmp[kk] ^ pbyPayload[kk]; + + for (kk = 0; kk < 16; kk++) + abyTmp[kk] = abyMIC[kk] ^ abyPlainText[kk]; + + AESv128(pbyRxKey, abyTmp, abyMIC); + + memcpy(pbyPayload, abyPlainText, 16); + wCnt++; + pbyPayload += 16; + } /* for wPayloadSize */ + + /* last payload */ + memcpy(&(abyLastCipher[0]), pbyPayload, jj); + for (ii = jj; ii < 16; ii++) + abyLastCipher[ii] = 0x00; + + abyCTRPLD[14] = (BYTE) (wCnt >> 8); + abyCTRPLD[15] = (BYTE) (wCnt & 0xff); + + AESv128(pbyRxKey, abyCTRPLD, abyTmp); + for (kk = 0; kk < 16; kk++) + abyPlainText[kk] = abyTmp[kk] ^ abyLastCipher[kk]; + + memcpy(pbyPayload, abyPlainText, jj); + pbyPayload += jj; + + /* for MIC calculation */ + for (ii = jj; ii < 16; ii++) + abyPlainText[ii] = 0x00; + for (kk = 0; kk < 16; kk++) + abyTmp[kk] = abyMIC[kk] ^ abyPlainText[kk]; + + AESv128(pbyRxKey, abyTmp, abyMIC); + + /* => above is the calculated MIC */ + + wCnt = 0; + abyCTRPLD[14] = (BYTE) (wCnt >> 8); + abyCTRPLD[15] = (BYTE) (wCnt & 0xff); + AESv128(pbyRxKey, abyCTRPLD, abyTmp); + + for (kk = 0; kk < 8; kk++) + abyTmp[kk] = abyTmp[kk] ^ pbyPayload[kk]; + + /* => above is the packet dec-MIC */ + if (!memcmp(abyMIC, abyTmp, 8)) + return TRUE; + else + return FALSE; } -- cgit v0.10.2 From f65515275ea3e45fdcd0fb78455f542d6fdca086 Mon Sep 17 00:00:00 2001 From: Larry Finger Date: Sun, 9 May 2010 22:10:02 -0500 Subject: staging: vt6655: Fix kernel BUG on driver wpa initialization In http://bugzilla.novell.com/show_bug.cgi?id=597299, the vt6655 driver generates a kernel BUG on a NULL pointer dereference at NULL. This problem has been traced to a failure in the wpa_set_wpadev() routine. As the vt6656 driver does not call this routine, the vt6655 code is similarly set to skip the call. Signed-off-by: Larry Finger Tested-by: Richard Meek Cc: Stable Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 8a63a03..7020ed4 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -1091,11 +1091,13 @@ device_found1(struct pci_dev *pcid, const struct pci_device_id *ent) } //2008-07-21-01by MikeLiu //register wpadev +#if 0 if(wpa_set_wpadev(pDevice, 1)!=0) { printk("Fail to Register WPADEV?\n"); unregister_netdev(pDevice->dev); free_netdev(dev); } +#endif device_print_info(pDevice); pci_set_drvdata(pcid, pDevice); return 0; -- cgit v0.10.2 From a9560a72759c6208c4072a30fb45aac7c6c014d4 Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 10 May 2010 17:56:05 +0800 Subject: Staging: comedi: Fixed long line lengths in comedi.h This patch fixes quite a few long line lengths in comedi.h as reported by checkpatch.pl Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index 20a6fee..1538146 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -156,15 +156,15 @@ #define TRIG_ANY 0xffffffff #define TRIG_INVALID 0x00000000 -#define TRIG_NONE 0x00000001 /* never trigger */ -#define TRIG_NOW 0x00000002 /* trigger now + N ns */ -#define TRIG_FOLLOW 0x00000004 /* trigger on next lower level trig */ -#define TRIG_TIME 0x00000008 /* trigger at time N ns */ -#define TRIG_TIMER 0x00000010 /* trigger at rate N ns */ -#define TRIG_COUNT 0x00000020 /* trigger when count reaches N */ -#define TRIG_EXT 0x00000040 /* trigger on external signal N */ -#define TRIG_INT 0x00000080 /* trigger on comedi-internal signal N */ -#define TRIG_OTHER 0x00000100 /* driver defined */ +#define TRIG_NONE 0x00000001 /* never trigger */ +#define TRIG_NOW 0x00000002 /* trigger now + N ns */ +#define TRIG_FOLLOW 0x00000004 /* trigger on next lower level trig */ +#define TRIG_TIME 0x00000008 /* trigger at time N ns */ +#define TRIG_TIMER 0x00000010 /* trigger at rate N ns */ +#define TRIG_COUNT 0x00000020 /* trigger when count reaches N */ +#define TRIG_EXT 0x00000040 /* trigger on external signal N */ +#define TRIG_INT 0x00000080 /* trigger on comedi-internal signal N */ +#define TRIG_OTHER 0x00000100 /* driver defined */ /* subdevice flags */ @@ -181,14 +181,17 @@ #define SDF_MODE3 0x0400 /* can do mode 3 */ #define SDF_MODE4 0x0800 /* can do mode 4 */ #define SDF_CMD 0x1000 /* can do commands (deprecated) */ -#define SDF_SOFT_CALIBRATED 0x2000 /* subdevice uses software calibration */ -#define SDF_CMD_WRITE 0x4000 /* can do output commands */ -#define SDF_CMD_READ 0x8000 /* can do input commands */ - -#define SDF_READABLE 0x00010000 /* subdevice can be read (e.g. analog input) */ -#define SDF_WRITABLE 0x00020000 /* subdevice can be written (e.g. analog output) */ +#define SDF_SOFT_CALIBRATED 0x2000 /* subdevice uses software calibration */ +#define SDF_CMD_WRITE 0x4000 /* can do output commands */ +#define SDF_CMD_READ 0x8000 /* can do input commands */ + +/* subdevice can be read (e.g. analog input) */ +#define SDF_READABLE 0x00010000 +/* subdevice can be written (e.g. analog output) */ +#define SDF_WRITABLE 0x00020000 #define SDF_WRITEABLE SDF_WRITABLE /* spelling error in API */ -#define SDF_INTERNAL 0x00040000 /* subdevice does not have externally visible lines */ +/* subdevice does not have externally visible lines */ +#define SDF_INTERNAL 0x00040000 #define SDF_GROUND 0x00100000 /* can do aref=ground */ #define SDF_COMMON 0x00200000 /* can do aref=common */ #define SDF_DIFF 0x00400000 /* can do aref=diff */ @@ -255,15 +258,14 @@ INSN_CONFIG_GPCT_QUADRATURE_ENCODER = 1003, INSN_CONFIG_SET_GATE_SRC = 2001, /* Set gate source */ INSN_CONFIG_GET_GATE_SRC = 2002, /* Get gate source */ - INSN_CONFIG_SET_CLOCK_SRC = 2003, /* Set master clock source */ - INSN_CONFIG_GET_CLOCK_SRC = 2004, /* Get master clock source */ - INSN_CONFIG_SET_OTHER_SRC = 2005, /* Set other source */ + /* Set master clock source */ + INSN_CONFIG_SET_CLOCK_SRC = 2003, + INSN_CONFIG_GET_CLOCK_SRC = 2004, /* Get master clock source */ + INSN_CONFIG_SET_OTHER_SRC = 2005, /* Set other source */ /* INSN_CONFIG_GET_OTHER_SRC = 2006,*//* Get other source */ - INSN_CONFIG_GET_HARDWARE_BUFFER_SIZE = 2006, /* Get size in bytes of - subdevice's on-board - fifos used during - streaming - input/output */ + /* Get size in bytes of subdevice's on-board fifos used during + * streaming input/output */ + INSN_CONFIG_GET_HARDWARE_BUFFER_SIZE = 2006, INSN_CONFIG_SET_COUNTER_MODE = 4097, INSN_CONFIG_8254_SET_MODE = INSN_CONFIG_SET_COUNTER_MODE, /* deprecated */ INSN_CONFIG_8254_READ_STATUS = 4098, @@ -273,8 +275,11 @@ INSN_CONFIG_PWM_SET_PERIOD = 5000, /* sets frequency */ INSN_CONFIG_PWM_GET_PERIOD = 5001, /* gets frequency */ INSN_CONFIG_GET_PWM_STATUS = 5002, /* is it running? */ - INSN_CONFIG_PWM_SET_H_BRIDGE = 5003, /* sets H bridge: duty cycle and sign bit for a relay at the same time */ - INSN_CONFIG_PWM_GET_H_BRIDGE = 5004 /* gets H bridge data: duty cycle and the sign bit */ + /* sets H bridge: duty cycle and sign bit for a relay at the + * same time */ + INSN_CONFIG_PWM_SET_H_BRIDGE = 5003, + /* gets H bridge data: duty cycle and the sign bit */ + INSN_CONFIG_PWM_GET_H_BRIDGE = 5004 }; enum comedi_io_direction { @@ -362,7 +367,7 @@ unsigned int __user *chanlist; /* channel/range list */ unsigned int chanlist_len; - short __user *data; /* data list, size depends on subd flags */ + short __user *data; /* data list, size depends on subd flags */ unsigned int data_len; }; @@ -395,7 +400,8 @@ unsigned int flags; /* channel flags */ unsigned int range_type; /* lookup in kernel */ unsigned int settling_time_0; - unsigned insn_bits_support; /* see support_level enum for values */ + /* see support_level enum for values */ + unsigned insn_bits_support; unsigned int unused[8]; }; -- cgit v0.10.2 From 801de52358abc9f42ee6291dae2425bca04228d6 Mon Sep 17 00:00:00 2001 From: "Prashant P. Shah" Date: Mon, 10 May 2010 22:18:24 +0530 Subject: Staging: wlags49_h2: fixed C99 comments style issues in wl_profile.c This is a patch to the wl_profile.c file that fixes the C99 comments style issues found by the checkpatch.pl tool. Signed-off-by: Prashant P. Shah Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/wl_profile.c b/drivers/staging/wlags49_h2/wl_profile.c index 13ade70..292d579 100644 --- a/drivers/staging/wlags49_h2/wl_profile.c +++ b/drivers/staging/wlags49_h2/wl_profile.c @@ -91,7 +91,7 @@ #include #include -//#include +/* #include */ #include #include @@ -118,17 +118,17 @@ int parse_yes_no(char *value); int parse_yes_no(char *value) { -int rc = 0; //default to NO for invalid parameters +int rc = 0; /* default to NO for invalid parameters */ if (strlen(value) == 1) { if ((value[0] | ('Y'^'y')) == 'y') rc = 1; -// } else { -// this should not be debug time info, it is an enduser data entry error ;? -// DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MICROWAVE_ROBUSTNESS); + /* } else { */ + /* this should not be debug time info, it is an enduser data entry error ;? */ + /* DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_MICROWAVE_ROBUSTNESS); */ } return rc; -} // parse_yes_no +} /* parse_yes_no */ /******************************************************************************* @@ -154,10 +154,10 @@ int rc = 0; //default to NO for invalid parameters void parse_config(struct net_device *dev) { int file_desc; -#if 0 // BIN_DL +#if 0 /* BIN_DL */ int rc; char *cp = NULL; -#endif // BIN_DL +#endif /* BIN_DL */ char buffer[MAX_LINE_SIZE]; char filename[MAX_LINE_SIZE]; mm_segment_t fs; @@ -192,7 +192,7 @@ void parse_config(struct net_device *dev) while (readline(file_desc, buffer)) translate_option(buffer, wvlan_config); /* Close the file */ - close(file_desc); //;?even if file_desc == -1 ??? + close(file_desc); /* ;?even if file_desc == -1 ??? */ } else { DBG_TRACE(DbgInfo, "No iwconfig file found for this device; " "config.opts or wireless.opts will be used\n"); @@ -235,19 +235,19 @@ void parse_config(struct net_device *dev) memcpy(&wvlan_config->DefaultKeys, &sEncryption.EncStr, sizeof(CFG_DEFAULT_KEYS_STRCT)); -#if 0 //BIN_DL +#if 0 /* BIN_DL */ /* Obtain a user-space process context, storing the original context */ fs = get_fs(); set_fs(get_ds()); - //;?just to fake something + /* ;?just to fake something */ strcpy(/*wvlan_config->fw_image_*/filename, "/etc/agere/fw.bin"); file_desc = open(/*wvlan_config->fw_image_*/filename, 0, 0); if (file_desc == -1) { DBG_ERROR(DbgInfo, "No image file found\n"); } else { DBG_TRACE(DbgInfo, "F/W image file found\n"); -#define DHF_ALLOC_SIZE 96000 //just below 96K, let's hope it suffices for now and for the future +#define DHF_ALLOC_SIZE 96000 /* just below 96K, let's hope it suffices for now and for the future */ cp = (char *)vmalloc(DHF_ALLOC_SIZE); if (cp == NULL) { DBG_ERROR(DbgInfo, "error in vmalloc\n"); @@ -270,11 +270,11 @@ void parse_config(struct net_device *dev) close(file_desc); } set_fs(fs); /* Return to the original context */ -#endif // BIN_DL +#endif /* BIN_DL */ DBG_LEAVE(DbgInfo); return; -} // parse_config +} /* parse_config */ /******************************************************************************* * readline() @@ -322,7 +322,7 @@ int readline(int filedesc, char *buffer) return result; else return bytes_read; -} // readline +} /* readline */ /*============================================================================*/ /******************************************************************************* @@ -381,9 +381,9 @@ void translate_option(char *buffer, struct wl_private *lp) DbgInfo->DebugFlag |= DBG_DEFAULTS; } } else { - DbgInfo->DebugFlag = simple_strtoul(value, NULL, 0); //;?DebugFlag; + DbgInfo->DebugFlag = simple_strtoul(value, NULL, 0); /* ;?DebugFlag; */ } - DbgInfo->DebugFlag = simple_strtoul(value, NULL, 0); //;?Delete ASAP + DbgInfo->DebugFlag = simple_strtoul(value, NULL, 0); /* ;?Delete ASAP */ } #endif /* DBG */ if (strcmp(key, PARM_NAME_AUTH_KEY_MGMT_SUITE) == 0) { @@ -602,10 +602,10 @@ void translate_option(char *buffer, struct wl_private *lp) /* Need to add? : Country code, Short/Long retry */ /* Configuration parameters specific to STA mode */ -#if 1 //;? (HCF_TYPE) & HCF_TYPE_STA -//;?seems reasonable that even an AP-only driver could afford this small additional footprint +#if 1 /* ;? (HCF_TYPE) & HCF_TYPE_STA */ +/* ;?seems reasonable that even an AP-only driver could afford this small additional footprint */ if (CNV_INT_TO_LITTLE(lp->hcfCtx.IFB_FWIdentity.comp_id) == COMP_ID_FW_STA) { - //;?should we return an error status in AP mode + /* ;?should we return an error status in AP mode */ if (strcmp(key, PARM_NAME_PORT_TYPE) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_PORT_TYPE, value); @@ -625,7 +625,7 @@ void translate_option(char *buffer, struct wl_private *lp) lp->PMEnabled = value_convert; } else { DBG_WARNING(DbgInfo, "%s invalid; will be ignored\n", PARM_NAME_PM_ENABLED); - //;?this is a data entry error, hence not a DBG_WARNING + /* ;?this is a data entry error, hence not a DBG_WARNING */ } } else if (strcmp(key, PARM_NAME_CREATE_IBSS) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_CREATE_IBSS, value); @@ -690,8 +690,8 @@ void translate_option(char *buffer, struct wl_private *lp) #endif /* (HCF_TYPE) & HCF_TYPE_STA */ /* Configuration parameters specific to AP mode */ -#if 1 //;? (HCF_TYPE) & HCF_TYPE_AP - //;?should we restore this to allow smaller memory footprint +#if 1 /* ;? (HCF_TYPE) & HCF_TYPE_AP */ + /* ;?should we restore this to allow smaller memory footprint */ if (CNV_INT_TO_LITTLE(lp->hcfCtx.IFB_FWIdentity.comp_id) == COMP_ID_FW_AP) { if (strcmp(key, PARM_NAME_OWN_DTIM_PERIOD) == 0) { DBG_TRACE(DbgInfo, "%s, value: %s\n", PARM_NAME_OWN_DTIM_PERIOD, value); @@ -876,7 +876,7 @@ void translate_option(char *buffer, struct wl_private *lp) #endif /* (HCF_TYPE) & HCF_TYPE_AP */ return; -} // translate_option +} /* translate_option */ /*============================================================================*/ /******************************************************************************* @@ -932,7 +932,7 @@ int parse_mac_address(char *value, u_char *byte_array) /* Use the array_offset as a check; 6 bytes should be written to the byte_array */ return array_offset; -} // parse_mac_address +} /* parse_mac_address */ /*============================================================================*/ /******************************************************************************* @@ -1006,7 +1006,7 @@ void ParseConfigLine(char *pszLine, char **ppszLVal, char **ppszRVal) } } DBG_LEAVE(DbgInfo); -} // ParseConfigLine +} /* ParseConfigLine */ /*============================================================================*/ -#endif // USE_PROFILE +#endif /* USE_PROFILE */ -- cgit v0.10.2 From 3041f30672b50a482154f554c82404e98eb41133 Mon Sep 17 00:00:00 2001 From: Randy Dunlap Date: Mon, 10 May 2010 10:53:04 -0700 Subject: staging: memrar depends on RAR_REGISTER Alan said that memrar should depend on RAR_REGISTER (instead of selecting it). Signed-off-by: Randy Dunlap Cc: Ossama Othman Cc: Alan Cox Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/memrar/Kconfig b/drivers/staging/memrar/Kconfig index a5598a8..cbeebc5 100644 --- a/drivers/staging/memrar/Kconfig +++ b/drivers/staging/memrar/Kconfig @@ -1,6 +1,6 @@ config MRST_RAR_HANDLER tristate "RAR handler driver for Intel Moorestown platform" - select RAR_REGISTER + depends on RAR_REGISTER ---help--- This driver provides a memory management interface to restricted access regions (RAR) available on the Intel -- cgit v0.10.2 From a05d08c40c0775e4691cffcfbfceeb4270987208 Mon Sep 17 00:00:00 2001 From: Zachary Richey Date: Tue, 11 May 2010 14:16:41 -0400 Subject: Staging: wlan-ng: Fixed non static functions in prism2fw.c Fixed non static functions in prism2fw.c Signed-off-by: Zachary Richey Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/prism2fw.c b/drivers/staging/wlan-ng/prism2fw.c index d383ea8..fc2d8f4 100644 --- a/drivers/staging/wlan-ng/prism2fw.c +++ b/drivers/staging/wlan-ng/prism2fw.c @@ -160,21 +160,30 @@ hfa384x_caplevel_t priid; /*================================================================*/ /* Local Function Declarations */ -int prism2_fwapply(const struct ihex_binrec *rfptr, wlandevice_t *wlandev); -int read_fwfile(const struct ihex_binrec *rfptr); -int mkimage(imgchunk_t *clist, unsigned int *ccnt); -int read_cardpda(pda_t *pda, wlandevice_t *wlandev); -int mkpdrlist(pda_t *pda); -int plugimage(imgchunk_t *fchunk, unsigned int nfchunks, +static int prism2_fwapply(const struct ihex_binrec *rfptr, +wlandevice_t *wlandev); + +static int read_fwfile(const struct ihex_binrec *rfptr); + +static int mkimage(imgchunk_t *clist, unsigned int *ccnt); + +static int read_cardpda(pda_t *pda, wlandevice_t *wlandev); + +static int mkpdrlist(pda_t *pda); + +static int plugimage(imgchunk_t *fchunk, unsigned int nfchunks, s3plugrec_t *s3plug, unsigned int ns3plug, pda_t * pda); -int crcimage(imgchunk_t *fchunk, unsigned int nfchunks, + +static int crcimage(imgchunk_t *fchunk, unsigned int nfchunks, s3crcrec_t *s3crc, unsigned int ns3crc); -int writeimage(wlandevice_t *wlandev, imgchunk_t *fchunk, + +static int writeimage(wlandevice_t *wlandev, imgchunk_t *fchunk, unsigned int nfchunks); -void free_chunks(imgchunk_t *fchunk, unsigned int *nfchunks); -void free_srecs(void); +static void free_chunks(imgchunk_t *fchunk, unsigned int *nfchunks); + +static void free_srecs(void); -int validate_identity(void); +static int validate_identity(void); /*================================================================*/ /* Function Definitions */ @@ -255,7 +264,7 @@ int prism2_fwapply(const struct ihex_binrec *rfptr, wlandevice_t *wlandev) /* clear the pda and add an initial END record */ memset(&pda, 0, sizeof(pda)); pda.rec[0] = (hfa384x_pdrec_t *) pda.buf; - pda.rec[0]->len = cpu_to_le16(2); /* len in words *//* len in words */ + pda.rec[0]->len = cpu_to_le16(2); /* len in words */ pda.rec[0]->code = cpu_to_le16(HFA384x_PDR_END_OF_PDA); pda.nrec = 1; -- cgit v0.10.2 From 324148788bf3744d90fb6894ec5744eb0ca91b74 Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Tue, 11 May 2010 20:26:57 +0200 Subject: Staging: Drop memory allocation cast Drop cast on the result of kmalloc and similar functions. The semantic patch that makes this change is as follows: (http://coccinelle.lip6.fr/) // @@ type T; @@ - (T *) (\(kmalloc\|kzalloc\|kcalloc\|kmem_cache_alloc\|kmem_cache_zalloc\| kmem_cache_alloc_node\|kmalloc_node\|kzalloc_node\)(...)) // Signed-off-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/unioxx5.c b/drivers/staging/comedi/drivers/unioxx5.c index be1d83d..16d4c9f 100644 --- a/drivers/staging/comedi/drivers/unioxx5.c +++ b/drivers/staging/comedi/drivers/unioxx5.c @@ -285,7 +285,7 @@ static int __unioxx5_subdev_init(struct comedi_subdevice *subdev, return -EIO; } - usp = (struct unioxx5_subd_priv *)kzalloc(sizeof(*usp), GFP_KERNEL); + usp = kzalloc(sizeof(*usp), GFP_KERNEL); if (usp == NULL) { printk(KERN_ERR "comedi%d: erorr! --> out of memory!\n", minor); diff --git a/drivers/staging/crystalhd/crystalhd_misc.c b/drivers/staging/crystalhd/crystalhd_misc.c index d134667..548dc09 100644 --- a/drivers/staging/crystalhd/crystalhd_misc.c +++ b/drivers/staging/crystalhd/crystalhd_misc.c @@ -887,7 +887,7 @@ int crystalhd_create_dio_pool(struct crystalhd_adp *adp, uint32_t max_pages) BC_LINK_SG_POOL_SZ, max_pages, asz, adp->fill_byte_pool); for (i = 0; i < BC_LINK_SG_POOL_SZ; i++) { - temp = (uint8_t *)kzalloc(asz, GFP_KERNEL); + temp = kzalloc(asz, GFP_KERNEL); if ((temp) == NULL) { BCMLOG_ERR("Failed to alloc %d mem\n", asz); return -ENOMEM; diff --git a/drivers/staging/cx25821/cx25821-audio-upstream.c b/drivers/staging/cx25821/cx25821-audio-upstream.c index 11c56bd..4c7d21e 100644 --- a/drivers/staging/cx25821/cx25821-audio-upstream.c +++ b/drivers/staging/cx25821/cx25821-audio-upstream.c @@ -751,8 +751,7 @@ int cx25821_audio_upstream_init(struct cx25821_dev *dev, int channel_select) if (dev->input_audiofilename) { str_length = strlen(dev->input_audiofilename); - dev->_audiofilename = - (char *)kmalloc(str_length + 1, GFP_KERNEL); + dev->_audiofilename = kmalloc(str_length + 1, GFP_KERNEL); if (!dev->_audiofilename) goto error; @@ -766,8 +765,7 @@ int cx25821_audio_upstream_init(struct cx25821_dev *dev, int channel_select) } } else { str_length = strlen(_defaultAudioName); - dev->_audiofilename = - (char *)kmalloc(str_length + 1, GFP_KERNEL); + dev->_audiofilename = kmalloc(str_length + 1, GFP_KERNEL); if (!dev->_audiofilename) goto error; diff --git a/drivers/staging/cx25821/cx25821-video-upstream-ch2.c b/drivers/staging/cx25821/cx25821-video-upstream-ch2.c index cc51618..343df66 100644 --- a/drivers/staging/cx25821/cx25821-video-upstream-ch2.c +++ b/drivers/staging/cx25821/cx25821-video-upstream-ch2.c @@ -769,8 +769,7 @@ int cx25821_vidupstream_init_ch2(struct cx25821_dev *dev, int channel_select, if (dev->input_filename_ch2) { str_length = strlen(dev->input_filename_ch2); - dev->_filename_ch2 = - (char *)kmalloc(str_length + 1, GFP_KERNEL); + dev->_filename_ch2 = kmalloc(str_length + 1, GFP_KERNEL); if (!dev->_filename_ch2) goto error; @@ -779,8 +778,7 @@ int cx25821_vidupstream_init_ch2(struct cx25821_dev *dev, int channel_select, str_length + 1); } else { str_length = strlen(dev->_defaultname_ch2); - dev->_filename_ch2 = - (char *)kmalloc(str_length + 1, GFP_KERNEL); + dev->_filename_ch2 = kmalloc(str_length + 1, GFP_KERNEL); if (!dev->_filename_ch2) goto error; diff --git a/drivers/staging/cx25821/cx25821-video-upstream.c b/drivers/staging/cx25821/cx25821-video-upstream.c index 6d48a1e..fdd94cf 100644 --- a/drivers/staging/cx25821/cx25821-video-upstream.c +++ b/drivers/staging/cx25821/cx25821-video-upstream.c @@ -825,7 +825,7 @@ int cx25821_vidupstream_init_ch1(struct cx25821_dev *dev, int channel_select, if (dev->input_filename) { str_length = strlen(dev->input_filename); - dev->_filename = (char *)kmalloc(str_length + 1, GFP_KERNEL); + dev->_filename = kmalloc(str_length + 1, GFP_KERNEL); if (!dev->_filename) goto error; @@ -833,7 +833,7 @@ int cx25821_vidupstream_init_ch1(struct cx25821_dev *dev, int channel_select, memcpy(dev->_filename, dev->input_filename, str_length + 1); } else { str_length = strlen(dev->_defaultname); - dev->_filename = (char *)kmalloc(str_length + 1, GFP_KERNEL); + dev->_filename = kmalloc(str_length + 1, GFP_KERNEL); if (!dev->_filename) goto error; diff --git a/drivers/staging/et131x/et1310_rx.c b/drivers/staging/et131x/et1310_rx.c index 8f5dceb..8e04bdd 100644 --- a/drivers/staging/et131x/et1310_rx.c +++ b/drivers/staging/et131x/et1310_rx.c @@ -547,7 +547,7 @@ int et131x_init_recv(struct et131x_adapter *adapter) /* Setup each RFD */ for (rfdct = 0; rfdct < rx_ring->NumRfd; rfdct++) { - rfd = (MP_RFD *) kmem_cache_alloc(rx_ring->RecvLookaside, + rfd = kmem_cache_alloc(rx_ring->RecvLookaside, GFP_ATOMIC | GFP_DMA); if (!rfd) { diff --git a/drivers/staging/et131x/et1310_tx.c b/drivers/staging/et131x/et1310_tx.c index b6ff20f..0f3473d 100644 --- a/drivers/staging/et131x/et1310_tx.c +++ b/drivers/staging/et131x/et1310_tx.c @@ -112,7 +112,7 @@ int et131x_tx_dma_memory_alloc(struct et131x_adapter *adapter) struct tx_ring *tx_ring = &adapter->tx_ring; /* Allocate memory for the TCB's (Transmit Control Block) */ - adapter->tx_ring.tcb_ring = (struct tcb *) + adapter->tx_ring.tcb_ring = kcalloc(NUM_TCB, sizeof(struct tcb), GFP_ATOMIC | GFP_DMA); if (!adapter->tx_ring.tcb_ring) { dev_err(&adapter->pdev->dev, "Cannot alloc memory for TCBs\n"); diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c index 65b00e6..93a5347 100644 --- a/drivers/staging/rt2860/common/cmm_data.c +++ b/drivers/staging/rt2860/common/cmm_data.c @@ -1424,7 +1424,7 @@ u32 deaggregate_AMSDU_announce(struct rt_rtmp_adapter *pAd, if ((Header802_3[12] == 0x88) && (Header802_3[13] == 0x8E)) { /* avoid local heap overflow, use dyanamic allocation */ struct rt_mlme_queue_elem *Elem = - (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + kmalloc(sizeof(struct rt_mlme_queue_elem), MEM_ALLOC_FLAG); if (Elem != NULL) { memmove(Elem->Msg + diff --git a/drivers/staging/rt2860/common/cmm_mac_pci.c b/drivers/staging/rt2860/common/cmm_mac_pci.c index 560ebd3..e26ba49 100644 --- a/drivers/staging/rt2860/common/cmm_mac_pci.c +++ b/drivers/staging/rt2860/common/cmm_mac_pci.c @@ -1558,7 +1558,7 @@ void RT28xxPciMlmeRadioOFF(struct rt_rtmp_adapter *pAd) if (INFRA_ON(pAd) || ADHOC_ON(pAd)) { struct rt_mlme_disassoc_req DisReq; struct rt_mlme_queue_elem *pMsgElem = - (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + kmalloc(sizeof(struct rt_mlme_queue_elem), MEM_ALLOC_FLAG); if (pMsgElem) { diff --git a/drivers/staging/rt2860/common/cmm_mac_usb.c b/drivers/staging/rt2860/common/cmm_mac_usb.c index 9dd6959..8aec70f 100644 --- a/drivers/staging/rt2860/common/cmm_mac_usb.c +++ b/drivers/staging/rt2860/common/cmm_mac_usb.c @@ -1087,7 +1087,7 @@ void RT28xxUsbMlmeRadioOFF(struct rt_rtmp_adapter *pAd) if (INFRA_ON(pAd) || ADHOC_ON(pAd)) { struct rt_mlme_disassoc_req DisReq; struct rt_mlme_queue_elem *pMsgElem = - (struct rt_mlme_queue_elem *)kmalloc(sizeof(struct rt_mlme_queue_elem), + kmalloc(sizeof(struct rt_mlme_queue_elem), MEM_ALLOC_FLAG); if (pMsgElem) { diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c index 27b7810..0029b2d 100644 --- a/drivers/staging/rt2860/rt_linux.c +++ b/drivers/staging/rt2860/rt_linux.c @@ -154,7 +154,7 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time) /* pAd MUST allow to be NULL */ int os_alloc_mem(struct rt_rtmp_adapter *pAd, u8 ** mem, unsigned long size) { - *mem = (u8 *)kmalloc(size, GFP_ATOMIC); + *mem = kmalloc(size, GFP_ATOMIC); if (*mem) return NDIS_STATUS_SUCCESS; else diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c index e099a5f..b7426fe 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c @@ -1435,7 +1435,7 @@ static inline u16 auth_parse(struct sk_buff *skb, u8** challenge, int *chlen) if(*(t++) == MFIE_TYPE_CHALLENGE){ *chlen = *(t++); - *challenge = (u8*)kmalloc(*chlen, GFP_ATOMIC); + *challenge = kmalloc(*chlen, GFP_ATOMIC); memcpy(*challenge, t, *chlen); } } @@ -2861,8 +2861,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ieee80211_crypt_delayed_deinit(ieee, crypt); - new_crypt = (struct ieee80211_crypt_data *) - kmalloc(sizeof(*new_crypt), GFP_KERNEL); + new_crypt = kmalloc(sizeof(*new_crypt), GFP_KERNEL); if (new_crypt == NULL) { ret = -ENOMEM; goto done; @@ -2953,7 +2952,7 @@ int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_poin goto out; } - param = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); + param = kmalloc(p->length, GFP_KERNEL); if (param == NULL){ ret = -ENOMEM; goto out; diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c index f43a7db..c7aa1c6 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c @@ -170,7 +170,7 @@ struct net_device *alloc_ieee80211(int sizeof_priv) ieee80211_softmac_init(ieee); #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13)) - ieee->pHTInfo = (RT_HIGH_THROUGHPUT*)kzalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL); + ieee->pHTInfo = kzalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL); #else ieee->pHTInfo = (RT_HIGH_THROUGHPUT*)kmalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL); memset(ieee->pHTInfo,0,sizeof(RT_HIGH_THROUGHPUT)); diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_rx.c index ce265ae..da10067 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_rx.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_rx.c @@ -1397,7 +1397,7 @@ int ieee80211_rtl_rx(struct ieee80211_device *ieee, struct sk_buff *skb, /* skb: hdr + (possible reassembled) full plaintext payload */ payload = skb->data + hdrlen; //ethertype = (payload[6] << 8) | payload[7]; - rxb = (struct ieee80211_rxb*)kmalloc(sizeof(struct ieee80211_rxb),GFP_ATOMIC); + rxb = kmalloc(sizeof(struct ieee80211_rxb), GFP_ATOMIC); if(rxb == NULL) { IEEE80211_DEBUG(IEEE80211_DL_ERR,"%s(): kmalloc rxb error\n",__FUNCTION__); diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c index b4beb20..4f6ce06 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c @@ -1800,7 +1800,7 @@ static inline u16 auth_parse(struct sk_buff *skb, u8** challenge, int *chlen) if(*(t++) == MFIE_TYPE_CHALLENGE){ *chlen = *(t++); - *challenge = (u8*)kmalloc(*chlen, GFP_ATOMIC); + *challenge = kmalloc(*chlen, GFP_ATOMIC); memcpy(*challenge, t, *chlen); } } @@ -3459,8 +3459,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ieee80211_crypt_delayed_deinit(ieee, crypt); - new_crypt = (struct ieee80211_crypt_data *) - kmalloc(sizeof(*new_crypt), GFP_KERNEL); + new_crypt = kmalloc(sizeof(*new_crypt), GFP_KERNEL); if (new_crypt == NULL) { ret = -ENOMEM; goto done; @@ -3592,7 +3591,7 @@ int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_poin goto out; } - param = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); + param = kmalloc(p->length, GFP_KERNEL); if (param == NULL){ ret = -ENOMEM; goto out; diff --git a/drivers/staging/rtl8192e/r8192E_core.c b/drivers/staging/rtl8192e/r8192E_core.c index 604c691..533be48 100644 --- a/drivers/staging/rtl8192e/r8192E_core.c +++ b/drivers/staging/rtl8192e/r8192E_core.c @@ -5040,7 +5040,7 @@ static int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) goto out; } - ipw = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); + ipw = kmalloc(p->length, GFP_KERNEL); if (ipw == NULL){ ret = -ENOMEM; goto out; diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_module.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_module.c index c024fa6..73de3ba 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_module.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_module.c @@ -161,7 +161,7 @@ struct net_device *alloc_ieee80211(int sizeof_priv) ieee80211_softmac_init(ieee); - ieee->pHTInfo = (RT_HIGH_THROUGHPUT*)kzalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL); + ieee->pHTInfo = kzalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL); if (ieee->pHTInfo == NULL) { IEEE80211_DEBUG(IEEE80211_DL_ERR, "can't alloc memory for HTInfo\n"); diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_rx.c index cc80faf..1f2bc7a 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_rx.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_rx.c @@ -1191,7 +1191,7 @@ int ieee80211_rtl_rx(struct ieee80211_device *ieee, struct sk_buff *skb, /* skb: hdr + (possible reassembled) full plaintext payload */ payload = skb->data + hdrlen; //ethertype = (payload[6] << 8) | payload[7]; - rxb = (struct ieee80211_rxb*)kmalloc(sizeof(struct ieee80211_rxb),GFP_ATOMIC); + rxb = kmalloc(sizeof(struct ieee80211_rxb), GFP_ATOMIC); if(rxb == NULL) { IEEE80211_DEBUG(IEEE80211_DL_ERR,"%s(): kmalloc rxb error\n",__FUNCTION__); diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c index 3cf5fdf..660aee2 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c @@ -1557,7 +1557,7 @@ static inline u16 auth_parse(struct sk_buff *skb, u8** challenge, int *chlen) if(*(t++) == MFIE_TYPE_CHALLENGE){ *chlen = *(t++); - *challenge = (u8*)kmalloc(*chlen, GFP_ATOMIC); + *challenge = kmalloc(*chlen, GFP_ATOMIC); memcpy(*challenge, t, *chlen); } } @@ -3048,8 +3048,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ieee80211_crypt_delayed_deinit(ieee, crypt); - new_crypt = (struct ieee80211_crypt_data *) - kmalloc(sizeof(*new_crypt), GFP_KERNEL); + new_crypt = kmalloc(sizeof(*new_crypt), GFP_KERNEL); if (new_crypt == NULL) { ret = -ENOMEM; goto done; @@ -3182,7 +3181,7 @@ int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_poin goto out; } - param = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); + param = kmalloc(p->length, GFP_KERNEL); if (param == NULL){ ret = -ENOMEM; goto out; diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index d372ff2..70a8087 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -5747,7 +5747,7 @@ int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) goto out; } - ipw = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); + ipw = kmalloc(p->length, GFP_KERNEL); if (ipw == NULL){ ret = -ENOMEM; goto out; diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c index b752017..1111002 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c @@ -161,7 +161,7 @@ struct net_device *alloc_ieee80211(int sizeof_priv) ieee80211_softmac_init(ieee); - ieee->pHTInfo = (RT_HIGH_THROUGHPUT*)kzalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL); + ieee->pHTInfo = kzalloc(sizeof(RT_HIGH_THROUGHPUT), GFP_KERNEL); if (ieee->pHTInfo == NULL) { IEEE80211_DEBUG(IEEE80211_DL_ERR, "can't alloc memory for HTInfo\n"); diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c index 7e9b367..192123f 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_rx.c @@ -1302,7 +1302,7 @@ int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, /* skb: hdr + (possible reassembled) full plaintext payload */ payload = skb->data + hdrlen; //ethertype = (payload[6] << 8) | payload[7]; - rxb = (struct ieee80211_rxb*)kmalloc(sizeof(struct ieee80211_rxb),GFP_ATOMIC); + rxb = kmalloc(sizeof(struct ieee80211_rxb), GFP_ATOMIC); if(rxb == NULL) { IEEE80211_DEBUG(IEEE80211_DL_ERR,"%s(): kmalloc rxb error\n",__FUNCTION__); diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c index e5e583e..6c6bf9f 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c @@ -1579,7 +1579,7 @@ static inline u16 auth_parse(struct sk_buff *skb, u8** challenge, int *chlen) if(*(t++) == MFIE_TYPE_CHALLENGE){ *chlen = *(t++); - *challenge = (u8*)kmalloc(*chlen, GFP_ATOMIC); + *challenge = kmalloc(*chlen, GFP_ATOMIC); if (!*challenge) return -ENOMEM; memcpy(*challenge, t, *chlen); @@ -3077,8 +3077,7 @@ static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, ieee80211_crypt_delayed_deinit(ieee, crypt); - new_crypt = (struct ieee80211_crypt_data *) - kmalloc(sizeof(*new_crypt), GFP_KERNEL); + new_crypt = kmalloc(sizeof(*new_crypt), GFP_KERNEL); if (new_crypt == NULL) { ret = -ENOMEM; goto done; @@ -3210,7 +3209,7 @@ int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_poin goto out; } - param = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); + param = kmalloc(p->length, GFP_KERNEL); if (param == NULL){ ret = -ENOMEM; goto out; diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index 68ebb02..cbbc7d3 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -2216,7 +2216,8 @@ short rtl8192_usb_initendpoints(struct net_device *dev) { struct r8192_priv *priv = ieee80211_priv(dev); - priv->rx_urb = (struct urb**) kmalloc (sizeof(struct urb*) * (MAX_RX_URB+1), GFP_KERNEL); + priv->rx_urb = kmalloc(sizeof(struct urb *) * (MAX_RX_URB+1), + GFP_KERNEL); #ifndef JACKSON_NEW_RX for(i=0;i<(MAX_RX_URB+1);i++){ @@ -2250,7 +2251,8 @@ short rtl8192_usb_initendpoints(struct net_device *dev) #endif memset(priv->rx_urb, 0, sizeof(struct urb*) * MAX_RX_URB); - priv->pp_rxskb = (struct sk_buff **)kmalloc(sizeof(struct sk_buff *) * MAX_RX_URB, GFP_KERNEL); + priv->pp_rxskb = kmalloc(sizeof(struct sk_buff *) * MAX_RX_URB, + GFP_KERNEL); if (priv->pp_rxskb == NULL) goto destroy; @@ -2839,7 +2841,7 @@ static void rtl8192_init_priv_variable(struct net_device* dev) (priv->EarlyRxThreshold == 7 ? RCR_ONLYERLPKT:0); priv->AcmControl = 0; - priv->pFirmware = (rt_firmware*)kmalloc(sizeof(rt_firmware), GFP_KERNEL); + priv->pFirmware = kmalloc(sizeof(rt_firmware), GFP_KERNEL); if (priv->pFirmware) memset(priv->pFirmware, 0, sizeof(rt_firmware)); @@ -4415,7 +4417,7 @@ int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) goto out; } - ipw = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); + ipw = kmalloc(p->length, GFP_KERNEL); if (ipw == NULL){ ret = -ENOMEM; goto out; diff --git a/drivers/staging/vme/bridges/vme_ca91cx42.c b/drivers/staging/vme/bridges/vme_ca91cx42.c index b9f986b..c35dead 100644 --- a/drivers/staging/vme/bridges/vme_ca91cx42.c +++ b/drivers/staging/vme/bridges/vme_ca91cx42.c @@ -941,8 +941,7 @@ int ca91cx42_dma_list_add(struct vme_dma_list *list, struct vme_dma_attr *src, dev = list->parent->parent->parent; /* XXX descriptor must be aligned on 64-bit boundaries */ - entry = (struct ca91cx42_dma_entry *) - kmalloc(sizeof(struct ca91cx42_dma_entry), GFP_KERNEL); + entry = kmalloc(sizeof(struct ca91cx42_dma_entry), GFP_KERNEL); if (entry == NULL) { dev_err(dev, "Failed to allocate memory for dma resource " "structure\n"); diff --git a/drivers/staging/vme/bridges/vme_tsi148.c b/drivers/staging/vme/bridges/vme_tsi148.c index 25987d4..7539cce 100644 --- a/drivers/staging/vme/bridges/vme_tsi148.c +++ b/drivers/staging/vme/bridges/vme_tsi148.c @@ -2309,7 +2309,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) if (err_chk) { master_num--; - tsi148_device->flush_image = (struct vme_master_resource *) + tsi148_device->flush_image = kmalloc(sizeof(struct vme_master_resource), GFP_KERNEL); if (tsi148_device->flush_image == NULL) { dev_err(&pdev->dev, "Failed to allocate memory for " diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 7020ed4..f690fc2 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -3025,7 +3025,7 @@ int Config_FileOperation(PSDevice pDevice,BOOL fwrite,unsigned char *Parameter) goto error1; } -buffer = (UCHAR *)kmalloc(1024, GFP_KERNEL); +buffer = kmalloc(1024, GFP_KERNEL); if(buffer==NULL) { printk("alllocate mem for file fail?\n"); result = -1; diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c index 9e07a40..fb7775c 100644 --- a/drivers/staging/vt6655/hostap.c +++ b/drivers/staging/vt6655/hostap.c @@ -90,7 +90,7 @@ static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name); - pDevice->apdev = (struct net_device *)kmalloc(sizeof(struct net_device), GFP_KERNEL); + pDevice->apdev = kmalloc(sizeof(struct net_device), GFP_KERNEL); if (pDevice->apdev == NULL) return -ENOMEM; memset(pDevice->apdev, 0, sizeof(struct net_device)); @@ -768,7 +768,7 @@ int vt6655_hostap_ioctl(PSDevice pDevice, struct iw_point *p) p->length > VIAWGET_HOSTAPD_MAX_BUF_SIZE || !p->pointer) return -EINVAL; - param = (struct viawget_hostapd_param *) kmalloc((int)p->length, (int)GFP_KERNEL); + param = kmalloc((int)p->length, (int)GFP_KERNEL); if (param == NULL) return -ENOMEM; diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c index 574e0b0..4e886c1 100644 --- a/drivers/staging/vt6655/wpactl.c +++ b/drivers/staging/vt6655/wpactl.c @@ -905,7 +905,7 @@ int wpa_ioctl(PSDevice pDevice, struct iw_point *p) p->length > VIAWGET_WPA_MAX_BUF_SIZE || !p->pointer) return -EINVAL; - param = (struct viawget_wpa_param *) kmalloc((int)p->length, (int)GFP_KERNEL); + param = kmalloc((int)p->length, (int)GFP_KERNEL); if (param == NULL) return -ENOMEM; diff --git a/drivers/staging/vt6656/hostap.c b/drivers/staging/vt6656/hostap.c index ca007c3..4438631 100644 --- a/drivers/staging/vt6656/hostap.c +++ b/drivers/staging/vt6656/hostap.c @@ -91,7 +91,7 @@ static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name); - pDevice->apdev = (struct net_device *)kmalloc(sizeof(struct net_device), GFP_KERNEL); + pDevice->apdev = kmalloc(sizeof(struct net_device), GFP_KERNEL); if (pDevice->apdev == NULL) return -ENOMEM; memset(pDevice->apdev, 0, sizeof(struct net_device)); @@ -766,7 +766,7 @@ int vt6656_hostap_ioctl(PSDevice pDevice, struct iw_point *p) p->length > VIAWGET_HOSTAPD_MAX_BUF_SIZE || !p->pointer) return -EINVAL; - param = (struct viawget_hostapd_param *) kmalloc((int)p->length, (int)GFP_KERNEL); + param = kmalloc((int)p->length, (int)GFP_KERNEL); if (param == NULL) return -ENOMEM; diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index f1d81b1..e4dc27d 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -1511,7 +1511,7 @@ static UCHAR *Config_FileOperation(PSDevice pDevice) { goto error1; } - buffer = (UCHAR *)kmalloc(1024, GFP_KERNEL); + buffer = kmalloc(1024, GFP_KERNEL); if(buffer==NULL) { printk("alllocate mem for file fail?\n"); result = -1; diff --git a/drivers/staging/vt6656/wpactl.c b/drivers/staging/vt6656/wpactl.c index 04a4875e..8f7ad2c 100644 --- a/drivers/staging/vt6656/wpactl.c +++ b/drivers/staging/vt6656/wpactl.c @@ -926,7 +926,7 @@ int wpa_ioctl(PSDevice pDevice, struct iw_point *p) p->length > VIAWGET_WPA_MAX_BUF_SIZE || !p->pointer) return -EINVAL; - param = (struct viawget_wpa_param *) kmalloc((int)p->length, (int)GFP_KERNEL); + param = kmalloc((int)p->length, (int)GFP_KERNEL); if (param == NULL) return -ENOMEM; diff --git a/drivers/staging/wlags49_h2/wl_priv.c b/drivers/staging/wlags49_h2/wl_priv.c index a67ff52..f2bfd30 100644 --- a/drivers/staging/wlags49_h2/wl_priv.c +++ b/drivers/staging/wlags49_h2/wl_priv.c @@ -618,7 +618,7 @@ int wvlan_uil_put_info( struct uilreq *urq, struct wl_private *lp ) LTV record, try to allocate it from the kernel stack. Otherwise, we just use our local LTV record. */ if( urq->len > sizeof( lp->ltvRecord )) { - pLtv = (ltv_t *)kmalloc( urq->len, GFP_KERNEL ); + pLtv = kmalloc(urq->len, GFP_KERNEL); if (pLtv != NULL) { ltvAllocated = TRUE; } else { @@ -1298,7 +1298,7 @@ int wvlan_uil_get_info( struct uilreq *urq, struct wl_private *lp ) LTV record, try to allocate it from the kernel stack. Otherwise, we just use our local LTV record. */ if( urq->len > sizeof( lp->ltvRecord )) { - pLtv = (ltv_t *)kmalloc( urq->len, GFP_KERNEL ); + pLtv = kmalloc(urq->len, GFP_KERNEL); if (pLtv != NULL) { ltvAllocated = TRUE; -- cgit v0.10.2 From 6593dfacd3320c4f5fefd6e307ea5c6e9c5dac4f Mon Sep 17 00:00:00 2001 From: Andres More Date: Tue, 11 May 2010 17:29:43 -0300 Subject: staging: vt6656: card.h: code cleanup, resolved checkpatch findings Cleared all findings but a couple of 'do not add new typedefs' warnings. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 770ee6a..963c8ad 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -33,30 +33,27 @@ /*--------------------- Export Definitions -------------------------*/ - /*--------------------- Export Classes ----------------------------*/ -// Init card type +/* init card type */ typedef enum _CARD_PHY_TYPE { - - PHY_TYPE_AUTO=0, + PHY_TYPE_AUTO = 0, PHY_TYPE_11B, PHY_TYPE_11G, PHY_TYPE_11A } CARD_PHY_TYPE, *PCARD_PHY_TYPE; typedef enum _CARD_OP_MODE { - - OP_MODE_INFRASTRUCTURE=0, + OP_MODE_INFRASTRUCTURE = 0, OP_MODE_ADHOC, OP_MODE_AP, OP_MODE_UNKNOWN } CARD_OP_MODE, *PCARD_OP_MODE; #define CB_MAX_CHANNEL_24G 14 -//#define CB_MAX_CHANNEL_5G 24 -#define CB_MAX_CHANNEL_5G 42 //[20050104] add channel9(5045MHz), 41==>42 +/* #define CB_MAX_CHANNEL_5G 24 */ +#define CB_MAX_CHANNEL_5G 42 /* add channel9(5045MHz), 41==>42 */ #define CB_MAX_CHANNEL (CB_MAX_CHANNEL_24G+CB_MAX_CHANNEL_5G) /*--------------------- Export Variables --------------------------*/ @@ -83,12 +80,9 @@ BOOL CARDbRadioPowerOn(void *pDeviceHandler); BYTE CARDbyGetPktType(void *pDeviceHandler); void CARDvSetBSSMode(void *pDeviceHandler); -BOOL -CARDbChannelSwitch ( - void *pDeviceHandler, - BYTE byMode, - BYTE byNewChannel, - BYTE byCount - ); +BOOL CARDbChannelSwitch(void *pDeviceHandler, + BYTE byMode, + BYTE byNewChannel, + BYTE byCount); #endif /* __CARD_H__ */ -- cgit v0.10.2 From 94c1f90bb0bac8c2b75569a247b89145022c4c24 Mon Sep 17 00:00:00 2001 From: Morgan Gatti Date: Tue, 11 May 2010 23:55:53 +0200 Subject: Staging: comedi: Fix bug and coding style issue in usbdux.c This is a patch to the usbdux.c file that resolve 2 errors in coding and fix the warning about lengt of code lines Signed-off-by: Morgan Gatti Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c index 8942ae4..df71515 100644 --- a/drivers/staging/comedi/drivers/usbdux.c +++ b/drivers/staging/comedi/drivers/usbdux.c @@ -793,7 +793,7 @@ static int usbduxsub_stop(struct usbduxsub *usbduxsub) } static int usbduxsub_upload(struct usbduxsub *usbduxsub, - uint8_t * local_transfer_buffer, + uint8_t *local_transfer_buffer, unsigned int startAddr, unsigned int len) { int errcode; @@ -825,7 +825,7 @@ static int usbduxsub_upload(struct usbduxsub *usbduxsub, #define FIRMWARE_MAX_LEN 0x2000 static int firmwareUpload(struct usbduxsub *usbduxsub, - const u8 * firmwareBinary, int sizeFirmware) + const u8 *firmwareBinary, int sizeFirmware) { int ret; uint8_t *fwBuf; @@ -835,7 +835,7 @@ static int firmwareUpload(struct usbduxsub *usbduxsub, if (sizeFirmware > FIRMWARE_MAX_LEN) { dev_err(&usbduxsub->interface->dev, - "comedi_: usbdux firmware binary it too large for FX2.\n"); + "usbdux firmware binary it too large for FX2.\n"); return -ENOMEM; } @@ -1264,8 +1264,8 @@ static int usbdux_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) (this_usbduxsub->ai_interval) * 2; } this_usbduxsub->ai_timer = cmd->scan_begin_arg / (125000 * - (this_usbduxsub-> - ai_interval)); + (this_usbduxsub-> + ai_interval)); } else { /* interval always 1ms */ this_usbduxsub->ai_interval = 1; -- cgit v0.10.2 From 06e719d80ff900973cddffa84fc2d7620c69a236 Mon Sep 17 00:00:00 2001 From: "K. Y. Srinivasan" Date: Fri, 7 May 2010 17:52:17 -0600 Subject: Staging: hv: auto-load MSFT PV NIC driver Signed-off-by: K. Y. Srinivasan Cc: Hank Janssen Cc: Haiyang Zhang Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/netvsc_drv.c b/drivers/staging/hv/netvsc_drv.c index 30c946c..1bda240 100644 --- a/drivers/staging/hv/netvsc_drv.c +++ b/drivers/staging/hv/netvsc_drv.c @@ -30,6 +30,8 @@ #include #include #include +#include +#include #include #include #include @@ -551,6 +553,20 @@ static int netvsc_drv_init(int (*drv_init)(struct hv_driver *drv)) return ret; } +static const struct dmi_system_id __initconst +hv_netvsc_dmi_table[] __maybe_unused = { + { + .ident = "Hyper-V", + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), + DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"), + DMI_MATCH(DMI_BOARD_NAME, "Virtual Machine"), + }, + }, + { }, +}; +MODULE_DEVICE_TABLE(dmi, hv_netvsc_dmi_table); + static int __init netvsc_init(void) { int ret; @@ -558,6 +574,9 @@ static int __init netvsc_init(void) DPRINT_ENTER(NETVSC_DRV); DPRINT_INFO(NETVSC_DRV, "Netvsc initializing...."); + if (!dmi_check_system(hv_netvsc_dmi_table)) + return -ENODEV; + ret = netvsc_drv_init(NetVscInitialize); DPRINT_EXIT(NETVSC_DRV); @@ -572,6 +591,13 @@ static void __exit netvsc_exit(void) DPRINT_EXIT(NETVSC_DRV); } +static const struct pci_device_id __initconst +hv_netvsc_pci_table[] __maybe_unused = { + { PCI_DEVICE(0x1414, 0x5353) }, /* VGA compatible controller */ + { 0 } +}; +MODULE_DEVICE_TABLE(pci, hv_netvsc_pci_table); + MODULE_LICENSE("GPL"); MODULE_VERSION(HV_DRV_VERSION); MODULE_DESCRIPTION("Microsoft Hyper-V network driver"); -- cgit v0.10.2 From 83d4b7eb5f319d8c6d8586586cb1d9c0d1a80532 Mon Sep 17 00:00:00 2001 From: "Paul E. McKenney" Date: Tue, 11 May 2010 16:33:01 -0700 Subject: staging: batman: remove all rcu head initializations Remove all rcu head inits. We don't care about the RCU head state before passing it to call_rcu() anyway. Only leave the "on_stack" variants so debugobjects can keep track of objects on stack. Signed-off-by: Mathieu Desnoyers Signed-off-by: Paul E. McKenney Cc: Andrew Lunn Cc: Simon Wunderlich Cc: Marek Lindner Cc: Sven Eckelmann Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/batman-adv/hard-interface.c b/drivers/staging/batman-adv/hard-interface.c index 0d1d101..7a582e8 100644 --- a/drivers/staging/batman-adv/hard-interface.c +++ b/drivers/staging/batman-adv/hard-interface.c @@ -340,7 +340,6 @@ static struct batman_if *hardif_add_interface(struct net_device *net_dev) batman_if->if_num = -1; batman_if->net_dev = net_dev; batman_if->if_status = IF_NOT_IN_USE; - INIT_RCU_HEAD(&batman_if->rcu); INIT_LIST_HEAD(&batman_if->list); check_known_mac_addr(batman_if->net_dev->dev_addr); -- cgit v0.10.2 From 935e99fb0739aa64d0dd7e8a0bc82faec5d8f830 Mon Sep 17 00:00:00 2001 From: Anand Gadiyar Date: Wed, 12 May 2010 13:03:13 +0530 Subject: staging: trivial: fix typo "seperate" s/seperate/separate Signed-off-by: Anand Gadiyar Cc: Jiri Kosina Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/das08.h b/drivers/staging/comedi/drivers/das08.h index 35d2660..2a30d76 100644 --- a/drivers/staging/comedi/drivers/das08.h +++ b/drivers/staging/comedi/drivers/das08.h @@ -62,7 +62,7 @@ struct i8254_struct { #define I8254_CTRL 3 struct das08_private_struct { - unsigned int do_mux_bits; /* bits for do/mux register on boards without seperate do register */ + unsigned int do_mux_bits; /* bits for do/mux register on boards without separate do register */ unsigned int do_bits; /* bits for do register on boards with register dedicated to digital out only */ const unsigned int *pg_gainlist; struct pci_dev *pdev; /* struct for pci-das08 */ diff --git a/drivers/staging/dream/camera/msm_vfe8x_proc.c b/drivers/staging/dream/camera/msm_vfe8x_proc.c index 10aef0e..f80ef96 100644 --- a/drivers/staging/dream/camera/msm_vfe8x_proc.c +++ b/drivers/staging/dream/camera/msm_vfe8x_proc.c @@ -3828,7 +3828,7 @@ void vfe_camif_config(struct vfe_cmd_camif_config *in) ctrl->vfeImaskLocal.camifEpoch2Irq = 1; } - /* save the content to program CAMIF_CONFIG seperately. */ + /* save the content to program CAMIF_CONFIG separately. */ ctrl->vfeCamifConfigLocal.camifCfgFromCmd = in->camifConfig; /* EFS_Config */ diff --git a/drivers/staging/echo/echo.c b/drivers/staging/echo/echo.c index 4cc4f2e..58c4e90 100644 --- a/drivers/staging/echo/echo.c +++ b/drivers/staging/echo/echo.c @@ -603,7 +603,7 @@ int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx) } EXPORT_SYMBOL_GPL(oslec_update); -/* This function is seperated from the echo canceller is it is usually called +/* This function is separated from the echo canceller is it is usually called as part of the tx process. See rx HP (DC blocking) filter above, it's the same design. diff --git a/drivers/staging/rt2860/mlme.h b/drivers/staging/rt2860/mlme.h index 1143413..99c9362 100644 --- a/drivers/staging/rt2860/mlme.h +++ b/drivers/staging/rt2860/mlme.h @@ -322,7 +322,7 @@ struct rt_trigger_eventa { u8 BSSID[6]; u8 RegClass; /* Regulatory Class */ u16 Channel; - unsigned long CDCounter; /* Maintain a seperate count down counter for each Event A. */ + unsigned long CDCounter; /* Maintain a separate count down counter for each Event A. */ }; /* 20/40 trigger event table */ diff --git a/drivers/staging/rtl8192e/ieee80211.h b/drivers/staging/rtl8192e/ieee80211.h index c39249e..e1f03d7 100644 --- a/drivers/staging/rtl8192e/ieee80211.h +++ b/drivers/staging/rtl8192e/ieee80211.h @@ -1846,7 +1846,7 @@ struct ieee80211_device { spinlock_t bw_spinlock; spinlock_t reorder_spinlock; - // for HT operation rate set. we use this one for HT data rate to seperate different descriptors + // for HT operation rate set. we use this one for HT data rate to separate different descriptors //the way fill this is the same as in the IE u8 Regdot11HTOperationalRateSet[16]; //use RATR format u8 dot11HTOperationalRateSet[16]; //use RATR format diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211.h b/drivers/staging/rtl8192e/ieee80211/ieee80211.h index 1f613a2..50728f6 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211.h +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211.h @@ -2067,7 +2067,7 @@ struct ieee80211_device { spinlock_t bw_spinlock; spinlock_t reorder_spinlock; - // for HT operation rate set. we use this one for HT data rate to seperate different descriptors + // for HT operation rate set. we use this one for HT data rate to separate different descriptors //the way fill this is the same as in the IE u8 Regdot11HTOperationalRateSet[16]; //use RATR format u8 dot11HTOperationalRateSet[16]; //use RATR format diff --git a/drivers/staging/rtl8192e/r8190_rtl8256.c b/drivers/staging/rtl8192e/r8190_rtl8256.c index 1bd054d..7391f5f 100644 --- a/drivers/staging/rtl8192e/r8190_rtl8256.c +++ b/drivers/staging/rtl8192e/r8190_rtl8256.c @@ -802,7 +802,7 @@ MgntDisconnectIBSS( case RT_OP_MODE_IBSS: btMsr |= MSR_LINK_ADHOC; - // led link set seperate + // led link set separate break; case RT_OP_MODE_AP: @@ -885,7 +885,7 @@ MlmeDisassociateRequest( case RT_OP_MODE_IBSS: btMsr |= MSR_LINK_ADHOC; - // led link set seperate + // led link set separate break; case RT_OP_MODE_AP: diff --git a/drivers/staging/rtl8192e/r8192E_core.c b/drivers/staging/rtl8192e/r8192E_core.c index 533be48..eb41402 100644 --- a/drivers/staging/rtl8192e/r8192E_core.c +++ b/drivers/staging/rtl8192e/r8192E_core.c @@ -407,7 +407,7 @@ rtl8192e_SetHwReg(struct net_device *dev,u8 variable,u8* val) case RT_OP_MODE_IBSS: btMsr |= MSR_ADHOC; - // led link set seperate + // led link set separate break; case RT_OP_MODE_AP: diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211.h b/drivers/staging/rtl8192su/ieee80211/ieee80211.h index 32b261d..bcb2b12 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211.h +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211.h @@ -1152,7 +1152,7 @@ struct ieee80211_device { spinlock_t reorder_spinlock; /* * for HT operation rate set, we use this one for HT data rate to - * seperate different descriptors the way fill this is the same as + * separate different descriptors the way fill this is the same as * in the IE */ u8 Regdot11HTOperationalRateSet[16]; /* use RATR format */ diff --git a/drivers/staging/rtl8192su/r8192S_phy.c b/drivers/staging/rtl8192su/r8192S_phy.c index 69ede47..b6c0f19 100644 --- a/drivers/staging/rtl8192su/r8192S_phy.c +++ b/drivers/staging/rtl8192su/r8192S_phy.c @@ -882,7 +882,7 @@ phy_BB8192S_Config_ParaFile(struct net_device* dev) // // 1. Read PHY_REG.TXT BB INIT!! - // We will seperate as 1T1R/1T2R/1T2R_GREEN/2T2R + // We will separate as 1T1R/1T2R/1T2R_GREEN/2T2R // if (priv->rf_type == RF_1T2R || priv->rf_type == RF_2T2R || priv->rf_type == RF_1T1R ||priv->rf_type == RF_2T2R_GREEN) diff --git a/drivers/staging/rtl8192u/ieee80211.h b/drivers/staging/rtl8192u/ieee80211.h index ef9e941..9c72611 100644 --- a/drivers/staging/rtl8192u/ieee80211.h +++ b/drivers/staging/rtl8192u/ieee80211.h @@ -1795,7 +1795,7 @@ struct ieee80211_device { spinlock_t reorder_spinlock; /* for HT operation rate set. we use this one for HT data rate to - * seperate different descriptors + * separate different descriptors * the way fill this is the same as in the IE */ u8 Regdot11HTOperationalRateSet[16]; /* use RATR format */ diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211.h b/drivers/staging/rtl8192u/ieee80211/ieee80211.h index 39847c8..e1216b7 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211.h +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211.h @@ -1829,7 +1829,7 @@ struct ieee80211_device { spinlock_t bw_spinlock; spinlock_t reorder_spinlock; - // for HT operation rate set. we use this one for HT data rate to seperate different descriptors + // for HT operation rate set. we use this one for HT data rate to separate different descriptors //the way fill this is the same as in the IE u8 Regdot11HTOperationalRateSet[16]; //use RATR format u8 dot11HTOperationalRateSet[16]; //use RATR format diff --git a/drivers/staging/wlags49_h2/README.wlags49 b/drivers/staging/wlags49_h2/README.wlags49 index 7586fd0..f65acd6 100644 --- a/drivers/staging/wlags49_h2/README.wlags49 +++ b/drivers/staging/wlags49_h2/README.wlags49 @@ -84,7 +84,7 @@ TABLE OF CONTENTS. the functions to interface to the Network Interface Card (NIC). The HCF provides for all WaveLAN NIC types one standard interface to the MSF. This I/F is called the Wireless Connection Interface (WCI) and is the - subject of a seperate document (025726). + subject of a separate document (025726). The HCF directory contains firmware images to allow the card to operate in either station (STA) or Access Point (AP) mode. In the build process, the diff --git a/drivers/staging/wlags49_h2/wl_priv.c b/drivers/staging/wlags49_h2/wl_priv.c index f2bfd30..260d4f0 100644 --- a/drivers/staging/wlags49_h2/wl_priv.c +++ b/drivers/staging/wlags49_h2/wl_priv.c @@ -654,7 +654,7 @@ int wvlan_uil_put_info( struct uilreq *urq, struct wl_private *lp ) pLtv->u.u16[0] = CNV_INT_TO_LITTLE( pLtv->u.u16[0] ); break; /* CFG_CNF_OWN_SSID currently same as CNF_DESIRED_SSID. Do we - need seperate storage for this? */ + need separate storage for this? */ //case CFG_CNF_OWN_SSID: case CFG_CNF_OWN_ATIM_WINDOW: lp->atimWindow = pLtv->u.u16[0]; diff --git a/drivers/staging/wlags49_h2/wl_wext.c b/drivers/staging/wlags49_h2/wl_wext.c index 4434e00..311d3c5 100644 --- a/drivers/staging/wlags49_h2/wl_wext.c +++ b/drivers/staging/wlags49_h2/wl_wext.c @@ -3940,7 +3940,7 @@ void wl_wext_event_mic_failed( struct net_device *dev ) MLME-MICHAELMICFAILURE.indication(keyid=# broadcast/unicast addr=addr2) */ - /* NOTE: Format of MAC address (using colons to seperate bytes) may cause + /* NOTE: Format of MAC address (using colons to separate bytes) may cause a problem in future versions of the supplicant, if they ever actually parse these parameters */ #if DBG -- cgit v0.10.2 From 089a41985c6c7e69c8fe043c0dd397da628254f5 Mon Sep 17 00:00:00 2001 From: Barry Song Date: Wed, 12 May 2010 19:34:06 +0100 Subject: staging: iio: adis16260 digital gyro driver Signed-off-by: Barry Song Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/Kconfig b/drivers/staging/iio/Kconfig index ed38ef4..b0e6244 100644 --- a/drivers/staging/iio/Kconfig +++ b/drivers/staging/iio/Kconfig @@ -41,6 +41,7 @@ config IIO_TRIGGER source "drivers/staging/iio/accel/Kconfig" source "drivers/staging/iio/adc/Kconfig" +source "drivers/staging/iio/gyro/Kconfig" source "drivers/staging/iio/imu/Kconfig" source "drivers/staging/iio/light/Kconfig" diff --git a/drivers/staging/iio/Makefile b/drivers/staging/iio/Makefile index 92b81c2..3502b39 100644 --- a/drivers/staging/iio/Makefile +++ b/drivers/staging/iio/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_IIO_SW_RING) += ring_sw.o obj-y += accel/ obj-y += adc/ +obj-y += gyro/ obj-y += imu/ obj-y += light/ diff --git a/drivers/staging/iio/gyro/Kconfig b/drivers/staging/iio/gyro/Kconfig new file mode 100644 index 0000000..c404361 --- /dev/null +++ b/drivers/staging/iio/gyro/Kconfig @@ -0,0 +1,13 @@ +# +# IIO Digital Gyroscope Sensor drivers configuration +# +comment "Digital gyroscope sensors" + +config ADIS16260 + tristate "Analog Devices ADIS16260/5 Digital Gyroscope Sensor SPI driver" + depends on SPI + select IIO_TRIGGER if IIO_RING_BUFFER + select IIO_SW_RING if IIO_RING_BUFFER + help + Say yes here to build support for Analog Devices adis16260/5 + programmable digital gyroscope sensor. diff --git a/drivers/staging/iio/gyro/Makefile b/drivers/staging/iio/gyro/Makefile new file mode 100644 index 0000000..6d2c547 --- /dev/null +++ b/drivers/staging/iio/gyro/Makefile @@ -0,0 +1,7 @@ + +# Makefile for digital gyroscope sensor drivers +# + +adis16260-y := adis16260_core.o +adis16260-$(CONFIG_IIO_RING_BUFFER) += adis16260_ring.o adis16260_trigger.o +obj-$(CONFIG_ADIS16260) += adis16260.o diff --git a/drivers/staging/iio/gyro/adis16260.h b/drivers/staging/iio/gyro/adis16260.h new file mode 100644 index 0000000..f19efb4 --- /dev/null +++ b/drivers/staging/iio/gyro/adis16260.h @@ -0,0 +1,175 @@ +#ifndef SPI_ADIS16260_H_ +#define SPI_ADIS16260_H_ + +#define ADIS16260_STARTUP_DELAY 220 /* ms */ + +#define ADIS16260_READ_REG(a) a +#define ADIS16260_WRITE_REG(a) ((a) | 0x80) + +#define ADIS16260_FLASH_CNT 0x00 /* Flash memory write count */ +#define ADIS16260_SUPPLY_OUT 0x02 /* Power supply measurement */ +#define ADIS16260_GYRO_OUT 0x04 /* X-axis gyroscope output */ +#define ADIS16260_AUX_ADC 0x0A /* analog input channel measurement */ +#define ADIS16260_TEMP_OUT 0x0C /* internal temperature measurement */ +#define ADIS16260_ANGL_OUT 0x0E /* angle displacement */ +#define ADIS16260_GYRO_OFF 0x14 /* Calibration, offset/bias adjustment */ +#define ADIS16260_GYRO_SCALE 0x16 /* Calibration, scale adjustment */ +#define ADIS16260_ALM_MAG1 0x20 /* Alarm 1 magnitude/polarity setting */ +#define ADIS16260_ALM_MAG2 0x22 /* Alarm 2 magnitude/polarity setting */ +#define ADIS16260_ALM_SMPL1 0x24 /* Alarm 1 dynamic rate of change setting */ +#define ADIS16260_ALM_SMPL2 0x26 /* Alarm 2 dynamic rate of change setting */ +#define ADIS16260_ALM_CTRL 0x28 /* Alarm control */ +#define ADIS16260_AUX_DAC 0x30 /* Auxiliary DAC data */ +#define ADIS16260_GPIO_CTRL 0x32 /* Control, digital I/O line */ +#define ADIS16260_MSC_CTRL 0x34 /* Control, data ready, self-test settings */ +#define ADIS16260_SMPL_PRD 0x36 /* Control, internal sample rate */ +#define ADIS16260_SENS_AVG 0x38 /* Control, dynamic range, filtering */ +#define ADIS16260_SLP_CNT 0x3A /* Control, sleep mode initiation */ +#define ADIS16260_DIAG_STAT 0x3C /* Diagnostic, error flags */ +#define ADIS16260_GLOB_CMD 0x3E /* Control, global commands */ +#define ADIS16260_LOT_ID1 0x52 /* Lot Identification Code 1 */ +#define ADIS16260_LOT_ID2 0x54 /* Lot Identification Code 2 */ +#define ADIS16260_PROD_ID 0x56 /* Product identifier; + * convert to decimal = 16,265/16,260 */ +#define ADIS16260_SERIAL_NUM 0x58 /* Serial number */ + +#define ADIS16260_OUTPUTS 5 + +#define ADIS16260_ERROR_ACTIVE (1<<14) +#define ADIS16260_NEW_DATA (1<<15) + +/* MSC_CTRL */ +#define ADIS16260_MSC_CTRL_MEM_TEST (1<<11) +/* Internal self-test enable */ +#define ADIS16260_MSC_CTRL_INT_SELF_TEST (1<<10) +#define ADIS16260_MSC_CTRL_NEG_SELF_TEST (1<<9) +#define ADIS16260_MSC_CTRL_POS_SELF_TEST (1<<8) +#define ADIS16260_MSC_CTRL_DATA_RDY_EN (1<<2) +#define ADIS16260_MSC_CTRL_DATA_RDY_POL_HIGH (1<<1) +#define ADIS16260_MSC_CTRL_DATA_RDY_DIO2 (1<<0) + +/* SMPL_PRD */ +/* Time base (tB): 0 = 1.953 ms, 1 = 60.54 ms */ +#define ADIS16260_SMPL_PRD_TIME_BASE (1<<7) +#define ADIS16260_SMPL_PRD_DIV_MASK 0x7F + +/* SLP_CNT */ +#define ADIS16260_SLP_CNT_POWER_OFF 0x80 + +/* DIAG_STAT */ +#define ADIS16260_DIAG_STAT_ALARM2 (1<<9) +#define ADIS16260_DIAG_STAT_ALARM1 (1<<8) +#define ADIS16260_DIAG_STAT_FLASH_CHK (1<<6) +#define ADIS16260_DIAG_STAT_SELF_TEST (1<<5) +#define ADIS16260_DIAG_STAT_OVERFLOW (1<<4) +#define ADIS16260_DIAG_STAT_SPI_FAIL (1<<3) +#define ADIS16260_DIAG_STAT_FLASH_UPT (1<<2) +#define ADIS16260_DIAG_STAT_POWER_HIGH (1<<1) +#define ADIS16260_DIAG_STAT_POWER_LOW (1<<0) + +/* GLOB_CMD */ +#define ADIS16260_GLOB_CMD_SW_RESET (1<<7) +#define ADIS16260_GLOB_CMD_FLASH_UPD (1<<3) +#define ADIS16260_GLOB_CMD_DAC_LATCH (1<<2) +#define ADIS16260_GLOB_CMD_FAC_CALIB (1<<1) +#define ADIS16260_GLOB_CMD_AUTO_NULL (1<<0) + +#define ADIS16260_MAX_TX 24 +#define ADIS16260_MAX_RX 24 + +#define ADIS16260_SPI_SLOW (u32)(300 * 1000) +#define ADIS16260_SPI_BURST (u32)(1000 * 1000) +#define ADIS16260_SPI_FAST (u32)(2000 * 1000) + +/** + * struct adis16260_state - device instance specific data + * @us: actual spi_device + * @work_trigger_to_ring: bh for triggered event handling + * @work_cont_thresh: CLEAN + * @inter: used to check if new interrupt has been triggered + * @last_timestamp: passing timestamp from th to bh of interrupt handler + * @indio_dev: industrial I/O device structure + * @trig: data ready trigger registered with iio + * @tx: transmit buffer + * @rx: recieve buffer + * @buf_lock: mutex to protect tx and rx + **/ +struct adis16260_state { + struct spi_device *us; + struct work_struct work_trigger_to_ring; + struct iio_work_cont work_cont_thresh; + s64 last_timestamp; + struct iio_dev *indio_dev; + struct iio_trigger *trig; + u8 *tx; + u8 *rx; + struct mutex buf_lock; +}; + +int adis16260_set_irq(struct device *dev, bool enable); + +#ifdef CONFIG_IIO_RING_BUFFER +/* At the moment triggers are only used for ring buffer + * filling. This may change! + */ + +enum adis16260_scan { + ADIS16260_SCAN_SUPPLY, + ADIS16260_SCAN_GYRO, + ADIS16260_SCAN_AUX_ADC, + ADIS16260_SCAN_TEMP, + ADIS16260_SCAN_ANGL, +}; + +void adis16260_remove_trigger(struct iio_dev *indio_dev); +int adis16260_probe_trigger(struct iio_dev *indio_dev); + +ssize_t adis16260_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf); + + +int adis16260_configure_ring(struct iio_dev *indio_dev); +void adis16260_unconfigure_ring(struct iio_dev *indio_dev); + +int adis16260_initialize_ring(struct iio_ring_buffer *ring); +void adis16260_uninitialize_ring(struct iio_ring_buffer *ring); +#else /* CONFIG_IIO_RING_BUFFER */ + +static inline void adis16260_remove_trigger(struct iio_dev *indio_dev) +{ +} + +static inline int adis16260_probe_trigger(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline ssize_t +adis16260_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return 0; +} + +static int adis16260_configure_ring(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline void adis16260_unconfigure_ring(struct iio_dev *indio_dev) +{ +} + +static inline int adis16260_initialize_ring(struct iio_ring_buffer *ring) +{ + return 0; +} + +static inline void adis16260_uninitialize_ring(struct iio_ring_buffer *ring) +{ +} + +#endif /* CONFIG_IIO_RING_BUFFER */ +#endif /* SPI_ADIS16260_H_ */ diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c new file mode 100644 index 0000000..c93f4d5 --- /dev/null +++ b/drivers/staging/iio/gyro/adis16260_core.c @@ -0,0 +1,661 @@ +/* + * ADIS16260 Programmable Digital Gyroscope Sensor Driver + * + * Copyright 2010 Analog Devices Inc. + * + * Licensed under the GPL-2 or later. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../adc/adc.h" +#include "gyro.h" + +#include "adis16260.h" + +#define DRIVER_NAME "adis16260" + +static int adis16260_check_status(struct device *dev); + +/** + * adis16260_spi_write_reg_8() - write single byte to a register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the register to be written + * @val: the value to write + **/ +static int adis16260_spi_write_reg_8(struct device *dev, + u8 reg_address, + u8 val) +{ + int ret; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16260_state *st = iio_dev_get_devdata(indio_dev); + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16260_WRITE_REG(reg_address); + st->tx[1] = val; + + ret = spi_write(st->us, st->tx, 2); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16260_spi_write_reg_16() - write 2 bytes to a pair of registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: value to be written + **/ +static int adis16260_spi_write_reg_16(struct device *dev, + u8 lower_reg_address, + u16 value) +{ + int ret; + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16260_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 20, + }, { + .tx_buf = st->tx + 2, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 20, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16260_WRITE_REG(lower_reg_address); + st->tx[1] = value & 0xFF; + st->tx[2] = ADIS16260_WRITE_REG(lower_reg_address + 1); + st->tx[3] = (value >> 8) & 0xFF; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16260_spi_read_reg_16() - read 2 bytes from a 16-bit register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: somewhere to pass back the value read + **/ +static int adis16260_spi_read_reg_16(struct device *dev, + u8 lower_reg_address, + u16 *val) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16260_state *st = iio_dev_get_devdata(indio_dev); + int ret; + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 30, + }, { + .rx_buf = st->rx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 30, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16260_READ_REG(lower_reg_address); + st->tx[1] = 0; + st->tx[2] = 0; + st->tx[3] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + if (ret) { + dev_err(&st->us->dev, + "problem when reading 16 bit register 0x%02X", + lower_reg_address); + goto error_ret; + } + *val = (st->rx[0] << 8) | st->rx[1]; + +error_ret: + mutex_unlock(&st->buf_lock); + return ret; +} + +static ssize_t adis16260_spi_read_signed(struct device *dev, + struct device_attribute *attr, + char *buf, + unsigned bits) +{ + int ret; + s16 val = 0; + unsigned shift = 16 - bits; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16260_spi_read_reg_16(dev, this_attr->address, (u16 *)&val); + if (ret) + return ret; + + if (val & ADIS16260_ERROR_ACTIVE) + adis16260_check_status(dev); + val = ((s16)(val << shift) >> shift); + return sprintf(buf, "%d\n", val); +} + +static ssize_t adis16260_read_12bit_unsigned(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret; + u16 val = 0; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16260_spi_read_reg_16(dev, this_attr->address, &val); + if (ret) + return ret; + + if (val & ADIS16260_ERROR_ACTIVE) + adis16260_check_status(dev); + + return sprintf(buf, "%u\n", val & 0x0FFF); +} + +static ssize_t adis16260_read_12bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16260_spi_read_signed(dev, attr, buf, 12); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16260_read_14bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16260_spi_read_signed(dev, attr, buf, 14); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16260_write_16bit(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + int ret; + long val; + + ret = strict_strtol(buf, 10, &val); + if (ret) + goto error_ret; + ret = adis16260_spi_write_reg_16(dev, this_attr->address, val); + +error_ret: + return ret ? ret : len; +} + +static ssize_t adis16260_read_frequency(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret, len = 0; + u16 t; + int sps; + ret = adis16260_spi_read_reg_16(dev, + ADIS16260_SMPL_PRD, + &t); + if (ret) + return ret; + sps = (t & ADIS16260_SMPL_PRD_TIME_BASE) ? 66 : 2048; + sps /= (t & ADIS16260_SMPL_PRD_DIV_MASK) + 1; + len = sprintf(buf, "%d SPS\n", sps); + return len; +} + +static ssize_t adis16260_write_frequency(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16260_state *st = iio_dev_get_devdata(indio_dev); + long val; + int ret; + u8 t; + + ret = strict_strtol(buf, 10, &val); + if (ret) + return ret; + + mutex_lock(&indio_dev->mlock); + + t = (2048 / val); + if (t > 0) + t--; + t &= ADIS16260_SMPL_PRD_DIV_MASK; + if ((t & ADIS16260_SMPL_PRD_DIV_MASK) >= 0x0A) + st->us->max_speed_hz = ADIS16260_SPI_SLOW; + else + st->us->max_speed_hz = ADIS16260_SPI_FAST; + + ret = adis16260_spi_write_reg_8(dev, + ADIS16260_SMPL_PRD, + t); + + mutex_unlock(&indio_dev->mlock); + + return ret ? ret : len; +} + +static int adis16260_reset(struct device *dev) +{ + int ret; + ret = adis16260_spi_write_reg_8(dev, + ADIS16260_GLOB_CMD, + ADIS16260_GLOB_CMD_SW_RESET); + if (ret) + dev_err(dev, "problem resetting device"); + + return ret; +} + +static ssize_t adis16260_write_reset(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + if (len < 1) + return -EINVAL; + switch (buf[0]) { + case '1': + case 'y': + case 'Y': + return adis16260_reset(dev); + } + return -EINVAL; +} + +int adis16260_set_irq(struct device *dev, bool enable) +{ + int ret; + u16 msc; + ret = adis16260_spi_read_reg_16(dev, ADIS16260_MSC_CTRL, &msc); + if (ret) + goto error_ret; + + msc |= ADIS16260_MSC_CTRL_DATA_RDY_POL_HIGH; + if (enable) + msc |= ADIS16260_MSC_CTRL_DATA_RDY_EN; + else + msc &= ~ADIS16260_MSC_CTRL_DATA_RDY_EN; + + ret = adis16260_spi_write_reg_16(dev, ADIS16260_MSC_CTRL, msc); + if (ret) + goto error_ret; + +error_ret: + return ret; +} + +/* Power down the device */ +static int adis16260_stop_device(struct device *dev) +{ + int ret; + u16 val = ADIS16260_SLP_CNT_POWER_OFF; + + ret = adis16260_spi_write_reg_16(dev, ADIS16260_SLP_CNT, val); + if (ret) + dev_err(dev, "problem with turning device off: SLP_CNT"); + + return ret; +} + +static int adis16260_self_test(struct device *dev) +{ + int ret; + ret = adis16260_spi_write_reg_16(dev, + ADIS16260_MSC_CTRL, + ADIS16260_MSC_CTRL_MEM_TEST); + if (ret) { + dev_err(dev, "problem starting self test"); + goto err_ret; + } + + adis16260_check_status(dev); + +err_ret: + return ret; +} + +static int adis16260_check_status(struct device *dev) +{ + u16 status; + int ret; + + ret = adis16260_spi_read_reg_16(dev, ADIS16260_DIAG_STAT, &status); + + if (ret < 0) { + dev_err(dev, "Reading status failed\n"); + goto error_ret; + } + ret = status & 0x7F; + if (status & ADIS16260_DIAG_STAT_FLASH_CHK) + dev_err(dev, "Flash checksum error\n"); + if (status & ADIS16260_DIAG_STAT_SELF_TEST) + dev_err(dev, "Self test error\n"); + if (status & ADIS16260_DIAG_STAT_OVERFLOW) + dev_err(dev, "Sensor overrange\n"); + if (status & ADIS16260_DIAG_STAT_SPI_FAIL) + dev_err(dev, "SPI failure\n"); + if (status & ADIS16260_DIAG_STAT_FLASH_UPT) + dev_err(dev, "Flash update failed\n"); + if (status & ADIS16260_DIAG_STAT_POWER_HIGH) + dev_err(dev, "Power supply above 5.25V\n"); + if (status & ADIS16260_DIAG_STAT_POWER_LOW) + dev_err(dev, "Power supply below 4.75V\n"); + +error_ret: + return ret; +} + +static int adis16260_initial_setup(struct adis16260_state *st) +{ + int ret; + struct device *dev = &st->indio_dev->dev; + + /* Disable IRQ */ + ret = adis16260_set_irq(dev, false); + if (ret) { + dev_err(dev, "disable irq failed"); + goto err_ret; + } + + /* Do self test */ + ret = adis16260_self_test(dev); + if (ret) { + dev_err(dev, "self test failure"); + goto err_ret; + } + + /* Read status register to check the result */ + ret = adis16260_check_status(dev); + if (ret) { + adis16260_reset(dev); + dev_err(dev, "device not playing ball -> reset"); + msleep(ADIS16260_STARTUP_DELAY); + ret = adis16260_check_status(dev); + if (ret) { + dev_err(dev, "giving up"); + goto err_ret; + } + } + + printk(KERN_INFO DRIVER_NAME ": at CS%d (irq %d)\n", + st->us->chip_select, st->us->irq); + +err_ret: + return ret; +} + +static IIO_DEV_ATTR_IN_NAMED_RAW(supply, + adis16260_read_12bit_unsigned, + ADIS16260_SUPPLY_OUT); +static IIO_CONST_ATTR(in_supply_scale, "0.0018315"); + +static IIO_DEV_ATTR_GYRO(adis16260_read_14bit_signed, + ADIS16260_GYRO_OUT); +static IIO_DEV_ATTR_GYRO_SCALE(S_IWUSR | S_IRUGO, + adis16260_read_14bit_signed, + adis16260_write_16bit, + ADIS16260_GYRO_SCALE); +static IIO_DEV_ATTR_GYRO_OFFSET(S_IWUSR | S_IRUGO, + adis16260_read_12bit_signed, + adis16260_write_16bit, + ADIS16260_GYRO_OFF); + +static IIO_DEV_ATTR_TEMP_RAW(adis16260_read_12bit_unsigned); +static IIO_CONST_ATTR(temp_offset, "25"); +static IIO_CONST_ATTR(temp_scale, "0.1453"); + +static IIO_DEV_ATTR_IN_RAW(0, adis16260_read_12bit_unsigned, + ADIS16260_AUX_ADC); +static IIO_CONST_ATTR(in0_scale, "0.0006105"); + +static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, + adis16260_read_frequency, + adis16260_write_frequency); +static IIO_DEV_ATTR_ANGL(adis16260_read_14bit_signed, + ADIS16260_ANGL_OUT); + +static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16260_write_reset, 0); + +static IIO_CONST_ATTR_AVAIL_SAMP_FREQ("256 2048"); + +static IIO_CONST_ATTR(name, "adis16260"); + +static struct attribute *adis16260_event_attributes[] = { + NULL +}; + +static struct attribute_group adis16260_event_attribute_group = { + .attrs = adis16260_event_attributes, +}; + +static struct attribute *adis16260_attributes[] = { + &iio_dev_attr_in_supply_raw.dev_attr.attr, + &iio_const_attr_in_supply_scale.dev_attr.attr, + &iio_dev_attr_gyro_raw.dev_attr.attr, + &iio_dev_attr_gyro_scale.dev_attr.attr, + &iio_dev_attr_gyro_offset.dev_attr.attr, + &iio_dev_attr_angl_raw.dev_attr.attr, + &iio_dev_attr_temp_raw.dev_attr.attr, + &iio_const_attr_temp_offset.dev_attr.attr, + &iio_const_attr_temp_scale.dev_attr.attr, + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_const_attr_in0_scale.dev_attr.attr, + &iio_dev_attr_sampling_frequency.dev_attr.attr, + &iio_const_attr_available_sampling_frequency.dev_attr.attr, + &iio_dev_attr_reset.dev_attr.attr, + &iio_const_attr_name.dev_attr.attr, + NULL +}; + +static const struct attribute_group adis16260_attribute_group = { + .attrs = adis16260_attributes, +}; + +static int __devinit adis16260_probe(struct spi_device *spi) +{ + int ret, regdone = 0; + struct adis16260_state *st = kzalloc(sizeof *st, GFP_KERNEL); + if (!st) { + ret = -ENOMEM; + goto error_ret; + } + /* this is only used for removal purposes */ + spi_set_drvdata(spi, st); + + /* Allocate the comms buffers */ + st->rx = kzalloc(sizeof(*st->rx)*ADIS16260_MAX_RX, GFP_KERNEL); + if (st->rx == NULL) { + ret = -ENOMEM; + goto error_free_st; + } + st->tx = kzalloc(sizeof(*st->tx)*ADIS16260_MAX_TX, GFP_KERNEL); + if (st->tx == NULL) { + ret = -ENOMEM; + goto error_free_rx; + } + st->us = spi; + mutex_init(&st->buf_lock); + /* setup the industrialio driver allocated elements */ + st->indio_dev = iio_allocate_device(); + if (st->indio_dev == NULL) { + ret = -ENOMEM; + goto error_free_tx; + } + + st->indio_dev->dev.parent = &spi->dev; + st->indio_dev->num_interrupt_lines = 1; + st->indio_dev->event_attrs = &adis16260_event_attribute_group; + st->indio_dev->attrs = &adis16260_attribute_group; + st->indio_dev->dev_data = (void *)(st); + st->indio_dev->driver_module = THIS_MODULE; + st->indio_dev->modes = INDIO_DIRECT_MODE; + + ret = adis16260_configure_ring(st->indio_dev); + if (ret) + goto error_free_dev; + + ret = iio_device_register(st->indio_dev); + if (ret) + goto error_unreg_ring_funcs; + regdone = 1; + + ret = adis16260_initialize_ring(st->indio_dev->ring); + if (ret) { + printk(KERN_ERR "failed to initialize the ring\n"); + goto error_unreg_ring_funcs; + } + + if (spi->irq) { + ret = iio_register_interrupt_line(spi->irq, + st->indio_dev, + 0, + IRQF_TRIGGER_RISING, + "adis16260"); + if (ret) + goto error_uninitialize_ring; + + ret = adis16260_probe_trigger(st->indio_dev); + if (ret) + goto error_unregister_line; + } + + /* Get the device into a sane initial state */ + ret = adis16260_initial_setup(st); + if (ret) + goto error_remove_trigger; + return 0; + +error_remove_trigger: + adis16260_remove_trigger(st->indio_dev); +error_unregister_line: + if (spi->irq) + iio_unregister_interrupt_line(st->indio_dev, 0); +error_uninitialize_ring: + adis16260_uninitialize_ring(st->indio_dev->ring); +error_unreg_ring_funcs: + adis16260_unconfigure_ring(st->indio_dev); +error_free_dev: + if (regdone) + iio_device_unregister(st->indio_dev); + else + iio_free_device(st->indio_dev); +error_free_tx: + kfree(st->tx); +error_free_rx: + kfree(st->rx); +error_free_st: + kfree(st); +error_ret: + return ret; +} + +static int adis16260_remove(struct spi_device *spi) +{ + int ret; + struct adis16260_state *st = spi_get_drvdata(spi); + struct iio_dev *indio_dev = st->indio_dev; + + ret = adis16260_stop_device(&(indio_dev->dev)); + if (ret) + goto err_ret; + + flush_scheduled_work(); + + adis16260_remove_trigger(indio_dev); + if (spi->irq) + iio_unregister_interrupt_line(indio_dev, 0); + + adis16260_uninitialize_ring(indio_dev->ring); + iio_device_unregister(indio_dev); + adis16260_unconfigure_ring(indio_dev); + kfree(st->tx); + kfree(st->rx); + kfree(st); + + return 0; + +err_ret: + return ret; +} + +static struct spi_driver adis16260_driver = { + .driver = { + .name = "adis16260", + .owner = THIS_MODULE, + }, + .probe = adis16260_probe, + .remove = __devexit_p(adis16260_remove), +}; + +static __init int adis16260_init(void) +{ + return spi_register_driver(&adis16260_driver); +} +module_init(adis16260_init); + +static __exit void adis16260_exit(void) +{ + spi_unregister_driver(&adis16260_driver); +} +module_exit(adis16260_exit); + +MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>"); +MODULE_DESCRIPTION("Analog Devices ADIS16260/5 Digital Gyroscope Sensor"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/iio/gyro/adis16260_ring.c b/drivers/staging/iio/gyro/adis16260_ring.c new file mode 100644 index 0000000..4c4390c --- /dev/null +++ b/drivers/staging/iio/gyro/adis16260_ring.c @@ -0,0 +1,256 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../ring_sw.h" +#include "../accel/accel.h" +#include "../trigger.h" +#include "adis16260.h" + +/** + * combine_8_to_16() utility function to munge to u8s into u16 + **/ +static inline u16 combine_8_to_16(u8 lower, u8 upper) +{ + u16 _lower = lower; + u16 _upper = upper; + return _lower | (_upper << 8); +} + +static IIO_SCAN_EL_C(supply, ADIS16260_SCAN_SUPPLY, IIO_UNSIGNED(12), + ADIS16260_SUPPLY_OUT, NULL); +static IIO_SCAN_EL_C(gyro, ADIS16260_SCAN_GYRO, IIO_SIGNED(14), + ADIS16260_GYRO_OUT, NULL); +static IIO_SCAN_EL_C(aux_adc, ADIS16260_SCAN_AUX_ADC, IIO_SIGNED(14), + ADIS16260_AUX_ADC, NULL); +static IIO_SCAN_EL_C(temp, ADIS16260_SCAN_TEMP, IIO_UNSIGNED(12), + ADIS16260_TEMP_OUT, NULL); +static IIO_SCAN_EL_C(angl, ADIS16260_SCAN_ANGL, IIO_UNSIGNED(12), + ADIS16260_ANGL_OUT, NULL); + +static IIO_SCAN_EL_TIMESTAMP(5); + +static struct attribute *adis16260_scan_el_attrs[] = { + &iio_scan_el_supply.dev_attr.attr, + &iio_scan_el_gyro.dev_attr.attr, + &iio_scan_el_aux_adc.dev_attr.attr, + &iio_scan_el_temp.dev_attr.attr, + &iio_scan_el_angl.dev_attr.attr, + &iio_scan_el_timestamp.dev_attr.attr, + NULL, +}; + +static struct attribute_group adis16260_scan_el_group = { + .attrs = adis16260_scan_el_attrs, + .name = "scan_elements", +}; + +/** + * adis16260_poll_func_th() top half interrupt handler called by trigger + * @private_data: iio_dev + **/ +static void adis16260_poll_func_th(struct iio_dev *indio_dev) +{ + struct adis16260_state *st = iio_dev_get_devdata(indio_dev); + st->last_timestamp = indio_dev->trig->timestamp; + schedule_work(&st->work_trigger_to_ring); +} + +/** + * adis16260_read_ring_data() read data registers which will be placed into ring + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @rx: somewhere to pass back the value read + **/ +static int adis16260_read_ring_data(struct device *dev, u8 *rx) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16260_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[ADIS16260_OUTPUTS + 1]; + int ret; + int i; + + mutex_lock(&st->buf_lock); + + spi_message_init(&msg); + + memset(xfers, 0, sizeof(xfers)); + for (i = 0; i <= ADIS16260_OUTPUTS; i++) { + xfers[i].bits_per_word = 8; + xfers[i].cs_change = 1; + xfers[i].len = 2; + xfers[i].delay_usecs = 30; + xfers[i].tx_buf = st->tx + 2 * i; + if (i < 2) /* SUPPLY_OUT:0x02 GYRO_OUT:0x04 */ + st->tx[2 * i] + = ADIS16260_READ_REG(ADIS16260_SUPPLY_OUT + + 2 * i); + else /* 0x06 to 0x09 is reserved */ + st->tx[2 * i] + = ADIS16260_READ_REG(ADIS16260_SUPPLY_OUT + + 2 * i + 4); + st->tx[2 * i + 1] = 0; + if (i >= 1) + xfers[i].rx_buf = rx + 2 * (i - 1); + spi_message_add_tail(&xfers[i], &msg); + } + + ret = spi_sync(st->us, &msg); + if (ret) + dev_err(&st->us->dev, "problem when burst reading"); + + mutex_unlock(&st->buf_lock); + + return ret; +} + + +static void adis16260_trigger_bh_to_ring(struct work_struct *work_s) +{ + struct adis16260_state *st + = container_of(work_s, struct adis16260_state, + work_trigger_to_ring); + + int i = 0; + s16 *data; + size_t datasize = st->indio_dev + ->ring->access.get_bpd(st->indio_dev->ring); + + data = kmalloc(datasize , GFP_KERNEL); + if (data == NULL) { + dev_err(&st->us->dev, "memory alloc failed in ring bh"); + return; + } + + if (st->indio_dev->scan_count) + if (adis16260_read_ring_data(&st->indio_dev->dev, st->rx) >= 0) + for (; i < st->indio_dev->scan_count; i++) { + data[i] = combine_8_to_16(st->rx[i*2+1], + st->rx[i*2]); + } + + /* Guaranteed to be aligned with 8 byte boundary */ + if (st->indio_dev->scan_timestamp) + *((s64 *)(data + ((i + 3)/4)*4)) = st->last_timestamp; + + st->indio_dev->ring->access.store_to(st->indio_dev->ring, + (u8 *)data, + st->last_timestamp); + + iio_trigger_notify_done(st->indio_dev->trig); + kfree(data); + + return; +} + +static int adis16260_data_rdy_ring_preenable(struct iio_dev *indio_dev) +{ + size_t size; + dev_dbg(&indio_dev->dev, "%s\n", __func__); + /* Check if there are any scan elements enabled, if not fail*/ + if (!(indio_dev->scan_count || indio_dev->scan_timestamp)) + return -EINVAL; + + if (indio_dev->ring->access.set_bpd) { + if (indio_dev->scan_timestamp) + if (indio_dev->scan_count) + /* Timestamp (aligned s64) and data */ + size = (((indio_dev->scan_count * sizeof(s16)) + + sizeof(s64) - 1) + & ~(sizeof(s64) - 1)) + + sizeof(s64); + else /* Timestamp only */ + size = sizeof(s64); + else /* Data only */ + size = indio_dev->scan_count*sizeof(s16); + indio_dev->ring->access.set_bpd(indio_dev->ring, size); + } + + return 0; +} + +static int adis16260_data_rdy_ring_postenable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_attach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +static int adis16260_data_rdy_ring_predisable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_dettach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +void adis16260_unconfigure_ring(struct iio_dev *indio_dev) +{ + kfree(indio_dev->pollfunc); + iio_sw_rb_free(indio_dev->ring); +} + +int adis16260_configure_ring(struct iio_dev *indio_dev) +{ + int ret = 0; + struct adis16260_state *st = indio_dev->dev_data; + struct iio_ring_buffer *ring; + INIT_WORK(&st->work_trigger_to_ring, adis16260_trigger_bh_to_ring); + /* Set default scan mode */ + + iio_scan_mask_set(indio_dev, iio_scan_el_supply.number); + iio_scan_mask_set(indio_dev, iio_scan_el_gyro.number); + iio_scan_mask_set(indio_dev, iio_scan_el_aux_adc.number); + iio_scan_mask_set(indio_dev, iio_scan_el_temp.number); + iio_scan_mask_set(indio_dev, iio_scan_el_angl.number); + indio_dev->scan_timestamp = true; + + indio_dev->scan_el_attrs = &adis16260_scan_el_group; + + ring = iio_sw_rb_allocate(indio_dev); + if (!ring) { + ret = -ENOMEM; + return ret; + } + indio_dev->ring = ring; + /* Effectively select the ring buffer implementation */ + iio_ring_sw_register_funcs(&ring->access); + ring->preenable = &adis16260_data_rdy_ring_preenable; + ring->postenable = &adis16260_data_rdy_ring_postenable; + ring->predisable = &adis16260_data_rdy_ring_predisable; + ring->owner = THIS_MODULE; + + indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); + if (indio_dev->pollfunc == NULL) { + ret = -ENOMEM; + goto error_iio_sw_rb_free;; + } + indio_dev->pollfunc->poll_func_main = &adis16260_poll_func_th; + indio_dev->pollfunc->private_data = indio_dev; + indio_dev->modes |= INDIO_RING_TRIGGERED; + return 0; + +error_iio_sw_rb_free: + iio_sw_rb_free(indio_dev->ring); + return ret; +} + +int adis16260_initialize_ring(struct iio_ring_buffer *ring) +{ + return iio_ring_buffer_register(ring, 0); +} + +void adis16260_uninitialize_ring(struct iio_ring_buffer *ring) +{ + iio_ring_buffer_unregister(ring); +} diff --git a/drivers/staging/iio/gyro/adis16260_trigger.c b/drivers/staging/iio/gyro/adis16260_trigger.c new file mode 100644 index 0000000..b3c5659 --- /dev/null +++ b/drivers/staging/iio/gyro/adis16260_trigger.c @@ -0,0 +1,124 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../trigger.h" +#include "adis16260.h" + +/** + * adis16260_data_rdy_trig_poll() the event handler for the data rdy trig + **/ +static int adis16260_data_rdy_trig_poll(struct iio_dev *dev_info, + int index, + s64 timestamp, + int no_test) +{ + struct adis16260_state *st = iio_dev_get_devdata(dev_info); + struct iio_trigger *trig = st->trig; + + trig->timestamp = timestamp; + iio_trigger_poll(trig); + + return IRQ_HANDLED; +} + +IIO_EVENT_SH(data_rdy_trig, &adis16260_data_rdy_trig_poll); + +static DEVICE_ATTR(name, S_IRUGO, iio_trigger_read_name, NULL); + +static struct attribute *adis16260_trigger_attrs[] = { + &dev_attr_name.attr, + NULL, +}; + +static const struct attribute_group adis16260_trigger_attr_group = { + .attrs = adis16260_trigger_attrs, +}; + +/** + * adis16260_data_rdy_trigger_set_state() set datardy interrupt state + **/ +static int adis16260_data_rdy_trigger_set_state(struct iio_trigger *trig, + bool state) +{ + struct adis16260_state *st = trig->private_data; + struct iio_dev *indio_dev = st->indio_dev; + int ret = 0; + + dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state); + ret = adis16260_set_irq(&st->indio_dev->dev, state); + if (state == false) { + iio_remove_event_from_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0] + ->ev_list); + flush_scheduled_work(); + } else { + iio_add_event_to_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0]->ev_list); + } + return ret; +} + +/** + * adis16260_trig_try_reen() try renabling irq for data rdy trigger + * @trig: the datardy trigger + **/ +static int adis16260_trig_try_reen(struct iio_trigger *trig) +{ + struct adis16260_state *st = trig->private_data; + enable_irq(st->us->irq); + return 0; +} + +int adis16260_probe_trigger(struct iio_dev *indio_dev) +{ + int ret; + struct adis16260_state *st = indio_dev->dev_data; + + st->trig = iio_allocate_trigger(); + st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL); + if (!st->trig->name) { + ret = -ENOMEM; + goto error_free_trig; + } + snprintf((char *)st->trig->name, + IIO_TRIGGER_NAME_LENGTH, + "adis16260-dev%d", indio_dev->id); + st->trig->dev.parent = &st->us->dev; + st->trig->owner = THIS_MODULE; + st->trig->private_data = st; + st->trig->set_trigger_state = &adis16260_data_rdy_trigger_set_state; + st->trig->try_reenable = &adis16260_trig_try_reen; + st->trig->control_attrs = &adis16260_trigger_attr_group; + ret = iio_trigger_register(st->trig); + + /* select default trigger */ + indio_dev->trig = st->trig; + if (ret) + goto error_free_trig_name; + + return 0; + +error_free_trig_name: + kfree(st->trig->name); +error_free_trig: + iio_free_trigger(st->trig); + + return ret; +} + +void adis16260_remove_trigger(struct iio_dev *indio_dev) +{ + struct adis16260_state *state = indio_dev->dev_data; + + iio_trigger_unregister(state->trig); + kfree(state->trig->name); + iio_free_trigger(state->trig); +} diff --git a/drivers/staging/iio/gyro/gyro.h b/drivers/staging/iio/gyro/gyro.h index 16f6ffa..f68edab 100644 --- a/drivers/staging/iio/gyro/gyro.h +++ b/drivers/staging/iio/gyro/gyro.h @@ -39,3 +39,5 @@ #define IIO_DEV_ATTR_GYRO_Z(_show, _addr) \ IIO_DEVICE_ATTR(gyro_z_raw, S_IRUGO, _show, NULL, _addr) +#define IIO_DEV_ATTR_ANGL(_show, _addr) \ + IIO_DEVICE_ATTR(angl_raw, S_IRUGO, _show, NULL, _addr) -- cgit v0.10.2 From e64354c0be3b7134c85571a525b2e37fc4a95eef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Wed, 12 May 2010 14:14:00 -0700 Subject: Staging: vt6655: remove HANDLE definition and use MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index 16d7db3..7a69490 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -2878,7 +2878,7 @@ BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) void TimerSQ3CallBack ( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -2926,7 +2926,7 @@ TimerSQ3CallBack ( void TimerState1CallBack ( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6655/baseband.h b/drivers/staging/vt6655/baseband.h index de9b84a..23f7ad1 100644 --- a/drivers/staging/vt6655/baseband.h +++ b/drivers/staging/vt6655/baseband.h @@ -162,12 +162,12 @@ void BBvExitDeepSleep(DWORD_PTR dwIoBase, BYTE byLocalID); void TimerSQ3CallBack ( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); void TimerState1CallBack( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); void BBvAntennaDiversity(PSDevice pDevice, BYTE byRxRate, BYTE bySQ3); diff --git a/drivers/staging/vt6655/bssdb.c b/drivers/staging/vt6655/bssdb.c index e7bbc56..3af0ccb 100644 --- a/drivers/staging/vt6655/bssdb.c +++ b/drivers/staging/vt6655/bssdb.c @@ -91,18 +91,18 @@ const WORD awHWRetry1[5][5] = { /*--------------------- Static Functions --------------------------*/ void s_vCheckSensitivity( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); #ifdef Calcu_LinkQual void s_uCalculateLinkQual( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); #endif void s_vCheckPreEDThreshold( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); /*--------------------- Export Variables --------------------------*/ @@ -125,7 +125,7 @@ void s_vCheckPreEDThreshold( PKnownBSS BSSpSearchBSSList( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PBYTE pbyDesireBSSID, IN PBYTE pbyDesireSSID, IN CARD_PHY_TYPE ePhyType @@ -282,7 +282,7 @@ if(pDevice->bLinkPass==FALSE) pCurrBSS->bSelected = FALSE; void BSSvClearBSSList( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN BOOL bKeepCurrBSSID ) { @@ -325,7 +325,7 @@ BSSvClearBSSList( -*/ PKnownBSS BSSpAddrIsInBSSList( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PBYTE abyBSSID, IN PWLAN_IE_SSID pSSID ) @@ -368,7 +368,7 @@ BSSpAddrIsInBSSList( BOOL BSSbInsertToBSSList ( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PBYTE abyBSSIDAddr, IN QWORD qwTimestamp, IN WORD wBeaconInterval, @@ -384,7 +384,7 @@ BSSbInsertToBSSList ( IN PWLAN_IE_QUIET pIE_Quiet, IN UINT uIELength, IN PBYTE pbyIEs, - IN HANDLE pRxPacketContext + IN void *pRxPacketContext ) { @@ -502,7 +502,7 @@ BSSbInsertToBSSList ( if ((bIs802_1x == TRUE) && (pSSID->len == ((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->len) && ( !memcmp(pSSID->abySSID, ((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySSID, pSSID->len))) { - bAdd_PMKID_Candidate((HANDLE)pDevice, pBSSList->abyBSSID, &pBSSList->sRSNCapObj); + bAdd_PMKID_Candidate((void *)pDevice, pBSSList->abyBSSID, &pBSSList->sRSNCapObj); if ((pDevice->bLinkPass == TRUE) && (pMgmt->eCurrState == WMAC_STATE_ASSOC)) { if ((KeybGetTransmitKey(&(pDevice->sKey), pDevice->abyBSSID, PAIRWISE_KEY, &pTransmitKey) == TRUE) || @@ -585,7 +585,7 @@ BSSbInsertToBSSList ( BOOL BSSbUpdateToBSSList ( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN QWORD qwTimestamp, IN WORD wBeaconInterval, IN WORD wCapInfo, @@ -602,7 +602,7 @@ BSSbUpdateToBSSList ( IN PKnownBSS pBSSList, IN UINT uIELength, IN PBYTE pbyIEs, - IN HANDLE pRxPacketContext + IN void *pRxPacketContext ) { int ii; @@ -799,7 +799,7 @@ BSSDBbIsSTAInNodeDB( -*/ void BSSvCreateOneNode( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, OUT PUINT puNodeIndex ) { @@ -864,7 +864,7 @@ BSSvCreateOneNode( -*/ void BSSvRemoveOneNode( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN UINT uNodeIndex ) { @@ -897,7 +897,7 @@ BSSvRemoveOneNode( void BSSvUpdateAPNode( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PWORD pwCapInfo, IN PWLAN_IE_SUPP_RATES pSuppRates, IN PWLAN_IE_SUPP_RATES pExtSuppRates @@ -960,7 +960,7 @@ BSSvUpdateAPNode( void BSSvAddMulticastNode( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1013,7 +1013,7 @@ UINT status; #endif void BSSvSecondCallBack( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1111,7 +1111,7 @@ start: } #ifdef Calcu_LinkQual - s_uCalculateLinkQual((HANDLE)pDevice); + s_uCalculateLinkQual((void *)pDevice); #endif for (ii = 0; ii < (MAX_NODE_NUM + 1); ii++) { @@ -1261,18 +1261,18 @@ start: if (pMgmt->sNodeDBTable[0].bActive) { // Assoc with BSS // DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Callback inactive Count = [%d]\n", pMgmt->sNodeDBTable[0].uInActiveCount); //if (pDevice->bUpdateBBVGA) { - // s_vCheckSensitivity((HANDLE) pDevice); + // s_vCheckSensitivity((void *) pDevice); //} if (pDevice->bUpdateBBVGA) { - // s_vCheckSensitivity((HANDLE) pDevice); - s_vCheckPreEDThreshold((HANDLE)pDevice); + // s_vCheckSensitivity((void *) pDevice); + s_vCheckPreEDThreshold((void *)pDevice); } if ((pMgmt->sNodeDBTable[0].uInActiveCount >= (LOST_BEACON_COUNT/2)) && (pDevice->byBBVGACurrent != pDevice->abyBBVGA[0]) ) { pDevice->byBBVGANew = pDevice->abyBBVGA[0]; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_BBSENSITIVITY, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_BBSENSITIVITY, NULL); } if (pMgmt->sNodeDBTable[0].uInActiveCount >= LOST_BEACON_COUNT) { @@ -1324,10 +1324,10 @@ start: pDevice->eEncryptionStatus = pDevice->eOldEncryptionStatus; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Roaming ...\n"); - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); + BSSvClearBSSList((void *)pDevice, pDevice->bLinkPass); pMgmt->eScanType = WMAC_SCAN_ACTIVE; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); pDevice->uAutoReConnectTime = 0; } } @@ -1342,16 +1342,16 @@ start: else { DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Adhoc re-scaning ...\n"); pMgmt->eScanType = WMAC_SCAN_ACTIVE; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, NULL); pDevice->uAutoReConnectTime = 0; }; } if (pMgmt->eCurrState == WMAC_STATE_JOINTED) { if (pDevice->bUpdateBBVGA) { - //s_vCheckSensitivity((HANDLE) pDevice); - s_vCheckPreEDThreshold((HANDLE)pDevice); + //s_vCheckSensitivity((void *) pDevice); + s_vCheckPreEDThreshold((void *)pDevice); } if (pMgmt->sNodeDBTable[0].uInActiveCount >=ADHOC_LOST_BEACON_COUNT) { DBG_PRT(MSG_LEVEL_NOTICE, KERN_INFO "Lost other STA beacon [%d] sec, started !\n", pMgmt->sNodeDBTable[0].uInActiveCount); @@ -1390,7 +1390,7 @@ start: void BSSvUpdateNodeTxCounter( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN BYTE byTsr0, IN BYTE byTsr1, IN PBYTE pbyBuffer, @@ -1503,7 +1503,7 @@ BSSvUpdateNodeTxCounter( pMACHeader = (PS802_11Header)(pbyBuffer + uFIFOHeaderSize); - if (BSSDBbIsSTAInNodeDB((HANDLE)pMgmt, &(pMACHeader->abyAddr1[0]), &uNodeIndex)){ + if (BSSDBbIsSTAInNodeDB((void *)pMgmt, &(pMACHeader->abyAddr1[0]), &uNodeIndex)){ pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts += 1; if ((byTsr1 & TSR1_TERR) == 0) { // transmit success, TxAttempts at least plus one @@ -1583,7 +1583,7 @@ BSSvUpdateNodeTxCounter( void BSSvClearNodeDBTable( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN UINT uStartIndex ) @@ -1611,7 +1611,7 @@ BSSvClearNodeDBTable( void s_vCheckSensitivity( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1649,7 +1649,7 @@ void s_vCheckSensitivity( if (pDevice->byBBVGANew != pDevice->byBBVGACurrent) { pDevice->uBBVGADiffCount++; if (pDevice->uBBVGADiffCount >= BB_VGA_CHANGE_THRESHOLD) - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_CHANGE_BBSENSITIVITY, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_CHANGE_BBSENSITIVITY, NULL); } else { pDevice->uBBVGADiffCount = 0; } @@ -1661,7 +1661,7 @@ void s_vCheckSensitivity( void BSSvClearAnyBSSJoinRecord ( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1676,7 +1676,7 @@ BSSvClearAnyBSSJoinRecord ( #ifdef Calcu_LinkQual void s_uCalculateLinkQual( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1724,7 +1724,7 @@ else #endif void s_vCheckPreEDThreshold( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6655/bssdb.h b/drivers/staging/vt6655/bssdb.h index 86a1f67..a66e14f 100644 --- a/drivers/staging/vt6655/bssdb.h +++ b/drivers/staging/vt6655/bssdb.h @@ -244,7 +244,7 @@ typedef struct tagKnownNodeDB { PKnownBSS BSSpSearchBSSList( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PBYTE pbyDesireBSSID, IN PBYTE pbyDesireSSID, IN CARD_PHY_TYPE ePhyType @@ -252,20 +252,20 @@ BSSpSearchBSSList( PKnownBSS BSSpAddrIsInBSSList( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PBYTE abyBSSID, IN PWLAN_IE_SSID pSSID ); void BSSvClearBSSList( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN BOOL bKeepCurrBSSID ); BOOL BSSbInsertToBSSList( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PBYTE abyBSSIDAddr, IN QWORD qwTimestamp, IN WORD wBeaconInterval, @@ -281,13 +281,13 @@ BSSbInsertToBSSList( IN PWLAN_IE_QUIET pIE_Quiet, IN UINT uIELength, IN PBYTE pbyIEs, - IN HANDLE pRxPacketContext + IN void *pRxPacketContext ); BOOL BSSbUpdateToBSSList( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN QWORD qwTimestamp, IN WORD wBeaconInterval, IN WORD wCapInfo, @@ -304,26 +304,26 @@ BSSbUpdateToBSSList( IN PKnownBSS pBSSList, IN UINT uIELength, IN PBYTE pbyIEs, - IN HANDLE pRxPacketContext + IN void *pRxPacketContext ); BOOL BSSDBbIsSTAInNodeDB( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PBYTE abyDstAddr, OUT PUINT puNodeIndex ); void BSSvCreateOneNode( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, OUT PUINT puNodeIndex ); void BSSvUpdateAPNode( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PWORD pwCapInfo, IN PWLAN_IE_SUPP_RATES pItemRates, IN PWLAN_IE_SUPP_RATES pExtSuppRates @@ -332,13 +332,13 @@ BSSvUpdateAPNode( void BSSvSecondCallBack( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); void BSSvUpdateNodeTxCounter( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN BYTE byTsr0, IN BYTE byTsr1, IN PBYTE pbyBuffer, @@ -347,25 +347,25 @@ BSSvUpdateNodeTxCounter( void BSSvRemoveOneNode( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN UINT uNodeIndex ); void BSSvAddMulticastNode( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); void BSSvClearNodeDBTable( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN UINT uStartIndex ); void BSSvClearAnyBSSJoinRecord( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); #endif //__BSSDB_H__ diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index f690fc2..454277b 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -2011,11 +2011,11 @@ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "call MACvIntEnable\n"); MACvIntEnable(pDevice->PortOffset, IMR_MASK_VALUE); if (pDevice->pMgmt->eConfigMode == WMAC_CONFIG_AP) { - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RUN_AP, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_RUN_AP, NULL); } else { - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_BSSID_SCAN, NULL); - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_BSSID_SCAN, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_SSID, NULL); } pDevice->flags |=DEVICE_FLAGS_OPENED; @@ -2034,7 +2034,7 @@ static int device_close(struct net_device *dev) { //PLICE_DEBUG<- //2007-1121-02by EinsnLiu if (pDevice->bLinkPass) { - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_DISASSOCIATE, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_DISASSOCIATE, NULL); mdelay(30); } #ifdef TxInSleep @@ -2860,7 +2860,7 @@ static irqreturn_t device_intr(int irq, void *dev_instance) { pDevice->bBeaconSent = FALSE; if (pDevice->bEnablePSMode) { - PSbIsNextTBTTWakeUp((HANDLE)pDevice); + PSbIsNextTBTTWakeUp((void *)pDevice); }; if ((pDevice->eOPMode == OP_MODE_AP) || @@ -2893,7 +2893,7 @@ static irqreturn_t device_intr(int irq, void *dev_instance) { // check if mutltcast tx bufferring pMgmt->byDTIMCount = pMgmt->byDTIMPeriod - 1; pMgmt->sNodeDBTable[0].bRxPSPoll = TRUE; - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RX_PSPOLL, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_RX_PSPOLL, NULL); } } } @@ -3549,7 +3549,7 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { if (pMgmt->eConfigMode == WMAC_CONFIG_AP) { netif_stop_queue(pDevice->dev); spin_lock_irq(&pDevice->lock); - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RUN_AP, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_RUN_AP, NULL); spin_unlock_irq(&pDevice->lock); } else { @@ -3563,8 +3563,8 @@ static int device_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { pMgmt->eScanType = WMAC_SCAN_ACTIVE; if(pDevice->bWPASuppWextEnabled !=TRUE) #endif - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, NULL); spin_unlock_irq(&pDevice->lock); } pDevice->bCommit = FALSE; @@ -3719,9 +3719,9 @@ viawget_resume(struct pci_dev *pcid) init_timer(&pMgmt->sTimerSecondCallback); init_timer(&pDevice->sTimerCommand); MACvIntEnable(pDevice->PortOffset, IMR_MASK_VALUE); - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL); + BSSvClearBSSList((void *)pDevice, pDevice->bLinkPass); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, NULL); spin_unlock_irq(&pDevice->lock); } return 0; diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index ab13bdf..d90104a 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -631,13 +631,13 @@ device_receive_frame ( tasklet_schedule(&pDevice->RxMngWorkItem); #else //printk("RxMan\n"); - vMgrRxManagePacket((HANDLE)pDevice, pDevice->pMgmt, pRxPacket); + vMgrRxManagePacket((void *)pDevice, pDevice->pMgmt, pRxPacket); //tasklet_schedule(&pDevice->RxMngWorkItem); #endif #endif //PLICE_DEBUG<- - //vMgrRxManagePacket((HANDLE)pDevice, pDevice->pMgmt, pRxPacket); + //vMgrRxManagePacket((void *)pDevice, pDevice->pMgmt, pRxPacket); // hostap Deamon handle 802.11 management if (pDevice->bEnableHostapd) { skb->dev = pDevice->apdev; @@ -1087,7 +1087,7 @@ static BOOL s_bAPModeRxCtl ( // delcare received ps-poll event if (IS_CTL_PSPOLL(pbyFrame)) { pMgmt->sNodeDBTable[iSANodeIndex].bRxPSPoll = TRUE; - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RX_PSPOLL, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_RX_PSPOLL, NULL); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "dpc: WLAN_CMD_RX_PSPOLL 1\n"); } else { @@ -1096,7 +1096,7 @@ static BOOL s_bAPModeRxCtl ( if (!IS_FC_POWERMGT(pbyFrame)) { pMgmt->sNodeDBTable[iSANodeIndex].bPSEnable = FALSE; pMgmt->sNodeDBTable[iSANodeIndex].bRxPSPoll = TRUE; - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RX_PSPOLL, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_RX_PSPOLL, NULL); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "dpc: WLAN_CMD_RX_PSPOLL 2\n"); } } @@ -1112,7 +1112,7 @@ static BOOL s_bAPModeRxCtl ( if (pMgmt->sNodeDBTable[iSANodeIndex].wEnQueueCnt > 0) { pMgmt->sNodeDBTable[iSANodeIndex].bPSEnable = FALSE; pMgmt->sNodeDBTable[iSANodeIndex].bRxPSPoll = TRUE; - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RX_PSPOLL, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_RX_PSPOLL, NULL); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "dpc: WLAN_CMD_RX_PSPOLL 3\n"); } diff --git a/drivers/staging/vt6655/ioctl.c b/drivers/staging/vt6655/ioctl.c index 86439bb..1bd8199 100644 --- a/drivers/staging/vt6655/ioctl.c +++ b/drivers/staging/vt6655/ioctl.c @@ -109,14 +109,14 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { } spin_lock_irq(&pDevice->lock); if (memcmp(pMgmt->abyCurrBSSID, &abyNullAddr[0], 6) == 0) - BSSvClearBSSList((HANDLE)pDevice, FALSE); + BSSvClearBSSList((void *)pDevice, FALSE); else - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); + BSSvClearBSSList((void *)pDevice, pDevice->bLinkPass); if (pItemSSID->len != 0) - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, abyScanSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, abyScanSSID); else - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); spin_unlock_irq(&pDevice->lock); break; @@ -223,8 +223,8 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { netif_stop_queue(pDevice->dev); spin_lock_irq(&pDevice->lock); pMgmt->eCurrState = WMAC_STATE_IDLE; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, NULL); spin_unlock_irq(&pDevice->lock); break; @@ -593,7 +593,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { netif_stop_queue(pDevice->dev); spin_lock_irq(&pDevice->lock); - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_RUN_AP, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_RUN_AP, NULL); spin_unlock_irq(&pDevice->lock); break; diff --git a/drivers/staging/vt6655/iwctl.c b/drivers/staging/vt6655/iwctl.c index 7fa5842..cf69034 100644 --- a/drivers/staging/vt6655/iwctl.c +++ b/drivers/staging/vt6655/iwctl.c @@ -190,7 +190,7 @@ if(pDevice->byReAssocCount > 0) { //reject scan when re-associating! } spin_lock_irq(&pDevice->lock); - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); + BSSvClearBSSList((void *)pDevice, pDevice->bLinkPass); //mike add: active scan OR passive scan OR desire_ssid scan if(wrq->length == sizeof(struct iw_scan_req)) { @@ -208,7 +208,7 @@ if(pDevice->byReAssocCount > 0) { //reject scan when re-associating! pMgmt->eScanType = WMAC_SCAN_PASSIVE; PRINT_K("SIOCSIWSCAN:[desired_ssid=%s,len=%d]\n",((PWLAN_IE_SSID)abyScanSSID)->abySSID, ((PWLAN_IE_SSID)abyScanSSID)->len); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, abyScanSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, abyScanSSID); spin_unlock_irq(&pDevice->lock); return 0; @@ -223,7 +223,7 @@ if(pDevice->byReAssocCount > 0) { //reject scan when re-associating! pMgmt->eScanType = WMAC_SCAN_PASSIVE; //printk("SIOCSIWSCAN:WLAN_CMD_BSSID_SCAN\n"); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); spin_unlock_irq(&pDevice->lock); return 0; @@ -897,10 +897,10 @@ if (pMgmt->eScanState == WMAC_IS_SCANNING) { if (pCurr == NULL){ PRINT_K("SIOCSIWESSID:hidden ssid site survey before associate.......\n"); - vResetCommandTimer((HANDLE) pDevice); + vResetCommandTimer((void *) pDevice); pMgmt->eScanType = WMAC_SCAN_ACTIVE; - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); } else { //mike:to find out if that desired SSID is a hidden-ssid AP , // by means of judging if there are two same BSSID exist in list ? @@ -912,10 +912,10 @@ if (pMgmt->eScanState == WMAC_IS_SCANNING) { } if(uSameBssidNum >= 2) { //hit: desired AP is in hidden ssid mode!!! printk("SIOCSIWESSID:hidden ssid directly associate.......\n"); - vResetCommandTimer((HANDLE) pDevice); + vResetCommandTimer((void *) pDevice); pMgmt->eScanType = WMAC_SCAN_PASSIVE; //this scan type,you'll submit scan result! - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, pMgmt->abyDesireSSID); } } } @@ -1660,11 +1660,11 @@ int iwctl_siwpower(struct net_device *dev, } if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_TIMEOUT) { pDevice->ePSMode = WMAC_POWER_FAST; - PSvEnablePowerSaving((HANDLE)pDevice, pMgmt->wListenInterval); + PSvEnablePowerSaving((void *)pDevice, pMgmt->wListenInterval); } else if ((wrq->flags & IW_POWER_TYPE) == IW_POWER_PERIOD) { pDevice->ePSMode = WMAC_POWER_FAST; - PSvEnablePowerSaving((HANDLE)pDevice, pMgmt->wListenInterval); + PSvEnablePowerSaving((void *)pDevice, pMgmt->wListenInterval); } switch (wrq->flags & IW_POWER_MODE) { case IW_POWER_UNICAST_R: @@ -2096,7 +2096,7 @@ int iwctl_siwmlme(struct net_device *dev, switch(mlme->cmd){ case IW_MLME_DEAUTH: //this command seems to be not complete,please test it --einsnliu - //bScheduleCommand((HANDLE) pDevice, WLAN_CMD_DEAUTH, (PBYTE)&reason); + //bScheduleCommand((void *) pDevice, WLAN_CMD_DEAUTH, (PBYTE)&reason); break; case IW_MLME_DISASSOC: if(pDevice->bLinkPass == TRUE){ @@ -2104,7 +2104,7 @@ int iwctl_siwmlme(struct net_device *dev, //clear related flags memset(pMgmt->abyDesireBSSID, 0xFF,6); KeyvInitTable(&pDevice->sKey, pDevice->PortOffset); - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_DISASSOCIATE, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_DISASSOCIATE, NULL); } break; default: diff --git a/drivers/staging/vt6655/power.c b/drivers/staging/vt6655/power.c index a28d037..166e7fb 100644 --- a/drivers/staging/vt6655/power.c +++ b/drivers/staging/vt6655/power.c @@ -76,7 +76,7 @@ static int msglevel =MSG_LEVEL_INFO; void PSvEnablePowerSaving( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN WORD wListenInterval ) { @@ -146,7 +146,7 @@ PSvEnablePowerSaving( void PSvDisablePowerSaving( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -184,7 +184,7 @@ PSvDisablePowerSaving( BOOL PSbConsiderPowerDown( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN BOOL bCheckRxDMA, IN BOOL bCheckCountToWakeUp ) @@ -252,7 +252,7 @@ PSbConsiderPowerDown( void PSvSendPSPOLL( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -298,7 +298,7 @@ PSvSendPSPOLL( -*/ BOOL PSbSendNullPacket( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -384,7 +384,7 @@ PSbSendNullPacket( BOOL PSbIsNextTBTTWakeUp( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { diff --git a/drivers/staging/vt6655/power.h b/drivers/staging/vt6655/power.h index bac8b20..769e0d1 100644 --- a/drivers/staging/vt6655/power.h +++ b/drivers/staging/vt6655/power.h @@ -50,35 +50,35 @@ BOOL PSbConsiderPowerDown( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN BOOL bCheckRxDMA, IN BOOL bCheckCountToWakeUp ); void PSvDisablePowerSaving( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); void PSvEnablePowerSaving( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN WORD wListenInterval ); void PSvSendPSPOLL( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); BOOL PSbSendNullPacket( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); BOOL PSbIsNextTBTTWakeUp( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); #endif //__POWER_H__ diff --git a/drivers/staging/vt6655/ttype.h b/drivers/staging/vt6655/ttype.h index b71fe59..b2dff3a 100644 --- a/drivers/staging/vt6655/ttype.h +++ b/drivers/staging/vt6655/ttype.h @@ -132,6 +132,4 @@ typedef DWORD * PDWORD; typedef QWORD * PQWORD; -typedef void *HANDLE; - #endif // __TTYPE_H__ diff --git a/drivers/staging/vt6655/wcmd.c b/drivers/staging/vt6655/wcmd.c index ec1036e..6e46040 100644 --- a/drivers/staging/vt6655/wcmd.c +++ b/drivers/staging/vt6655/wcmd.c @@ -319,7 +319,7 @@ s_MgrMakeProbeRequest( void vCommandTimerWait( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN UINT MSecond ) { @@ -339,7 +339,7 @@ vCommandTimerWait( void vCommandTimer ( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -382,7 +382,7 @@ vCommandTimer ( // wait all Data TD complete if (pDevice->iTDUsed[TYPE_AC0DMA] != 0){ spin_unlock_irq(&pDevice->lock); - vCommandTimerWait((HANDLE)pDevice, 10); + vCommandTimerWait((void *)pDevice, 10); return; }; @@ -424,7 +424,7 @@ vCommandTimer ( pMgmt->abyScanBSSID[5] = 0xFF; pItemSSID->byElementID = WLAN_EID_SSID; // clear bssid list - // BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); + // BSSvClearBSSList((void *)pDevice, pDevice->bLinkPass); pMgmt->eScanState = WMAC_IS_SCANNING; } @@ -453,11 +453,11 @@ vCommandTimer ( (pMgmt->uScanChannel < CB_MAX_CHANNEL_24G)) { s_vProbeChannel(pDevice); spin_unlock_irq(&pDevice->lock); - vCommandTimerWait((HANDLE)pDevice, WCMD_ACTIVE_SCAN_TIME); + vCommandTimerWait((void *)pDevice, WCMD_ACTIVE_SCAN_TIME); return; } else { spin_unlock_irq(&pDevice->lock); - vCommandTimerWait((HANDLE)pDevice, WCMD_PASSIVE_SCAN_TIME); + vCommandTimerWait((void *)pDevice, WCMD_PASSIVE_SCAN_TIME); return; } @@ -501,7 +501,7 @@ vCommandTimer ( } else { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Send Disassociation Packet..\n"); // reason = 8 : disassoc because sta has left - vMgrDisassocBeginSta((HANDLE)pDevice, pMgmt, pMgmt->abyCurrBSSID, (8), &Status); + vMgrDisassocBeginSta((void *)pDevice, pMgmt, pMgmt->abyCurrBSSID, (8), &Status); pDevice->bLinkPass = FALSE; // unlock command busy pItemSSID = (PWLAN_IE_SSID)pMgmt->abyCurrSSID; @@ -515,7 +515,7 @@ vCommandTimer ( pDevice->eCommandState = WLAN_DISASSOCIATE_WAIT; // wait all Control TD complete if (pDevice->iTDUsed[TYPE_TXDMA0] != 0){ - vCommandTimerWait((HANDLE)pDevice, 10); + vCommandTimerWait((void *)pDevice, 10); spin_unlock_irq(&pDevice->lock); return; }; @@ -528,7 +528,7 @@ vCommandTimer ( case WLAN_DISASSOCIATE_WAIT : // wait all Control TD complete if (pDevice->iTDUsed[TYPE_TXDMA0] != 0){ - vCommandTimerWait((HANDLE)pDevice, 10); + vCommandTimerWait((void *)pDevice, 10); spin_unlock_irq(&pDevice->lock); return; }; @@ -578,24 +578,24 @@ printk("chester-abyDesireSSID=%s\n",((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySS // set initial state pMgmt->eCurrState = WMAC_STATE_IDLE; pMgmt->eCurrMode = WMAC_MODE_STANDBY; - PSvDisablePowerSaving((HANDLE)pDevice); + PSvDisablePowerSaving((void *)pDevice); BSSvClearNodeDBTable(pDevice, 0); - vMgrJoinBSSBegin((HANDLE)pDevice, &Status); + vMgrJoinBSSBegin((void *)pDevice, &Status); // if Infra mode if ((pMgmt->eCurrMode == WMAC_MODE_ESS_STA) && (pMgmt->eCurrState == WMAC_STATE_JOINTED)) { // Call mgr to begin the deauthentication // reason = (3) beacuse sta has left ESS if (pMgmt->eCurrState>= WMAC_STATE_AUTH) { - vMgrDeAuthenBeginSta((HANDLE)pDevice, pMgmt, pMgmt->abyCurrBSSID, (3), &Status); + vMgrDeAuthenBeginSta((void *)pDevice, pMgmt, pMgmt->abyCurrBSSID, (3), &Status); } // Call mgr to begin the authentication - vMgrAuthenBeginSta((HANDLE)pDevice, pMgmt, &Status); + vMgrAuthenBeginSta((void *)pDevice, pMgmt, &Status); if (Status == CMD_STATUS_SUCCESS) { pDevice->byLinkWaitCount = 0; pDevice->eCommandState = WLAN_AUTHENTICATE_WAIT; - vCommandTimerWait((HANDLE)pDevice, AUTHENTICATE_TIMEOUT); + vCommandTimerWait((void *)pDevice, AUTHENTICATE_TIMEOUT); spin_unlock_irq(&pDevice->lock); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" Set eCommandState = WLAN_AUTHENTICATE_WAIT\n"); return; @@ -615,7 +615,7 @@ printk("chester-abyDesireSSID=%s\n",((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySS } else { // start own IBSS - vMgrCreateOwnIBSS((HANDLE)pDevice, &Status); + vMgrCreateOwnIBSS((void *)pDevice, &Status); if (Status != CMD_STATUS_SUCCESS){ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " WLAN_CMD_IBSS_CREATE fail ! \n"); }; @@ -627,7 +627,7 @@ printk("chester-abyDesireSSID=%s\n",((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySS if (pMgmt->eConfigMode == WMAC_CONFIG_IBSS_STA || pMgmt->eConfigMode == WMAC_CONFIG_AUTO) { // start own IBSS - vMgrCreateOwnIBSS((HANDLE)pDevice, &Status); + vMgrCreateOwnIBSS((void *)pDevice, &Status); if (Status != CMD_STATUS_SUCCESS){ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" WLAN_CMD_IBSS_CREATE fail ! \n"); }; @@ -661,12 +661,12 @@ printk("chester-abyDesireSSID=%s\n",((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySS // Call mgr to begin the association pDevice->byLinkWaitCount = 0; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCurrState == WMAC_STATE_AUTH\n"); - vMgrAssocBeginSta((HANDLE)pDevice, pMgmt, &Status); + vMgrAssocBeginSta((void *)pDevice, pMgmt, &Status); if (Status == CMD_STATUS_SUCCESS) { pDevice->byLinkWaitCount = 0; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState = WLAN_ASSOCIATE_WAIT\n"); pDevice->eCommandState = WLAN_ASSOCIATE_WAIT; - vCommandTimerWait((HANDLE)pDevice, ASSOCIATE_TIMEOUT); + vCommandTimerWait((void *)pDevice, ASSOCIATE_TIMEOUT); spin_unlock_irq(&pDevice->lock); return; } @@ -679,7 +679,7 @@ printk("chester-abyDesireSSID=%s\n",((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySS pDevice->byLinkWaitCount ++; printk("WLAN_AUTHENTICATE_WAIT:wait %d times!!\n",pDevice->byLinkWaitCount); spin_unlock_irq(&pDevice->lock); - vCommandTimerWait((HANDLE)pDevice, AUTHENTICATE_TIMEOUT/2); + vCommandTimerWait((void *)pDevice, AUTHENTICATE_TIMEOUT/2); return; } pDevice->byLinkWaitCount = 0; @@ -702,7 +702,7 @@ printk("chester-abyDesireSSID=%s\n",((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySS if (pMgmt->eCurrState == WMAC_STATE_ASSOC) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCurrState == WMAC_STATE_ASSOC\n"); if (pDevice->ePSMode != WMAC_POWER_CAM) { - PSvEnablePowerSaving((HANDLE)pDevice, pMgmt->wListenInterval); + PSvEnablePowerSaving((void *)pDevice, pMgmt->wListenInterval); } if (pMgmt->eAuthenMode >= WMAC_AUTH_WPA) { KeybRemoveAllKey(&(pDevice->sKey), pDevice->abyBSSID, pDevice->PortOffset); @@ -743,7 +743,7 @@ printk("chester-abyDesireSSID=%s\n",((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySS pDevice->byLinkWaitCount ++; printk("WLAN_ASSOCIATE_WAIT:wait %d times!!\n",pDevice->byLinkWaitCount); spin_unlock_irq(&pDevice->lock); - vCommandTimerWait((HANDLE)pDevice, ASSOCIATE_TIMEOUT/2); + vCommandTimerWait((void *)pDevice, ASSOCIATE_TIMEOUT/2); return; } pDevice->byLinkWaitCount = 0; @@ -779,7 +779,7 @@ printk("chester-abyDesireSSID=%s\n",((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySS pMgmt->eCurrState = WMAC_STATE_IDLE; pDevice->bFixRate = FALSE; - vMgrCreateOwnIBSS((HANDLE)pDevice, &Status); + vMgrCreateOwnIBSS((void *)pDevice, &Status); if (Status != CMD_STATUS_SUCCESS){ DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " vMgrCreateOwnIBSS fail ! \n"); }; @@ -869,12 +869,12 @@ printk("chester-abyDesireSSID=%s\n",((PWLAN_IE_SSID)pMgmt->abyDesireSSID)->abySS //DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"eCommandState == WLAN_CMD_CHECK_BBSENSITIVITY_START\n"); // wait all TD complete if (pDevice->iTDUsed[TYPE_AC0DMA] != 0){ - vCommandTimerWait((HANDLE)pDevice, 10); + vCommandTimerWait((void *)pDevice, 10); spin_unlock_irq(&pDevice->lock); return; } if (pDevice->iTDUsed[TYPE_TXDMA0] != 0){ - vCommandTimerWait((HANDLE)pDevice, 10); + vCommandTimerWait((void *)pDevice, 10); spin_unlock_irq(&pDevice->lock); return; } @@ -971,7 +971,7 @@ s_bCommandComplete ( } - vCommandTimerWait((HANDLE)pDevice, 0); + vCommandTimerWait((void *)pDevice, 0); } return TRUE; @@ -980,7 +980,7 @@ s_bCommandComplete ( BOOL bScheduleCommand ( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN CMD_CODE eCommand, IN PBYTE pbyItem0 ) @@ -1061,7 +1061,7 @@ BOOL bScheduleCommand ( * */ BOOL bClearBSSID_SCAN ( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1083,7 +1083,7 @@ BOOL bClearBSSID_SCAN ( //mike add:reset command timer void vResetCommandTimer( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1107,7 +1107,7 @@ vResetCommandTimer( #ifdef TxInSleep void BSSvSecondTxData( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6655/wcmd.h b/drivers/staging/vt6655/wcmd.h index 1e81669..67b08f6 100644 --- a/drivers/staging/vt6655/wcmd.h +++ b/drivers/staging/vt6655/wcmd.h @@ -111,34 +111,34 @@ typedef enum tagCMD_STATE { /*--------------------- Export Functions --------------------------*/ void vResetCommandTimer( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); void vCommandTimer ( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); BOOL bClearBSSID_SCAN( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); BOOL bScheduleCommand( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN CMD_CODE eCommand, IN PBYTE pbyItem0 ); void vCommandTimerWait( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN UINT MSecond ); #ifdef TxInSleep void BSSvSecondTxData( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); #endif diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index ed5342b..614850a 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -349,7 +349,7 @@ s_bCipherMatch ( void vMgrObjectInit( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -368,7 +368,7 @@ vMgrObjectInit( pMgmt->byCSSPK = KEY_CTL_NONE; pMgmt->byCSSGK = KEY_CTL_NONE; pMgmt->wIBSSBeaconPeriod = DEFAULT_IBSS_BI; - BSSvClearBSSList((HANDLE)pDevice, FALSE); + BSSvClearBSSList((void *)pDevice, FALSE); return; } @@ -385,7 +385,7 @@ vMgrObjectInit( void vMgrTimerInit( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -433,7 +433,7 @@ vMgrTimerInit( void vMgrObjectReset( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -462,7 +462,7 @@ vMgrObjectReset( void vMgrAssocBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ) @@ -538,7 +538,7 @@ vMgrAssocBeginSta( void vMgrReAssocBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ) @@ -617,7 +617,7 @@ vMgrReAssocBeginSta( void vMgrDisassocBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, IN PBYTE abyDestAddress, IN WORD wReason, @@ -1041,7 +1041,7 @@ s_vMgrRxAssocResponse( }; DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Association Successful, AID=%d.\n", pMgmt->wCurrAID & ~(BIT14|BIT15)); pMgmt->eCurrState = WMAC_STATE_ASSOC; - BSSvUpdateAPNode((HANDLE)pDevice, sFrame.pwCapInfo, sFrame.pSuppRates, sFrame.pExtSuppRates); + BSSvUpdateAPNode((void *)pDevice, sFrame.pwCapInfo, sFrame.pSuppRates, sFrame.pExtSuppRates); pItemSSID = (PWLAN_IE_SSID)pMgmt->abyCurrSSID; DBG_PRT(MSG_LEVEL_INFO, KERN_INFO "Link with AP(SSID): %s\n", pItemSSID->abySSID); pDevice->bLinkPass = TRUE; @@ -1152,7 +1152,7 @@ if(pMgmt->eCurrState == WMAC_STATE_ASSOC) void vMgrAuthenBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ) @@ -1210,7 +1210,7 @@ vMgrAuthenBeginSta( void vMgrDeAuthenBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, IN PBYTE abyDestAddress, IN WORD wReason, @@ -1455,7 +1455,7 @@ s_vMgrRxAuthenSequence_2( } if (pDevice->eCommandState == WLAN_AUTHENTICATE_WAIT ) { // spin_unlock_irq(&pDevice->lock); -// vCommandTimerWait((HANDLE)pDevice, 0); +// vCommandTimerWait((void *)pDevice, 0); // spin_lock_irq(&pDevice->lock); } @@ -1502,7 +1502,7 @@ s_vMgrRxAuthenSequence_2( DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Mgt:rx Auth_reply sequence_2 status error ...\n"); if ( pDevice->eCommandState == WLAN_AUTHENTICATE_WAIT ) { // spin_unlock_irq(&pDevice->lock); -// vCommandTimerWait((HANDLE)pDevice, 0); +// vCommandTimerWait((void *)pDevice, 0); // spin_lock_irq(&pDevice->lock); } s_vMgrLogStatus(pMgmt, cpu_to_le16((*(pFrame->pwStatus)))); @@ -1640,7 +1640,7 @@ s_vMgrRxAuthenSequence_4( if ( pDevice->eCommandState == WLAN_AUTHENTICATE_WAIT ) { // spin_unlock_irq(&pDevice->lock); -// vCommandTimerWait((HANDLE)pDevice, 0); +// vCommandTimerWait((void *)pDevice, 0); // spin_lock_irq(&pDevice->lock); } @@ -1943,10 +1943,10 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) sERP.byERP = 0; } - pBSSList = BSSpAddrIsInBSSList((HANDLE)pDevice, sFrame.pHdr->sA3.abyAddr3, sFrame.pSSID); + pBSSList = BSSpAddrIsInBSSList((void *)pDevice, sFrame.pHdr->sA3.abyAddr3, sFrame.pSSID); if (pBSSList == NULL) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Beacon/insert: RxChannel = : %d\n", byCurrChannel); - BSSbInsertToBSSList((HANDLE)pDevice, + BSSbInsertToBSSList((void *)pDevice, sFrame.pHdr->sA3.abyAddr3, *sFrame.pqwTimestamp, *sFrame.pwBeaconInterval, @@ -1962,12 +1962,12 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) sFrame.pIE_Quiet, sFrame.len - WLAN_HDR_ADDR3_LEN, sFrame.pHdr->sA4.abyAddr4, // payload of beacon - (HANDLE)pRxPacket + (void *)pRxPacket ); } else { // DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"update bcn: RxChannel = : %d\n", byCurrChannel); - BSSbUpdateToBSSList((HANDLE)pDevice, + BSSbUpdateToBSSList((void *)pDevice, *sFrame.pqwTimestamp, *sFrame.pwBeaconInterval, *sFrame.pwCapInfo, @@ -1984,7 +1984,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) pBSSList, sFrame.len - WLAN_HDR_ADDR3_LEN, sFrame.pHdr->sA4.abyAddr4, // payload of probresponse - (HANDLE)pRxPacket + (void *)pRxPacket ); } @@ -2353,7 +2353,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) // set highest basic rate // s_vSetHighestBasicRate(pDevice, (PWLAN_IE_SUPP_RATES)pMgmt->abyCurrSuppRates); // Prepare beacon frame - bMgrPrepareBeaconToSend((HANDLE)pDevice, pMgmt); + bMgrPrepareBeaconToSend((void *)pDevice, pMgmt); // } }; } @@ -2386,7 +2386,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) -*/ void vMgrCreateOwnIBSS( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, OUT PCMD_STATUS pStatus ) { @@ -2629,7 +2629,7 @@ vMgrCreateOwnIBSS( pMgmt->eCurrState = WMAC_STATE_STARTED; // Prepare beacon to send - if (bMgrPrepareBeaconToSend((HANDLE)pDevice, pMgmt)) { + if (bMgrPrepareBeaconToSend((void *)pDevice, pMgmt)) { *pStatus = CMD_STATUS_SUCCESS; } @@ -2653,7 +2653,7 @@ vMgrCreateOwnIBSS( void vMgrJoinBSSBegin( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, OUT PCMD_STATUS pStatus ) { @@ -2802,12 +2802,12 @@ vMgrJoinBSSBegin( // Add current BSS to Candidate list // This should only works for WPA2 BSS, and WPA2 BSS check must be done before. if (pMgmt->eAuthenMode == WMAC_AUTH_WPA2) { - BOOL bResult = bAdd_PMKID_Candidate((HANDLE)pDevice, pMgmt->abyCurrBSSID, &pCurr->sRSNCapObj); + BOOL bResult = bAdd_PMKID_Candidate((void *)pDevice, pMgmt->abyCurrBSSID, &pCurr->sRSNCapObj); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"bAdd_PMKID_Candidate: 1(%d)\n", bResult); if (bResult == FALSE) { - vFlush_PMKID_Candidate((HANDLE)pDevice); + vFlush_PMKID_Candidate((void *)pDevice); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"vFlush_PMKID_Candidate: 4\n"); - bAdd_PMKID_Candidate((HANDLE)pDevice, pMgmt->abyCurrBSSID, &pCurr->sRSNCapObj); + bAdd_PMKID_Candidate((void *)pDevice, pMgmt->abyCurrBSSID, &pCurr->sRSNCapObj); } } @@ -2898,7 +2898,7 @@ vMgrJoinBSSBegin( // and if registry setting is short preamble we can turn on too. // Prepare beacon - bMgrPrepareBeaconToSend((HANDLE)pDevice, pMgmt); + bMgrPrepareBeaconToSend((void *)pDevice, pMgmt); } else { pMgmt->eCurrState = WMAC_STATE_IDLE; @@ -4378,9 +4378,9 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) // update or insert the bss - pBSSList = BSSpAddrIsInBSSList((HANDLE)pDevice, sFrame.pHdr->sA3.abyAddr3, sFrame.pSSID); + pBSSList = BSSpAddrIsInBSSList((void *)pDevice, sFrame.pHdr->sA3.abyAddr3, sFrame.pSSID); if (pBSSList) { - BSSbUpdateToBSSList((HANDLE)pDevice, + BSSbUpdateToBSSList((void *)pDevice, *sFrame.pqwTimestamp, *sFrame.pwBeaconInterval, *sFrame.pwCapInfo, @@ -4397,12 +4397,12 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) pBSSList, sFrame.len - WLAN_HDR_ADDR3_LEN, sFrame.pHdr->sA4.abyAddr4, // payload of probresponse - (HANDLE)pRxPacket + (void *)pRxPacket ); } else { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Probe resp/insert: RxChannel = : %d\n", byCurrChannel); - BSSbInsertToBSSList((HANDLE)pDevice, + BSSbInsertToBSSList((void *)pDevice, sFrame.pHdr->sA3.abyAddr3, *sFrame.pqwTimestamp, *sFrame.pwBeaconInterval, @@ -4418,7 +4418,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) sFrame.pIE_Quiet, sFrame.len - WLAN_HDR_ADDR3_LEN, sFrame.pHdr->sA4.abyAddr4, // payload of beacon - (HANDLE)pRxPacket + (void *)pRxPacket ); } return; @@ -4536,7 +4536,7 @@ s_vMgrRxProbeRequest( void vMgrRxManagePacket( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, IN PSRxMgmtPacket pRxPacket ) @@ -4685,7 +4685,7 @@ vMgrRxManagePacket( -*/ BOOL bMgrPrepareBeaconToSend( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt ) { @@ -4809,7 +4809,7 @@ s_vMgrLogStatus( -*/ BOOL bAdd_PMKID_Candidate ( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PBYTE pbyBSSID, IN PSRSNCapObject psRSNCapObj ) @@ -4870,7 +4870,7 @@ bAdd_PMKID_Candidate ( -*/ void vFlush_PMKID_Candidate ( - IN HANDLE hDeviceContext + IN void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6655/wmgr.h b/drivers/staging/vt6655/wmgr.h index 5eabc19..cee8602 100644 --- a/drivers/staging/vt6655/wmgr.h +++ b/drivers/staging/vt6655/wmgr.h @@ -401,36 +401,36 @@ typedef struct tagSMgmtObject void vMgrObjectInit( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); void vMgrTimerInit( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); void vMgrObjectReset( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); void vMgrAssocBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); void vMgrReAssocBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); void vMgrDisassocBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, IN PBYTE abyDestAddress, IN WORD wReason, @@ -439,26 +439,26 @@ vMgrDisassocBeginSta( void vMgrAuthenBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); void vMgrCreateOwnIBSS( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, OUT PCMD_STATUS pStatus ); void vMgrJoinBSSBegin( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, OUT PCMD_STATUS pStatus ); void vMgrRxManagePacket( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, IN PSRxMgmtPacket pRxPacket ); @@ -466,14 +466,14 @@ vMgrRxManagePacket( /* void vMgrScanBegin( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, OUT PCMD_STATUS pStatus ); */ void vMgrDeAuthenBeginSta( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt, IN PBYTE abyDestAddress, IN WORD wReason, @@ -482,21 +482,21 @@ vMgrDeAuthenBeginSta( BOOL bMgrPrepareBeaconToSend( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PSMgmtObject pMgmt ); BOOL bAdd_PMKID_Candidate ( - IN HANDLE hDeviceContext, + IN void *hDeviceContext, IN PBYTE pbyBSSID, IN PSRSNCapObject psRSNCapObj ); void vFlush_PMKID_Candidate ( - IN HANDLE hDeviceContext + IN void *hDeviceContext ); #endif // __WMGR_H__ diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c index 4e886c1..e5e618e 100644 --- a/drivers/staging/vt6655/wpactl.c +++ b/drivers/staging/vt6655/wpactl.c @@ -496,7 +496,7 @@ static int wpa_set_disassociate(PSDevice pDevice, spin_lock_irq(&pDevice->lock); if (pDevice->bLinkPass) { if (!memcmp(param->addr, pMgmt->abyCurrBSSID, 6)) - bScheduleCommand((HANDLE)pDevice, WLAN_CMD_DISASSOCIATE, NULL); + bScheduleCommand((void *)pDevice, WLAN_CMD_DISASSOCIATE, NULL); } spin_unlock_irq(&pDevice->lock); @@ -525,8 +525,8 @@ static int wpa_set_scan(PSDevice pDevice, int ret = 0; spin_lock_irq(&pDevice->lock); - BSSvClearBSSList((HANDLE)pDevice, pDevice->bLinkPass); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, NULL); + BSSvClearBSSList((void *)pDevice, pDevice->bLinkPass); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, NULL); spin_unlock_irq(&pDevice->lock); return ret; @@ -786,7 +786,7 @@ static int wpa_set_associate(PSDevice pDevice, memcpy(pMgmt->abyDesireBSSID, param->u.wpa_associate.bssid, 6); else { - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pItemSSID->abySSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, pItemSSID->abySSID); } if (param->u.wpa_associate.wpa_ie_len == 0) { @@ -870,11 +870,11 @@ if (!((pMgmt->eAuthenMode == WMAC_AUTH_SHAREKEY) || if (pCurr == NULL){ printk("wpa_set_associate---->hidden mode site survey before associate.......\n"); - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); + bScheduleCommand((void *) pDevice, WLAN_CMD_BSSID_SCAN, pMgmt->abyDesireSSID); }; } /****************************************************************/ - bScheduleCommand((HANDLE) pDevice, WLAN_CMD_SSID, NULL); + bScheduleCommand((void *) pDevice, WLAN_CMD_SSID, NULL); spin_unlock_irq(&pDevice->lock); return ret; -- cgit v0.10.2 From bf597e99d2fd4c5d25485fd4e4877bbae2be816c Mon Sep 17 00:00:00 2001 From: Daniel Walker Date: Tue, 11 May 2010 15:56:44 -0700 Subject: staging: dream: smd: remove all smd related code Part of this code is already in my MSM tree. I'll move the rest forward through my tree also. Signed-off-by: Daniel Walker CC: Pavel Machek CC: linux-arm-msm@vger.kernel.org Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dream/Kconfig b/drivers/staging/dream/Kconfig index 707cc71..0c30b19 100644 --- a/drivers/staging/dream/Kconfig +++ b/drivers/staging/dream/Kconfig @@ -3,7 +3,6 @@ config DREAM depends on MACH_TROUT if DREAM -source "drivers/staging/dream/smd/Kconfig" source "drivers/staging/dream/camera/Kconfig" diff --git a/drivers/staging/dream/Makefile b/drivers/staging/dream/Makefile index 43d1eec..fbea0ab 100644 --- a/drivers/staging/dream/Makefile +++ b/drivers/staging/dream/Makefile @@ -1,5 +1,5 @@ EXTRA_CFLAGS=-Idrivers/staging/dream/include -obj-$(CONFIG_MSM_ADSP) += qdsp5/ smd/ +obj-$(CONFIG_MSM_ADSP) += qdsp5/ obj-$(CONFIG_MSM_CAMERA) += camera/ obj-$(CONFIG_INPUT_GPIO) += gpio_axis.o gpio_event.o gpio_input.o gpio_matrix.o gpio_output.o diff --git a/drivers/staging/dream/smd/Kconfig b/drivers/staging/dream/smd/Kconfig deleted file mode 100644 index 17b8bdc..0000000 --- a/drivers/staging/dream/smd/Kconfig +++ /dev/null @@ -1,26 +0,0 @@ -config MSM_SMD - depends on ARCH_MSM - default y - bool "MSM Shared Memory Driver (SMD)" - help - Support for the shared memory interface between the apps - processor and the baseband processor. Provides access to - the "shared heap", as well as virtual serial channels - used to communicate with various services on the baseband - processor. - -config MSM_ONCRPCROUTER - depends on MSM_SMD - default y - bool "MSM ONCRPC router support" - help - Support for the MSM ONCRPC router for communication between - the ARM9 and ARM11 - -config MSM_RPCSERVERS - depends on MSM_ONCRPCROUTER - default y - bool "Kernel side RPC server bundle" - help - none - diff --git a/drivers/staging/dream/smd/Makefile b/drivers/staging/dream/smd/Makefile deleted file mode 100644 index 1c87618..0000000 --- a/drivers/staging/dream/smd/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -EXTRA_CFLAGS=-Idrivers/staging/dream/include -obj-$(CONFIG_MSM_SMD) += smd.o smd_tty.o smd_qmi.o -obj-$(CONFIG_MSM_ONCRPCROUTER) += smd_rpcrouter.o -obj-$(CONFIG_MSM_ONCRPCROUTER) += smd_rpcrouter_device.o -obj-$(CONFIG_MSM_ONCRPCROUTER) += smd_rpcrouter_servers.o -obj-$(CONFIG_MSM_RPCSERVERS) += rpc_server_dog_keepalive.o -obj-$(CONFIG_MSM_RPCSERVERS) += rpc_server_time_remote.o diff --git a/drivers/staging/dream/smd/rpc_server_dog_keepalive.c b/drivers/staging/dream/smd/rpc_server_dog_keepalive.c deleted file mode 100644 index b23fccf..0000000 --- a/drivers/staging/dream/smd/rpc_server_dog_keepalive.c +++ /dev/null @@ -1,68 +0,0 @@ -/* arch/arm/mach-msm/rpc_server_dog_keepalive.c - * - * Copyright (C) 2007 Google, Inc. - * Author: Iliyan Malchev - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include -#include -#include - -/* dog_keepalive server definitions */ - -#define DOG_KEEPALIVE_PROG 0x30000015 -#if CONFIG_MSM_AMSS_VERSION==6210 -#define DOG_KEEPALIVE_VERS 0 -#define RPC_DOG_KEEPALIVE_BEACON 1 -#elif (CONFIG_MSM_AMSS_VERSION==6220) || (CONFIG_MSM_AMSS_VERSION==6225) -#define DOG_KEEPALIVE_VERS 0x731fa727 -#define RPC_DOG_KEEPALIVE_BEACON 2 -#elif CONFIG_MSM_AMSS_VERSION==6350 -#define DOG_KEEPALIVE_VERS 0x00010000 -#define RPC_DOG_KEEPALIVE_BEACON 2 -#else -#error "Unsupported AMSS version" -#endif -#define RPC_DOG_KEEPALIVE_NULL 0 - - -/* TODO: Remove server registration with _VERS when modem is upated with _COMP*/ - -static int handle_rpc_call(struct msm_rpc_server *server, - struct rpc_request_hdr *req, unsigned len) -{ - switch (req->procedure) { - case RPC_DOG_KEEPALIVE_NULL: - return 0; - case RPC_DOG_KEEPALIVE_BEACON: - printk(KERN_INFO "DOG KEEPALIVE PING\n"); - return 0; - default: - return -ENODEV; - } -} - -static struct msm_rpc_server rpc_server = { - .prog = DOG_KEEPALIVE_PROG, - .vers = DOG_KEEPALIVE_VERS, - .rpc_call = handle_rpc_call, -}; - -static int __init rpc_server_init(void) -{ - /* Dual server registration to support backwards compatibility vers */ - return msm_rpc_create_server(&rpc_server); -} - - -module_init(rpc_server_init); diff --git a/drivers/staging/dream/smd/rpc_server_time_remote.c b/drivers/staging/dream/smd/rpc_server_time_remote.c deleted file mode 100644 index 2f90fc8..0000000 --- a/drivers/staging/dream/smd/rpc_server_time_remote.c +++ /dev/null @@ -1,77 +0,0 @@ -/* arch/arm/mach-msm/rpc_server_time_remote.c - * - * Copyright (C) 2007 Google, Inc. - * Author: Iliyan Malchev - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include -#include -#include - -/* time_remote_mtoa server definitions. */ - -#define TIME_REMOTE_MTOA_PROG 0x3000005d -#if CONFIG_MSM_AMSS_VERSION==6210 -#define TIME_REMOTE_MTOA_VERS 0 -#elif (CONFIG_MSM_AMSS_VERSION==6220) || (CONFIG_MSM_AMSS_VERSION==6225) -#define TIME_REMOTE_MTOA_VERS 0x9202a8e4 -#elif CONFIG_MSM_AMSS_VERSION==6350 -#define TIME_REMOTE_MTOA_VERS 0x00010000 -#else -#error "Unknown AMSS version" -#endif -#define RPC_TIME_REMOTE_MTOA_NULL 0 -#define RPC_TIME_TOD_SET_APPS_BASES 2 - -struct rpc_time_tod_set_apps_bases_args { - uint32_t tick; - uint64_t stamp; -}; - -static int handle_rpc_call(struct msm_rpc_server *server, - struct rpc_request_hdr *req, unsigned len) -{ - switch (req->procedure) { - case RPC_TIME_REMOTE_MTOA_NULL: - return 0; - - case RPC_TIME_TOD_SET_APPS_BASES: { - struct rpc_time_tod_set_apps_bases_args *args; - args = (struct rpc_time_tod_set_apps_bases_args *)(req + 1); - args->tick = be32_to_cpu(args->tick); - args->stamp = be64_to_cpu(args->stamp); - printk(KERN_INFO "RPC_TIME_TOD_SET_APPS_BASES:\n" - "\ttick = %d\n" - "\tstamp = %lld\n", - args->tick, args->stamp); - return 0; - } - default: - return -ENODEV; - } -} - -static struct msm_rpc_server rpc_server = { - .prog = TIME_REMOTE_MTOA_PROG, - .vers = TIME_REMOTE_MTOA_VERS, - .rpc_call = handle_rpc_call, -}; - -static int __init rpc_server_init(void) -{ - /* Dual server registration to support backwards compatibility vers */ - return msm_rpc_create_server(&rpc_server); -} - - -module_init(rpc_server_init); diff --git a/drivers/staging/dream/smd/smd.c b/drivers/staging/dream/smd/smd.c deleted file mode 100644 index 8f35be7..0000000 --- a/drivers/staging/dream/smd/smd.c +++ /dev/null @@ -1,1330 +0,0 @@ -/* arch/arm/mach-msm/smd.c - * - * Copyright (C) 2007 Google, Inc. - * Author: Brian Swetland - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "smd_private.h" -#include "../../../../arch/arm/mach-msm/proc_comm.h" - -void (*msm_hw_reset_hook)(void); - -#define MODULE_NAME "msm_smd" - -enum { - MSM_SMD_DEBUG = 1U << 0, - MSM_SMSM_DEBUG = 1U << 0, -}; - -static int msm_smd_debug_mask; - -module_param_named(debug_mask, msm_smd_debug_mask, - int, S_IRUGO | S_IWUSR | S_IWGRP); - -void *smem_find(unsigned id, unsigned size); -static void smd_diag(void); - -static unsigned last_heap_free = 0xffffffff; - -#define MSM_A2M_INT(n) (MSM_CSR_BASE + 0x400 + (n) * 4) - -static inline void notify_other_smsm(void) -{ - writel(1, MSM_A2M_INT(5)); -} - -static inline void notify_other_smd(void) -{ - writel(1, MSM_A2M_INT(0)); -} - -static void smd_diag(void) -{ - char *x; - - x = smem_find(ID_DIAG_ERR_MSG, SZ_DIAG_ERR_MSG); - if (x != 0) { - x[SZ_DIAG_ERR_MSG - 1] = 0; - pr_info("smem: DIAG '%s'\n", x); - } -} - -/* call when SMSM_RESET flag is set in the A9's smsm_state */ -static void handle_modem_crash(void) -{ - pr_err("ARM9 has CRASHED\n"); - smd_diag(); - - /* hard reboot if possible */ - if (msm_hw_reset_hook) - msm_hw_reset_hook(); - - /* in this case the modem or watchdog should reboot us */ - for (;;) - ; -} - -extern int (*msm_check_for_modem_crash)(void); - -static int check_for_modem_crash(void) -{ - struct smsm_shared *smsm; - - smsm = smem_find(ID_SHARED_STATE, 2 * sizeof(struct smsm_shared)); - - /* if the modem's not ready yet, we have to hope for the best */ - if (!smsm) - return 0; - - if (smsm[1].state & SMSM_RESET) { - handle_modem_crash(); - return -1; - } else { - return 0; - } -} - -#define SMD_SS_CLOSED 0x00000000 -#define SMD_SS_OPENING 0x00000001 -#define SMD_SS_OPENED 0x00000002 -#define SMD_SS_FLUSHING 0x00000003 -#define SMD_SS_CLOSING 0x00000004 -#define SMD_SS_RESET 0x00000005 -#define SMD_SS_RESET_OPENING 0x00000006 - -#define SMD_BUF_SIZE 8192 -#define SMD_CHANNELS 64 - -#define SMD_HEADER_SIZE 20 - - -/* the spinlock is used to synchronize between the -** irq handler and code that mutates the channel -** list or fiddles with channel state -*/ -static DEFINE_SPINLOCK(smd_lock); -static DEFINE_SPINLOCK(smem_lock); - -/* the mutex is used during open() and close() -** operations to avoid races while creating or -** destroying smd_channel structures -*/ -static DEFINE_MUTEX(smd_creation_mutex); - -static int smd_initialized; - -struct smd_alloc_elm { - char name[20]; - uint32_t cid; - uint32_t ctype; - uint32_t ref_count; -}; - -struct smd_half_channel { - unsigned state; - unsigned char fDSR; - unsigned char fCTS; - unsigned char fCD; - unsigned char fRI; - unsigned char fHEAD; - unsigned char fTAIL; - unsigned char fSTATE; - unsigned char fUNUSED; - unsigned tail; - unsigned head; - unsigned char data[SMD_BUF_SIZE]; -}; - -struct smd_shared { - struct smd_half_channel ch0; - struct smd_half_channel ch1; -}; - -struct smd_channel { - volatile struct smd_half_channel *send; - volatile struct smd_half_channel *recv; - struct list_head ch_list; - - unsigned current_packet; - unsigned n; - void *priv; - void (*notify)(void *priv, unsigned flags); - - int (*read)(smd_channel_t *ch, void *data, int len); - int (*write)(smd_channel_t *ch, const void *data, int len); - int (*read_avail)(smd_channel_t *ch); - int (*write_avail)(smd_channel_t *ch); - - void (*update_state)(smd_channel_t *ch); - unsigned last_state; - - char name[32]; - struct platform_device pdev; -}; - -static LIST_HEAD(smd_ch_closed_list); -static LIST_HEAD(smd_ch_list); - -static unsigned char smd_ch_allocated[64]; -static struct work_struct probe_work; - -static void smd_alloc_channel(const char *name, uint32_t cid, uint32_t type); - -static void smd_channel_probe_worker(struct work_struct *work) -{ - struct smd_alloc_elm *shared; - unsigned n; - - shared = smem_find(ID_CH_ALLOC_TBL, sizeof(*shared) * 64); - - for (n = 0; n < 64; n++) { - if (smd_ch_allocated[n]) - continue; - if (!shared[n].ref_count) - continue; - if (!shared[n].name[0]) - continue; - smd_alloc_channel(shared[n].name, - shared[n].cid, - shared[n].ctype); - smd_ch_allocated[n] = 1; - } -} - -static char *chstate(unsigned n) -{ - switch (n) { - case SMD_SS_CLOSED: - return "CLOSED"; - case SMD_SS_OPENING: - return "OPENING"; - case SMD_SS_OPENED: - return "OPENED"; - case SMD_SS_FLUSHING: - return "FLUSHING"; - case SMD_SS_CLOSING: - return "CLOSING"; - case SMD_SS_RESET: - return "RESET"; - case SMD_SS_RESET_OPENING: - return "ROPENING"; - default: - return "UNKNOWN"; - } -} - -/* how many bytes are available for reading */ -static int smd_stream_read_avail(struct smd_channel *ch) -{ - return (ch->recv->head - ch->recv->tail) & (SMD_BUF_SIZE - 1); -} - -/* how many bytes we are free to write */ -static int smd_stream_write_avail(struct smd_channel *ch) -{ - return (SMD_BUF_SIZE - 1) - - ((ch->send->head - ch->send->tail) & (SMD_BUF_SIZE - 1)); -} - -static int smd_packet_read_avail(struct smd_channel *ch) -{ - if (ch->current_packet) { - int n = smd_stream_read_avail(ch); - if (n > ch->current_packet) - n = ch->current_packet; - return n; - } else { - return 0; - } -} - -static int smd_packet_write_avail(struct smd_channel *ch) -{ - int n = smd_stream_write_avail(ch); - return n > SMD_HEADER_SIZE ? n - SMD_HEADER_SIZE : 0; -} - -static int ch_is_open(struct smd_channel *ch) -{ - return (ch->recv->state == SMD_SS_OPENED) && - (ch->send->state == SMD_SS_OPENED); -} - -/* provide a pointer and length to readable data in the fifo */ -static unsigned ch_read_buffer(struct smd_channel *ch, void **ptr) -{ - unsigned head = ch->recv->head; - unsigned tail = ch->recv->tail; - *ptr = (void *) (ch->recv->data + tail); - - if (tail <= head) - return head - tail; - else - return SMD_BUF_SIZE - tail; -} - -/* advance the fifo read pointer after data from ch_read_buffer is consumed */ -static void ch_read_done(struct smd_channel *ch, unsigned count) -{ - BUG_ON(count > smd_stream_read_avail(ch)); - ch->recv->tail = (ch->recv->tail + count) & (SMD_BUF_SIZE - 1); - ch->recv->fTAIL = 1; -} - -/* basic read interface to ch_read_{buffer,done} used -** by smd_*_read() and update_packet_state() -** will read-and-discard if the _data pointer is null -*/ -static int ch_read(struct smd_channel *ch, void *_data, int len) -{ - void *ptr; - unsigned n; - unsigned char *data = _data; - int orig_len = len; - - while (len > 0) { - n = ch_read_buffer(ch, &ptr); - if (n == 0) - break; - - if (n > len) - n = len; - if (_data) - memcpy(data, ptr, n); - - data += n; - len -= n; - ch_read_done(ch, n); - } - - return orig_len - len; -} - -static void update_stream_state(struct smd_channel *ch) -{ - /* streams have no special state requiring updating */ -} - -static void update_packet_state(struct smd_channel *ch) -{ - unsigned hdr[5]; - int r; - - /* can't do anything if we're in the middle of a packet */ - if (ch->current_packet != 0) - return; - - /* don't bother unless we can get the full header */ - if (smd_stream_read_avail(ch) < SMD_HEADER_SIZE) - return; - - r = ch_read(ch, hdr, SMD_HEADER_SIZE); - BUG_ON(r != SMD_HEADER_SIZE); - - ch->current_packet = hdr[0]; -} - -/* provide a pointer and length to next free space in the fifo */ -static unsigned ch_write_buffer(struct smd_channel *ch, void **ptr) -{ - unsigned head = ch->send->head; - unsigned tail = ch->send->tail; - *ptr = (void *) (ch->send->data + head); - - if (head < tail) { - return tail - head - 1; - } else { - if (tail == 0) - return SMD_BUF_SIZE - head - 1; - else - return SMD_BUF_SIZE - head; - } -} - -/* advace the fifo write pointer after freespace - * from ch_write_buffer is filled - */ -static void ch_write_done(struct smd_channel *ch, unsigned count) -{ - BUG_ON(count > smd_stream_write_avail(ch)); - ch->send->head = (ch->send->head + count) & (SMD_BUF_SIZE - 1); - ch->send->fHEAD = 1; -} - -static void hc_set_state(volatile struct smd_half_channel *hc, unsigned n) -{ - if (n == SMD_SS_OPENED) { - hc->fDSR = 1; - hc->fCTS = 1; - hc->fCD = 1; - } else { - hc->fDSR = 0; - hc->fCTS = 0; - hc->fCD = 0; - } - hc->state = n; - hc->fSTATE = 1; - notify_other_smd(); -} - -static void do_smd_probe(void) -{ - struct smem_shared *shared = (void *) MSM_SHARED_RAM_BASE; - if (shared->heap_info.free_offset != last_heap_free) { - last_heap_free = shared->heap_info.free_offset; - schedule_work(&probe_work); - } -} - -static void smd_state_change(struct smd_channel *ch, - unsigned last, unsigned next) -{ - ch->last_state = next; - - pr_info("SMD: ch %d %s -> %s\n", ch->n, - chstate(last), chstate(next)); - - switch (next) { - case SMD_SS_OPENING: - ch->recv->tail = 0; - case SMD_SS_OPENED: - if (ch->send->state != SMD_SS_OPENED) - hc_set_state(ch->send, SMD_SS_OPENED); - ch->notify(ch->priv, SMD_EVENT_OPEN); - break; - case SMD_SS_FLUSHING: - case SMD_SS_RESET: - /* we should force them to close? */ - default: - ch->notify(ch->priv, SMD_EVENT_CLOSE); - } -} - -static irqreturn_t smd_irq_handler(int irq, void *data) -{ - unsigned long flags; - struct smd_channel *ch; - int do_notify = 0; - unsigned ch_flags; - unsigned tmp; - - spin_lock_irqsave(&smd_lock, flags); - list_for_each_entry(ch, &smd_ch_list, ch_list) { - ch_flags = 0; - if (ch_is_open(ch)) { - if (ch->recv->fHEAD) { - ch->recv->fHEAD = 0; - ch_flags |= 1; - do_notify |= 1; - } - if (ch->recv->fTAIL) { - ch->recv->fTAIL = 0; - ch_flags |= 2; - do_notify |= 1; - } - if (ch->recv->fSTATE) { - ch->recv->fSTATE = 0; - ch_flags |= 4; - do_notify |= 1; - } - } - tmp = ch->recv->state; - if (tmp != ch->last_state) - smd_state_change(ch, ch->last_state, tmp); - if (ch_flags) { - ch->update_state(ch); - ch->notify(ch->priv, SMD_EVENT_DATA); - } - } - if (do_notify) - notify_other_smd(); - spin_unlock_irqrestore(&smd_lock, flags); - do_smd_probe(); - return IRQ_HANDLED; -} - -static void smd_fake_irq_handler(unsigned long arg) -{ - smd_irq_handler(0, NULL); -} - -static DECLARE_TASKLET(smd_fake_irq_tasklet, smd_fake_irq_handler, 0); - -void smd_sleep_exit(void) -{ - unsigned long flags; - struct smd_channel *ch; - unsigned tmp; - int need_int = 0; - - spin_lock_irqsave(&smd_lock, flags); - list_for_each_entry(ch, &smd_ch_list, ch_list) { - if (ch_is_open(ch)) { - if (ch->recv->fHEAD) { - if (msm_smd_debug_mask & MSM_SMD_DEBUG) - pr_info("smd_sleep_exit ch %d fHEAD " - "%x %x %x\n", - ch->n, ch->recv->fHEAD, - ch->recv->head, ch->recv->tail); - need_int = 1; - break; - } - if (ch->recv->fTAIL) { - if (msm_smd_debug_mask & MSM_SMD_DEBUG) - pr_info("smd_sleep_exit ch %d fTAIL " - "%x %x %x\n", - ch->n, ch->recv->fTAIL, - ch->send->head, ch->send->tail); - need_int = 1; - break; - } - if (ch->recv->fSTATE) { - if (msm_smd_debug_mask & MSM_SMD_DEBUG) - pr_info("smd_sleep_exit ch %d fSTATE %x" - "\n", ch->n, ch->recv->fSTATE); - need_int = 1; - break; - } - tmp = ch->recv->state; - if (tmp != ch->last_state) { - if (msm_smd_debug_mask & MSM_SMD_DEBUG) - pr_info("smd_sleep_exit ch %d " - "state %x != %x\n", - ch->n, tmp, ch->last_state); - need_int = 1; - break; - } - } - } - spin_unlock_irqrestore(&smd_lock, flags); - do_smd_probe(); - if (need_int) { - if (msm_smd_debug_mask & MSM_SMD_DEBUG) - pr_info("smd_sleep_exit need interrupt\n"); - tasklet_schedule(&smd_fake_irq_tasklet); - } -} - - -void smd_kick(smd_channel_t *ch) -{ - unsigned long flags; - unsigned tmp; - - spin_lock_irqsave(&smd_lock, flags); - ch->update_state(ch); - tmp = ch->recv->state; - if (tmp != ch->last_state) { - ch->last_state = tmp; - if (tmp == SMD_SS_OPENED) - ch->notify(ch->priv, SMD_EVENT_OPEN); - else - ch->notify(ch->priv, SMD_EVENT_CLOSE); - } - ch->notify(ch->priv, SMD_EVENT_DATA); - notify_other_smd(); - spin_unlock_irqrestore(&smd_lock, flags); -} - -static int smd_is_packet(int chn) -{ - if ((chn > 4) || (chn == 1)) - return 1; - else - return 0; -} - -static int smd_stream_write(smd_channel_t *ch, const void *_data, int len) -{ - void *ptr; - const unsigned char *buf = _data; - unsigned xfer; - int orig_len = len; - - if (len < 0) - return -EINVAL; - - while ((xfer = ch_write_buffer(ch, &ptr)) != 0) { - if (!ch_is_open(ch)) - break; - if (xfer > len) - xfer = len; - memcpy(ptr, buf, xfer); - ch_write_done(ch, xfer); - len -= xfer; - buf += xfer; - if (len == 0) - break; - } - - notify_other_smd(); - - return orig_len - len; -} - -static int smd_packet_write(smd_channel_t *ch, const void *_data, int len) -{ - unsigned hdr[5]; - - if (len < 0) - return -EINVAL; - - if (smd_stream_write_avail(ch) < (len + SMD_HEADER_SIZE)) - return -ENOMEM; - - hdr[0] = len; - hdr[1] = hdr[2] = hdr[3] = hdr[4] = 0; - - smd_stream_write(ch, hdr, sizeof(hdr)); - smd_stream_write(ch, _data, len); - - return len; -} - -static int smd_stream_read(smd_channel_t *ch, void *data, int len) -{ - int r; - - if (len < 0) - return -EINVAL; - - r = ch_read(ch, data, len); - if (r > 0) - notify_other_smd(); - - return r; -} - -static int smd_packet_read(smd_channel_t *ch, void *data, int len) -{ - unsigned long flags; - int r; - - if (len < 0) - return -EINVAL; - - if (len > ch->current_packet) - len = ch->current_packet; - - r = ch_read(ch, data, len); - if (r > 0) - notify_other_smd(); - - spin_lock_irqsave(&smd_lock, flags); - ch->current_packet -= r; - update_packet_state(ch); - spin_unlock_irqrestore(&smd_lock, flags); - - return r; -} - -static void smd_alloc_channel(const char *name, uint32_t cid, uint32_t type) -{ - struct smd_channel *ch; - struct smd_shared *shared; - - shared = smem_alloc(ID_SMD_CHANNELS + cid, sizeof(*shared)); - if (!shared) { - pr_err("smd_alloc_channel() cid %d does not exist\n", cid); - return; - } - - ch = kzalloc(sizeof(struct smd_channel), GFP_KERNEL); - if (ch == 0) { - pr_err("smd_alloc_channel() out of memory\n"); - return; - } - - ch->send = &shared->ch0; - ch->recv = &shared->ch1; - ch->n = cid; - - if (smd_is_packet(cid)) { - ch->read = smd_packet_read; - ch->write = smd_packet_write; - ch->read_avail = smd_packet_read_avail; - ch->write_avail = smd_packet_write_avail; - ch->update_state = update_packet_state; - } else { - ch->read = smd_stream_read; - ch->write = smd_stream_write; - ch->read_avail = smd_stream_read_avail; - ch->write_avail = smd_stream_write_avail; - ch->update_state = update_stream_state; - } - - memcpy(ch->name, "SMD_", 4); - memcpy(ch->name + 4, name, 20); - ch->name[23] = 0; - ch->pdev.name = ch->name; - ch->pdev.id = -1; - - pr_info("smd_alloc_channel() '%s' cid=%d, shared=%p\n", - ch->name, ch->n, shared); - - mutex_lock(&smd_creation_mutex); - list_add(&ch->ch_list, &smd_ch_closed_list); - mutex_unlock(&smd_creation_mutex); - - platform_device_register(&ch->pdev); -} - -static void do_nothing_notify(void *priv, unsigned flags) -{ -} - -struct smd_channel *smd_get_channel(const char *name) -{ - struct smd_channel *ch; - - mutex_lock(&smd_creation_mutex); - list_for_each_entry(ch, &smd_ch_closed_list, ch_list) { - if (!strcmp(name, ch->name)) { - list_del(&ch->ch_list); - mutex_unlock(&smd_creation_mutex); - return ch; - } - } - mutex_unlock(&smd_creation_mutex); - - return NULL; -} - -int smd_open(const char *name, smd_channel_t **_ch, - void *priv, void (*notify)(void *, unsigned)) -{ - struct smd_channel *ch; - unsigned long flags; - - if (smd_initialized == 0) { - pr_info("smd_open() before smd_init()\n"); - return -ENODEV; - } - - ch = smd_get_channel(name); - if (!ch) - return -ENODEV; - - if (notify == 0) - notify = do_nothing_notify; - - ch->notify = notify; - ch->current_packet = 0; - ch->last_state = SMD_SS_CLOSED; - ch->priv = priv; - - *_ch = ch; - - spin_lock_irqsave(&smd_lock, flags); - list_add(&ch->ch_list, &smd_ch_list); - - /* If the remote side is CLOSING, we need to get it to - * move to OPENING (which we'll do by moving from CLOSED to - * OPENING) and then get it to move from OPENING to - * OPENED (by doing the same state change ourselves). - * - * Otherwise, it should be OPENING and we can move directly - * to OPENED so that it will follow. - */ - if (ch->recv->state == SMD_SS_CLOSING) { - ch->send->head = 0; - hc_set_state(ch->send, SMD_SS_OPENING); - } else { - hc_set_state(ch->send, SMD_SS_OPENED); - } - spin_unlock_irqrestore(&smd_lock, flags); - smd_kick(ch); - - return 0; -} - -int smd_close(smd_channel_t *ch) -{ - unsigned long flags; - - pr_info("smd_close(%p)\n", ch); - - if (ch == 0) - return -1; - - spin_lock_irqsave(&smd_lock, flags); - ch->notify = do_nothing_notify; - list_del(&ch->ch_list); - hc_set_state(ch->send, SMD_SS_CLOSED); - spin_unlock_irqrestore(&smd_lock, flags); - - mutex_lock(&smd_creation_mutex); - list_add(&ch->ch_list, &smd_ch_closed_list); - mutex_unlock(&smd_creation_mutex); - - return 0; -} - -int smd_read(smd_channel_t *ch, void *data, int len) -{ - return ch->read(ch, data, len); -} - -int smd_write(smd_channel_t *ch, const void *data, int len) -{ - return ch->write(ch, data, len); -} - -int smd_read_avail(smd_channel_t *ch) -{ - return ch->read_avail(ch); -} - -int smd_write_avail(smd_channel_t *ch) -{ - return ch->write_avail(ch); -} - -int smd_wait_until_readable(smd_channel_t *ch, int bytes) -{ - return -1; -} - -int smd_wait_until_writable(smd_channel_t *ch, int bytes) -{ - return -1; -} - -int smd_cur_packet_size(smd_channel_t *ch) -{ - return ch->current_packet; -} - - -/* ------------------------------------------------------------------------- */ - -void *smem_alloc(unsigned id, unsigned size) -{ - return smem_find(id, size); -} - -static void *_smem_find(unsigned id, unsigned *size) -{ - struct smem_shared *shared = (void *) MSM_SHARED_RAM_BASE; - struct smem_heap_entry *toc = shared->heap_toc; - - if (id >= SMEM_NUM_ITEMS) - return 0; - - if (toc[id].allocated) { - *size = toc[id].size; - return (void *) (MSM_SHARED_RAM_BASE + toc[id].offset); - } - - return 0; -} - -void *smem_find(unsigned id, unsigned size_in) -{ - unsigned size; - void *ptr; - - ptr = _smem_find(id, &size); - if (!ptr) - return 0; - - size_in = ALIGN(size_in, 8); - if (size_in != size) { - pr_err("smem_find(%d, %d): wrong size %d\n", - id, size_in, size); - return 0; - } - - return ptr; -} - -static irqreturn_t smsm_irq_handler(int irq, void *data) -{ - unsigned long flags; - struct smsm_shared *smsm; - - spin_lock_irqsave(&smem_lock, flags); - smsm = smem_alloc(ID_SHARED_STATE, - 2 * sizeof(struct smsm_shared)); - - if (smsm == 0) { - pr_info("\n"); - } else { - unsigned apps = smsm[0].state; - unsigned modm = smsm[1].state; - - if (msm_smd_debug_mask & MSM_SMSM_DEBUG) - pr_info("\n", apps, modm); - if (modm & SMSM_RESET) { - handle_modem_crash(); - } else { - apps |= SMSM_INIT; - if (modm & SMSM_SMDINIT) - apps |= SMSM_SMDINIT; - if (modm & SMSM_RPCINIT) - apps |= SMSM_RPCINIT; - } - - if (smsm[0].state != apps) { - if (msm_smd_debug_mask & MSM_SMSM_DEBUG) - pr_info("\n", apps); - smsm[0].state = apps; - do_smd_probe(); - notify_other_smsm(); - } - } - spin_unlock_irqrestore(&smem_lock, flags); - return IRQ_HANDLED; -} - -int smsm_change_state(uint32_t clear_mask, uint32_t set_mask) -{ - unsigned long flags; - struct smsm_shared *smsm; - - spin_lock_irqsave(&smem_lock, flags); - - smsm = smem_alloc(ID_SHARED_STATE, - 2 * sizeof(struct smsm_shared)); - - if (smsm) { - if (smsm[1].state & SMSM_RESET) - handle_modem_crash(); - smsm[0].state = (smsm[0].state & ~clear_mask) | set_mask; - if (msm_smd_debug_mask & MSM_SMSM_DEBUG) - pr_info("smsm_change_state %x\n", - smsm[0].state); - notify_other_smsm(); - } - - spin_unlock_irqrestore(&smem_lock, flags); - - if (smsm == NULL) { - pr_err("smsm_change_state \n"); - return -EIO; - } - return 0; -} - -uint32_t smsm_get_state(void) -{ - unsigned long flags; - struct smsm_shared *smsm; - uint32_t rv; - - spin_lock_irqsave(&smem_lock, flags); - - smsm = smem_alloc(ID_SHARED_STATE, - 2 * sizeof(struct smsm_shared)); - - if (smsm) - rv = smsm[1].state; - else - rv = 0; - - if (rv & SMSM_RESET) - handle_modem_crash(); - - spin_unlock_irqrestore(&smem_lock, flags); - - if (smsm == NULL) - pr_err("smsm_get_state \n"); - return rv; -} - -int smsm_set_sleep_duration(uint32_t delay) -{ - uint32_t *ptr; - - ptr = smem_alloc(SMEM_SMSM_SLEEP_DELAY, sizeof(*ptr)); - if (ptr == NULL) { - pr_err("smsm_set_sleep_duration \n"); - return -EIO; - } - if (msm_smd_debug_mask & MSM_SMSM_DEBUG) - pr_info("smsm_set_sleep_duration %d -> %d\n", - *ptr, delay); - *ptr = delay; - return 0; -} - -int smsm_set_interrupt_info(struct smsm_interrupt_info *info) -{ - struct smsm_interrupt_info *ptr; - - ptr = smem_alloc(SMEM_SMSM_INT_INFO, sizeof(*ptr)); - if (ptr == NULL) { - pr_err("smsm_set_sleep_duration \n"); - return -EIO; - } - if (msm_smd_debug_mask & MSM_SMSM_DEBUG) - pr_info("smsm_set_interrupt_info %x %x -> %x %x\n", - ptr->aArm_en_mask, ptr->aArm_interrupts_pending, - info->aArm_en_mask, info->aArm_interrupts_pending); - *ptr = *info; - return 0; -} - -#define MAX_NUM_SLEEP_CLIENTS 64 -#define MAX_SLEEP_NAME_LEN 8 - -#define NUM_GPIO_INT_REGISTERS 6 -#define GPIO_SMEM_NUM_GROUPS 2 -#define GPIO_SMEM_MAX_PC_INTERRUPTS 8 - -struct tramp_gpio_save { - unsigned int enable; - unsigned int detect; - unsigned int polarity; -}; - -struct tramp_gpio_smem { - uint16_t num_fired[GPIO_SMEM_NUM_GROUPS]; - uint16_t fired[GPIO_SMEM_NUM_GROUPS][GPIO_SMEM_MAX_PC_INTERRUPTS]; - uint32_t enabled[NUM_GPIO_INT_REGISTERS]; - uint32_t detection[NUM_GPIO_INT_REGISTERS]; - uint32_t polarity[NUM_GPIO_INT_REGISTERS]; -}; - - -void smsm_print_sleep_info(void) -{ - unsigned long flags; - uint32_t *ptr; - struct tramp_gpio_smem *gpio; - struct smsm_interrupt_info *int_info; - - - spin_lock_irqsave(&smem_lock, flags); - - ptr = smem_alloc(SMEM_SMSM_SLEEP_DELAY, sizeof(*ptr)); - if (ptr) - pr_info("SMEM_SMSM_SLEEP_DELAY: %x\n", *ptr); - - ptr = smem_alloc(SMEM_SMSM_LIMIT_SLEEP, sizeof(*ptr)); - if (ptr) - pr_info("SMEM_SMSM_LIMIT_SLEEP: %x\n", *ptr); - - ptr = smem_alloc(SMEM_SLEEP_POWER_COLLAPSE_DISABLED, sizeof(*ptr)); - if (ptr) - pr_info("SMEM_SLEEP_POWER_COLLAPSE_DISABLED: %x\n", *ptr); - - int_info = smem_alloc(SMEM_SMSM_INT_INFO, sizeof(*int_info)); - if (int_info) - pr_info("SMEM_SMSM_INT_INFO %x %x %x\n", - int_info->aArm_en_mask, - int_info->aArm_interrupts_pending, - int_info->aArm_wakeup_reason); - - gpio = smem_alloc(SMEM_GPIO_INT, sizeof(*gpio)); - if (gpio) { - int i; - for (i = 0; i < NUM_GPIO_INT_REGISTERS; i++) - pr_info("SMEM_GPIO_INT: %d: e %x d %x p %x\n", - i, gpio->enabled[i], gpio->detection[i], - gpio->polarity[i]); - - for (i = 0; i < GPIO_SMEM_NUM_GROUPS; i++) - pr_info("SMEM_GPIO_INT: %d: f %d: %d %d...\n", - i, gpio->num_fired[i], gpio->fired[i][0], - gpio->fired[i][1]); - } - - spin_unlock_irqrestore(&smem_lock, flags); -} - -int smd_core_init(void) -{ - int r; - pr_info("smd_core_init()\n"); - - r = request_irq(INT_A9_M2A_0, smd_irq_handler, - IRQF_TRIGGER_RISING, "smd_dev", 0); - if (r < 0) - return r; - r = enable_irq_wake(INT_A9_M2A_0); - if (r < 0) - pr_err("smd_core_init: enable_irq_wake failed for A9_M2A_0\n"); - - r = request_irq(INT_A9_M2A_5, smsm_irq_handler, - IRQF_TRIGGER_RISING, "smsm_dev", 0); - if (r < 0) { - free_irq(INT_A9_M2A_0, 0); - return r; - } - r = enable_irq_wake(INT_A9_M2A_5); - if (r < 0) - pr_err("smd_core_init: enable_irq_wake failed for A9_M2A_5\n"); - - /* we may have missed a signal while booting -- fake - * an interrupt to make sure we process any existing - * state - */ - smsm_irq_handler(0, 0); - - pr_info("smd_core_init() done\n"); - - return 0; -} - -#if defined(CONFIG_DEBUG_FS) - -static int dump_ch(char *buf, int max, int n, - struct smd_half_channel *s, - struct smd_half_channel *r) -{ - return scnprintf( - buf, max, - "ch%02d:" - " %8s(%04d/%04d) %c%c%c%c%c%c%c <->" - " %8s(%04d/%04d) %c%c%c%c%c%c%c\n", n, - chstate(s->state), s->tail, s->head, - s->fDSR ? 'D' : 'd', - s->fCTS ? 'C' : 'c', - s->fCD ? 'C' : 'c', - s->fRI ? 'I' : 'i', - s->fHEAD ? 'W' : 'w', - s->fTAIL ? 'R' : 'r', - s->fSTATE ? 'S' : 's', - chstate(r->state), r->tail, r->head, - r->fDSR ? 'D' : 'd', - r->fCTS ? 'R' : 'r', - r->fCD ? 'C' : 'c', - r->fRI ? 'I' : 'i', - r->fHEAD ? 'W' : 'w', - r->fTAIL ? 'R' : 'r', - r->fSTATE ? 'S' : 's' - ); -} - -static int debug_read_stat(char *buf, int max) -{ - struct smsm_shared *smsm; - char *msg; - int i = 0; - - smsm = smem_find(ID_SHARED_STATE, - 2 * sizeof(struct smsm_shared)); - - msg = smem_find(ID_DIAG_ERR_MSG, SZ_DIAG_ERR_MSG); - - if (smsm) { - if (smsm[1].state & SMSM_RESET) - i += scnprintf(buf + i, max - i, - "smsm: ARM9 HAS CRASHED\n"); - i += scnprintf(buf + i, max - i, "smsm: a9: %08x a11: %08x\n", - smsm[0].state, smsm[1].state); - } else { - i += scnprintf(buf + i, max - i, "smsm: cannot find\n"); - } - if (msg) { - msg[SZ_DIAG_ERR_MSG - 1] = 0; - i += scnprintf(buf + i, max - i, "diag: '%s'\n", msg); - } - return i; -} - -static int debug_read_mem(char *buf, int max) -{ - unsigned n; - struct smem_shared *shared = (void *) MSM_SHARED_RAM_BASE; - struct smem_heap_entry *toc = shared->heap_toc; - int i = 0; - - i += scnprintf(buf + i, max - i, - "heap: init=%d free=%d remain=%d\n", - shared->heap_info.initialized, - shared->heap_info.free_offset, - shared->heap_info.heap_remaining); - - for (n = 0; n < SMEM_NUM_ITEMS; n++) { - if (toc[n].allocated == 0) - continue; - i += scnprintf(buf + i, max - i, - "%04d: offsed %08x size %08x\n", - n, toc[n].offset, toc[n].size); - } - return i; -} - -static int debug_read_ch(char *buf, int max) -{ - struct smd_shared *shared; - int n, i = 0; - - for (n = 0; n < SMD_CHANNELS; n++) { - shared = smem_find(ID_SMD_CHANNELS + n, - sizeof(struct smd_shared)); - if (shared == 0) - continue; - i += dump_ch(buf + i, max - i, n, &shared->ch0, &shared->ch1); - } - - return i; -} - -static int debug_read_version(char *buf, int max) -{ - struct smem_shared *shared = (void *) MSM_SHARED_RAM_BASE; - unsigned version = shared->version[VERSION_MODEM]; - return sprintf(buf, "%d.%d\n", version >> 16, version & 0xffff); -} - -static int debug_read_build_id(char *buf, int max) -{ - unsigned size; - void *data; - - data = _smem_find(SMEM_HW_SW_BUILD_ID, &size); - if (!data) - return 0; - - if (size >= max) - size = max; - memcpy(buf, data, size); - - return size; -} - -static int debug_read_alloc_tbl(char *buf, int max) -{ - struct smd_alloc_elm *shared; - int n, i = 0; - - shared = smem_find(ID_CH_ALLOC_TBL, sizeof(*shared) * 64); - - for (n = 0; n < 64; n++) { - if (shared[n].ref_count == 0) - continue; - i += scnprintf(buf + i, max - i, - "%03d: %20s cid=%02d ctype=%d ref_count=%d\n", - n, shared[n].name, shared[n].cid, - shared[n].ctype, shared[n].ref_count); - } - - return i; -} - -static int debug_boom(char *buf, int max) -{ - unsigned ms = 5000; - msm_proc_comm(PCOM_RESET_MODEM, &ms, 0); - return 0; -} - -#define DEBUG_BUFMAX 4096 -static char debug_buffer[DEBUG_BUFMAX]; - -static ssize_t debug_read(struct file *file, char __user *buf, - size_t count, loff_t *ppos) -{ - int (*fill)(char *buf, int max) = file->private_data; - int bsize = fill(debug_buffer, DEBUG_BUFMAX); - return simple_read_from_buffer(buf, count, ppos, debug_buffer, bsize); -} - -static int debug_open(struct inode *inode, struct file *file) -{ - file->private_data = inode->i_private; - return 0; -} - -static const struct file_operations debug_ops = { - .read = debug_read, - .open = debug_open, -}; - -static void debug_create(const char *name, mode_t mode, - struct dentry *dent, - int (*fill)(char *buf, int max)) -{ - debugfs_create_file(name, mode, dent, fill, &debug_ops); -} - -static void smd_debugfs_init(void) -{ - struct dentry *dent; - - dent = debugfs_create_dir("smd", 0); - if (IS_ERR(dent)) - return; - - debug_create("ch", 0444, dent, debug_read_ch); - debug_create("stat", 0444, dent, debug_read_stat); - debug_create("mem", 0444, dent, debug_read_mem); - debug_create("version", 0444, dent, debug_read_version); - debug_create("tbl", 0444, dent, debug_read_alloc_tbl); - debug_create("build", 0444, dent, debug_read_build_id); - debug_create("boom", 0444, dent, debug_boom); -} -#else -static void smd_debugfs_init(void) {} -#endif - -static int __init msm_smd_probe(struct platform_device *pdev) -{ - pr_info("smd_init()\n"); - - INIT_WORK(&probe_work, smd_channel_probe_worker); - - if (smd_core_init()) { - pr_err("smd_core_init() failed\n"); - return -1; - } - - do_smd_probe(); - - msm_check_for_modem_crash = check_for_modem_crash; - - smd_debugfs_init(); - smd_initialized = 1; - - return 0; -} - -static struct platform_driver msm_smd_driver = { - .probe = msm_smd_probe, - .driver = { - .name = MODULE_NAME, - .owner = THIS_MODULE, - }, -}; - -static int __init msm_smd_init(void) -{ - return platform_driver_register(&msm_smd_driver); -} - -module_init(msm_smd_init); - -MODULE_DESCRIPTION("MSM Shared Memory Core"); -MODULE_AUTHOR("Brian Swetland "); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/dream/smd/smd_private.h b/drivers/staging/dream/smd/smd_private.h deleted file mode 100644 index 1b2e1c89..0000000 --- a/drivers/staging/dream/smd/smd_private.h +++ /dev/null @@ -1,164 +0,0 @@ -/* arch/arm/mach-msm/smd_private.h - * - * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2007 QUALCOMM Incorporated - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ -#ifndef _ARCH_ARM_MACH_MSM_MSM_SMD_PRIVATE_H_ -#define _ARCH_ARM_MACH_MSM_MSM_SMD_PRIVATE_H_ - -struct smem_heap_info { - unsigned initialized; - unsigned free_offset; - unsigned heap_remaining; - unsigned reserved; -}; - -struct smem_heap_entry { - unsigned allocated; - unsigned offset; - unsigned size; - unsigned reserved; -}; - -struct smem_proc_comm { - unsigned command; - unsigned status; - unsigned data1; - unsigned data2; -}; - -#define PC_APPS 0 -#define PC_MODEM 1 - -#define VERSION_QDSP6 4 -#define VERSION_APPS_SBL 6 -#define VERSION_MODEM_SBL 7 -#define VERSION_APPS 8 -#define VERSION_MODEM 9 - -struct smem_shared { - struct smem_proc_comm proc_comm[4]; - unsigned version[32]; - struct smem_heap_info heap_info; - struct smem_heap_entry heap_toc[128]; -}; - -struct smsm_shared { - unsigned host; - unsigned state; -}; - -struct smsm_interrupt_info { - uint32_t aArm_en_mask; - uint32_t aArm_interrupts_pending; - uint32_t aArm_wakeup_reason; -}; - -#define SZ_DIAG_ERR_MSG 0xC8 -#define ID_DIAG_ERR_MSG SMEM_DIAG_ERR_MESSAGE -#define ID_SMD_CHANNELS SMEM_SMD_BASE_ID -#define ID_SHARED_STATE SMEM_SMSM_SHARED_STATE -#define ID_CH_ALLOC_TBL SMEM_CHANNEL_ALLOC_TBL - -#define SMSM_INIT 0x000001 -#define SMSM_SMDINIT 0x000008 -#define SMSM_RPCINIT 0x000020 -#define SMSM_RESET 0x000040 -#define SMSM_RSA 0x0080 -#define SMSM_RUN 0x000100 -#define SMSM_PWRC 0x0200 -#define SMSM_TIMEWAIT 0x0400 -#define SMSM_TIMEINIT 0x0800 -#define SMSM_PWRC_EARLY_EXIT 0x1000 -#define SMSM_WFPI 0x2000 -#define SMSM_SLEEP 0x4000 -#define SMSM_SLEEPEXIT 0x8000 -#define SMSM_OEMSBL_RELEASE 0x10000 -#define SMSM_PWRC_SUSPEND 0x200000 - -#define SMSM_WKUP_REASON_RPC 0x00000001 -#define SMSM_WKUP_REASON_INT 0x00000002 -#define SMSM_WKUP_REASON_GPIO 0x00000004 -#define SMSM_WKUP_REASON_TIMER 0x00000008 -#define SMSM_WKUP_REASON_ALARM 0x00000010 -#define SMSM_WKUP_REASON_RESET 0x00000020 - -void *smem_alloc(unsigned id, unsigned size); -int smsm_change_state(uint32_t clear_mask, uint32_t set_mask); -uint32_t smsm_get_state(void); -int smsm_set_sleep_duration(uint32_t delay); -int smsm_set_interrupt_info(struct smsm_interrupt_info *info); -void smsm_print_sleep_info(void); - -#define SMEM_NUM_SMD_CHANNELS 64 - -typedef enum { - /* fixed items */ - SMEM_PROC_COMM = 0, - SMEM_HEAP_INFO, - SMEM_ALLOCATION_TABLE, - SMEM_VERSION_INFO, - SMEM_HW_RESET_DETECT, - SMEM_AARM_WARM_BOOT, - SMEM_DIAG_ERR_MESSAGE, - SMEM_SPINLOCK_ARRAY, - SMEM_MEMORY_BARRIER_LOCATION, - - /* dynamic items */ - SMEM_AARM_PARTITION_TABLE, - SMEM_AARM_BAD_BLOCK_TABLE, - SMEM_RESERVE_BAD_BLOCKS, - SMEM_WM_UUID, - SMEM_CHANNEL_ALLOC_TBL, - SMEM_SMD_BASE_ID, - SMEM_SMEM_LOG_IDX = SMEM_SMD_BASE_ID + SMEM_NUM_SMD_CHANNELS, - SMEM_SMEM_LOG_EVENTS, - SMEM_SMEM_STATIC_LOG_IDX, - SMEM_SMEM_STATIC_LOG_EVENTS, - SMEM_SMEM_SLOW_CLOCK_SYNC, - SMEM_SMEM_SLOW_CLOCK_VALUE, - SMEM_BIO_LED_BUF, - SMEM_SMSM_SHARED_STATE, - SMEM_SMSM_INT_INFO, - SMEM_SMSM_SLEEP_DELAY, - SMEM_SMSM_LIMIT_SLEEP, - SMEM_SLEEP_POWER_COLLAPSE_DISABLED, - SMEM_KEYPAD_KEYS_PRESSED, - SMEM_KEYPAD_STATE_UPDATED, - SMEM_KEYPAD_STATE_IDX, - SMEM_GPIO_INT, - SMEM_MDDI_LCD_IDX, - SMEM_MDDI_HOST_DRIVER_STATE, - SMEM_MDDI_LCD_DISP_STATE, - SMEM_LCD_CUR_PANEL, - SMEM_MARM_BOOT_SEGMENT_INFO, - SMEM_AARM_BOOT_SEGMENT_INFO, - SMEM_SLEEP_STATIC, - SMEM_SCORPION_FREQUENCY, - SMEM_SMD_PROFILES, - SMEM_TSSC_BUSY, - SMEM_HS_SUSPEND_FILTER_INFO, - SMEM_BATT_INFO, - SMEM_APPS_BOOT_MODE, - SMEM_VERSION_FIRST, - SMEM_VERSION_LAST = SMEM_VERSION_FIRST + 24, - SMEM_OSS_RRCASN1_BUF1, - SMEM_OSS_RRCASN1_BUF2, - SMEM_ID_VENDOR0, - SMEM_ID_VENDOR1, - SMEM_ID_VENDOR2, - SMEM_HW_SW_BUILD_ID, - SMEM_NUM_ITEMS, -} smem_mem_type; - -#endif diff --git a/drivers/staging/dream/smd/smd_qmi.c b/drivers/staging/dream/smd/smd_qmi.c deleted file mode 100644 index 76fce51..0000000 --- a/drivers/staging/dream/smd/smd_qmi.c +++ /dev/null @@ -1,851 +0,0 @@ -/* arch/arm/mach-msm/smd_qmi.c - * - * QMI Control Driver -- Manages network data connections. - * - * Copyright (C) 2007 Google, Inc. - * Author: Brian Swetland - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#define QMI_CTL 0x00 -#define QMI_WDS 0x01 -#define QMI_DMS 0x02 -#define QMI_NAS 0x03 - -#define QMI_RESULT_SUCCESS 0x0000 -#define QMI_RESULT_FAILURE 0x0001 - -struct qmi_msg { - unsigned char service; - unsigned char client_id; - unsigned short txn_id; - unsigned short type; - unsigned short size; - unsigned char *tlv; -}; - -#define qmi_ctl_client_id 0 - -#define STATE_OFFLINE 0 -#define STATE_QUERYING 1 -#define STATE_ONLINE 2 - -struct qmi_ctxt { - struct miscdevice misc; - - struct mutex lock; - - unsigned char ctl_txn_id; - unsigned char wds_client_id; - unsigned short wds_txn_id; - - unsigned wds_busy; - unsigned wds_handle; - unsigned state_dirty; - unsigned state; - - unsigned char addr[4]; - unsigned char mask[4]; - unsigned char gateway[4]; - unsigned char dns1[4]; - unsigned char dns2[4]; - - smd_channel_t *ch; - const char *ch_name; - - struct work_struct open_work; - struct work_struct read_work; -}; - -static struct qmi_ctxt *qmi_minor_to_ctxt(unsigned n); - -static void qmi_read_work(struct work_struct *ws); -static void qmi_open_work(struct work_struct *work); - -void qmi_ctxt_init(struct qmi_ctxt *ctxt, unsigned n) -{ - mutex_init(&ctxt->lock); - INIT_WORK(&ctxt->read_work, qmi_read_work); - INIT_WORK(&ctxt->open_work, qmi_open_work); - ctxt->ctl_txn_id = 1; - ctxt->wds_txn_id = 1; - ctxt->wds_busy = 1; - ctxt->state = STATE_OFFLINE; - -} - -static struct workqueue_struct *qmi_wq; - -static int verbose = 0; - -/* anyone waiting for a state change waits here */ -static DECLARE_WAIT_QUEUE_HEAD(qmi_wait_queue); - - -static void qmi_dump_msg(struct qmi_msg *msg, const char *prefix) -{ - unsigned sz, n; - unsigned char *x; - - if (!verbose) - return; - - printk(KERN_INFO - "qmi: %s: svc=%02x cid=%02x tid=%04x type=%04x size=%04x\n", - prefix, msg->service, msg->client_id, - msg->txn_id, msg->type, msg->size); - - x = msg->tlv; - sz = msg->size; - - while (sz >= 3) { - sz -= 3; - - n = x[1] | (x[2] << 8); - if (n > sz) - break; - - printk(KERN_INFO "qmi: %s: tlv: %02x %04x { ", - prefix, x[0], n); - x += 3; - sz -= n; - while (n-- > 0) - printk("%02x ", *x++); - printk("}\n"); - } -} - -int qmi_add_tlv(struct qmi_msg *msg, - unsigned type, unsigned size, const void *data) -{ - unsigned char *x = msg->tlv + msg->size; - - x[0] = type; - x[1] = size; - x[2] = size >> 8; - - memcpy(x + 3, data, size); - - msg->size += (size + 3); - - return 0; -} - -/* Extract a tagged item from a qmi message buffer, -** taking care not to overrun the buffer. -*/ -static int qmi_get_tlv(struct qmi_msg *msg, - unsigned type, unsigned size, void *data) -{ - unsigned char *x = msg->tlv; - unsigned len = msg->size; - unsigned n; - - while (len >= 3) { - len -= 3; - - /* size of this item */ - n = x[1] | (x[2] << 8); - if (n > len) - break; - - if (x[0] == type) { - if (n != size) - return -1; - memcpy(data, x + 3, size); - return 0; - } - - x += (n + 3); - len -= n; - } - - return -1; -} - -static unsigned qmi_get_status(struct qmi_msg *msg, unsigned *error) -{ - unsigned short status[2]; - if (qmi_get_tlv(msg, 0x02, sizeof(status), status)) { - *error = 0; - return QMI_RESULT_FAILURE; - } else { - *error = status[1]; - return status[0]; - } -} - -/* 0x01 */ -#define QMUX_HEADER 13 - -/* should be >= HEADER + FOOTER */ -#define QMUX_OVERHEAD 16 - -static int qmi_send(struct qmi_ctxt *ctxt, struct qmi_msg *msg) -{ - unsigned char *data; - unsigned hlen; - unsigned len; - int r; - - qmi_dump_msg(msg, "send"); - - if (msg->service == QMI_CTL) - hlen = QMUX_HEADER - 1; - else - hlen = QMUX_HEADER; - - /* QMUX length is total header + total payload - IFC selector */ - len = hlen + msg->size - 1; - if (len > 0xffff) - return -1; - - data = msg->tlv - hlen; - - /* prepend encap and qmux header */ - *data++ = 0x01; /* ifc selector */ - - /* qmux header */ - *data++ = len; - *data++ = len >> 8; - *data++ = 0x00; /* flags: client */ - *data++ = msg->service; - *data++ = msg->client_id; - - /* qmi header */ - *data++ = 0x00; /* flags: send */ - *data++ = msg->txn_id; - if (msg->service != QMI_CTL) - *data++ = msg->txn_id >> 8; - - *data++ = msg->type; - *data++ = msg->type >> 8; - *data++ = msg->size; - *data++ = msg->size >> 8; - - /* len + 1 takes the interface selector into account */ - r = smd_write(ctxt->ch, msg->tlv - hlen, len + 1); - - if (r != len) - return -1; - else - return 0; -} - -static void qmi_process_ctl_msg(struct qmi_ctxt *ctxt, struct qmi_msg *msg) -{ - unsigned err; - if (msg->type == 0x0022) { - unsigned char n[2]; - if (qmi_get_status(msg, &err)) - return; - if (qmi_get_tlv(msg, 0x01, sizeof(n), n)) - return; - if (n[0] == QMI_WDS) { - printk(KERN_INFO - "qmi: ctl: wds use client_id 0x%02x\n", n[1]); - ctxt->wds_client_id = n[1]; - ctxt->wds_busy = 0; - } - } -} - -static int qmi_network_get_profile(struct qmi_ctxt *ctxt); - -static void swapaddr(unsigned char *src, unsigned char *dst) -{ - dst[0] = src[3]; - dst[1] = src[2]; - dst[2] = src[1]; - dst[3] = src[0]; -} - -static unsigned char zero[4]; -static void qmi_read_runtime_profile(struct qmi_ctxt *ctxt, struct qmi_msg *msg) -{ - unsigned char tmp[4]; - unsigned r; - - r = qmi_get_tlv(msg, 0x1e, 4, tmp); - swapaddr(r ? zero : tmp, ctxt->addr); - r = qmi_get_tlv(msg, 0x21, 4, tmp); - swapaddr(r ? zero : tmp, ctxt->mask); - r = qmi_get_tlv(msg, 0x20, 4, tmp); - swapaddr(r ? zero : tmp, ctxt->gateway); - r = qmi_get_tlv(msg, 0x15, 4, tmp); - swapaddr(r ? zero : tmp, ctxt->dns1); - r = qmi_get_tlv(msg, 0x16, 4, tmp); - swapaddr(r ? zero : tmp, ctxt->dns2); -} - -static void qmi_process_unicast_wds_msg(struct qmi_ctxt *ctxt, - struct qmi_msg *msg) -{ - unsigned err; - switch (msg->type) { - case 0x0021: - if (qmi_get_status(msg, &err)) { - printk(KERN_ERR - "qmi: wds: network stop failed (%04x)\n", err); - } else { - printk(KERN_INFO - "qmi: wds: network stopped\n"); - ctxt->state = STATE_OFFLINE; - ctxt->state_dirty = 1; - } - break; - case 0x0020: - if (qmi_get_status(msg, &err)) { - printk(KERN_ERR - "qmi: wds: network start failed (%04x)\n", err); - } else if (qmi_get_tlv(msg, 0x01, sizeof(ctxt->wds_handle), &ctxt->wds_handle)) { - printk(KERN_INFO - "qmi: wds no handle?\n"); - } else { - printk(KERN_INFO - "qmi: wds: got handle 0x%08x\n", - ctxt->wds_handle); - } - break; - case 0x002D: - printk("qmi: got network profile\n"); - if (ctxt->state == STATE_QUERYING) { - qmi_read_runtime_profile(ctxt, msg); - ctxt->state = STATE_ONLINE; - ctxt->state_dirty = 1; - } - break; - default: - printk(KERN_ERR "qmi: unknown msg type 0x%04x\n", msg->type); - } - ctxt->wds_busy = 0; -} - -static void qmi_process_broadcast_wds_msg(struct qmi_ctxt *ctxt, - struct qmi_msg *msg) -{ - if (msg->type == 0x0022) { - unsigned char n[2]; - if (qmi_get_tlv(msg, 0x01, sizeof(n), n)) - return; - switch (n[0]) { - case 1: - printk(KERN_INFO "qmi: wds: DISCONNECTED\n"); - ctxt->state = STATE_OFFLINE; - ctxt->state_dirty = 1; - break; - case 2: - printk(KERN_INFO "qmi: wds: CONNECTED\n"); - ctxt->state = STATE_QUERYING; - ctxt->state_dirty = 1; - qmi_network_get_profile(ctxt); - break; - case 3: - printk(KERN_INFO "qmi: wds: SUSPENDED\n"); - ctxt->state = STATE_OFFLINE; - ctxt->state_dirty = 1; - } - } else { - printk(KERN_ERR "qmi: unknown bcast msg type 0x%04x\n", msg->type); - } -} - -static void qmi_process_wds_msg(struct qmi_ctxt *ctxt, - struct qmi_msg *msg) -{ - printk(KERN_INFO "wds: %04x @ %02x\n", msg->type, msg->client_id); - if (msg->client_id == ctxt->wds_client_id) { - qmi_process_unicast_wds_msg(ctxt, msg); - } else if (msg->client_id == 0xff) { - qmi_process_broadcast_wds_msg(ctxt, msg); - } else { - printk(KERN_ERR - "qmi_process_wds_msg client id 0x%02x unknown\n", - msg->client_id); - } -} - -static void qmi_process_qmux(struct qmi_ctxt *ctxt, - unsigned char *buf, unsigned sz) -{ - struct qmi_msg msg; - - /* require a full header */ - if (sz < 5) - return; - - /* require a size that matches the buffer size */ - if (sz != (buf[0] | (buf[1] << 8))) - return; - - /* only messages from a service (bit7=1) are allowed */ - if (buf[2] != 0x80) - return; - - msg.service = buf[3]; - msg.client_id = buf[4]; - - /* annoyingly, CTL messages have a shorter TID */ - if (buf[3] == 0) { - if (sz < 7) - return; - msg.txn_id = buf[6]; - buf += 7; - sz -= 7; - } else { - if (sz < 8) - return; - msg.txn_id = buf[6] | (buf[7] << 8); - buf += 8; - sz -= 8; - } - - /* no type and size!? */ - if (sz < 4) - return; - sz -= 4; - - msg.type = buf[0] | (buf[1] << 8); - msg.size = buf[2] | (buf[3] << 8); - msg.tlv = buf + 4; - - if (sz != msg.size) - return; - - qmi_dump_msg(&msg, "recv"); - - mutex_lock(&ctxt->lock); - switch (msg.service) { - case QMI_CTL: - qmi_process_ctl_msg(ctxt, &msg); - break; - case QMI_WDS: - qmi_process_wds_msg(ctxt, &msg); - break; - default: - printk(KERN_ERR "qmi: msg from unknown svc 0x%02x\n", - msg.service); - break; - } - mutex_unlock(&ctxt->lock); - wake_up(&qmi_wait_queue); -} - -#define QMI_MAX_PACKET (256 + QMUX_OVERHEAD) - -static void qmi_read_work(struct work_struct *ws) -{ - struct qmi_ctxt *ctxt = container_of(ws, struct qmi_ctxt, read_work); - struct smd_channel *ch = ctxt->ch; - unsigned char buf[QMI_MAX_PACKET]; - int sz; - - for (;;) { - sz = smd_cur_packet_size(ch); - if (sz == 0) - break; - if (sz < smd_read_avail(ch)) - break; - if (sz > QMI_MAX_PACKET) { - smd_read(ch, 0, sz); - continue; - } - if (smd_read(ch, buf, sz) != sz) { - printk(KERN_ERR "qmi: not enough data?!\n"); - continue; - } - - /* interface selector must be 1 */ - if (buf[0] != 0x01) - continue; - - qmi_process_qmux(ctxt, buf + 1, sz - 1); - } -} - -static int qmi_request_wds_cid(struct qmi_ctxt *ctxt); - -static void qmi_open_work(struct work_struct *ws) -{ - struct qmi_ctxt *ctxt = container_of(ws, struct qmi_ctxt, open_work); - mutex_lock(&ctxt->lock); - qmi_request_wds_cid(ctxt); - mutex_unlock(&ctxt->lock); -} - -static void qmi_notify(void *priv, unsigned event) -{ - struct qmi_ctxt *ctxt = priv; - - switch (event) { - case SMD_EVENT_DATA: { - int sz; - sz = smd_cur_packet_size(ctxt->ch); - if ((sz > 0) && (sz <= smd_read_avail(ctxt->ch))) - queue_work(qmi_wq, &ctxt->read_work); - break; - } - case SMD_EVENT_OPEN: - printk(KERN_INFO "qmi: smd opened\n"); - queue_work(qmi_wq, &ctxt->open_work); - break; - case SMD_EVENT_CLOSE: - printk(KERN_INFO "qmi: smd closed\n"); - break; - } -} - -static int qmi_request_wds_cid(struct qmi_ctxt *ctxt) -{ - unsigned char data[64 + QMUX_OVERHEAD]; - struct qmi_msg msg; - unsigned char n; - - msg.service = QMI_CTL; - msg.client_id = qmi_ctl_client_id; - msg.txn_id = ctxt->ctl_txn_id; - msg.type = 0x0022; - msg.size = 0; - msg.tlv = data + QMUX_HEADER; - - ctxt->ctl_txn_id += 2; - - n = QMI_WDS; - qmi_add_tlv(&msg, 0x01, 0x01, &n); - - return qmi_send(ctxt, &msg); -} - -static int qmi_network_get_profile(struct qmi_ctxt *ctxt) -{ - unsigned char data[96 + QMUX_OVERHEAD]; - struct qmi_msg msg; - - msg.service = QMI_WDS; - msg.client_id = ctxt->wds_client_id; - msg.txn_id = ctxt->wds_txn_id; - msg.type = 0x002D; - msg.size = 0; - msg.tlv = data + QMUX_HEADER; - - ctxt->wds_txn_id += 2; - - return qmi_send(ctxt, &msg); -} - -static int qmi_network_up(struct qmi_ctxt *ctxt, char *apn) -{ - unsigned char data[96 + QMUX_OVERHEAD]; - struct qmi_msg msg; - char *auth_type; - char *user; - char *pass; - - for (user = apn; *user; user++) { - if (*user == ' ') { - *user++ = 0; - break; - } - } - for (pass = user; *pass; pass++) { - if (*pass == ' ') { - *pass++ = 0; - break; - } - } - - for (auth_type = pass; *auth_type; auth_type++) { - if (*auth_type == ' ') { - *auth_type++ = 0; - break; - } - } - - msg.service = QMI_WDS; - msg.client_id = ctxt->wds_client_id; - msg.txn_id = ctxt->wds_txn_id; - msg.type = 0x0020; - msg.size = 0; - msg.tlv = data + QMUX_HEADER; - - ctxt->wds_txn_id += 2; - - qmi_add_tlv(&msg, 0x14, strlen(apn), apn); - if (*auth_type) - qmi_add_tlv(&msg, 0x16, strlen(auth_type), auth_type); - if (*user) { - if (!*auth_type) { - unsigned char x; - x = 3; - qmi_add_tlv(&msg, 0x16, 1, &x); - } - qmi_add_tlv(&msg, 0x17, strlen(user), user); - if (*pass) - qmi_add_tlv(&msg, 0x18, strlen(pass), pass); - } - return qmi_send(ctxt, &msg); -} - -static int qmi_network_down(struct qmi_ctxt *ctxt) -{ - unsigned char data[16 + QMUX_OVERHEAD]; - struct qmi_msg msg; - - msg.service = QMI_WDS; - msg.client_id = ctxt->wds_client_id; - msg.txn_id = ctxt->wds_txn_id; - msg.type = 0x0021; - msg.size = 0; - msg.tlv = data + QMUX_HEADER; - - ctxt->wds_txn_id += 2; - - qmi_add_tlv(&msg, 0x01, sizeof(ctxt->wds_handle), &ctxt->wds_handle); - - return qmi_send(ctxt, &msg); -} - -static int qmi_print_state(struct qmi_ctxt *ctxt, char *buf, int max) -{ - int i; - char *statename; - - if (ctxt->state == STATE_ONLINE) { - statename = "up"; - } else if (ctxt->state == STATE_OFFLINE) { - statename = "down"; - } else { - statename = "busy"; - } - - i = scnprintf(buf, max, "STATE=%s\n", statename); - i += scnprintf(buf + i, max - i, "CID=%d\n", ctxt->wds_client_id); - - if (ctxt->state != STATE_ONLINE) - return i; - - i += scnprintf(buf + i, max - i, "ADDR=%d.%d.%d.%d\n", - ctxt->addr[0], ctxt->addr[1], ctxt->addr[2], ctxt->addr[3]); - i += scnprintf(buf + i, max - i, "MASK=%d.%d.%d.%d\n", - ctxt->mask[0], ctxt->mask[1], ctxt->mask[2], ctxt->mask[3]); - i += scnprintf(buf + i, max - i, "GATEWAY=%d.%d.%d.%d\n", - ctxt->gateway[0], ctxt->gateway[1], ctxt->gateway[2], - ctxt->gateway[3]); - i += scnprintf(buf + i, max - i, "DNS1=%d.%d.%d.%d\n", - ctxt->dns1[0], ctxt->dns1[1], ctxt->dns1[2], ctxt->dns1[3]); - i += scnprintf(buf + i, max - i, "DNS2=%d.%d.%d.%d\n", - ctxt->dns2[0], ctxt->dns2[1], ctxt->dns2[2], ctxt->dns2[3]); - - return i; -} - -static ssize_t qmi_read(struct file *fp, char __user *buf, - size_t count, loff_t *pos) -{ - struct qmi_ctxt *ctxt = fp->private_data; - char msg[256]; - int len; - int r; - - mutex_lock(&ctxt->lock); - for (;;) { - if (ctxt->state_dirty) { - ctxt->state_dirty = 0; - len = qmi_print_state(ctxt, msg, 256); - break; - } - mutex_unlock(&ctxt->lock); - r = wait_event_interruptible(qmi_wait_queue, ctxt->state_dirty); - if (r < 0) - return r; - mutex_lock(&ctxt->lock); - } - mutex_unlock(&ctxt->lock); - - if (len > count) - len = count; - - if (copy_to_user(buf, msg, len)) - return -EFAULT; - - return len; -} - - -static ssize_t qmi_write(struct file *fp, const char __user *buf, - size_t count, loff_t *pos) -{ - struct qmi_ctxt *ctxt = fp->private_data; - unsigned char cmd[64]; - int len; - int r; - - if (count < 1) - return 0; - - len = count > 63 ? 63 : count; - - if (copy_from_user(cmd, buf, len)) - return -EFAULT; - - cmd[len] = 0; - - /* lazy */ - if (cmd[len-1] == '\n') { - cmd[len-1] = 0; - len--; - } - - if (!strncmp(cmd, "verbose", 7)) { - verbose = 1; - } else if (!strncmp(cmd, "terse", 5)) { - verbose = 0; - } else if (!strncmp(cmd, "poll", 4)) { - ctxt->state_dirty = 1; - wake_up(&qmi_wait_queue); - } else if (!strncmp(cmd, "down", 4)) { -retry_down: - mutex_lock(&ctxt->lock); - if (ctxt->wds_busy) { - mutex_unlock(&ctxt->lock); - r = wait_event_interruptible(qmi_wait_queue, !ctxt->wds_busy); - if (r < 0) - return r; - goto retry_down; - } - ctxt->wds_busy = 1; - qmi_network_down(ctxt); - mutex_unlock(&ctxt->lock); - } else if (!strncmp(cmd, "up:", 3)) { -retry_up: - mutex_lock(&ctxt->lock); - if (ctxt->wds_busy) { - mutex_unlock(&ctxt->lock); - r = wait_event_interruptible(qmi_wait_queue, !ctxt->wds_busy); - if (r < 0) - return r; - goto retry_up; - } - ctxt->wds_busy = 1; - qmi_network_up(ctxt, cmd+3); - mutex_unlock(&ctxt->lock); - } else { - return -EINVAL; - } - - return count; -} - -static int qmi_open(struct inode *ip, struct file *fp) -{ - struct qmi_ctxt *ctxt = qmi_minor_to_ctxt(MINOR(ip->i_rdev)); - int r = 0; - - if (!ctxt) { - printk(KERN_ERR "unknown qmi misc %d\n", MINOR(ip->i_rdev)); - return -ENODEV; - } - - fp->private_data = ctxt; - - mutex_lock(&ctxt->lock); - if (ctxt->ch == 0) - r = smd_open(ctxt->ch_name, &ctxt->ch, ctxt, qmi_notify); - if (r == 0) - wake_up(&qmi_wait_queue); - mutex_unlock(&ctxt->lock); - - return r; -} - -static int qmi_release(struct inode *ip, struct file *fp) -{ - return 0; -} - -static struct file_operations qmi_fops = { - .owner = THIS_MODULE, - .read = qmi_read, - .write = qmi_write, - .open = qmi_open, - .release = qmi_release, -}; - -static struct qmi_ctxt qmi_device0 = { - .ch_name = "SMD_DATA5_CNTL", - .misc = { - .minor = MISC_DYNAMIC_MINOR, - .name = "qmi0", - .fops = &qmi_fops, - } -}; -static struct qmi_ctxt qmi_device1 = { - .ch_name = "SMD_DATA6_CNTL", - .misc = { - .minor = MISC_DYNAMIC_MINOR, - .name = "qmi1", - .fops = &qmi_fops, - } -}; -static struct qmi_ctxt qmi_device2 = { - .ch_name = "SMD_DATA7_CNTL", - .misc = { - .minor = MISC_DYNAMIC_MINOR, - .name = "qmi2", - .fops = &qmi_fops, - } -}; - -static struct qmi_ctxt *qmi_minor_to_ctxt(unsigned n) -{ - if (n == qmi_device0.misc.minor) - return &qmi_device0; - if (n == qmi_device1.misc.minor) - return &qmi_device1; - if (n == qmi_device2.misc.minor) - return &qmi_device2; - return 0; -} - -static int __init qmi_init(void) -{ - int ret; - - qmi_wq = create_singlethread_workqueue("qmi"); - if (qmi_wq == 0) - return -ENOMEM; - - qmi_ctxt_init(&qmi_device0, 0); - qmi_ctxt_init(&qmi_device1, 1); - qmi_ctxt_init(&qmi_device2, 2); - - ret = misc_register(&qmi_device0.misc); - if (ret == 0) - ret = misc_register(&qmi_device1.misc); - if (ret == 0) - ret = misc_register(&qmi_device2.misc); - return ret; -} - -module_init(qmi_init); diff --git a/drivers/staging/dream/smd/smd_rpcrouter.c b/drivers/staging/dream/smd/smd_rpcrouter.c deleted file mode 100644 index 8744a6e..0000000 --- a/drivers/staging/dream/smd/smd_rpcrouter.c +++ /dev/null @@ -1,1261 +0,0 @@ -/* arch/arm/mach-msm/smd_rpcrouter.c - * - * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2007-2009 QUALCOMM Incorporated. - * Author: San Mehat - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -/* TODO: handle cases where smd_write() will tempfail due to full fifo */ -/* TODO: thread priority? schedule a work to bump it? */ -/* TODO: maybe make server_list_lock a mutex */ -/* TODO: pool fragments to avoid kmalloc/kfree churn */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include "smd_rpcrouter.h" - -#define TRACE_R2R_MSG 0 -#define TRACE_R2R_RAW 0 -#define TRACE_RPC_MSG 0 -#define TRACE_NOTIFY_MSG 0 - -#define MSM_RPCROUTER_DEBUG 0 -#define MSM_RPCROUTER_DEBUG_PKT 0 -#define MSM_RPCROUTER_R2R_DEBUG 0 -#define DUMP_ALL_RECEIVED_HEADERS 0 - -#define DIAG(x...) printk("[RR] ERROR " x) - -#if MSM_RPCROUTER_DEBUG -#define D(x...) printk(x) -#else -#define D(x...) do {} while (0) -#endif - -#if TRACE_R2R_MSG -#define RR(x...) printk("[RR] "x) -#else -#define RR(x...) do {} while (0) -#endif - -#if TRACE_RPC_MSG -#define IO(x...) printk("[RPC] "x) -#else -#define IO(x...) do {} while (0) -#endif - -#if TRACE_NOTIFY_MSG -#define NTFY(x...) printk(KERN_ERR "[NOTIFY] "x) -#else -#define NTFY(x...) do {} while (0) -#endif - -static LIST_HEAD(local_endpoints); -static LIST_HEAD(remote_endpoints); - -static LIST_HEAD(server_list); - -static smd_channel_t *smd_channel; -static int initialized; -static wait_queue_head_t newserver_wait; -static wait_queue_head_t smd_wait; - -static DEFINE_SPINLOCK(local_endpoints_lock); -static DEFINE_SPINLOCK(remote_endpoints_lock); -static DEFINE_SPINLOCK(server_list_lock); -static DEFINE_SPINLOCK(smd_lock); - -static struct workqueue_struct *rpcrouter_workqueue; -static int rpcrouter_need_len; - -static atomic_t next_xid = ATOMIC_INIT(1); -static uint8_t next_pacmarkid; - -static void do_read_data(struct work_struct *work); -static void do_create_pdevs(struct work_struct *work); -static void do_create_rpcrouter_pdev(struct work_struct *work); - -static DECLARE_WORK(work_read_data, do_read_data); -static DECLARE_WORK(work_create_pdevs, do_create_pdevs); -static DECLARE_WORK(work_create_rpcrouter_pdev, do_create_rpcrouter_pdev); - -#define RR_STATE_IDLE 0 -#define RR_STATE_HEADER 1 -#define RR_STATE_BODY 2 -#define RR_STATE_ERROR 3 - -struct rr_context { - struct rr_packet *pkt; - uint8_t *ptr; - uint32_t state; /* current assembly state */ - uint32_t count; /* bytes needed in this state */ -}; - -static struct rr_context the_rr_context; - -static struct platform_device rpcrouter_pdev = { - .name = "oncrpc_router", - .id = -1, -}; - - -static int rpcrouter_send_control_msg(union rr_control_msg *msg) -{ - struct rr_header hdr; - unsigned long flags; - int need; - - if (!(msg->cmd == RPCROUTER_CTRL_CMD_HELLO) && !initialized) { - printk(KERN_ERR "rpcrouter_send_control_msg(): Warning, " - "router not initialized\n"); - return -EINVAL; - } - - hdr.version = RPCROUTER_VERSION; - hdr.type = msg->cmd; - hdr.src_pid = RPCROUTER_PID_LOCAL; - hdr.src_cid = RPCROUTER_ROUTER_ADDRESS; - hdr.confirm_rx = 0; - hdr.size = sizeof(*msg); - hdr.dst_pid = 0; - hdr.dst_cid = RPCROUTER_ROUTER_ADDRESS; - - /* TODO: what if channel is full? */ - - need = sizeof(hdr) + hdr.size; - spin_lock_irqsave(&smd_lock, flags); - while (smd_write_avail(smd_channel) < need) { - spin_unlock_irqrestore(&smd_lock, flags); - msleep(250); - spin_lock_irqsave(&smd_lock, flags); - } - smd_write(smd_channel, &hdr, sizeof(hdr)); - smd_write(smd_channel, msg, hdr.size); - spin_unlock_irqrestore(&smd_lock, flags); - return 0; -} - -static struct rr_server *rpcrouter_create_server(uint32_t pid, - uint32_t cid, - uint32_t prog, - uint32_t ver) -{ - struct rr_server *server; - unsigned long flags; - int rc; - - server = kmalloc(sizeof(struct rr_server), GFP_KERNEL); - if (!server) - return ERR_PTR(-ENOMEM); - - memset(server, 0, sizeof(struct rr_server)); - server->pid = pid; - server->cid = cid; - server->prog = prog; - server->vers = ver; - - spin_lock_irqsave(&server_list_lock, flags); - list_add_tail(&server->list, &server_list); - spin_unlock_irqrestore(&server_list_lock, flags); - - if (pid == RPCROUTER_PID_REMOTE) { - rc = msm_rpcrouter_create_server_cdev(server); - if (rc < 0) - goto out_fail; - } - return server; -out_fail: - spin_lock_irqsave(&server_list_lock, flags); - list_del(&server->list); - spin_unlock_irqrestore(&server_list_lock, flags); - kfree(server); - return ERR_PTR(rc); -} - -static void rpcrouter_destroy_server(struct rr_server *server) -{ - unsigned long flags; - - spin_lock_irqsave(&server_list_lock, flags); - list_del(&server->list); - spin_unlock_irqrestore(&server_list_lock, flags); - device_destroy(msm_rpcrouter_class, server->device_number); - kfree(server); -} - -static struct rr_server *rpcrouter_lookup_server(uint32_t prog, uint32_t ver) -{ - struct rr_server *server; - unsigned long flags; - - spin_lock_irqsave(&server_list_lock, flags); - list_for_each_entry(server, &server_list, list) { - if (server->prog == prog - && server->vers == ver) { - spin_unlock_irqrestore(&server_list_lock, flags); - return server; - } - } - spin_unlock_irqrestore(&server_list_lock, flags); - return NULL; -} - -static struct rr_server *rpcrouter_lookup_server_by_dev(dev_t dev) -{ - struct rr_server *server; - unsigned long flags; - - spin_lock_irqsave(&server_list_lock, flags); - list_for_each_entry(server, &server_list, list) { - if (server->device_number == dev) { - spin_unlock_irqrestore(&server_list_lock, flags); - return server; - } - } - spin_unlock_irqrestore(&server_list_lock, flags); - return NULL; -} - -struct msm_rpc_endpoint *msm_rpcrouter_create_local_endpoint(dev_t dev) -{ - struct msm_rpc_endpoint *ept; - unsigned long flags; - - ept = kmalloc(sizeof(struct msm_rpc_endpoint), GFP_KERNEL); - if (!ept) - return NULL; - memset(ept, 0, sizeof(struct msm_rpc_endpoint)); - - /* mark no reply outstanding */ - ept->reply_pid = 0xffffffff; - - ept->cid = (uint32_t) ept; - ept->pid = RPCROUTER_PID_LOCAL; - ept->dev = dev; - - if ((dev != msm_rpcrouter_devno) && (dev != MKDEV(0, 0))) { - struct rr_server *srv; - /* - * This is a userspace client which opened - * a program/ver devicenode. Bind the client - * to that destination - */ - srv = rpcrouter_lookup_server_by_dev(dev); - /* TODO: bug? really? */ - BUG_ON(!srv); - - ept->dst_pid = srv->pid; - ept->dst_cid = srv->cid; - ept->dst_prog = cpu_to_be32(srv->prog); - ept->dst_vers = cpu_to_be32(srv->vers); - - D("Creating local ept %p @ %08x:%08x\n", ept, srv->prog, srv->vers); - } else { - /* mark not connected */ - ept->dst_pid = 0xffffffff; - D("Creating a master local ept %p\n", ept); - } - - init_waitqueue_head(&ept->wait_q); - INIT_LIST_HEAD(&ept->read_q); - spin_lock_init(&ept->read_q_lock); - INIT_LIST_HEAD(&ept->incomplete); - - spin_lock_irqsave(&local_endpoints_lock, flags); - list_add_tail(&ept->list, &local_endpoints); - spin_unlock_irqrestore(&local_endpoints_lock, flags); - return ept; -} - -int msm_rpcrouter_destroy_local_endpoint(struct msm_rpc_endpoint *ept) -{ - int rc; - union rr_control_msg msg; - - msg.cmd = RPCROUTER_CTRL_CMD_REMOVE_CLIENT; - msg.cli.pid = ept->pid; - msg.cli.cid = ept->cid; - - RR("x REMOVE_CLIENT id=%d:%08x\n", ept->pid, ept->cid); - rc = rpcrouter_send_control_msg(&msg); - if (rc < 0) - return rc; - - list_del(&ept->list); - kfree(ept); - return 0; -} - -static int rpcrouter_create_remote_endpoint(uint32_t cid) -{ - struct rr_remote_endpoint *new_c; - unsigned long flags; - - new_c = kmalloc(sizeof(struct rr_remote_endpoint), GFP_KERNEL); - if (!new_c) - return -ENOMEM; - memset(new_c, 0, sizeof(struct rr_remote_endpoint)); - - new_c->cid = cid; - new_c->pid = RPCROUTER_PID_REMOTE; - init_waitqueue_head(&new_c->quota_wait); - spin_lock_init(&new_c->quota_lock); - - spin_lock_irqsave(&remote_endpoints_lock, flags); - list_add_tail(&new_c->list, &remote_endpoints); - spin_unlock_irqrestore(&remote_endpoints_lock, flags); - return 0; -} - -static struct msm_rpc_endpoint *rpcrouter_lookup_local_endpoint(uint32_t cid) -{ - struct msm_rpc_endpoint *ept; - unsigned long flags; - - spin_lock_irqsave(&local_endpoints_lock, flags); - list_for_each_entry(ept, &local_endpoints, list) { - if (ept->cid == cid) { - spin_unlock_irqrestore(&local_endpoints_lock, flags); - return ept; - } - } - spin_unlock_irqrestore(&local_endpoints_lock, flags); - return NULL; -} - -static struct rr_remote_endpoint *rpcrouter_lookup_remote_endpoint(uint32_t cid) -{ - struct rr_remote_endpoint *ept; - unsigned long flags; - - spin_lock_irqsave(&remote_endpoints_lock, flags); - list_for_each_entry(ept, &remote_endpoints, list) { - if (ept->cid == cid) { - spin_unlock_irqrestore(&remote_endpoints_lock, flags); - return ept; - } - } - spin_unlock_irqrestore(&remote_endpoints_lock, flags); - return NULL; -} - -static int process_control_msg(union rr_control_msg *msg, int len) -{ - union rr_control_msg ctl; - struct rr_server *server; - struct rr_remote_endpoint *r_ept; - int rc = 0; - unsigned long flags; - - if (len != sizeof(*msg)) { - printk(KERN_ERR "rpcrouter: r2r msg size %d != %d\n", - len, sizeof(*msg)); - return -EINVAL; - } - - switch (msg->cmd) { - case RPCROUTER_CTRL_CMD_HELLO: - RR("o HELLO\n"); - - RR("x HELLO\n"); - memset(&ctl, 0, sizeof(ctl)); - ctl.cmd = RPCROUTER_CTRL_CMD_HELLO; - rpcrouter_send_control_msg(&ctl); - - initialized = 1; - - /* Send list of servers one at a time */ - ctl.cmd = RPCROUTER_CTRL_CMD_NEW_SERVER; - - /* TODO: long time to hold a spinlock... */ - spin_lock_irqsave(&server_list_lock, flags); - list_for_each_entry(server, &server_list, list) { - ctl.srv.pid = server->pid; - ctl.srv.cid = server->cid; - ctl.srv.prog = server->prog; - ctl.srv.vers = server->vers; - - RR("x NEW_SERVER id=%d:%08x prog=%08x:%08x\n", - server->pid, server->cid, - server->prog, server->vers); - - rpcrouter_send_control_msg(&ctl); - } - spin_unlock_irqrestore(&server_list_lock, flags); - - queue_work(rpcrouter_workqueue, &work_create_rpcrouter_pdev); - break; - - case RPCROUTER_CTRL_CMD_RESUME_TX: - RR("o RESUME_TX id=%d:%08x\n", msg->cli.pid, msg->cli.cid); - - r_ept = rpcrouter_lookup_remote_endpoint(msg->cli.cid); - if (!r_ept) { - printk(KERN_ERR - "rpcrouter: Unable to resume client\n"); - break; - } - spin_lock_irqsave(&r_ept->quota_lock, flags); - r_ept->tx_quota_cntr = 0; - spin_unlock_irqrestore(&r_ept->quota_lock, flags); - wake_up(&r_ept->quota_wait); - break; - - case RPCROUTER_CTRL_CMD_NEW_SERVER: - RR("o NEW_SERVER id=%d:%08x prog=%08x:%08x\n", - msg->srv.pid, msg->srv.cid, msg->srv.prog, msg->srv.vers); - - server = rpcrouter_lookup_server(msg->srv.prog, msg->srv.vers); - - if (!server) { - server = rpcrouter_create_server( - msg->srv.pid, msg->srv.cid, - msg->srv.prog, msg->srv.vers); - if (!server) - return -ENOMEM; - /* - * XXX: Verify that its okay to add the - * client to our remote client list - * if we get a NEW_SERVER notification - */ - if (!rpcrouter_lookup_remote_endpoint(msg->srv.cid)) { - rc = rpcrouter_create_remote_endpoint( - msg->srv.cid); - if (rc < 0) - printk(KERN_ERR - "rpcrouter:Client create" - "error (%d)\n", rc); - } - schedule_work(&work_create_pdevs); - wake_up(&newserver_wait); - } else { - if ((server->pid == msg->srv.pid) && - (server->cid == msg->srv.cid)) { - printk(KERN_ERR "rpcrouter: Duplicate svr\n"); - } else { - server->pid = msg->srv.pid; - server->cid = msg->srv.cid; - } - } - break; - - case RPCROUTER_CTRL_CMD_REMOVE_SERVER: - RR("o REMOVE_SERVER prog=%08x:%d\n", - msg->srv.prog, msg->srv.vers); - server = rpcrouter_lookup_server(msg->srv.prog, msg->srv.vers); - if (server) - rpcrouter_destroy_server(server); - break; - - case RPCROUTER_CTRL_CMD_REMOVE_CLIENT: - RR("o REMOVE_CLIENT id=%d:%08x\n", msg->cli.pid, msg->cli.cid); - if (msg->cli.pid != RPCROUTER_PID_REMOTE) { - printk(KERN_ERR - "rpcrouter: Denying remote removal of " - "local client\n"); - break; - } - r_ept = rpcrouter_lookup_remote_endpoint(msg->cli.cid); - if (r_ept) { - spin_lock_irqsave(&remote_endpoints_lock, flags); - list_del(&r_ept->list); - spin_unlock_irqrestore(&remote_endpoints_lock, flags); - kfree(r_ept); - } - - /* Notify local clients of this event */ - printk(KERN_ERR "rpcrouter: LOCAL NOTIFICATION NOT IMP\n"); - rc = -ENOSYS; - - break; - default: - RR("o UNKNOWN(%08x)\n", msg->cmd); - rc = -ENOSYS; - } - - return rc; -} - -static void do_create_rpcrouter_pdev(struct work_struct *work) -{ - platform_device_register(&rpcrouter_pdev); -} - -static void do_create_pdevs(struct work_struct *work) -{ - unsigned long flags; - struct rr_server *server; - - /* TODO: race if destroyed while being registered */ - spin_lock_irqsave(&server_list_lock, flags); - list_for_each_entry(server, &server_list, list) { - if (server->pid == RPCROUTER_PID_REMOTE) { - if (server->pdev_name[0] == 0) { - spin_unlock_irqrestore(&server_list_lock, - flags); - msm_rpcrouter_create_server_pdev(server); - schedule_work(&work_create_pdevs); - return; - } - } - } - spin_unlock_irqrestore(&server_list_lock, flags); -} - -static void rpcrouter_smdnotify(void *_dev, unsigned event) -{ - if (event != SMD_EVENT_DATA) - return; - - wake_up(&smd_wait); -} - -static void *rr_malloc(unsigned sz) -{ - void *ptr = kmalloc(sz, GFP_KERNEL); - if (ptr) - return ptr; - - printk(KERN_ERR "rpcrouter: kmalloc of %d failed, retrying...\n", sz); - do { - ptr = kmalloc(sz, GFP_KERNEL); - } while (!ptr); - - return ptr; -} - -/* TODO: deal with channel teardown / restore */ -static int rr_read(void *data, int len) -{ - int rc; - unsigned long flags; -// printk("rr_read() %d\n", len); - for(;;) { - spin_lock_irqsave(&smd_lock, flags); - if (smd_read_avail(smd_channel) >= len) { - rc = smd_read(smd_channel, data, len); - spin_unlock_irqrestore(&smd_lock, flags); - if (rc == len) - return 0; - else - return -EIO; - } - rpcrouter_need_len = len; - spin_unlock_irqrestore(&smd_lock, flags); - -// printk("rr_read: waiting (%d)\n", len); - wait_event(smd_wait, smd_read_avail(smd_channel) >= len); - } - return 0; -} - -static uint32_t r2r_buf[RPCROUTER_MSGSIZE_MAX]; - -static void do_read_data(struct work_struct *work) -{ - struct rr_header hdr; - struct rr_packet *pkt; - struct rr_fragment *frag; - struct msm_rpc_endpoint *ept; - uint32_t pm, mid; - unsigned long flags; - - if (rr_read(&hdr, sizeof(hdr))) - goto fail_io; - -#if TRACE_R2R_RAW - RR("- ver=%d type=%d src=%d:%08x crx=%d siz=%d dst=%d:%08x\n", - hdr.version, hdr.type, hdr.src_pid, hdr.src_cid, - hdr.confirm_rx, hdr.size, hdr.dst_pid, hdr.dst_cid); -#endif - - if (hdr.version != RPCROUTER_VERSION) { - DIAG("version %d != %d\n", hdr.version, RPCROUTER_VERSION); - goto fail_data; - } - if (hdr.size > RPCROUTER_MSGSIZE_MAX) { - DIAG("msg size %d > max %d\n", hdr.size, RPCROUTER_MSGSIZE_MAX); - goto fail_data; - } - - if (hdr.dst_cid == RPCROUTER_ROUTER_ADDRESS) { - if (rr_read(r2r_buf, hdr.size)) - goto fail_io; - process_control_msg((void*) r2r_buf, hdr.size); - goto done; - } - - if (hdr.size < sizeof(pm)) { - DIAG("runt packet (no pacmark)\n"); - goto fail_data; - } - if (rr_read(&pm, sizeof(pm))) - goto fail_io; - - hdr.size -= sizeof(pm); - - frag = rr_malloc(hdr.size + sizeof(*frag)); - frag->next = NULL; - frag->length = hdr.size; - if (rr_read(frag->data, hdr.size)) - goto fail_io; - - ept = rpcrouter_lookup_local_endpoint(hdr.dst_cid); - if (!ept) { - DIAG("no local ept for cid %08x\n", hdr.dst_cid); - kfree(frag); - goto done; - } - - /* See if there is already a partial packet that matches our mid - * and if so, append this fragment to that packet. - */ - mid = PACMARK_MID(pm); - list_for_each_entry(pkt, &ept->incomplete, list) { - if (pkt->mid == mid) { - pkt->last->next = frag; - pkt->last = frag; - pkt->length += frag->length; - if (PACMARK_LAST(pm)) { - list_del(&pkt->list); - goto packet_complete; - } - goto done; - } - } - /* This mid is new -- create a packet for it, and put it on - * the incomplete list if this fragment is not a last fragment, - * otherwise put it on the read queue. - */ - pkt = rr_malloc(sizeof(struct rr_packet)); - pkt->first = frag; - pkt->last = frag; - memcpy(&pkt->hdr, &hdr, sizeof(hdr)); - pkt->mid = mid; - pkt->length = frag->length; - if (!PACMARK_LAST(pm)) { - list_add_tail(&pkt->list, &ept->incomplete); - goto done; - } - -packet_complete: - spin_lock_irqsave(&ept->read_q_lock, flags); - list_add_tail(&pkt->list, &ept->read_q); - wake_up(&ept->wait_q); - spin_unlock_irqrestore(&ept->read_q_lock, flags); -done: - - if (hdr.confirm_rx) { - union rr_control_msg msg; - - msg.cmd = RPCROUTER_CTRL_CMD_RESUME_TX; - msg.cli.pid = hdr.dst_pid; - msg.cli.cid = hdr.dst_cid; - - RR("x RESUME_TX id=%d:%08x\n", msg.cli.pid, msg.cli.cid); - rpcrouter_send_control_msg(&msg); - } - - queue_work(rpcrouter_workqueue, &work_read_data); - return; - -fail_io: -fail_data: - printk(KERN_ERR "rpc_router has died\n"); -} - -void msm_rpc_setup_req(struct rpc_request_hdr *hdr, uint32_t prog, - uint32_t vers, uint32_t proc) -{ - memset(hdr, 0, sizeof(struct rpc_request_hdr)); - hdr->xid = cpu_to_be32(atomic_add_return(1, &next_xid)); - hdr->rpc_vers = cpu_to_be32(2); - hdr->prog = cpu_to_be32(prog); - hdr->vers = cpu_to_be32(vers); - hdr->procedure = cpu_to_be32(proc); -} - -struct msm_rpc_endpoint *msm_rpc_open(void) -{ - struct msm_rpc_endpoint *ept; - - ept = msm_rpcrouter_create_local_endpoint(MKDEV(0, 0)); - if (ept == NULL) - return ERR_PTR(-ENOMEM); - - return ept; -} - -int msm_rpc_close(struct msm_rpc_endpoint *ept) -{ - return msm_rpcrouter_destroy_local_endpoint(ept); -} -EXPORT_SYMBOL(msm_rpc_close); - -int msm_rpc_write(struct msm_rpc_endpoint *ept, void *buffer, int count) -{ - struct rr_header hdr; - uint32_t pacmark; - struct rpc_request_hdr *rq = buffer; - struct rr_remote_endpoint *r_ept; - unsigned long flags; - int needed; - DEFINE_WAIT(__wait); - - /* TODO: fragmentation for large outbound packets */ - if (count > (RPCROUTER_MSGSIZE_MAX - sizeof(uint32_t)) || !count) - return -EINVAL; - - /* snoop the RPC packet and enforce permissions */ - - /* has to have at least the xid and type fields */ - if (count < (sizeof(uint32_t) * 2)) { - printk(KERN_ERR "rr_write: rejecting runt packet\n"); - return -EINVAL; - } - - if (rq->type == 0) { - /* RPC CALL */ - if (count < (sizeof(uint32_t) * 6)) { - printk(KERN_ERR - "rr_write: rejecting runt call packet\n"); - return -EINVAL; - } - if (ept->dst_pid == 0xffffffff) { - printk(KERN_ERR "rr_write: not connected\n"); - return -ENOTCONN; - } - -#if CONFIG_MSM_AMSS_VERSION >= 6350 - if ((ept->dst_prog != rq->prog) || - !msm_rpc_is_compatible_version( - be32_to_cpu(ept->dst_vers), - be32_to_cpu(rq->vers))) { -#else - if (ept->dst_prog != rq->prog || ept->dst_vers != rq->vers) { -#endif - printk(KERN_ERR - "rr_write: cannot write to %08x:%d " - "(bound to %08x:%d)\n", - be32_to_cpu(rq->prog), be32_to_cpu(rq->vers), - be32_to_cpu(ept->dst_prog), - be32_to_cpu(ept->dst_vers)); - return -EINVAL; - } - hdr.dst_pid = ept->dst_pid; - hdr.dst_cid = ept->dst_cid; - IO("CALL on ept %p to %08x:%08x @ %d:%08x (%d bytes) (xid %x proc %x)\n", - ept, - be32_to_cpu(rq->prog), be32_to_cpu(rq->vers), - ept->dst_pid, ept->dst_cid, count, - be32_to_cpu(rq->xid), be32_to_cpu(rq->procedure)); - } else { - /* RPC REPLY */ - /* TODO: locking */ - if (ept->reply_pid == 0xffffffff) { - printk(KERN_ERR - "rr_write: rejecting unexpected reply\n"); - return -EINVAL; - } - if (ept->reply_xid != rq->xid) { - printk(KERN_ERR - "rr_write: rejecting packet w/ bad xid\n"); - return -EINVAL; - } - - hdr.dst_pid = ept->reply_pid; - hdr.dst_cid = ept->reply_cid; - - /* consume this reply */ - ept->reply_pid = 0xffffffff; - - IO("REPLY on ept %p to xid=%d @ %d:%08x (%d bytes)\n", - ept, - be32_to_cpu(rq->xid), hdr.dst_pid, hdr.dst_cid, count); - } - - r_ept = rpcrouter_lookup_remote_endpoint(hdr.dst_cid); - - if (!r_ept) { - printk(KERN_ERR - "msm_rpc_write(): No route to ept " - "[PID %x CID %x]\n", hdr.dst_pid, hdr.dst_cid); - return -EHOSTUNREACH; - } - - /* Create routing header */ - hdr.type = RPCROUTER_CTRL_CMD_DATA; - hdr.version = RPCROUTER_VERSION; - hdr.src_pid = ept->pid; - hdr.src_cid = ept->cid; - hdr.confirm_rx = 0; - hdr.size = count + sizeof(uint32_t); - - for (;;) { - prepare_to_wait(&r_ept->quota_wait, &__wait, - TASK_INTERRUPTIBLE); - spin_lock_irqsave(&r_ept->quota_lock, flags); - if (r_ept->tx_quota_cntr < RPCROUTER_DEFAULT_RX_QUOTA) - break; - if (signal_pending(current) && - (!(ept->flags & MSM_RPC_UNINTERRUPTIBLE))) - break; - spin_unlock_irqrestore(&r_ept->quota_lock, flags); - schedule(); - } - finish_wait(&r_ept->quota_wait, &__wait); - - if (signal_pending(current) && - (!(ept->flags & MSM_RPC_UNINTERRUPTIBLE))) { - spin_unlock_irqrestore(&r_ept->quota_lock, flags); - return -ERESTARTSYS; - } - r_ept->tx_quota_cntr++; - if (r_ept->tx_quota_cntr == RPCROUTER_DEFAULT_RX_QUOTA) - hdr.confirm_rx = 1; - - /* bump pacmark while interrupts disabled to avoid race - * probably should be atomic op instead - */ - pacmark = PACMARK(count, ++next_pacmarkid, 0, 1); - - spin_unlock_irqrestore(&r_ept->quota_lock, flags); - - spin_lock_irqsave(&smd_lock, flags); - - needed = sizeof(hdr) + hdr.size; - while (smd_write_avail(smd_channel) < needed) { - spin_unlock_irqrestore(&smd_lock, flags); - msleep(250); - spin_lock_irqsave(&smd_lock, flags); - } - - /* TODO: deal with full fifo */ - smd_write(smd_channel, &hdr, sizeof(hdr)); - smd_write(smd_channel, &pacmark, sizeof(pacmark)); - smd_write(smd_channel, buffer, count); - - spin_unlock_irqrestore(&smd_lock, flags); - - return count; -} -EXPORT_SYMBOL(msm_rpc_write); - -/* - * NOTE: It is the responsibility of the caller to kfree buffer - */ -int msm_rpc_read(struct msm_rpc_endpoint *ept, void **buffer, - unsigned user_len, long timeout) -{ - struct rr_fragment *frag, *next; - char *buf; - int rc; - - rc = __msm_rpc_read(ept, &frag, user_len, timeout); - if (rc <= 0) - return rc; - - /* single-fragment messages conveniently can be - * returned as-is (the buffer is at the front) - */ - if (frag->next == 0) { - *buffer = (void*) frag; - return rc; - } - - /* multi-fragment messages, we have to do it the - * hard way, which is rather disgusting right now - */ - buf = rr_malloc(rc); - *buffer = buf; - - while (frag != NULL) { - memcpy(buf, frag->data, frag->length); - next = frag->next; - buf += frag->length; - kfree(frag); - frag = next; - } - - return rc; -} - -int msm_rpc_call(struct msm_rpc_endpoint *ept, uint32_t proc, - void *_request, int request_size, - long timeout) -{ - return msm_rpc_call_reply(ept, proc, - _request, request_size, - NULL, 0, timeout); -} -EXPORT_SYMBOL(msm_rpc_call); - -int msm_rpc_call_reply(struct msm_rpc_endpoint *ept, uint32_t proc, - void *_request, int request_size, - void *_reply, int reply_size, - long timeout) -{ - struct rpc_request_hdr *req = _request; - struct rpc_reply_hdr *reply; - int rc; - - if (request_size < sizeof(*req)) - return -ETOOSMALL; - - if (ept->dst_pid == 0xffffffff) - return -ENOTCONN; - - /* We can't use msm_rpc_setup_req() here, because dst_prog and - * dst_vers here are already in BE. - */ - memset(req, 0, sizeof(*req)); - req->xid = cpu_to_be32(atomic_add_return(1, &next_xid)); - req->rpc_vers = cpu_to_be32(2); - req->prog = ept->dst_prog; - req->vers = ept->dst_vers; - req->procedure = cpu_to_be32(proc); - - rc = msm_rpc_write(ept, req, request_size); - if (rc < 0) - return rc; - - for (;;) { - rc = msm_rpc_read(ept, (void*) &reply, -1, timeout); - if (rc < 0) - return rc; - if (rc < (3 * sizeof(uint32_t))) { - rc = -EIO; - break; - } - /* we should not get CALL packets -- ignore them */ - if (reply->type == 0) { - kfree(reply); - continue; - } - /* If an earlier call timed out, we could get the (no - * longer wanted) reply for it. Ignore replies that - * we don't expect. - */ - if (reply->xid != req->xid) { - kfree(reply); - continue; - } - if (reply->reply_stat != 0) { - rc = -EPERM; - break; - } - if (reply->data.acc_hdr.accept_stat != 0) { - rc = -EINVAL; - break; - } - if (_reply == NULL) { - rc = 0; - break; - } - if (rc > reply_size) { - rc = -ENOMEM; - } else { - memcpy(_reply, reply, rc); - } - break; - } - kfree(reply); - return rc; -} -EXPORT_SYMBOL(msm_rpc_call_reply); - - -static inline int ept_packet_available(struct msm_rpc_endpoint *ept) -{ - unsigned long flags; - int ret; - spin_lock_irqsave(&ept->read_q_lock, flags); - ret = !list_empty(&ept->read_q); - spin_unlock_irqrestore(&ept->read_q_lock, flags); - return ret; -} - -int __msm_rpc_read(struct msm_rpc_endpoint *ept, - struct rr_fragment **frag_ret, - unsigned len, long timeout) -{ - struct rr_packet *pkt; - struct rpc_request_hdr *rq; - DEFINE_WAIT(__wait); - unsigned long flags; - int rc; - - IO("READ on ept %p\n", ept); - - if (ept->flags & MSM_RPC_UNINTERRUPTIBLE) { - if (timeout < 0) { - wait_event(ept->wait_q, ept_packet_available(ept)); - } else { - rc = wait_event_timeout( - ept->wait_q, ept_packet_available(ept), - timeout); - if (rc == 0) - return -ETIMEDOUT; - } - } else { - if (timeout < 0) { - rc = wait_event_interruptible( - ept->wait_q, ept_packet_available(ept)); - if (rc < 0) - return rc; - } else { - rc = wait_event_interruptible_timeout( - ept->wait_q, ept_packet_available(ept), - timeout); - if (rc == 0) - return -ETIMEDOUT; - } - } - - spin_lock_irqsave(&ept->read_q_lock, flags); - if (list_empty(&ept->read_q)) { - spin_unlock_irqrestore(&ept->read_q_lock, flags); - return -EAGAIN; - } - pkt = list_first_entry(&ept->read_q, struct rr_packet, list); - if (pkt->length > len) { - spin_unlock_irqrestore(&ept->read_q_lock, flags); - return -ETOOSMALL; - } - list_del(&pkt->list); - spin_unlock_irqrestore(&ept->read_q_lock, flags); - - rc = pkt->length; - - *frag_ret = pkt->first; - rq = (void*) pkt->first->data; - if ((rc >= (sizeof(uint32_t) * 3)) && (rq->type == 0)) { - IO("READ on ept %p is a CALL on %08x:%08x proc %d xid %d\n", - ept, be32_to_cpu(rq->prog), be32_to_cpu(rq->vers), - be32_to_cpu(rq->procedure), - be32_to_cpu(rq->xid)); - /* RPC CALL */ - if (ept->reply_pid != 0xffffffff) { - printk(KERN_WARNING - "rr_read: lost previous reply xid...\n"); - } - /* TODO: locking? */ - ept->reply_pid = pkt->hdr.src_pid; - ept->reply_cid = pkt->hdr.src_cid; - ept->reply_xid = rq->xid; - } -#if TRACE_RPC_MSG - else if ((rc >= (sizeof(uint32_t) * 3)) && (rq->type == 1)) - IO("READ on ept %p is a REPLY\n", ept); - else IO("READ on ept %p (%d bytes)\n", ept, rc); -#endif - - kfree(pkt); - return rc; -} - -#if CONFIG_MSM_AMSS_VERSION >= 6350 -int msm_rpc_is_compatible_version(uint32_t server_version, - uint32_t client_version) -{ - if ((server_version & RPC_VERSION_MODE_MASK) != - (client_version & RPC_VERSION_MODE_MASK)) - return 0; - - if (server_version & RPC_VERSION_MODE_MASK) - return server_version == client_version; - - return ((server_version & RPC_VERSION_MAJOR_MASK) == - (client_version & RPC_VERSION_MAJOR_MASK)) && - ((server_version & RPC_VERSION_MINOR_MASK) >= - (client_version & RPC_VERSION_MINOR_MASK)); -} -EXPORT_SYMBOL(msm_rpc_is_compatible_version); - -static int msm_rpc_get_compatible_server(uint32_t prog, - uint32_t ver, - uint32_t *found_vers) -{ - struct rr_server *server; - unsigned long flags; - if (found_vers == NULL) - return 0; - - spin_lock_irqsave(&server_list_lock, flags); - list_for_each_entry(server, &server_list, list) { - if ((server->prog == prog) && - msm_rpc_is_compatible_version(server->vers, ver)) { - *found_vers = server->vers; - spin_unlock_irqrestore(&server_list_lock, flags); - return 0; - } - } - spin_unlock_irqrestore(&server_list_lock, flags); - return -1; -} -#endif - -struct msm_rpc_endpoint *msm_rpc_connect(uint32_t prog, uint32_t vers, unsigned flags) -{ - struct msm_rpc_endpoint *ept; - struct rr_server *server; - -#if CONFIG_MSM_AMSS_VERSION >= 6350 - if (!(vers & RPC_VERSION_MODE_MASK)) { - uint32_t found_vers; - if (msm_rpc_get_compatible_server(prog, vers, &found_vers) < 0) - return ERR_PTR(-EHOSTUNREACH); - if (found_vers != vers) { - D("RPC using new version %08x:{%08x --> %08x}\n", - prog, vers, found_vers); - vers = found_vers; - } - } -#endif - - server = rpcrouter_lookup_server(prog, vers); - if (!server) - return ERR_PTR(-EHOSTUNREACH); - - ept = msm_rpc_open(); - if (IS_ERR(ept)) - return ept; - - ept->flags = flags; - ept->dst_pid = server->pid; - ept->dst_cid = server->cid; - ept->dst_prog = cpu_to_be32(prog); - ept->dst_vers = cpu_to_be32(vers); - - return ept; -} -EXPORT_SYMBOL(msm_rpc_connect); - -uint32_t msm_rpc_get_vers(struct msm_rpc_endpoint *ept) -{ - return be32_to_cpu(ept->dst_vers); -} -EXPORT_SYMBOL(msm_rpc_get_vers); - -/* TODO: permission check? */ -int msm_rpc_register_server(struct msm_rpc_endpoint *ept, - uint32_t prog, uint32_t vers) -{ - int rc; - union rr_control_msg msg; - struct rr_server *server; - - server = rpcrouter_create_server(ept->pid, ept->cid, - prog, vers); - if (!server) - return -ENODEV; - - msg.srv.cmd = RPCROUTER_CTRL_CMD_NEW_SERVER; - msg.srv.pid = ept->pid; - msg.srv.cid = ept->cid; - msg.srv.prog = prog; - msg.srv.vers = vers; - - RR("x NEW_SERVER id=%d:%08x prog=%08x:%08x\n", - ept->pid, ept->cid, prog, vers); - - rc = rpcrouter_send_control_msg(&msg); - if (rc < 0) - return rc; - - return 0; -} - -/* TODO: permission check -- disallow unreg of somebody else's server */ -int msm_rpc_unregister_server(struct msm_rpc_endpoint *ept, - uint32_t prog, uint32_t vers) -{ - struct rr_server *server; - server = rpcrouter_lookup_server(prog, vers); - - if (!server) - return -ENOENT; - rpcrouter_destroy_server(server); - return 0; -} - -static int msm_rpcrouter_probe(struct platform_device *pdev) -{ - int rc; - - /* Initialize what we need to start processing */ - INIT_LIST_HEAD(&local_endpoints); - INIT_LIST_HEAD(&remote_endpoints); - - init_waitqueue_head(&newserver_wait); - init_waitqueue_head(&smd_wait); - - rpcrouter_workqueue = create_singlethread_workqueue("rpcrouter"); - if (!rpcrouter_workqueue) - return -ENOMEM; - - rc = msm_rpcrouter_init_devices(); - if (rc < 0) - goto fail_destroy_workqueue; - - /* Open up SMD channel 2 */ - initialized = 0; - rc = smd_open("SMD_RPCCALL", &smd_channel, NULL, rpcrouter_smdnotify); - if (rc < 0) - goto fail_remove_devices; - - queue_work(rpcrouter_workqueue, &work_read_data); - return 0; - - fail_remove_devices: - msm_rpcrouter_exit_devices(); - fail_destroy_workqueue: - destroy_workqueue(rpcrouter_workqueue); - return rc; -} - -static struct platform_driver msm_smd_channel2_driver = { - .probe = msm_rpcrouter_probe, - .driver = { - .name = "SMD_RPCCALL", - .owner = THIS_MODULE, - }, -}; - -static int __init rpcrouter_init(void) -{ - return platform_driver_register(&msm_smd_channel2_driver); -} - -module_init(rpcrouter_init); -MODULE_DESCRIPTION("MSM RPC Router"); -MODULE_AUTHOR("San Mehat "); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/dream/smd/smd_rpcrouter.h b/drivers/staging/dream/smd/smd_rpcrouter.h deleted file mode 100644 index 86ab997..0000000 --- a/drivers/staging/dream/smd/smd_rpcrouter.h +++ /dev/null @@ -1,193 +0,0 @@ -/** arch/arm/mach-msm/smd_rpcrouter.h - * - * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2007-2008 QUALCOMM Incorporated. - * Author: San Mehat - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#ifndef _ARCH_ARM_MACH_MSM_SMD_RPCROUTER_H -#define _ARCH_ARM_MACH_MSM_SMD_RPCROUTER_H - -#include -#include -#include -#include - -#include -#include - -/* definitions for the R2R wire protcol */ - -#define RPCROUTER_VERSION 1 -#define RPCROUTER_PROCESSORS_MAX 4 -#define RPCROUTER_MSGSIZE_MAX 512 - -#define RPCROUTER_CLIENT_BCAST_ID 0xffffffff -#define RPCROUTER_ROUTER_ADDRESS 0xfffffffe - -#define RPCROUTER_PID_LOCAL 1 -#define RPCROUTER_PID_REMOTE 0 - -#define RPCROUTER_CTRL_CMD_DATA 1 -#define RPCROUTER_CTRL_CMD_HELLO 2 -#define RPCROUTER_CTRL_CMD_BYE 3 -#define RPCROUTER_CTRL_CMD_NEW_SERVER 4 -#define RPCROUTER_CTRL_CMD_REMOVE_SERVER 5 -#define RPCROUTER_CTRL_CMD_REMOVE_CLIENT 6 -#define RPCROUTER_CTRL_CMD_RESUME_TX 7 -#define RPCROUTER_CTRL_CMD_EXIT 8 - -#define RPCROUTER_DEFAULT_RX_QUOTA 5 - -union rr_control_msg { - uint32_t cmd; - struct { - uint32_t cmd; - uint32_t prog; - uint32_t vers; - uint32_t pid; - uint32_t cid; - } srv; - struct { - uint32_t cmd; - uint32_t pid; - uint32_t cid; - } cli; -}; - -struct rr_header { - uint32_t version; - uint32_t type; - uint32_t src_pid; - uint32_t src_cid; - uint32_t confirm_rx; - uint32_t size; - uint32_t dst_pid; - uint32_t dst_cid; -}; - -/* internals */ - -#define RPCROUTER_MAX_REMOTE_SERVERS 100 - -struct rr_fragment { - unsigned char data[RPCROUTER_MSGSIZE_MAX]; - uint32_t length; - struct rr_fragment *next; -}; - -struct rr_packet { - struct list_head list; - struct rr_fragment *first; - struct rr_fragment *last; - struct rr_header hdr; - uint32_t mid; - uint32_t length; -}; - -#define PACMARK_LAST(n) ((n) & 0x80000000) -#define PACMARK_MID(n) (((n) >> 16) & 0xFF) -#define PACMARK_LEN(n) ((n) & 0xFFFF) - -static inline uint32_t PACMARK(uint32_t len, uint32_t mid, uint32_t first, - uint32_t last) -{ - return (len & 0xFFFF) | - ((mid & 0xFF) << 16) | - ((!!first) << 30) | - ((!!last) << 31); -} - -struct rr_server { - struct list_head list; - - uint32_t pid; - uint32_t cid; - uint32_t prog; - uint32_t vers; - - dev_t device_number; - struct cdev cdev; - struct device *device; - struct rpcsvr_platform_device p_device; - char pdev_name[32]; -}; - -struct rr_remote_endpoint { - uint32_t pid; - uint32_t cid; - - int tx_quota_cntr; - spinlock_t quota_lock; - wait_queue_head_t quota_wait; - - struct list_head list; -}; - -struct msm_rpc_endpoint { - struct list_head list; - - /* incomplete packets waiting for assembly */ - struct list_head incomplete; - - /* complete packets waiting to be read */ - struct list_head read_q; - spinlock_t read_q_lock; - wait_queue_head_t wait_q; - unsigned flags; - - /* endpoint address */ - uint32_t pid; - uint32_t cid; - - /* bound remote address - * if not connected (dst_pid == 0xffffffff) RPC_CALL writes fail - * RPC_CALLs must be to the prog/vers below or they will fail - */ - uint32_t dst_pid; - uint32_t dst_cid; - uint32_t dst_prog; /* be32 */ - uint32_t dst_vers; /* be32 */ - - /* reply remote address - * if reply_pid == 0xffffffff, none available - * RPC_REPLY writes may only go to the pid/cid/xid of the - * last RPC_CALL we received. - */ - uint32_t reply_pid; - uint32_t reply_cid; - uint32_t reply_xid; /* be32 */ - uint32_t next_pm; /* Pacmark sequence */ - - /* device node if this endpoint is accessed via userspace */ - dev_t dev; -}; - -/* shared between smd_rpcrouter*.c */ - -int __msm_rpc_read(struct msm_rpc_endpoint *ept, - struct rr_fragment **frag, - unsigned len, long timeout); - -struct msm_rpc_endpoint *msm_rpcrouter_create_local_endpoint(dev_t dev); -int msm_rpcrouter_destroy_local_endpoint(struct msm_rpc_endpoint *ept); - -int msm_rpcrouter_create_server_cdev(struct rr_server *server); -int msm_rpcrouter_create_server_pdev(struct rr_server *server); - -int msm_rpcrouter_init_devices(void); -void msm_rpcrouter_exit_devices(void); - -extern dev_t msm_rpcrouter_devno; -extern struct class *msm_rpcrouter_class; -#endif diff --git a/drivers/staging/dream/smd/smd_rpcrouter_device.c b/drivers/staging/dream/smd/smd_rpcrouter_device.c deleted file mode 100644 index e9c28ed..0000000 --- a/drivers/staging/dream/smd/smd_rpcrouter_device.c +++ /dev/null @@ -1,377 +0,0 @@ -/* arch/arm/mach-msm/smd_rpcrouter_device.c - * - * Copyright (C) 2007 Google, Inc. - * Copyright (c) 2007-2009 QUALCOMM Incorporated. - * Author: San Mehat - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include "smd_rpcrouter.h" - -#define SAFETY_MEM_SIZE 65536 - -/* Next minor # available for a remote server */ -static int next_minor = 1; - -struct class *msm_rpcrouter_class; -dev_t msm_rpcrouter_devno; - -static struct cdev rpcrouter_cdev; -static struct device *rpcrouter_device; - -static int rpcrouter_open(struct inode *inode, struct file *filp) -{ - int rc; - struct msm_rpc_endpoint *ept; - - rc = nonseekable_open(inode, filp); - if (rc < 0) - return rc; - - ept = msm_rpcrouter_create_local_endpoint(inode->i_rdev); - if (!ept) - return -ENOMEM; - - filp->private_data = ept; - return 0; -} - -static int rpcrouter_release(struct inode *inode, struct file *filp) -{ - struct msm_rpc_endpoint *ept; - ept = (struct msm_rpc_endpoint *) filp->private_data; - - return msm_rpcrouter_destroy_local_endpoint(ept); -} - -static ssize_t rpcrouter_read(struct file *filp, char __user *buf, - size_t count, loff_t *ppos) -{ - struct msm_rpc_endpoint *ept; - struct rr_fragment *frag, *next; - int rc; - - ept = (struct msm_rpc_endpoint *) filp->private_data; - - rc = __msm_rpc_read(ept, &frag, count, -1); - if (rc < 0) - return rc; - - count = rc; - - while (frag != NULL) { - if (copy_to_user(buf, frag->data, frag->length)) { - printk(KERN_ERR - "rpcrouter: could not copy all read data to user!\n"); - rc = -EFAULT; - } - buf += frag->length; - next = frag->next; - kfree(frag); - frag = next; - } - - return rc; -} - -static ssize_t rpcrouter_write(struct file *filp, const char __user *buf, - size_t count, loff_t *ppos) -{ - struct msm_rpc_endpoint *ept; - int rc = 0; - void *k_buffer; - - ept = (struct msm_rpc_endpoint *) filp->private_data; - - /* A check for safety, this seems non-standard */ - if (count > SAFETY_MEM_SIZE) - return -EINVAL; - - k_buffer = kmalloc(count, GFP_KERNEL); - if (!k_buffer) - return -ENOMEM; - - if (copy_from_user(k_buffer, buf, count)) { - rc = -EFAULT; - goto write_out_free; - } - - rc = msm_rpc_write(ept, k_buffer, count); - if (rc < 0) - goto write_out_free; - - rc = count; -write_out_free: - kfree(k_buffer); - return rc; -} - -static unsigned int rpcrouter_poll(struct file *filp, - struct poll_table_struct *wait) -{ - struct msm_rpc_endpoint *ept; - unsigned mask = 0; - ept = (struct msm_rpc_endpoint *) filp->private_data; - - /* If there's data already in the read queue, return POLLIN. - * Else, wait for the requested amount of time, and check again. - */ - - if (!list_empty(&ept->read_q)) - mask |= POLLIN; - - if (!mask) { - poll_wait(filp, &ept->wait_q, wait); - if (!list_empty(&ept->read_q)) - mask |= POLLIN; - } - - return mask; -} - -static long rpcrouter_ioctl(struct file *filp, unsigned int cmd, - unsigned long arg) -{ - struct msm_rpc_endpoint *ept; - struct rpcrouter_ioctl_server_args server_args; - int rc = 0; - uint32_t n; - - ept = (struct msm_rpc_endpoint *) filp->private_data; - switch (cmd) { - - case RPC_ROUTER_IOCTL_GET_VERSION: - n = RPC_ROUTER_VERSION_V1; - rc = put_user(n, (unsigned int *) arg); - break; - - case RPC_ROUTER_IOCTL_GET_MTU: - /* the pacmark word reduces the actual payload - * possible per message - */ - n = RPCROUTER_MSGSIZE_MAX - sizeof(uint32_t); - rc = put_user(n, (unsigned int *) arg); - break; - - case RPC_ROUTER_IOCTL_REGISTER_SERVER: - rc = copy_from_user(&server_args, (void *) arg, - sizeof(server_args)); - if (rc < 0) - break; - msm_rpc_register_server(ept, - server_args.prog, - server_args.vers); - break; - - case RPC_ROUTER_IOCTL_UNREGISTER_SERVER: - rc = copy_from_user(&server_args, (void *) arg, - sizeof(server_args)); - if (rc < 0) - break; - - msm_rpc_unregister_server(ept, - server_args.prog, - server_args.vers); - break; - - case RPC_ROUTER_IOCTL_GET_MINOR_VERSION: - n = MSM_RPC_GET_MINOR(msm_rpc_get_vers(ept)); - rc = put_user(n, (unsigned int *)arg); - break; - - default: - rc = -EINVAL; - break; - } - - return rc; -} - -static struct file_operations rpcrouter_server_fops = { - .owner = THIS_MODULE, - .open = rpcrouter_open, - .release = rpcrouter_release, - .read = rpcrouter_read, - .write = rpcrouter_write, - .poll = rpcrouter_poll, - .unlocked_ioctl = rpcrouter_ioctl, -}; - -static struct file_operations rpcrouter_router_fops = { - .owner = THIS_MODULE, - .open = rpcrouter_open, - .release = rpcrouter_release, - .read = rpcrouter_read, - .write = rpcrouter_write, - .poll = rpcrouter_poll, - .unlocked_ioctl = rpcrouter_ioctl, -}; - -int msm_rpcrouter_create_server_cdev(struct rr_server *server) -{ - int rc; - uint32_t dev_vers; - - if (next_minor == RPCROUTER_MAX_REMOTE_SERVERS) { - printk(KERN_ERR - "rpcrouter: Minor numbers exhausted - Increase " - "RPCROUTER_MAX_REMOTE_SERVERS\n"); - return -ENOBUFS; - } - -#if CONFIG_MSM_AMSS_VERSION >= 6350 - /* Servers with bit 31 set are remote msm servers with hashkey version. - * Servers with bit 31 not set are remote msm servers with - * backwards compatible version type in which case the minor number - * (lower 16 bits) is set to zero. - * - */ - if ((server->vers & RPC_VERSION_MODE_MASK)) - dev_vers = server->vers; - else - dev_vers = server->vers & RPC_VERSION_MAJOR_MASK; -#else - dev_vers = server->vers; -#endif - - server->device_number = - MKDEV(MAJOR(msm_rpcrouter_devno), next_minor++); - - server->device = - device_create(msm_rpcrouter_class, rpcrouter_device, - server->device_number, NULL, "%.8x:%.8x", - server->prog, dev_vers); - if (IS_ERR(server->device)) { - printk(KERN_ERR - "rpcrouter: Unable to create device (%ld)\n", - PTR_ERR(server->device)); - return PTR_ERR(server->device);; - } - - cdev_init(&server->cdev, &rpcrouter_server_fops); - server->cdev.owner = THIS_MODULE; - - rc = cdev_add(&server->cdev, server->device_number, 1); - if (rc < 0) { - printk(KERN_ERR - "rpcrouter: Unable to add chrdev (%d)\n", rc); - device_destroy(msm_rpcrouter_class, server->device_number); - return rc; - } - return 0; -} - -/* for backward compatible version type (31st bit cleared) - * clearing minor number (lower 16 bits) in device name - * is neccessary for driver binding - */ -int msm_rpcrouter_create_server_pdev(struct rr_server *server) -{ - sprintf(server->pdev_name, "rs%.8x:%.8x", - server->prog, -#if CONFIG_MSM_AMSS_VERSION >= 6350 - (server->vers & RPC_VERSION_MODE_MASK) ? server->vers : - (server->vers & RPC_VERSION_MAJOR_MASK)); -#else - server->vers); -#endif - - server->p_device.base.id = -1; - server->p_device.base.name = server->pdev_name; - - server->p_device.prog = server->prog; - server->p_device.vers = server->vers; - - platform_device_register(&server->p_device.base); - return 0; -} - -int msm_rpcrouter_init_devices(void) -{ - int rc; - int major; - - /* Create the device nodes */ - msm_rpcrouter_class = class_create(THIS_MODULE, "oncrpc"); - if (IS_ERR(msm_rpcrouter_class)) { - rc = -ENOMEM; - printk(KERN_ERR - "rpcrouter: failed to create oncrpc class\n"); - goto fail; - } - - rc = alloc_chrdev_region(&msm_rpcrouter_devno, 0, - RPCROUTER_MAX_REMOTE_SERVERS + 1, - "oncrpc"); - if (rc < 0) { - printk(KERN_ERR - "rpcrouter: Failed to alloc chardev region (%d)\n", rc); - goto fail_destroy_class; - } - - major = MAJOR(msm_rpcrouter_devno); - rpcrouter_device = device_create(msm_rpcrouter_class, NULL, - msm_rpcrouter_devno, NULL, "%.8x:%d", - 0, 0); - if (IS_ERR(rpcrouter_device)) { - rc = -ENOMEM; - goto fail_unregister_cdev_region; - } - - cdev_init(&rpcrouter_cdev, &rpcrouter_router_fops); - rpcrouter_cdev.owner = THIS_MODULE; - - rc = cdev_add(&rpcrouter_cdev, msm_rpcrouter_devno, 1); - if (rc < 0) - goto fail_destroy_device; - - return 0; - -fail_destroy_device: - device_destroy(msm_rpcrouter_class, msm_rpcrouter_devno); -fail_unregister_cdev_region: - unregister_chrdev_region(msm_rpcrouter_devno, - RPCROUTER_MAX_REMOTE_SERVERS + 1); -fail_destroy_class: - class_destroy(msm_rpcrouter_class); -fail: - return rc; -} - -void msm_rpcrouter_exit_devices(void) -{ - cdev_del(&rpcrouter_cdev); - device_destroy(msm_rpcrouter_class, msm_rpcrouter_devno); - unregister_chrdev_region(msm_rpcrouter_devno, - RPCROUTER_MAX_REMOTE_SERVERS + 1); - class_destroy(msm_rpcrouter_class); -} - diff --git a/drivers/staging/dream/smd/smd_rpcrouter_servers.c b/drivers/staging/dream/smd/smd_rpcrouter_servers.c deleted file mode 100644 index bec3ee9..0000000 --- a/drivers/staging/dream/smd/smd_rpcrouter_servers.c +++ /dev/null @@ -1,226 +0,0 @@ -/* arch/arm/mach-msm/rpc_servers.c - * - * Copyright (C) 2007 Google, Inc. - * Author: Iliyan Malchev - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include "smd_rpcrouter.h" - -static struct msm_rpc_endpoint *endpoint; - -#define FLAG_REGISTERED 0x0001 - -static LIST_HEAD(rpc_server_list); -static DEFINE_MUTEX(rpc_server_list_lock); -static int rpc_servers_active; - -static void rpc_server_register(struct msm_rpc_server *server) -{ - int rc; - rc = msm_rpc_register_server(endpoint, server->prog, server->vers); - if (rc < 0) - printk(KERN_ERR "[rpcserver] error registering %p @ %08x:%d\n", - server, server->prog, server->vers); -} - -static struct msm_rpc_server *rpc_server_find(uint32_t prog, uint32_t vers) -{ - struct msm_rpc_server *server; - - mutex_lock(&rpc_server_list_lock); - list_for_each_entry(server, &rpc_server_list, list) { - if ((server->prog == prog) && -#if CONFIG_MSM_AMSS_VERSION >= 6350 - msm_rpc_is_compatible_version(server->vers, vers)) { -#else - server->vers == vers) { -#endif - mutex_unlock(&rpc_server_list_lock); - return server; - } - } - mutex_unlock(&rpc_server_list_lock); - return NULL; -} - -static void rpc_server_register_all(void) -{ - struct msm_rpc_server *server; - - mutex_lock(&rpc_server_list_lock); - list_for_each_entry(server, &rpc_server_list, list) { - if (!(server->flags & FLAG_REGISTERED)) { - rpc_server_register(server); - server->flags |= FLAG_REGISTERED; - } - } - mutex_unlock(&rpc_server_list_lock); -} - -int msm_rpc_create_server(struct msm_rpc_server *server) -{ - /* make sure we're in a sane state first */ - server->flags = 0; - INIT_LIST_HEAD(&server->list); - - mutex_lock(&rpc_server_list_lock); - list_add(&server->list, &rpc_server_list); - if (rpc_servers_active) { - rpc_server_register(server); - server->flags |= FLAG_REGISTERED; - } - mutex_unlock(&rpc_server_list_lock); - - return 0; -} - -static int rpc_send_accepted_void_reply(struct msm_rpc_endpoint *client, - uint32_t xid, uint32_t accept_status) -{ - int rc = 0; - uint8_t reply_buf[sizeof(struct rpc_reply_hdr)]; - struct rpc_reply_hdr *reply = (struct rpc_reply_hdr *)reply_buf; - - reply->xid = cpu_to_be32(xid); - reply->type = cpu_to_be32(1); /* reply */ - reply->reply_stat = cpu_to_be32(RPCMSG_REPLYSTAT_ACCEPTED); - - reply->data.acc_hdr.accept_stat = cpu_to_be32(accept_status); - reply->data.acc_hdr.verf_flavor = 0; - reply->data.acc_hdr.verf_length = 0; - - rc = msm_rpc_write(client, reply_buf, sizeof(reply_buf)); - if (rc < 0) - printk(KERN_ERR - "%s: could not write response: %d\n", - __FUNCTION__, rc); - - return rc; -} - -static int rpc_servers_thread(void *data) -{ - void *buffer; - struct rpc_request_hdr *req; - struct msm_rpc_server *server; - int rc; - - for (;;) { - rc = wait_event_interruptible(endpoint->wait_q, - !list_empty(&endpoint->read_q)); - rc = msm_rpc_read(endpoint, &buffer, -1, -1); - if (rc < 0) { - printk(KERN_ERR "%s: could not read: %d\n", - __FUNCTION__, rc); - break; - } - req = (struct rpc_request_hdr *)buffer; - - req->type = be32_to_cpu(req->type); - req->xid = be32_to_cpu(req->xid); - req->rpc_vers = be32_to_cpu(req->rpc_vers); - req->prog = be32_to_cpu(req->prog); - req->vers = be32_to_cpu(req->vers); - req->procedure = be32_to_cpu(req->procedure); - - server = rpc_server_find(req->prog, req->vers); - - if (req->rpc_vers != 2) - continue; - if (req->type != 0) - continue; - if (!server) { - rpc_send_accepted_void_reply( - endpoint, req->xid, - RPC_ACCEPTSTAT_PROG_UNAVAIL); - continue; - } - - rc = server->rpc_call(server, req, rc); - - switch (rc) { - case 0: - rpc_send_accepted_void_reply( - endpoint, req->xid, - RPC_ACCEPTSTAT_SUCCESS); - break; - default: - rpc_send_accepted_void_reply( - endpoint, req->xid, - RPC_ACCEPTSTAT_PROG_UNAVAIL); - break; - } - - kfree(buffer); - } - - do_exit(0); -} - -static int rpcservers_probe(struct platform_device *pdev) -{ - struct task_struct *server_thread; - - endpoint = msm_rpc_open(); - if (IS_ERR(endpoint)) - return PTR_ERR(endpoint); - - /* we're online -- register any servers installed beforehand */ - rpc_servers_active = 1; - rpc_server_register_all(); - - /* start the kernel thread */ - server_thread = kthread_run(rpc_servers_thread, NULL, "krpcserversd"); - if (IS_ERR(server_thread)) - return PTR_ERR(server_thread); - - return 0; -} - -static struct platform_driver rpcservers_driver = { - .probe = rpcservers_probe, - .driver = { - .name = "oncrpc_router", - .owner = THIS_MODULE, - }, -}; - -static int __init rpc_servers_init(void) -{ - return platform_driver_register(&rpcservers_driver); -} - -module_init(rpc_servers_init); - -MODULE_DESCRIPTION("MSM RPC Servers"); -MODULE_AUTHOR("Iliyan Malchev "); -MODULE_LICENSE("GPL"); diff --git a/drivers/staging/dream/smd/smd_tty.c b/drivers/staging/dream/smd/smd_tty.c deleted file mode 100644 index f409449..0000000 --- a/drivers/staging/dream/smd/smd_tty.c +++ /dev/null @@ -1,208 +0,0 @@ -/* arch/arm/mach-msm/smd_tty.c - * - * Copyright (C) 2007 Google, Inc. - * Author: Brian Swetland - * - * This software is licensed under the terms of the GNU General Public - * License version 2, as published by the Free Software Foundation, and - * may be copied, distributed, and modified under those terms. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - */ - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include - -#define MAX_SMD_TTYS 32 - -static DEFINE_MUTEX(smd_tty_lock); - -struct smd_tty_info { - smd_channel_t *ch; - struct tty_struct *tty; - int open_count; -}; - -static struct smd_tty_info smd_tty[MAX_SMD_TTYS]; - - -static void smd_tty_notify(void *priv, unsigned event) -{ - unsigned char *ptr; - int avail; - struct smd_tty_info *info = priv; - struct tty_struct *tty = info->tty; - - if (!tty) - return; - - if (event != SMD_EVENT_DATA) - return; - - for (;;) { - if (test_bit(TTY_THROTTLED, &tty->flags)) break; - avail = smd_read_avail(info->ch); - if (avail == 0) break; - - avail = tty_prepare_flip_string(tty, &ptr, avail); - - if (smd_read(info->ch, ptr, avail) != avail) { - /* shouldn't be possible since we're in interrupt - ** context here and nobody else could 'steal' our - ** characters. - */ - printk(KERN_ERR "OOPS - smd_tty_buffer mismatch?!"); - } - - tty_flip_buffer_push(tty); - } - - /* XXX only when writable and necessary */ - tty_wakeup(tty); -} - -static int smd_tty_open(struct tty_struct *tty, struct file *f) -{ - int res = 0; - int n = tty->index; - struct smd_tty_info *info; - const char *name; - - if (n == 0) { - name = "SMD_DS"; - } else if (n == 27) { - name = "SMD_GPSNMEA"; - } else { - return -ENODEV; - } - - info = smd_tty + n; - - mutex_lock(&smd_tty_lock); - tty->driver_data = info; - - if (info->open_count++ == 0) { - info->tty = tty; - if (info->ch) { - smd_kick(info->ch); - } else { - res = smd_open(name, &info->ch, info, smd_tty_notify); - } - } - mutex_unlock(&smd_tty_lock); - - return res; -} - -static void smd_tty_close(struct tty_struct *tty, struct file *f) -{ - struct smd_tty_info *info = tty->driver_data; - - if (info == 0) - return; - - mutex_lock(&smd_tty_lock); - if (--info->open_count == 0) { - info->tty = 0; - tty->driver_data = 0; - if (info->ch) { - smd_close(info->ch); - info->ch = 0; - } - } - mutex_unlock(&smd_tty_lock); -} - -static int smd_tty_write(struct tty_struct *tty, const unsigned char *buf, int len) -{ - struct smd_tty_info *info = tty->driver_data; - int avail; - - /* if we're writing to a packet channel we will - ** never be able to write more data than there - ** is currently space for - */ - avail = smd_write_avail(info->ch); - if (len > avail) - len = avail; - - return smd_write(info->ch, buf, len); -} - -static int smd_tty_write_room(struct tty_struct *tty) -{ - struct smd_tty_info *info = tty->driver_data; - return smd_write_avail(info->ch); -} - -static int smd_tty_chars_in_buffer(struct tty_struct *tty) -{ - struct smd_tty_info *info = tty->driver_data; - return smd_read_avail(info->ch); -} - -static void smd_tty_unthrottle(struct tty_struct *tty) -{ - struct smd_tty_info *info = tty->driver_data; - smd_kick(info->ch); -} - -static struct tty_operations smd_tty_ops = { - .open = smd_tty_open, - .close = smd_tty_close, - .write = smd_tty_write, - .write_room = smd_tty_write_room, - .chars_in_buffer = smd_tty_chars_in_buffer, - .unthrottle = smd_tty_unthrottle, -}; - -static struct tty_driver *smd_tty_driver; - -static int __init smd_tty_init(void) -{ - int ret; - - smd_tty_driver = alloc_tty_driver(MAX_SMD_TTYS); - if (smd_tty_driver == 0) - return -ENOMEM; - - smd_tty_driver->owner = THIS_MODULE; - smd_tty_driver->driver_name = "smd_tty_driver"; - smd_tty_driver->name = "smd"; - smd_tty_driver->major = 0; - smd_tty_driver->minor_start = 0; - smd_tty_driver->type = TTY_DRIVER_TYPE_SERIAL; - smd_tty_driver->subtype = SERIAL_TYPE_NORMAL; - smd_tty_driver->init_termios = tty_std_termios; - smd_tty_driver->init_termios.c_iflag = 0; - smd_tty_driver->init_termios.c_oflag = 0; - smd_tty_driver->init_termios.c_cflag = B38400 | CS8 | CREAD; - smd_tty_driver->init_termios.c_lflag = 0; - smd_tty_driver->flags = TTY_DRIVER_RESET_TERMIOS | - TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; - tty_set_operations(smd_tty_driver, &smd_tty_ops); - - ret = tty_register_driver(smd_tty_driver); - if (ret) return ret; - - /* this should be dynamic */ - tty_register_device(smd_tty_driver, 0, 0); - tty_register_device(smd_tty_driver, 27, 0); - - return 0; -} - -module_init(smd_tty_init); -- cgit v0.10.2 From 442f9cb5858ec86f6f05df0058cec0bf4b873534 Mon Sep 17 00:00:00 2001 From: Andres More Date: Wed, 12 May 2010 18:59:44 -0300 Subject: staging: vt6656: code cleanup, replaced U8 macro with u8 Removed custom macro for unsigned 8-bit integers. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/iocmd.h b/drivers/staging/vt6656/iocmd.h index 67ec7d7..7fcf085 100644 --- a/drivers/staging/vt6656/iocmd.h +++ b/drivers/staging/vt6656/iocmd.h @@ -109,7 +109,7 @@ typedef enum tagWZONETYPE { // #pragma pack(1) typedef struct tagSCmdRequest { - U8 name[16]; + u8 name[16]; void *data; U16 wResult; U16 wCmdCode; @@ -121,7 +121,7 @@ typedef struct tagSCmdRequest { typedef struct tagSCmdScan { - U8 ssid[SSID_MAXLEN + 2]; + u8 ssid[SSID_MAXLEN + 2]; } SCmdScan, *PSCmdScan; @@ -134,7 +134,7 @@ typedef struct tagSCmdBSSJoin { U16 wBSSType; U16 wBBPType; - U8 ssid[SSID_MAXLEN + 2]; + u8 ssid[SSID_MAXLEN + 2]; U32 uChannel; BOOL bPSEnable; BOOL bShareKeyAuth; @@ -155,9 +155,9 @@ typedef struct tagSCmdZoneTypeSet { #ifdef WPA_SM_Transtatus typedef struct tagSWPAResult { char ifname[100]; - U8 proto; - U8 key_mgmt; - U8 eap_type; + u8 proto; + u8 key_mgmt; + u8 eap_type; BOOL authenticated; } SWPAResult, *PSWPAResult; #endif @@ -166,11 +166,11 @@ typedef struct tagSCmdStartAP { U16 wBSSType; U16 wBBPType; - U8 ssid[SSID_MAXLEN + 2]; + u8 ssid[SSID_MAXLEN + 2]; U32 uChannel; U32 uBeaconInt; BOOL bShareKeyAuth; - U8 byBasicRate; + u8 byBasicRate; } SCmdStartAP, *PSCmdStartAP; @@ -178,8 +178,8 @@ typedef struct tagSCmdStartAP { typedef struct tagSCmdSetWEP { BOOL bEnableWep; - U8 byKeyIndex; - U8 abyWepKey[WEP_NKEYS][WEP_KEYMAXLEN]; + u8 byKeyIndex; + u8 abyWepKey[WEP_NKEYS][WEP_KEYMAXLEN]; BOOL bWepKeyAvailable[WEP_NKEYS]; U32 auWepKeyLength[WEP_NKEYS]; @@ -190,11 +190,11 @@ typedef struct tagSCmdSetWEP { typedef struct tagSBSSIDItem { U32 uChannel; - U8 abyBSSID[BSSID_LEN]; - U8 abySSID[SSID_MAXLEN + 1]; + u8 abyBSSID[BSSID_LEN]; + u8 abySSID[SSID_MAXLEN + 1]; U16 wBeaconInterval; U16 wCapInfo; - U8 byNetType; + u8 byNetType; BOOL bWEPOn; U32 uRSSI; @@ -211,15 +211,15 @@ typedef struct tagSBSSIDList { typedef struct tagSNodeItem { // STA info U16 wAID; - U8 abyMACAddr[6]; + u8 abyMACAddr[6]; U16 wTxDataRate; U16 wInActiveCount; U16 wEnQueueCnt; U16 wFlags; BOOL bPWBitOn; - U8 byKeyIndex; + u8 byKeyIndex; U16 wWepKeyLength; - U8 abyWepKey[WEP_KEYMAXLEN]; + u8 abyWepKey[WEP_KEYMAXLEN]; // Auto rate fallback vars BOOL bIsInFallback; U32 uTxFailures; @@ -241,9 +241,9 @@ typedef struct tagSCmdLinkStatus { BOOL bLink; U16 wBSSType; - U8 byState; - U8 abyBSSID[BSSID_LEN]; - U8 abySSID[SSID_MAXLEN + 2]; + u8 byState; + u8 abyBSSID[BSSID_LEN]; + u8 abySSID[SSID_MAXLEN + 2]; U32 uChannel; U32 uLinkRate; @@ -353,8 +353,8 @@ typedef struct tagSStatMIBCount { U32 dwCntRxFrmLength; U32 dwCntTxBufLength; - U8 abyCntRxPattern[16]; - U8 abyCntTxPattern[16]; + u8 abyCntRxPattern[16]; + u8 abyCntTxPattern[16]; // Software check.... U32 dwCntRxDataErr; // rx buffer data software compare CRC err count @@ -415,24 +415,24 @@ enum { struct viawget_hostapd_param { U32 cmd; - U8 sta_addr[6]; + u8 sta_addr[6]; union { struct { U16 aid; U16 capability; - U8 tx_supp_rates; + u8 tx_supp_rates; } add_sta; struct { U32 inactive_sec; } get_info_sta; struct { - U8 alg; + u8 alg; U32 flags; U32 err; - U8 idx; - U8 seq[8]; + u8 idx; + u8 seq[8]; U16 key_len; - U8 key[0]; + u8 key[0]; } crypt; struct { U32 flags_and; @@ -441,19 +441,19 @@ struct viawget_hostapd_param { struct { U16 rid; U16 len; - U8 data[0]; + u8 data[0]; } rid; struct { - U8 len; - U8 data[0]; + u8 len; + u8 data[0]; } generic_elem; struct { U16 cmd; U16 reason_code; } mlme; struct { - U8 ssid_len; - U8 ssid[32]; + u8 ssid_len; + u8 ssid[32]; } scan_req; } u; }; diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index 13e8bbb..d7cf663 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -26,11 +26,9 @@ * */ - #ifndef __TTYPE_H__ #define __TTYPE_H__ - /******* Common definitions and typedefs ***********************************/ //2007-0115-05by MikeLiu @@ -40,7 +38,6 @@ //DavidWang - //2007-0814-01by MikeLiu #ifndef Safe_Close #define Safe_Close @@ -82,11 +79,9 @@ typedef int BOOL; typedef signed char I8; /* 8-bit signed integer */ -typedef unsigned char U8; /* 8-bit unsigned integer */ typedef unsigned short U16; /* 16-bit unsigned integer */ typedef unsigned long U32; /* 32-bit unsigned integer */ - typedef char CHAR; typedef signed short SHORT; typedef signed int INT; @@ -98,8 +93,6 @@ typedef unsigned int UINT; typedef unsigned long ULONG; typedef unsigned long long ULONGLONG; //64 bit - - typedef unsigned char BYTE; // 8-bit typedef unsigned short WORD; // 16-bit typedef unsigned long DWORD; // 32-bit @@ -116,7 +109,6 @@ typedef union tagUQuadWord { } UQuadWord; typedef UQuadWord QWORD; // 64-bit - /****** Common pointer types ***********************************************/ typedef unsigned long ULONG_PTR; // 32-bit -- cgit v0.10.2 From 26233e6e27e890d592708a3cd233667820c40254 Mon Sep 17 00:00:00 2001 From: Andres More Date: Wed, 12 May 2010 18:59:45 -0300 Subject: staging: vt6656: code cleanup, replaced U16 macro with u16 Removed custom macro for unsigned 16-bit integers. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/iocmd.h b/drivers/staging/vt6656/iocmd.h index 7fcf085..27ba8b7 100644 --- a/drivers/staging/vt6656/iocmd.h +++ b/drivers/staging/vt6656/iocmd.h @@ -111,8 +111,8 @@ typedef enum tagWZONETYPE { typedef struct tagSCmdRequest { u8 name[16]; void *data; - U16 wResult; - U16 wCmdCode; + u16 wResult; + u16 wCmdCode; } SCmdRequest, *PSCmdRequest; // @@ -132,8 +132,8 @@ typedef struct tagSCmdScan { typedef struct tagSCmdBSSJoin { - U16 wBSSType; - U16 wBBPType; + u16 wBSSType; + u16 wBBPType; u8 ssid[SSID_MAXLEN + 2]; U32 uChannel; BOOL bPSEnable; @@ -164,8 +164,8 @@ typedef struct tagSWPAResult { typedef struct tagSCmdStartAP { - U16 wBSSType; - U16 wBBPType; + u16 wBSSType; + u16 wBBPType; u8 ssid[SSID_MAXLEN + 2]; U32 uChannel; U32 uBeaconInt; @@ -192,8 +192,8 @@ typedef struct tagSBSSIDItem { U32 uChannel; u8 abyBSSID[BSSID_LEN]; u8 abySSID[SSID_MAXLEN + 1]; - U16 wBeaconInterval; - U16 wCapInfo; + u16 wBeaconInterval; + u16 wCapInfo; u8 byNetType; BOOL bWEPOn; U32 uRSSI; @@ -210,21 +210,21 @@ typedef struct tagSBSSIDList { typedef struct tagSNodeItem { // STA info - U16 wAID; + u16 wAID; u8 abyMACAddr[6]; - U16 wTxDataRate; - U16 wInActiveCount; - U16 wEnQueueCnt; - U16 wFlags; + u16 wTxDataRate; + u16 wInActiveCount; + u16 wEnQueueCnt; + u16 wFlags; BOOL bPWBitOn; u8 byKeyIndex; - U16 wWepKeyLength; + u16 wWepKeyLength; u8 abyWepKey[WEP_KEYMAXLEN]; // Auto rate fallback vars BOOL bIsInFallback; U32 uTxFailures; U32 uTxAttempts; - U16 wFailureRatio; + u16 wFailureRatio; } SNodeItem; @@ -240,7 +240,7 @@ typedef struct tagSNodeList { typedef struct tagSCmdLinkStatus { BOOL bLink; - U16 wBSSType; + u16 wBSSType; u8 byState; u8 abyBSSID[BSSID_LEN]; u8 abySSID[SSID_MAXLEN + 2]; @@ -418,8 +418,8 @@ struct viawget_hostapd_param { u8 sta_addr[6]; union { struct { - U16 aid; - U16 capability; + u16 aid; + u16 capability; u8 tx_supp_rates; } add_sta; struct { @@ -431,7 +431,7 @@ struct viawget_hostapd_param { U32 err; u8 idx; u8 seq[8]; - U16 key_len; + u16 key_len; u8 key[0]; } crypt; struct { @@ -439,8 +439,8 @@ struct viawget_hostapd_param { U32 flags_or; } set_flags_sta; struct { - U16 rid; - U16 len; + u16 rid; + u16 len; u8 data[0]; } rid; struct { @@ -448,8 +448,8 @@ struct viawget_hostapd_param { u8 data[0]; } generic_elem; struct { - U16 cmd; - U16 reason_code; + u16 cmd; + u16 reason_code; } mlme; struct { u8 ssid_len; diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index d7cf663..2b8419a 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -79,7 +79,6 @@ typedef int BOOL; typedef signed char I8; /* 8-bit signed integer */ -typedef unsigned short U16; /* 16-bit unsigned integer */ typedef unsigned long U32; /* 32-bit unsigned integer */ typedef char CHAR; -- cgit v0.10.2 From 659770d4033373340bc24fc125d1f3ba215e4669 Mon Sep 17 00:00:00 2001 From: Andres More Date: Wed, 12 May 2010 18:59:46 -0300 Subject: staging: vt6656: code cleanup, replaced U32 macro with u32 Removed custom macro for unsigned 32-bit integers. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index 6d255ca..b507bb8 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -435,7 +435,7 @@ typedef struct __device_opt { int short_retry; int long_retry; int bbp_type; - U32 flags; + u32 flags; } OPTIONS, *POPTIONS; @@ -453,17 +453,17 @@ typedef struct __device_info { struct tasklet_struct ReadWorkItem; struct tasklet_struct RxMngWorkItem; - U32 rx_buf_sz; + u32 rx_buf_sz; int multicast_limit; BYTE byRxMode; spinlock_t lock; - U32 rx_bytes; + u32 rx_bytes; BYTE byRevId; - U32 flags; + u32 flags; ULONG Flags; SCache sDupRxCache; diff --git a/drivers/staging/vt6656/iocmd.h b/drivers/staging/vt6656/iocmd.h index 27ba8b7..fbba1d5 100644 --- a/drivers/staging/vt6656/iocmd.h +++ b/drivers/staging/vt6656/iocmd.h @@ -37,12 +37,6 @@ #define DEF #endif -//typedef int BOOL; -//typedef uint32_t u32; -//typedef uint16_t u16; -//typedef uint8_t u8; - - // ioctl Command code #define MAGIC_CODE 0x3142 #define IOCTL_CMD_TEST (SIOCDEVPRIVATE + 0) @@ -50,7 +44,6 @@ #define IOCTL_CMD_HOSTAPD (SIOCDEVPRIVATE + 2) #define IOCTL_CMD_WPA (SIOCDEVPRIVATE + 3) - typedef enum tagWMAC_CMD { WLAN_CMD_BSS_SCAN, @@ -90,7 +83,6 @@ typedef enum tagWZONETYPE { #define ADHOC_STARTED 1 #define ADHOC_JOINTED 2 - #define PHY80211a 0 #define PHY80211b 1 #define PHY80211g 2 @@ -125,7 +117,6 @@ typedef struct tagSCmdScan { } SCmdScan, *PSCmdScan; - // // BSS Join // @@ -135,7 +126,7 @@ typedef struct tagSCmdBSSJoin { u16 wBSSType; u16 wBBPType; u8 ssid[SSID_MAXLEN + 2]; - U32 uChannel; + u32 uChannel; BOOL bPSEnable; BOOL bShareKeyAuth; @@ -167,43 +158,40 @@ typedef struct tagSCmdStartAP { u16 wBSSType; u16 wBBPType; u8 ssid[SSID_MAXLEN + 2]; - U32 uChannel; - U32 uBeaconInt; + u32 uChannel; + u32 uBeaconInt; BOOL bShareKeyAuth; u8 byBasicRate; } SCmdStartAP, *PSCmdStartAP; - typedef struct tagSCmdSetWEP { BOOL bEnableWep; u8 byKeyIndex; u8 abyWepKey[WEP_NKEYS][WEP_KEYMAXLEN]; BOOL bWepKeyAvailable[WEP_NKEYS]; - U32 auWepKeyLength[WEP_NKEYS]; + u32 auWepKeyLength[WEP_NKEYS]; } SCmdSetWEP, *PSCmdSetWEP; - - typedef struct tagSBSSIDItem { - U32 uChannel; + u32 uChannel; u8 abyBSSID[BSSID_LEN]; u8 abySSID[SSID_MAXLEN + 1]; u16 wBeaconInterval; u16 wCapInfo; u8 byNetType; BOOL bWEPOn; - U32 uRSSI; + u32 uRSSI; } SBSSIDItem; typedef struct tagSBSSIDList { - U32 uItem; + u32 uItem; SBSSIDItem sBSSIDList[0]; } SBSSIDList, *PSBSSIDList; @@ -222,8 +210,8 @@ typedef struct tagSNodeItem { u8 abyWepKey[WEP_KEYMAXLEN]; // Auto rate fallback vars BOOL bIsInFallback; - U32 uTxFailures; - U32 uTxAttempts; + u32 uTxFailures; + u32 uTxAttempts; u16 wFailureRatio; } SNodeItem; @@ -231,7 +219,7 @@ typedef struct tagSNodeItem { typedef struct tagSNodeList { - U32 uItem; + u32 uItem; SNodeItem sNodeList[0]; } SNodeList, *PSNodeList; @@ -244,8 +232,8 @@ typedef struct tagSCmdLinkStatus { u8 byState; u8 abyBSSID[BSSID_LEN]; u8 abySSID[SSID_MAXLEN + 2]; - U32 uChannel; - U32 uLinkRate; + u32 uChannel; + u32 uLinkRate; } SCmdLinkStatus, *PSCmdLinkStatus; @@ -253,18 +241,18 @@ typedef struct tagSCmdLinkStatus { // 802.11 counter // typedef struct tagSDot11MIBCount { - U32 TransmittedFragmentCount; - U32 MulticastTransmittedFrameCount; - U32 FailedCount; - U32 RetryCount; - U32 MultipleRetryCount; - U32 RTSSuccessCount; - U32 RTSFailureCount; - U32 ACKFailureCount; - U32 FrameDuplicateCount; - U32 ReceivedFragmentCount; - U32 MulticastReceivedFrameCount; - U32 FCSErrorCount; + u32 TransmittedFragmentCount; + u32 MulticastTransmittedFrameCount; + u32 FailedCount; + u32 RetryCount; + u32 MultipleRetryCount; + u32 RTSSuccessCount; + u32 RTSFailureCount; + u32 ACKFailureCount; + u32 FrameDuplicateCount; + u32 ReceivedFragmentCount; + u32 MulticastReceivedFrameCount; + u32 FCSErrorCount; } SDot11MIBCount, *PSDot11MIBCount; @@ -276,119 +264,115 @@ typedef struct tagSStatMIBCount { // // ISR status count // - U32 dwIsrTx0OK; - U32 dwIsrTx1OK; - U32 dwIsrBeaconTxOK; - U32 dwIsrRxOK; - U32 dwIsrTBTTInt; - U32 dwIsrSTIMERInt; - U32 dwIsrUnrecoverableError; - U32 dwIsrSoftInterrupt; - U32 dwIsrRxNoBuf; + u32 dwIsrTx0OK; + u32 dwIsrTx1OK; + u32 dwIsrBeaconTxOK; + u32 dwIsrRxOK; + u32 dwIsrTBTTInt; + u32 dwIsrSTIMERInt; + u32 dwIsrUnrecoverableError; + u32 dwIsrSoftInterrupt; + u32 dwIsrRxNoBuf; ///////////////////////////////////// - U32 dwIsrUnknown; // unknown interrupt count + u32 dwIsrUnknown; /* unknown interrupt count */ // RSR status count // - U32 dwRsrFrmAlgnErr; - U32 dwRsrErr; - U32 dwRsrCRCErr; - U32 dwRsrCRCOk; - U32 dwRsrBSSIDOk; - U32 dwRsrADDROk; - U32 dwRsrICVOk; - U32 dwNewRsrShortPreamble; - U32 dwRsrLong; - U32 dwRsrRunt; - - U32 dwRsrRxControl; - U32 dwRsrRxData; - U32 dwRsrRxManage; - - U32 dwRsrRxPacket; - U32 dwRsrRxOctet; - U32 dwRsrBroadcast; - U32 dwRsrMulticast; - U32 dwRsrDirected; + u32 dwRsrFrmAlgnErr; + u32 dwRsrErr; + u32 dwRsrCRCErr; + u32 dwRsrCRCOk; + u32 dwRsrBSSIDOk; + u32 dwRsrADDROk; + u32 dwRsrICVOk; + u32 dwNewRsrShortPreamble; + u32 dwRsrLong; + u32 dwRsrRunt; + + u32 dwRsrRxControl; + u32 dwRsrRxData; + u32 dwRsrRxManage; + + u32 dwRsrRxPacket; + u32 dwRsrRxOctet; + u32 dwRsrBroadcast; + u32 dwRsrMulticast; + u32 dwRsrDirected; // 64-bit OID - U32 ullRsrOK; + u32 ullRsrOK; // for some optional OIDs (64 bits) and DMI support - U32 ullRxBroadcastBytes; - U32 ullRxMulticastBytes; - U32 ullRxDirectedBytes; - U32 ullRxBroadcastFrames; - U32 ullRxMulticastFrames; - U32 ullRxDirectedFrames; - - U32 dwRsrRxFragment; - U32 dwRsrRxFrmLen64; - U32 dwRsrRxFrmLen65_127; - U32 dwRsrRxFrmLen128_255; - U32 dwRsrRxFrmLen256_511; - U32 dwRsrRxFrmLen512_1023; - U32 dwRsrRxFrmLen1024_1518; + u32 ullRxBroadcastBytes; + u32 ullRxMulticastBytes; + u32 ullRxDirectedBytes; + u32 ullRxBroadcastFrames; + u32 ullRxMulticastFrames; + u32 ullRxDirectedFrames; + + u32 dwRsrRxFragment; + u32 dwRsrRxFrmLen64; + u32 dwRsrRxFrmLen65_127; + u32 dwRsrRxFrmLen128_255; + u32 dwRsrRxFrmLen256_511; + u32 dwRsrRxFrmLen512_1023; + u32 dwRsrRxFrmLen1024_1518; // TSR0,1 status count // - U32 dwTsrTotalRetry[2]; // total collision retry count - U32 dwTsrOnceRetry[2]; // this packet only occur one collision - U32 dwTsrMoreThanOnceRetry[2]; // this packet occur more than one collision - U32 dwTsrRetry[2]; // this packet has ever occur collision, - // that is (dwTsrOnceCollision0 + dwTsrMoreThanOnceCollision0) - U32 dwTsrACKData[2]; - U32 dwTsrErr[2]; - U32 dwAllTsrOK[2]; - U32 dwTsrRetryTimeout[2]; - U32 dwTsrTransmitTimeout[2]; - - U32 dwTsrTxPacket[2]; - U32 dwTsrTxOctet[2]; - U32 dwTsrBroadcast[2]; - U32 dwTsrMulticast[2]; - U32 dwTsrDirected[2]; + u32 dwTsrTotalRetry[2]; /* total collision retry count */ + u32 dwTsrOnceRetry[2]; /* this packet had one collision */ + u32 dwTsrMoreThanOnceRetry[2]; /* this packet had many collisions */ + u32 dwTsrRetry[2]; /* this packet has ever occur collision, + * that is (dwTsrOnceCollision0 plus + * dwTsrMoreThanOnceCollision0) */ + u32 dwTsrACKData[2]; + u32 dwTsrErr[2]; + u32 dwAllTsrOK[2]; + u32 dwTsrRetryTimeout[2]; + u32 dwTsrTransmitTimeout[2]; + + u32 dwTsrTxPacket[2]; + u32 dwTsrTxOctet[2]; + u32 dwTsrBroadcast[2]; + u32 dwTsrMulticast[2]; + u32 dwTsrDirected[2]; // RD/TD count - U32 dwCntRxFrmLength; - U32 dwCntTxBufLength; + u32 dwCntRxFrmLength; + u32 dwCntTxBufLength; u8 abyCntRxPattern[16]; u8 abyCntTxPattern[16]; - // Software check.... - U32 dwCntRxDataErr; // rx buffer data software compare CRC err count - U32 dwCntDecryptErr; // rx buffer data software compare CRC err count - U32 dwCntRxICVErr; // rx buffer data software compare CRC err count - U32 idxRxErrorDesc; // index for rx data error RD + /* Software check.... */ + u32 dwCntRxDataErr; /* rx buffer data CRC err count */ + u32 dwCntDecryptErr; /* rx buffer data CRC err count */ + u32 dwCntRxICVErr; /* rx buffer data CRC err count */ + u32 idxRxErrorDesc; /* index for rx data error RD */ - // 64-bit OID - U32 ullTsrOK[2]; + /* 64-bit OID */ + u32 ullTsrOK[2]; // for some optional OIDs (64 bits) and DMI support - U32 ullTxBroadcastFrames[2]; - U32 ullTxMulticastFrames[2]; - U32 ullTxDirectedFrames[2]; - U32 ullTxBroadcastBytes[2]; - U32 ullTxMulticastBytes[2]; - U32 ullTxDirectedBytes[2]; + u32 ullTxBroadcastFrames[2]; + u32 ullTxMulticastFrames[2]; + u32 ullTxDirectedFrames[2]; + u32 ullTxBroadcastBytes[2]; + u32 ullTxMulticastBytes[2]; + u32 ullTxDirectedBytes[2]; } SStatMIBCount, *PSStatMIBCount; - - - typedef struct tagSCmdValue { - U32 dwValue; + u32 dwValue; } SCmdValue, *PSCmdValue; - // // hostapd & viawget ioctl related // - // VIAGWET_IOCTL_HOSTAPD ioctl() cmd: enum { VIAWGET_HOSTAPD_FLUSH = 1, @@ -405,16 +389,13 @@ enum { VIAWGET_HOSTAPD_STA_CLEAR_STATS = 12, }; - #define VIAWGET_HOSTAPD_GENERIC_ELEMENT_HDR_LEN \ ((int) (&((struct viawget_hostapd_param *) 0)->u.generic_elem.data)) // Maximum length for algorithm names (-1 for nul termination) used in ioctl() - - struct viawget_hostapd_param { - U32 cmd; + u32 cmd; u8 sta_addr[6]; union { struct { @@ -423,20 +404,20 @@ struct viawget_hostapd_param { u8 tx_supp_rates; } add_sta; struct { - U32 inactive_sec; + u32 inactive_sec; } get_info_sta; struct { u8 alg; - U32 flags; - U32 err; + u32 flags; + u32 err; u8 idx; u8 seq[8]; u16 key_len; u8 key[0]; } crypt; struct { - U32 flags_and; - U32 flags_or; + u32 flags_and; + u32 flags_or; } set_flags_sta; struct { u16 rid; @@ -458,16 +439,12 @@ struct viawget_hostapd_param { } u; }; - - /*--------------------- Export Classes ----------------------------*/ /*--------------------- Export Variables --------------------------*/ - /*--------------------- Export Types ------------------------------*/ - /*--------------------- Export Functions --------------------------*/ #endif /* __IOCMD_H__ */ diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index 2b8419a..a85d4f8 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -79,8 +79,6 @@ typedef int BOOL; typedef signed char I8; /* 8-bit signed integer */ -typedef unsigned long U32; /* 32-bit unsigned integer */ - typedef char CHAR; typedef signed short SHORT; typedef signed int INT; -- cgit v0.10.2 From 71e510673134999627fd180181079ffccb9ec756 Mon Sep 17 00:00:00 2001 From: Andres More Date: Wed, 12 May 2010 18:59:47 -0300 Subject: staging: vt6656: code cleanup, removed unused I8 macro Removed custom macro for signed 8-bit integers, which was not used. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index a85d4f8..4dfe00a 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -72,13 +72,6 @@ typedef int BOOL; /****** Simple typedefs ***************************************************/ -/* These lines assume that your compiler's longs are 32 bits and - * shorts are 16 bits. It is already assumed that chars are 8 bits, - * but it doesn't matter if they're signed or unsigned. - */ - -typedef signed char I8; /* 8-bit signed integer */ - typedef char CHAR; typedef signed short SHORT; typedef signed int INT; -- cgit v0.10.2 From 3a215e0ff4184314f7f1a099354a272ddedff289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Wed, 12 May 2010 20:54:39 -0700 Subject: Staging: vt6655: remove IN definition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove empty IN definition used to specify input parameters. Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/80211mgr.c b/drivers/staging/vt6655/80211mgr.c index da964a9..38697c8 100644 --- a/drivers/staging/vt6655/80211mgr.c +++ b/drivers/staging/vt6655/80211mgr.c @@ -91,7 +91,7 @@ static int msglevel =MSG_LEVEL_INFO; void vMgrEncodeBeacon( - IN PWLAN_FR_BEACON pFrame + PWLAN_FR_BEACON pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -123,7 +123,7 @@ vMgrEncodeBeacon( void vMgrDecodeBeacon( - IN PWLAN_FR_BEACON pFrame + PWLAN_FR_BEACON pFrame ) { PWLAN_IE pItem; @@ -244,7 +244,7 @@ vMgrDecodeBeacon( void vMgrEncodeIBSSATIM( - IN PWLAN_FR_IBSSATIM pFrame + PWLAN_FR_IBSSATIM pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -267,7 +267,7 @@ vMgrEncodeIBSSATIM( void vMgrDecodeIBSSATIM( - IN PWLAN_FR_IBSSATIM pFrame + PWLAN_FR_IBSSATIM pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -289,7 +289,7 @@ vMgrDecodeIBSSATIM( void vMgrEncodeDisassociation( - IN PWLAN_FR_DISASSOC pFrame + PWLAN_FR_DISASSOC pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -317,7 +317,7 @@ vMgrEncodeDisassociation( void vMgrDecodeDisassociation( - IN PWLAN_FR_DISASSOC pFrame + PWLAN_FR_DISASSOC pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -343,7 +343,7 @@ vMgrDecodeDisassociation( void vMgrEncodeAssocRequest( - IN PWLAN_FR_ASSOCREQ pFrame + PWLAN_FR_ASSOCREQ pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -370,7 +370,7 @@ vMgrEncodeAssocRequest( void vMgrDecodeAssocRequest( - IN PWLAN_FR_ASSOCREQ pFrame + PWLAN_FR_ASSOCREQ pFrame ) { PWLAN_IE pItem; @@ -436,7 +436,7 @@ vMgrDecodeAssocRequest( void vMgrEncodeAssocResponse( - IN PWLAN_FR_ASSOCRESP pFrame + PWLAN_FR_ASSOCRESP pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -468,7 +468,7 @@ vMgrEncodeAssocResponse( void vMgrDecodeAssocResponse( - IN PWLAN_FR_ASSOCRESP pFrame + PWLAN_FR_ASSOCRESP pFrame ) { PWLAN_IE pItem; @@ -514,7 +514,7 @@ vMgrDecodeAssocResponse( void vMgrEncodeReassocRequest( - IN PWLAN_FR_REASSOCREQ pFrame + PWLAN_FR_REASSOCREQ pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -546,7 +546,7 @@ vMgrEncodeReassocRequest( void vMgrDecodeReassocRequest( - IN PWLAN_FR_REASSOCREQ pFrame + PWLAN_FR_REASSOCREQ pFrame ) { PWLAN_IE pItem; @@ -618,7 +618,7 @@ vMgrDecodeReassocRequest( void vMgrEncodeProbeRequest( - IN PWLAN_FR_PROBEREQ pFrame + PWLAN_FR_PROBEREQ pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -639,7 +639,7 @@ vMgrEncodeProbeRequest( void vMgrDecodeProbeRequest( - IN PWLAN_FR_PROBEREQ pFrame + PWLAN_FR_PROBEREQ pFrame ) { PWLAN_IE pItem; @@ -692,7 +692,7 @@ vMgrDecodeProbeRequest( void vMgrEncodeProbeResponse( - IN PWLAN_FR_PROBERESP pFrame + PWLAN_FR_PROBERESP pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -726,7 +726,7 @@ vMgrEncodeProbeResponse( void vMgrDecodeProbeResponse( - IN PWLAN_FR_PROBERESP pFrame + PWLAN_FR_PROBERESP pFrame ) { PWLAN_IE pItem; @@ -840,7 +840,7 @@ vMgrDecodeProbeResponse( void vMgrEncodeAuthen( - IN PWLAN_FR_AUTHEN pFrame + PWLAN_FR_AUTHEN pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -871,7 +871,7 @@ vMgrEncodeAuthen( void vMgrDecodeAuthen( - IN PWLAN_FR_AUTHEN pFrame + PWLAN_FR_AUTHEN pFrame ) { PWLAN_IE pItem; @@ -911,7 +911,7 @@ vMgrDecodeAuthen( void vMgrEncodeDeauthen( - IN PWLAN_FR_DEAUTHEN pFrame + PWLAN_FR_DEAUTHEN pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -938,7 +938,7 @@ vMgrEncodeDeauthen( void vMgrDecodeDeauthen( - IN PWLAN_FR_DEAUTHEN pFrame + PWLAN_FR_DEAUTHEN pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -964,7 +964,7 @@ vMgrDecodeDeauthen( void vMgrEncodeReassocResponse( - IN PWLAN_FR_REASSOCRESP pFrame + PWLAN_FR_REASSOCRESP pFrame ) { pFrame->pHdr = (PUWLAN_80211HDR)pFrame->pBuf; @@ -997,7 +997,7 @@ vMgrEncodeReassocResponse( void vMgrDecodeReassocResponse( - IN PWLAN_FR_REASSOCRESP pFrame + PWLAN_FR_REASSOCRESP pFrame ) { PWLAN_IE pItem; diff --git a/drivers/staging/vt6655/80211mgr.h b/drivers/staging/vt6655/80211mgr.h index c3eafd2..658fe14 100644 --- a/drivers/staging/vt6655/80211mgr.h +++ b/drivers/staging/vt6655/80211mgr.h @@ -716,112 +716,112 @@ typedef struct tagWLAN_FR_DEAUTHEN { void vMgrEncodeBeacon( - IN PWLAN_FR_BEACON pFrame + PWLAN_FR_BEACON pFrame ); void vMgrDecodeBeacon( - IN PWLAN_FR_BEACON pFrame + PWLAN_FR_BEACON pFrame ); void vMgrEncodeIBSSATIM( - IN PWLAN_FR_IBSSATIM pFrame + PWLAN_FR_IBSSATIM pFrame ); void vMgrDecodeIBSSATIM( - IN PWLAN_FR_IBSSATIM pFrame + PWLAN_FR_IBSSATIM pFrame ); void vMgrEncodeDisassociation( - IN PWLAN_FR_DISASSOC pFrame + PWLAN_FR_DISASSOC pFrame ); void vMgrDecodeDisassociation( - IN PWLAN_FR_DISASSOC pFrame + PWLAN_FR_DISASSOC pFrame ); void vMgrEncodeAssocRequest( - IN PWLAN_FR_ASSOCREQ pFrame + PWLAN_FR_ASSOCREQ pFrame ); void vMgrDecodeAssocRequest( - IN PWLAN_FR_ASSOCREQ pFrame + PWLAN_FR_ASSOCREQ pFrame ); void vMgrEncodeAssocResponse( - IN PWLAN_FR_ASSOCRESP pFrame + PWLAN_FR_ASSOCRESP pFrame ); void vMgrDecodeAssocResponse( - IN PWLAN_FR_ASSOCRESP pFrame + PWLAN_FR_ASSOCRESP pFrame ); void vMgrEncodeReassocRequest( - IN PWLAN_FR_REASSOCREQ pFrame + PWLAN_FR_REASSOCREQ pFrame ); void vMgrDecodeReassocRequest( - IN PWLAN_FR_REASSOCREQ pFrame + PWLAN_FR_REASSOCREQ pFrame ); void vMgrEncodeProbeRequest( - IN PWLAN_FR_PROBEREQ pFrame + PWLAN_FR_PROBEREQ pFrame ); void vMgrDecodeProbeRequest( - IN PWLAN_FR_PROBEREQ pFrame + PWLAN_FR_PROBEREQ pFrame ); void vMgrEncodeProbeResponse( - IN PWLAN_FR_PROBERESP pFrame + PWLAN_FR_PROBERESP pFrame ); void vMgrDecodeProbeResponse( - IN PWLAN_FR_PROBERESP pFrame + PWLAN_FR_PROBERESP pFrame ); void vMgrEncodeAuthen( - IN PWLAN_FR_AUTHEN pFrame + PWLAN_FR_AUTHEN pFrame ); void vMgrDecodeAuthen( - IN PWLAN_FR_AUTHEN pFrame + PWLAN_FR_AUTHEN pFrame ); void vMgrEncodeDeauthen( - IN PWLAN_FR_DEAUTHEN pFrame + PWLAN_FR_DEAUTHEN pFrame ); void vMgrDecodeDeauthen( - IN PWLAN_FR_DEAUTHEN pFrame + PWLAN_FR_DEAUTHEN pFrame ); void vMgrEncodeReassocResponse( - IN PWLAN_FR_REASSOCRESP pFrame + PWLAN_FR_REASSOCRESP pFrame ); void vMgrDecodeReassocResponse( - IN PWLAN_FR_REASSOCRESP pFrame + PWLAN_FR_REASSOCRESP pFrame ); #endif// __80211MGR_H__ diff --git a/drivers/staging/vt6655/IEEE11h.c b/drivers/staging/vt6655/IEEE11h.c index 7781300..22f12f5 100644 --- a/drivers/staging/vt6655/IEEE11h.c +++ b/drivers/staging/vt6655/IEEE11h.c @@ -203,8 +203,8 @@ static BOOL s_bRxTPCReq(PSMgmtObject pMgmt, PWLAN_FRAME_TPCREQ pTPCReq, BYTE byR -*/ BOOL IEEE11hbMgrRxAction ( - IN void *pMgmtHandle, - IN void *pRxPacket + void *pMgmtHandle, + void *pRxPacket ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle; @@ -265,7 +265,7 @@ IEEE11hbMgrRxAction ( BOOL IEEE11hbMSRRepTx ( - IN void *pMgmtHandle + void *pMgmtHandle ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle; diff --git a/drivers/staging/vt6655/IEEE11h.h b/drivers/staging/vt6655/IEEE11h.h index 1707388..ae32498 100644 --- a/drivers/staging/vt6655/IEEE11h.h +++ b/drivers/staging/vt6655/IEEE11h.h @@ -46,7 +46,7 @@ /*--------------------- Export Functions --------------------------*/ BOOL IEEE11hbMSRRepTx ( - IN void *pMgmtHandle + void *pMgmtHandle ); #endif // __IEEE11h_H__ diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index 7a69490..2931a0f 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -1725,13 +1725,13 @@ s_ulGetRatio(PSDevice pDevice); static void s_vChangeAntenna( - IN PSDevice pDevice + PSDevice pDevice ); static void s_vChangeAntenna ( - IN PSDevice pDevice + PSDevice pDevice ) { @@ -1778,10 +1778,10 @@ s_vChangeAntenna ( */ UINT BBuGetFrameTime ( - IN BYTE byPreambleType, - IN BYTE byPktType, - IN UINT cbFrameLength, - IN WORD wRate + BYTE byPreambleType, + BYTE byPktType, + UINT cbFrameLength, + WORD wRate ) { UINT uFrameTime; @@ -1845,10 +1845,10 @@ BBuGetFrameTime ( */ void BBvCaculateParameter ( - IN PSDevice pDevice, - IN UINT cbFrameLength, - IN WORD wRate, - IN BYTE byPacketType, + PSDevice pDevice, + UINT cbFrameLength, + WORD wRate, + BYTE byPacketType, OUT PWORD pwPhyLen, OUT PBYTE pbyPhySrv, OUT PBYTE pbyPhySgn @@ -2878,7 +2878,7 @@ BBvAntennaDiversity (PSDevice pDevice, BYTE byRxRate, BYTE bySQ3) void TimerSQ3CallBack ( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -2926,7 +2926,7 @@ TimerSQ3CallBack ( void TimerState1CallBack ( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6655/baseband.h b/drivers/staging/vt6655/baseband.h index 23f7ad1..3eea7aa 100644 --- a/drivers/staging/vt6655/baseband.h +++ b/drivers/staging/vt6655/baseband.h @@ -120,18 +120,18 @@ UINT BBuGetFrameTime( - IN BYTE byPreambleType, - IN BYTE byPktType, - IN UINT cbFrameLength, - IN WORD wRate + BYTE byPreambleType, + BYTE byPktType, + UINT cbFrameLength, + WORD wRate ); void BBvCaculateParameter ( - IN PSDevice pDevice, - IN UINT cbFrameLength, - IN WORD wRate, - IN BYTE byPacketType, + PSDevice pDevice, + UINT cbFrameLength, + WORD wRate, + BYTE byPacketType, OUT PWORD pwPhyLen, OUT PBYTE pbyPhySrv, OUT PBYTE pbyPhySgn @@ -162,12 +162,12 @@ void BBvExitDeepSleep(DWORD_PTR dwIoBase, BYTE byLocalID); void TimerSQ3CallBack ( - IN void *hDeviceContext + void *hDeviceContext ); void TimerState1CallBack( - IN void *hDeviceContext + void *hDeviceContext ); void BBvAntennaDiversity(PSDevice pDevice, BYTE byRxRate, BYTE bySQ3); diff --git a/drivers/staging/vt6655/bssdb.c b/drivers/staging/vt6655/bssdb.c index 3af0ccb..e64238e 100644 --- a/drivers/staging/vt6655/bssdb.c +++ b/drivers/staging/vt6655/bssdb.c @@ -91,18 +91,18 @@ const WORD awHWRetry1[5][5] = { /*--------------------- Static Functions --------------------------*/ void s_vCheckSensitivity( - IN void *hDeviceContext + void *hDeviceContext ); #ifdef Calcu_LinkQual void s_uCalculateLinkQual( - IN void *hDeviceContext + void *hDeviceContext ); #endif void s_vCheckPreEDThreshold( - IN void *hDeviceContext + void *hDeviceContext ); /*--------------------- Export Variables --------------------------*/ @@ -125,10 +125,10 @@ void s_vCheckPreEDThreshold( PKnownBSS BSSpSearchBSSList( - IN void *hDeviceContext, - IN PBYTE pbyDesireBSSID, - IN PBYTE pbyDesireSSID, - IN CARD_PHY_TYPE ePhyType + void *hDeviceContext, + PBYTE pbyDesireBSSID, + PBYTE pbyDesireSSID, + CARD_PHY_TYPE ePhyType ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -282,8 +282,8 @@ if(pDevice->bLinkPass==FALSE) pCurrBSS->bSelected = FALSE; void BSSvClearBSSList( - IN void *hDeviceContext, - IN BOOL bKeepCurrBSSID + void *hDeviceContext, + BOOL bKeepCurrBSSID ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -325,9 +325,9 @@ BSSvClearBSSList( -*/ PKnownBSS BSSpAddrIsInBSSList( - IN void *hDeviceContext, - IN PBYTE abyBSSID, - IN PWLAN_IE_SSID pSSID + void *hDeviceContext, + PBYTE abyBSSID, + PWLAN_IE_SSID pSSID ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -368,23 +368,23 @@ BSSpAddrIsInBSSList( BOOL BSSbInsertToBSSList ( - IN void *hDeviceContext, - IN PBYTE abyBSSIDAddr, - IN QWORD qwTimestamp, - IN WORD wBeaconInterval, - IN WORD wCapInfo, - IN BYTE byCurrChannel, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates, - IN PERPObject psERP, - IN PWLAN_IE_RSN pRSN, - IN PWLAN_IE_RSN_EXT pRSNWPA, - IN PWLAN_IE_COUNTRY pIE_Country, - IN PWLAN_IE_QUIET pIE_Quiet, - IN UINT uIELength, - IN PBYTE pbyIEs, - IN void *pRxPacketContext + void *hDeviceContext, + PBYTE abyBSSIDAddr, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + UINT uIELength, + PBYTE pbyIEs, + void *pRxPacketContext ) { @@ -585,24 +585,24 @@ BSSbInsertToBSSList ( BOOL BSSbUpdateToBSSList ( - IN void *hDeviceContext, - IN QWORD qwTimestamp, - IN WORD wBeaconInterval, - IN WORD wCapInfo, - IN BYTE byCurrChannel, - IN BOOL bChannelHit, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates, - IN PERPObject psERP, - IN PWLAN_IE_RSN pRSN, - IN PWLAN_IE_RSN_EXT pRSNWPA, - IN PWLAN_IE_COUNTRY pIE_Country, - IN PWLAN_IE_QUIET pIE_Quiet, - IN PKnownBSS pBSSList, - IN UINT uIELength, - IN PBYTE pbyIEs, - IN void *pRxPacketContext + void *hDeviceContext, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + BOOL bChannelHit, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + PKnownBSS pBSSList, + UINT uIELength, + PBYTE pbyIEs, + void *pRxPacketContext ) { int ii; @@ -764,8 +764,8 @@ BSSbUpdateToBSSList ( BOOL BSSDBbIsSTAInNodeDB( - IN void *pMgmtObject, - IN PBYTE abyDstAddr, + void *pMgmtObject, + PBYTE abyDstAddr, OUT PUINT puNodeIndex ) { @@ -799,7 +799,7 @@ BSSDBbIsSTAInNodeDB( -*/ void BSSvCreateOneNode( - IN void *hDeviceContext, + void *hDeviceContext, OUT PUINT puNodeIndex ) { @@ -864,8 +864,8 @@ BSSvCreateOneNode( -*/ void BSSvRemoveOneNode( - IN void *hDeviceContext, - IN UINT uNodeIndex + void *hDeviceContext, + UINT uNodeIndex ) { @@ -897,10 +897,10 @@ BSSvRemoveOneNode( void BSSvUpdateAPNode( - IN void *hDeviceContext, - IN PWORD pwCapInfo, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates + void *hDeviceContext, + PWORD pwCapInfo, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -960,7 +960,7 @@ BSSvUpdateAPNode( void BSSvAddMulticastNode( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1013,7 +1013,7 @@ UINT status; #endif void BSSvSecondCallBack( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1390,11 +1390,11 @@ start: void BSSvUpdateNodeTxCounter( - IN void *hDeviceContext, - IN BYTE byTsr0, - IN BYTE byTsr1, - IN PBYTE pbyBuffer, - IN UINT uFIFOHeaderSize + void *hDeviceContext, + BYTE byTsr0, + BYTE byTsr1, + PBYTE pbyBuffer, + UINT uFIFOHeaderSize ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1583,8 +1583,8 @@ BSSvUpdateNodeTxCounter( void BSSvClearNodeDBTable( - IN void *hDeviceContext, - IN UINT uStartIndex + void *hDeviceContext, + UINT uStartIndex ) { @@ -1611,7 +1611,7 @@ BSSvClearNodeDBTable( void s_vCheckSensitivity( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1661,7 +1661,7 @@ void s_vCheckSensitivity( void BSSvClearAnyBSSJoinRecord ( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1676,7 +1676,7 @@ BSSvClearAnyBSSJoinRecord ( #ifdef Calcu_LinkQual void s_uCalculateLinkQual( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1724,7 +1724,7 @@ else #endif void s_vCheckPreEDThreshold( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6655/bssdb.h b/drivers/staging/vt6655/bssdb.h index a66e14f..ec1e32b 100644 --- a/drivers/staging/vt6655/bssdb.h +++ b/drivers/staging/vt6655/bssdb.h @@ -244,128 +244,128 @@ typedef struct tagKnownNodeDB { PKnownBSS BSSpSearchBSSList( - IN void *hDeviceContext, - IN PBYTE pbyDesireBSSID, - IN PBYTE pbyDesireSSID, - IN CARD_PHY_TYPE ePhyType + void *hDeviceContext, + PBYTE pbyDesireBSSID, + PBYTE pbyDesireSSID, + CARD_PHY_TYPE ePhyType ); PKnownBSS BSSpAddrIsInBSSList( - IN void *hDeviceContext, - IN PBYTE abyBSSID, - IN PWLAN_IE_SSID pSSID + void *hDeviceContext, + PBYTE abyBSSID, + PWLAN_IE_SSID pSSID ); void BSSvClearBSSList( - IN void *hDeviceContext, - IN BOOL bKeepCurrBSSID + void *hDeviceContext, + BOOL bKeepCurrBSSID ); BOOL BSSbInsertToBSSList( - IN void *hDeviceContext, - IN PBYTE abyBSSIDAddr, - IN QWORD qwTimestamp, - IN WORD wBeaconInterval, - IN WORD wCapInfo, - IN BYTE byCurrChannel, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates, - IN PERPObject psERP, - IN PWLAN_IE_RSN pRSN, - IN PWLAN_IE_RSN_EXT pRSNWPA, - IN PWLAN_IE_COUNTRY pIE_Country, - IN PWLAN_IE_QUIET pIE_Quiet, - IN UINT uIELength, - IN PBYTE pbyIEs, - IN void *pRxPacketContext + void *hDeviceContext, + PBYTE abyBSSIDAddr, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + UINT uIELength, + PBYTE pbyIEs, + void *pRxPacketContext ); BOOL BSSbUpdateToBSSList( - IN void *hDeviceContext, - IN QWORD qwTimestamp, - IN WORD wBeaconInterval, - IN WORD wCapInfo, - IN BYTE byCurrChannel, - IN BOOL bChannelHit, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pSuppRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates, - IN PERPObject psERP, - IN PWLAN_IE_RSN pRSN, - IN PWLAN_IE_RSN_EXT pRSNWPA, - IN PWLAN_IE_COUNTRY pIE_Country, - IN PWLAN_IE_QUIET pIE_Quiet, - IN PKnownBSS pBSSList, - IN UINT uIELength, - IN PBYTE pbyIEs, - IN void *pRxPacketContext + void *hDeviceContext, + QWORD qwTimestamp, + WORD wBeaconInterval, + WORD wCapInfo, + BYTE byCurrChannel, + BOOL bChannelHit, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pSuppRates, + PWLAN_IE_SUPP_RATES pExtSuppRates, + PERPObject psERP, + PWLAN_IE_RSN pRSN, + PWLAN_IE_RSN_EXT pRSNWPA, + PWLAN_IE_COUNTRY pIE_Country, + PWLAN_IE_QUIET pIE_Quiet, + PKnownBSS pBSSList, + UINT uIELength, + PBYTE pbyIEs, + void *pRxPacketContext ); BOOL BSSDBbIsSTAInNodeDB( - IN void *hDeviceContext, - IN PBYTE abyDstAddr, + void *hDeviceContext, + PBYTE abyDstAddr, OUT PUINT puNodeIndex ); void BSSvCreateOneNode( - IN void *hDeviceContext, + void *hDeviceContext, OUT PUINT puNodeIndex ); void BSSvUpdateAPNode( - IN void *hDeviceContext, - IN PWORD pwCapInfo, - IN PWLAN_IE_SUPP_RATES pItemRates, - IN PWLAN_IE_SUPP_RATES pExtSuppRates + void *hDeviceContext, + PWORD pwCapInfo, + PWLAN_IE_SUPP_RATES pItemRates, + PWLAN_IE_SUPP_RATES pExtSuppRates ); void BSSvSecondCallBack( - IN void *hDeviceContext + void *hDeviceContext ); void BSSvUpdateNodeTxCounter( - IN void *hDeviceContext, - IN BYTE byTsr0, - IN BYTE byTsr1, - IN PBYTE pbyBuffer, - IN UINT uFIFOHeaderSize + void *hDeviceContext, + BYTE byTsr0, + BYTE byTsr1, + PBYTE pbyBuffer, + UINT uFIFOHeaderSize ); void BSSvRemoveOneNode( - IN void *hDeviceContext, - IN UINT uNodeIndex + void *hDeviceContext, + UINT uNodeIndex ); void BSSvAddMulticastNode( - IN void *hDeviceContext + void *hDeviceContext ); void BSSvClearNodeDBTable( - IN void *hDeviceContext, - IN UINT uStartIndex + void *hDeviceContext, + UINT uStartIndex ); void BSSvClearAnyBSSJoinRecord( - IN void *hDeviceContext + void *hDeviceContext ); #endif //__BSSDB_H__ diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index e767044..bc61ca9 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -425,8 +425,8 @@ SCountryTable ChannelRuleTab[CCODE_MAX+1] = static void s_vCaculateOFDMRParameter( - IN BYTE byRate, - IN CARD_PHY_TYPE ePHYType, + BYTE byRate, + CARD_PHY_TYPE ePHYType, OUT PBYTE pbyTxRate, OUT PBYTE pbyRsvTime ); @@ -498,8 +498,8 @@ exit: static void s_vCaculateOFDMRParameter ( - IN BYTE byRate, - IN CARD_PHY_TYPE ePHYType, + BYTE byRate, + CARD_PHY_TYPE ePHYType, OUT PBYTE pbyTxRate, OUT PBYTE pbyRsvTime ) @@ -1550,10 +1550,10 @@ BOOL CARDbRemoveKey (void *pDeviceHandler, PBYTE pbyBSSID) -*/ BOOL CARDbAdd_PMKID_Candidate ( - IN void *pDeviceHandler, - IN PBYTE pbyBSSID, - IN BOOL bRSNCapExist, - IN WORD wRSNCap + void *pDeviceHandler, + PBYTE pbyBSSID, + BOOL bRSNCapExist, + WORD wRSNCap ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1601,7 +1601,7 @@ CARDbAdd_PMKID_Candidate ( void * CARDpGetCurrentAddress ( - IN void *pDeviceHandler + void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1708,9 +1708,9 @@ void CARDvInitChannelTable (void *pDeviceHandler) -*/ BOOL CARDbStartMeasure ( - IN void *pDeviceHandler, - IN void *pvMeasureEIDs, - IN UINT uNumOfMeasureEIDs + void *pDeviceHandler, + void *pvMeasureEIDs, + UINT uNumOfMeasureEIDs ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1835,10 +1835,10 @@ CARDbStartMeasure ( -*/ BOOL CARDbChannelSwitch ( - IN void *pDeviceHandler, - IN BYTE byMode, - IN BYTE byNewChannel, - IN BYTE byCount + void *pDeviceHandler, + BYTE byMode, + BYTE byNewChannel, + BYTE byCount ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1878,12 +1878,12 @@ CARDbChannelSwitch ( -*/ BOOL CARDbSetQuiet ( - IN void *pDeviceHandler, - IN BOOL bResetQuiet, - IN BYTE byQuietCount, - IN BYTE byQuietPeriod, - IN WORD wQuietDuration, - IN WORD wQuietOffset + void *pDeviceHandler, + BOOL bResetQuiet, + BYTE byQuietCount, + BYTE byQuietPeriod, + WORD wQuietDuration, + WORD wQuietOffset ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -1934,7 +1934,7 @@ CARDbSetQuiet ( -*/ BOOL CARDbStartQuiet ( - IN void *pDeviceHandler + void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2035,9 +2035,9 @@ CARDbStartQuiet ( -*/ void CARDvSetCountryInfo ( - IN void *pDeviceHandler, - IN CARD_PHY_TYPE ePHYType, - IN void *pIE + void *pDeviceHandler, + CARD_PHY_TYPE ePHYType, + void *pIE ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2094,9 +2094,9 @@ CARDvSetCountryInfo ( -*/ void CARDvSetPowerConstraint ( - IN void *pDeviceHandler, - IN BYTE byChannel, - IN I8 byPower + void *pDeviceHandler, + BYTE byChannel, + I8 byPower ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2129,7 +2129,7 @@ CARDvSetPowerConstraint ( -*/ void CARDvGetPowerCapability ( - IN void *pDeviceHandler, + void *pDeviceHandler, OUT PBYTE pbyMinPower, OUT PBYTE pbyMaxPower ) @@ -2165,8 +2165,8 @@ CARDvGetPowerCapability ( -*/ BYTE CARDbySetSupportChannels ( - IN void *pDeviceHandler, - IN OUT PBYTE pbyIEs + void *pDeviceHandler, + OUT PBYTE pbyIEs ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2256,7 +2256,7 @@ CARDbySetSupportChannels ( -*/ I8 CARDbyGetTransmitPower ( - IN void *pDeviceHandler + void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2267,7 +2267,7 @@ CARDbyGetTransmitPower ( BOOL CARDbChannelGetList ( - IN UINT uCountryCodeIdx, + UINT uCountryCodeIdx, OUT PBYTE pbyChannelTable ) { @@ -2281,8 +2281,8 @@ CARDbChannelGetList ( void CARDvSetCountryIE( - IN void *pDeviceHandler, - IN void *pIE + void *pDeviceHandler, + void *pIE ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2307,8 +2307,8 @@ CARDvSetCountryIE( BOOL CARDbGetChannelMapInfo( - IN void *pDeviceHandler, - IN UINT uChannelIndex, + void *pDeviceHandler, + UINT uChannelIndex, OUT PBYTE pbyChannelNumber, OUT PBYTE pbyMap ) @@ -2326,9 +2326,9 @@ CARDbGetChannelMapInfo( void CARDvSetChannelMapInfo( - IN void *pDeviceHandler, - IN UINT uChannelIndex, - IN BYTE byMap + void *pDeviceHandler, + UINT uChannelIndex, + BYTE byMap ) { // PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2342,7 +2342,7 @@ CARDvSetChannelMapInfo( void CARDvClearChannelMapInfo( - IN void *pDeviceHandler + void *pDeviceHandler ) { // PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2356,7 +2356,7 @@ CARDvClearChannelMapInfo( BYTE CARDbyAutoChannelSelect( - IN void *pDeviceHandler, + void *pDeviceHandler, CARD_PHY_TYPE ePHYType ) { @@ -2422,7 +2422,7 @@ CARDbyAutoChannelSelect( //xxx void CARDvSafeResetTx ( - IN void *pDeviceHandler + void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2478,7 +2478,7 @@ CARDvSafeResetTx ( -*/ void CARDvSafeResetRx ( - IN void *pDeviceHandler + void *pDeviceHandler ) { PSDevice pDevice = (PSDevice) pDeviceHandler; diff --git a/drivers/staging/vt6655/card.h b/drivers/staging/vt6655/card.h index 2114e99..f52a8e0 100644 --- a/drivers/staging/vt6655/card.h +++ b/drivers/staging/vt6655/card.h @@ -133,15 +133,15 @@ BOOL CARDbRemoveKey (void *pDeviceHandler, PBYTE pbyBSSID); BOOL CARDbAdd_PMKID_Candidate ( - IN void *pDeviceHandler, - IN PBYTE pbyBSSID, - IN BOOL bRSNCapExist, - IN WORD wRSNCap + void *pDeviceHandler, + PBYTE pbyBSSID, + BOOL bRSNCapExist, + WORD wRSNCap ); void * CARDpGetCurrentAddress ( - IN void *pDeviceHandler + void *pDeviceHandler ); @@ -150,101 +150,101 @@ BYTE CARDbyGetChannelMapping(void *pDeviceHandler, BYTE byChannelNumber, CARD_PH BOOL CARDbStartMeasure ( - IN void *pDeviceHandler, - IN void *pvMeasureEIDs, - IN UINT uNumOfMeasureEIDs + void *pDeviceHandler, + void *pvMeasureEIDs, + UINT uNumOfMeasureEIDs ); BOOL CARDbChannelSwitch ( - IN void *pDeviceHandler, - IN BYTE byMode, - IN BYTE byNewChannel, - IN BYTE byCount + void *pDeviceHandler, + BYTE byMode, + BYTE byNewChannel, + BYTE byCount ); BOOL CARDbSetQuiet ( - IN void *pDeviceHandler, - IN BOOL bResetQuiet, - IN BYTE byQuietCount, - IN BYTE byQuietPeriod, - IN WORD wQuietDuration, - IN WORD wQuietOffset + void *pDeviceHandler, + BOOL bResetQuiet, + BYTE byQuietCount, + BYTE byQuietPeriod, + WORD wQuietDuration, + WORD wQuietOffset ); BOOL CARDbStartQuiet ( - IN void *pDeviceHandler + void *pDeviceHandler ); void CARDvSetCountryInfo ( - IN void *pDeviceHandler, - IN CARD_PHY_TYPE ePHYType, - IN void *pIE + void *pDeviceHandler, + CARD_PHY_TYPE ePHYType, + void *pIE ); void CARDvSetPowerConstraint ( - IN void *pDeviceHandler, - IN BYTE byChannel, - IN I8 byPower + void *pDeviceHandler, + BYTE byChannel, + I8 byPower ); void CARDvGetPowerCapability ( - IN void *pDeviceHandler, + void *pDeviceHandler, OUT PBYTE pbyMinPower, OUT PBYTE pbyMaxPower ); BYTE CARDbySetSupportChannels ( - IN void *pDeviceHandler, - IN OUT PBYTE pbyIEs + void *pDeviceHandler, + OUT PBYTE pbyIEs ); I8 CARDbyGetTransmitPower ( - IN void *pDeviceHandler + void *pDeviceHandler ); BOOL CARDbChannelGetList ( - IN UINT uCountryCodeIdx, + UINT uCountryCodeIdx, OUT PBYTE pbyChannelTable ); void CARDvSetCountryIE( - IN void *pDeviceHandler, - IN void *pIE + void *pDeviceHandler, + void *pIE ); BOOL CARDbGetChannelMapInfo( - IN void *pDeviceHandler, - IN UINT uChannelIndex, + void *pDeviceHandler, + UINT uChannelIndex, OUT PBYTE pbyChannelNumber, OUT PBYTE pbyMap ); void CARDvSetChannelMapInfo( - IN void *pDeviceHandler, - IN UINT uChannelIndex, - IN BYTE byMap + void *pDeviceHandler, + UINT uChannelIndex, + BYTE byMap ); void CARDvClearChannelMapInfo( - IN void *pDeviceHandler + void *pDeviceHandler ); BYTE CARDbyAutoChannelSelect( - IN void *pDeviceHandler, + void *pDeviceHandler, CARD_PHY_TYPE ePHYType ); diff --git a/drivers/staging/vt6655/datarate.c b/drivers/staging/vt6655/datarate.c index e0d1a94..42b008a 100644 --- a/drivers/staging/vt6655/datarate.c +++ b/drivers/staging/vt6655/datarate.c @@ -65,14 +65,14 @@ const BYTE acbyIERate[MAX_RATE] = /*--------------------- Static Functions --------------------------*/ void s_vResetCounter ( - IN PKnownNodeDB psNodeDBTable + PKnownNodeDB psNodeDBTable ); void s_vResetCounter ( - IN PKnownNodeDB psNodeDBTable + PKnownNodeDB psNodeDBTable ) { BYTE ii; @@ -106,7 +106,7 @@ s_vResetCounter ( -*/ BYTE DATARATEbyGetRateIdx ( - IN BYTE byRate + BYTE byRate ) { BYTE ii; @@ -160,7 +160,7 @@ DATARATEbyGetRateIdx ( -*/ WORD wGetRateIdx( - IN BYTE byRate + BYTE byRate ) { WORD ii; @@ -196,10 +196,10 @@ wGetRateIdx( -*/ void RATEvParseMaxRate ( - IN void *pDeviceHandler, - IN PWLAN_IE_SUPP_RATES pItemRates, - IN PWLAN_IE_SUPP_RATES pItemExtRates, - IN BOOL bUpdateBasicRate, + void *pDeviceHandler, + PWLAN_IE_SUPP_RATES pItemRates, + PWLAN_IE_SUPP_RATES pItemExtRates, + BOOL bUpdateBasicRate, OUT PWORD pwMaxBasicRate, OUT PWORD pwMaxSuppRate, OUT PWORD pwSuppRate, @@ -309,8 +309,8 @@ UINT uRateLen; void RATEvTxRateFallBack ( - IN void *pDeviceHandler, - IN PKnownNodeDB psNodeDBTable + void *pDeviceHandler, + PKnownNodeDB psNodeDBTable ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -411,9 +411,9 @@ TxRate_iwconfig=psNodeDBTable->wTxDataRate; -*/ BYTE RATEuSetIE ( - IN PWLAN_IE_SUPP_RATES pSrcRates, - IN PWLAN_IE_SUPP_RATES pDstRates, - IN UINT uRateLen + PWLAN_IE_SUPP_RATES pSrcRates, + PWLAN_IE_SUPP_RATES pDstRates, + UINT uRateLen ) { UINT ii, uu, uRateCnt = 0; diff --git a/drivers/staging/vt6655/datarate.h b/drivers/staging/vt6655/datarate.h index bba4a16..abf7a38 100644 --- a/drivers/staging/vt6655/datarate.h +++ b/drivers/staging/vt6655/datarate.h @@ -56,10 +56,10 @@ void RATEvParseMaxRate( - IN void *pDeviceHandler, - IN PWLAN_IE_SUPP_RATES pItemRates, - IN PWLAN_IE_SUPP_RATES pItemExtRates, - IN BOOL bUpdateBasicRate, + void *pDeviceHandler, + PWLAN_IE_SUPP_RATES pItemRates, + PWLAN_IE_SUPP_RATES pItemExtRates, + BOOL bUpdateBasicRate, OUT PWORD pwMaxBasicRate, OUT PWORD pwMaxSuppRate, OUT PWORD pwSuppRate, @@ -69,26 +69,26 @@ RATEvParseMaxRate( void RATEvTxRateFallBack( - IN void *pDeviceHandler, - IN PKnownNodeDB psNodeDBTable + void *pDeviceHandler, + PKnownNodeDB psNodeDBTable ); BYTE RATEuSetIE( - IN PWLAN_IE_SUPP_RATES pSrcRates, - IN PWLAN_IE_SUPP_RATES pDstRates, - IN UINT uRateLen + PWLAN_IE_SUPP_RATES pSrcRates, + PWLAN_IE_SUPP_RATES pDstRates, + UINT uRateLen ); WORD wGetRateIdx( - IN BYTE byRate + BYTE byRate ); BYTE DATARATEbyGetRateIdx( - IN BYTE byRate + BYTE byRate ); diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 454277b..a401f2a 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -478,7 +478,7 @@ pDevice->bUpdateBBVGA = TRUE; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" pDevice->bDiversityRegCtlON= %d\n",(INT)pDevice->bDiversityRegCtlON); } -static void s_vCompleteCurrentMeasure (IN PSDevice pDevice, IN BYTE byResult) +static void s_vCompleteCurrentMeasure (PSDevice pDevice, BYTE byResult) { UINT ii; DWORD dwDuration = 0; diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index d90104a..6936839 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -76,13 +76,13 @@ const BYTE acbyRxRate[MAX_RATE] = /*--------------------- Static Functions --------------------------*/ -static BYTE s_byGetRateIdx(IN BYTE byRate); +static BYTE s_byGetRateIdx(BYTE byRate); static void s_vGetDASA( - IN PBYTE pbyRxBufferAddr, + PBYTE pbyRxBufferAddr, OUT PUINT pcbHeaderSize, OUT PSEthernetHeader psEthHeader ); @@ -90,37 +90,37 @@ s_vGetDASA( static void s_vProcessRxMACHeader ( - IN PSDevice pDevice, - IN PBYTE pbyRxBufferAddr, - IN UINT cbPacketSize, - IN BOOL bIsWEP, - IN BOOL bExtIV, + PSDevice pDevice, + PBYTE pbyRxBufferAddr, + UINT cbPacketSize, + BOOL bIsWEP, + BOOL bExtIV, OUT PUINT pcbHeadSize ); static BOOL s_bAPModeRxCtl( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN INT iSANodeIndex + PSDevice pDevice, + PBYTE pbyFrame, + INT iSANodeIndex ); static BOOL s_bAPModeRxData ( - IN PSDevice pDevice, - IN struct sk_buff* skb, - IN UINT FrameSize, - IN UINT cbHeaderOffset, - IN INT iSANodeIndex, - IN INT iDANodeIndex + PSDevice pDevice, + struct sk_buff* skb, + UINT FrameSize, + UINT cbHeaderOffset, + INT iSANodeIndex, + INT iDANodeIndex ); static BOOL s_bHandleRxEncryption( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN UINT FrameSize, - IN PBYTE pbyRsr, + PSDevice pDevice, + PBYTE pbyFrame, + UINT FrameSize, + PBYTE pbyRsr, OUT PBYTE pbyNewRsr, OUT PSKeyItem *pKeyOut, int * pbExtIV, @@ -130,12 +130,12 @@ static BOOL s_bHandleRxEncryption( static BOOL s_bHostWepRxEncryption( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN UINT FrameSize, - IN PBYTE pbyRsr, - IN BOOL bOnFly, - IN PSKeyItem pKey, + PSDevice pDevice, + PBYTE pbyFrame, + UINT FrameSize, + PBYTE pbyRsr, + BOOL bOnFly, + PSKeyItem pKey, OUT PBYTE pbyNewRsr, int * pbExtIV, OUT PWORD pwRxTSC15_0, @@ -165,11 +165,11 @@ static BOOL s_bHostWepRxEncryption( static void s_vProcessRxMACHeader ( - IN PSDevice pDevice, - IN PBYTE pbyRxBufferAddr, - IN UINT cbPacketSize, - IN BOOL bIsWEP, - IN BOOL bExtIV, + PSDevice pDevice, + PBYTE pbyRxBufferAddr, + UINT cbPacketSize, + BOOL bIsWEP, + BOOL bExtIV, OUT PUINT pcbHeadSize ) { @@ -249,7 +249,7 @@ s_vProcessRxMACHeader ( -static BYTE s_byGetRateIdx (IN BYTE byRate) +static BYTE s_byGetRateIdx (BYTE byRate) { BYTE byRateIdx; @@ -264,7 +264,7 @@ static BYTE s_byGetRateIdx (IN BYTE byRate) static void s_vGetDASA ( - IN PBYTE pbyRxBufferAddr, + PBYTE pbyRxBufferAddr, OUT PUINT pcbHeaderSize, OUT PSEthernetHeader psEthHeader ) @@ -335,8 +335,8 @@ void MngWorkItem(void *Context) BOOL device_receive_frame ( - IN PSDevice pDevice, - IN PSRxDesc pCurrRD + PSDevice pDevice, + PSRxDesc pCurrRD ) { @@ -1039,9 +1039,9 @@ device_receive_frame ( static BOOL s_bAPModeRxCtl ( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN INT iSANodeIndex + PSDevice pDevice, + PBYTE pbyFrame, + INT iSANodeIndex ) { PS802_11Header p802_11Header; @@ -1163,10 +1163,10 @@ static BOOL s_bAPModeRxCtl ( } static BOOL s_bHandleRxEncryption ( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN UINT FrameSize, - IN PBYTE pbyRsr, + PSDevice pDevice, + PBYTE pbyFrame, + UINT FrameSize, + PBYTE pbyRsr, OUT PBYTE pbyNewRsr, OUT PSKeyItem *pKeyOut, int * pbExtIV, @@ -1309,12 +1309,12 @@ static BOOL s_bHandleRxEncryption ( static BOOL s_bHostWepRxEncryption ( - IN PSDevice pDevice, - IN PBYTE pbyFrame, - IN UINT FrameSize, - IN PBYTE pbyRsr, - IN BOOL bOnFly, - IN PSKeyItem pKey, + PSDevice pDevice, + PBYTE pbyFrame, + UINT FrameSize, + PBYTE pbyRsr, + BOOL bOnFly, + PSKeyItem pKey, OUT PBYTE pbyNewRsr, int * pbExtIV, OUT PWORD pwRxTSC15_0, @@ -1440,12 +1440,12 @@ static BOOL s_bHostWepRxEncryption ( static BOOL s_bAPModeRxData ( - IN PSDevice pDevice, - IN struct sk_buff* skb, - IN UINT FrameSize, - IN UINT cbHeaderOffset, - IN INT iSANodeIndex, - IN INT iDANodeIndex + PSDevice pDevice, + struct sk_buff* skb, + UINT FrameSize, + UINT cbHeaderOffset, + INT iSANodeIndex, + INT iDANodeIndex ) { PSMgmtObject pMgmt = pDevice->pMgmt; diff --git a/drivers/staging/vt6655/dpc.h b/drivers/staging/vt6655/dpc.h index 4129c11..e574963 100644 --- a/drivers/staging/vt6655/dpc.h +++ b/drivers/staging/vt6655/dpc.h @@ -43,8 +43,8 @@ BOOL device_receive_frame ( - IN PSDevice pDevice, - IN PSRxDesc pCurrRD + PSDevice pDevice, + PSRxDesc pCurrRD ); void MngWorkItem(void *Context); diff --git a/drivers/staging/vt6655/ioctl.c b/drivers/staging/vt6655/ioctl.c index 1bd8199..e36cd30 100644 --- a/drivers/staging/vt6655/ioctl.c +++ b/drivers/staging/vt6655/ioctl.c @@ -716,10 +716,10 @@ if(wpa_Result.authenticated==TRUE) { /* void vConfigWEPKey ( - IN PSDevice pDevice, - IN DWORD dwKeyIndex, - IN PBYTE pbyKey, - IN ULONG uKeyLength + PSDevice pDevice, + DWORD dwKeyIndex, + PBYTE pbyKey, + ULONG uKeyLength ) { int ii; diff --git a/drivers/staging/vt6655/ioctl.h b/drivers/staging/vt6655/ioctl.h index dc278ae..0d10c2a 100644 --- a/drivers/staging/vt6655/ioctl.h +++ b/drivers/staging/vt6655/ioctl.h @@ -44,10 +44,10 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq); /* void vConfigWEPKey ( - IN PSDevice pDevice, - IN DWORD dwKeyIndex, - IN PBYTE pbyKey, - IN ULONG uKeyLength + PSDevice pDevice, + DWORD dwKeyIndex, + PBYTE pbyKey, + ULONG uKeyLength ); */ diff --git a/drivers/staging/vt6655/key.c b/drivers/staging/vt6655/key.c index b40c400..c702d50 100644 --- a/drivers/staging/vt6655/key.c +++ b/drivers/staging/vt6655/key.c @@ -132,9 +132,9 @@ void KeyvInitTable (PSKeyManagement pTable, DWORD_PTR dwIoBase) * */ BOOL KeybGetKey ( - IN PSKeyManagement pTable, - IN PBYTE pbyBSSID, - IN DWORD dwKeyIndex, + PSKeyManagement pTable, + PBYTE pbyBSSID, + DWORD dwKeyIndex, OUT PSKeyItem *pKey ) { @@ -518,9 +518,9 @@ void KeyvRemoveAllWEPKey ( * */ BOOL KeybGetTransmitKey ( - IN PSKeyManagement pTable, - IN PBYTE pbyBSSID, - IN DWORD dwKeyType, + PSKeyManagement pTable, + PBYTE pbyBSSID, + DWORD dwKeyType, OUT PSKeyItem *pKey ) { @@ -598,7 +598,7 @@ BOOL KeybGetTransmitKey ( * */ BOOL KeybCheckPairewiseKey ( - IN PSKeyManagement pTable, + PSKeyManagement pTable, OUT PSKeyItem *pKey ) { diff --git a/drivers/staging/vt6655/key.h b/drivers/staging/vt6655/key.h index 4cbd82f..88be5b4 100644 --- a/drivers/staging/vt6655/key.h +++ b/drivers/staging/vt6655/key.h @@ -104,9 +104,9 @@ typedef struct tagSKeyManagement void KeyvInitTable(PSKeyManagement pTable, DWORD_PTR dwIoBase); BOOL KeybGetKey( - IN PSKeyManagement pTable, - IN PBYTE pbyBSSID, - IN DWORD dwKeyIndex, + PSKeyManagement pTable, + PBYTE pbyBSSID, + DWORD dwKeyIndex, OUT PSKeyItem *pKey ); @@ -141,14 +141,14 @@ BOOL KeybRemoveKey( ); BOOL KeybGetTransmitKey( - IN PSKeyManagement pTable, - IN PBYTE pbyBSSID, - IN DWORD dwKeyType, + PSKeyManagement pTable, + PBYTE pbyBSSID, + DWORD dwKeyType, OUT PSKeyItem *pKey ); BOOL KeybCheckPairewiseKey( - IN PSKeyManagement pTable, + PSKeyManagement pTable, OUT PSKeyItem *pKey ); diff --git a/drivers/staging/vt6655/power.c b/drivers/staging/vt6655/power.c index 166e7fb..64c22c3 100644 --- a/drivers/staging/vt6655/power.c +++ b/drivers/staging/vt6655/power.c @@ -76,8 +76,8 @@ static int msglevel =MSG_LEVEL_INFO; void PSvEnablePowerSaving( - IN void *hDeviceContext, - IN WORD wListenInterval + void *hDeviceContext, + WORD wListenInterval ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -118,7 +118,7 @@ PSvEnablePowerSaving( pDevice->bEnablePSMode = TRUE; if (pDevice->eOPMode == OP_MODE_ADHOC) { -// bMgrPrepareBeaconToSend((HANDLE)pDevice, pMgmt); +// bMgrPrepareBeaconToSend((void *)pDevice, pMgmt); } // We don't send null pkt in ad hoc mode since beacon will handle this. else if (pDevice->eOPMode == OP_MODE_INFRASTRUCTURE) { @@ -146,7 +146,7 @@ PSvEnablePowerSaving( void PSvDisablePowerSaving( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -184,9 +184,9 @@ PSvDisablePowerSaving( BOOL PSbConsiderPowerDown( - IN void *hDeviceContext, - IN BOOL bCheckRxDMA, - IN BOOL bCheckCountToWakeUp + void *hDeviceContext, + BOOL bCheckRxDMA, + BOOL bCheckCountToWakeUp ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -252,7 +252,7 @@ PSbConsiderPowerDown( void PSvSendPSPOLL( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -298,7 +298,7 @@ PSvSendPSPOLL( -*/ BOOL PSbSendNullPacket( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -384,7 +384,7 @@ PSbSendNullPacket( BOOL PSbIsNextTBTTWakeUp( - IN void *hDeviceContext + void *hDeviceContext ) { diff --git a/drivers/staging/vt6655/power.h b/drivers/staging/vt6655/power.h index 769e0d1..c0dbe21 100644 --- a/drivers/staging/vt6655/power.h +++ b/drivers/staging/vt6655/power.h @@ -45,40 +45,40 @@ /*--------------------- Export Functions --------------------------*/ -// IN PSDevice pDevice -// IN PSDevice hDeviceContext +// PSDevice pDevice +// PSDevice hDeviceContext BOOL PSbConsiderPowerDown( - IN void *hDeviceContext, - IN BOOL bCheckRxDMA, - IN BOOL bCheckCountToWakeUp + void *hDeviceContext, + BOOL bCheckRxDMA, + BOOL bCheckCountToWakeUp ); void PSvDisablePowerSaving( - IN void *hDeviceContext + void *hDeviceContext ); void PSvEnablePowerSaving( - IN void *hDeviceContext, - IN WORD wListenInterval + void *hDeviceContext, + WORD wListenInterval ); void PSvSendPSPOLL( - IN void *hDeviceContext + void *hDeviceContext ); BOOL PSbSendNullPacket( - IN void *hDeviceContext + void *hDeviceContext ); BOOL PSbIsNextTBTTWakeUp( - IN void *hDeviceContext + void *hDeviceContext ); #endif //__POWER_H__ diff --git a/drivers/staging/vt6655/rf.c b/drivers/staging/vt6655/rf.c index 29eb758..7cb86fe 100644 --- a/drivers/staging/vt6655/rf.c +++ b/drivers/staging/vt6655/rf.c @@ -808,7 +808,7 @@ BOOL RFbAL2230SelectChannel (DWORD_PTR dwIoBase, BYTE byChannel) * */ BOOL RFbInit ( - IN PSDevice pDevice + PSDevice pDevice ) { BOOL bResult = TRUE; @@ -846,7 +846,7 @@ BOOL bResult = TRUE; * */ BOOL RFbShutDown ( - IN PSDevice pDevice + PSDevice pDevice ) { BOOL bResult = TRUE; @@ -997,9 +997,9 @@ BOOL RFvWriteWakeProgSyn (DWORD_PTR dwIoBase, BYTE byRFType, UINT uChannel) * */ BOOL RFbSetPower ( - IN PSDevice pDevice, - IN UINT uRATE, - IN UINT uCH + PSDevice pDevice, + UINT uRATE, + UINT uCH ) { BOOL bResult = TRUE; @@ -1136,9 +1136,9 @@ BYTE byPwrdBm = 0; */ BOOL RFbRawSetPower ( - IN PSDevice pDevice, - IN BYTE byPwr, - IN UINT uRATE + PSDevice pDevice, + BYTE byPwr, + UINT uRATE ) { BOOL bResult = TRUE; @@ -1203,8 +1203,8 @@ DWORD dwMax7230Pwr = 0; -*/ void RFvRSSITodBm ( - IN PSDevice pDevice, - IN BYTE byCurrRSSI, + PSDevice pDevice, + BYTE byCurrRSSI, long * pldBm ) { diff --git a/drivers/staging/vt6655/rf.h b/drivers/staging/vt6655/rf.h index e6e6ca5..25dfc79 100644 --- a/drivers/staging/vt6655/rf.h +++ b/drivers/staging/vt6655/rf.h @@ -79,20 +79,20 @@ BOOL IFRFbWriteEmbeded(DWORD_PTR dwIoBase, DWORD dwData); BOOL RFbSelectChannel(DWORD_PTR dwIoBase, BYTE byRFType, BYTE byChannel); BOOL RFbInit ( - IN PSDevice pDevice + PSDevice pDevice ); BOOL RFvWriteWakeProgSyn(DWORD_PTR dwIoBase, BYTE byRFType, UINT uChannel); BOOL RFbSetPower(PSDevice pDevice, UINT uRATE, UINT uCH); BOOL RFbRawSetPower( - IN PSDevice pDevice, - IN BYTE byPwr, - IN UINT uRATE + PSDevice pDevice, + BYTE byPwr, + UINT uRATE ); void RFvRSSITodBm( - IN PSDevice pDevice, - IN BYTE byCurrRSSI, + PSDevice pDevice, + BYTE byCurrRSSI, long *pldBm ); diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index 8d1772e..885741a 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -117,12 +117,12 @@ const WORD wFB_Opt1[2][5] = { static void s_vFillTxKey( - IN PSDevice pDevice, - IN PBYTE pbyBuf, - IN PBYTE pbyIVHead, - IN PSKeyItem pTransmitKey, - IN PBYTE pbyHdrBuf, - IN WORD wPayloadLen, + PSDevice pDevice, + PBYTE pbyBuf, + PBYTE pbyIVHead, + PSKeyItem pTransmitKey, + PBYTE pbyHdrBuf, + WORD wPayloadLen, OUT PBYTE pMICHDR ); @@ -131,59 +131,59 @@ s_vFillTxKey( static void s_vFillRTSHead( - IN PSDevice pDevice, - IN BYTE byPktType, - IN void * pvRTS, - IN UINT cbFrameLength, - IN BOOL bNeedAck, - IN BOOL bDisCRC, - IN PSEthernetHeader psEthHeader, - IN WORD wCurrentRate, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byPktType, + void * pvRTS, + UINT cbFrameLength, + BOOL bNeedAck, + BOOL bDisCRC, + PSEthernetHeader psEthHeader, + WORD wCurrentRate, + BYTE byFBOption ); static void s_vGenerateTxParameter( - IN PSDevice pDevice, - IN BYTE byPktType, - IN void * pTxBufHead, - IN void * pvRrvTime, - IN void * pvRTS, - IN void * pvCTS, - IN UINT cbFrameSize, - IN BOOL bNeedACK, - IN UINT uDMAIdx, - IN PSEthernetHeader psEthHeader, - IN WORD wCurrentRate + PSDevice pDevice, + BYTE byPktType, + void * pTxBufHead, + void * pvRrvTime, + void * pvRTS, + void * pvCTS, + UINT cbFrameSize, + BOOL bNeedACK, + UINT uDMAIdx, + PSEthernetHeader psEthHeader, + WORD wCurrentRate ); static void s_vFillFragParameter( - IN PSDevice pDevice, - IN PBYTE pbyBuffer, - IN UINT uTxType, - IN void * pvtdCurr, - IN WORD wFragType, - IN UINT cbReqCount + PSDevice pDevice, + PBYTE pbyBuffer, + UINT uTxType, + void * pvtdCurr, + WORD wFragType, + UINT cbReqCount ); static UINT s_cbFillTxBufHead ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN PBYTE pbyTxBufferAddr, - IN UINT cbFrameBodySize, - IN UINT uDMAIdx, - IN PSTxDesc pHeadTD, - IN PSEthernetHeader psEthHeader, - IN PBYTE pPacket, - IN BOOL bNeedEncrypt, - IN PSKeyItem pTransmitKey, - IN UINT uNodeIndex, + PSDevice pDevice, + BYTE byPktType, + PBYTE pbyTxBufferAddr, + UINT cbFrameBodySize, + UINT uDMAIdx, + PSTxDesc pHeadTD, + PSEthernetHeader psEthHeader, + PBYTE pPacket, + BOOL bNeedEncrypt, + PSKeyItem pTransmitKey, + UINT uNodeIndex, OUT PUINT puMACfragNum ); @@ -191,17 +191,17 @@ s_cbFillTxBufHead ( static UINT s_uFillDataHead ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN void * pTxDataHead, - IN UINT cbFrameLength, - IN UINT uDMAIdx, - IN BOOL bNeedAck, - IN UINT uFragIdx, - IN UINT cbLastFragmentSize, - IN UINT uMACfragNum, - IN BYTE byFBOption, - IN WORD wCurrentRate + PSDevice pDevice, + BYTE byPktType, + void * pTxDataHead, + UINT cbFrameLength, + UINT uDMAIdx, + BOOL bNeedAck, + UINT uFragIdx, + UINT cbLastFragmentSize, + UINT uMACfragNum, + BYTE byFBOption, + WORD wCurrentRate ); @@ -212,12 +212,12 @@ s_uFillDataHead ( static void s_vFillTxKey ( - IN PSDevice pDevice, - IN PBYTE pbyBuf, - IN PBYTE pbyIVHead, - IN PSKeyItem pTransmitKey, - IN PBYTE pbyHdrBuf, - IN WORD wPayloadLen, + PSDevice pDevice, + PBYTE pbyBuf, + PBYTE pbyIVHead, + PSKeyItem pTransmitKey, + PBYTE pbyHdrBuf, + WORD wPayloadLen, OUT PBYTE pMICHDR ) { @@ -330,10 +330,10 @@ s_vFillTxKey ( static void s_vSWencryption ( - IN PSDevice pDevice, - IN PSKeyItem pTransmitKey, - IN PBYTE pbyPayloadHead, - IN WORD wPayloadSize + PSDevice pDevice, + PSKeyItem pTransmitKey, + PBYTE pbyPayloadHead, + WORD wPayloadSize ) { UINT cbICVlen = 4; @@ -379,11 +379,11 @@ s_vSWencryption ( static UINT s_uGetTxRsvTime ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN UINT cbFrameLength, - IN WORD wRate, - IN BOOL bNeedAck + PSDevice pDevice, + BYTE byPktType, + UINT cbFrameLength, + WORD wRate, + BOOL bNeedAck ) { UINT uDataTime, uAckTime; @@ -410,11 +410,11 @@ s_uGetTxRsvTime ( static UINT s_uGetRTSCTSRsvTime ( - IN PSDevice pDevice, - IN BYTE byRTSRsvType, - IN BYTE byPktType, - IN UINT cbFrameLength, - IN WORD wCurrentRate + PSDevice pDevice, + BYTE byRTSRsvType, + BYTE byPktType, + UINT cbFrameLength, + WORD wCurrentRate ) { UINT uRrvTime , uRTSTime, uCTSTime, uAckTime, uDataTime; @@ -452,16 +452,16 @@ s_uGetRTSCTSRsvTime ( static UINT s_uGetDataDuration ( - IN PSDevice pDevice, - IN BYTE byDurType, - IN UINT cbFrameLength, - IN BYTE byPktType, - IN WORD wRate, - IN BOOL bNeedAck, - IN UINT uFragIdx, - IN UINT cbLastFragmentSize, - IN UINT uMACfragNum, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byDurType, + UINT cbFrameLength, + BYTE byPktType, + WORD wRate, + BOOL bNeedAck, + UINT uFragIdx, + UINT cbLastFragmentSize, + UINT uMACfragNum, + BYTE byFBOption ) { BOOL bLastFrag = 0; @@ -623,13 +623,13 @@ s_uGetDataDuration ( static UINT s_uGetRTSCTSDuration ( - IN PSDevice pDevice, - IN BYTE byDurType, - IN UINT cbFrameLength, - IN BYTE byPktType, - IN WORD wRate, - IN BOOL bNeedAck, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byDurType, + UINT cbFrameLength, + BYTE byPktType, + WORD wRate, + BOOL bNeedAck, + BYTE byFBOption ) { UINT uCTSTime = 0, uDurTime = 0; @@ -721,17 +721,17 @@ s_uGetRTSCTSDuration ( static UINT s_uFillDataHead ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN void * pTxDataHead, - IN UINT cbFrameLength, - IN UINT uDMAIdx, - IN BOOL bNeedAck, - IN UINT uFragIdx, - IN UINT cbLastFragmentSize, - IN UINT uMACfragNum, - IN BYTE byFBOption, - IN WORD wCurrentRate + PSDevice pDevice, + BYTE byPktType, + void * pTxDataHead, + UINT cbFrameLength, + UINT uDMAIdx, + BOOL bNeedAck, + UINT uFragIdx, + UINT cbLastFragmentSize, + UINT uMACfragNum, + BYTE byFBOption, + WORD wCurrentRate ) { WORD wLen = 0x0000; @@ -853,15 +853,15 @@ s_uFillDataHead ( static void s_vFillRTSHead ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN void * pvRTS, - IN UINT cbFrameLength, - IN BOOL bNeedAck, - IN BOOL bDisCRC, - IN PSEthernetHeader psEthHeader, - IN WORD wCurrentRate, - IN BYTE byFBOption + PSDevice pDevice, + BYTE byPktType, + void * pvRTS, + UINT cbFrameLength, + BOOL bNeedAck, + BOOL bDisCRC, + PSEthernetHeader psEthHeader, + WORD wCurrentRate, + BYTE byFBOption ) { UINT uRTSFrameLen = 20; @@ -1047,15 +1047,15 @@ s_vFillRTSHead ( static void s_vFillCTSHead ( - IN PSDevice pDevice, - IN UINT uDMAIdx, - IN BYTE byPktType, - IN void * pvCTS, - IN UINT cbFrameLength, - IN BOOL bNeedAck, - IN BOOL bDisCRC, - IN WORD wCurrentRate, - IN BYTE byFBOption + PSDevice pDevice, + UINT uDMAIdx, + BYTE byPktType, + void * pvCTS, + UINT cbFrameLength, + BOOL bNeedAck, + BOOL bDisCRC, + WORD wCurrentRate, + BYTE byFBOption ) { UINT uCTSFrameLen = 14; @@ -1152,17 +1152,17 @@ s_vFillCTSHead ( static void s_vGenerateTxParameter ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN void * pTxBufHead, - IN void * pvRrvTime, - IN void * pvRTS, - IN void * pvCTS, - IN UINT cbFrameSize, - IN BOOL bNeedACK, - IN UINT uDMAIdx, - IN PSEthernetHeader psEthHeader, - IN WORD wCurrentRate + PSDevice pDevice, + BYTE byPktType, + void * pTxBufHead, + void * pvRrvTime, + void * pvRTS, + void * pvCTS, + UINT cbFrameSize, + BOOL bNeedACK, + UINT uDMAIdx, + PSEthernetHeader psEthHeader, + WORD wCurrentRate ) { UINT cbMACHdLen = WLAN_HDR_ADDR3_LEN; //24 @@ -1270,12 +1270,12 @@ s_vGenerateTxParameter ( static void s_vFillFragParameter( - IN PSDevice pDevice, - IN PBYTE pbyBuffer, - IN UINT uTxType, - IN void * pvtdCurr, - IN WORD wFragType, - IN UINT cbReqCount + PSDevice pDevice, + PBYTE pbyBuffer, + UINT uTxType, + void * pvtdCurr, + WORD wFragType, + UINT cbReqCount ) { PSTxBufHead pTxBufHead = (PSTxBufHead) pbyBuffer; @@ -1318,17 +1318,17 @@ s_vFillFragParameter( static UINT s_cbFillTxBufHead ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN PBYTE pbyTxBufferAddr, - IN UINT cbFrameBodySize, - IN UINT uDMAIdx, - IN PSTxDesc pHeadTD, - IN PSEthernetHeader psEthHeader, - IN PBYTE pPacket, - IN BOOL bNeedEncrypt, - IN PSKeyItem pTransmitKey, - IN UINT uNodeIndex, + PSDevice pDevice, + BYTE byPktType, + PBYTE pbyTxBufferAddr, + UINT cbFrameBodySize, + UINT uDMAIdx, + PSTxDesc pHeadTD, + PSEthernetHeader psEthHeader, + PBYTE pPacket, + BOOL bNeedEncrypt, + PSKeyItem pTransmitKey, + UINT uNodeIndex, OUT PUINT puMACfragNum ) { @@ -2095,17 +2095,17 @@ s_cbFillTxBufHead ( void vGenerateFIFOHeader ( - IN PSDevice pDevice, - IN BYTE byPktType, - IN PBYTE pbyTxBufferAddr, - IN BOOL bNeedEncrypt, - IN UINT cbPayloadSize, - IN UINT uDMAIdx, - IN PSTxDesc pHeadTD, - IN PSEthernetHeader psEthHeader, - IN PBYTE pPacket, - IN PSKeyItem pTransmitKey, - IN UINT uNodeIndex, + PSDevice pDevice, + BYTE byPktType, + PBYTE pbyTxBufferAddr, + BOOL bNeedEncrypt, + UINT cbPayloadSize, + UINT uDMAIdx, + PSTxDesc pHeadTD, + PSEthernetHeader psEthHeader, + PBYTE pPacket, + PSKeyItem pTransmitKey, + UINT uNodeIndex, OUT PUINT puMACfragNum, OUT PUINT pcbHeaderSize ) @@ -2266,14 +2266,14 @@ vGenerateFIFOHeader ( void vGenerateMACHeader ( - IN PSDevice pDevice, - IN PBYTE pbyBufferAddr, - IN WORD wDuration, - IN PSEthernetHeader psEthHeader, - IN BOOL bNeedEncrypt, - IN WORD wFragType, - IN UINT uDMAIdx, - IN UINT uFragIdx + PSDevice pDevice, + PBYTE pbyBufferAddr, + WORD wDuration, + PSEthernetHeader psEthHeader, + BOOL bNeedEncrypt, + WORD wFragType, + UINT uDMAIdx, + UINT uFragIdx ) { PS802_11Header pMACHeader = (PS802_11Header)pbyBufferAddr; @@ -2738,10 +2738,10 @@ CMD_STATUS csBeacon_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) { UINT cbGetFragCount ( - IN PSDevice pDevice, - IN PSKeyItem pTransmitKey, - IN UINT cbFrameBodySize, - IN PSEthernetHeader psEthHeader + PSDevice pDevice, + PSKeyItem pTransmitKey, + UINT cbFrameBodySize, + PSEthernetHeader psEthHeader ) { UINT cbMACHdLen; diff --git a/drivers/staging/vt6655/rxtx.h b/drivers/staging/vt6655/rxtx.h index 4c2df48..75988c7 100644 --- a/drivers/staging/vt6655/rxtx.h +++ b/drivers/staging/vt6655/rxtx.h @@ -41,20 +41,20 @@ /* void vGenerateMACHeader( - IN PSDevice pDevice, - IN DWORD dwTxBufferAddr, - IN PBYTE pbySkbData, - IN UINT cbPacketSize, - IN BOOL bDMA0Used, + PSDevice pDevice, + DWORD dwTxBufferAddr, + PBYTE pbySkbData, + UINT cbPacketSize, + BOOL bDMA0Used, OUT PUINT pcbHeadSize, OUT PUINT pcbAppendPayload ); void vProcessRxMACHeader ( - IN PSDevice pDevice, - IN DWORD dwRxBufferAddr, - IN UINT cbPacketSize, - IN BOOL bIsWEP, + PSDevice pDevice, + DWORD dwRxBufferAddr, + UINT cbPacketSize, + BOOL bIsWEP, OUT PUINT pcbHeadSize ); */ @@ -62,39 +62,39 @@ void vProcessRxMACHeader ( void vGenerateMACHeader ( - IN PSDevice pDevice, - IN PBYTE pbyBufferAddr, - IN WORD wDuration, - IN PSEthernetHeader psEthHeader, - IN BOOL bNeedEncrypt, - IN WORD wFragType, - IN UINT uDMAIdx, - IN UINT uFragIdx + PSDevice pDevice, + PBYTE pbyBufferAddr, + WORD wDuration, + PSEthernetHeader psEthHeader, + BOOL bNeedEncrypt, + WORD wFragType, + UINT uDMAIdx, + UINT uFragIdx ); UINT cbGetFragCount( - IN PSDevice pDevice, - IN PSKeyItem pTransmitKey, - IN UINT cbFrameBodySize, - IN PSEthernetHeader psEthHeader + PSDevice pDevice, + PSKeyItem pTransmitKey, + UINT cbFrameBodySize, + PSEthernetHeader psEthHeader ); void vGenerateFIFOHeader ( - IN PSDevice pDevice, - IN BYTE byPktTyp, - IN PBYTE pbyTxBufferAddr, - IN BOOL bNeedEncrypt, - IN UINT cbPayloadSize, - IN UINT uDMAIdx, - IN PSTxDesc pHeadTD, - IN PSEthernetHeader psEthHeader, - IN PBYTE pPacket, - IN PSKeyItem pTransmitKey, - IN UINT uNodeIndex, + PSDevice pDevice, + BYTE byPktTyp, + PBYTE pbyTxBufferAddr, + BOOL bNeedEncrypt, + UINT cbPayloadSize, + UINT uDMAIdx, + PSTxDesc pHeadTD, + PSEthernetHeader psEthHeader, + PBYTE pPacket, + PSKeyItem pTransmitKey, + UINT uNodeIndex, OUT PUINT puMACfragNum, OUT PUINT pcbHeaderSize ); diff --git a/drivers/staging/vt6655/ttype.h b/drivers/staging/vt6655/ttype.h index b2dff3a..2921083 100644 --- a/drivers/staging/vt6655/ttype.h +++ b/drivers/staging/vt6655/ttype.h @@ -33,10 +33,6 @@ /******* Common definitions and typedefs ***********************************/ -#ifndef IN -#define IN -#endif - #ifndef OUT #define OUT #endif diff --git a/drivers/staging/vt6655/vntwifi.c b/drivers/staging/vt6655/vntwifi.c index 03975da..bd3b2af 100644 --- a/drivers/staging/vt6655/vntwifi.c +++ b/drivers/staging/vt6655/vntwifi.c @@ -71,8 +71,8 @@ -*/ void VNTWIFIvSetOPMode ( - IN void *pMgmtHandle, - IN WMAC_CONFIG_MODE eOPMode + void *pMgmtHandle, + WMAC_CONFIG_MODE eOPMode ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -100,10 +100,10 @@ VNTWIFIvSetOPMode ( -*/ void VNTWIFIvSetIBSSParameter ( - IN void *pMgmtHandle, - IN WORD wBeaconPeriod, - IN WORD wATIMWindow, - IN UINT uChannel + void *pMgmtHandle, + WORD wBeaconPeriod, + WORD wATIMWindow, + UINT uChannel ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -129,7 +129,7 @@ VNTWIFIvSetIBSSParameter ( -*/ PWLAN_IE_SSID VNTWIFIpGetCurrentSSID ( - IN void *pMgmtHandle + void *pMgmtHandle ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -152,7 +152,7 @@ VNTWIFIpGetCurrentSSID ( -*/ UINT VNTWIFIpGetCurrentChannel ( - IN void *pMgmtHandle + void *pMgmtHandle ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -178,7 +178,7 @@ VNTWIFIpGetCurrentChannel ( -*/ WORD VNTWIFIwGetAssocID ( - IN void *pMgmtHandle + void *pMgmtHandle ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -204,8 +204,8 @@ VNTWIFIwGetAssocID ( -*/ BYTE VNTWIFIbyGetMaxSupportRate ( - IN PWLAN_IE_SUPP_RATES pSupportRateIEs, - IN PWLAN_IE_SUPP_RATES pExtSupportRateIEs + PWLAN_IE_SUPP_RATES pSupportRateIEs, + PWLAN_IE_SUPP_RATES pExtSupportRateIEs ) { BYTE byMaxSupportRate = RATE_1M; @@ -250,9 +250,9 @@ VNTWIFIbyGetMaxSupportRate ( -*/ BYTE VNTWIFIbyGetACKTxRate ( - IN BYTE byRxDataRate, - IN PWLAN_IE_SUPP_RATES pSupportRateIEs, - IN PWLAN_IE_SUPP_RATES pExtSupportRateIEs + BYTE byRxDataRate, + PWLAN_IE_SUPP_RATES pSupportRateIEs, + PWLAN_IE_SUPP_RATES pExtSupportRateIEs ) { BYTE byMaxAckRate; @@ -308,8 +308,8 @@ VNTWIFIbyGetACKTxRate ( -*/ void VNTWIFIvSetAuthenticationMode ( - IN void *pMgmtHandle, - IN WMAC_AUTHENTICATION_MODE eAuthMode + void *pMgmtHandle, + WMAC_AUTHENTICATION_MODE eAuthMode ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -340,8 +340,8 @@ VNTWIFIvSetAuthenticationMode ( -*/ void VNTWIFIvSetEncryptionMode ( - IN void *pMgmtHandle, - IN WMAC_ENCRYPTION_MODE eEncryptionMode + void *pMgmtHandle, + WMAC_ENCRYPTION_MODE eEncryptionMode ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -360,8 +360,8 @@ VNTWIFIvSetEncryptionMode ( BOOL VNTWIFIbConfigPhyMode ( - IN void *pMgmtHandle, - IN CARD_PHY_TYPE ePhyType + void *pMgmtHandle, + CARD_PHY_TYPE ePhyType ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -381,7 +381,7 @@ VNTWIFIbConfigPhyMode ( void VNTWIFIbGetConfigPhyMode ( - IN void *pMgmtHandle, + void *pMgmtHandle, OUT void *pePhyType ) { @@ -426,7 +426,7 @@ VNTWIFIbGetConfigPhyMode ( void VNTWIFIvQueryBSSList ( - IN void *pMgmtHandle, + void *pMgmtHandle, OUT PUINT puBSSCount, OUT void **pvFirstBSS ) @@ -456,8 +456,8 @@ VNTWIFIvQueryBSSList ( void VNTWIFIvGetNextBSS ( - IN void *pMgmtHandle, - IN void *pvCurrentBSS, + void *pMgmtHandle, + void *pvCurrentBSS, OUT void **pvNextBSS ) { @@ -496,11 +496,11 @@ VNTWIFIvGetNextBSS ( -*/ void VNTWIFIvUpdateNodeTxCounter( - IN void *pMgmtHandle, - IN PBYTE pbyDestAddress, - IN BOOL bTxOk, - IN WORD wRate, - IN PBYTE pbyTxFailCount + void *pMgmtHandle, + PBYTE pbyDestAddress, + BOOL bTxOk, + WORD wRate, + PBYTE pbyTxFailCount ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -531,8 +531,8 @@ VNTWIFIvUpdateNodeTxCounter( void VNTWIFIvGetTxRate( - IN void *pMgmtHandle, - IN PBYTE pbyDestAddress, + void *pMgmtHandle, + PBYTE pbyDestAddress, OUT PWORD pwTxDataRate, OUT PBYTE pbyACKRate, OUT PBYTE pbyCCKBasicRate, @@ -603,8 +603,8 @@ VNTWIFIvGetTxRate( BYTE VNTWIFIbyGetKeyCypher( - IN void *pMgmtHandle, - IN BOOL bGroupKey + void *pMgmtHandle, + BOOL bGroupKey ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -620,7 +620,7 @@ VNTWIFIbyGetKeyCypher( /* BOOL VNTWIFIbInit( - IN void *pAdapterHandler, + void *pAdapterHandler, OUT void **pMgmtHandler ) { @@ -664,9 +664,9 @@ VNTWIFIbInit( BOOL VNTWIFIbSetPMKIDCache ( - IN void *pMgmtObject, - IN ULONG ulCount, - IN void *pPMKIDInfo + void *pMgmtObject, + ULONG ulCount, + void *pPMKIDInfo ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject; @@ -683,7 +683,7 @@ VNTWIFIbSetPMKIDCache ( WORD VNTWIFIwGetMaxSupportRate( - IN void *pMgmtObject + void *pMgmtObject ) { WORD wRate = RATE_54M; @@ -704,8 +704,8 @@ VNTWIFIwGetMaxSupportRate( void VNTWIFIvSet11h ( - IN void *pMgmtObject, - IN BOOL b11hEnable + void *pMgmtObject, + BOOL b11hEnable ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject; @@ -715,13 +715,13 @@ VNTWIFIvSet11h ( BOOL VNTWIFIbMeasureReport( - IN void *pMgmtObject, - IN BOOL bEndOfReport, - IN void *pvMeasureEID, - IN BYTE byReportMode, - IN BYTE byBasicMap, - IN BYTE byCCAFraction, - IN PBYTE pbyRPIs + void *pMgmtObject, + BOOL bEndOfReport, + void *pvMeasureEID, + BYTE byReportMode, + BYTE byBasicMap, + BYTE byCCAFraction, + PBYTE pbyRPIs ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject; @@ -775,8 +775,8 @@ VNTWIFIbMeasureReport( BOOL VNTWIFIbChannelSwitch( - IN void *pMgmtObject, - IN BYTE byNewChannel + void *pMgmtObject, + BYTE byNewChannel ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject; @@ -791,8 +791,8 @@ VNTWIFIbChannelSwitch( /* BOOL VNTWIFIbRadarPresent( - IN void *pMgmtObject, - IN BYTE byChannel + void *pMgmtObject, + BYTE byChannel ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject; diff --git a/drivers/staging/vt6655/vntwifi.h b/drivers/staging/vt6655/vntwifi.h index 666684a..ca1ee0e 100644 --- a/drivers/staging/vt6655/vntwifi.h +++ b/drivers/staging/vt6655/vntwifi.h @@ -142,74 +142,74 @@ typedef enum tagWMAC_POWER_MODE { void VNTWIFIvSetIBSSParameter ( - IN void *pMgmtHandle, - IN WORD wBeaconPeriod, - IN WORD wATIMWindow, - IN UINT uChannel + void *pMgmtHandle, + WORD wBeaconPeriod, + WORD wATIMWindow, + UINT uChannel ); void VNTWIFIvSetOPMode ( - IN void *pMgmtHandle, - IN WMAC_CONFIG_MODE eOPMode + void *pMgmtHandle, + WMAC_CONFIG_MODE eOPMode ); PWLAN_IE_SSID VNTWIFIpGetCurrentSSID( - IN void *pMgmtHandle + void *pMgmtHandle ); UINT VNTWIFIpGetCurrentChannel( - IN void *pMgmtHandle + void *pMgmtHandle ); WORD VNTWIFIwGetAssocID ( - IN void *pMgmtHandle + void *pMgmtHandle ); BYTE VNTWIFIbyGetMaxSupportRate ( - IN PWLAN_IE_SUPP_RATES pSupportRateIEs, - IN PWLAN_IE_SUPP_RATES pExtSupportRateIEs + PWLAN_IE_SUPP_RATES pSupportRateIEs, + PWLAN_IE_SUPP_RATES pExtSupportRateIEs ); BYTE VNTWIFIbyGetACKTxRate ( - IN BYTE byRxDataRate, - IN PWLAN_IE_SUPP_RATES pSupportRateIEs, - IN PWLAN_IE_SUPP_RATES pExtSupportRateIEs + BYTE byRxDataRate, + PWLAN_IE_SUPP_RATES pSupportRateIEs, + PWLAN_IE_SUPP_RATES pExtSupportRateIEs ); void VNTWIFIvSetAuthenticationMode ( - IN void *pMgmtHandle, - IN WMAC_AUTHENTICATION_MODE eAuthMode + void *pMgmtHandle, + WMAC_AUTHENTICATION_MODE eAuthMode ); void VNTWIFIvSetEncryptionMode ( - IN void *pMgmtHandle, - IN WMAC_ENCRYPTION_MODE eEncryptionMode + void *pMgmtHandle, + WMAC_ENCRYPTION_MODE eEncryptionMode ); BOOL VNTWIFIbConfigPhyMode( - IN void *pMgmtHandle, - IN CARD_PHY_TYPE ePhyType + void *pMgmtHandle, + CARD_PHY_TYPE ePhyType ); void VNTWIFIbGetConfigPhyMode( - IN void *pMgmtHandle, + void *pMgmtHandle, OUT void *pePhyType ); void VNTWIFIvQueryBSSList( - IN void *pMgmtHandle, + void *pMgmtHandle, OUT PUINT puBSSCount, OUT void **pvFirstBSS ); @@ -219,8 +219,8 @@ VNTWIFIvQueryBSSList( void VNTWIFIvGetNextBSS ( - IN void *pMgmtHandle, - IN void *pvCurrentBSS, + void *pMgmtHandle, + void *pvCurrentBSS, OUT void **pvNextBSS ); @@ -228,18 +228,18 @@ VNTWIFIvGetNextBSS ( void VNTWIFIvUpdateNodeTxCounter( - IN void *pMgmtHandle, - IN PBYTE pbyDestAddress, - IN BOOL bTxOk, - IN WORD wRate, - IN PBYTE pbyTxFailCount + void *pMgmtHandle, + PBYTE pbyDestAddress, + BOOL bTxOk, + WORD wRate, + PBYTE pbyTxFailCount ); void VNTWIFIvGetTxRate( - IN void *pMgmtHandle, - IN PBYTE pbyDestAddress, + void *pMgmtHandle, + PBYTE pbyDestAddress, OUT PWORD pwTxDataRate, OUT PBYTE pbyACKRate, OUT PBYTE pbyCCKBasicRate, @@ -248,15 +248,15 @@ VNTWIFIvGetTxRate( /* BOOL VNTWIFIbInit( - IN void *pAdapterHandler, + void *pAdapterHandler, OUT void **pMgmtHandler ); */ BYTE VNTWIFIbyGetKeyCypher( - IN void *pMgmtHandle, - IN BOOL bGroupKey + void *pMgmtHandle, + BOOL bGroupKey ); @@ -264,49 +264,49 @@ VNTWIFIbyGetKeyCypher( BOOL VNTWIFIbSetPMKIDCache ( - IN void *pMgmtObject, - IN ULONG ulCount, - IN void *pPMKIDInfo + void *pMgmtObject, + ULONG ulCount, + void *pPMKIDInfo ); BOOL VNTWIFIbCommandRunning ( - IN void *pMgmtObject + void *pMgmtObject ); WORD VNTWIFIwGetMaxSupportRate( - IN void *pMgmtObject + void *pMgmtObject ); // for 802.11h void VNTWIFIvSet11h ( - IN void *pMgmtObject, - IN BOOL b11hEnable + void *pMgmtObject, + BOOL b11hEnable ); BOOL VNTWIFIbMeasureReport( - IN void *pMgmtObject, - IN BOOL bEndOfReport, - IN void *pvMeasureEID, - IN BYTE byReportMode, - IN BYTE byBasicMap, - IN BYTE byCCAFraction, - IN PBYTE pbyRPIs + void *pMgmtObject, + BOOL bEndOfReport, + void *pvMeasureEID, + BYTE byReportMode, + BYTE byBasicMap, + BYTE byCCAFraction, + PBYTE pbyRPIs ); BOOL VNTWIFIbChannelSwitch( - IN void *pMgmtObject, - IN BYTE byNewChannel + void *pMgmtObject, + BYTE byNewChannel ); /* BOOL VNTWIFIbRadarPresent( - IN void *pMgmtObject, - IN BYTE byChannel + void *pMgmtObject, + BYTE byChannel ); */ diff --git a/drivers/staging/vt6655/wcmd.c b/drivers/staging/vt6655/wcmd.c index 6e46040..28665d8 100644 --- a/drivers/staging/vt6655/wcmd.c +++ b/drivers/staging/vt6655/wcmd.c @@ -68,19 +68,19 @@ static int msglevel =MSG_LEVEL_INFO; static void s_vProbeChannel( - IN PSDevice pDevice + PSDevice pDevice ); static PSTxMgmtPacket s_MgrMakeProbeRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pScanBSSID, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pScanBSSID, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); @@ -204,7 +204,7 @@ vAdHocBeaconRestart(PSDevice pDevice) static void s_vProbeChannel( - IN PSDevice pDevice + PSDevice pDevice ) { //1M, 2M, 5M, 11M, 18M, 24M, 36M, 54M @@ -267,12 +267,12 @@ s_vProbeChannel( PSTxMgmtPacket s_MgrMakeProbeRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pScanBSSID, - IN PWLAN_IE_SSID pSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pScanBSSID, + PWLAN_IE_SSID pSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { @@ -319,8 +319,8 @@ s_MgrMakeProbeRequest( void vCommandTimerWait( - IN void *hDeviceContext, - IN UINT MSecond + void *hDeviceContext, + UINT MSecond ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -339,7 +339,7 @@ vCommandTimerWait( void vCommandTimer ( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -980,9 +980,9 @@ s_bCommandComplete ( BOOL bScheduleCommand ( - IN void *hDeviceContext, - IN CMD_CODE eCommand, - IN PBYTE pbyItem0 + void *hDeviceContext, + CMD_CODE eCommand, + PBYTE pbyItem0 ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1061,7 +1061,7 @@ BOOL bScheduleCommand ( * */ BOOL bClearBSSID_SCAN ( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1083,7 +1083,7 @@ BOOL bClearBSSID_SCAN ( //mike add:reset command timer void vResetCommandTimer( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1107,7 +1107,7 @@ vResetCommandTimer( #ifdef TxInSleep void BSSvSecondTxData( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; diff --git a/drivers/staging/vt6655/wcmd.h b/drivers/staging/vt6655/wcmd.h index 67b08f6..c3c4180 100644 --- a/drivers/staging/vt6655/wcmd.h +++ b/drivers/staging/vt6655/wcmd.h @@ -111,34 +111,34 @@ typedef enum tagCMD_STATE { /*--------------------- Export Functions --------------------------*/ void vResetCommandTimer( - IN void *hDeviceContext + void *hDeviceContext ); void vCommandTimer ( - IN void *hDeviceContext + void *hDeviceContext ); BOOL bClearBSSID_SCAN( - IN void *hDeviceContext + void *hDeviceContext ); BOOL bScheduleCommand( - IN void *hDeviceContext, - IN CMD_CODE eCommand, - IN PBYTE pbyItem0 + void *hDeviceContext, + CMD_CODE eCommand, + PBYTE pbyItem0 ); void vCommandTimerWait( - IN void *hDeviceContext, - IN UINT MSecond + void *hDeviceContext, + UINT MSecond ); #ifdef TxInSleep void BSSvSecondTxData( - IN void *hDeviceContext + void *hDeviceContext ); #endif diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index 614850a..19a16ca 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -94,110 +94,110 @@ static int msglevel =MSG_LEVEL_INFO; /*--------------------- Static Functions --------------------------*/ //2008-8-4 by chester static BOOL ChannelExceedZoneType( - IN PSDevice pDevice, - IN BYTE byCurrChannel + PSDevice pDevice, + BYTE byCurrChannel ); // Association/diassociation functions static PSTxMgmtPacket s_MgrMakeAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pDAddr, - IN WORD wCurrCapInfo, - IN WORD wListenInterval, - IN PWLAN_IE_SSID pCurrSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pDAddr, + WORD wCurrCapInfo, + WORD wListenInterval, + PWLAN_IE_SSID pCurrSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); static void s_vMgrRxAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN UINT uNodeIndex + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + UINT uNodeIndex ); static PSTxMgmtPacket s_MgrMakeReAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pDAddr, - IN WORD wCurrCapInfo, - IN WORD wListenInterval, - IN PWLAN_IE_SSID pCurrSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pDAddr, + WORD wCurrCapInfo, + WORD wListenInterval, + PWLAN_IE_SSID pCurrSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); static void s_vMgrRxAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN BOOL bReAssocType + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + BOOL bReAssocType ); static void s_vMgrRxDisassociation( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); // Authentication/deauthen functions static void s_vMgrRxAuthenSequence_1( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ); static void s_vMgrRxAuthenSequence_2( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ); static void s_vMgrRxAuthenSequence_3( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ); static void s_vMgrRxAuthenSequence_4( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ); static void s_vMgrRxAuthentication( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); static void s_vMgrRxDeauthentication( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); // Scan functions @@ -205,49 +205,49 @@ s_vMgrRxDeauthentication( static void s_vMgrRxProbeRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); static void s_vMgrRxProbeResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); // beacon functions static void s_vMgrRxBeacon( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN BOOL bInScan + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + BOOL bInScan ); static void s_vMgrFormatTIM( - IN PSMgmtObject pMgmt, - IN PWLAN_IE_TIM pTIM + PSMgmtObject pMgmt, + PWLAN_IE_TIM pTIM ); static PSTxMgmtPacket s_MgrMakeBeacon( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wCurrBeaconPeriod, - IN UINT uCurrChannel, - IN WORD wCurrATIMWinodw, - IN PWLAN_IE_SSID pCurrSSID, - IN PBYTE pCurrBSSID, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wCurrBeaconPeriod, + UINT uCurrChannel, + WORD wCurrATIMWinodw, + PWLAN_IE_SSID pCurrSSID, + PBYTE pCurrBSSID, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); @@ -255,78 +255,78 @@ s_MgrMakeBeacon( static PSTxMgmtPacket s_MgrMakeAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wAssocStatus, - IN WORD wAssocAID, - IN PBYTE pDstAddr, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wAssocStatus, + WORD wAssocAID, + PBYTE pDstAddr, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); // ReAssociation response static PSTxMgmtPacket s_MgrMakeReAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wAssocStatus, - IN WORD wAssocAID, - IN PBYTE pDstAddr, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wAssocStatus, + WORD wAssocAID, + PBYTE pDstAddr, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ); // Probe response static PSTxMgmtPacket s_MgrMakeProbeResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wCurrBeaconPeriod, - IN UINT uCurrChannel, - IN WORD wCurrATIMWinodw, - IN PBYTE pDstAddr, - IN PWLAN_IE_SSID pCurrSSID, - IN PBYTE pCurrBSSID, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates, - IN BYTE byPHYType + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wCurrBeaconPeriod, + UINT uCurrChannel, + WORD wCurrATIMWinodw, + PBYTE pDstAddr, + PWLAN_IE_SSID pCurrSSID, + PBYTE pCurrBSSID, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates, + BYTE byPHYType ); // received status static void s_vMgrLogStatus( - IN PSMgmtObject pMgmt, - IN WORD wStatus + PSMgmtObject pMgmt, + WORD wStatus ); static void s_vMgrSynchBSS ( - IN PSDevice pDevice, - IN UINT uBSSMode, - IN PKnownBSS pCurr, + PSDevice pDevice, + UINT uBSSMode, + PKnownBSS pCurr, OUT PCMD_STATUS pStatus ); static BOOL s_bCipherMatch ( - IN PKnownBSS pBSSNode, - IN NDIS_802_11_ENCRYPTION_STATUS EncStatus, + PKnownBSS pBSSNode, + NDIS_802_11_ENCRYPTION_STATUS EncStatus, OUT PBYTE pbyCCSPK, OUT PBYTE pbyCCSGK ); static void Encyption_Rebuild( - IN PSDevice pDevice, - IN PKnownBSS pCurr + PSDevice pDevice, + PKnownBSS pCurr ); @@ -349,7 +349,7 @@ s_bCipherMatch ( void vMgrObjectInit( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -385,7 +385,7 @@ vMgrObjectInit( void vMgrTimerInit( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -433,7 +433,7 @@ vMgrTimerInit( void vMgrObjectReset( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -462,8 +462,8 @@ vMgrObjectReset( void vMgrAssocBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, + void *hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ) { @@ -538,8 +538,8 @@ vMgrAssocBeginSta( void vMgrReAssocBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, + void *hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ) { @@ -617,10 +617,10 @@ vMgrReAssocBeginSta( void vMgrDisassocBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, - IN PBYTE abyDestAddress, - IN WORD wReason, + void *hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, OUT PCMD_STATUS pStatus ) { @@ -680,10 +680,10 @@ vMgrDisassocBeginSta( static void s_vMgrRxAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN UINT uNodeIndex + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + UINT uNodeIndex ) { WLAN_FR_ASSOCREQ sFrame; @@ -842,10 +842,10 @@ s_vMgrRxAssocRequest( static void s_vMgrRxReAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN UINT uNodeIndex + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + UINT uNodeIndex ) { WLAN_FR_REASSOCREQ sFrame; @@ -992,10 +992,10 @@ s_vMgrRxReAssocRequest( static void s_vMgrRxAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN BOOL bReAssocType + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + BOOL bReAssocType ) { WLAN_FR_ASSOCRESP sFrame; @@ -1152,8 +1152,8 @@ if(pMgmt->eCurrState == WMAC_STATE_ASSOC) void vMgrAuthenBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, + void *hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ) { @@ -1210,10 +1210,10 @@ vMgrAuthenBeginSta( void vMgrDeAuthenBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, - IN PBYTE abyDestAddress, - IN WORD wReason, + void *hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, OUT PCMD_STATUS pStatus ) { @@ -1267,9 +1267,9 @@ vMgrDeAuthenBeginSta( static void s_vMgrRxAuthentication( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { WLAN_FR_AUTHEN sFrame; @@ -1325,9 +1325,9 @@ s_vMgrRxAuthentication( static void s_vMgrRxAuthenSequence_1( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ) { PSTxMgmtPacket pTxPacket = NULL; @@ -1431,9 +1431,9 @@ s_vMgrRxAuthenSequence_1( static void s_vMgrRxAuthenSequence_2( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ) { WLAN_FR_AUTHEN sFrame; @@ -1533,9 +1533,9 @@ s_vMgrRxAuthenSequence_2( static void s_vMgrRxAuthenSequence_3( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ) { PSTxMgmtPacket pTxPacket = NULL; @@ -1621,9 +1621,9 @@ reply: static void s_vMgrRxAuthenSequence_4( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PWLAN_FR_AUTHEN pFrame + PSDevice pDevice, + PSMgmtObject pMgmt, + PWLAN_FR_AUTHEN pFrame ) { @@ -1660,9 +1660,9 @@ s_vMgrRxAuthenSequence_4( static void s_vMgrRxDisassociation( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { WLAN_FR_DISASSOC sFrame; @@ -1739,9 +1739,9 @@ s_vMgrRxDisassociation( static void s_vMgrRxDeauthentication( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { WLAN_FR_DEAUTHEN sFrame; @@ -1827,8 +1827,8 @@ s_vMgrRxDeauthentication( -*/ static BOOL ChannelExceedZoneType( - IN PSDevice pDevice, - IN BYTE byCurrChannel + PSDevice pDevice, + BYTE byCurrChannel ) { BOOL exceed=FALSE; @@ -1865,10 +1865,10 @@ ChannelExceedZoneType( static void s_vMgrRxBeacon( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket, - IN BOOL bInScan + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket, + BOOL bInScan ) { @@ -2386,7 +2386,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) -*/ void vMgrCreateOwnIBSS( - IN void *hDeviceContext, + void *hDeviceContext, OUT PCMD_STATUS pStatus ) { @@ -2653,7 +2653,7 @@ vMgrCreateOwnIBSS( void vMgrJoinBSSBegin( - IN void *hDeviceContext, + void *hDeviceContext, OUT PCMD_STATUS pStatus ) { @@ -2922,9 +2922,9 @@ vMgrJoinBSSBegin( static void s_vMgrSynchBSS ( - IN PSDevice pDevice, - IN UINT uBSSMode, - IN PKnownBSS pCurr, + PSDevice pDevice, + UINT uBSSMode, + PKnownBSS pCurr, OUT PCMD_STATUS pStatus ) { @@ -3089,8 +3089,8 @@ s_vMgrSynchBSS ( //mike add: fix NetworkManager 0.7.0 hidden ssid mode in WPA encryption // ,need reset eAuthenMode and eEncryptionStatus static void Encyption_Rebuild( - IN PSDevice pDevice, - IN PKnownBSS pCurr + PSDevice pDevice, + PKnownBSS pCurr ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); @@ -3147,8 +3147,8 @@ s_vMgrSynchBSS ( static void s_vMgrFormatTIM( - IN PSMgmtObject pMgmt, - IN PWLAN_IE_TIM pTIM + PSMgmtObject pMgmt, + PWLAN_IE_TIM pTIM ) { BYTE byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80}; @@ -3222,16 +3222,16 @@ s_vMgrFormatTIM( static PSTxMgmtPacket s_MgrMakeBeacon( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wCurrBeaconPeriod, - IN UINT uCurrChannel, - IN WORD wCurrATIMWinodw, - IN PWLAN_IE_SSID pCurrSSID, - IN PBYTE pCurrBSSID, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wCurrBeaconPeriod, + UINT uCurrChannel, + WORD wCurrATIMWinodw, + PWLAN_IE_SSID pCurrSSID, + PBYTE pCurrBSSID, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -3451,18 +3451,18 @@ s_MgrMakeBeacon( PSTxMgmtPacket s_MgrMakeProbeResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wCurrBeaconPeriod, - IN UINT uCurrChannel, - IN WORD wCurrATIMWinodw, - IN PBYTE pDstAddr, - IN PWLAN_IE_SSID pCurrSSID, - IN PBYTE pCurrBSSID, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates, - IN BYTE byPHYType + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wCurrBeaconPeriod, + UINT uCurrChannel, + WORD wCurrATIMWinodw, + PBYTE pDstAddr, + PWLAN_IE_SSID pCurrSSID, + PBYTE pCurrBSSID, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates, + BYTE byPHYType ) { PSTxMgmtPacket pTxPacket = NULL; @@ -3640,14 +3640,14 @@ s_MgrMakeProbeResponse( PSTxMgmtPacket s_MgrMakeAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pDAddr, - IN WORD wCurrCapInfo, - IN WORD wListenInterval, - IN PWLAN_IE_SSID pCurrSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pDAddr, + WORD wCurrCapInfo, + WORD wListenInterval, + PWLAN_IE_SSID pCurrSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -3915,14 +3915,14 @@ s_MgrMakeAssocRequest( PSTxMgmtPacket s_MgrMakeReAssocRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PBYTE pDAddr, - IN WORD wCurrCapInfo, - IN WORD wListenInterval, - IN PWLAN_IE_SSID pCurrSSID, - IN PWLAN_IE_SUPP_RATES pCurrRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + PBYTE pDAddr, + WORD wCurrCapInfo, + WORD wListenInterval, + PWLAN_IE_SSID pCurrSSID, + PWLAN_IE_SUPP_RATES pCurrRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -4167,14 +4167,14 @@ s_MgrMakeReAssocRequest( PSTxMgmtPacket s_MgrMakeAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wAssocStatus, - IN WORD wAssocAID, - IN PBYTE pDstAddr, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wAssocStatus, + WORD wAssocAID, + PBYTE pDstAddr, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -4241,14 +4241,14 @@ s_MgrMakeAssocResponse( PSTxMgmtPacket s_MgrMakeReAssocResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN WORD wCurrCapInfo, - IN WORD wAssocStatus, - IN WORD wAssocAID, - IN PBYTE pDstAddr, - IN PWLAN_IE_SUPP_RATES pCurrSuppRates, - IN PWLAN_IE_SUPP_RATES pCurrExtSuppRates + PSDevice pDevice, + PSMgmtObject pMgmt, + WORD wCurrCapInfo, + WORD wAssocStatus, + WORD wAssocAID, + PBYTE pDstAddr, + PWLAN_IE_SUPP_RATES pCurrSuppRates, + PWLAN_IE_SUPP_RATES pCurrExtSuppRates ) { PSTxMgmtPacket pTxPacket = NULL; @@ -4315,9 +4315,9 @@ s_MgrMakeReAssocResponse( static void s_vMgrRxProbeResponse( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { PKnownBSS pBSSList = NULL; @@ -4440,9 +4440,9 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) static void s_vMgrRxProbeRequest( - IN PSDevice pDevice, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + PSDevice pDevice, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { WLAN_FR_PROBEREQ sFrame; @@ -4536,9 +4536,9 @@ s_vMgrRxProbeRequest( void vMgrRxManagePacket( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + void *hDeviceContext, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -4685,8 +4685,8 @@ vMgrRxManagePacket( -*/ BOOL bMgrPrepareBeaconToSend( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt + void *hDeviceContext, + PSMgmtObject pMgmt ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -4740,8 +4740,8 @@ bMgrPrepareBeaconToSend( static void s_vMgrLogStatus( - IN PSMgmtObject pMgmt, - IN WORD wStatus + PSMgmtObject pMgmt, + WORD wStatus ) { switch( wStatus ){ @@ -4809,9 +4809,9 @@ s_vMgrLogStatus( -*/ BOOL bAdd_PMKID_Candidate ( - IN void *hDeviceContext, - IN PBYTE pbyBSSID, - IN PSRSNCapObject psRSNCapObj + void *hDeviceContext, + PBYTE pbyBSSID, + PSRSNCapObject psRSNCapObj ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -4870,7 +4870,7 @@ bAdd_PMKID_Candidate ( -*/ void vFlush_PMKID_Candidate ( - IN void *hDeviceContext + void *hDeviceContext ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -4883,8 +4883,8 @@ vFlush_PMKID_Candidate ( static BOOL s_bCipherMatch ( - IN PKnownBSS pBSSNode, - IN NDIS_802_11_ENCRYPTION_STATUS EncStatus, + PKnownBSS pBSSNode, + NDIS_802_11_ENCRYPTION_STATUS EncStatus, OUT PBYTE pbyCCSPK, OUT PBYTE pbyCCSGK ) diff --git a/drivers/staging/vt6655/wmgr.h b/drivers/staging/vt6655/wmgr.h index cee8602..a86406e 100644 --- a/drivers/staging/vt6655/wmgr.h +++ b/drivers/staging/vt6655/wmgr.h @@ -401,102 +401,102 @@ typedef struct tagSMgmtObject void vMgrObjectInit( - IN void *hDeviceContext + void *hDeviceContext ); void vMgrTimerInit( - IN void *hDeviceContext + void *hDeviceContext ); void vMgrObjectReset( - IN void *hDeviceContext + void *hDeviceContext ); void vMgrAssocBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, + void *hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); void vMgrReAssocBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, + void *hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); void vMgrDisassocBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, - IN PBYTE abyDestAddress, - IN WORD wReason, + void *hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, OUT PCMD_STATUS pStatus ); void vMgrAuthenBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, + void *hDeviceContext, + PSMgmtObject pMgmt, OUT PCMD_STATUS pStatus ); void vMgrCreateOwnIBSS( - IN void *hDeviceContext, + void *hDeviceContext, OUT PCMD_STATUS pStatus ); void vMgrJoinBSSBegin( - IN void *hDeviceContext, + void *hDeviceContext, OUT PCMD_STATUS pStatus ); void vMgrRxManagePacket( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, - IN PSRxMgmtPacket pRxPacket + void *hDeviceContext, + PSMgmtObject pMgmt, + PSRxMgmtPacket pRxPacket ); /* void vMgrScanBegin( - IN void *hDeviceContext, + void *hDeviceContext, OUT PCMD_STATUS pStatus ); */ void vMgrDeAuthenBeginSta( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt, - IN PBYTE abyDestAddress, - IN WORD wReason, + void *hDeviceContext, + PSMgmtObject pMgmt, + PBYTE abyDestAddress, + WORD wReason, OUT PCMD_STATUS pStatus ); BOOL bMgrPrepareBeaconToSend( - IN void *hDeviceContext, - IN PSMgmtObject pMgmt + void *hDeviceContext, + PSMgmtObject pMgmt ); BOOL bAdd_PMKID_Candidate ( - IN void *hDeviceContext, - IN PBYTE pbyBSSID, - IN PSRSNCapObject psRSNCapObj + void *hDeviceContext, + PBYTE pbyBSSID, + PSRSNCapObject psRSNCapObj ); void vFlush_PMKID_Candidate ( - IN void *hDeviceContext + void *hDeviceContext ); #endif // __WMGR_H__ diff --git a/drivers/staging/vt6655/wpa.c b/drivers/staging/vt6655/wpa.c index 75ae838..da5c814 100644 --- a/drivers/staging/vt6655/wpa.c +++ b/drivers/staging/vt6655/wpa.c @@ -70,7 +70,7 @@ const BYTE abyOUI05[4] = { 0x00, 0x50, 0xf2, 0x05 }; void WPA_ClearRSN ( - IN PKnownBSS pBSSList + PKnownBSS pBSSList ) { int ii; @@ -106,8 +106,8 @@ WPA_ClearRSN ( -*/ void WPA_ParseRSN ( - IN PKnownBSS pBSSList, - IN PWLAN_IE_RSN_EXT pRSN + PKnownBSS pBSSList, + PWLAN_IE_RSN_EXT pRSN ) { PWLAN_IE_RSN_AUTH pIE_RSN_Auth = NULL; @@ -241,7 +241,7 @@ BOOL WPA_SearchRSN ( BYTE byCmd, BYTE byEncrypt, - IN PKnownBSS pBSSList + PKnownBSS pBSSList ) { int ii; @@ -299,7 +299,7 @@ WPA_SearchRSN ( -*/ BOOL WPAb_Is_RSN ( - IN PWLAN_IE_RSN_EXT pRSN + PWLAN_IE_RSN_EXT pRSN ) { if (pRSN == NULL) diff --git a/drivers/staging/vt6655/wpa.h b/drivers/staging/vt6655/wpa.h index d77c7bb..80d990b 100644 --- a/drivers/staging/vt6655/wpa.h +++ b/drivers/staging/vt6655/wpa.h @@ -60,25 +60,25 @@ void WPA_ClearRSN( - IN PKnownBSS pBSSList + PKnownBSS pBSSList ); void WPA_ParseRSN( - IN PKnownBSS pBSSList, - IN PWLAN_IE_RSN_EXT pRSN + PKnownBSS pBSSList, + PWLAN_IE_RSN_EXT pRSN ); BOOL WPA_SearchRSN( BYTE byCmd, BYTE byEncrypt, - IN PKnownBSS pBSSList + PKnownBSS pBSSList ); BOOL WPAb_Is_RSN( - IN PWLAN_IE_RSN_EXT pRSN + PWLAN_IE_RSN_EXT pRSN ); #endif // __WPA_H__ diff --git a/drivers/staging/vt6655/wpa2.c b/drivers/staging/vt6655/wpa2.c index 3f377b6..102a18a 100644 --- a/drivers/staging/vt6655/wpa2.c +++ b/drivers/staging/vt6655/wpa2.c @@ -74,7 +74,7 @@ const BYTE abyOUIPSK[4] = { 0x00, 0x0F, 0xAC, 0x02 }; -*/ void WPA2_ClearRSN ( - IN PKnownBSS pBSSNode + PKnownBSS pBSSNode ) { int ii; @@ -109,8 +109,8 @@ WPA2_ClearRSN ( -*/ void WPA2vParseRSN ( - IN PKnownBSS pBSSNode, - IN PWLAN_IE_RSN pRSN + PKnownBSS pBSSNode, + PWLAN_IE_RSN pRSN ) { int i, j; @@ -263,7 +263,7 @@ WPA2vParseRSN ( -*/ UINT WPA2uSetIEs( - IN void *pMgmtHandle, + void *pMgmtHandle, OUT PWLAN_IE_RSN pRSNIEs ) { diff --git a/drivers/staging/vt6655/wpa2.h b/drivers/staging/vt6655/wpa2.h index 7becc74..1f2a02d 100644 --- a/drivers/staging/vt6655/wpa2.h +++ b/drivers/staging/vt6655/wpa2.h @@ -60,18 +60,18 @@ typedef struct tagSPMKIDCache { void WPA2_ClearRSN ( - IN PKnownBSS pBSSNode + PKnownBSS pBSSNode ); void WPA2vParseRSN ( - IN PKnownBSS pBSSNode, - IN PWLAN_IE_RSN pRSN + PKnownBSS pBSSNode, + PWLAN_IE_RSN pRSN ); UINT WPA2uSetIEs( - IN void *pMgmtHandle, + void *pMgmtHandle, OUT PWLAN_IE_RSN pRSNIEs ); -- cgit v0.10.2 From 3cdec5540d622e6b910a1fe91f544630a8ba8099 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Wed, 12 May 2010 20:54:40 -0700 Subject: Staging: vt6655: remove OUT definition MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove empty OUT definition used to specify output parameters. Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/baseband.c b/drivers/staging/vt6655/baseband.c index 2931a0f..5414c6c 100644 --- a/drivers/staging/vt6655/baseband.c +++ b/drivers/staging/vt6655/baseband.c @@ -1849,9 +1849,9 @@ BBvCaculateParameter ( UINT cbFrameLength, WORD wRate, BYTE byPacketType, - OUT PWORD pwPhyLen, - OUT PBYTE pbyPhySrv, - OUT PBYTE pbyPhySgn + PWORD pwPhyLen, + PBYTE pbyPhySrv, + PBYTE pbyPhySgn ) { UINT cbBitCount; diff --git a/drivers/staging/vt6655/baseband.h b/drivers/staging/vt6655/baseband.h index 3eea7aa..b236ff4 100644 --- a/drivers/staging/vt6655/baseband.h +++ b/drivers/staging/vt6655/baseband.h @@ -132,9 +132,9 @@ BBvCaculateParameter ( UINT cbFrameLength, WORD wRate, BYTE byPacketType, - OUT PWORD pwPhyLen, - OUT PBYTE pbyPhySrv, - OUT PBYTE pbyPhySgn + PWORD pwPhyLen, + PBYTE pbyPhySrv, + PBYTE pbyPhySgn ); BOOL BBbReadEmbeded(DWORD_PTR dwIoBase, BYTE byBBAddr, PBYTE pbyData); diff --git a/drivers/staging/vt6655/bssdb.c b/drivers/staging/vt6655/bssdb.c index e64238e..6312a55 100644 --- a/drivers/staging/vt6655/bssdb.c +++ b/drivers/staging/vt6655/bssdb.c @@ -766,7 +766,7 @@ BOOL BSSDBbIsSTAInNodeDB( void *pMgmtObject, PBYTE abyDstAddr, - OUT PUINT puNodeIndex + PUINT puNodeIndex ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtObject; @@ -800,7 +800,7 @@ BSSDBbIsSTAInNodeDB( void BSSvCreateOneNode( void *hDeviceContext, - OUT PUINT puNodeIndex + PUINT puNodeIndex ) { diff --git a/drivers/staging/vt6655/bssdb.h b/drivers/staging/vt6655/bssdb.h index ec1e32b..e09ef87 100644 --- a/drivers/staging/vt6655/bssdb.h +++ b/drivers/staging/vt6655/bssdb.h @@ -312,13 +312,13 @@ BOOL BSSDBbIsSTAInNodeDB( void *hDeviceContext, PBYTE abyDstAddr, - OUT PUINT puNodeIndex + PUINT puNodeIndex ); void BSSvCreateOneNode( void *hDeviceContext, - OUT PUINT puNodeIndex + PUINT puNodeIndex ); void diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index bc61ca9..b071236 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -427,8 +427,8 @@ void s_vCaculateOFDMRParameter( BYTE byRate, CARD_PHY_TYPE ePHYType, - OUT PBYTE pbyTxRate, - OUT PBYTE pbyRsvTime + PBYTE pbyTxRate, + PBYTE pbyRsvTime ); @@ -500,8 +500,8 @@ void s_vCaculateOFDMRParameter ( BYTE byRate, CARD_PHY_TYPE ePHYType, - OUT PBYTE pbyTxRate, - OUT PBYTE pbyRsvTime + PBYTE pbyTxRate, + PBYTE pbyRsvTime ) { switch (byRate) { @@ -2130,8 +2130,8 @@ CARDvSetPowerConstraint ( void CARDvGetPowerCapability ( void *pDeviceHandler, - OUT PBYTE pbyMinPower, - OUT PBYTE pbyMaxPower + PBYTE pbyMinPower, + PBYTE pbyMaxPower ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2166,7 +2166,7 @@ CARDvGetPowerCapability ( BYTE CARDbySetSupportChannels ( void *pDeviceHandler, - OUT PBYTE pbyIEs + PBYTE pbyIEs ) { PSDevice pDevice = (PSDevice) pDeviceHandler; @@ -2268,7 +2268,7 @@ CARDbyGetTransmitPower ( BOOL CARDbChannelGetList ( UINT uCountryCodeIdx, - OUT PBYTE pbyChannelTable + PBYTE pbyChannelTable ) { if (uCountryCodeIdx >= CCODE_MAX) { @@ -2309,8 +2309,8 @@ BOOL CARDbGetChannelMapInfo( void *pDeviceHandler, UINT uChannelIndex, - OUT PBYTE pbyChannelNumber, - OUT PBYTE pbyMap + PBYTE pbyChannelNumber, + PBYTE pbyMap ) { // PSDevice pDevice = (PSDevice) pDeviceHandler; diff --git a/drivers/staging/vt6655/card.h b/drivers/staging/vt6655/card.h index f52a8e0..7631346 100644 --- a/drivers/staging/vt6655/card.h +++ b/drivers/staging/vt6655/card.h @@ -195,14 +195,14 @@ CARDvSetPowerConstraint ( void CARDvGetPowerCapability ( void *pDeviceHandler, - OUT PBYTE pbyMinPower, - OUT PBYTE pbyMaxPower + PBYTE pbyMinPower, + PBYTE pbyMaxPower ); BYTE CARDbySetSupportChannels ( void *pDeviceHandler, - OUT PBYTE pbyIEs + PBYTE pbyIEs ); I8 @@ -213,7 +213,7 @@ CARDbyGetTransmitPower ( BOOL CARDbChannelGetList ( UINT uCountryCodeIdx, - OUT PBYTE pbyChannelTable + PBYTE pbyChannelTable ); void @@ -226,8 +226,8 @@ BOOL CARDbGetChannelMapInfo( void *pDeviceHandler, UINT uChannelIndex, - OUT PBYTE pbyChannelNumber, - OUT PBYTE pbyMap + PBYTE pbyChannelNumber, + PBYTE pbyMap ); void diff --git a/drivers/staging/vt6655/datarate.c b/drivers/staging/vt6655/datarate.c index 42b008a..38b09a7 100644 --- a/drivers/staging/vt6655/datarate.c +++ b/drivers/staging/vt6655/datarate.c @@ -200,11 +200,11 @@ RATEvParseMaxRate ( PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pItemExtRates, BOOL bUpdateBasicRate, - OUT PWORD pwMaxBasicRate, - OUT PWORD pwMaxSuppRate, - OUT PWORD pwSuppRate, - OUT PBYTE pbyTopCCKRate, - OUT PBYTE pbyTopOFDMRate + PWORD pwMaxBasicRate, + PWORD pwMaxSuppRate, + PWORD pwSuppRate, + PBYTE pbyTopCCKRate, + PBYTE pbyTopOFDMRate ) { PSDevice pDevice = (PSDevice) pDeviceHandler; diff --git a/drivers/staging/vt6655/datarate.h b/drivers/staging/vt6655/datarate.h index abf7a38..b8ca792 100644 --- a/drivers/staging/vt6655/datarate.h +++ b/drivers/staging/vt6655/datarate.h @@ -60,11 +60,11 @@ RATEvParseMaxRate( PWLAN_IE_SUPP_RATES pItemRates, PWLAN_IE_SUPP_RATES pItemExtRates, BOOL bUpdateBasicRate, - OUT PWORD pwMaxBasicRate, - OUT PWORD pwMaxSuppRate, - OUT PWORD pwSuppRate, - OUT PBYTE pbyTopCCKRate, - OUT PBYTE pbyTopOFDMRate + PWORD pwMaxBasicRate, + PWORD pwMaxSuppRate, + PWORD pwSuppRate, + PBYTE pbyTopCCKRate, + PBYTE pbyTopOFDMRate ); void diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 6936839..715be63 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -83,8 +83,8 @@ static void s_vGetDASA( PBYTE pbyRxBufferAddr, - OUT PUINT pcbHeaderSize, - OUT PSEthernetHeader psEthHeader + PUINT pcbHeaderSize, + PSEthernetHeader psEthHeader ); static @@ -95,7 +95,7 @@ s_vProcessRxMACHeader ( UINT cbPacketSize, BOOL bIsWEP, BOOL bExtIV, - OUT PUINT pcbHeadSize + PUINT pcbHeadSize ); static BOOL s_bAPModeRxCtl( @@ -121,11 +121,11 @@ static BOOL s_bHandleRxEncryption( PBYTE pbyFrame, UINT FrameSize, PBYTE pbyRsr, - OUT PBYTE pbyNewRsr, - OUT PSKeyItem *pKeyOut, + PBYTE pbyNewRsr, + PSKeyItem *pKeyOut, int * pbExtIV, - OUT PWORD pwRxTSC15_0, - OUT PDWORD pdwRxTSC47_16 + PWORD pwRxTSC15_0, + PDWORD pdwRxTSC47_16 ); static BOOL s_bHostWepRxEncryption( @@ -136,10 +136,10 @@ static BOOL s_bHostWepRxEncryption( PBYTE pbyRsr, BOOL bOnFly, PSKeyItem pKey, - OUT PBYTE pbyNewRsr, + PBYTE pbyNewRsr, int * pbExtIV, - OUT PWORD pwRxTSC15_0, - OUT PDWORD pdwRxTSC47_16 + PWORD pwRxTSC15_0, + PDWORD pdwRxTSC47_16 ); @@ -170,7 +170,7 @@ s_vProcessRxMACHeader ( UINT cbPacketSize, BOOL bIsWEP, BOOL bExtIV, - OUT PUINT pcbHeadSize + PUINT pcbHeadSize ) { PBYTE pbyRxBuffer; @@ -265,8 +265,8 @@ static void s_vGetDASA ( PBYTE pbyRxBufferAddr, - OUT PUINT pcbHeaderSize, - OUT PSEthernetHeader psEthHeader + PUINT pcbHeaderSize, + PSEthernetHeader psEthHeader ) { UINT cbHeaderSize = 0; @@ -1167,11 +1167,11 @@ static BOOL s_bHandleRxEncryption ( PBYTE pbyFrame, UINT FrameSize, PBYTE pbyRsr, - OUT PBYTE pbyNewRsr, - OUT PSKeyItem *pKeyOut, + PBYTE pbyNewRsr, + PSKeyItem *pKeyOut, int * pbExtIV, - OUT PWORD pwRxTSC15_0, - OUT PDWORD pdwRxTSC47_16 + PWORD pwRxTSC15_0, + PDWORD pdwRxTSC47_16 ) { UINT PayloadLen = FrameSize; @@ -1315,10 +1315,10 @@ static BOOL s_bHostWepRxEncryption ( PBYTE pbyRsr, BOOL bOnFly, PSKeyItem pKey, - OUT PBYTE pbyNewRsr, + PBYTE pbyNewRsr, int * pbExtIV, - OUT PWORD pwRxTSC15_0, - OUT PDWORD pdwRxTSC47_16 + PWORD pwRxTSC15_0, + PDWORD pdwRxTSC47_16 ) { UINT PayloadLen = FrameSize; diff --git a/drivers/staging/vt6655/key.c b/drivers/staging/vt6655/key.c index c702d50..2065ee2 100644 --- a/drivers/staging/vt6655/key.c +++ b/drivers/staging/vt6655/key.c @@ -135,7 +135,7 @@ BOOL KeybGetKey ( PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex, - OUT PSKeyItem *pKey + PSKeyItem *pKey ) { int i; @@ -521,7 +521,7 @@ BOOL KeybGetTransmitKey ( PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyType, - OUT PSKeyItem *pKey + PSKeyItem *pKey ) { int i, ii; @@ -599,7 +599,7 @@ BOOL KeybGetTransmitKey ( */ BOOL KeybCheckPairewiseKey ( PSKeyManagement pTable, - OUT PSKeyItem *pKey + PSKeyItem *pKey ) { int i; diff --git a/drivers/staging/vt6655/key.h b/drivers/staging/vt6655/key.h index 88be5b4..db1cbf3 100644 --- a/drivers/staging/vt6655/key.h +++ b/drivers/staging/vt6655/key.h @@ -107,7 +107,7 @@ BOOL KeybGetKey( PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex, - OUT PSKeyItem *pKey + PSKeyItem *pKey ); BOOL KeybSetKey( @@ -144,12 +144,12 @@ BOOL KeybGetTransmitKey( PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyType, - OUT PSKeyItem *pKey + PSKeyItem *pKey ); BOOL KeybCheckPairewiseKey( PSKeyManagement pTable, - OUT PSKeyItem *pKey + PSKeyItem *pKey ); BOOL KeybRemoveAllKey( diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index 885741a..6cd10bd 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -123,7 +123,7 @@ s_vFillTxKey( PSKeyItem pTransmitKey, PBYTE pbyHdrBuf, WORD wPayloadLen, - OUT PBYTE pMICHDR + PBYTE pMICHDR ); @@ -184,7 +184,7 @@ s_cbFillTxBufHead ( BOOL bNeedEncrypt, PSKeyItem pTransmitKey, UINT uNodeIndex, - OUT PUINT puMACfragNum + PUINT puMACfragNum ); @@ -218,7 +218,7 @@ s_vFillTxKey ( PSKeyItem pTransmitKey, PBYTE pbyHdrBuf, WORD wPayloadLen, - OUT PBYTE pMICHDR + PBYTE pMICHDR ) { PDWORD pdwIV = (PDWORD) pbyIVHead; @@ -1329,7 +1329,7 @@ s_cbFillTxBufHead ( BOOL bNeedEncrypt, PSKeyItem pTransmitKey, UINT uNodeIndex, - OUT PUINT puMACfragNum + PUINT puMACfragNum ) { UINT cbMACHdLen; @@ -2106,8 +2106,8 @@ vGenerateFIFOHeader ( PBYTE pPacket, PSKeyItem pTransmitKey, UINT uNodeIndex, - OUT PUINT puMACfragNum, - OUT PUINT pcbHeaderSize + PUINT puMACfragNum, + PUINT pcbHeaderSize ) { UINT wTxBufSize; // FFinfo size diff --git a/drivers/staging/vt6655/rxtx.h b/drivers/staging/vt6655/rxtx.h index 75988c7..b008fc2 100644 --- a/drivers/staging/vt6655/rxtx.h +++ b/drivers/staging/vt6655/rxtx.h @@ -46,8 +46,8 @@ void vGenerateMACHeader( PBYTE pbySkbData, UINT cbPacketSize, BOOL bDMA0Used, - OUT PUINT pcbHeadSize, - OUT PUINT pcbAppendPayload + PUINT pcbHeadSize, + PUINT pcbAppendPayload ); void vProcessRxMACHeader ( @@ -55,7 +55,7 @@ void vProcessRxMACHeader ( DWORD dwRxBufferAddr, UINT cbPacketSize, BOOL bIsWEP, - OUT PUINT pcbHeadSize + PUINT pcbHeadSize ); */ @@ -95,8 +95,8 @@ vGenerateFIFOHeader ( PBYTE pPacket, PSKeyItem pTransmitKey, UINT uNodeIndex, - OUT PUINT puMACfragNum, - OUT PUINT pcbHeaderSize + PUINT puMACfragNum, + PUINT pcbHeaderSize ); diff --git a/drivers/staging/vt6655/vntwifi.c b/drivers/staging/vt6655/vntwifi.c index bd3b2af..b527a01 100644 --- a/drivers/staging/vt6655/vntwifi.c +++ b/drivers/staging/vt6655/vntwifi.c @@ -382,7 +382,7 @@ VNTWIFIbConfigPhyMode ( void VNTWIFIbGetConfigPhyMode ( void *pMgmtHandle, - OUT void *pePhyType + void *pePhyType ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -427,8 +427,8 @@ VNTWIFIbGetConfigPhyMode ( void VNTWIFIvQueryBSSList ( void *pMgmtHandle, - OUT PUINT puBSSCount, - OUT void **pvFirstBSS + PUINT puBSSCount, + void **pvFirstBSS ) { UINT ii = 0; @@ -458,7 +458,7 @@ void VNTWIFIvGetNextBSS ( void *pMgmtHandle, void *pvCurrentBSS, - OUT void **pvNextBSS + void **pvNextBSS ) { PKnownBSS pBSS = (PKnownBSS) pvCurrentBSS; @@ -533,10 +533,10 @@ void VNTWIFIvGetTxRate( void *pMgmtHandle, PBYTE pbyDestAddress, - OUT PWORD pwTxDataRate, - OUT PBYTE pbyACKRate, - OUT PBYTE pbyCCKBasicRate, - OUT PBYTE pbyOFDMBasicRate + PWORD pwTxDataRate, + PBYTE pbyACKRate, + PBYTE pbyCCKBasicRate, + PBYTE pbyOFDMBasicRate ) { PSMgmtObject pMgmt = (PSMgmtObject)pMgmtHandle; @@ -621,7 +621,7 @@ VNTWIFIbyGetKeyCypher( BOOL VNTWIFIbInit( void *pAdapterHandler, - OUT void **pMgmtHandler + void **pMgmtHandler ) { diff --git a/drivers/staging/vt6655/vntwifi.h b/drivers/staging/vt6655/vntwifi.h index ca1ee0e..c91dfd7 100644 --- a/drivers/staging/vt6655/vntwifi.h +++ b/drivers/staging/vt6655/vntwifi.h @@ -204,14 +204,14 @@ VNTWIFIbConfigPhyMode( void VNTWIFIbGetConfigPhyMode( void *pMgmtHandle, - OUT void *pePhyType + void *pePhyType ); void VNTWIFIvQueryBSSList( void *pMgmtHandle, - OUT PUINT puBSSCount, - OUT void **pvFirstBSS + PUINT puBSSCount, + void **pvFirstBSS ); @@ -221,7 +221,7 @@ void VNTWIFIvGetNextBSS ( void *pMgmtHandle, void *pvCurrentBSS, - OUT void **pvNextBSS + void **pvNextBSS ); @@ -240,16 +240,16 @@ void VNTWIFIvGetTxRate( void *pMgmtHandle, PBYTE pbyDestAddress, - OUT PWORD pwTxDataRate, - OUT PBYTE pbyACKRate, - OUT PBYTE pbyCCKBasicRate, - OUT PBYTE pbyOFDMBasicRate + PWORD pwTxDataRate, + PBYTE pbyACKRate, + PBYTE pbyCCKBasicRate, + PBYTE pbyOFDMBasicRate ); /* BOOL VNTWIFIbInit( void *pAdapterHandler, - OUT void **pMgmtHandler + void **pMgmtHandler ); */ diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index 19a16ca..60c00fc 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -312,7 +312,7 @@ s_vMgrSynchBSS ( PSDevice pDevice, UINT uBSSMode, PKnownBSS pCurr, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); @@ -320,8 +320,8 @@ static BOOL s_bCipherMatch ( PKnownBSS pBSSNode, NDIS_802_11_ENCRYPTION_STATUS EncStatus, - OUT PBYTE pbyCCSPK, - OUT PBYTE pbyCCSGK + PBYTE pbyCCSPK, + PBYTE pbyCCSGK ); static void Encyption_Rebuild( @@ -464,7 +464,7 @@ void vMgrAssocBeginSta( void *hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -540,7 +540,7 @@ void vMgrReAssocBeginSta( void *hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -621,7 +621,7 @@ vMgrDisassocBeginSta( PSMgmtObject pMgmt, PBYTE abyDestAddress, WORD wReason, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1154,7 +1154,7 @@ void vMgrAuthenBeginSta( void *hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -1214,7 +1214,7 @@ vMgrDeAuthenBeginSta( PSMgmtObject pMgmt, PBYTE abyDestAddress, WORD wReason, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -2387,7 +2387,7 @@ if(ChannelExceedZoneType(pDevice,byCurrChannel)==TRUE) void vMgrCreateOwnIBSS( void *hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -2654,7 +2654,7 @@ vMgrCreateOwnIBSS( void vMgrJoinBSSBegin( void *hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { @@ -2925,7 +2925,7 @@ s_vMgrSynchBSS ( PSDevice pDevice, UINT uBSSMode, PKnownBSS pCurr, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ) { CARD_PHY_TYPE ePhyType = PHY_TYPE_11B; @@ -4885,8 +4885,8 @@ static BOOL s_bCipherMatch ( PKnownBSS pBSSNode, NDIS_802_11_ENCRYPTION_STATUS EncStatus, - OUT PBYTE pbyCCSPK, - OUT PBYTE pbyCCSGK + PBYTE pbyCCSPK, + PBYTE pbyCCSGK ) { BYTE byMulticastCipher = KEY_CTL_INVALID; diff --git a/drivers/staging/vt6655/wmgr.h b/drivers/staging/vt6655/wmgr.h index a86406e..9ae7e0d 100644 --- a/drivers/staging/vt6655/wmgr.h +++ b/drivers/staging/vt6655/wmgr.h @@ -418,14 +418,14 @@ void vMgrAssocBeginSta( void *hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void vMgrReAssocBeginSta( void *hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void @@ -434,26 +434,26 @@ vMgrDisassocBeginSta( PSMgmtObject pMgmt, PBYTE abyDestAddress, WORD wReason, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void vMgrAuthenBeginSta( void *hDeviceContext, PSMgmtObject pMgmt, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void vMgrCreateOwnIBSS( void *hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void vMgrJoinBSSBegin( void *hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); void @@ -467,7 +467,7 @@ vMgrRxManagePacket( void vMgrScanBegin( void *hDeviceContext, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); */ @@ -477,7 +477,7 @@ vMgrDeAuthenBeginSta( PSMgmtObject pMgmt, PBYTE abyDestAddress, WORD wReason, - OUT PCMD_STATUS pStatus + PCMD_STATUS pStatus ); BOOL diff --git a/drivers/staging/vt6655/wpa2.c b/drivers/staging/vt6655/wpa2.c index 102a18a..ff28379 100644 --- a/drivers/staging/vt6655/wpa2.c +++ b/drivers/staging/vt6655/wpa2.c @@ -264,7 +264,7 @@ WPA2vParseRSN ( UINT WPA2uSetIEs( void *pMgmtHandle, - OUT PWLAN_IE_RSN pRSNIEs + PWLAN_IE_RSN pRSNIEs ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle; diff --git a/drivers/staging/vt6655/wpa2.h b/drivers/staging/vt6655/wpa2.h index 1f2a02d..7200db3 100644 --- a/drivers/staging/vt6655/wpa2.h +++ b/drivers/staging/vt6655/wpa2.h @@ -72,7 +72,7 @@ WPA2vParseRSN ( UINT WPA2uSetIEs( void *pMgmtHandle, - OUT PWLAN_IE_RSN pRSNIEs + PWLAN_IE_RSN pRSNIEs ); #endif // __WPA2_H__ -- cgit v0.10.2 From 97a0638218fc504d645c45ff03256dc4520efa72 Mon Sep 17 00:00:00 2001 From: Nitin Gupta Date: Thu, 13 May 2010 14:24:21 +0530 Subject: Staging: ramzswap: Remove backing swap support Currently, each ramzswap device can be assigned a separate 'backing swap' file/partition. The ramzswap driver forwards swap I/O requests to this backing swap whenever an incompressible page is found. This feature adds nearly 700 lines of code and it also duplicates much of the swapon() functionality (for example, finding swap extents and so on). Removing this code makes the driver much simpler and should help its transition from staging to stable drivers area (drivers/block/). Similar functionality may be implemented if we can implement migrating pages across swap devices but the details have not yet been worked out. Support for _partitions_ as backing swap could be retained as it requires a few lines of code only. This part can be re-introduced later if above swap migration method turns out to be infeasible. More cleanups and code comments will be added soon. Signed-off-by: Nitin Gupta Acked-by: Pekka Enberg Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/ramzswap/ramzswap_drv.c b/drivers/staging/ramzswap/ramzswap_drv.c index ee5eb12..167f8d1 100644 --- a/drivers/staging/ramzswap/ramzswap_drv.c +++ b/drivers/staging/ramzswap/ramzswap_drv.c @@ -36,13 +36,6 @@ static int ramzswap_major; static struct ramzswap *devices; -/* - * Pages that compress to larger than this size are - * forwarded to backing swap, if present or stored - * uncompressed in memory otherwise. - */ -static unsigned int max_zpage_size; - /* Module params (documentation at end) */ static unsigned int num_devices; @@ -79,52 +72,6 @@ static int page_zero_filled(void *ptr) return 1; } -/* - * memlimit cannot be greater than backing disk size. - */ -static void ramzswap_set_memlimit(struct ramzswap *rzs, size_t totalram_bytes) -{ - int memlimit_valid = 1; - - if (!rzs->memlimit) { - pr_info("Memory limit not set.\n"); - memlimit_valid = 0; - } - - if (rzs->memlimit > rzs->disksize) { - pr_info("Memory limit cannot be greater than " - "disksize: limit=%zu, disksize=%zu\n", - rzs->memlimit, rzs->disksize); - memlimit_valid = 0; - } - - if (!memlimit_valid) { - size_t mempart, disksize; - pr_info("Using default: smaller of (%u%% of RAM) and " - "(backing disk size).\n", - default_memlimit_perc_ram); - mempart = default_memlimit_perc_ram * (totalram_bytes / 100); - disksize = rzs->disksize; - rzs->memlimit = mempart > disksize ? disksize : mempart; - } - - if (rzs->memlimit > totalram_bytes / 2) { - pr_info( - "Its not advisable setting limit more than half of " - "size of memory since we expect a 2:1 compression ratio. " - "Limit represents amount of *compressed* data we can keep " - "in memory!\n" - "\tMemory Size: %zu kB\n" - "\tLimit you selected: %zu kB\n" - "Continuing anyway ...\n", - totalram_bytes >> 10, rzs->memlimit >> 10 - ); - } - - rzs->memlimit &= PAGE_MASK; - BUG_ON(!rzs->memlimit); -} - static void ramzswap_set_disksize(struct ramzswap *rzs, size_t totalram_bytes) { if (!rzs->disksize) { @@ -156,80 +103,22 @@ static void ramzswap_set_disksize(struct ramzswap *rzs, size_t totalram_bytes) /* * Swap header (1st page of swap device) contains information - * to indentify it as a swap partition. Prepare such a header - * for ramzswap device (ramzswap0) so that swapon can identify - * it as swap partition. In case backing swap device is provided, - * copy its swap header. + * about a swap file/partition. Prepare such a header for the + * given ramzswap device so that swapon can identify it as a + * swap partition. */ -static int setup_swap_header(struct ramzswap *rzs, union swap_header *s) +static void setup_swap_header(struct ramzswap *rzs, union swap_header *s) { - int ret = 0; - struct page *page; - struct address_space *mapping; - union swap_header *backing_swap_header; - - /* - * There is no backing swap device. Create a swap header - * that is acceptable by swapon. - */ - if (!rzs->backing_swap) { - s->info.version = 1; - s->info.last_page = (rzs->disksize >> PAGE_SHIFT) - 1; - s->info.nr_badpages = 0; - memcpy(s->magic.magic, "SWAPSPACE2", 10); - return 0; - } - - /* - * We have a backing swap device. Copy its swap header - * to ramzswap device header. If this header contains - * invalid information (backing device not a swap - * partition, etc.), swapon will fail for ramzswap - * which is correct behavior - we don't want to swap - * over filesystem partition! - */ - - /* Read the backing swap header (code from sys_swapon) */ - mapping = rzs->swap_file->f_mapping; - if (!mapping->a_ops->readpage) { - ret = -EINVAL; - goto out; - } - - page = read_mapping_page(mapping, 0, rzs->swap_file); - if (IS_ERR(page)) { - ret = PTR_ERR(page); - goto out; - } - - backing_swap_header = kmap(page); - memcpy(s, backing_swap_header, sizeof(*s)); - if (s->info.nr_badpages) { - pr_info("Cannot use backing swap with bad pages (%u)\n", - s->info.nr_badpages); - ret = -EINVAL; - } - /* - * ramzswap disksize equals number of usable pages in backing - * swap. Set last_page in swap header to match this disksize - * ('last_page' means 0-based index of last usable swap page). - */ + s->info.version = 1; s->info.last_page = (rzs->disksize >> PAGE_SHIFT) - 1; - kunmap(page); - -out: - return ret; + s->info.nr_badpages = 0; + memcpy(s->magic.magic, "SWAPSPACE2", 10); } static void ramzswap_ioctl_get_stats(struct ramzswap *rzs, struct ramzswap_ioctl_stats *s) { - strncpy(s->backing_swap_name, rzs->backing_swap_name, - MAX_SWAP_NAME_LEN - 1); - s->backing_swap_name[MAX_SWAP_NAME_LEN - 1] = '\0'; - s->disksize = rzs->disksize; - s->memlimit = rzs->memlimit; #if defined(CONFIG_RAMZSWAP_STATS) { @@ -265,333 +154,10 @@ static void ramzswap_ioctl_get_stats(struct ramzswap *rzs, s->orig_data_size = rs->pages_stored << PAGE_SHIFT; s->compr_data_size = rs->compr_size; s->mem_used_total = mem_used; - - s->bdev_num_reads = rzs_stat64_read(rzs, &rs->bdev_num_reads); - s->bdev_num_writes = rzs_stat64_read(rzs, &rs->bdev_num_writes); } #endif /* CONFIG_RAMZSWAP_STATS */ } -static int add_backing_swap_extent(struct ramzswap *rzs, - pgoff_t phy_pagenum, - pgoff_t num_pages) -{ - unsigned int idx; - struct list_head *head; - struct page *curr_page, *new_page; - unsigned int extents_per_page = PAGE_SIZE / - sizeof(struct ramzswap_backing_extent); - - idx = rzs->num_extents % extents_per_page; - if (!idx) { - new_page = alloc_page(__GFP_ZERO); - if (!new_page) - return -ENOMEM; - - if (rzs->num_extents) { - curr_page = virt_to_page(rzs->curr_extent); - head = &curr_page->lru; - } else { - head = &rzs->backing_swap_extent_list; - } - - list_add(&new_page->lru, head); - rzs->curr_extent = page_address(new_page); - } - - rzs->curr_extent->phy_pagenum = phy_pagenum; - rzs->curr_extent->num_pages = num_pages; - - pr_debug("add_extent: idx=%u, phy_pgnum=%lu, num_pgs=%lu, " - "pg_last=%lu, curr_ext=%p\n", idx, phy_pagenum, num_pages, - phy_pagenum + num_pages - 1, rzs->curr_extent); - - if (idx != extents_per_page - 1) - rzs->curr_extent++; - - return 0; -} - -static int setup_backing_swap_extents(struct ramzswap *rzs, - struct inode *inode, unsigned long *num_pages) -{ - int ret = 0; - unsigned blkbits; - unsigned blocks_per_page; - pgoff_t contig_pages = 0, total_pages = 0; - pgoff_t pagenum = 0, prev_pagenum = 0; - sector_t probe_block = 0; - sector_t last_block; - - blkbits = inode->i_blkbits; - blocks_per_page = PAGE_SIZE >> blkbits; - - last_block = i_size_read(inode) >> blkbits; - while (probe_block + blocks_per_page <= last_block) { - unsigned block_in_page; - sector_t first_block; - - first_block = bmap(inode, probe_block); - if (first_block == 0) - goto bad_bmap; - - /* It must be PAGE_SIZE aligned on-disk */ - if (first_block & (blocks_per_page - 1)) { - probe_block++; - goto probe_next; - } - - /* All blocks within this page must be contiguous on disk */ - for (block_in_page = 1; block_in_page < blocks_per_page; - block_in_page++) { - sector_t block; - - block = bmap(inode, probe_block + block_in_page); - if (block == 0) - goto bad_bmap; - if (block != first_block + block_in_page) { - /* Discontiguity */ - probe_block++; - goto probe_next; - } - } - - /* - * We found a PAGE_SIZE length, PAGE_SIZE aligned - * run of blocks. - */ - pagenum = first_block >> (PAGE_SHIFT - blkbits); - - if (total_pages && (pagenum != prev_pagenum + 1)) { - ret = add_backing_swap_extent(rzs, prev_pagenum - - (contig_pages - 1), contig_pages); - if (ret < 0) - goto out; - rzs->num_extents++; - contig_pages = 0; - } - total_pages++; - contig_pages++; - prev_pagenum = pagenum; - probe_block += blocks_per_page; - -probe_next: - continue; - } - - if (contig_pages) { - pr_debug("adding last extent: pagenum=%lu, " - "contig_pages=%lu\n", pagenum, contig_pages); - ret = add_backing_swap_extent(rzs, - prev_pagenum - (contig_pages - 1), contig_pages); - if (ret < 0) - goto out; - rzs->num_extents++; - } - if (!rzs->num_extents) { - pr_err("No swap extents found!\n"); - ret = -EINVAL; - } - - if (!ret) { - *num_pages = total_pages; - pr_info("Found %lu extents containing %luk\n", - rzs->num_extents, *num_pages << (PAGE_SHIFT - 10)); - } - goto out; - -bad_bmap: - pr_err("Backing swapfile has holes\n"); - ret = -EINVAL; -out: - while (ret && !list_empty(&rzs->backing_swap_extent_list)) { - struct page *page; - struct list_head *entry = rzs->backing_swap_extent_list.next; - page = list_entry(entry, struct page, lru); - list_del(entry); - __free_page(page); - } - return ret; -} - -static void map_backing_swap_extents(struct ramzswap *rzs) -{ - struct ramzswap_backing_extent *se; - struct page *table_page, *se_page; - unsigned long num_pages, num_table_pages, entry; - unsigned long se_idx, span; - unsigned entries_per_page = PAGE_SIZE / sizeof(*rzs->table); - unsigned extents_per_page = PAGE_SIZE / sizeof(*se); - - /* True for block device */ - if (!rzs->num_extents) - return; - - se_page = list_entry(rzs->backing_swap_extent_list.next, - struct page, lru); - se = page_address(se_page); - span = se->num_pages; - num_pages = rzs->disksize >> PAGE_SHIFT; - num_table_pages = DIV_ROUND_UP(num_pages * sizeof(*rzs->table), - PAGE_SIZE); - - entry = 0; - se_idx = 0; - while (num_table_pages--) { - table_page = vmalloc_to_page(&rzs->table[entry]); - while (span <= entry) { - se_idx++; - if (se_idx == rzs->num_extents) - BUG(); - - if (!(se_idx % extents_per_page)) { - se_page = list_entry(se_page->lru.next, - struct page, lru); - se = page_address(se_page); - } else - se++; - - span += se->num_pages; - } - table_page->mapping = (struct address_space *)se; - table_page->private = se->num_pages - (span - entry); - pr_debug("map_table: entry=%lu, span=%lu, map=%p, priv=%lu\n", - entry, span, table_page->mapping, table_page->private); - entry += entries_per_page; - } -} - -/* - * Check if value of backing_swap module param is sane. - * Claim this device and set ramzswap size equal to - * size of this block device. - */ -static int setup_backing_swap(struct ramzswap *rzs) -{ - int ret = 0; - size_t disksize; - unsigned long num_pages = 0; - struct inode *inode; - struct file *swap_file; - struct address_space *mapping; - struct block_device *bdev = NULL; - - if (!rzs->backing_swap_name[0]) { - pr_debug("backing_swap param not given\n"); - goto out; - } - - pr_info("Using backing swap device: %s\n", rzs->backing_swap_name); - - swap_file = filp_open(rzs->backing_swap_name, - O_RDWR | O_LARGEFILE, 0); - if (IS_ERR(swap_file)) { - pr_err("Error opening backing device: %s\n", - rzs->backing_swap_name); - ret = -EINVAL; - goto out; - } - - mapping = swap_file->f_mapping; - inode = mapping->host; - - if (S_ISBLK(inode->i_mode)) { - bdev = I_BDEV(inode); - ret = bd_claim(bdev, setup_backing_swap); - if (ret < 0) { - bdev = NULL; - goto bad_param; - } - disksize = i_size_read(inode); - /* - * Can happen if user gives an extended partition as - * backing swap or simply a bad disk. - */ - if (!disksize) { - pr_err("Error reading backing swap size.\n"); - goto bad_param; - } - } else if (S_ISREG(inode->i_mode)) { - bdev = inode->i_sb->s_bdev; - if (IS_SWAPFILE(inode)) { - ret = -EBUSY; - goto bad_param; - } - ret = setup_backing_swap_extents(rzs, inode, &num_pages); - if (ret < 0) - goto bad_param; - disksize = num_pages << PAGE_SHIFT; - } else { - goto bad_param; - } - - rzs->swap_file = swap_file; - rzs->backing_swap = bdev; - rzs->disksize = disksize; - - return 0; - -bad_param: - if (bdev) - bd_release(bdev); - filp_close(swap_file, NULL); - -out: - rzs->backing_swap = NULL; - return ret; -} - -/* - * Map logical page number 'pagenum' to physical page number - * on backing swap device. For block device, this is a nop. - */ -static u32 map_backing_swap_page(struct ramzswap *rzs, u32 pagenum) -{ - u32 skip_pages, entries_per_page; - size_t delta, se_offset, skipped; - struct page *table_page, *se_page; - struct ramzswap_backing_extent *se; - - if (!rzs->num_extents) - return pagenum; - - entries_per_page = PAGE_SIZE / sizeof(*rzs->table); - - table_page = vmalloc_to_page(&rzs->table[pagenum]); - se = (struct ramzswap_backing_extent *)table_page->mapping; - se_page = virt_to_page(se); - - skip_pages = pagenum - (pagenum / entries_per_page * entries_per_page); - se_offset = table_page->private + skip_pages; - - if (se_offset < se->num_pages) - return se->phy_pagenum + se_offset; - - skipped = se->num_pages - table_page->private; - do { - struct ramzswap_backing_extent *se_base; - u32 se_entries_per_page = PAGE_SIZE / sizeof(*se); - - /* Get next swap extent */ - se_base = (struct ramzswap_backing_extent *) - page_address(se_page); - if (se - se_base == se_entries_per_page - 1) { - se_page = list_entry(se_page->lru.next, - struct page, lru); - se = page_address(se_page); - } else { - se++; - } - - skipped += se->num_pages; - } while (skipped < skip_pages); - - delta = skipped - skip_pages; - se_offset = se->num_pages - delta; - - return se->phy_pagenum + se_offset; -} - static void ramzswap_free_page(struct ramzswap *rzs, size_t index) { u32 clen; @@ -678,38 +244,12 @@ static int handle_uncompressed_page(struct ramzswap *rzs, struct bio *bio) /* * Called when request page is not present in ramzswap. - * Its either in backing swap device (if present) or - * this is an attempt to read before any previous write + * This is an attempt to read before any previous write * to this location - this happens due to readahead when * swap device is read from user-space (e.g. during swapon) */ static int handle_ramzswap_fault(struct ramzswap *rzs, struct bio *bio) { - /* - * Always forward such requests to backing swap - * device (if present) - */ - if (rzs->backing_swap) { - u32 pagenum; - rzs_stat64_dec(rzs, &rzs->stats.num_reads); - rzs_stat64_inc(rzs, &rzs->stats.bdev_num_reads); - bio->bi_bdev = rzs->backing_swap; - - /* - * In case backing swap is a file, find the right offset within - * the file corresponding to logical position 'index'. For block - * device, this is a nop. - */ - pagenum = bio->bi_sector >> SECTORS_PER_PAGE_SHIFT; - bio->bi_sector = map_backing_swap_page(rzs, pagenum) - << SECTORS_PER_PAGE_SHIFT; - return 1; - } - - /* - * Its unlikely event in case backing dev is - * not present - */ pr_debug("Read before write on swap device: " "sector=%lu, size=%u, offset=%u\n", (ulong)(bio->bi_sector), bio->bi_size, @@ -781,7 +321,7 @@ out: static int ramzswap_write(struct ramzswap *rzs, struct bio *bio) { - int ret, fwd_write_request = 0; + int ret; u32 offset, index; size_t clen; struct zobj_header *zheader; @@ -817,14 +357,6 @@ static int ramzswap_write(struct ramzswap *rzs, struct bio *bio) return 0; } - if (rzs->backing_swap && - (rzs->stats.compr_size > rzs->memlimit - PAGE_SIZE)) { - kunmap_atomic(user_mem, KM_USER0); - mutex_unlock(&rzs->lock); - fwd_write_request = 1; - goto out; - } - ret = lzo1x_1_compress(user_mem, PAGE_SIZE, src, &clen, rzs->compress_workmem); @@ -838,18 +370,11 @@ static int ramzswap_write(struct ramzswap *rzs, struct bio *bio) } /* - * Page is incompressible. Forward it to backing swap - * if present. Otherwise, store it as-is (uncompressed) + * Page is incompressible. Store it as-is (uncompressed) * since we do not want to return too many swap write * errors which has side effect of hanging the system. */ if (unlikely(clen > max_zpage_size)) { - if (rzs->backing_swap) { - mutex_unlock(&rzs->lock); - fwd_write_request = 1; - goto out; - } - clen = PAGE_SIZE; page_store = alloc_page(GFP_NOIO | __GFP_HIGHMEM); if (unlikely(!page_store)) { @@ -875,8 +400,6 @@ static int ramzswap_write(struct ramzswap *rzs, struct bio *bio) pr_info("Error allocating memory for compressed " "page: %u, size=%zu\n", index, clen); rzs_stat64_inc(rzs, &rzs->stats.failed_writes); - if (rzs->backing_swap) - fwd_write_request = 1; goto out; } @@ -914,31 +437,6 @@ memstore: return 0; out: - if (fwd_write_request) { - rzs_stat64_inc(rzs, &rzs->stats.bdev_num_writes); - bio->bi_bdev = rzs->backing_swap; -#if 0 - /* - * TODO: We currently have linear mapping of ramzswap and - * backing swap sectors. This is not desired since we want - * to optimize writes to backing swap to minimize disk seeks - * or have effective wear leveling (for SSDs). Also, a - * non-linear mapping is required to implement compressed - * on-disk swapping. - */ - bio->bi_sector = get_backing_swap_page() - << SECTORS_PER_PAGE_SHIFT; -#endif - /* - * In case backing swap is a file, find the right offset within - * the file corresponding to logical position 'index'. For block - * device, this is a nop. - */ - bio->bi_sector = map_backing_swap_page(rzs, index) - << SECTORS_PER_PAGE_SHIFT; - return 1; - } - bio_io_error(bio); return 0; } @@ -996,19 +494,11 @@ static int ramzswap_make_request(struct request_queue *queue, struct bio *bio) static void reset_device(struct ramzswap *rzs) { - int is_backing_blkdev = 0; - size_t index, num_pages; - unsigned entries_per_page; - unsigned long num_table_pages, entry = 0; + size_t index; /* Do not accept any new I/O request */ rzs->init_done = 0; - if (rzs->backing_swap && !rzs->num_extents) - is_backing_blkdev = 1; - - num_pages = rzs->disksize >> PAGE_SHIFT; - /* Free various per-device buffers */ kfree(rzs->compress_workmem); free_pages((unsigned long)rzs->compress_buffer, 1); @@ -1017,7 +507,7 @@ static void reset_device(struct ramzswap *rzs) rzs->compress_buffer = NULL; /* Free all pages that are still in this ramzswap device */ - for (index = 0; index < num_pages; index++) { + for (index = 0; index < rzs->disksize >> PAGE_SHIFT; index++) { struct page *page; u16 offset; @@ -1033,51 +523,16 @@ static void reset_device(struct ramzswap *rzs) xv_free(rzs->mem_pool, page, offset); } - entries_per_page = PAGE_SIZE / sizeof(*rzs->table); - num_table_pages = DIV_ROUND_UP(num_pages * sizeof(*rzs->table), - PAGE_SIZE); - /* - * Set page->mapping to NULL for every table page. - * Otherwise, we will hit bad_page() during free. - */ - while (rzs->num_extents && num_table_pages--) { - struct page *page; - page = vmalloc_to_page(&rzs->table[entry]); - page->mapping = NULL; - entry += entries_per_page; - } vfree(rzs->table); rzs->table = NULL; xv_destroy_pool(rzs->mem_pool); rzs->mem_pool = NULL; - /* Free all swap extent pages */ - while (!list_empty(&rzs->backing_swap_extent_list)) { - struct page *page; - struct list_head *entry; - entry = rzs->backing_swap_extent_list.next; - page = list_entry(entry, struct page, lru); - list_del(entry); - __free_page(page); - } - INIT_LIST_HEAD(&rzs->backing_swap_extent_list); - rzs->num_extents = 0; - - /* Close backing swap device, if present */ - if (rzs->backing_swap) { - if (is_backing_blkdev) - bd_release(rzs->backing_swap); - filp_close(rzs->swap_file, NULL); - rzs->backing_swap = NULL; - memset(rzs->backing_swap_name, 0, MAX_SWAP_NAME_LEN); - } - /* Reset stats */ memset(&rzs->stats, 0, sizeof(rzs->stats)); rzs->disksize = 0; - rzs->memlimit = 0; } static int ramzswap_ioctl_init_device(struct ramzswap *rzs) @@ -1092,14 +547,7 @@ static int ramzswap_ioctl_init_device(struct ramzswap *rzs) return -EBUSY; } - ret = setup_backing_swap(rzs); - if (ret) - goto fail; - - if (rzs->backing_swap) - ramzswap_set_memlimit(rzs, totalram_pages << PAGE_SHIFT); - else - ramzswap_set_disksize(rzs, totalram_pages << PAGE_SHIFT); + ramzswap_set_disksize(rzs, totalram_pages << PAGE_SHIFT); rzs->compress_workmem = kzalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL); if (!rzs->compress_workmem) { @@ -1126,8 +574,6 @@ static int ramzswap_ioctl_init_device(struct ramzswap *rzs) } memset(rzs->table, 0, num_pages * sizeof(*rzs->table)); - map_backing_swap_extents(rzs); - page = alloc_page(__GFP_ZERO); if (!page) { pr_err("Error allocating swap header page\n"); @@ -1138,23 +584,13 @@ static int ramzswap_ioctl_init_device(struct ramzswap *rzs) rzs_set_flag(rzs, 0, RZS_UNCOMPRESSED); swap_header = kmap(page); - ret = setup_swap_header(rzs, swap_header); + setup_swap_header(rzs, swap_header); kunmap(page); - if (ret) { - pr_err("Error setting swap header\n"); - goto fail; - } set_capacity(rzs->disk, rzs->disksize >> SECTOR_SHIFT); - /* - * We have ident mapping of sectors for ramzswap and - * and the backing swap device. So, this queue flag - * should be according to backing dev. - */ - if (!rzs->backing_swap || - blk_queue_nonrot(rzs->backing_swap->bd_disk->queue)) - queue_flag_set_unlocked(QUEUE_FLAG_NONROT, rzs->disk->queue); + /* ramzswap devices sort of resembles non-rotational disks */ + queue_flag_set_unlocked(QUEUE_FLAG_NONROT, rzs->disk->queue); rzs->mem_pool = xv_create_pool(); if (!rzs->mem_pool) { @@ -1163,17 +599,6 @@ static int ramzswap_ioctl_init_device(struct ramzswap *rzs) goto fail; } - /* - * Pages that compress to size greater than this are forwarded - * to physical swap disk (if backing dev is provided) - * TODO: make this configurable - */ - if (rzs->backing_swap) - max_zpage_size = max_zpage_size_bdev; - else - max_zpage_size = max_zpage_size_nobdev; - pr_debug("Max compressed page size: %u bytes\n", max_zpage_size); - rzs->init_done = 1; pr_debug("Initialization done!\n"); @@ -1198,7 +623,7 @@ static int ramzswap_ioctl(struct block_device *bdev, fmode_t mode, unsigned int cmd, unsigned long arg) { int ret = 0; - size_t disksize_kb, memlimit_kb; + size_t disksize_kb; struct ramzswap *rzs = bdev->bd_disk->private_data; @@ -1217,36 +642,6 @@ static int ramzswap_ioctl(struct block_device *bdev, fmode_t mode, pr_info("Disk size set to %zu kB\n", disksize_kb); break; - case RZSIO_SET_MEMLIMIT_KB: - if (rzs->init_done) { - /* TODO: allow changing memlimit */ - ret = -EBUSY; - goto out; - } - if (copy_from_user(&memlimit_kb, (void *)arg, - _IOC_SIZE(cmd))) { - ret = -EFAULT; - goto out; - } - rzs->memlimit = memlimit_kb << 10; - pr_info("Memory limit set to %zu kB\n", memlimit_kb); - break; - - case RZSIO_SET_BACKING_SWAP: - if (rzs->init_done) { - ret = -EBUSY; - goto out; - } - - if (copy_from_user(&rzs->backing_swap_name, (void *)arg, - _IOC_SIZE(cmd))) { - ret = -EFAULT; - goto out; - } - rzs->backing_swap_name[MAX_SWAP_NAME_LEN - 1] = '\0'; - pr_info("Backing swap set to %s\n", rzs->backing_swap_name); - break; - case RZSIO_GET_STATS: { struct ramzswap_ioctl_stats *stats; @@ -1306,7 +701,6 @@ static int create_device(struct ramzswap *rzs, int device_id) mutex_init(&rzs->lock); spin_lock_init(&rzs->stat64_lock); - INIT_LIST_HEAD(&rzs->backing_swap_extent_list); rzs->queue = blk_alloc_queue(GFP_KERNEL); if (!rzs->queue) { @@ -1336,10 +730,7 @@ static int create_device(struct ramzswap *rzs, int device_id) rzs->disk->private_data = rzs; snprintf(rzs->disk->disk_name, 16, "ramzswap%d", device_id); - /* - * Actual capacity set using RZSIO_SET_DISKSIZE_KB ioctl - * or set equal to backing swap device (if provided) - */ + /* Actual capacity set using RZSIO_SET_DISKSIZE_KB ioctl */ set_capacity(rzs->disk, 0); blk_queue_physical_block_size(rzs->disk->queue, PAGE_SIZE); diff --git a/drivers/staging/ramzswap/ramzswap_drv.h b/drivers/staging/ramzswap/ramzswap_drv.h index c7e0e76..63c3042 100644 --- a/drivers/staging/ramzswap/ramzswap_drv.h +++ b/drivers/staging/ramzswap/ramzswap_drv.h @@ -31,8 +31,7 @@ static const unsigned max_num_devices = 32; * Stored at beginning of each compressed object. * * It stores back-reference to table entry which points to this - * object. This is required to support memory defragmentation or - * migrating compressed pages to backing swap disk. + * object. This is required to support memory defragmentation. */ struct zobj_header { #if 0 @@ -44,27 +43,17 @@ struct zobj_header { /* Default ramzswap disk size: 25% of total RAM */ static const unsigned default_disksize_perc_ram = 25; -static const unsigned default_memlimit_perc_ram = 15; /* - * Max compressed page size when backing device is provided. - * Pages that compress to size greater than this are sent to - * physical swap disk. - */ -static const unsigned max_zpage_size_bdev = PAGE_SIZE / 2; - -/* - * Max compressed page size when there is no backing dev. * Pages that compress to size greater than this are stored * uncompressed in memory. */ -static const unsigned max_zpage_size_nobdev = PAGE_SIZE / 4 * 3; +static const unsigned max_zpage_size = PAGE_SIZE / 4 * 3; /* - * NOTE: max_zpage_size_{bdev,nobdev} sizes must be - * less than or equal to: + * NOTE: max_zpage_size must be less than or equal to: * XV_MAX_ALLOC_SIZE - sizeof(struct zobj_header) - * since otherwise xv_malloc would always return failure. + * otherwise, xv_malloc() would always return failure. */ /*-- End of configurable params */ @@ -98,15 +87,6 @@ struct table { u8 flags; } __attribute__((aligned(4))); -/* - * Swap extent information in case backing swap is a regular - * file. These extent entries must fit exactly in a page. - */ -struct ramzswap_backing_extent { - pgoff_t phy_pagenum; - pgoff_t num_pages; -} __attribute__((aligned(4))); - struct ramzswap_stats { /* basic stats */ size_t compr_size; /* compressed size of pages stored - @@ -123,8 +103,6 @@ struct ramzswap_stats { u32 pages_stored; /* no. of pages currently stored */ u32 good_compress; /* % of pages with compression ratio<=50% */ u32 pages_expand; /* % of incompressible pages */ - u64 bdev_num_reads; /* no. of reads on backing dev */ - u64 bdev_num_writes; /* no. of writes on backing dev */ #endif }; @@ -139,11 +117,6 @@ struct ramzswap { struct gendisk *disk; int init_done; /* - * This is limit on compressed data size (stats.compr_size) - * Its applicable only when backing swap device is present. - */ - size_t memlimit; /* bytes */ - /* * This is limit on amount of *uncompressed* worth of data * we can hold. When backing swap device is provided, it is * set equal to device size. @@ -151,14 +124,6 @@ struct ramzswap { size_t disksize; /* bytes */ struct ramzswap_stats stats; - - /* backing swap device info */ - struct ramzswap_backing_extent *curr_extent; - struct list_head backing_swap_extent_list; - unsigned long num_extents; - char backing_swap_name[MAX_SWAP_NAME_LEN]; - struct block_device *backing_swap; - struct file *swap_file; }; /*-- */ @@ -182,13 +147,6 @@ static void rzs_stat64_inc(struct ramzswap *rzs, u64 *v) spin_unlock(&rzs->stat64_lock); } -static void rzs_stat64_dec(struct ramzswap *rzs, u64 *v) -{ - spin_lock(&rzs->stat64_lock); - *v = *v - 1; - spin_unlock(&rzs->stat64_lock); -} - static u64 rzs_stat64_read(struct ramzswap *rzs, u64 *v) { u64 val; @@ -203,7 +161,6 @@ static u64 rzs_stat64_read(struct ramzswap *rzs, u64 *v) #define rzs_stat_inc(v) #define rzs_stat_dec(v) #define rzs_stat64_inc(r, v) -#define rzs_stat64_dec(r, v) #define rzs_stat64_read(r, v) #endif /* CONFIG_RAMZSWAP_STATS */ diff --git a/drivers/staging/ramzswap/ramzswap_ioctl.h b/drivers/staging/ramzswap/ramzswap_ioctl.h index d26076d..db94bcb 100644 --- a/drivers/staging/ramzswap/ramzswap_ioctl.h +++ b/drivers/staging/ramzswap/ramzswap_ioctl.h @@ -15,11 +15,7 @@ #ifndef _RAMZSWAP_IOCTL_H_ #define _RAMZSWAP_IOCTL_H_ -#define MAX_SWAP_NAME_LEN 128 - struct ramzswap_ioctl_stats { - char backing_swap_name[MAX_SWAP_NAME_LEN]; - u64 memlimit; /* only applicable if backing swap present */ u64 disksize; /* user specified or equal to backing swap * size (if present) */ u64 num_reads; /* failed + successful */ @@ -36,15 +32,11 @@ struct ramzswap_ioctl_stats { u64 orig_data_size; u64 compr_data_size; u64 mem_used_total; - u64 bdev_num_reads; /* no. of reads on backing dev */ - u64 bdev_num_writes; /* no. of writes on backing dev */ } __attribute__ ((packed, aligned(4))); #define RZSIO_SET_DISKSIZE_KB _IOW('z', 0, size_t) -#define RZSIO_SET_MEMLIMIT_KB _IOW('z', 1, size_t) -#define RZSIO_SET_BACKING_SWAP _IOW('z', 2, unsigned char[MAX_SWAP_NAME_LEN]) -#define RZSIO_GET_STATS _IOR('z', 3, struct ramzswap_ioctl_stats) -#define RZSIO_INIT _IO('z', 4) -#define RZSIO_RESET _IO('z', 5) +#define RZSIO_GET_STATS _IOR('z', 1, struct ramzswap_ioctl_stats) +#define RZSIO_INIT _IO('z', 2) +#define RZSIO_RESET _IO('z', 3) #endif -- cgit v0.10.2 From 93822ad193f1b1d92422dc3d539456acbe1a85ef Mon Sep 17 00:00:00 2001 From: Henk de Groot Date: Thu, 13 May 2010 16:27:33 +0200 Subject: Staging: wlags49_hs2: Fix wlags49_hs2 driver after build fixes broke it Fixes the driver after merge into the 2.6.34 kernel. Driver should be functional again (a fix to make it compile broke the driver). Patch against 2.6.34 RC7 with patch-v2.6.34-rc7-next-20100513 already applied. Removed conditional code based on kernel version, this is pointless now the driver is part of the kernel. Also removed obsolte code left over from previous patches. Includes also small fixes to compile clean again. Signed-off-by: Henk de Groot Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlags49_h2/dhf.c b/drivers/staging/wlags49_h2/dhf.c index 80a4707..bb80b54 100644 --- a/drivers/staging/wlags49_h2/dhf.c +++ b/drivers/staging/wlags49_h2/dhf.c @@ -109,20 +109,6 @@ /* 12345678901234 */ char signature[14] = "FUPU7D37dhfwci"; -/* The binary download function "relocates" the image using constructions like: - fw->identity = (CFG_IDENTITY_STRCT FAR *)((char FAR *)fw->identity + (hcf_32)fw ); - under some of the memory models under MSVC 1.52 these constructions degrade to 16-bits pointer arithmetic. - fw->identity is limited, such that adding it to fw, does not need to carry over from offset to segment. - However the segment is not set at all. - As a workaround the PSEUDO_CHARP macro is introduced which is a char pointer except for MSVC 1.52, in - which case we know that a 32-bit quantity is adequate as a pointer. - Note that other platforms may experience comparable problems when using the binary download feature. */ -#if defined(_MSC_VER) && _MSC_VER == 800 /* Visual C++ 1.5 */ -#define PSEUDO_CHARP hcf_32 -#else -#define PSEUDO_CHARP (hcf_8 *) -#endif - /*----------------------------------------------------------------------------- * * LTV-records retrieved from the NIC to: diff --git a/drivers/staging/wlags49_h2/wl_cs.c b/drivers/staging/wlags49_h2/wl_cs.c index 7c33ead..568993f 100644 --- a/drivers/staging/wlags49_h2/wl_cs.c +++ b/drivers/staging/wlags49_h2/wl_cs.c @@ -105,13 +105,6 @@ /******************************************************************************* - * macro definitions - ******************************************************************************/ -#define CS_CHECK(fn, ret) do { \ - last_fn = (fn); if ((last_ret = (ret)) != 0) goto cs_failed; \ - } while (0) - -/******************************************************************************* * global definitions ******************************************************************************/ #if DBG @@ -305,7 +298,7 @@ void wl_adapter_insert( struct pcmcia_device *link ) { struct net_device *dev; int i; - int last_fn, last_ret; + int ret; /*------------------------------------------------------------------------*/ DBG_FUNC( "wl_adapter_insert" ); @@ -317,10 +310,17 @@ void wl_adapter_insert( struct pcmcia_device *link ) /* Do we need to allocate an interrupt? */ link->conf.Attributes |= CONF_ENABLE_IRQ; -// CS_CHECK(RequestIO, pcmcia_request_io(link, &link->io)); -// CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); -// CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); + ret = pcmcia_request_io(link, &link->io); + if (ret != 0) + goto failed; + + ret = pcmcia_request_irq(link, (void *) wl_isr); + if (ret != 0) + goto failed; + ret = pcmcia_request_configuration(link, &link->conf); + if (ret != 0) + goto failed; dev->irq = link->irq.AssignedIRQ; dev->base_addr = link->io.BasePort1; @@ -330,8 +330,7 @@ void wl_adapter_insert( struct pcmcia_device *link ) printk("%s: register_netdev() failed\n", MODULE_NAME); goto failed; } - link->dev_node = &( wl_priv(dev) )->node; - strcpy(( wl_priv(dev) )->node.dev_name, dev->name); + register_wlags_sysfs(dev); printk(KERN_INFO "%s: Wireless, io_addr %#03lx, irq %d, ""mac_address ", @@ -343,11 +342,6 @@ void wl_adapter_insert( struct pcmcia_device *link ) DBG_LEAVE( DbgInfo ); return; - -cs_failed: -// cs_error( link, last_fn, last_ret ); - - failed: wl_adapter_release( link ); diff --git a/drivers/staging/wlags49_h2/wl_cs.h b/drivers/staging/wlags49_h2/wl_cs.h index 2a0e674..a9b8828 100644 --- a/drivers/staging/wlags49_h2/wl_cs.h +++ b/drivers/staging/wlags49_h2/wl_cs.h @@ -84,10 +84,6 @@ int wl_adapter_close(struct net_device *dev); int wl_adapter_is_open(struct net_device *dev); -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) -void cs_error(client_handle_t handle, int func, int ret); -#endif - const char *DbgEvent( int mask ); diff --git a/drivers/staging/wlags49_h2/wl_internal.h b/drivers/staging/wlags49_h2/wl_internal.h index 466fb62..d9a0ad0 100644 --- a/drivers/staging/wlags49_h2/wl_internal.h +++ b/drivers/staging/wlags49_h2/wl_internal.h @@ -69,9 +69,6 @@ ******************************************************************************/ #include #ifdef BUS_PCMCIA -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) -#include -#endif #include #include #include @@ -866,7 +863,6 @@ struct wl_private { #ifdef BUS_PCMCIA - dev_node_t node; struct pcmcia_device *link; #endif // BUS_PCMCIA @@ -1013,13 +1009,13 @@ extern inline struct wl_private *wl_priv(struct net_device *dev) * SPARC, due to its weird semantics for save/restore flags. extern * inline should prevent the kernel from linking or module from * loading if they are not inlined. */ -extern inline void wl_lock(struct wl_private *lp, +static inline void wl_lock(struct wl_private *lp, unsigned long *flags) { spin_lock_irqsave(&lp->slock, *flags); } -extern inline void wl_unlock(struct wl_private *lp, +static inline void wl_unlock(struct wl_private *lp, unsigned long *flags) { spin_unlock_irqrestore(&lp->slock, *flags); diff --git a/drivers/staging/wlags49_h2/wl_netdev.c b/drivers/staging/wlags49_h2/wl_netdev.c index 1cfaee3..91fd309 100644 --- a/drivers/staging/wlags49_h2/wl_netdev.c +++ b/drivers/staging/wlags49_h2/wl_netdev.c @@ -463,15 +463,10 @@ static void wl_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) // strncpy(info.fw_version, priv->fw_name, // sizeof(info.fw_version) - 1); -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,20)) if (dev->dev.parent) { dev_set_name(dev->dev.parent, "%s", info->bus_info); //strncpy(info->bus_info, dev->dev.parent->bus_id, // sizeof(info->bus_info) - 1); -#else - if (dev->class_dev.parent) { - sizeof(info->bus_info) - 1); -#endif } else { snprintf(info->bus_info, sizeof(info->bus_info) - 1, "PCMCIA FIXME"); @@ -1179,7 +1174,6 @@ void wl_multicast( struct net_device *dev, int num_addrs, void *addrs ) #endif /* NEW_MULTICAST */ -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30)) static const struct net_device_ops wl_netdev_ops = { .ndo_start_xmit = &wl_tx_port0, @@ -1199,7 +1193,6 @@ static const struct net_device_ops wl_netdev_ops = .ndo_poll_controller = wl_poll, #endif }; -#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30)) /******************************************************************************* * wl_device_alloc() @@ -1253,27 +1246,7 @@ struct net_device * wl_device_alloc( void ) lp->wireless_data.spy_data = &lp->spy_data; dev->wireless_data = &lp->wireless_data; -#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30)) dev->netdev_ops = &wl_netdev_ops; -#else - dev->hard_start_xmit = &wl_tx_port0; - - dev->set_config = &wl_config; - dev->get_stats = &wl_stats; - dev->set_multicast_list = &wl_multicast; - - dev->init = &wl_insert; - dev->open = &wl_adapter_open; - dev->stop = &wl_adapter_close; - dev->do_ioctl = &wl_ioctl; - - dev->tx_timeout = &wl_tx_timeout; - -#ifdef CONFIG_NET_POLL_CONTROLLER - dev->poll_controller = wl_poll; -#endif - -#endif // (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30)) dev->watchdog_timeo = TX_TIMEOUT; diff --git a/drivers/staging/wlags49_h2/wl_wext.c b/drivers/staging/wlags49_h2/wl_wext.c index 311d3c5..06467f1 100644 --- a/drivers/staging/wlags49_h2/wl_wext.c +++ b/drivers/staging/wlags49_h2/wl_wext.c @@ -82,17 +82,10 @@ in the build. */ #ifdef WIRELESS_EXT -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27) -#define IWE_STREAM_ADD_EVENT(info, buf, end, iwe, len) \ - iwe_stream_add_event(buf, end, iwe, len) -#define IWE_STREAM_ADD_POINT(info, buf, end, iwe, msg) \ - iwe_stream_add_point(buf, end, iwe, msg) -#else #define IWE_STREAM_ADD_EVENT(info, buf, end, iwe, len) \ iwe_stream_add_event(info, buf, end, iwe, len) #define IWE_STREAM_ADD_POINT(info, buf, end, iwe, msg) \ iwe_stream_add_point(info, buf, end, iwe, msg) -#endif -- cgit v0.10.2 From 21fe2eea6381845956322e63e441f351774de7f9 Mon Sep 17 00:00:00 2001 From: Mark Date: Thu, 13 May 2010 17:44:39 +0800 Subject: Staging: comedi: Fix long line lengths in comedi_fops.c This patch fixes lots of long line lengths in comedi_fops.c found by checkpatch.pl Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi_fops.c b/drivers/staging/comedi/comedi_fops.c index e7095d7..aced00e 100644 --- a/drivers/staging/comedi/comedi_fops.c +++ b/drivers/staging/comedi/comedi_fops.c @@ -952,8 +952,9 @@ static int do_insn_ioctl(struct comedi_device *dev, if (insn.n > MAX_SAMPLES) insn.n = MAX_SAMPLES; if (insn.insn & INSN_MASK_WRITE) { - if (copy_from_user - (data, insn.data, insn.n * sizeof(unsigned int))) { + if (copy_from_user(data, + insn.data, + insn.n * sizeof(unsigned int))) { ret = -EFAULT; goto error; } @@ -962,7 +963,9 @@ static int do_insn_ioctl(struct comedi_device *dev, if (ret < 0) goto error; if (insn.insn & INSN_MASK_READ) { - if (copy_to_user(insn.data, data, insn.n * sizeof(unsigned int))) { + if (copy_to_user(insn.data, + data, + insn.n * sizeof(unsigned int))) { ret = -EFAULT; goto error; } @@ -1070,7 +1073,9 @@ static int do_cmd_ioctl(struct comedi_device *dev, } /* make sure each element in channel/gain list is valid */ - ret = comedi_check_chanlist(s, async->cmd.chanlist_len, async->cmd.chanlist); + ret = comedi_check_chanlist(s, + async->cmd.chanlist_len, + async->cmd.chanlist); if (ret < 0) { DPRINTK("bad chanlist\n"); goto cleanup; @@ -2119,8 +2124,8 @@ int comedi_alloc_board_minor(struct device *hardware_device) kfree(info->device); kfree(info); printk(KERN_ERR - - "comedi: error: ran out of minor numbers for board device files.\n"); + "comedi: error: " + "ran out of minor numbers for board device files.\n"); return -EBUSY; } info->device->minor = i; @@ -2133,7 +2138,8 @@ int comedi_alloc_board_minor(struct device *hardware_device) retval = device_create_file(csdev, &dev_attr_max_read_buffer_kb); if (retval) { printk(KERN_ERR - "comedi: failed to create sysfs attribute file \"%s\".\n", + "comedi: " + "failed to create sysfs attribute file \"%s\".\n", dev_attr_max_read_buffer_kb.attr.name); comedi_free_board_minor(i); return retval; @@ -2141,7 +2147,8 @@ int comedi_alloc_board_minor(struct device *hardware_device) retval = device_create_file(csdev, &dev_attr_read_buffer_kb); if (retval) { printk(KERN_ERR - "comedi: failed to create sysfs attribute file \"%s\".\n", + "comedi: " + "failed to create sysfs attribute file \"%s\".\n", dev_attr_read_buffer_kb.attr.name); comedi_free_board_minor(i); return retval; @@ -2149,7 +2156,8 @@ int comedi_alloc_board_minor(struct device *hardware_device) retval = device_create_file(csdev, &dev_attr_max_write_buffer_kb); if (retval) { printk(KERN_ERR - "comedi: failed to create sysfs attribute file \"%s\".\n", + "comedi: " + "failed to create sysfs attribute file \"%s\".\n", dev_attr_max_write_buffer_kb.attr.name); comedi_free_board_minor(i); return retval; @@ -2157,7 +2165,8 @@ int comedi_alloc_board_minor(struct device *hardware_device) retval = device_create_file(csdev, &dev_attr_write_buffer_kb); if (retval) { printk(KERN_ERR - "comedi: failed to create sysfs attribute file \"%s\".\n", + "comedi: " + "failed to create sysfs attribute file \"%s\".\n", dev_attr_write_buffer_kb.attr.name); comedi_free_board_minor(i); return retval; @@ -2216,7 +2225,8 @@ int comedi_alloc_subdevice_minor(struct comedi_device *dev, if (i == COMEDI_NUM_MINORS) { kfree(info); printk(KERN_ERR - "comedi: error: ran out of minor numbers for board device files.\n"); + "comedi: error: " + "ran out of minor numbers for board device files.\n"); return -EBUSY; } s->minor = i; @@ -2230,7 +2240,8 @@ int comedi_alloc_subdevice_minor(struct comedi_device *dev, retval = device_create_file(csdev, &dev_attr_max_read_buffer_kb); if (retval) { printk(KERN_ERR - "comedi: failed to create sysfs attribute file \"%s\".\n", + "comedi: " + "failed to create sysfs attribute file \"%s\".\n", dev_attr_max_read_buffer_kb.attr.name); comedi_free_subdevice_minor(s); return retval; @@ -2238,7 +2249,8 @@ int comedi_alloc_subdevice_minor(struct comedi_device *dev, retval = device_create_file(csdev, &dev_attr_read_buffer_kb); if (retval) { printk(KERN_ERR - "comedi: failed to create sysfs attribute file \"%s\".\n", + "comedi: " + "failed to create sysfs attribute file \"%s\".\n", dev_attr_read_buffer_kb.attr.name); comedi_free_subdevice_minor(s); return retval; @@ -2246,7 +2258,8 @@ int comedi_alloc_subdevice_minor(struct comedi_device *dev, retval = device_create_file(csdev, &dev_attr_max_write_buffer_kb); if (retval) { printk(KERN_ERR - "comedi: failed to create sysfs attribute file \"%s\".\n", + "comedi: " + "failed to create sysfs attribute file \"%s\".\n", dev_attr_max_write_buffer_kb.attr.name); comedi_free_subdevice_minor(s); return retval; @@ -2254,7 +2267,8 @@ int comedi_alloc_subdevice_minor(struct comedi_device *dev, retval = device_create_file(csdev, &dev_attr_write_buffer_kb); if (retval) { printk(KERN_ERR - "comedi: failed to create sysfs attribute file \"%s\".\n", + "comedi: " + "failed to create sysfs attribute file \"%s\".\n", dev_attr_write_buffer_kb.attr.name); comedi_free_subdevice_minor(s); return retval; -- cgit v0.10.2 From 6c7f81967b8984e6fb6b1f04c63f32d90a15c479 Mon Sep 17 00:00:00 2001 From: Alexander Kurz Date: Thu, 13 May 2010 13:56:16 +0400 Subject: staging: comedi PCMCIA-drivers: adding MODULE_AUTHOR, MODULE_DESCRIPTION and MODULE_LICENSE this adds and sorts the module labels MODULE_AUTHOR, MODULE_DESCRIPTION and MODULE_LICENSE for all comedi PCMCIA drivers. Signed-off-by: Alexander Kurz Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/cb_das16_cs.c b/drivers/staging/comedi/drivers/cb_das16_cs.c index 68bd5ca..19c6093 100644 --- a/drivers/staging/comedi/drivers/cb_das16_cs.c +++ b/drivers/staging/comedi/drivers/cb_das16_cs.c @@ -859,6 +859,9 @@ static struct pcmcia_device_id das16cs_id_table[] = { }; MODULE_DEVICE_TABLE(pcmcia, das16cs_id_table); +MODULE_AUTHOR("David A. Schleef "); +MODULE_DESCRIPTION("Comedi driver for Computer Boards PC-CARD DAS16/16"); +MODULE_LICENSE("GPL"); struct pcmcia_driver das16cs_driver = { .probe = das16cs_pcmcia_attach, diff --git a/drivers/staging/comedi/drivers/das08_cs.c b/drivers/staging/comedi/drivers/das08_cs.c index 9164ce1..456661c 100644 --- a/drivers/staging/comedi/drivers/das08_cs.c +++ b/drivers/staging/comedi/drivers/das08_cs.c @@ -371,6 +371,10 @@ static struct pcmcia_device_id das08_cs_id_table[] = { }; MODULE_DEVICE_TABLE(pcmcia, das08_cs_id_table); +MODULE_AUTHOR("David A. Schleef , " + "Frank Mori Hess "); +MODULE_DESCRIPTION("Comedi driver for ComputerBoards DAS-08 PCMCIA boards"); +MODULE_LICENSE("GPL"); struct pcmcia_driver das08_cs_driver = { .probe = das08_pcmcia_attach, @@ -413,6 +417,5 @@ static void __exit das08_cs_exit_module(void) comedi_driver_unregister(&driver_das08_cs); } -MODULE_LICENSE("GPL"); module_init(das08_cs_init_module); module_exit(das08_cs_exit_module); diff --git a/drivers/staging/comedi/drivers/ni_daq_700.c b/drivers/staging/comedi/drivers/ni_daq_700.c index 7844203..2914075 100644 --- a/drivers/staging/comedi/drivers/ni_daq_700.c +++ b/drivers/staging/comedi/drivers/ni_daq_700.c @@ -734,8 +734,12 @@ static struct pcmcia_device_id dio700_cs_ids[] = { PCMCIA_DEVICE_NULL }; -MODULE_LICENSE("GPL"); + MODULE_DEVICE_TABLE(pcmcia, dio700_cs_ids); +MODULE_AUTHOR("Fred Brooks "); +MODULE_DESCRIPTION("Comedi driver for National Instruments " + "PCMCIA DAQCard-700 DIO"); +MODULE_LICENSE("GPL"); struct pcmcia_driver dio700_cs_driver = { .probe = dio700_cs_attach, diff --git a/drivers/staging/comedi/drivers/ni_daq_dio24.c b/drivers/staging/comedi/drivers/ni_daq_dio24.c index ddc312b..f9e49e6 100644 --- a/drivers/staging/comedi/drivers/ni_daq_dio24.c +++ b/drivers/staging/comedi/drivers/ni_daq_dio24.c @@ -487,6 +487,10 @@ static struct pcmcia_device_id dio24_cs_ids[] = { }; MODULE_DEVICE_TABLE(pcmcia, dio24_cs_ids); +MODULE_AUTHOR("Daniel Vecino Castel "); +MODULE_DESCRIPTION("Comedi driver for National Instruments " + "PCMCIA DAQ-Card DIO-24"); +MODULE_LICENSE("GPL"); struct pcmcia_driver dio24_cs_driver = { .probe = dio24_cs_attach, diff --git a/drivers/staging/comedi/drivers/ni_labpc_cs.c b/drivers/staging/comedi/drivers/ni_labpc_cs.c index 8ad1055..d2935e5 100644 --- a/drivers/staging/comedi/drivers/ni_labpc_cs.c +++ b/drivers/staging/comedi/drivers/ni_labpc_cs.c @@ -463,6 +463,9 @@ static struct pcmcia_device_id labpc_cs_ids[] = { }; MODULE_DEVICE_TABLE(pcmcia, labpc_cs_ids); +MODULE_AUTHOR("Frank Mori Hess "); +MODULE_DESCRIPTION("Comedi driver for National Instruments Lab-PC"); +MODULE_LICENSE("GPL"); struct pcmcia_driver labpc_cs_driver = { .probe = labpc_cs_attach, @@ -504,6 +507,5 @@ void __exit labpc_exit_module(void) comedi_driver_unregister(&driver_labpc_cs); } -MODULE_LICENSE("GPL"); module_init(labpc_init_module); module_exit(labpc_exit_module); diff --git a/drivers/staging/comedi/drivers/ni_mio_cs.c b/drivers/staging/comedi/drivers/ni_mio_cs.c index dc4849a..dcb1579 100644 --- a/drivers/staging/comedi/drivers/ni_mio_cs.c +++ b/drivers/staging/comedi/drivers/ni_mio_cs.c @@ -439,8 +439,6 @@ static int ni_getboardtype(struct comedi_device *dev, #ifdef MODULE -MODULE_LICENSE("GPL"); - static struct pcmcia_device_id ni_mio_cs_ids[] = { PCMCIA_DEVICE_MANF_CARD(0x010b, 0x010d), /* DAQCard-ai-16xe-50 */ PCMCIA_DEVICE_MANF_CARD(0x010b, 0x010c), /* DAQCard-ai-16e-4 */ @@ -451,6 +449,9 @@ static struct pcmcia_device_id ni_mio_cs_ids[] = { }; MODULE_DEVICE_TABLE(pcmcia, ni_mio_cs_ids); +MODULE_AUTHOR("David A. Schleef "); +MODULE_DESCRIPTION("Comedi driver for National Instruments DAQCard E series"); +MODULE_LICENSE("GPL"); struct pcmcia_driver ni_mio_cs_driver = { .probe = &cs_attach, diff --git a/drivers/staging/comedi/drivers/quatech_daqp_cs.c b/drivers/staging/comedi/drivers/quatech_daqp_cs.c index fb427dbe..be62fac 100644 --- a/drivers/staging/comedi/drivers/quatech_daqp_cs.c +++ b/drivers/staging/comedi/drivers/quatech_daqp_cs.c @@ -1243,6 +1243,9 @@ static struct pcmcia_device_id daqp_cs_id_table[] = { }; MODULE_DEVICE_TABLE(pcmcia, daqp_cs_id_table); +MODULE_AUTHOR("Brent Baccala "); +MODULE_DESCRIPTION("Comedi driver for Quatech DAQP PCMCIA data capture cards"); +MODULE_LICENSE("GPL"); static struct pcmcia_driver daqp_cs_driver = { .probe = daqp_cs_attach, -- cgit v0.10.2 From b464f791caf66b6120c3cd8a77ad313ed532667a Mon Sep 17 00:00:00 2001 From: Mark Rankilor Date: Thu, 13 May 2010 18:28:38 +0800 Subject: Staging: comedi: Fixed long line lengths in comedi.h This patches fixes long line lengths in comedi.h that were picked up by checkpatch.pl Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index 1538146..3e3663f 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -465,7 +465,8 @@ #define COMEDI_CB_EOS 1 /* end of scan */ #define COMEDI_CB_EOA 2 /* end of acquisition */ -#define COMEDI_CB_BLOCK 4 /* data has arrived: wakes up read() / write() */ +#define COMEDI_CB_BLOCK 4 /* data has arrived: + * wakes up read() / write() */ #define COMEDI_CB_EOBUF 8 /* DEPRECATED: end of buffer */ #define COMEDI_CB_ERROR 16 /* card error during acquisition */ #define COMEDI_CB_OVERFLOW 32 /* buffer overflow/underflow */ @@ -499,8 +500,10 @@ I8254_MODE2 = (2 << 1), /* Rate generator */ I8254_MODE3 = (3 << 1), /* Square wave mode */ I8254_MODE4 = (4 << 1), /* Software triggered strobe */ - I8254_MODE5 = (5 << 1), /* Hardware triggered strobe (retriggerable) */ - I8254_BCD = 1, /* use binary-coded decimal instead of binary (pretty useless) */ + I8254_MODE5 = (5 << 1), /* Hardware triggered strobe + * (retriggerable) */ + I8254_BCD = 1, /* use binary-coded decimal instead of binary + * (pretty useless) */ I8254_BINARY = 0 }; @@ -640,7 +643,8 @@ May be bitwise-or'd with CR_EDGE or CR_INVERT. */ NI_GPCT_UP_DOWN_PIN_i_GATE_SELECT = 0x201, NI_GPCT_SELECTED_GATE_GATE_SELECT = 0x21e, /* m-series "second gate" sources are unknown, - we should add them here with an offset of 0x300 when known. */ + * we should add them here with an offset of 0x300 when + * known. */ NI_GPCT_DISABLED_GATE_SELECT = 0x8000, }; static inline unsigned NI_GPCT_GATE_PIN_GATE_SELECT(unsigned n) @@ -681,14 +685,14 @@ INSN_CONFIG_SET_OTHER_SRC when using NI general-purpose counters. */ INSN_CONFIG_ARM */ enum ni_gpct_arm_source { NI_GPCT_ARM_IMMEDIATE = 0x0, - NI_GPCT_ARM_PAIRED_IMMEDIATE = 0x1, /* Start both the counter and - the adjacent paired counter - simultaneously */ - /* NI doesn't document bits for selecting hardware arm triggers. If - * the NI_GPCT_ARM_UNKNOWN bit is set, we will pass the least - * significant bits (3 bits for 660x or 5 bits for m-series) through to - * the hardware. This will at least allow someone to figure out what - * the bits do later. */ + NI_GPCT_ARM_PAIRED_IMMEDIATE = 0x1, /* Start both the counter + * and the adjacent paired + * counter simultaneously */ + /* NI doesn't document bits for selecting hardware arm triggers. + * If the NI_GPCT_ARM_UNKNOWN bit is set, we will pass the least + * significant bits (3 bits for 660x or 5 bits for m-series) + * through to the hardware. This will at least allow someone to + * figure out what the bits do later. */ NI_GPCT_ARM_UNKNOWN = 0x1000, }; @@ -740,8 +744,8 @@ INSN_CONFIG_ARM */ NI_RTSI_OUTPUT_G_GATE0 = 6, NI_RTSI_OUTPUT_RGOUT0 = 7, NI_RTSI_OUTPUT_RTSI_BRD_0 = 8, - NI_RTSI_OUTPUT_RTSI_OSC = 12 /* pre-m-series always have RTSI clock - on line 7 */ + NI_RTSI_OUTPUT_RTSI_OSC = 12 /* pre-m-series always have RTSI + * clock on line 7 */ }; static inline unsigned NI_RTSI_OUTPUT_RTSI_BRD(unsigned n) { -- cgit v0.10.2 From 7d8e737dd7e3519110a7bc529ef6ac80ac41c3f5 Mon Sep 17 00:00:00 2001 From: Mark Rankilor Date: Thu, 13 May 2010 18:28:39 +0800 Subject: Staging: comedi: Fixed more long line lengths in comedi.h This patches fixes some long line lengths in comedi.h from checkpatch.pl Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h index 3e3663f..6c900e2 100644 --- a/drivers/staging/comedi/comedi.h +++ b/drivers/staging/comedi/comedi.h @@ -267,7 +267,8 @@ * streaming input/output */ INSN_CONFIG_GET_HARDWARE_BUFFER_SIZE = 2006, INSN_CONFIG_SET_COUNTER_MODE = 4097, - INSN_CONFIG_8254_SET_MODE = INSN_CONFIG_SET_COUNTER_MODE, /* deprecated */ + /* INSN_CONFIG_8254_SET_MODE is deprecated */ + INSN_CONFIG_8254_SET_MODE = INSN_CONFIG_SET_COUNTER_MODE, INSN_CONFIG_8254_READ_STATUS = 4098, INSN_CONFIG_SET_ROUTING = 4099, INSN_CONFIG_GET_ROUTING = 4109, @@ -598,14 +599,17 @@ NI_GPCT_LOGIC_LOW_CLOCK_SRC_BITS = 0x3, NI_GPCT_NEXT_GATE_CLOCK_SRC_BITS = 0x4, NI_GPCT_NEXT_TC_CLOCK_SRC_BITS = 0x5, - NI_GPCT_SOURCE_PIN_i_CLOCK_SRC_BITS = 0x6, /* NI 660x-specific */ + /* NI 660x-specific */ + NI_GPCT_SOURCE_PIN_i_CLOCK_SRC_BITS = 0x6, NI_GPCT_PXI10_CLOCK_SRC_BITS = 0x7, NI_GPCT_PXI_STAR_TRIGGER_CLOCK_SRC_BITS = 0x8, NI_GPCT_ANALOG_TRIGGER_OUT_CLOCK_SRC_BITS = 0x9, NI_GPCT_PRESCALE_MODE_CLOCK_SRC_MASK = 0x30000000, NI_GPCT_NO_PRESCALE_CLOCK_SRC_BITS = 0x0, - NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS = 0x10000000, /* divide source by 2 */ - NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS = 0x20000000, /* divide source by 8 */ + /* divide source by 2 */ + NI_GPCT_PRESCALE_X2_CLOCK_SRC_BITS = 0x10000000, + /* divide source by 8 */ + NI_GPCT_PRESCALE_X8_CLOCK_SRC_BITS = 0x20000000, NI_GPCT_INVERT_CLOCK_SRC_BIT = 0x80000000 }; static inline unsigned NI_GPCT_SOURCE_PIN_CLOCK_SRC_BITS(unsigned n) @@ -837,7 +841,8 @@ INSN_CONFIG_ARM */ { return NI_USUAL_PFI_SELECT(pfi_channel); } - static inline unsigned NI_CDIO_SCAN_BEGIN_SRC_RTSI(unsigned rtsi_channel) + static inline unsigned + NI_CDIO_SCAN_BEGIN_SRC_RTSI(unsigned rtsi_channel) { return NI_USUAL_RTSI_SELECT(rtsi_channel); } -- cgit v0.10.2 From 5c2af91bbcc19c96d2fb35c4bb3f3d66b039e978 Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Thu, 13 May 2010 13:55:25 +0200 Subject: Staging: rtl819su: added r8192SU_led.c/.h added the necessary infrastructure for the leds on the device this is a port from Realteks driver. leds are now working partially. Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/Makefile b/drivers/staging/rtl8192su/Makefile index 9374a01..7133894 100644 --- a/drivers/staging/rtl8192su/Makefile +++ b/drivers/staging/rtl8192su/Makefile @@ -20,6 +20,7 @@ r8192s_usb-objs := \ r8192S_Efuse.o \ r8192U_core.o \ r8192U_pm.o \ + r8192SU_led.o \ ieee80211/ieee80211_crypt.o \ ieee80211/ieee80211_crypt_tkip.o \ ieee80211/ieee80211_crypt_ccmp.o \ diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_r8192s.h b/drivers/staging/rtl8192su/ieee80211/ieee80211_r8192s.h index 7d6c3bc..1824cda 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_r8192s.h +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_r8192s.h @@ -172,18 +172,20 @@ enum { IG_Max }; -typedef enum _LED_CTL_MODE { - LED_CTL_POWER_ON = 1, - LED_CTL_LINK = 2, - LED_CTL_NO_LINK = 3, - LED_CTL_TX = 4, - LED_CTL_RX = 5, - LED_CTL_SITE_SURVEY = 6, - LED_CTL_POWER_OFF = 7, - LED_CTL_START_TO_LINK = 8, - LED_CTL_START_WPS = 9, - LED_CTL_STOP_WPS = 10, +typedef enum _LED_CTL_MODE{ + LED_CTL_POWER_ON = 1, + LED_CTL_LINK = 2, + LED_CTL_NO_LINK = 3, + LED_CTL_TX = 4, + LED_CTL_RX = 5, + LED_CTL_SITE_SURVEY = 6, + LED_CTL_POWER_OFF = 7, + LED_CTL_START_TO_LINK = 8, + LED_CTL_START_WPS = 9, + LED_CTL_STOP_WPS = 10, LED_CTL_START_WPS_BOTTON = 11, + LED_CTL_STOP_WPS_FAIL = 12, + LED_CTL_STOP_WPS_FAIL_OVERLAP = 13, } LED_CTL_MODE; typedef union _frameqos { diff --git a/drivers/staging/rtl8192su/r8192SU_led.c b/drivers/staging/rtl8192su/r8192SU_led.c new file mode 100644 index 0000000..609dba6 --- /dev/null +++ b/drivers/staging/rtl8192su/r8192SU_led.c @@ -0,0 +1,2347 @@ +/* + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae + */ + +#include "r8192U.h" +#include "r8192S_hw.h" +#include "r8192SU_led.h" + +#define LED_BLINK_NORMAL_INTERVAL 100 +#define LED_BLINK_SLOWLY_INTERVAL 200 +#define LED_BLINK_LONG_INTERVAL 400 + +#define LED_BLINK_NO_LINK_INTERVAL_ALPHA 1000 +#define LED_BLINK_LINK_INTERVAL_ALPHA 500 +#define LED_BLINK_SCAN_INTERVAL_ALPHA 180 +#define LED_BLINK_FASTER_INTERVAL_ALPHA 50 +#define LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA 5000 + + + +static void BlinkTimerCallback (unsigned long data); + +static void BlinkWorkItemCallback (struct work_struct *work); + +void InitLed819xUsb (struct net_device *dev, PLED_819xUsb pLed, + LED_PIN_819xUsb LedPin) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + + pLed->dev = dev; + pLed->LedPin = LedPin; + pLed->CurrLedState = LED_OFF; + pLed->bLedOn = FALSE; + + pLed->bLedBlinkInProgress = FALSE; + pLed->BlinkTimes = 0; + pLed->BlinkingLedState = LED_OFF; + + init_timer(&pLed->BlinkTimer); + pLed->BlinkTimer.data = (unsigned long)dev; + pLed->BlinkTimer.function = BlinkTimerCallback; + + INIT_WORK(&priv->BlinkWorkItem, (void*)BlinkWorkItemCallback); + priv->pLed = pLed; +} + + +void DeInitLed819xUsb (PLED_819xUsb pLed) +{ + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; +} + +void SwLedOn (struct net_device *dev, PLED_819xUsb pLed) +{ + u8 LedCfg; + + LedCfg = read_nic_byte(dev, LEDCFG); + switch (pLed->LedPin) { + case LED_PIN_GPIO0: + break; + case LED_PIN_LED0: + write_nic_byte(dev, LEDCFG, LedCfg&0xf0); + break; + case LED_PIN_LED1: + write_nic_byte(dev, LEDCFG, LedCfg&0x0f); + break; + default: + break; + } + pLed->bLedOn = TRUE; +} + +void SwLedOff (struct net_device *dev, PLED_819xUsb pLed) +{ + u8 LedCfg; + + LedCfg = read_nic_byte(dev, LEDCFG); + switch (pLed->LedPin) { + case LED_PIN_GPIO0: + break; + case LED_PIN_LED0: + LedCfg &= 0xf0; + write_nic_byte(dev, LEDCFG, (LedCfg|BIT3)); + break; + case LED_PIN_LED1: + LedCfg &= 0x0f; + write_nic_byte(dev, LEDCFG, (LedCfg|BIT7)); + break; + default: + break; + } + pLed->bLedOn = FALSE; +} + + +void +InitSwLeds( + struct net_device *dev + ) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + + InitLed819xUsb(dev, &(priv->SwLed0), LED_PIN_LED0); + + InitLed819xUsb(dev,&(priv->SwLed1), LED_PIN_LED1); +} + + +void +DeInitSwLeds( + struct net_device *dev + ) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + + DeInitLed819xUsb( &(priv->SwLed0) ); + DeInitLed819xUsb( &(priv->SwLed1) ); +} + + +void +SwLedBlink( + PLED_819xUsb pLed + ) +{ + struct net_device *dev = (struct net_device *)(pLed->dev); + struct r8192_priv *priv = ieee80211_priv(dev); + bool bStopBlinking = FALSE; + + if( pLed->BlinkingLedState == LED_ON ) + { + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); + } + else + { + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); + } + + pLed->BlinkTimes--; + switch(pLed->CurrLedState) + { + + case LED_BLINK_NORMAL: + if(pLed->BlinkTimes == 0) + { + bStopBlinking = TRUE; + } + break; + + case LED_BLINK_StartToBlink: + if( (priv->ieee80211->state == IEEE80211_LINKED) && (priv->ieee80211->iw_mode == IW_MODE_INFRA)) + { + bStopBlinking = TRUE; + } + else if((priv->ieee80211->state == IEEE80211_LINKED) && (priv->ieee80211->iw_mode == IW_MODE_ADHOC)) + { + bStopBlinking = TRUE; + } + else if(pLed->BlinkTimes == 0) + { + bStopBlinking = TRUE; + } + break; + + case LED_BLINK_WPS: + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + break; + + + default: + bStopBlinking = TRUE; + break; + + } + + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else if( (priv->ieee80211->state == IEEE80211_LINKED) && (pLed->bLedOn == false)) + { + SwLedOn(dev, pLed); + } + else if( (priv->ieee80211->state != IEEE80211_LINKED) && pLed->bLedOn == true) + { + SwLedOff(dev, pLed); + } + + pLed->BlinkTimes = 0; + pLed->bLedBlinkInProgress = FALSE; + } + else + { + if( pLed->BlinkingLedState == LED_ON ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + + switch( pLed->CurrLedState ) + { + case LED_BLINK_NORMAL: + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + break; + + case LED_BLINK_SLOWLY: + case LED_BLINK_StartToBlink: + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + break; + + case LED_BLINK_WPS: + { + if( pLed->BlinkingLedState == LED_ON ) + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL)); + else + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL)); + } + break; + + default: + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + break; + } + } +} + + +void +SwLedBlink1( + PLED_819xUsb pLed + ) +{ + struct net_device *dev = (struct net_device *)(pLed->dev); + struct r8192_priv *priv = ieee80211_priv(dev); + PLED_819xUsb pLed1 = &(priv->SwLed1); + bool bStopBlinking = FALSE; + + if(priv->CustomerID == RT_CID_819x_CAMEO) + pLed = &(priv->SwLed1); + + if( pLed->BlinkingLedState == LED_ON ) + { + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); + } + else + { + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); + } + + + if(priv->CustomerID == RT_CID_DEFAULT) + { + if(priv->ieee80211->state == IEEE80211_LINKED) + { + if(!pLed1->bSWLedCtrl) + { + SwLedOn(dev, pLed1); + pLed1->bSWLedCtrl = TRUE; + } + else if(!pLed1->bLedOn) + SwLedOn(dev, pLed1); + RT_TRACE(COMP_LED, "Blinktimes (): turn on pLed1\n"); + } + else + { + if(!pLed1->bSWLedCtrl) + { + SwLedOff(dev, pLed1); + pLed1->bSWLedCtrl = TRUE; + } + else if(pLed1->bLedOn) + SwLedOff(dev, pLed1); + RT_TRACE(COMP_LED, "Blinktimes (): turn off pLed1\n"); + } + } + + switch(pLed->CurrLedState) + { + case LED_BLINK_SLOWLY: + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + break; + + case LED_BLINK_NORMAL: + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); + break; + + case LED_SCAN_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else if(priv->ieee80211->state == IEEE80211_LINKED) + { + pLed->bLedLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_NORMAL; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + + } + else if(priv->ieee80211->state != IEEE80211_LINKED) + { + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + pLed->bLedScanBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + } + } + break; + + case LED_TXRX_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else if(priv->ieee80211->state == IEEE80211_LINKED) + { + pLed->bLedLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_NORMAL; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + else if(priv->ieee80211->state != IEEE80211_LINKED) + { + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + pLed->BlinkTimes = 0; + pLed->bLedBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + } + break; + + case LED_BLINK_WPS: + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + break; + + case LED_BLINK_WPS_STOP: + if(pLed->BlinkingLedState == LED_ON) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA)); + bStopBlinking = FALSE; + } + else + { + bStopBlinking = TRUE; + } + + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + pLed->bLedLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_NORMAL; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + pLed->bLedWPSBlinkInProgress = FALSE; + } + break; + + default: + break; + } + +} + +void +SwLedBlink2( + PLED_819xUsb pLed + ) +{ + struct net_device *dev = (struct net_device *)(pLed->dev); + struct r8192_priv *priv = ieee80211_priv(dev); + bool bStopBlinking = FALSE; + + if( pLed->BlinkingLedState == LED_ON) + { + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); + } + else + { + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); + } + + switch(pLed->CurrLedState) + { + case LED_SCAN_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "eRFPowerState %d\n", priv->ieee80211->eRFPowerState); + } + else if(priv->ieee80211->state == IEEE80211_LINKED) + { + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "stop scan blink CurrLedState %d\n", pLed->CurrLedState); + + } + else if(priv->ieee80211->state != IEEE80211_LINKED) + { + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "stop scan blink CurrLedState %d\n", pLed->CurrLedState); + } + pLed->bLedScanBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + } + } + break; + + case LED_TXRX_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else if(priv->ieee80211->state == IEEE80211_LINKED) + { + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "stop CurrLedState %d\n", pLed->CurrLedState); + + } + else if(priv->ieee80211->state != IEEE80211_LINKED) + { + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "stop CurrLedState %d\n", pLed->CurrLedState); + } + pLed->bLedBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + } + break; + + default: + break; + } + +} + +void +SwLedBlink3( + PLED_819xUsb pLed + ) +{ + struct net_device *dev = (struct net_device *)(pLed->dev); + struct r8192_priv *priv = ieee80211_priv(dev); + bool bStopBlinking = FALSE; + + if( pLed->BlinkingLedState == LED_ON ) + { + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); + } + else + { + if(pLed->CurrLedState != LED_BLINK_WPS_STOP) + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); + } + + switch(pLed->CurrLedState) + { + case LED_SCAN_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else if(priv->ieee80211->state == IEEE80211_LINKED) + { + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + if( !pLed->bLedOn ) + SwLedOn(dev, pLed); + + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + else if(priv->ieee80211->state != IEEE80211_LINKED) + { + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + if( pLed->bLedOn ) + SwLedOff(dev, pLed); + + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + pLed->bLedScanBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + } + } + break; + + case LED_TXRX_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else if(priv->ieee80211->state == IEEE80211_LINKED) + { + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + + if( !pLed->bLedOn ) + SwLedOn(dev, pLed); + + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + else if(priv->ieee80211->state != IEEE80211_LINKED) + { + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + + if( pLed->bLedOn ) + SwLedOff(dev, pLed); + + + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + pLed->bLedBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + } + break; + + case LED_BLINK_WPS: + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + break; + + case LED_BLINK_WPS_STOP: + if(pLed->BlinkingLedState == LED_ON) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA)); + bStopBlinking = FALSE; + } + else + { + bStopBlinking = TRUE; + } + + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + pLed->bLedWPSBlinkInProgress = FALSE; + } + break; + + + default: + break; + } + +} + + +void +SwLedBlink4( + PLED_819xUsb pLed + ) +{ + struct net_device *dev = (struct net_device *)(pLed->dev); + struct r8192_priv *priv = ieee80211_priv(dev); + PLED_819xUsb pLed1 = &(priv->SwLed1); + bool bStopBlinking = FALSE; + + if( pLed->BlinkingLedState == LED_ON ) + { + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); + } + else + { + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); + } + + if(!pLed1->bLedWPSBlinkInProgress && pLed1->BlinkingLedState == LED_UNKNOWN) + { + pLed1->BlinkingLedState = LED_OFF; + pLed1->CurrLedState = LED_OFF; + SwLedOff(dev, pLed1); + } + + switch(pLed->CurrLedState) + { + case LED_BLINK_SLOWLY: + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + break; + + case LED_BLINK_StartToBlink: + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + break; + + case LED_SCAN_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) + { + SwLedOff(dev, pLed); + } + else + { + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + } + pLed->bLedScanBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + } + } + break; + + case LED_TXRX_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) + { + SwLedOff(dev, pLed); + } + else + { + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + } + pLed->bLedBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + } + break; + + case LED_BLINK_WPS: + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + break; + + case LED_BLINK_WPS_STOP: + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + break; + + case LED_BLINK_WPS_STOP_OVERLAP: + pLed->BlinkTimes--; + if(pLed->BlinkTimes == 0) + { + if(pLed->bLedOn) + { + pLed->BlinkTimes = 1; + } + else + { + bStopBlinking = TRUE; + } + } + + if(bStopBlinking) + { + pLed->BlinkTimes = 10; + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + break; + + + default: + break; + } + + RT_TRACE(COMP_LED, "SwLedBlink4 CurrLedState %d\n", pLed->CurrLedState); + + +} + +void +SwLedBlink5( + PLED_819xUsb pLed + ) +{ + struct net_device *dev = (struct net_device *)(pLed->dev); + struct r8192_priv *priv = ieee80211_priv(dev); + bool bStopBlinking = FALSE; + + if( pLed->BlinkingLedState == LED_ON ) + { + SwLedOn(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn on\n", pLed->BlinkTimes); + } + else + { + SwLedOff(dev, pLed); + RT_TRACE(COMP_LED, "Blinktimes (%d): turn off\n", pLed->BlinkTimes); + } + + switch(pLed->CurrLedState) + { + case LED_SCAN_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) + { + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + if(pLed->bLedOn) + SwLedOff(dev, pLed); + } + else + { pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + if(!pLed->bLedOn) + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + + pLed->bLedScanBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + } + } + break; + + + case LED_TXRX_BLINK: + pLed->BlinkTimes--; + if( pLed->BlinkTimes == 0 ) + { + bStopBlinking = TRUE; + } + + if(bStopBlinking) + { + if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) + { + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + if(pLed->bLedOn) + SwLedOff(dev, pLed); + } + else + { + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + if(!pLed->bLedOn) + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + + pLed->bLedBlinkInProgress = FALSE; + } + else + { + if( priv->ieee80211->eRFPowerState != eRfOn && priv->ieee80211->RfOffReason > RF_CHANGE_BY_PS) + { + SwLedOff(dev, pLed); + } + else + { + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + } + break; + + default: + break; + } + + RT_TRACE(COMP_LED, "SwLedBlink5 CurrLedState %d\n", pLed->CurrLedState); + + +} + + +void +BlinkTimerCallback( + unsigned long data + ) +{ + struct net_device *dev = (struct net_device *)data; + struct r8192_priv *priv = ieee80211_priv(dev); + +#if LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0) + schedule_work(&(priv->BlinkWorkItem)); +#endif +} + + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20) +void BlinkWorkItemCallback(struct work_struct *work) +{ + struct r8192_priv *priv = container_of(work, struct r8192_priv, BlinkWorkItem); +#else +void BlinkWorkItemCallback(void * Context) +{ + struct net_device *dev = (struct net_device *)Context; + struct r8192_priv *priv = ieee80211_priv(dev); +#endif + + PLED_819xUsb pLed = priv->pLed; + + switch(priv->LedStrategy) + { + case SW_LED_MODE0: + SwLedBlink(pLed); + break; + + case SW_LED_MODE1: + SwLedBlink1(pLed); + break; + + case SW_LED_MODE2: + SwLedBlink2(pLed); + break; + + case SW_LED_MODE3: + SwLedBlink3(pLed); + break; + + case SW_LED_MODE4: + SwLedBlink4(pLed); + break; + + case SW_LED_MODE5: + SwLedBlink5(pLed); + break; + + default: + SwLedBlink(pLed); + break; + } +} + + + + +void +SwLedControlMode0( + struct net_device *dev, + LED_CTL_MODE LedAction +) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + PLED_819xUsb pLed = &(priv->SwLed1); + + switch(LedAction) + { + case LED_CTL_TX: + case LED_CTL_RX: + if( pLed->bLedBlinkInProgress == FALSE ) + { + pLed->bLedBlinkInProgress = TRUE; + + pLed->CurrLedState = LED_BLINK_NORMAL; + pLed->BlinkTimes = 2; + + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + break; + + case LED_CTL_START_TO_LINK: + if( pLed->bLedBlinkInProgress == FALSE ) + { + pLed->bLedBlinkInProgress = TRUE; + + pLed->CurrLedState = LED_BLINK_StartToBlink; + pLed->BlinkTimes = 24; + + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + } + else + { + pLed->CurrLedState = LED_BLINK_StartToBlink; + } + break; + + case LED_CTL_LINK: + pLed->CurrLedState = LED_ON; + if( pLed->bLedBlinkInProgress == FALSE ) + { + SwLedOn(dev, pLed); + } + break; + + case LED_CTL_NO_LINK: + pLed->CurrLedState = LED_OFF; + if( pLed->bLedBlinkInProgress == FALSE ) + { + SwLedOff(dev, pLed); + } + break; + + case LED_CTL_POWER_OFF: + pLed->CurrLedState = LED_OFF; + if(pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + SwLedOff(dev, pLed); + break; + + case LED_CTL_START_WPS: + if( pLed->bLedBlinkInProgress == FALSE || pLed->CurrLedState == LED_ON) + { + pLed->bLedBlinkInProgress = TRUE; + + pLed->CurrLedState = LED_BLINK_WPS; + pLed->BlinkTimes = 20; + + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LONG_INTERVAL)); + } + } + break; + + case LED_CTL_STOP_WPS: + if(pLed->bLedBlinkInProgress) + { + pLed->CurrLedState = LED_OFF; + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + break; + + + default: + break; + } + + RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState); + +} + +void +SwLedControlMode1( + struct net_device *dev, + LED_CTL_MODE LedAction +) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + PLED_819xUsb pLed = &(priv->SwLed0); + + if(priv->CustomerID == RT_CID_819x_CAMEO) + pLed = &(priv->SwLed1); + + switch(LedAction) + { + case LED_CTL_START_TO_LINK: + case LED_CTL_NO_LINK: + if( pLed->bLedNoLinkBlinkInProgress == FALSE ) + { + if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) + { + return; + } + if( pLed->bLedLinkBlinkInProgress == TRUE ) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedLinkBlinkInProgress = FALSE; + } + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + } + break; + + case LED_CTL_LINK: + if( pLed->bLedLinkBlinkInProgress == FALSE ) + { + if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) + { + return; + } + if(pLed->bLedNoLinkBlinkInProgress == TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + pLed->bLedLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_NORMAL; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_LINK_INTERVAL_ALPHA)); + } + break; + + case LED_CTL_SITE_SURVEY: + if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED)) + ; + else if(pLed->bLedScanBlinkInProgress ==FALSE) + { + if(IS_LED_WPS_BLINKING(pLed)) + return; + + if(pLed->bLedNoLinkBlinkInProgress == TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + if( pLed->bLedLinkBlinkInProgress == TRUE ) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedLinkBlinkInProgress = FALSE; + } + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + pLed->bLedScanBlinkInProgress = TRUE; + pLed->CurrLedState = LED_SCAN_BLINK; + pLed->BlinkTimes = 24; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + + } + break; + + case LED_CTL_TX: + case LED_CTL_RX: + if(pLed->bLedBlinkInProgress ==FALSE) + { + if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) + { + } + if(pLed->bLedNoLinkBlinkInProgress == TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + if( pLed->bLedLinkBlinkInProgress == TRUE ) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedLinkBlinkInProgress = FALSE; + } + pLed->bLedBlinkInProgress = TRUE; + pLed->CurrLedState = LED_TXRX_BLINK; + pLed->BlinkTimes = 2; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + break; + + case LED_CTL_START_WPS: + case LED_CTL_START_WPS_BOTTON: + if(pLed->bLedWPSBlinkInProgress ==FALSE) + { + if(pLed->bLedNoLinkBlinkInProgress == TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + if( pLed->bLedLinkBlinkInProgress == TRUE ) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedLinkBlinkInProgress = FALSE; + } + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if(pLed->bLedScanBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + pLed->bLedWPSBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_WPS; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + + } + break; + + + case LED_CTL_STOP_WPS: + if(pLed->bLedNoLinkBlinkInProgress == TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + if( pLed->bLedLinkBlinkInProgress == TRUE ) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedLinkBlinkInProgress = FALSE; + } + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if(pLed->bLedScanBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + if(pLed->bLedWPSBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + } + else + { + pLed->bLedWPSBlinkInProgress = TRUE; + } + + pLed->CurrLedState = LED_BLINK_WPS_STOP; + if(pLed->bLedOn) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), 0); + } + break; + + case LED_CTL_STOP_WPS_FAIL: + if(pLed->bLedWPSBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + break; + + case LED_CTL_POWER_OFF: + pLed->CurrLedState = LED_OFF; + if( pLed->bLedNoLinkBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + if( pLed->bLedLinkBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedLinkBlinkInProgress = FALSE; + } + if( pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if( pLed->bLedWPSBlinkInProgress ) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + if( pLed->bLedScanBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + + SwLedOff(dev, pLed); + break; + + default: + break; + + } + + RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState); +} + +void +SwLedControlMode2( + struct net_device *dev, + LED_CTL_MODE LedAction +) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + PLED_819xUsb pLed = &(priv->SwLed0); + + switch(LedAction) + { + case LED_CTL_SITE_SURVEY: + if(priv->ieee80211->LinkDetectInfo.bBusyTraffic) + ; + else if(pLed->bLedScanBlinkInProgress ==FALSE) + { + if(IS_LED_WPS_BLINKING(pLed)) + return; + + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + pLed->bLedScanBlinkInProgress = TRUE; + pLed->CurrLedState = LED_SCAN_BLINK; + pLed->BlinkTimes = 24; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + + } + break; + + case LED_CTL_TX: + case LED_CTL_RX: + if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED)) + { + if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) + { + return; + } + + pLed->bLedBlinkInProgress = TRUE; + pLed->CurrLedState = LED_TXRX_BLINK; + pLed->BlinkTimes = 2; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + break; + + case LED_CTL_LINK: + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + if( pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if( pLed->bLedScanBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + + mod_timer(&(pLed->BlinkTimer), 0); + break; + + case LED_CTL_START_WPS: + case LED_CTL_START_WPS_BOTTON: + if(pLed->bLedWPSBlinkInProgress ==FALSE) + { + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if(pLed->bLedScanBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + pLed->bLedWPSBlinkInProgress = TRUE; + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), 0); + } + break; + + case LED_CTL_STOP_WPS: + pLed->bLedWPSBlinkInProgress = FALSE; + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), 0); + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + break; + + case LED_CTL_STOP_WPS_FAIL: + pLed->bLedWPSBlinkInProgress = FALSE; + if( priv->ieee80211->eRFPowerState != eRfOn ) + { + SwLedOff(dev, pLed); + } + else + { + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), 0); + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); + } + break; + + case LED_CTL_START_TO_LINK: + case LED_CTL_NO_LINK: + if(!IS_LED_BLINKING(pLed)) + { + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), 0); + } + break; + + case LED_CTL_POWER_OFF: + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + if( pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if( pLed->bLedScanBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + if( pLed->bLedWPSBlinkInProgress ) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + + mod_timer(&(pLed->BlinkTimer), 0); + break; + + default: + break; + + } + + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); +} + + void + SwLedControlMode3( + struct net_device *dev, + LED_CTL_MODE LedAction +) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + PLED_819xUsb pLed = &(priv->SwLed0); + + switch(LedAction) + { + case LED_CTL_SITE_SURVEY: + if(priv->ieee80211->LinkDetectInfo.bBusyTraffic) + ; + else if(pLed->bLedScanBlinkInProgress ==FALSE) + { + if(IS_LED_WPS_BLINKING(pLed)) + return; + + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + pLed->bLedScanBlinkInProgress = TRUE; + pLed->CurrLedState = LED_SCAN_BLINK; + pLed->BlinkTimes = 24; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + + } + break; + + case LED_CTL_TX: + case LED_CTL_RX: + if((pLed->bLedBlinkInProgress ==FALSE) && (priv->ieee80211->state == IEEE80211_LINKED)) + { + if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) + { + return; + } + + pLed->bLedBlinkInProgress = TRUE; + pLed->CurrLedState = LED_TXRX_BLINK; + pLed->BlinkTimes = 2; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + break; + + case LED_CTL_LINK: + if(IS_LED_WPS_BLINKING(pLed)) + return; + + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + if( pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if( pLed->bLedScanBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + + mod_timer(&(pLed->BlinkTimer), 0); + break; + + case LED_CTL_START_WPS: + case LED_CTL_START_WPS_BOTTON: + if(pLed->bLedWPSBlinkInProgress ==FALSE) + { + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if(pLed->bLedScanBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + pLed->bLedWPSBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_WPS; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + + } + break; + + case LED_CTL_STOP_WPS: + if(pLed->bLedWPSBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + else + { + pLed->bLedWPSBlinkInProgress = TRUE; + } + + pLed->CurrLedState = LED_BLINK_WPS_STOP; + if(pLed->bLedOn) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), 0); + } + + break; + + + case LED_CTL_STOP_WPS_FAIL: + if(pLed->bLedWPSBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), 0); + break; + + case LED_CTL_START_TO_LINK: + case LED_CTL_NO_LINK: + if(!IS_LED_BLINKING(pLed)) + { + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), 0); + } + break; + + case LED_CTL_POWER_OFF: + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + if( pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if( pLed->bLedScanBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + if( pLed->bLedWPSBlinkInProgress ) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + + mod_timer(&(pLed->BlinkTimer), 0); + break; + + default: + break; + + } + + RT_TRACE(COMP_LED, "CurrLedState %d\n", pLed->CurrLedState); +} + + +void +SwLedControlMode4( + struct net_device *dev, + LED_CTL_MODE LedAction +) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + PLED_819xUsb pLed = &(priv->SwLed0); + PLED_819xUsb pLed1 = &(priv->SwLed1); + + switch(LedAction) + { + case LED_CTL_START_TO_LINK: + if(pLed1->bLedWPSBlinkInProgress) + { + pLed1->bLedWPSBlinkInProgress = FALSE; + del_timer_sync(&(pLed1->BlinkTimer)); + + pLed1->BlinkingLedState = LED_OFF; + pLed1->CurrLedState = LED_OFF; + + if(pLed1->bLedOn) + mod_timer(&(pLed1->BlinkTimer), 0); + } + + if( pLed->bLedStartToLinkBlinkInProgress == FALSE ) + { + if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) + { + return; + } + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if(pLed->bLedNoLinkBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + + pLed->bLedStartToLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_StartToBlink; + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + } + break; + + case LED_CTL_LINK: + case LED_CTL_NO_LINK: + if(LedAction == LED_CTL_LINK) + { + if(pLed1->bLedWPSBlinkInProgress) + { + pLed1->bLedWPSBlinkInProgress = FALSE; + del_timer_sync(&(pLed1->BlinkTimer)); + + pLed1->BlinkingLedState = LED_OFF; + pLed1->CurrLedState = LED_OFF; + + if(pLed1->bLedOn) + mod_timer(&(pLed1->BlinkTimer), 0); + } + } + + if( pLed->bLedNoLinkBlinkInProgress == FALSE ) + { + if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) + { + return; + } + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + } + + break; + + case LED_CTL_SITE_SURVEY: + if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED)) + ; + else if(pLed->bLedScanBlinkInProgress ==FALSE) + { + if(IS_LED_WPS_BLINKING(pLed)) + return; + + if(pLed->bLedNoLinkBlinkInProgress == TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + pLed->bLedScanBlinkInProgress = TRUE; + pLed->CurrLedState = LED_SCAN_BLINK; + pLed->BlinkTimes = 24; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + + } + break; + + case LED_CTL_TX: + case LED_CTL_RX: + if(pLed->bLedBlinkInProgress ==FALSE) + { + if(pLed->CurrLedState == LED_SCAN_BLINK || IS_LED_WPS_BLINKING(pLed)) + { + return; + } + if(pLed->bLedNoLinkBlinkInProgress == TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + pLed->bLedBlinkInProgress = TRUE; + pLed->CurrLedState = LED_TXRX_BLINK; + pLed->BlinkTimes = 2; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + break; + + case LED_CTL_START_WPS: + case LED_CTL_START_WPS_BOTTON: + if(pLed1->bLedWPSBlinkInProgress) + { + pLed1->bLedWPSBlinkInProgress = FALSE; + del_timer_sync(&(pLed1->BlinkTimer)); + + pLed1->BlinkingLedState = LED_OFF; + pLed1->CurrLedState = LED_OFF; + + if(pLed1->bLedOn) + mod_timer(&(pLed1->BlinkTimer), 0); + } + + if(pLed->bLedWPSBlinkInProgress ==FALSE) + { + if(pLed->bLedNoLinkBlinkInProgress == TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if(pLed->bLedScanBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + pLed->bLedWPSBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_WPS; + if( pLed->bLedOn ) + { + pLed->BlinkingLedState = LED_OFF; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SLOWLY_INTERVAL)); + } + else + { + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + } + + } + break; + + case LED_CTL_STOP_WPS: + if(pLed->bLedWPSBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + + break; + + case LED_CTL_STOP_WPS_FAIL: + if(pLed->bLedWPSBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + + if(pLed1->bLedWPSBlinkInProgress) + del_timer_sync(&(pLed1->BlinkTimer)); + else + pLed1->bLedWPSBlinkInProgress = TRUE; + + pLed1->CurrLedState = LED_BLINK_WPS_STOP; + if( pLed1->bLedOn ) + pLed1->BlinkingLedState = LED_OFF; + else + pLed1->BlinkingLedState = LED_ON; + mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + + break; + + case LED_CTL_STOP_WPS_FAIL_OVERLAP: + if(pLed->bLedWPSBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + + pLed->bLedNoLinkBlinkInProgress = TRUE; + pLed->CurrLedState = LED_BLINK_SLOWLY; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_NO_LINK_INTERVAL_ALPHA)); + + if(pLed1->bLedWPSBlinkInProgress) + del_timer_sync(&(pLed1->BlinkTimer)); + else + pLed1->bLedWPSBlinkInProgress = TRUE; + + pLed1->CurrLedState = LED_BLINK_WPS_STOP_OVERLAP; + pLed1->BlinkTimes = 10; + if( pLed1->bLedOn ) + pLed1->BlinkingLedState = LED_OFF; + else + pLed1->BlinkingLedState = LED_ON; + mod_timer(&(pLed1->BlinkTimer), jiffies + MSECS(LED_BLINK_NORMAL_INTERVAL)); + + break; + + case LED_CTL_POWER_OFF: + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + + if( pLed->bLedNoLinkBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedNoLinkBlinkInProgress = FALSE; + } + if( pLed->bLedLinkBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedLinkBlinkInProgress = FALSE; + } + if( pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + if( pLed->bLedWPSBlinkInProgress ) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedWPSBlinkInProgress = FALSE; + } + if( pLed->bLedScanBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedScanBlinkInProgress = FALSE; + } + if( pLed->bLedStartToLinkBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedStartToLinkBlinkInProgress = FALSE; + } + + if( pLed1->bLedWPSBlinkInProgress ) + { + del_timer_sync(&(pLed1->BlinkTimer)); + pLed1->bLedWPSBlinkInProgress = FALSE; + } + + + pLed1->BlinkingLedState = LED_UNKNOWN; + SwLedOff(dev, pLed); + SwLedOff(dev, pLed1); + break; + + default: + break; + + } + + RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState); +} + + + +void +SwLedControlMode5( + struct net_device *dev, + LED_CTL_MODE LedAction +) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + PLED_819xUsb pLed = &(priv->SwLed0); + + if(priv->CustomerID == RT_CID_819x_CAMEO) + pLed = &(priv->SwLed1); + + switch(LedAction) + { + case LED_CTL_POWER_ON: + case LED_CTL_NO_LINK: + case LED_CTL_LINK: + if(pLed->CurrLedState == LED_SCAN_BLINK) + { + return; + } + pLed->CurrLedState = LED_ON; + pLed->BlinkingLedState = LED_ON; + pLed->bLedBlinkInProgress = FALSE; + mod_timer(&(pLed->BlinkTimer), 0); + break; + + case LED_CTL_SITE_SURVEY: + if((priv->ieee80211->LinkDetectInfo.bBusyTraffic) && (priv->ieee80211->state == IEEE80211_LINKED)) + ; + else if(pLed->bLedScanBlinkInProgress ==FALSE) + { + if(pLed->bLedBlinkInProgress ==TRUE) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + pLed->bLedScanBlinkInProgress = TRUE; + pLed->CurrLedState = LED_SCAN_BLINK; + pLed->BlinkTimes = 24; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_SCAN_INTERVAL_ALPHA)); + + } + break; + + case LED_CTL_TX: + case LED_CTL_RX: + if(pLed->bLedBlinkInProgress ==FALSE) + { + if(pLed->CurrLedState == LED_SCAN_BLINK) + { + return; + } + pLed->bLedBlinkInProgress = TRUE; + pLed->CurrLedState = LED_TXRX_BLINK; + pLed->BlinkTimes = 2; + if( pLed->bLedOn ) + pLed->BlinkingLedState = LED_OFF; + else + pLed->BlinkingLedState = LED_ON; + mod_timer(&(pLed->BlinkTimer), jiffies + MSECS(LED_BLINK_FASTER_INTERVAL_ALPHA)); + } + break; + + case LED_CTL_POWER_OFF: + pLed->CurrLedState = LED_OFF; + pLed->BlinkingLedState = LED_OFF; + + if( pLed->bLedBlinkInProgress) + { + del_timer_sync(&(pLed->BlinkTimer)); + pLed->bLedBlinkInProgress = FALSE; + } + + SwLedOff(dev, pLed); + break; + + default: + break; + + } + + RT_TRACE(COMP_LED, "Led %d\n", pLed->CurrLedState); +} + + +void +LedControl8192SUsb( + struct net_device *dev, + LED_CTL_MODE LedAction + ) +{ + struct r8192_priv *priv = ieee80211_priv(dev); + + if( priv->bRegUseLed == FALSE) + return; + + if (!priv->up) + return; + + if(priv->bInHctTest) + return; + + if( priv->ieee80211->eRFPowerState != eRfOn && + (LedAction == LED_CTL_TX || LedAction == LED_CTL_RX || + LedAction == LED_CTL_SITE_SURVEY || + LedAction == LED_CTL_LINK || + LedAction == LED_CTL_NO_LINK || + LedAction == LED_CTL_POWER_ON) ) + { + return; + } + + switch(priv->LedStrategy) + { + case SW_LED_MODE0: + break; + + case SW_LED_MODE1: + SwLedControlMode1(dev, LedAction); + break; + case SW_LED_MODE2: + SwLedControlMode2(dev, LedAction); + break; + + case SW_LED_MODE3: + SwLedControlMode3(dev, LedAction); + break; + + case SW_LED_MODE4: + SwLedControlMode4(dev, LedAction); + break; + + case SW_LED_MODE5: + SwLedControlMode5(dev, LedAction); + break; + + default: + break; + } + + RT_TRACE(COMP_LED, "LedStrategy:%d, LedAction %d\n", priv->LedStrategy,LedAction); +} + + diff --git a/drivers/staging/rtl8192su/r8192SU_led.h b/drivers/staging/rtl8192su/r8192SU_led.h new file mode 100644 index 0000000..acedae4 --- /dev/null +++ b/drivers/staging/rtl8192su/r8192SU_led.h @@ -0,0 +1,93 @@ +/****************************************************************************** + * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * The full GNU General Public License is included in this distribution in the + * file called LICENSE. + * + * Contact Information: + * wlanfae +******************************************************************************/ +#ifndef __INC_HAL8192USBLED_H +#define __INC_HAL8192USBLED_H + +#include +#include + +typedef enum _LED_STATE_819xUsb{ + LED_UNKNOWN = 0, + LED_ON = 1, + LED_OFF = 2, + LED_BLINK_NORMAL = 3, + LED_BLINK_SLOWLY = 4, + LED_POWER_ON_BLINK = 5, + LED_SCAN_BLINK = 6, + LED_NO_LINK_BLINK = 7, + LED_BLINK_StartToBlink = 8, + LED_BLINK_WPS = 9, + LED_TXRX_BLINK = 10, + LED_BLINK_WPS_STOP = 11, + LED_BLINK_WPS_STOP_OVERLAP = 12, + +}LED_STATE_819xUsb; + +#define IS_LED_WPS_BLINKING(_LED_819xUsb) (((PLED_819xUsb)_LED_819xUsb)->CurrLedState==LED_BLINK_WPS \ + || ((PLED_819xUsb)_LED_819xUsb)->CurrLedState==LED_BLINK_WPS_STOP \ + || ((PLED_819xUsb)_LED_819xUsb)->bLedWPSBlinkInProgress) + +#define IS_LED_BLINKING(_LED_819xUsb) (((PLED_819xUsb)_LED_819xUsb)->bLedWPSBlinkInProgress \ + ||((PLED_819xUsb)_LED_819xUsb)->bLedScanBlinkInProgress) + +typedef enum _LED_PIN_819xUsb{ + LED_PIN_GPIO0, + LED_PIN_LED0, + LED_PIN_LED1 +}LED_PIN_819xUsb; + +typedef enum _LED_STRATEGY_819xUsb{ + SW_LED_MODE0, /* SW control 1 LED via GPIO0. It is default option. */ + SW_LED_MODE1, /* SW control for PCI Express */ + SW_LED_MODE2, /* SW control for Cameo. */ + SW_LED_MODE3, /* SW contorl for RunTop. */ + SW_LED_MODE4, /* SW control for Netcore */ + SW_LED_MODE5, + HW_LED, /* HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes) */ +}LED_STRATEGY_819xUsb, *PLED_STRATEGY_819xUsb; + +typedef struct _LED_819xUsb{ + struct net_device *dev; + + LED_PIN_819xUsb LedPin; + + LED_STATE_819xUsb CurrLedState; + bool bLedOn; + + bool bSWLedCtrl; + + bool bLedBlinkInProgress; + bool bLedNoLinkBlinkInProgress; + bool bLedLinkBlinkInProgress; + bool bLedStartToLinkBlinkInProgress; + bool bLedScanBlinkInProgress; + bool bLedWPSBlinkInProgress; + + u32 BlinkTimes; + LED_STATE_819xUsb BlinkingLedState; + + struct timer_list BlinkTimer; +} LED_819xUsb, *PLED_819xUsb; + +void InitSwLeds(struct net_device *dev); +void DeInitSwLeds(struct net_device *dev); +void LedControl8192SUsb(struct net_device *dev,LED_CTL_MODE LedAction); + +#endif + diff --git a/drivers/staging/rtl8192su/r8192U.h b/drivers/staging/rtl8192su/r8192U.h index 4112e14..eccf447 100644 --- a/drivers/staging/rtl8192su/r8192U.h +++ b/drivers/staging/rtl8192su/r8192U.h @@ -43,6 +43,7 @@ #include "ieee80211/ieee80211.h" #include "r8192S_firmware.h" +#include "r8192SU_led.h" /* EEPROM defs for use with linux/eeprom_93cx6.h */ #define RTL819X_EEPROM_CMD_READ (1 << 0) @@ -1067,19 +1068,6 @@ typedef enum _RT_CUSTOMER_ID RT_CID_PRONET = 13, }RT_CUSTOMER_ID, *PRT_CUSTOMER_ID; -//================================================================================ -// LED customization. -//================================================================================ - -typedef enum _LED_STRATEGY_8190{ - SW_LED_MODE0, // SW control 1 LED via GPIO0. It is default option. - SW_LED_MODE1, // SW control for PCI Express - SW_LED_MODE2, // SW control for Cameo. - SW_LED_MODE3, // SW contorl for RunTop. - SW_LED_MODE4, // SW control for Netcore - HW_LED, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes) -}LED_STRATEGY_8190, *PLED_STRATEGY_8190; - typedef enum _RESET_TYPE { RESET_TYPE_NORESET = 0x00, RESET_TYPE_NORMAL = 0x01, @@ -1131,7 +1119,7 @@ typedef struct r8192_priv u8 eeprom_SubCustomerID; u8 eeprom_ChannelPlan; RT_CUSTOMER_ID CustomerID; - LED_STRATEGY_8190 LedStrategy; + LED_STRATEGY_819xUsb LedStrategy; u8 txqueue_to_outpipemap[9]; u8 RtOutPipes[16]; u8 RtInPipes[16]; @@ -1501,8 +1489,17 @@ typedef struct r8192_priv u8 MinSpaceCfg; u16 rf_pathmap; -//#endif + /* added for led control */ + PLED_819xUsb pLed; + LED_819xUsb SwLed0; + LED_819xUsb SwLed1; + u8 bRegUseLed; + struct work_struct BlinkWorkItem; + /* added for led control */ + u16 FwCmdIOMap; + u32 FwCmdIOParam; + u8 DMFlag; -- cgit v0.10.2 From 3dfe08e6073f40a742fe3e5d6b43ca8184c55722 Mon Sep 17 00:00:00 2001 From: Florian Schilhabel Date: Thu, 13 May 2010 13:55:52 +0200 Subject: Staging: rtl8192su: led update derived from Realteks driver. leds are now working. Signed-off-by: Florian Schilhabel Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8192su/r8192U_core.c b/drivers/staging/rtl8192su/r8192U_core.c index 70a8087..78af0d7 100644 --- a/drivers/staging/rtl8192su/r8192U_core.c +++ b/drivers/staging/rtl8192su/r8192U_core.c @@ -1219,6 +1219,7 @@ void rtl8192_set_mode(struct net_device *dev,int mode) void rtl8192_update_msr(struct net_device *dev) { struct r8192_priv *priv = ieee80211_priv(dev); + LED_CTL_MODE LedAction = LED_CTL_NO_LINK; u8 msr; msr = read_nic_byte(dev, MSR); @@ -1229,19 +1230,23 @@ void rtl8192_update_msr(struct net_device *dev) * this is intentional and make sense for ad-hoc and * master (see the create BSS/IBSS func) */ - if (priv->ieee80211->state == IEEE80211_LINKED){ + if (priv->ieee80211->state == IEEE80211_LINKED) { - if (priv->ieee80211->iw_mode == IW_MODE_INFRA) + if (priv->ieee80211->iw_mode == IW_MODE_INFRA) { msr |= (MSR_LINK_MANAGED<ieee80211->iw_mode == IW_MODE_ADHOC) + LedAction = LED_CTL_LINK; + } else if (priv->ieee80211->iw_mode == IW_MODE_ADHOC) msr |= (MSR_LINK_ADHOC<ieee80211->iw_mode == IW_MODE_MASTER) msr |= (MSR_LINK_MASTER<ieee80211->LedControlHandler != NULL) + priv->ieee80211->LedControlHandler(dev, LedAction); } void rtl8192_set_chan(struct net_device *dev,short ch) @@ -2154,15 +2159,13 @@ short rtl8192SU_tx(struct net_device *dev, struct sk_buff* skb) struct r8192_priv *priv = ieee80211_priv(dev); cb_desc *tcb_desc = (cb_desc *)(skb->cb + MAX_DEV_ADDR_SIZE); tx_desc_819x_usb *tx_desc = (tx_desc_819x_usb *)skb->data; - //tx_fwinfo_819x_usb *tx_fwinfo = (tx_fwinfo_819x_usb *)(skb->data + USB_HWDESC_HEADER_LEN);//92su del struct usb_device *udev = priv->udev; int pend; int status; struct urb *tx_urb = NULL, *tx_urb_zero = NULL; - //int urb_len; unsigned int idx_pipe; - u16 MPDUOverhead = 0; - //RT_DEBUG_DATA(COMP_SEND, tcb_desc, sizeof(cb_desc)); + u16 MPDUOverhead = 0; + u16 type = 0; pend = atomic_read(&priv->tx_pending[tcb_desc->queue_index]); /* we are locked here so the two atomic_read and inc are executed @@ -2359,6 +2362,11 @@ short rtl8192SU_tx(struct net_device *dev, struct sk_buff* skb) skb->data, skb->len, rtl8192_tx_isr, skb); + if (type == IEEE80211_FTYPE_DATA) { + if (priv->ieee80211->LedControlHandler != NULL) + priv->ieee80211->LedControlHandler(dev, LED_CTL_TX); + } + status = usb_submit_urb(tx_urb, GFP_ATOMIC); if (!status) { /* @@ -5487,6 +5495,9 @@ void rtl819x_watchdog_wqcallback(struct work_struct *work) priv->ieee80211->current_network.bssid); ieee->is_roaming = true; priv->ieee80211->link_change(dev); + if(ieee->LedControlHandler != NULL) + ieee->LedControlHandler(ieee->dev, + LED_CTL_START_TO_LINK); queue_work(priv->ieee80211->wq, &priv->ieee80211->associate_procedure_wq); } -- cgit v0.10.2 From fd4dc88e46c4d9dd845ffef50a975ceea110fd85 Mon Sep 17 00:00:00 2001 From: Haiyang Zhang Date: Thu, 13 May 2010 15:56:30 +0000 Subject: staging: hv: Fix error checking in channel.c Fixed errors in return value checking code, which caused vmbus channel not functioning. Signed-off-by: Haiyang Zhang Signed-off-by: Hank Janssen Cc: Bill Pemberton Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/channel.c b/drivers/staging/hv/channel.c index 12c351e..f047c5a 100644 --- a/drivers/staging/hv/channel.c +++ b/drivers/staging/hv/channel.c @@ -204,13 +204,13 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, RecvRingBufferSize) >> PAGE_SHIFT; ret = RingBufferInit(&NewChannel->Outbound, out, SendRingBufferSize); - if (!ret) { + if (ret != 0) { err = ret; goto errorout; } ret = RingBufferInit(&NewChannel->Inbound, in, RecvRingBufferSize); - if (!ret) { + if (ret != 0) { err = ret; goto errorout; } @@ -228,7 +228,7 @@ int VmbusChannelOpen(struct vmbus_channel *NewChannel, u32 SendRingBufferSize, RecvRingBufferSize, &NewChannel->RingBufferGpadlHandle); - if (!ret) { + if (ret != 0) { err = ret; goto errorout; } @@ -569,7 +569,7 @@ int VmbusChannelEstablishGpadl(struct vmbus_channel *Channel, void *Kbuffer, ret = VmbusPostMessage(gpadlBody, subMsgInfo->MessageSize - sizeof(*subMsgInfo)); - if (!ret) + if (ret != 0) goto Cleanup; } -- cgit v0.10.2 From bbfb56520c8da666383c08220985495ff918d4ad Mon Sep 17 00:00:00 2001 From: "Prashant P. Shah" Date: Thu, 13 May 2010 23:08:43 +0530 Subject: Staging: rtl8187se: fixed space style issues in r8180_core.c This is a patch to the r8180_core.c file that fixes the space style issues found by the checkpatch.pl tool. Signed-off-by: Prashant P. Shah Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8187se/r8180_core.c b/drivers/staging/rtl8187se/r8180_core.c index 84a745b..37be5ae 100644 --- a/drivers/staging/rtl8187se/r8180_core.c +++ b/drivers/staging/rtl8187se/r8180_core.c @@ -66,23 +66,23 @@ static int hwseqnum = 0; static int hwwep = 0; static int channels = 0x3fff; -#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 ) -#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5]) +#define eqMacAddr(a, b) (((a)[0] == (b)[0] && (a)[1] == (b)[1] && (a)[2] == (b)[2] && (a)[3] == (b)[3] && (a)[4] == (b)[4] && (a)[5] == (b)[5]) ? 1 : 0) +#define cpMacAddr(des, src) ((des)[0] = (src)[0], (des)[1] = (src)[1], (des)[2] = (src)[2], (des)[3] = (src)[3], (des)[4] = (src)[4], (des)[5] = (src)[5]) MODULE_LICENSE("GPL"); MODULE_DEVICE_TABLE(pci, rtl8180_pci_id_tbl); MODULE_AUTHOR("Andrea Merello "); MODULE_DESCRIPTION("Linux driver for Realtek RTL8180 / RTL8185 WiFi cards"); -module_param(ifname, charp, S_IRUGO|S_IWUSR ); -module_param(hwseqnum,int, S_IRUGO|S_IWUSR); -module_param(hwwep,int, S_IRUGO|S_IWUSR); -module_param(channels,int, S_IRUGO|S_IWUSR); +module_param(ifname, charp, S_IRUGO|S_IWUSR); +module_param(hwseqnum, int, S_IRUGO|S_IWUSR); +module_param(hwwep, int, S_IRUGO|S_IWUSR); +module_param(channels, int, S_IRUGO|S_IWUSR); -MODULE_PARM_DESC(devname," Net interface name, wlan%d=default"); -MODULE_PARM_DESC(hwseqnum," Try to use hardware 802.11 header sequence numbers. Zero=default"); -MODULE_PARM_DESC(hwwep," Try to use hardware WEP support. Still broken and not available on all cards"); -MODULE_PARM_DESC(channels," Channel bitmask for specific locales. NYI"); +MODULE_PARM_DESC(devname, " Net interface name, wlan%d=default"); +MODULE_PARM_DESC(hwseqnum, " Try to use hardware 802.11 header sequence numbers. Zero=default"); +MODULE_PARM_DESC(hwwep, " Try to use hardware WEP support. Still broken and not available on all cards"); +MODULE_PARM_DESC(channels, " Channel bitmask for specific locales. NYI"); static int __devinit rtl8180_pci_probe(struct pci_dev *pdev, @@ -90,7 +90,7 @@ static int __devinit rtl8180_pci_probe(struct pci_dev *pdev, static void __devexit rtl8180_pci_remove(struct pci_dev *pdev); -static void rtl8180_shutdown (struct pci_dev *pdev) +static void rtl8180_shutdown(struct pci_dev *pdev) { struct net_device *dev = pci_get_drvdata(pdev); if (dev->netdev_ops->ndo_stop) @@ -181,19 +181,19 @@ u16 read_nic_word(struct net_device *dev, int x) return readw((u8 *)dev->mem_start + x); } -void write_nic_byte(struct net_device *dev, int x,u8 y) +void write_nic_byte(struct net_device *dev, int x, u8 y) { writeb(y, (u8 *)dev->mem_start + x); udelay(20); } -void write_nic_dword(struct net_device *dev, int x,u32 y) +void write_nic_dword(struct net_device *dev, int x, u32 y) { writel(y, (u8 *)dev->mem_start + x); udelay(20); } -void write_nic_word(struct net_device *dev, int x,u16 y) +void write_nic_word(struct net_device *dev, int x, u16 y) { writew(y, (u8 *)dev->mem_start + x); udelay(20); @@ -201,7 +201,7 @@ void write_nic_word(struct net_device *dev, int x,u16 y) inline void force_pci_posting(struct net_device *dev) { - read_nic_byte(dev,EPROM_CMD); + read_nic_byte(dev, EPROM_CMD); mb(); } @@ -220,7 +220,7 @@ static int proc_get_registers(char *page, char **start, { struct net_device *dev = data; int len = 0; - int i,n; + int i, n; int max = 0xff; /* This dump the current register page */ @@ -231,7 +231,7 @@ static int proc_get_registers(char *page, char **start, len += snprintf(page + len, count - len, "%2x ", read_nic_byte(dev, n)); } - len += snprintf(page + len, count - len,"\n"); + len += snprintf(page + len, count - len, "\n"); *eof = 1; return len; @@ -287,7 +287,7 @@ static int proc_get_stats_tx(char *page, char **start, int len = 0; unsigned long totalOK; - totalOK=priv->stats.txnpokint+priv->stats.txhpokint+priv->stats.txlpokint; + totalOK = priv->stats.txnpokint+priv->stats.txhpokint+priv->stats.txlpokint; len += snprintf(page + len, count - len, "TX OK: %lu\n" "TX Error: %lu\n" @@ -308,7 +308,7 @@ static int proc_get_stats_tx(char *page, char **start, void rtl8180_proc_module_init(void) { DMESG("Initializing proc filesystem"); - rtl8180_proc=create_proc_entry(RTL8180_MODULE_NAME, S_IFDIR, init_net.proc_net); + rtl8180_proc = create_proc_entry(RTL8180_MODULE_NAME, S_IFDIR, init_net.proc_net); } void rtl8180_proc_module_remove(void) @@ -385,81 +385,81 @@ short buffer_add(struct buffer **buffer, u32 *buf, dma_addr_t dma, { struct buffer *tmp; - if(! *buffer){ + if (!*buffer) { - *buffer = kmalloc(sizeof(struct buffer),GFP_KERNEL); + *buffer = kmalloc(sizeof(struct buffer), GFP_KERNEL); if (*buffer == NULL) { DMESGE("Failed to kmalloc head of TX/RX struct"); return -1; } - (*buffer)->next=*buffer; - (*buffer)->buf=buf; - (*buffer)->dma=dma; - if(bufferhead !=NULL) + (*buffer)->next = *buffer; + (*buffer)->buf = buf; + (*buffer)->dma = dma; + if (bufferhead != NULL) (*bufferhead) = (*buffer); return 0; } - tmp=*buffer; + tmp = *buffer; - while(tmp->next!=(*buffer)) tmp=tmp->next; - tmp->next = kmalloc(sizeof(struct buffer),GFP_KERNEL); + while (tmp->next != (*buffer)) + tmp = tmp->next; + tmp->next = kmalloc(sizeof(struct buffer), GFP_KERNEL); if (tmp->next == NULL) { DMESGE("Failed to kmalloc TX/RX struct"); return -1; } - tmp->next->buf=buf; - tmp->next->dma=dma; - tmp->next->next=*buffer; + tmp->next->buf = buf; + tmp->next->dma = dma; + tmp->next->next = *buffer; return 0; } -void buffer_free(struct net_device *dev,struct buffer **buffer,int len,short -consistent) +void buffer_free(struct net_device *dev, struct buffer **buffer, int len, short consistent) { - struct buffer *tmp,*next; + struct buffer *tmp, *next; struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - struct pci_dev *pdev=priv->pdev; + struct pci_dev *pdev = priv->pdev; if (!*buffer) return; tmp = *buffer; - do{ - next=tmp->next; - if(consistent){ - pci_free_consistent(pdev,len, - tmp->buf,tmp->dma); - }else{ + do { + next = tmp->next; + if (consistent) { + pci_free_consistent(pdev, len, + tmp->buf, tmp->dma); + } else { pci_unmap_single(pdev, tmp->dma, - len,PCI_DMA_FROMDEVICE); + len, PCI_DMA_FROMDEVICE); kfree(tmp->buf); } kfree(tmp); tmp = next; } - while(next != *buffer); + while (next != *buffer); - *buffer=NULL; + *buffer = NULL; } void print_buffer(u32 *buffer, int len) { int i; - u8 *buf =(u8*)buffer; + u8 *buf = (u8 *)buffer; - printk("ASCII BUFFER DUMP (len: %x):\n",len); + printk("ASCII BUFFER DUMP (len: %x):\n", len); - for(i=0;itxmapringhead; - tail = priv->txmapringtail; - break; - case BK_PRIORITY: - head = priv->txbkpringhead; - tail = priv->txbkpringtail; - break; - case BE_PRIORITY: - head = priv->txbepringhead; - tail = priv->txbepringtail; - break; - case VI_PRIORITY: - head = priv->txvipringhead; - tail = priv->txvipringtail; - break; - case VO_PRIORITY: - head = priv->txvopringhead; - tail = priv->txvopringtail; - break; - case HI_PRIORITY: - head = priv->txhpringhead; - tail = priv->txhpringtail; - break; - default: - return -1; + switch (priority) { + case MANAGE_PRIORITY: + head = priv->txmapringhead; + tail = priv->txmapringtail; + break; + case BK_PRIORITY: + head = priv->txbkpringhead; + tail = priv->txbkpringtail; + break; + case BE_PRIORITY: + head = priv->txbepringhead; + tail = priv->txbepringtail; + break; + case VI_PRIORITY: + head = priv->txvipringhead; + tail = priv->txvipringtail; + break; + case VO_PRIORITY: + head = priv->txvopringhead; + tail = priv->txvopringtail; + break; + case HI_PRIORITY: + head = priv->txhpringhead; + tail = priv->txhpringtail; + break; + default: + return -1; } if (head <= tail) @@ -531,7 +531,7 @@ short check_nic_enought_desc(struct net_device *dev, int priority) * between the tail and the head */ - return (required+2 < get_curr_tx_free_desc(dev,priority)); + return (required+2 < get_curr_tx_free_desc(dev, priority)); } void fix_tx_fifo(struct net_device *dev) @@ -540,45 +540,45 @@ void fix_tx_fifo(struct net_device *dev) u32 *tmp; int i; - for (tmp=priv->txmapring, i=0; + for (tmp = priv->txmapring, i = 0; i < priv->txringcount; - tmp+=8, i++){ - *tmp = *tmp &~ (1<<31); + tmp += 8, i++) { + *tmp = *tmp & ~(1<<31); } - for (tmp=priv->txbkpring, i=0; + for (tmp = priv->txbkpring, i = 0; i < priv->txringcount; - tmp+=8, i++) { - *tmp = *tmp &~ (1<<31); + tmp += 8, i++) { + *tmp = *tmp & ~(1<<31); } - for (tmp=priv->txbepring, i=0; + for (tmp = priv->txbepring, i = 0; i < priv->txringcount; - tmp+=8, i++){ - *tmp = *tmp &~ (1<<31); + tmp += 8, i++) { + *tmp = *tmp & ~(1<<31); } - for (tmp=priv->txvipring, i=0; + for (tmp = priv->txvipring, i = 0; i < priv->txringcount; - tmp+=8, i++) { - *tmp = *tmp &~ (1<<31); + tmp += 8, i++) { + *tmp = *tmp & ~(1<<31); } - for (tmp=priv->txvopring, i=0; + for (tmp = priv->txvopring, i = 0; i < priv->txringcount; - tmp+=8, i++){ - *tmp = *tmp &~ (1<<31); + tmp += 8, i++) { + *tmp = *tmp & ~(1<<31); } - for (tmp=priv->txhpring, i=0; + for (tmp = priv->txhpring, i = 0; i < priv->txringcount; - tmp+=8,i++){ - *tmp = *tmp &~ (1<<31); + tmp += 8, i++) { + *tmp = *tmp & ~(1<<31); } - for (tmp=priv->txbeaconring, i=0; + for (tmp = priv->txbeaconring, i = 0; i < priv->txbeaconcount; - tmp+=8, i++){ - *tmp = *tmp &~ (1<<31); + tmp += 8, i++) { + *tmp = *tmp & ~(1<<31); } priv->txmapringtail = priv->txmapring; @@ -622,18 +622,18 @@ void fix_rx_fifo(struct net_device *dev) rx_desc_size = 8; // 4*8 = 32 bytes - for (tmp=priv->rxring, rxbuf=priv->rxbufferhead; + for (tmp = priv->rxring, rxbuf = priv->rxbufferhead; (tmp < (priv->rxring)+(priv->rxringcount)*rx_desc_size); - tmp+=rx_desc_size,rxbuf=rxbuf->next){ + tmp += rx_desc_size, rxbuf = rxbuf->next) { *(tmp+2) = rxbuf->dma; - *tmp=*tmp &~ 0xfff; - *tmp=*tmp | priv->rxbuffersize; + *tmp = *tmp & ~0xfff; + *tmp = *tmp | priv->rxbuffersize; *tmp |= (1<<31); } - priv->rxringtail=priv->rxring; - priv->rxbuffer=priv->rxbufferhead; - priv->rx_skb_complete=1; + priv->rxringtail = priv->rxring; + priv->rxbuffer = priv->rxbufferhead; + priv->rx_skb_complete = 1; set_nic_rxring(dev); } @@ -678,20 +678,18 @@ void rtl8180_RSSI_calc(struct net_device *dev, u8 *rssi, u8 *qual) if (q <= 0x4e) { temp = QUALITY_MAP[q]; } else { - if( q & 0x80 ) { + if (q & 0x80) temp = 0x32; - } else { + else temp = 1; - } } *qual = temp; temp2 = *rssi; - if ( _rssi < 0x64 ){ - if ( _rssi == 0 ) { + if (_rssi < 0x64) { + if (_rssi == 0) *rssi = 1; - } } else { *rssi = 0x64; } @@ -704,27 +702,27 @@ void rtl8180_irq_enable(struct net_device *dev) struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); priv->irq_enabled = 1; - write_nic_word(dev,INTA_MASK, priv->irq_mask); + write_nic_word(dev, INTA_MASK, priv->irq_mask); } void rtl8180_irq_disable(struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - write_nic_dword(dev,IMR,0); + write_nic_dword(dev, IMR, 0); force_pci_posting(dev); priv->irq_enabled = 0; } -void rtl8180_set_mode(struct net_device *dev,int mode) +void rtl8180_set_mode(struct net_device *dev, int mode) { u8 ecmd; - ecmd=read_nic_byte(dev, EPROM_CMD); - ecmd=ecmd &~ EPROM_CMD_OPERATING_MODE_MASK; - ecmd=ecmd | (mode<ieee80211->state == IEEE80211_LINKED) - { - if(priv->ieee80211->iw_mode == IW_MODE_ADHOC) + if (priv->ieee80211->state == IEEE80211_LINKED) { + if (priv->ieee80211->iw_mode == IW_MODE_ADHOC) msr |= (MSR_LINK_ADHOC<ieee80211->iw_mode == IW_MODE_MASTER) msr |= (MSR_LINK_MASTER<chan=ch; - priv->rf_set_chan(dev,priv->chan); + priv->chan = ch; + priv->rf_set_chan(dev, priv->chan); } void rtl8180_rx_enable(struct net_device *dev) @@ -783,8 +780,8 @@ void rtl8180_rx_enable(struct net_device *dev) /* for now we accept data, management & ctl frame*/ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - rxconf=read_nic_dword(dev,RX_CONF); - rxconf = rxconf &~ MAC_FILTER_MASK; + rxconf = read_nic_dword(dev, RX_CONF); + rxconf = rxconf & ~MAC_FILTER_MASK; rxconf = rxconf | (1<flags & IFF_PROMISC) DMESG("NIC in promisc mode"); - if(priv->ieee80211->iw_mode == IW_MODE_MONITOR || \ - dev->flags & IFF_PROMISC){ + if (priv->ieee80211->iw_mode == IW_MODE_MONITOR || \ + dev->flags & IFF_PROMISC) { rxconf = rxconf | (1<ieee80211->iw_mode == IW_MODE_MONITOR){ + if (priv->ieee80211->iw_mode == IW_MODE_MONITOR) { rxconf = rxconf | (1<crcmon == 1 && priv->ieee80211->iw_mode == IW_MODE_MONITOR) + if (priv->crcmon == 1 && priv->ieee80211->iw_mode == IW_MODE_MONITOR) rxconf = rxconf | (1<retry_data<retry_rts<hw_plcp_len) txconf = txconf & ~TCR_PLCP_LEN; else txconf = txconf | TCR_PLCP_LEN; - txconf = txconf &~ TCR_MXDMA_MASK; + txconf = txconf & ~TCR_MXDMA_MASK; txconf = txconf | (TCR_MXDMA_2048<dma_poll_stop_mask &= ~(TPPOLLSTOP_BQ); - write_nic_byte(dev,TPPollStop, priv->dma_poll_mask); - rtl8180_set_mode(dev,EPROM_CMD_NORMAL); + write_nic_byte(dev, TPPollStop, priv->dma_poll_mask); + rtl8180_set_mode(dev, EPROM_CMD_NORMAL); } void rtl8180_beacon_tx_disable(struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - rtl8180_set_mode(dev,EPROM_CMD_CONFIG); + rtl8180_set_mode(dev, EPROM_CMD_CONFIG); priv->dma_poll_stop_mask |= TPPOLLSTOP_BQ; - write_nic_byte(dev,TPPollStop, priv->dma_poll_stop_mask); - rtl8180_set_mode(dev,EPROM_CMD_NORMAL); + write_nic_byte(dev, TPPollStop, priv->dma_poll_stop_mask); + rtl8180_set_mode(dev, EPROM_CMD_NORMAL); } @@ -940,13 +937,13 @@ void rtl8180_rtx_disable(struct net_device *dev) u8 cmd; struct r8180_priv *priv = ieee80211_priv(dev); - cmd=read_nic_byte(dev,CMD); - write_nic_byte(dev, CMD, cmd &~ \ + cmd = read_nic_byte(dev, CMD); + write_nic_byte(dev, CMD, cmd & ~\ ((1<rx_skb_complete) + if (!priv->rx_skb_complete) dev_kfree_skb_any(priv->rx_skb); } @@ -961,11 +958,11 @@ short alloc_tx_desc_ring(struct net_device *dev, int bufsize, int count, struct pci_dev *pdev = priv->pdev; void *buf; - if((bufsize & 0xfff) != bufsize) { - DMESGE ("TX buffer allocation too large"); + if ((bufsize & 0xfff) != bufsize) { + DMESGE("TX buffer allocation too large"); return 0; } - desc = (u32*)pci_alloc_consistent(pdev, + desc = (u32 *)pci_alloc_consistent(pdev, sizeof(u32)*8*count+256, &dma_desc); if (desc == NULL) return -1; @@ -984,90 +981,90 @@ short alloc_tx_desc_ring(struct net_device *dev, int bufsize, int count, if (buf == NULL) return -ENOMEM; - switch(addr) { + switch (addr) { case TX_MANAGEPRIORITY_RING_ADDR: - if(-1 == buffer_add(&(priv->txmapbufs),buf,dma_tmp,NULL)){ + if (-1 == buffer_add(&(priv->txmapbufs), buf, dma_tmp, NULL)) { DMESGE("Unable to allocate mem for buffer NP"); return -ENOMEM; } break; case TX_BKPRIORITY_RING_ADDR: - if(-1 == buffer_add(&(priv->txbkpbufs),buf,dma_tmp,NULL)){ + if (-1 == buffer_add(&(priv->txbkpbufs), buf, dma_tmp, NULL)) { DMESGE("Unable to allocate mem for buffer LP"); return -ENOMEM; } break; case TX_BEPRIORITY_RING_ADDR: - if(-1 == buffer_add(&(priv->txbepbufs),buf,dma_tmp,NULL)){ + if (-1 == buffer_add(&(priv->txbepbufs), buf, dma_tmp, NULL)) { DMESGE("Unable to allocate mem for buffer NP"); return -ENOMEM; } break; case TX_VIPRIORITY_RING_ADDR: - if(-1 == buffer_add(&(priv->txvipbufs),buf,dma_tmp,NULL)){ + if (-1 == buffer_add(&(priv->txvipbufs), buf, dma_tmp, NULL)) { DMESGE("Unable to allocate mem for buffer LP"); return -ENOMEM; } break; case TX_VOPRIORITY_RING_ADDR: - if(-1 == buffer_add(&(priv->txvopbufs),buf,dma_tmp,NULL)){ + if (-1 == buffer_add(&(priv->txvopbufs), buf, dma_tmp, NULL)) { DMESGE("Unable to allocate mem for buffer NP"); return -ENOMEM; } break; case TX_HIGHPRIORITY_RING_ADDR: - if(-1 == buffer_add(&(priv->txhpbufs),buf,dma_tmp,NULL)){ + if (-1 == buffer_add(&(priv->txhpbufs), buf, dma_tmp, NULL)) { DMESGE("Unable to allocate mem for buffer HP"); return -ENOMEM; } break; case TX_BEACON_RING_ADDR: - if(-1 == buffer_add(&(priv->txbeaconbufs),buf,dma_tmp,NULL)){ - DMESGE("Unable to allocate mem for buffer BP"); + if (-1 == buffer_add(&(priv->txbeaconbufs), buf, dma_tmp, NULL)) { + DMESGE("Unable to allocate mem for buffer BP"); return -ENOMEM; } break; } - *tmp = *tmp &~ (1<<31); // descriptor empty, owned by the drv + *tmp = *tmp & ~(1<<31); // descriptor empty, owned by the drv *(tmp+2) = (u32)dma_tmp; *(tmp+3) = bufsize; - if(i+1txmapringdma=dma_desc; - priv->txmapring=desc; + priv->txmapringdma = dma_desc; + priv->txmapring = desc; break; case TX_BKPRIORITY_RING_ADDR: - priv->txbkpringdma=dma_desc; - priv->txbkpring=desc; + priv->txbkpringdma = dma_desc; + priv->txbkpring = desc; break; case TX_BEPRIORITY_RING_ADDR: - priv->txbepringdma=dma_desc; - priv->txbepring=desc; + priv->txbepringdma = dma_desc; + priv->txbepring = desc; break; case TX_VIPRIORITY_RING_ADDR: - priv->txvipringdma=dma_desc; - priv->txvipring=desc; + priv->txvipringdma = dma_desc; + priv->txvipring = desc; break; case TX_VOPRIORITY_RING_ADDR: - priv->txvopringdma=dma_desc; - priv->txvopring=desc; + priv->txvopringdma = dma_desc; + priv->txvopring = desc; break; case TX_HIGHPRIORITY_RING_ADDR: - priv->txhpringdma=dma_desc; - priv->txhpring=desc; + priv->txhpringdma = dma_desc; + priv->txhpring = desc; break; case TX_BEACON_RING_ADDR: - priv->txbeaconringdma=dma_desc; - priv->txbeaconring=desc; + priv->txbeaconringdma = dma_desc; + priv->txbeaconring = desc; break; } @@ -1078,37 +1075,37 @@ short alloc_tx_desc_ring(struct net_device *dev, int bufsize, int count, void free_tx_desc_rings(struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - struct pci_dev *pdev=priv->pdev; + struct pci_dev *pdev = priv->pdev; int count = priv->txringcount; pci_free_consistent(pdev, sizeof(u32)*8*count+256, priv->txmapring, priv->txmapringdma); - buffer_free(dev,&(priv->txmapbufs),priv->txbuffsize,1); + buffer_free(dev, &(priv->txmapbufs), priv->txbuffsize, 1); pci_free_consistent(pdev, sizeof(u32)*8*count+256, priv->txbkpring, priv->txbkpringdma); - buffer_free(dev,&(priv->txbkpbufs),priv->txbuffsize,1); + buffer_free(dev, &(priv->txbkpbufs), priv->txbuffsize, 1); pci_free_consistent(pdev, sizeof(u32)*8*count+256, priv->txbepring, priv->txbepringdma); - buffer_free(dev,&(priv->txbepbufs),priv->txbuffsize,1); + buffer_free(dev, &(priv->txbepbufs), priv->txbuffsize, 1); pci_free_consistent(pdev, sizeof(u32)*8*count+256, priv->txvipring, priv->txvipringdma); - buffer_free(dev,&(priv->txvipbufs),priv->txbuffsize,1); + buffer_free(dev, &(priv->txvipbufs), priv->txbuffsize, 1); pci_free_consistent(pdev, sizeof(u32)*8*count+256, priv->txvopring, priv->txvopringdma); - buffer_free(dev,&(priv->txvopbufs),priv->txbuffsize,1); + buffer_free(dev, &(priv->txvopbufs), priv->txbuffsize, 1); pci_free_consistent(pdev, sizeof(u32)*8*count+256, priv->txhpring, priv->txhpringdma); - buffer_free(dev,&(priv->txhpbufs),priv->txbuffsize,1); + buffer_free(dev, &(priv->txhpbufs), priv->txbuffsize, 1); count = priv->txbeaconcount; pci_free_consistent(pdev, sizeof(u32)*8*count+256, priv->txbeaconring, priv->txbeaconringdma); - buffer_free(dev,&(priv->txbeaconbufs),priv->txbuffsize,1); + buffer_free(dev, &(priv->txbeaconbufs), priv->txbuffsize, 1); } void free_rx_desc_ring(struct net_device *dev) @@ -1120,7 +1117,7 @@ void free_rx_desc_ring(struct net_device *dev) pci_free_consistent(pdev, sizeof(u32)*8*count+256, priv->rxring, priv->rxringdma); - buffer_free(dev,&(priv->rxbuffer),priv->rxbuffersize,0); + buffer_free(dev, &(priv->rxbuffer), priv->rxbuffersize, 0); } short alloc_rx_desc_ring(struct net_device *dev, u16 bufsize, int count) @@ -1128,20 +1125,20 @@ short alloc_rx_desc_ring(struct net_device *dev, u16 bufsize, int count) int i; u32 *desc; u32 *tmp; - dma_addr_t dma_desc,dma_tmp; + dma_addr_t dma_desc, dma_tmp; struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - struct pci_dev *pdev=priv->pdev; + struct pci_dev *pdev = priv->pdev; void *buf; u8 rx_desc_size; rx_desc_size = 8; // 4*8 = 32 bytes - if((bufsize & 0xfff) != bufsize){ - DMESGE ("RX buffer allocation too large"); + if ((bufsize & 0xfff) != bufsize) { + DMESGE("RX buffer allocation too large"); return -1; } - desc = (u32*)pci_alloc_consistent(pdev,sizeof(u32)*rx_desc_size*count+256, + desc = (u32 *)pci_alloc_consistent(pdev, sizeof(u32)*rx_desc_size*count+256, &dma_desc); if (dma_desc & 0xff) @@ -1151,31 +1148,31 @@ short alloc_rx_desc_ring(struct net_device *dev, u16 bufsize, int count) */ WARN(1, "DMA buffer is not aligned\n"); - priv->rxring=desc; - priv->rxringdma=dma_desc; - tmp=desc; + priv->rxring = desc; + priv->rxringdma = dma_desc; + tmp = desc; for (i = 0; i < count; i++) { - buf = kmalloc(bufsize * sizeof(u8),GFP_ATOMIC); + buf = kmalloc(bufsize * sizeof(u8), GFP_ATOMIC); if (buf == NULL) { DMESGE("Failed to kmalloc RX buffer"); return -1; } - dma_tmp = pci_map_single(pdev,buf,bufsize * sizeof(u8), + dma_tmp = pci_map_single(pdev, buf, bufsize * sizeof(u8), PCI_DMA_FROMDEVICE); - if(-1 == buffer_add(&(priv->rxbuffer), buf,dma_tmp, - &(priv->rxbufferhead))){ - DMESGE("Unable to allocate mem RX buf"); - return -1; + if (-1 == buffer_add(&(priv->rxbuffer), buf, dma_tmp, + &(priv->rxbufferhead))) { + DMESGE("Unable to allocate mem RX buf"); + return -1; } - *tmp = 0; //zero pads the header of the descriptor - *tmp = *tmp |( bufsize&0xfff); + *tmp = 0; // zero pads the header of the descriptor + *tmp = *tmp | (bufsize&0xfff); *(tmp+2) = (u32)dma_tmp; - *tmp = *tmp |(1<<31); // descriptor void, owned by the NIC + *tmp = *tmp | (1<<31); // descriptor void, owned by the NIC - tmp=tmp+rx_desc_size; + tmp = tmp+rx_desc_size; } *(tmp-rx_desc_size) = *(tmp-rx_desc_size) | (1<<30); // this is the last descriptor @@ -1189,10 +1186,10 @@ void set_nic_rxring(struct net_device *dev) u8 pgreg; struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - pgreg=read_nic_byte(dev, PGSELECT); - write_nic_byte(dev, PGSELECT, pgreg &~ (1<rxringdma); + write_nic_dword(dev, RXRING_ADDR, priv->rxringdma); } void rtl8180_reset(struct net_device *dev) @@ -1201,28 +1198,28 @@ void rtl8180_reset(struct net_device *dev) rtl8180_irq_disable(dev); - cr=read_nic_byte(dev,CMD); + cr = read_nic_byte(dev, CMD); cr = cr & 2; cr = cr | (1< 0) - RetSS = ((LastSS * 5) + (RetSS)+ 5) / 6; + if (LastSS > 0) + RetSS = ((LastSS * 5) + (RetSS) + 5) / 6; return RetSS; } @@ -1399,11 +1396,11 @@ void PerformUndecoratedSignalSmoothing8185(struct r8180_priv *priv, priv->bCurCCKPkt = bCckRate; if (priv->UndecoratedSmoothedSS >= 0) - priv->UndecoratedSmoothedSS = ( (priv->UndecoratedSmoothedSS * 5) + (priv->SignalStrength * 10) ) / 6; + priv->UndecoratedSmoothedSS = ((priv->UndecoratedSmoothedSS * 5) + (priv->SignalStrength * 10)) / 6; else priv->UndecoratedSmoothedSS = priv->SignalStrength * 10; - priv->UndercorateSmoothedRxPower = ( (priv->UndercorateSmoothedRxPower * 50) + (priv->RxPower* 11)) / 60; + priv->UndercorateSmoothedRxPower = ((priv->UndercorateSmoothedRxPower * 50) + (priv->RxPower * 11)) / 60; if (bCckRate) priv->CurCCKRSSI = priv->RSSI; @@ -1417,23 +1414,23 @@ void rtl8180_rx(struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); struct sk_buff *tmp_skb; - short first,last; + short first, last; u32 len; int lastlen; unsigned char quality, signal; u8 rate; - u32 *tmp,*tmp2; + u32 *tmp, *tmp2; u8 rx_desc_size; u8 padding; char rxpower = 0; u32 RXAGC = 0; long RxAGC_dBm = 0; - u8 LNA=0, BB=0; + u8 LNA = 0, BB = 0; u8 LNA_gain[4] = {02, 17, 29, 39}; u8 Antenna = 0; struct ieee80211_hdr_4addr *hdr; - u16 fc,type; - u8 bHwError = 0,bCRC = 0,bICV = 0; + u16 fc, type; + u8 bHwError = 0, bCRC = 0, bICV = 0; bool bCckRate = false; u8 RSSI = 0; long SignalStrengthIndex = 0; @@ -1456,27 +1453,28 @@ void rtl8180_rx(struct net_device *dev) tmp2 = NULL; tmp = priv->rxringtail; - do{ - if(tmp == priv->rxring) + do { + if (tmp == priv->rxring) tmp = priv->rxring + (priv->rxringcount - 1)*rx_desc_size; else tmp -= rx_desc_size; - if(! (*tmp & (1<<31))) + if (!(*tmp & (1<<31))) tmp2 = tmp; - }while(tmp != priv->rxring); + } while (tmp != priv->rxring); - if(tmp2) priv->rxringtail = tmp2; + if (tmp2) + priv->rxringtail = tmp2; } /* while there are filled descriptors */ - while(!(*(priv->rxringtail) & (1<<31))){ - if(*(priv->rxringtail) & (1<<26)) + while (!(*(priv->rxringtail) & (1<<31))) { + if (*(priv->rxringtail) & (1<<26)) DMESGW("RX buffer overflow"); - if(*(priv->rxringtail) & (1<<12)) + if (*(priv->rxringtail) & (1<<12)) priv->stats.rxicverr++; - if(*(priv->rxringtail) & (1<<27)){ + if (*(priv->rxringtail) & (1<<27)) { priv->stats.rxdmafail++; //DMESG("EE: RX DMA FAILED at buffer pointed by descriptor %x",(u32)priv->rxringtail); goto drop; @@ -1488,12 +1486,13 @@ void rtl8180_rx(struct net_device *dev) sizeof(u8), PCI_DMA_FROMDEVICE); - first = *(priv->rxringtail) & (1<<29) ? 1:0; - if(first) priv->rx_prevlen=0; + first = *(priv->rxringtail) & (1<<29) ? 1 : 0; + if (first) + priv->rx_prevlen = 0; - last = *(priv->rxringtail) & (1<<28) ? 1:0; - if(last){ - lastlen=((*priv->rxringtail) &0xfff); + last = *(priv->rxringtail) & (1<<28) ? 1 : 0; + if (last) { + lastlen = ((*priv->rxringtail) & 0xfff); /* if the last descriptor (that should * tell us the total packet len) tell @@ -1502,109 +1501,101 @@ void rtl8180_rx(struct net_device *dev) * problem.. * workaround to prevent kernel panic */ - if(lastlen < priv->rx_prevlen) - len=0; + if (lastlen < priv->rx_prevlen) + len = 0; else - len=lastlen-priv->rx_prevlen; + len = lastlen-priv->rx_prevlen; - if(*(priv->rxringtail) & (1<<13)) { - if ((*(priv->rxringtail) & 0xfff) <500) + if (*(priv->rxringtail) & (1<<13)) { + if ((*(priv->rxringtail) & 0xfff) < 500) priv->stats.rxcrcerrmin++; - else if ((*(priv->rxringtail) & 0x0fff) >1000) + else if ((*(priv->rxringtail) & 0x0fff) > 1000) priv->stats.rxcrcerrmax++; else priv->stats.rxcrcerrmid++; } - }else{ + } else { len = priv->rxbuffersize; } - if(first && last) { + if (first && last) { padding = ((*(priv->rxringtail+3))&(0x04000000))>>26; - }else if(first) { + } else if (first) { padding = ((*(priv->rxringtail+3))&(0x04000000))>>26; - if(padding) { + if (padding) len -= 2; - } - }else { + } else { padding = 0; } padding = 0; - priv->rx_prevlen+=len; + priv->rx_prevlen += len; - if(priv->rx_prevlen > MAX_FRAG_THRESHOLD + 100){ + if (priv->rx_prevlen > MAX_FRAG_THRESHOLD + 100) { /* HW is probably passing several buggy frames * without FD or LD flag set. * Throw this garbage away to prevent skb * memory exausting */ - if(!priv->rx_skb_complete) + if (!priv->rx_skb_complete) dev_kfree_skb_any(priv->rx_skb); priv->rx_skb_complete = 1; } - signal=(unsigned char)(((*(priv->rxringtail+3))& (0x00ff0000))>>16); + signal = (unsigned char)(((*(priv->rxringtail+3)) & (0x00ff0000))>>16); signal = (signal & 0xfe) >> 1; - quality=(unsigned char)((*(priv->rxringtail+3)) & (0xff)); + quality = (unsigned char)((*(priv->rxringtail+3)) & (0xff)); stats.mac_time[0] = *(priv->rxringtail+1); stats.mac_time[1] = *(priv->rxringtail+2); - rxpower =((char)(((*(priv->rxringtail+4))& (0x00ff0000))>>16))/2 - 42; - RSSI = ((u8)(((*(priv->rxringtail+3)) & (0x0000ff00))>> 8)) & (0x7f); + rxpower = ((char)(((*(priv->rxringtail+4)) & (0x00ff0000))>>16))/2 - 42; + RSSI = ((u8)(((*(priv->rxringtail+3)) & (0x0000ff00))>>8)) & (0x7f); - rate=((*(priv->rxringtail)) & + rate = ((*(priv->rxringtail)) & ((1<<23)|(1<<22)|(1<<21)|(1<<20)))>>20; stats.rate = rtl8180_rate2rate(rate); - Antenna = (((*(priv->rxringtail +3))& (0x00008000)) == 0 )? 0:1 ; - if(!rtl8180_IsWirelessBMode(stats.rate)) - { // OFDM rate. - + Antenna = (((*(priv->rxringtail+3)) & (0x00008000)) == 0) ? 0 : 1; + if (!rtl8180_IsWirelessBMode(stats.rate)) { // OFDM rate. RxAGC_dBm = rxpower+1; //bias - } - else - { // CCK rate. - RxAGC_dBm = signal;//bit 0 discard + } else { // CCK rate. + RxAGC_dBm = signal; //bit 0 discard - LNA = (u8) (RxAGC_dBm & 0x60 ) >> 5 ; //bit 6~ bit 5 + LNA = (u8) (RxAGC_dBm & 0x60) >> 5 ; //bit 6~ bit 5 BB = (u8) (RxAGC_dBm & 0x1F); // bit 4 ~ bit 0 - RxAGC_dBm = -( LNA_gain[LNA] + (BB *2) ); //Pin_11b=-(LNA_gain+BB_gain) (dBm) + RxAGC_dBm = -(LNA_gain[LNA] + (BB*2)); //Pin_11b=-(LNA_gain+BB_gain) (dBm) - RxAGC_dBm +=4; //bias + RxAGC_dBm += 4; //bias } - if(RxAGC_dBm & 0x80) //absolute value - RXAGC= ~(RxAGC_dBm)+1; + if (RxAGC_dBm & 0x80) //absolute value + RXAGC = ~(RxAGC_dBm)+1; bCckRate = rtl8180_IsWirelessBMode(stats.rate); // Translate RXAGC into 1-100. - if(!rtl8180_IsWirelessBMode(stats.rate)) - { // OFDM rate. - if(RXAGC>90) - RXAGC=90; - else if(RXAGC<25) - RXAGC=25; - RXAGC=(90-RXAGC)*100/65; - } - else - { // CCK rate. - if(RXAGC>95) - RXAGC=95; - else if(RXAGC<30) - RXAGC=30; - RXAGC=(95-RXAGC)*100/65; + if (!rtl8180_IsWirelessBMode(stats.rate)) { // OFDM rate. + if (RXAGC > 90) + RXAGC = 90; + else if (RXAGC < 25) + RXAGC = 25; + RXAGC = (90-RXAGC)*100/65; + } else { // CCK rate. + if (RXAGC > 95) + RXAGC = 95; + else if (RXAGC < 30) + RXAGC = 30; + RXAGC = (95-RXAGC)*100/65; } priv->SignalStrength = (u8)RXAGC; priv->RecvSignalPower = RxAGC_dBm; priv->RxPower = rxpower; priv->RSSI = RSSI; /* SQ translation formula is provided by SD3 DZ. 2006.06.27 */ - if(quality >= 127) + if (quality >= 127) quality = 1;//0; //0 will cause epc to show signal zero , walk aroud now; - else if(quality < 27) + else if (quality < 27) quality = 100; else quality = 127 - quality; @@ -1612,31 +1603,30 @@ void rtl8180_rx(struct net_device *dev) stats.signal = (u8)quality;//priv->wstats.qual.level = priv->SignalStrength; stats.signalstrength = RXAGC; - if(stats.signalstrength > 100) + if (stats.signalstrength > 100) stats.signalstrength = 100; stats.signalstrength = (stats.signalstrength * 70)/100 + 30; // printk("==========================>rx : RXAGC is %d,signalstrength is %d\n",RXAGC,stats.signalstrength); stats.rssi = priv->wstats.qual.qual = priv->SignalQuality; - stats.noise = priv->wstats.qual.noise = 100 - priv ->wstats.qual.qual; - bHwError = (((*(priv->rxringtail))& (0x00000fff)) == 4080)| (((*(priv->rxringtail))& (0x04000000)) != 0 ) - | (((*(priv->rxringtail))& (0x08000000)) != 0 )| (((~(*(priv->rxringtail)))& (0x10000000)) != 0 )| (((~(*(priv->rxringtail)))& (0x20000000)) != 0 ); + stats.noise = priv->wstats.qual.noise = 100 - priv->wstats.qual.qual; + bHwError = (((*(priv->rxringtail)) & (0x00000fff)) == 4080) | (((*(priv->rxringtail)) & (0x04000000)) != 0) + | (((*(priv->rxringtail)) & (0x08000000)) != 0) | (((~(*(priv->rxringtail))) & (0x10000000)) != 0) | (((~(*(priv->rxringtail))) & (0x20000000)) != 0); bCRC = ((*(priv->rxringtail)) & (0x00002000)) >> 13; bICV = ((*(priv->rxringtail)) & (0x00001000)) >> 12; hdr = (struct ieee80211_hdr_4addr *)priv->rxbuffer->buf; fc = le16_to_cpu(hdr->frame_ctl); type = WLAN_FC_GET_TYPE(fc); - if((IEEE80211_FTYPE_CTL != type) && - (eqMacAddr(priv->ieee80211->current_network.bssid, (fc & IEEE80211_FCTL_TODS)? hdr->addr1 : (fc & IEEE80211_FCTL_FROMDS )? hdr->addr2 : hdr->addr3)) - && (!bHwError) && (!bCRC)&& (!bICV)) - { + if ((IEEE80211_FTYPE_CTL != type) && + (eqMacAddr(priv->ieee80211->current_network.bssid, (fc & IEEE80211_FCTL_TODS) ? hdr->addr1 : (fc & IEEE80211_FCTL_FROMDS) ? hdr->addr2 : hdr->addr3)) + && (!bHwError) && (!bCRC) && (!bICV)) { /* Perform signal smoothing for dynamic * mechanism on demand. This is different * with PerformSignalSmoothing8185 in smoothing * fomula. No dramatic adjustion is apply * because dynamic mechanism need some degree * of correctness. */ - PerformUndecoratedSignalSmoothing8185(priv,bCckRate); + PerformUndecoratedSignalSmoothing8185(priv, bCckRate); // // For good-looking singal strength. // @@ -1650,73 +1640,75 @@ void rtl8180_rx(struct net_device *dev) // We need more correct power of received packets and the "SignalStrength" of RxStats is beautified, // so we record the correct power here. // - priv->Stats_SignalQuality =(long) (priv->Stats_SignalQuality * 5 + (long)priv->SignalQuality + 5) / 6; - priv->Stats_RecvSignalPower = (long)(priv->Stats_RecvSignalPower * 5 + priv->RecvSignalPower -1) / 6; + priv->Stats_SignalQuality = (long)(priv->Stats_SignalQuality * 5 + (long)priv->SignalQuality + 5) / 6; + priv->Stats_RecvSignalPower = (long)(priv->Stats_RecvSignalPower * 5 + priv->RecvSignalPower - 1) / 6; // Figure out which antenna that received the lasted packet. priv->LastRxPktAntenna = Antenna ? 1 : 0; // 0: aux, 1: main. - SwAntennaDiversityRxOk8185(dev, priv->SignalStrength); + SwAntennaDiversityRxOk8185(dev, priv->SignalStrength); } - if(first){ - if(!priv->rx_skb_complete){ + if (first) { + if (!priv->rx_skb_complete) { /* seems that HW sometimes fails to reiceve and doesn't provide the last descriptor */ dev_kfree_skb_any(priv->rx_skb); priv->stats.rxnolast++; } /* support for prism header has been originally added by Christian */ - if(priv->prism_hdr && priv->ieee80211->iw_mode == IW_MODE_MONITOR){ - - }else{ + if (priv->prism_hdr && priv->ieee80211->iw_mode == IW_MODE_MONITOR) { + + } else { priv->rx_skb = dev_alloc_skb(len+2); - if( !priv->rx_skb) goto drop; + if (!priv->rx_skb) + goto drop; } - priv->rx_skb_complete=0; - priv->rx_skb->dev=dev; - }else{ + priv->rx_skb_complete = 0; + priv->rx_skb->dev = dev; + } else { /* if we are here we should have already RXed * the first frame. * If we get here and the skb is not allocated then * we have just throw out garbage (skb not allocated) * and we are still rxing garbage.... */ - if(!priv->rx_skb_complete){ + if (!priv->rx_skb_complete) { - tmp_skb= dev_alloc_skb(priv->rx_skb->len +len+2); + tmp_skb = dev_alloc_skb(priv->rx_skb->len+len+2); - if(!tmp_skb) goto drop; + if (!tmp_skb) + goto drop; - tmp_skb->dev=dev; + tmp_skb->dev = dev; - memcpy(skb_put(tmp_skb,priv->rx_skb->len), + memcpy(skb_put(tmp_skb, priv->rx_skb->len), priv->rx_skb->data, priv->rx_skb->len); dev_kfree_skb_any(priv->rx_skb); - priv->rx_skb=tmp_skb; + priv->rx_skb = tmp_skb; } } - if(!priv->rx_skb_complete) { - if(padding) { - memcpy(skb_put(priv->rx_skb,len), - (((unsigned char *)priv->rxbuffer->buf) + 2),len); + if (!priv->rx_skb_complete) { + if (padding) { + memcpy(skb_put(priv->rx_skb, len), + (((unsigned char *)priv->rxbuffer->buf) + 2), len); } else { - memcpy(skb_put(priv->rx_skb,len), - priv->rxbuffer->buf,len); + memcpy(skb_put(priv->rx_skb, len), + priv->rxbuffer->buf, len); } } - if(last && !priv->rx_skb_complete){ - if(priv->rx_skb->len > 4) - skb_trim(priv->rx_skb,priv->rx_skb->len-4); - if(!ieee80211_rtl_rx(priv->ieee80211, + if (last && !priv->rx_skb_complete) { + if (priv->rx_skb->len > 4) + skb_trim(priv->rx_skb, priv->rx_skb->len-4); + if (!ieee80211_rtl_rx(priv->ieee80211, priv->rx_skb, &stats)) dev_kfree_skb_any(priv->rx_skb); - priv->rx_skb_complete=1; + priv->rx_skb_complete = 1; } pci_dma_sync_single_for_device(priv->pdev, @@ -1727,20 +1719,20 @@ void rtl8180_rx(struct net_device *dev) drop: // this is used when we have not enough mem /* restore the descriptor */ - *(priv->rxringtail+2)=priv->rxbuffer->dma; - *(priv->rxringtail)=*(priv->rxringtail) &~ 0xfff; - *(priv->rxringtail)= + *(priv->rxringtail+2) = priv->rxbuffer->dma; + *(priv->rxringtail) = *(priv->rxringtail) & ~0xfff; + *(priv->rxringtail) = *(priv->rxringtail) | priv->rxbuffersize; - *(priv->rxringtail)= + *(priv->rxringtail) = *(priv->rxringtail) | (1<<31); - priv->rxringtail+=rx_desc_size; - if(priv->rxringtail >= - (priv->rxring)+(priv->rxringcount )*rx_desc_size) - priv->rxringtail=priv->rxring; + priv->rxringtail += rx_desc_size; + if (priv->rxringtail >= + (priv->rxring)+(priv->rxringcount)*rx_desc_size) + priv->rxringtail = priv->rxring; - priv->rxbuffer=(priv->rxbuffer->next); + priv->rxbuffer = (priv->rxbuffer->next); } } @@ -1749,10 +1741,10 @@ void rtl8180_dma_kick(struct net_device *dev, int priority) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - rtl8180_set_mode(dev,EPROM_CMD_CONFIG); + rtl8180_set_mode(dev, EPROM_CMD_CONFIG); write_nic_byte(dev, TX_DMA_POLLING, (1 << (priority + 1)) | priv->dma_poll_mask); - rtl8180_set_mode(dev,EPROM_CMD_NORMAL); + rtl8180_set_mode(dev, EPROM_CMD_NORMAL); force_pci_posting(dev); } @@ -1761,31 +1753,30 @@ void rtl8180_data_hard_stop(struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - rtl8180_set_mode(dev,EPROM_CMD_CONFIG); + rtl8180_set_mode(dev, EPROM_CMD_CONFIG); priv->dma_poll_stop_mask |= TPPOLLSTOP_AC_VIQ; - write_nic_byte(dev,TPPollStop, priv->dma_poll_stop_mask); - rtl8180_set_mode(dev,EPROM_CMD_NORMAL); + write_nic_byte(dev, TPPollStop, priv->dma_poll_stop_mask); + rtl8180_set_mode(dev, EPROM_CMD_NORMAL); } void rtl8180_data_hard_resume(struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - rtl8180_set_mode(dev,EPROM_CMD_CONFIG); + rtl8180_set_mode(dev, EPROM_CMD_CONFIG); priv->dma_poll_stop_mask &= ~(TPPOLLSTOP_AC_VIQ); - write_nic_byte(dev,TPPollStop, priv->dma_poll_stop_mask); - rtl8180_set_mode(dev,EPROM_CMD_NORMAL); + write_nic_byte(dev, TPPollStop, priv->dma_poll_stop_mask); + rtl8180_set_mode(dev, EPROM_CMD_NORMAL); } /* this function TX data frames when the ieee80211 stack requires this. * It checks also if we need to stop the ieee tx queue, eventually do it */ -void rtl8180_hard_data_xmit(struct sk_buff *skb,struct net_device *dev, int -rate) -{ +void rtl8180_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, int +rate) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); int mode; - struct ieee80211_hdr_3addr *h = (struct ieee80211_hdr_3addr *) skb->data; + struct ieee80211_hdr_3addr *h = (struct ieee80211_hdr_3addr *) skb->data; short morefrag = (h->frame_control) & IEEE80211_FCTL_MOREFRAGS; unsigned long flags; int priority; @@ -1801,25 +1792,24 @@ rate) * the ieee stack. */ priority = AC2Q(skb->priority); - spin_lock_irqsave(&priv->tx_lock,flags); + spin_lock_irqsave(&priv->tx_lock, flags); - if(priv->ieee80211->bHwRadioOff) - { - spin_unlock_irqrestore(&priv->tx_lock,flags); + if (priv->ieee80211->bHwRadioOff) { + spin_unlock_irqrestore(&priv->tx_lock, flags); return; } - if (!check_nic_enought_desc(dev, priority)){ + if (!check_nic_enought_desc(dev, priority)) { DMESGW("Error: no descriptor left by previous TX (avail %d) ", get_curr_tx_free_desc(dev, priority)); ieee80211_rtl_stop_queue(priv->ieee80211); } - rtl8180_tx(dev, skb->data, skb->len, priority, morefrag,0,rate); + rtl8180_tx(dev, skb->data, skb->len, priority, morefrag, 0, rate); if (!check_nic_enought_desc(dev, priority)) ieee80211_rtl_stop_queue(priv->ieee80211); - spin_unlock_irqrestore(&priv->tx_lock,flags); + spin_unlock_irqrestore(&priv->tx_lock, flags); } /* This is a rough attempt to TX a frame @@ -1833,7 +1823,7 @@ rate) * might use a different lock than tx_lock (for example mgmt_tx_lock) */ /* these function may loops if invoked with 0 descriptors or 0 len buffer*/ -int rtl8180_hard_start_xmit(struct sk_buff *skb,struct net_device *dev) +int rtl8180_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); unsigned long flags; @@ -1841,66 +1831,68 @@ int rtl8180_hard_start_xmit(struct sk_buff *skb,struct net_device *dev) priority = MANAGE_PRIORITY; - spin_lock_irqsave(&priv->tx_lock,flags); + spin_lock_irqsave(&priv->tx_lock, flags); if (priv->ieee80211->bHwRadioOff) { - spin_unlock_irqrestore(&priv->tx_lock,flags); + spin_unlock_irqrestore(&priv->tx_lock, flags); dev_kfree_skb_any(skb); return NETDEV_TX_OK; } rtl8180_tx(dev, skb->data, skb->len, priority, - 0, 0,ieeerate2rtlrate(priv->ieee80211->basic_rate)); + 0, 0, ieeerate2rtlrate(priv->ieee80211->basic_rate)); - priv->ieee80211->stats.tx_bytes+=skb->len; + priv->ieee80211->stats.tx_bytes += skb->len; priv->ieee80211->stats.tx_packets++; - spin_unlock_irqrestore(&priv->tx_lock,flags); + spin_unlock_irqrestore(&priv->tx_lock, flags); dev_kfree_skb_any(skb); return NETDEV_TX_OK; } // longpre 144+48 shortpre 72+24 -u16 rtl8180_len2duration(u32 len, short rate,short* ext) +u16 rtl8180_len2duration(u32 len, short rate, short *ext) { u16 duration; u16 drift; - *ext=0; + *ext = 0; - switch(rate){ + switch (rate) { case 0://1mbps - *ext=0; - duration = ((len+4)<<4) /0x2; + *ext = 0; + duration = ((len+4)<<4) / 0x2; drift = ((len+4)<<4) % 0x2; - if(drift ==0 ) break; + if (drift == 0) + break; duration++; break; case 1://2mbps - *ext=0; - duration = ((len+4)<<4) /0x4; + *ext = 0; + duration = ((len+4)<<4) / 0x4; drift = ((len+4)<<4) % 0x4; - if(drift ==0 ) break; + if (drift == 0) + break; duration++; break; case 2: //5.5mbps - *ext=0; - duration = ((len+4)<<4) /0xb; + *ext = 0; + duration = ((len+4)<<4) / 0xb; drift = ((len+4)<<4) % 0xb; - if(drift ==0 ) + if (drift == 0) break; duration++; break; default: case 3://11mbps - *ext=0; - duration = ((len+4)<<4) /0x16; + *ext = 0; + duration = ((len+4)<<4) / 0x16; drift = ((len+4)<<4) % 0x16; - if(drift ==0 ) + if (drift == 0) break; duration++; - if(drift > 6) + if (drift > 6) break; - *ext=1; + *ext = 1; break; } @@ -1914,13 +1906,13 @@ void rtl8180_prepare_beacon(struct net_device *dev) u16 word = read_nic_word(dev, BcnItv); word &= ~BcnItv_BcnItv; // clear Bcn_Itv - word |= cpu_to_le16(priv->ieee80211->current_network.beacon_interval);//0x64; + word |= cpu_to_le16(priv->ieee80211->current_network.beacon_interval); //0x64; write_nic_word(dev, BcnItv, word); skb = ieee80211_get_beacon(priv->ieee80211); - if(skb){ - rtl8180_tx(dev,skb->data,skb->len,BEACON_PRIORITY, - 0,0,ieeerate2rtlrate(priv->ieee80211->basic_rate)); + if (skb) { + rtl8180_tx(dev, skb->data, skb->len, BEACON_PRIORITY, + 0, 0, ieeerate2rtlrate(priv->ieee80211->basic_rate)); dev_kfree_skb_any(skb); } } @@ -1933,7 +1925,7 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, short morefrag, short descfrag, int rate) { struct r8180_priv *priv = ieee80211_priv(dev); - u32 *tail,*temp_tail; + u32 *tail, *temp_tail; u32 *begin; u32 *buf; int i; @@ -1942,7 +1934,7 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, int count; u16 duration; short ext; - struct buffer* buflist; + struct buffer *buflist; struct ieee80211_hdr_3addr *frag_hdr = (struct ieee80211_hdr_3addr *)txbuf; u8 dest[ETH_ALEN]; u8 bUseShortPreamble = 0; @@ -1954,46 +1946,46 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, u16 TxDescDuration = 0; u8 ownbit_flag = false; - switch(priority) { + switch (priority) { case MANAGE_PRIORITY: - tail=priv->txmapringtail; - begin=priv->txmapring; + tail = priv->txmapringtail; + begin = priv->txmapring; buflist = priv->txmapbufstail; count = priv->txringcount; break; case BK_PRIORITY: - tail=priv->txbkpringtail; - begin=priv->txbkpring; + tail = priv->txbkpringtail; + begin = priv->txbkpring; buflist = priv->txbkpbufstail; count = priv->txringcount; break; case BE_PRIORITY: - tail=priv->txbepringtail; - begin=priv->txbepring; + tail = priv->txbepringtail; + begin = priv->txbepring; buflist = priv->txbepbufstail; count = priv->txringcount; break; case VI_PRIORITY: - tail=priv->txvipringtail; - begin=priv->txvipring; + tail = priv->txvipringtail; + begin = priv->txvipring; buflist = priv->txvipbufstail; count = priv->txringcount; break; case VO_PRIORITY: - tail=priv->txvopringtail; - begin=priv->txvopring; + tail = priv->txvopringtail; + begin = priv->txvopring; buflist = priv->txvopbufstail; count = priv->txringcount; break; case HI_PRIORITY: - tail=priv->txhpringtail; - begin=priv->txhpring; + tail = priv->txhpringtail; + begin = priv->txhpring; buflist = priv->txhpbufstail; count = priv->txringcount; break; case BEACON_PRIORITY: - tail=priv->txbeaconringtail; - begin=priv->txbeaconring; + tail = priv->txbeaconringtail; + begin = priv->txbeaconring; buflist = priv->txbeaconbufstail; count = priv->txbeaconcount; break; @@ -2004,8 +1996,7 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, memcpy(&dest, frag_hdr->addr1, ETH_ALEN); if (is_multicast_ether_addr(dest) || - is_broadcast_ether_addr(dest)) - { + is_broadcast_ether_addr(dest)) { Duration = 0; RtsDur = 0; bRTSEnable = 0; @@ -2021,19 +2012,18 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, /* Figure out ACK rate according to BSS basic rate * and Tx rate. */ - AckTime = ComputeTxTime(14, 10,0, 0); // AckCTSLng = 14 use 1M bps send + AckTime = ComputeTxTime(14, 10, 0, 0); // AckCTSLng = 14 use 1M bps send - if ( ((len + sCrcLng) > priv->rts) && priv->rts ) - { // RTS/CTS. + if (((len + sCrcLng) > priv->rts) && priv->rts) { // RTS/CTS. u16 RtsTime, CtsTime; //u16 CtsRate; bRTSEnable = 1; bCTSEnable = 0; // Rate and time required for RTS. - RtsTime = ComputeTxTime( sAckCtsLng/8,priv->ieee80211->basic_rate, 0, 0); + RtsTime = ComputeTxTime(sAckCtsLng/8, priv->ieee80211->basic_rate, 0, 0); // Rate and time required for CTS. - CtsTime = ComputeTxTime(14, 10,0, 0); // AckCTSLng = 14 use 1M bps send + CtsTime = ComputeTxTime(14, 10, 0, 0); // AckCTSLng = 14 use 1M bps send // Figure out time required to transmit this frame. ThisFrameTime = ComputeTxTime(len + sCrcLng, @@ -2045,8 +2035,7 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, RtsDur = CtsTime + ThisFrameTime + AckTime + 3*aSifsTime; TxDescDuration = RtsTime + RtsDur; - } - else {// Normal case. + } else {// Normal case. bCTSEnable = 0; bRTSEnable = 0; RtsDur = 0; @@ -2060,10 +2049,10 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, Duration = aSifsTime + AckTime; } else { // One or more fragments remained. u16 NextFragTime; - NextFragTime = ComputeTxTime( len + sCrcLng, //pretend following packet length equal current packet + NextFragTime = ComputeTxTime(len + sCrcLng, //pretend following packet length equal current packet rtl8180_rate2rate(rate), 0, - bUseShortPreamble ); + bUseShortPreamble); //ThisFrag-ACk-NextFrag-ACK. Duration = NextFragTime + 3*aSifsTime + 2*AckTime; @@ -2073,17 +2062,17 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, frag_hdr->duration_id = Duration; - buflen=priv->txbuffsize; - remain=len; + buflen = priv->txbuffsize; + remain = len; temp_tail = tail; - while(remain!=0){ + while (remain != 0) { mb(); - if(!buflist){ + if (!buflist) { DMESGE("TX buffer error, cannot TX frames. pri %d.", priority); return -1; } - buf=buflist->buf; + buf = buflist->buf; if ((*tail & (1 << 31)) && (priority != BEACON_PRIORITY)) { DMESGW("No more TX desc, returning %x of %x", @@ -2092,7 +2081,7 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, return remain; } - *tail= 0; // zeroes header + *tail = 0; // zeroes header *(tail+1) = 0; *(tail+3) = 0; *(tail+5) = 0; @@ -2102,41 +2091,40 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, /*FIXME: this should be triggered by HW encryption parameters.*/ *tail |= (1<<15); /* no encrypt */ - if(remain==len && !descfrag) { + if (remain == len && !descfrag) { ownbit_flag = false; - *tail = *tail| (1<<29) ; //fist segment of the packet - *tail = *tail |(len); + *tail = *tail | (1<<29) ; //fist segment of the packet + *tail = *tail | (len); } else { ownbit_flag = true; } - for(i=0;i0;i++,remain--){ - ((u8*)buf)[i]=txbuf[i]; //copy data into descriptor pointed DMAble buffer - if(remain == 4 && i+4 >= buflen) break; + for (i = 0; i < buflen && remain > 0; i++, remain--) { + ((u8 *)buf)[i] = txbuf[i]; //copy data into descriptor pointed DMAble buffer + if (remain == 4 && i+4 >= buflen) + break; /* ensure the last desc has at least 4 bytes payload */ } txbuf = txbuf + i; - *(tail+3)=*(tail+3) &~ 0xfff; - *(tail+3)=*(tail+3) | i; // buffer lenght + *(tail+3) = *(tail+3) & ~0xfff; + *(tail+3) = *(tail+3) | i; // buffer lenght // Use short preamble or not if (priv->ieee80211->current_network.capability&WLAN_CAPABILITY_SHORT_PREAMBLE) - if (priv->plcp_preamble_mode==1 && rate!=0) // short mode now, not long! + if (priv->plcp_preamble_mode == 1 && rate != 0) // short mode now, not long! ;// *tail |= (1<<16); // enable short preamble mode. - if(bCTSEnable) { + if (bCTSEnable) *tail |= (1<<18); - } - if(bRTSEnable) //rts enable - { + if (bRTSEnable) { //rts enable *tail |= ((ieeerate2rtlrate(priv->ieee80211->basic_rate))<<19);//RTS RATE *tail |= (1<<23);//rts enable - *(tail+1) |=(RtsDur&0xffff);//RTS Duration + *(tail+1) |= (RtsDur&0xffff);//RTS Duration } *(tail+3) |= ((TxDescDuration&0xffff)<<16); //DURATION // *(tail+3) |= (0xe6<<16); - *(tail+5) |= (11<<8);//(priv->retry_data<<8); //retry lim ; + *(tail+5) |= (11<<8);//(priv->retry_data<<8); //retry lim ; *tail = *tail | ((rate&0xf) << 24); @@ -2145,71 +2133,72 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, if (!priv->hw_plcp_len) { duration = rtl8180_len2duration(len, rate, &ext); *(tail+1) = *(tail+1) | ((duration & 0x7fff)<<16); - if(ext) *(tail+1) = *(tail+1) |(1<<31); //plcp length extension + if (ext) + *(tail+1) = *(tail+1) | (1<<31); //plcp length extension } - if(morefrag) *tail = (*tail) | (1<<17); // more fragment - if(!remain) *tail = (*tail) | (1<<28); // last segment of frame + if (morefrag) + *tail = (*tail) | (1<<17); // more fragment + if (!remain) + *tail = (*tail) | (1<<28); // last segment of frame *(tail+5) = *(tail+5)|(2<<27); *(tail+7) = *(tail+7)|(1<<4); wmb(); - if(ownbit_flag) - { + if (ownbit_flag) *tail = *tail | (1<<31); // descriptor ready to be txed - } - if((tail - begin)/8 == count-1) - tail=begin; + if ((tail - begin)/8 == count-1) + tail = begin; else - tail=tail+8; + tail = tail+8; - buflist=buflist->next; + buflist = buflist->next; mb(); - switch(priority) { - case MANAGE_PRIORITY: - priv->txmapringtail=tail; - priv->txmapbufstail=buflist; - break; - case BK_PRIORITY: - priv->txbkpringtail=tail; - priv->txbkpbufstail=buflist; - break; - case BE_PRIORITY: - priv->txbepringtail=tail; - priv->txbepbufstail=buflist; - break; - case VI_PRIORITY: - priv->txvipringtail=tail; - priv->txvipbufstail=buflist; - break; - case VO_PRIORITY: - priv->txvopringtail=tail; - priv->txvopbufstail=buflist; - break; - case HI_PRIORITY: - priv->txhpringtail=tail; - priv->txhpbufstail = buflist; - break; - case BEACON_PRIORITY: - /* the HW seems to be happy with the 1st - * descriptor filled and the 2nd empty... - * So always update descriptor 1 and never - * touch 2nd - */ - break; + switch (priority) { + case MANAGE_PRIORITY: + priv->txmapringtail = tail; + priv->txmapbufstail = buflist; + break; + case BK_PRIORITY: + priv->txbkpringtail = tail; + priv->txbkpbufstail = buflist; + break; + case BE_PRIORITY: + priv->txbepringtail = tail; + priv->txbepbufstail = buflist; + break; + case VI_PRIORITY: + priv->txvipringtail = tail; + priv->txvipbufstail = buflist; + break; + case VO_PRIORITY: + priv->txvopringtail = tail; + priv->txvopbufstail = buflist; + break; + case HI_PRIORITY: + priv->txhpringtail = tail; + priv->txhpbufstail = buflist; + break; + case BEACON_PRIORITY: + /* the HW seems to be happy with the 1st + * descriptor filled and the 2nd empty... + * So always update descriptor 1 and never + * touch 2nd + */ + break; } } *temp_tail = *temp_tail | (1<<31); // descriptor ready to be txed - rtl8180_dma_kick(dev,priority); + rtl8180_dma_kick(dev, priority); return 0; } -void rtl8180_irq_rx_tasklet(struct r8180_priv * priv); +void rtl8180_irq_rx_tasklet(struct r8180_priv *priv); void rtl8180_link_change(struct net_device *dev) { @@ -2219,13 +2208,13 @@ void rtl8180_link_change(struct net_device *dev) rtl8180_update_msr(dev); - rtl8180_set_mode(dev,EPROM_CMD_CONFIG); + rtl8180_set_mode(dev, EPROM_CMD_CONFIG); - write_nic_dword(dev,BSSID,((u32*)net->bssid)[0]); - write_nic_word(dev,BSSID+4,((u16*)net->bssid)[2]); + write_nic_dword(dev, BSSID, ((u32 *)net->bssid)[0]); + write_nic_word(dev, BSSID+4, ((u16 *)net->bssid)[2]); - beacon_interval = read_nic_dword(dev,BEACON_INTERVAL); - beacon_interval &= ~ BEACON_INTERVAL_MASK; + beacon_interval = read_nic_dword(dev, BEACON_INTERVAL); + beacon_interval &= ~BEACON_INTERVAL_MASK; beacon_interval |= net->beacon_interval; write_nic_dword(dev, BEACON_INTERVAL, beacon_interval); @@ -2234,42 +2223,50 @@ void rtl8180_link_change(struct net_device *dev) rtl8180_set_chan(dev, priv->chan); } -void rtl8180_rq_tx_ack(struct net_device *dev){ +void rtl8180_rq_tx_ack(struct net_device *dev) +{ struct r8180_priv *priv = ieee80211_priv(dev); - write_nic_byte(dev,CONFIG4,read_nic_byte(dev,CONFIG4)|CONFIG4_PWRMGT); + write_nic_byte(dev, CONFIG4, read_nic_byte(dev, CONFIG4) | CONFIG4_PWRMGT); priv->ack_tx_to_ieee = 1; } -short rtl8180_is_tx_queue_empty(struct net_device *dev){ +short rtl8180_is_tx_queue_empty(struct net_device *dev) +{ struct r8180_priv *priv = ieee80211_priv(dev); - u32* d; + u32 *d; for (d = priv->txmapring; - d < priv->txmapring + priv->txringcount;d+=8) - if(*d & (1<<31)) return 0; + d < priv->txmapring + priv->txringcount; d += 8) + if (*d & (1<<31)) + return 0; for (d = priv->txbkpring; - d < priv->txbkpring + priv->txringcount;d+=8) - if(*d & (1<<31)) return 0; + d < priv->txbkpring + priv->txringcount; d += 8) + if (*d & (1<<31)) + return 0; for (d = priv->txbepring; - d < priv->txbepring + priv->txringcount;d+=8) - if(*d & (1<<31)) return 0; + d < priv->txbepring + priv->txringcount; d += 8) + if (*d & (1<<31)) + return 0; for (d = priv->txvipring; - d < priv->txvipring + priv->txringcount;d+=8) - if(*d & (1<<31)) return 0; + d < priv->txvipring + priv->txringcount; d += 8) + if (*d & (1<<31)) + return 0; for (d = priv->txvopring; - d < priv->txvopring + priv->txringcount;d+=8) - if(*d & (1<<31)) return 0; + d < priv->txvopring + priv->txringcount; d += 8) + if (*d & (1<<31)) + return 0; for (d = priv->txhpring; - d < priv->txhpring + priv->txringcount;d+=8) - if(*d & (1<<31)) return 0; + d < priv->txhpring + priv->txringcount; d += 8) + if (*d & (1<<31)) + return 0; return 1; } /* FIXME FIXME 5msecs is random */ @@ -2280,11 +2277,11 @@ void rtl8180_hw_wakeup(struct net_device *dev) unsigned long flags; struct r8180_priv *priv = ieee80211_priv(dev); - spin_lock_irqsave(&priv->ps_lock,flags); - write_nic_byte(dev,CONFIG4,read_nic_byte(dev,CONFIG4)&~CONFIG4_PWRMGT); + spin_lock_irqsave(&priv->ps_lock, flags); + write_nic_byte(dev, CONFIG4, read_nic_byte(dev, CONFIG4) & ~CONFIG4_PWRMGT); if (priv->rf_wakeup) priv->rf_wakeup(dev); - spin_unlock_irqrestore(&priv->ps_lock,flags); + spin_unlock_irqrestore(&priv->ps_lock, flags); } void rtl8180_hw_sleep_down(struct net_device *dev) @@ -2304,7 +2301,7 @@ void rtl8180_hw_sleep(struct net_device *dev, u32 th, u32 tl) u32 rb = jiffies; unsigned long flags; - spin_lock_irqsave(&priv->ps_lock,flags); + spin_lock_irqsave(&priv->ps_lock, flags); /* Writing HW register with 0 equals to disable * the timer, that is not really what we want @@ -2314,15 +2311,15 @@ void rtl8180_hw_sleep(struct net_device *dev, u32 th, u32 tl) /* If the interval in witch we are requested to sleep is too * short then give up and remain awake */ - if(((tl>=rb)&& (tl-rb) <= MSECS(MIN_SLEEP_TIME)) - ||((rb>tl)&& (rb-tl) < MSECS(MIN_SLEEP_TIME))) { - spin_unlock_irqrestore(&priv->ps_lock,flags); + if (((tl >= rb) && (tl-rb) <= MSECS(MIN_SLEEP_TIME)) + || ((rb > tl) && (rb-tl) < MSECS(MIN_SLEEP_TIME))) { + spin_unlock_irqrestore(&priv->ps_lock, flags); printk("too short to sleep\n"); return; } { - u32 tmp = (tl>rb)?(tl-rb):(rb-tl); + u32 tmp = (tl > rb) ? (tl-rb) : (rb-tl); priv->DozePeriodInPast2Sec += jiffies_to_msecs(tmp); @@ -2332,19 +2329,19 @@ void rtl8180_hw_sleep(struct net_device *dev, u32 th, u32 tl) * while setting it, then give up */ - if(((tl > rb) && ((tl-rb) > MSECS(MAX_SLEEP_TIME)))|| + if (((tl > rb) && ((tl-rb) > MSECS(MAX_SLEEP_TIME))) || ((tl < rb) && ((rb-tl) > MSECS(MAX_SLEEP_TIME)))) { - spin_unlock_irqrestore(&priv->ps_lock,flags); + spin_unlock_irqrestore(&priv->ps_lock, flags); return; } queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->hw_sleep_wq); - spin_unlock_irqrestore(&priv->ps_lock,flags); + spin_unlock_irqrestore(&priv->ps_lock, flags); } -void rtl8180_wmm_param_update(struct work_struct * work) +void rtl8180_wmm_param_update(struct work_struct *work) { - struct ieee80211_device * ieee = container_of(work, struct ieee80211_device,wmm_param_update_wq); + struct ieee80211_device *ieee = container_of(work, struct ieee80211_device, wmm_param_update_wq); struct net_device *dev = ieee->dev; u8 *ac_param = (u8 *)(ieee->current_network.wmm_param); u8 mode = ieee->current_network.mode; @@ -2353,7 +2350,7 @@ void rtl8180_wmm_param_update(struct work_struct * work) PAC_PARAM pAcParam; u8 i; - if(!ieee->current_network.QoS_Enable){ + if (!ieee->current_network.QoS_Enable) { //legacy ac_xx_param update AcParam.longData = 0; AcParam.f.AciAifsn.f.AIFSN = 2; // Follow 802.11 DIFS. @@ -2361,43 +2358,43 @@ void rtl8180_wmm_param_update(struct work_struct * work) AcParam.f.Ecw.f.ECWmin = 3; // Follow 802.11 CWmin. AcParam.f.Ecw.f.ECWmax = 7; // Follow 802.11 CWmax. AcParam.f.TXOPLimit = 0; - for(eACI = 0; eACI < AC_MAX; eACI++){ + for (eACI = 0; eACI < AC_MAX; eACI++) { AcParam.f.AciAifsn.f.ACI = (u8)eACI; { u8 u1bAIFS; u32 u4bAcParam; pAcParam = (PAC_PARAM)(&AcParam); // Retrive paramters to udpate. - u1bAIFS = pAcParam->f.AciAifsn.f.AIFSN *(((mode&IEEE_G) == IEEE_G)?9:20) + aSifsTime; + u1bAIFS = pAcParam->f.AciAifsn.f.AIFSN * (((mode&IEEE_G) == IEEE_G) ? 9 : 20) + aSifsTime; u4bAcParam = ((((u32)(pAcParam->f.TXOPLimit))<f.Ecw.f.ECWmax))<f.Ecw.f.ECWmin))<f.AciAifsn.f.ACI; //Mode G/A: slotTimeTimer = 9; Mode B: 20 - u1bAIFS = pAcParam->f.AciAifsn.f.AIFSN * (((mode&IEEE_G) == IEEE_G)?9:20) + aSifsTime; - u4bAcParam = ( (((u32)(pAcParam->f.TXOPLimit)) << AC_PARAM_TXOP_LIMIT_OFFSET) | + u1bAIFS = pAcParam->f.AciAifsn.f.AIFSN * (((mode&IEEE_G) == IEEE_G) ? 9 : 20) + aSifsTime; + u4bAcParam = ((((u32)(pAcParam->f.TXOPLimit)) << AC_PARAM_TXOP_LIMIT_OFFSET) | (((u32)(pAcParam->f.Ecw.f.ECWmax)) << AC_PARAM_ECW_MAX_OFFSET) | (((u32)(pAcParam->f.Ecw.f.ECWmin)) << AC_PARAM_ECW_MIN_OFFSET) | (((u32)u1bAIFS) << AC_PARAM_AIFS_OFFSET)); - switch(eACI){ - case AC1_BK: - write_nic_dword(dev, AC_BK_PARAM, u4bAcParam); - break; - case AC0_BE: - write_nic_dword(dev, AC_BE_PARAM, u4bAcParam); - break; - case AC2_VI: - write_nic_dword(dev, AC_VI_PARAM, u4bAcParam); - break; - case AC3_VO: - write_nic_dword(dev, AC_VO_PARAM, u4bAcParam); - break; - default: - printk(KERN_WARNING "SetHwReg8185(): invalid ACI: %d !\n", eACI); - break; + switch (eACI) { + case AC1_BK: + write_nic_dword(dev, AC_BK_PARAM, u4bAcParam); + break; + case AC0_BE: + write_nic_dword(dev, AC_BE_PARAM, u4bAcParam); + break; + case AC2_VI: + write_nic_dword(dev, AC_VI_PARAM, u4bAcParam); + break; + case AC3_VO: + write_nic_dword(dev, AC_VO_PARAM, u4bAcParam); + break; + default: + printk(KERN_WARNING "SetHwReg8185(): invalid ACI: %d !\n", eACI); + break; } } ac_param += (sizeof(AC_PARAM)); @@ -2453,7 +2450,7 @@ void watch_dog_adaptive(unsigned long data) } // Tx High Power Mechanism. - if(CheckHighPower((struct net_device *)data)) + if (CheckHighPower((struct net_device *)data)) queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->tx_pw_wq); // Tx Power Tracking on 87SE. @@ -2461,26 +2458,26 @@ void watch_dog_adaptive(unsigned long data) TxPwrTracking87SE((struct net_device *)data); // Perform DIG immediately. - if(CheckDig((struct net_device *)data) == true) + if (CheckDig((struct net_device *)data) == true) queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->hw_dig_wq); - rtl8180_watch_dog((struct net_device *)data); + rtl8180_watch_dog((struct net_device *)data); queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->GPIOChangeRFWorkItem); - priv->watch_dog_timer.expires = jiffies + MSECS(IEEE80211_WATCH_DOG_TIME); + priv->watch_dog_timer.expires = jiffies + MSECS(IEEE80211_WATCH_DOG_TIME); add_timer(&priv->watch_dog_timer); } static CHANNEL_LIST ChannelPlan[] = { - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64},19}, //FCC - {{1,2,3,4,5,6,7,8,9,10,11},11}, //IC - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //ETSI - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //Spain. Change to ETSI. - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //France. Change to ETSI. - {{14,36,40,44,48,52,56,60,64},9}, //MKK + {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64},19}, //FCC + {{1,2,3,4,5,6,7,8,9,10,11},11}, //IC + {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //ETSI + {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //Spain. Change to ETSI. + {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //France. Change to ETSI. + {{14,36,40,44,48,52,56,60,64},9}, //MKK {{1,2,3,4,5,6,7,8,9,10,11,12,13,14, 36,40,44,48,52,56,60,64},22},//MKK1 {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //Israel. - {{1,2,3,4,5,6,7,8,9,10,11,12,13,34,38,42,46},17}, // For 11a , TELEC + {{1,2,3,4,5,6,7,8,9,10,11,12,13,34,38,42,46},17}, // For 11a , TELEC {{1,2,3,4,5,6,7,8,9,10,11,12,13,14},14}, //For Global Domain. 1-11:active scan, 12-14 passive scan. //+YJ, 080626 {{1,2,3,4,5,6,7,8,9,10,11,12,13},13} //world wide 13: ch1~ch11 active scan, ch12~13 passive //lzm add 080826 }; @@ -2490,57 +2487,53 @@ static void rtl8180_set_channel_map(u8 channel_plan, struct ieee80211_device *ie int i; //lzm add 080826 - ieee->MinPassiveChnlNum=MAX_CHANNEL_NUMBER+1; - ieee->IbssStartChnl=0; - - switch (channel_plan) - { - case COUNTRY_CODE_FCC: - case COUNTRY_CODE_IC: - case COUNTRY_CODE_ETSI: - case COUNTRY_CODE_SPAIN: - case COUNTRY_CODE_FRANCE: - case COUNTRY_CODE_MKK: - case COUNTRY_CODE_MKK1: - case COUNTRY_CODE_ISRAEL: - case COUNTRY_CODE_TELEC: + ieee->MinPassiveChnlNum = MAX_CHANNEL_NUMBER+1; + ieee->IbssStartChnl = 0; + + switch (channel_plan) { + case COUNTRY_CODE_FCC: + case COUNTRY_CODE_IC: + case COUNTRY_CODE_ETSI: + case COUNTRY_CODE_SPAIN: + case COUNTRY_CODE_FRANCE: + case COUNTRY_CODE_MKK: + case COUNTRY_CODE_MKK1: + case COUNTRY_CODE_ISRAEL: + case COUNTRY_CODE_TELEC: { Dot11d_Init(ieee); ieee->bGlobalDomain = false; - if (ChannelPlan[channel_plan].Len != 0){ + if (ChannelPlan[channel_plan].Len != 0) { // Clear old channel map memset(GET_DOT11D_INFO(ieee)->channel_map, 0, sizeof(GET_DOT11D_INFO(ieee)->channel_map)); // Set new channel map - for (i=0;ichannel_map[ChannelPlan[channel_plan].Channel[i]] = 1; } } break; } - case COUNTRY_CODE_GLOBAL_DOMAIN: + case COUNTRY_CODE_GLOBAL_DOMAIN: { GET_DOT11D_INFO(ieee)->bEnabled = 0; Dot11d_Reset(ieee); ieee->bGlobalDomain = true; break; } - case COUNTRY_CODE_WORLD_WIDE_13_INDEX://lzm add 080826 + case COUNTRY_CODE_WORLD_WIDE_13_INDEX://lzm add 080826 { - ieee->MinPassiveChnlNum=12; - ieee->IbssStartChnl= 10; - break; + ieee->MinPassiveChnlNum = 12; + ieee->IbssStartChnl = 10; + break; } - default: + default: { Dot11d_Init(ieee); ieee->bGlobalDomain = false; memset(GET_DOT11D_INFO(ieee)->channel_map, 0, sizeof(GET_DOT11D_INFO(ieee)->channel_map)); - for (i=1;i<=14;i++) - { + for (i = 1; i <= 14; i++) GET_DOT11D_INFO(ieee)->channel_map[i] = 1; - } break; } } @@ -2609,12 +2602,12 @@ short rtl8180_init(struct net_device *dev) eeprom_93cx6_read(&eeprom, EEPROM_COUNTRY_CODE>>1, &eeprom_val); priv->channel_plan = eeprom_val & 0xFF; - if(priv->channel_plan > COUNTRY_CODE_GLOBAL_DOMAIN){ + if (priv->channel_plan > COUNTRY_CODE_GLOBAL_DOMAIN) { printk("rtl8180_init:Error channel plan! Set to default.\n"); priv->channel_plan = 0; } - DMESG("Channel plan is %d\n",priv->channel_plan); + DMESG("Channel plan is %d\n", priv->channel_plan); rtl8180_set_channel_map(priv->channel_plan, priv->ieee80211); //FIXME: these constants are placed in a bad pleace. @@ -2630,7 +2623,7 @@ short rtl8180_init(struct net_device *dev) priv->RFProgType = 0; priv->bInHctTest = false; - priv->irq_enabled=0; + priv->irq_enabled = 0; rtl8180_statistics_init(&priv->stats); rtl8180_link_detect_init(&priv->link_detect); @@ -2652,8 +2645,8 @@ short rtl8180_init(struct net_device *dev) priv->ieee80211->ps_is_queue_empty = rtl8180_is_tx_queue_empty; priv->hw_wep = hwwep; - priv->prism_hdr=0; - priv->dev=dev; + priv->prism_hdr = 0; + priv->dev = dev; priv->retry_rts = DEFAULT_RETRY_RTS; priv->retry_data = DEFAULT_RETRY_DATA; priv->RFChangeInProgress = false; @@ -2836,7 +2829,7 @@ short rtl8180_init(struct net_device *dev) eeprom_93cx6_read(&eeprom, EEPROM_SW_REVD_OFFSET, &eeprom_val); usValue = eeprom_val; - DMESG("usValue is 0x%x\n",usValue); + DMESG("usValue is 0x%x\n", usValue); //3Read AntennaDiversity // SW Antenna Diversity. @@ -2851,19 +2844,19 @@ short rtl8180_init(struct net_device *dev) else priv->EEPROMDefaultAntenna1 = true; - if( priv->RegSwAntennaDiversityMechanism == 0 ) // Auto + if (priv->RegSwAntennaDiversityMechanism == 0) // Auto /* 0: default from EEPROM. */ priv->bSwAntennaDiverity = priv->EEPROMSwAntennaDiversity; else /* 1:disable antenna diversity, 2: enable antenna diversity. */ - priv->bSwAntennaDiverity = ((priv->RegSwAntennaDiversityMechanism == 1)? false : true); + priv->bSwAntennaDiverity = ((priv->RegSwAntennaDiversityMechanism == 1) ? false : true); if (priv->RegDefaultAntenna == 0) /* 0: default from EEPROM. */ priv->bDefaultAntenna1 = priv->EEPROMDefaultAntenna1; else /* 1: main, 2: aux. */ - priv->bDefaultAntenna1 = ((priv->RegDefaultAntenna== 2) ? true : false); + priv->bDefaultAntenna1 = ((priv->RegDefaultAntenna == 2) ? true : false); /* rtl8185 can calc plcp len in HW.*/ priv->hw_plcp_len = 1; @@ -2871,17 +2864,17 @@ short rtl8180_init(struct net_device *dev) priv->plcp_preamble_mode = 2; /*the eeprom type is stored in RCR register bit #6 */ if (RCR_9356SEL & read_nic_dword(dev, RCR)) - priv->epromtype=EPROM_93c56; + priv->epromtype = EPROM_93c56; else - priv->epromtype=EPROM_93c46; + priv->epromtype = EPROM_93c46; eeprom_93cx6_multiread(&eeprom, 0x7, (__le16 *) dev->dev_addr, 3); - for(i=1,j=0; i<14; i+=2,j++){ + for (i = 1, j = 0; i < 14; i += 2, j++) { eeprom_93cx6_read(&eeprom, EPROM_TXPW_CH1_2 + j, &word); - priv->chtxpwr[i]=word & 0xff; - priv->chtxpwr[i+1]=(word & 0xff00)>>8; + priv->chtxpwr[i] = word & 0xff; + priv->chtxpwr[i+1] = (word & 0xff00)>>8; } for (i = 1, j = 0; i < 14; i += 2, j++) { eeprom_93cx6_read(&eeprom, EPROM_TXPW_OFDM_CH1_2 + j, &word); @@ -2908,7 +2901,7 @@ short rtl8180_init(struct net_device *dev) priv->ofdm_txpwr_base = (word>>4) & 0xf; eeprom_93cx6_read(&eeprom, EPROM_VERSION, &version); - DMESG("EEPROM version %x",version); + DMESG("EEPROM version %x", version); priv->rcr_csense = 3; eeprom_93cx6_read(&eeprom, ENERGY_TRESHOLD, &eeprom_val); @@ -2924,43 +2917,43 @@ short rtl8180_init(struct net_device *dev) priv->rf_set_chan = rtl8225z2_rf_set_chan; priv->rf_set_sens = NULL; - if (0!=alloc_rx_desc_ring(dev, priv->rxbuffersize, priv->rxringcount)) + if (0 != alloc_rx_desc_ring(dev, priv->rxbuffersize, priv->rxringcount)) return -ENOMEM; - if (0!=alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, + if (0 != alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, TX_MANAGEPRIORITY_RING_ADDR)) return -ENOMEM; - if (0!=alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, + if (0 != alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, TX_BKPRIORITY_RING_ADDR)) return -ENOMEM; - if (0!=alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, + if (0 != alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, TX_BEPRIORITY_RING_ADDR)) return -ENOMEM; - if (0!=alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, + if (0 != alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, TX_VIPRIORITY_RING_ADDR)) return -ENOMEM; - if (0!=alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, + if (0 != alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, TX_VOPRIORITY_RING_ADDR)) return -ENOMEM; - if (0!=alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, + if (0 != alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, TX_HIGHPRIORITY_RING_ADDR)) return -ENOMEM; - if (0!=alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txbeaconcount, + if (0 != alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txbeaconcount, TX_BEACON_RING_ADDR)) return -ENOMEM; - if(request_irq(dev->irq, (void *)rtl8180_interrupt, IRQF_SHARED, dev->name, dev)){ + if (request_irq(dev->irq, (void *)rtl8180_interrupt, IRQF_SHARED, dev->name, dev)) { DMESGE("Error allocating IRQ %d", dev->irq); return -1; - }else{ - priv->irq=dev->irq; - DMESG("IRQ %d",dev->irq); + } else { + priv->irq = dev->irq; + DMESG("IRQ %d", dev->irq); } return 0; @@ -2977,28 +2970,28 @@ void rtl8180_set_hw_wep(struct net_device *dev) u8 security; u32 key0_word4; - pgreg=read_nic_byte(dev, PGSELECT); - write_nic_byte(dev, PGSELECT, pgreg &~ (1<key0[3]& 0xff; - write_nic_dword(dev,KEY0,(priv->key0[0])); - write_nic_dword(dev,KEY0+4,(priv->key0[1])); - write_nic_dword(dev,KEY0+4+4,(priv->key0[2])); - write_nic_dword(dev,KEY0+4+4+4,(key0_word4)); - - security = read_nic_byte(dev,SECURITY); + key0_word4 &= ~0xff; + key0_word4 |= priv->key0[3] & 0xff; + write_nic_dword(dev, KEY0, (priv->key0[0])); + write_nic_dword(dev, KEY0+4, (priv->key0[1])); + write_nic_dword(dev, KEY0+4+4, (priv->key0[2])); + write_nic_dword(dev, KEY0+4+4+4, (key0_word4)); + + security = read_nic_byte(dev, SECURITY); security |= (1<> 24)); write_nic_byte(dev, 0x7e, ((phyw & 0x00ff0000) >> 16)); write_nic_byte(dev, 0x7d, ((phyw & 0x0000ff00) >> 8)); - write_nic_byte(dev, 0x7c, ((phyw & 0x000000ff) )); + write_nic_byte(dev, 0x7c, ((phyw & 0x000000ff))); /* this is ok to fail when we write AGC table. check for AGC table might be * done by masking with 0x7f instead of 0xff @@ -3066,13 +3059,13 @@ void rtl8185_write_phy(struct net_device *dev, u8 adr, u32 data) //if(phyr != (data&0xff)) DMESGW("Phy write timeout %x %x %x", phyr, data,adr); } -inline void write_phy_ofdm (struct net_device *dev, u8 adr, u32 data) +inline void write_phy_ofdm(struct net_device *dev, u8 adr, u32 data) { data = data & 0xff; rtl8185_write_phy(dev, adr, data); } -void write_phy_cck (struct net_device *dev, u8 adr, u32 data) +void write_phy_cck(struct net_device *dev, u8 adr, u32 data) { data = data & 0xff; rtl8185_write_phy(dev, adr, data | 0x10000); @@ -3082,19 +3075,19 @@ void rtl8185_set_rate(struct net_device *dev) { int i; u16 word; - int basic_rate,min_rr_rate,max_rr_rate; + int basic_rate, min_rr_rate, max_rr_rate; basic_rate = ieeerate2rtlrate(240); min_rr_rate = ieeerate2rtlrate(60); max_rr_rate = ieeerate2rtlrate(240); write_nic_byte(dev, RESP_RATE, - max_rr_rate<dev_addr)[0]); - write_nic_word(dev, MAC4, ((u32*)dev->dev_addr)[1] & 0xffff ); + write_nic_dword(dev, MAC0, ((u32 *)dev->dev_addr)[0]); + write_nic_word(dev, MAC4, ((u32 *)dev->dev_addr)[1] & 0xffff); rtl8180_set_mode(dev, EPROM_CMD_NORMAL); rtl8180_update_msr(dev); @@ -3136,15 +3129,15 @@ void rtl8180_adapter_start(struct net_device *dev) */ write_nic_byte(dev, - CONFIG2, read_nic_byte(dev,CONFIG2) &~\ + CONFIG2, read_nic_byte(dev, CONFIG2) & ~\ (1<rf_init(dev); - if(priv->rf_set_sens != NULL) - priv->rf_set_sens(dev,priv->sens); + if (priv->rf_set_sens != NULL) + priv->rf_set_sens(dev, priv->sens); rtl8180_irq_enable(dev); netif_start_queue(dev); @@ -3183,8 +3176,8 @@ void rtl8180_start_tx_beacon(struct net_device *dev) rtl8180_irq_disable(dev); rtl8180_beacon_tx_enable(dev); - word = read_nic_word(dev, AtimWnd) &~ AtimWnd_AtimWnd; - write_nic_word(dev, AtimWnd,word);// word |= + word = read_nic_word(dev, AtimWnd) & ~AtimWnd_AtimWnd; + write_nic_word(dev, AtimWnd, word); // word |= word = read_nic_word(dev, BintrItv); word &= ~BintrItv_BintrItv; @@ -3215,7 +3208,7 @@ MgntActSet_802_11_PowerSaveMode( ) { // Currently, we do not change power save mode on IBSS mode. - if(priv->ieee80211->iw_mode == IW_MODE_ADHOC) + if (priv->ieee80211->iw_mode == IW_MODE_ADHOC) return false; priv->ieee80211->ps = rtPsMode; @@ -3239,53 +3232,48 @@ void LeisurePSLeave(struct r8180_priv *priv) } } -void rtl8180_hw_wakeup_wq (struct work_struct *work) +void rtl8180_hw_wakeup_wq(struct work_struct *work) { struct delayed_work *dwork = to_delayed_work(work); - struct ieee80211_device *ieee = container_of(dwork,struct ieee80211_device,hw_wakeup_wq); + struct ieee80211_device *ieee = container_of(dwork, struct ieee80211_device, hw_wakeup_wq); struct net_device *dev = ieee->dev; rtl8180_hw_wakeup(dev); } -void rtl8180_hw_sleep_wq (struct work_struct *work) +void rtl8180_hw_sleep_wq(struct work_struct *work) { struct delayed_work *dwork = to_delayed_work(work); - struct ieee80211_device *ieee = container_of(dwork,struct ieee80211_device,hw_sleep_wq); + struct ieee80211_device *ieee = container_of(dwork, struct ieee80211_device, hw_sleep_wq); struct net_device *dev = ieee->dev; rtl8180_hw_sleep_down(dev); } -static void MgntLinkKeepAlive(struct r8180_priv *priv ) +static void MgntLinkKeepAlive(struct r8180_priv *priv) { if (priv->keepAliveLevel == 0) return; - if(priv->ieee80211->state == IEEE80211_LINKED) - { + if (priv->ieee80211->state == IEEE80211_LINKED) { // // Keep-Alive. // - if ( (priv->keepAliveLevel== 2) || + if ((priv->keepAliveLevel == 2) || (priv->link_detect.LastNumTxUnicast == priv->NumTxUnicast && - priv->link_detect.LastNumRxUnicast == priv->ieee80211->NumRxUnicast ) - ) - { + priv->link_detect.LastNumRxUnicast == priv->ieee80211->NumRxUnicast) + ) { priv->link_detect.IdleCount++; // // Send a Keep-Alive packet packet to AP if we had been idle for a while. // - if(priv->link_detect.IdleCount >= ((KEEP_ALIVE_INTERVAL / CHECK_FOR_HANG_PERIOD)-1) ) - { + if (priv->link_detect.IdleCount >= ((KEEP_ALIVE_INTERVAL / CHECK_FOR_HANG_PERIOD)-1)) { priv->link_detect.IdleCount = 0; ieee80211_sta_ps_send_null_frame(priv->ieee80211, false); } - } - else - { + } else { priv->link_detect.IdleCount = 0; } priv->link_detect.LastNumTxUnicast = priv->NumTxUnicast; @@ -3303,19 +3291,18 @@ void rtl8180_watch_dog(struct net_device *dev) u32 TotalRxNum = 0; u16 SlotIndex = 0; u16 i = 0; - if(priv->ieee80211->actscanning == false){ - if((priv->ieee80211->iw_mode != IW_MODE_ADHOC) && (priv->ieee80211->state == IEEE80211_NOLINK) && (priv->ieee80211->beinretry == false) && (priv->eRFPowerState == eRfOn)){ + if (priv->ieee80211->actscanning == false) { + if ((priv->ieee80211->iw_mode != IW_MODE_ADHOC) && (priv->ieee80211->state == IEEE80211_NOLINK) && (priv->ieee80211->beinretry == false) && (priv->eRFPowerState == eRfOn)) IPSEnter(dev); - } } //YJ,add,080828,for link state check - if((priv->ieee80211->state == IEEE80211_LINKED) && (priv->ieee80211->iw_mode == IW_MODE_INFRA)){ + if ((priv->ieee80211->state == IEEE80211_LINKED) && (priv->ieee80211->iw_mode == IW_MODE_INFRA)) { SlotIndex = (priv->link_detect.SlotIndex++) % priv->link_detect.SlotNum; priv->link_detect.RxFrameNum[SlotIndex] = priv->ieee80211->NumRxDataInPeriod + priv->ieee80211->NumRxBcnInPeriod; - for( i=0; ilink_detect.SlotNum; i++ ) - TotalRxNum+= priv->link_detect.RxFrameNum[i]; + for (i = 0; i < priv->link_detect.SlotNum; i++) + TotalRxNum += priv->link_detect.RxFrameNum[i]; - if(TotalRxNum == 0){ + if (TotalRxNum == 0) { priv->ieee80211->state = IEEE80211_ASSOCIATING; queue_work(priv->ieee80211->wq, &priv->ieee80211->associate_procedure_wq); } @@ -3329,20 +3316,20 @@ void rtl8180_watch_dog(struct net_device *dev) priv->bLeisurePs = true; else if (priv->PowerProfile == POWER_PROFILE_AC) { LeisurePSLeave(priv); - priv->bLeisurePs= false; + priv->bLeisurePs = false; } - if(priv->ieee80211->state == IEEE80211_LINKED){ + if (priv->ieee80211->state == IEEE80211_LINKED) { priv->link_detect.NumRxOkInPeriod = priv->ieee80211->NumRxDataInPeriod; - if( priv->link_detect.NumRxOkInPeriod> 666 || - priv->link_detect.NumTxOkInPeriod> 666 ) { + if (priv->link_detect.NumRxOkInPeriod > 666 || + priv->link_detect.NumTxOkInPeriod > 666) { bBusyTraffic = true; } - if(((priv->link_detect.NumRxOkInPeriod + priv->link_detect.NumTxOkInPeriod) > 8) + if (((priv->link_detect.NumRxOkInPeriod + priv->link_detect.NumTxOkInPeriod) > 8) || (priv->link_detect.NumRxOkInPeriod > 2)) { - bEnterPS= false; + bEnterPS = false; } else - bEnterPS= true; + bEnterPS = true; if (bEnterPS) LeisurePSEnter(priv); @@ -3361,17 +3348,17 @@ int _rtl8180_up(struct net_device *dev) { struct r8180_priv *priv = ieee80211_priv(dev); - priv->up=1; + priv->up = 1; DMESG("Bringing up iface"); rtl8185b_adapter_start(dev); rtl8185b_rx_enable(dev); rtl8185b_tx_enable(dev); - if(priv->bInactivePs){ - if(priv->ieee80211->iw_mode == IW_MODE_ADHOC) + if (priv->bInactivePs) { + if (priv->ieee80211->iw_mode == IW_MODE_ADHOC) IPSLeave(dev); } - timer_rate_adaptive((unsigned long)dev); + timer_rate_adaptive((unsigned long)dev); watch_dog_adaptive((unsigned long)dev); if (priv->bSwAntennaDiverity) SwAntennaDiversityTimerCallback(dev); @@ -3394,7 +3381,8 @@ int rtl8180_up(struct net_device *dev) { struct r8180_priv *priv = ieee80211_priv(dev); - if (priv->up == 1) return -1; + if (priv->up == 1) + return -1; return _rtl8180_up(dev); } @@ -3418,7 +3406,7 @@ int rtl8180_down(struct net_device *dev) if (priv->up == 0) return -1; - priv->up=0; + priv->up = 0; ieee80211_softmac_stop_protocol(priv->ieee80211); /* FIXME */ @@ -3434,8 +3422,8 @@ int rtl8180_down(struct net_device *dev) cancel_delayed_work(&priv->ieee80211->hw_dig_wq); cancel_delayed_work(&priv->ieee80211->tx_pw_wq); del_timer_sync(&priv->SwAntennaDiversityTimer); - SetZebraRFPowerState8185(dev,eRfOff); - memset(&(priv->ieee80211->current_network),0,sizeof(struct ieee80211_network)); + SetZebraRFPowerState8185(dev, eRfOff); + memset(&(priv->ieee80211->current_network), 0, sizeof(struct ieee80211_network)); priv->ieee80211->state = IEEE80211_NOLINK; return 0; } @@ -3485,7 +3473,7 @@ static void r8180_set_multicast(struct net_device *dev) struct r8180_priv *priv = ieee80211_priv(dev); short promisc; - promisc = (dev->flags & IFF_PROMISC) ? 1:0; + promisc = (dev->flags & IFF_PROMISC) ? 1 : 0; if (promisc != priv->promisc) rtl8180_restart(dev); @@ -3502,7 +3490,7 @@ int r8180_set_mac_adr(struct net_device *dev, void *mac) memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); - if(priv->ieee80211->iw_mode == IW_MODE_MASTER) + if (priv->ieee80211->iw_mode == IW_MODE_MASTER) memcpy(priv->ieee80211->current_network.bssid, dev->dev_addr, ETH_ALEN); if (priv->up) { @@ -3520,7 +3508,7 @@ int rtl8180_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); struct iwreq *wrq = (struct iwreq *) rq; - int ret=-1; + int ret = -1; switch (cmd) { case RTL_IOCTL_WPA_SUPPLICANT: @@ -3551,21 +3539,21 @@ static int __devinit rtl8180_pci_probe(struct pci_dev *pdev, { unsigned long ioaddr = 0; struct net_device *dev = NULL; - struct r8180_priv *priv= NULL; + struct r8180_priv *priv = NULL; u8 unit = 0; unsigned long pmem_start, pmem_len, pmem_flags; DMESG("Configuring chip resources"); - if( pci_enable_device (pdev) ){ + if (pci_enable_device(pdev)) { DMESG("Failed to enable PCI device"); return -EIO; } pci_set_master(pdev); pci_set_dma_mask(pdev, 0xffffff00ULL); - pci_set_consistent_dma_mask(pdev,0xffffff00ULL); + pci_set_consistent_dma_mask(pdev, 0xffffff00ULL); dev = alloc_ieee80211(sizeof(struct r8180_priv)); if (!dev) return -ENOMEM; @@ -3580,20 +3568,20 @@ static int __devinit rtl8180_pci_probe(struct pci_dev *pdev, pmem_start = pci_resource_start(pdev, 1); pmem_len = pci_resource_len(pdev, 1); - pmem_flags = pci_resource_flags (pdev, 1); + pmem_flags = pci_resource_flags(pdev, 1); if (!(pmem_flags & IORESOURCE_MEM)) { DMESG("region #1 not a MMIO resource, aborting"); goto fail; } - if( ! request_mem_region(pmem_start, pmem_len, RTL8180_MODULE_NAME)) { + if (!request_mem_region(pmem_start, pmem_len, RTL8180_MODULE_NAME)) { DMESG("request_mem_region failed!"); goto fail; } - ioaddr = (unsigned long)ioremap_nocache( pmem_start, pmem_len); - if( ioaddr == (unsigned long)NULL ){ + ioaddr = (unsigned long)ioremap_nocache(pmem_start, pmem_len); + if (ioaddr == (unsigned long)NULL) { DMESG("ioremap failed!"); goto fail1; } @@ -3610,16 +3598,16 @@ static int __devinit rtl8180_pci_probe(struct pci_dev *pdev, dev->netdev_ops = &rtl8180_netdev_ops; dev->wireless_handlers = &r8180_wx_handlers_def; - dev->type=ARPHRD_ETHER; + dev->type = ARPHRD_ETHER; dev->watchdog_timeo = HZ*3; - if (dev_alloc_name(dev, ifname) < 0){ + if (dev_alloc_name(dev, ifname) < 0) { DMESG("Oops: devname already taken! Trying wlan%%d...\n"); ifname = "wlan%d"; dev_alloc_name(dev, ifname); } - if(rtl8180_init(dev)!=0){ + if (rtl8180_init(dev) != 0) { DMESG("Initialization failed"); goto fail1; } @@ -3633,16 +3621,16 @@ static int __devinit rtl8180_pci_probe(struct pci_dev *pdev, DMESG("Driver probe completed\n"); return 0; fail1: - if( dev->mem_start != (unsigned long)NULL ){ - iounmap( (void *)dev->mem_start ); - release_mem_region( pci_resource_start(pdev, 1), - pci_resource_len(pdev, 1) ); + if (dev->mem_start != (unsigned long)NULL) { + iounmap((void *)dev->mem_start); + release_mem_region(pci_resource_start(pdev, 1), + pci_resource_len(pdev, 1)); } fail: - if(dev){ + if (dev) { if (priv->irq) { free_irq(dev->irq, dev); - dev->irq=0; + dev->irq = 0; } free_ieee80211(dev); } @@ -3670,19 +3658,19 @@ static void __devexit rtl8180_pci_remove(struct pci_dev *pdev) rtl8180_reset(dev); mdelay(10); - if(priv->irq){ - DMESG("Freeing irq %d",dev->irq); + if (priv->irq) { + DMESG("Freeing irq %d", dev->irq); free_irq(dev->irq, dev); - priv->irq=0; + priv->irq = 0; } free_rx_desc_ring(dev); free_tx_desc_rings(dev); - if( dev->mem_start != (unsigned long)NULL ){ - iounmap( (void *)dev->mem_start ); - release_mem_region( pci_resource_start(pdev, 1), - pci_resource_len(pdev, 1) ); + if (dev->mem_start != (unsigned long)NULL) { + iounmap((void *)dev->mem_start); + release_mem_region(pci_resource_start(pdev, 1), + pci_resource_len(pdev, 1)); } free_ieee80211(dev); @@ -3742,7 +3730,7 @@ static int __init rtl8180_pci_module_init(void) static void __exit rtl8180_pci_module_exit(void) { - pci_unregister_driver (&rtl8180_pci_driver); + pci_unregister_driver(&rtl8180_pci_driver); rtl8180_proc_module_remove(); ieee80211_crypto_tkip_exit(); ieee80211_crypto_ccmp_exit(); @@ -3757,15 +3745,15 @@ void rtl8180_try_wake_queue(struct net_device *dev, int pri) short enough_desc; struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - spin_lock_irqsave(&priv->tx_lock,flags); - enough_desc = check_nic_enought_desc(dev,pri); - spin_unlock_irqrestore(&priv->tx_lock,flags); + spin_lock_irqsave(&priv->tx_lock, flags); + enough_desc = check_nic_enought_desc(dev, pri); + spin_unlock_irqrestore(&priv->tx_lock, flags); - if(enough_desc) + if (enough_desc) ieee80211_rtl_wake_queue(priv->ieee80211); } -void rtl8180_tx_isr(struct net_device *dev, int pri,short error) +void rtl8180_tx_isr(struct net_device *dev, int pri, short error) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); u32 *tail; //tail virtual addr @@ -3777,64 +3765,65 @@ void rtl8180_tx_isr(struct net_device *dev, int pri,short error) unsigned long flag; /* physical addr are ok on 32 bits since we set DMA mask*/ int offs; - int j,i; + int j, i; int hd; - if (error) priv->stats.txretry++; //tony 20060601 - spin_lock_irqsave(&priv->tx_lock,flag); - switch(pri) { + if (error) + priv->stats.txretry++; //tony 20060601 + spin_lock_irqsave(&priv->tx_lock, flag); + switch (pri) { case MANAGE_PRIORITY: tail = priv->txmapringtail; begin = priv->txmapring; head = priv->txmapringhead; - nic = read_nic_dword(dev,TX_MANAGEPRIORITY_RING_ADDR); + nic = read_nic_dword(dev, TX_MANAGEPRIORITY_RING_ADDR); nicbegin = priv->txmapringdma; break; case BK_PRIORITY: tail = priv->txbkpringtail; begin = priv->txbkpring; head = priv->txbkpringhead; - nic = read_nic_dword(dev,TX_BKPRIORITY_RING_ADDR); + nic = read_nic_dword(dev, TX_BKPRIORITY_RING_ADDR); nicbegin = priv->txbkpringdma; break; case BE_PRIORITY: tail = priv->txbepringtail; begin = priv->txbepring; head = priv->txbepringhead; - nic = read_nic_dword(dev,TX_BEPRIORITY_RING_ADDR); + nic = read_nic_dword(dev, TX_BEPRIORITY_RING_ADDR); nicbegin = priv->txbepringdma; break; case VI_PRIORITY: tail = priv->txvipringtail; begin = priv->txvipring; head = priv->txvipringhead; - nic = read_nic_dword(dev,TX_VIPRIORITY_RING_ADDR); + nic = read_nic_dword(dev, TX_VIPRIORITY_RING_ADDR); nicbegin = priv->txvipringdma; break; case VO_PRIORITY: tail = priv->txvopringtail; begin = priv->txvopring; head = priv->txvopringhead; - nic = read_nic_dword(dev,TX_VOPRIORITY_RING_ADDR); + nic = read_nic_dword(dev, TX_VOPRIORITY_RING_ADDR); nicbegin = priv->txvopringdma; break; case HI_PRIORITY: tail = priv->txhpringtail; begin = priv->txhpring; head = priv->txhpringhead; - nic = read_nic_dword(dev,TX_HIGHPRIORITY_RING_ADDR); + nic = read_nic_dword(dev, TX_HIGHPRIORITY_RING_ADDR); nicbegin = priv->txhpringdma; break; default: - spin_unlock_irqrestore(&priv->tx_lock,flag); + spin_unlock_irqrestore(&priv->tx_lock, flag); return ; } - nicv = (u32*) ((nic - nicbegin) + (u8*)begin); - if((head <= tail && (nicv > tail || nicv < head)) || - (head > tail && (nicv > tail && nicv < head))){ + nicv = (u32 *)((nic - nicbegin) + (u8*)begin); + if ((head <= tail && (nicv > tail || nicv < head)) || + (head > tail && (nicv > tail && nicv < head))) { DMESGW("nic has lost pointer"); - spin_unlock_irqrestore(&priv->tx_lock,flag); + spin_unlock_irqrestore(&priv->tx_lock, flag); rtl8180_restart(dev); return; } @@ -3844,22 +3833,22 @@ void rtl8180_tx_isr(struct net_device *dev, int pri,short error) * and the previous of the pointed (might be in process ??) */ offs = (nic - nicbegin); - offs = offs / 8 /4; - hd = (head - begin) /8; + offs = offs / 8 / 4; + hd = (head - begin) / 8; - if(offs >= hd) + if (offs >= hd) j = offs - hd; else - j = offs + (priv->txringcount -1 -hd); + j = offs + (priv->txringcount-1-hd); - j-=2; - if(j<0) j=0; + j -= 2; + if (j < 0) + j = 0; - for(i=0;iCurrRetryCnt += (u16)((*head) & (0x000000ff)); if (!error) priv->NumTxOkTotal++; @@ -3868,12 +3857,12 @@ void rtl8180_tx_isr(struct net_device *dev, int pri,short error) if (!error) priv->NumTxOkBytesTotal += (*(head+3)) & (0x00000fff); - *head = *head &~ (1<<31); + *head = *head & ~(1<<31); - if((head - begin)/8 == priv->txringcount-1) - head=begin; + if ((head - begin)/8 == priv->txringcount-1) + head = begin; else - head+=8; + head += 8; } /* the head has been moved to the last certainly TXed @@ -3885,14 +3874,14 @@ void rtl8180_tx_isr(struct net_device *dev, int pri,short error) * TXed no memory leak occour at all. */ - switch(pri) { + switch (pri) { case MANAGE_PRIORITY: priv->txmapringhead = head; - if(priv->ack_tx_to_ieee){ - if(rtl8180_is_tx_queue_empty(dev)){ + if (priv->ack_tx_to_ieee) { + if (rtl8180_is_tx_queue_empty(dev)) { priv->ack_tx_to_ieee = 0; - ieee80211_ps_tx_ack(priv->ieee80211,!error); + ieee80211_ps_tx_ack(priv->ieee80211, !error); } } break; @@ -3913,17 +3902,17 @@ void rtl8180_tx_isr(struct net_device *dev, int pri,short error) break; } - spin_unlock_irqrestore(&priv->tx_lock,flag); + spin_unlock_irqrestore(&priv->tx_lock, flag); } void rtl8180_tx_irq_wq(struct work_struct *work) { struct delayed_work *dwork = to_delayed_work(work); - struct ieee80211_device * ieee = (struct ieee80211_device*) - container_of(dwork, struct ieee80211_device, watch_dog_wq); + struct ieee80211_device * ieee = (struct ieee80211_device *) + container_of(dwork, struct ieee80211_device, watch_dog_wq); struct net_device *dev = ieee->dev; - rtl8180_tx_isr(dev,MANAGE_PRIORITY,0); + rtl8180_tx_isr(dev, MANAGE_PRIORITY, 0); } irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) { @@ -3933,18 +3922,19 @@ irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) u32 inta; /* We should return IRQ_NONE, but for now let me keep this */ - if(priv->irq_enabled == 0) return IRQ_HANDLED; + if (priv->irq_enabled == 0) + return IRQ_HANDLED; - spin_lock_irqsave(&priv->irq_th_lock,flags); + spin_lock_irqsave(&priv->irq_th_lock, flags); //ISR: 4bytes inta = read_nic_dword(dev, ISR);// & priv->IntrMask; - write_nic_dword(dev,ISR,inta); // reset int situation + write_nic_dword(dev, ISR, inta); // reset int situation priv->stats.shints++; - if(!inta){ - spin_unlock_irqrestore(&priv->irq_th_lock,flags); + if (!inta) { + spin_unlock_irqrestore(&priv->irq_th_lock, flags); return IRQ_HANDLED; /* most probably we can safely return IRQ_NONE, @@ -3960,8 +3950,8 @@ irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) priv->stats.ints++; - if(!netif_running(dev)) { - spin_unlock_irqrestore(&priv->irq_th_lock,flags); + if (!netif_running(dev)) { + spin_unlock_irqrestore(&priv->irq_th_lock, flags); return IRQ_HANDLED; } @@ -3975,70 +3965,70 @@ irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) priv->stats.txbeaconerr++; if (inta & IMR_TMGDOK) - rtl8180_tx_isr(dev,MANAGE_PRIORITY,0); + rtl8180_tx_isr(dev, MANAGE_PRIORITY, 0); - if(inta & ISR_THPDER){ + if (inta & ISR_THPDER) { priv->stats.txhperr++; - rtl8180_tx_isr(dev,HI_PRIORITY,1); + rtl8180_tx_isr(dev, HI_PRIORITY, 1); priv->ieee80211->stats.tx_errors++; } - if(inta & ISR_THPDOK){ //High priority tx ok + if (inta & ISR_THPDOK) { //High priority tx ok priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 priv->stats.txhpokint++; - rtl8180_tx_isr(dev,HI_PRIORITY,0); + rtl8180_tx_isr(dev, HI_PRIORITY, 0); } - if(inta & ISR_RER) { + if (inta & ISR_RER) priv->stats.rxerr++; - } - if(inta & ISR_TBKDER){ //corresponding to BK_PRIORITY + + if (inta & ISR_TBKDER) { //corresponding to BK_PRIORITY priv->stats.txbkperr++; priv->ieee80211->stats.tx_errors++; - rtl8180_tx_isr(dev,BK_PRIORITY,1); + rtl8180_tx_isr(dev, BK_PRIORITY, 1); rtl8180_try_wake_queue(dev, BE_PRIORITY); } - if(inta & ISR_TBEDER){ //corresponding to BE_PRIORITY + if (inta & ISR_TBEDER) { //corresponding to BE_PRIORITY priv->stats.txbeperr++; priv->ieee80211->stats.tx_errors++; - rtl8180_tx_isr(dev,BE_PRIORITY,1); + rtl8180_tx_isr(dev, BE_PRIORITY, 1); rtl8180_try_wake_queue(dev, BE_PRIORITY); } - if(inta & ISR_TNPDER){ //corresponding to VO_PRIORITY + if (inta & ISR_TNPDER) { //corresponding to VO_PRIORITY priv->stats.txnperr++; priv->ieee80211->stats.tx_errors++; - rtl8180_tx_isr(dev,NORM_PRIORITY,1); + rtl8180_tx_isr(dev, NORM_PRIORITY, 1); rtl8180_try_wake_queue(dev, NORM_PRIORITY); } - if(inta & ISR_TLPDER){ //corresponding to VI_PRIORITY + if (inta & ISR_TLPDER) { //corresponding to VI_PRIORITY priv->stats.txlperr++; priv->ieee80211->stats.tx_errors++; - rtl8180_tx_isr(dev,LOW_PRIORITY,1); + rtl8180_tx_isr(dev, LOW_PRIORITY, 1); rtl8180_try_wake_queue(dev, LOW_PRIORITY); } - if(inta & ISR_ROK){ + if (inta & ISR_ROK) { priv->stats.rxint++; tasklet_schedule(&priv->irq_rx_tasklet); } - if(inta & ISR_RQoSOK ){ + if (inta & ISR_RQoSOK) { priv->stats.rxint++; tasklet_schedule(&priv->irq_rx_tasklet); } - if(inta & ISR_BcnInt) { + + if (inta & ISR_BcnInt) rtl8180_prepare_beacon(dev); - } - if(inta & ISR_RDU){ + if (inta & ISR_RDU) { DMESGW("No RX descriptor available"); priv->stats.rxrdu++; tasklet_schedule(&priv->irq_rx_tasklet); } - if(inta & ISR_RXFOVW){ + if (inta & ISR_RXFOVW) { priv->stats.rxoverflow++; tasklet_schedule(&priv->irq_rx_tasklet); } @@ -4046,39 +4036,39 @@ irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) if (inta & ISR_TXFOVW) priv->stats.txoverflow++; - if(inta & ISR_TNPDOK){ //Normal priority tx ok + if (inta & ISR_TNPDOK) { //Normal priority tx ok priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 priv->stats.txnpokint++; - rtl8180_tx_isr(dev,NORM_PRIORITY,0); + rtl8180_tx_isr(dev, NORM_PRIORITY, 0); } - if(inta & ISR_TLPDOK){ //Low priority tx ok + if (inta & ISR_TLPDOK) { //Low priority tx ok priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 priv->stats.txlpokint++; - rtl8180_tx_isr(dev,LOW_PRIORITY,0); + rtl8180_tx_isr(dev, LOW_PRIORITY, 0); rtl8180_try_wake_queue(dev, LOW_PRIORITY); } - if(inta & ISR_TBKDOK){ //corresponding to BK_PRIORITY + if (inta & ISR_TBKDOK) { //corresponding to BK_PRIORITY priv->stats.txbkpokint++; priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 - rtl8180_tx_isr(dev,BK_PRIORITY,0); + rtl8180_tx_isr(dev, BK_PRIORITY, 0); rtl8180_try_wake_queue(dev, BE_PRIORITY); } - if(inta & ISR_TBEDOK){ //corresponding to BE_PRIORITY + if (inta & ISR_TBEDOK) { //corresponding to BE_PRIORITY priv->stats.txbeperr++; priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 - rtl8180_tx_isr(dev,BE_PRIORITY,0); + rtl8180_tx_isr(dev, BE_PRIORITY, 0); rtl8180_try_wake_queue(dev, BE_PRIORITY); } force_pci_posting(dev); - spin_unlock_irqrestore(&priv->irq_th_lock,flags); + spin_unlock_irqrestore(&priv->irq_th_lock, flags); return IRQ_HANDLED; } -void rtl8180_irq_rx_tasklet(struct r8180_priv* priv) +void rtl8180_irq_rx_tasklet(struct r8180_priv *priv) { rtl8180_rx(priv->dev); } @@ -4095,10 +4085,10 @@ void GPIOChangeRFWorkItemCallBack(struct work_struct *work) char *argv[3]; static char *RadioPowerPath = "/etc/acpi/events/RadioPower.sh"; - static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL}; + static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL}; static int readf_count = 0; - if(readf_count % 10 == 0) + if (readf_count % 10 == 0) priv->PowerProfile = read_acadapter_file("/proc/acpi/ac_adapter/AC0/state"); readf_count = (readf_count+1)%0xffff; -- cgit v0.10.2 From 3f56c109d0ef8437d89cdb84af02728ec9cc1150 Mon Sep 17 00:00:00 2001 From: "Prashant P. Shah" Date: Thu, 13 May 2010 23:09:08 +0530 Subject: Staging: rtl8187se: fixed C99 comments style issues in r8180_core.c This is a patch to the r8180_core.c file that fixes the C99 comments style issues found by the checkpatch.pl tool. Signed-off-by: Prashant P. Shah Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8187se/r8180_core.c b/drivers/staging/rtl8187se/r8180_core.c index 37be5ae..dacefea 100644 --- a/drivers/staging/rtl8187se/r8180_core.c +++ b/drivers/staging/rtl8187se/r8180_core.c @@ -620,7 +620,7 @@ void fix_rx_fifo(struct net_device *dev) struct buffer *rxbuf; u8 rx_desc_size; - rx_desc_size = 8; // 4*8 = 32 bytes + rx_desc_size = 8; /* 4*8 = 32 bytes */ for (tmp = priv->rxring, rxbuf = priv->rxbufferhead; (tmp < (priv->rxring)+(priv->rxringcount)*rx_desc_size); @@ -673,7 +673,7 @@ void rtl8180_RSSI_calc(struct net_device *dev, u8 *rssi, u8 *qual) q = *qual; orig_qual = *qual; - _rssi = 0; // avoid gcc complains.. + _rssi = 0; /* avoid gcc complains.. */ if (q <= 0x4e) { temp = QUALITY_MAP[q]; @@ -1025,7 +1025,7 @@ short alloc_tx_desc_ring(struct net_device *dev, int bufsize, int count, } break; } - *tmp = *tmp & ~(1<<31); // descriptor empty, owned by the drv + *tmp = *tmp & ~(1<<31); /* descriptor empty, owned by the drv */ *(tmp+2) = (u32)dma_tmp; *(tmp+3) = bufsize; @@ -1131,7 +1131,7 @@ short alloc_rx_desc_ring(struct net_device *dev, u16 bufsize, int count) void *buf; u8 rx_desc_size; - rx_desc_size = 8; // 4*8 = 32 bytes + rx_desc_size = 8; /* 4*8 = 32 bytes */ if ((bufsize & 0xfff) != bufsize) { DMESGE("RX buffer allocation too large"); @@ -1167,15 +1167,15 @@ short alloc_rx_desc_ring(struct net_device *dev, u16 bufsize, int count) DMESGE("Unable to allocate mem RX buf"); return -1; } - *tmp = 0; // zero pads the header of the descriptor + *tmp = 0; /* zero pads the header of the descriptor */ *tmp = *tmp | (bufsize&0xfff); *(tmp+2) = (u32)dma_tmp; - *tmp = *tmp | (1<<31); // descriptor void, owned by the NIC + *tmp = *tmp | (1<<31); /* descriptor void, owned by the NIC */ tmp = tmp+rx_desc_size; } - *(tmp-rx_desc_size) = *(tmp-rx_desc_size) | (1<<30); // this is the last descriptor + *(tmp-rx_desc_size) = *(tmp-rx_desc_size) | (1<<30); /* this is the last descriptor */ return 0; } @@ -1330,15 +1330,14 @@ u16 N_DBPSOfRate(u16 DataRate) return N_DBPS; } -// -// Description: -// For Netgear case, they want good-looking singal strength. -// +/* + * For Netgear case, they want good-looking singal strength. + */ long NetgearSignalStrengthTranslate(long LastSS, long CurrSS) { long RetSS; - // Step 1. Scale mapping. + /* Step 1. Scale mapping. */ if (CurrSS >= 71 && CurrSS <= 100) RetSS = 90 + ((CurrSS - 70) / 3); else if (CurrSS >= 41 && CurrSS <= 70) @@ -1360,39 +1359,37 @@ long NetgearSignalStrengthTranslate(long LastSS, long CurrSS) else RetSS = CurrSS; - // Step 2. Smoothing. + /* Step 2. Smoothing. */ if (LastSS > 0) RetSS = ((LastSS * 5) + (RetSS) + 5) / 6; return RetSS; } -// -// Description: -// Translate 0-100 signal strength index into dBm. -// +/* + * Translate 0-100 signal strength index into dBm. + */ long TranslateToDbm8185(u8 SignalStrengthIndex) { long SignalPower; - // Translate to dBm (x=0.5y-95). + /* Translate to dBm (x=0.5y-95). */ SignalPower = (long)((SignalStrengthIndex + 1) >> 1); SignalPower -= 95; return SignalPower; } -// -// Description: -// Perform signal smoothing for dynamic mechanism. -// This is different with PerformSignalSmoothing8185 in smoothing fomula. -// No dramatic adjustion is apply because dynamic mechanism need some degree -// of correctness. Ported from 8187B. -// +/* + * Perform signal smoothing for dynamic mechanism. + * This is different with PerformSignalSmoothing8185 in smoothing fomula. + * No dramatic adjustion is apply because dynamic mechanism need some degree + * of correctness. Ported from 8187B. + */ void PerformUndecoratedSignalSmoothing8185(struct r8180_priv *priv, bool bCckRate) { - // Determin the current packet is CCK rate. + /* Determin the current packet is CCK rate. */ priv->bCurCCKPkt = bCckRate; if (priv->UndecoratedSmoothedSS >= 0) @@ -1409,7 +1406,9 @@ void PerformUndecoratedSignalSmoothing8185(struct r8180_priv *priv, } -/* This is rough RX isr handling routine*/ +/* + * This is rough RX isr handling routine + */ void rtl8180_rx(struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); @@ -1446,7 +1445,7 @@ void rtl8180_rx(struct net_device *dev) if ((*(priv->rxringtail)) & (1<<31)) { /* we have got an RX int, but the descriptor - * we are pointing is empty*/ + * we are pointing is empty */ priv->stats.rxnodata++; priv->ieee80211->stats.rx_errors++; @@ -1476,7 +1475,7 @@ void rtl8180_rx(struct net_device *dev) if (*(priv->rxringtail) & (1<<27)) { priv->stats.rxdmafail++; - //DMESG("EE: RX DMA FAILED at buffer pointed by descriptor %x",(u32)priv->rxringtail); + /* DMESG("EE: RX DMA FAILED at buffer pointed by descriptor %x",(u32)priv->rxringtail); */ goto drop; } @@ -1558,30 +1557,30 @@ void rtl8180_rx(struct net_device *dev) stats.rate = rtl8180_rate2rate(rate); Antenna = (((*(priv->rxringtail+3)) & (0x00008000)) == 0) ? 0 : 1; - if (!rtl8180_IsWirelessBMode(stats.rate)) { // OFDM rate. - RxAGC_dBm = rxpower+1; //bias - } else { // CCK rate. - RxAGC_dBm = signal; //bit 0 discard + if (!rtl8180_IsWirelessBMode(stats.rate)) { /* OFDM rate. */ + RxAGC_dBm = rxpower+1; /* bias */ + } else { /* CCK rate. */ + RxAGC_dBm = signal; /* bit 0 discard */ - LNA = (u8) (RxAGC_dBm & 0x60) >> 5 ; //bit 6~ bit 5 - BB = (u8) (RxAGC_dBm & 0x1F); // bit 4 ~ bit 0 + LNA = (u8) (RxAGC_dBm & 0x60) >> 5; /* bit 6~ bit 5 */ + BB = (u8) (RxAGC_dBm & 0x1F); /* bit 4 ~ bit 0 */ - RxAGC_dBm = -(LNA_gain[LNA] + (BB*2)); //Pin_11b=-(LNA_gain+BB_gain) (dBm) + RxAGC_dBm = -(LNA_gain[LNA] + (BB*2)); /* Pin_11b=-(LNA_gain+BB_gain) (dBm) */ - RxAGC_dBm += 4; //bias + RxAGC_dBm += 4; /* bias */ } - if (RxAGC_dBm & 0x80) //absolute value + if (RxAGC_dBm & 0x80) /* absolute value */ RXAGC = ~(RxAGC_dBm)+1; bCckRate = rtl8180_IsWirelessBMode(stats.rate); - // Translate RXAGC into 1-100. - if (!rtl8180_IsWirelessBMode(stats.rate)) { // OFDM rate. + /* Translate RXAGC into 1-100. */ + if (!rtl8180_IsWirelessBMode(stats.rate)) { /* OFDM rate. */ if (RXAGC > 90) RXAGC = 90; else if (RXAGC < 25) RXAGC = 25; RXAGC = (90-RXAGC)*100/65; - } else { // CCK rate. + } else { /* CCK rate. */ if (RXAGC > 95) RXAGC = 95; else if (RXAGC < 30) @@ -1594,19 +1593,19 @@ void rtl8180_rx(struct net_device *dev) priv->RSSI = RSSI; /* SQ translation formula is provided by SD3 DZ. 2006.06.27 */ if (quality >= 127) - quality = 1;//0; //0 will cause epc to show signal zero , walk aroud now; + quality = 1; /*0; */ /* 0 will cause epc to show signal zero , walk aroud now; */ else if (quality < 27) quality = 100; else quality = 127 - quality; priv->SignalQuality = quality; - stats.signal = (u8)quality;//priv->wstats.qual.level = priv->SignalStrength; + stats.signal = (u8)quality; /*priv->wstats.qual.level = priv->SignalStrength; */ stats.signalstrength = RXAGC; if (stats.signalstrength > 100) stats.signalstrength = 100; stats.signalstrength = (stats.signalstrength * 70)/100 + 30; - // printk("==========================>rx : RXAGC is %d,signalstrength is %d\n",RXAGC,stats.signalstrength); + /* printk("==========================>rx : RXAGC is %d,signalstrength is %d\n",RXAGC,stats.signalstrength); */ stats.rssi = priv->wstats.qual.qual = priv->SignalQuality; stats.noise = priv->wstats.qual.noise = 100 - priv->wstats.qual.qual; bHwError = (((*(priv->rxringtail)) & (0x00000fff)) == 4080) | (((*(priv->rxringtail)) & (0x04000000)) != 0) @@ -1627,24 +1626,23 @@ void rtl8180_rx(struct net_device *dev) * because dynamic mechanism need some degree * of correctness. */ PerformUndecoratedSignalSmoothing8185(priv, bCckRate); - // - // For good-looking singal strength. - // + + /* For good-looking singal strength. */ SignalStrengthIndex = NetgearSignalStrengthTranslate( priv->LastSignalStrengthInPercent, priv->SignalStrength); priv->LastSignalStrengthInPercent = SignalStrengthIndex; priv->Stats_SignalStrength = TranslateToDbm8185((u8)SignalStrengthIndex); - // - // We need more correct power of received packets and the "SignalStrength" of RxStats is beautified, - // so we record the correct power here. - // + /* + * We need more correct power of received packets and the "SignalStrength" of RxStats is beautified, + * so we record the correct power here. + */ priv->Stats_SignalQuality = (long)(priv->Stats_SignalQuality * 5 + (long)priv->SignalQuality + 5) / 6; priv->Stats_RecvSignalPower = (long)(priv->Stats_RecvSignalPower * 5 + priv->RecvSignalPower - 1) / 6; - // Figure out which antenna that received the lasted packet. - priv->LastRxPktAntenna = Antenna ? 1 : 0; // 0: aux, 1: main. + /* Figure out which antenna that received the lasted packet. */ + priv->LastRxPktAntenna = Antenna ? 1 : 0; /* 0: aux, 1: main. */ SwAntennaDiversityRxOk8185(dev, priv->SignalStrength); } @@ -1717,7 +1715,7 @@ void rtl8180_rx(struct net_device *dev) sizeof(u8), PCI_DMA_FROMDEVICE); -drop: // this is used when we have not enough mem +drop: /* this is used when we have not enough mem */ /* restore the descriptor */ *(priv->rxringtail+2) = priv->rxbuffer->dma; *(priv->rxringtail) = *(priv->rxringtail) & ~0xfff; @@ -1769,7 +1767,8 @@ void rtl8180_data_hard_resume(struct net_device *dev) rtl8180_set_mode(dev, EPROM_CMD_NORMAL); } -/* this function TX data frames when the ieee80211 stack requires this. +/* + * This function TX data frames when the ieee80211 stack requires this. * It checks also if we need to stop the ieee tx queue, eventually do it */ void rtl8180_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, int @@ -1785,12 +1784,12 @@ rate) { rate = ieeerate2rtlrate(rate); /* - * This function doesn't require lock because we make - * sure it's called with the tx_lock already acquired. - * this come from the kernel's hard_xmit callback (through - * the ieee stack, or from the try_wake_queue (again through - * the ieee stack. - */ + * This function doesn't require lock because we make + * sure it's called with the tx_lock already acquired. + * this come from the kernel's hard_xmit callback (through + * the ieee stack, or from the try_wake_queue (again through + * the ieee stack. + */ priority = AC2Q(skb->priority); spin_lock_irqsave(&priv->tx_lock, flags); @@ -1812,7 +1811,8 @@ rate) { spin_unlock_irqrestore(&priv->tx_lock, flags); } -/* This is a rough attempt to TX a frame +/* + * This is a rough attempt to TX a frame * This is called by the ieee 80211 stack to TX management frames. * If the ring is full packet are dropped (for data frame the queue * is stopped before this can happen). For this reason it is better @@ -1822,7 +1822,7 @@ rate) { * Since queues for Management and Data frames are different we * might use a different lock than tx_lock (for example mgmt_tx_lock) */ -/* these function may loops if invoked with 0 descriptors or 0 len buffer*/ +/* these function may loops if invoked with 0 descriptors or 0 len buffer */ int rtl8180_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); @@ -1850,7 +1850,7 @@ int rtl8180_hard_start_xmit(struct sk_buff *skb, struct net_device *dev) return NETDEV_TX_OK; } -// longpre 144+48 shortpre 72+24 +/* longpre 144+48 shortpre 72+24 */ u16 rtl8180_len2duration(u32 len, short rate, short *ext) { u16 duration; @@ -1858,7 +1858,7 @@ u16 rtl8180_len2duration(u32 len, short rate, short *ext) *ext = 0; switch (rate) { - case 0://1mbps + case 0: /* 1mbps */ *ext = 0; duration = ((len+4)<<4) / 0x2; drift = ((len+4)<<4) % 0x2; @@ -1866,7 +1866,7 @@ u16 rtl8180_len2duration(u32 len, short rate, short *ext) break; duration++; break; - case 1://2mbps + case 1: /* 2mbps */ *ext = 0; duration = ((len+4)<<4) / 0x4; drift = ((len+4)<<4) % 0x4; @@ -1874,7 +1874,7 @@ u16 rtl8180_len2duration(u32 len, short rate, short *ext) break; duration++; break; - case 2: //5.5mbps + case 2: /* 5.5mbps */ *ext = 0; duration = ((len+4)<<4) / 0xb; drift = ((len+4)<<4) % 0xb; @@ -1883,7 +1883,7 @@ u16 rtl8180_len2duration(u32 len, short rate, short *ext) duration++; break; default: - case 3://11mbps + case 3: /* 11mbps */ *ext = 0; duration = ((len+4)<<4) / 0x16; drift = ((len+4)<<4) % 0x16; @@ -1905,8 +1905,8 @@ void rtl8180_prepare_beacon(struct net_device *dev) struct sk_buff *skb; u16 word = read_nic_word(dev, BcnItv); - word &= ~BcnItv_BcnItv; // clear Bcn_Itv - word |= cpu_to_le16(priv->ieee80211->current_network.beacon_interval); //0x64; + word &= ~BcnItv_BcnItv; /* clear Bcn_Itv */ + word |= cpu_to_le16(priv->ieee80211->current_network.beacon_interval); /* 0x64; */ write_nic_word(dev, BcnItv, word); skb = ieee80211_get_beacon(priv->ieee80211); @@ -1917,7 +1917,8 @@ void rtl8180_prepare_beacon(struct net_device *dev) } } -/* This function do the real dirty work: it enqueues a TX command +/* + * This function do the real dirty work: it enqueues a TX command * descriptor in the ring buffer, copyes the frame in a TX buffer * and kicks the NIC to ensure it does the DMA transfer. */ @@ -2004,38 +2005,38 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, ThisFrameTime = ComputeTxTime(len + sCrcLng, rtl8180_rate2rate(rate), 0, bUseShortPreamble); TxDescDuration = ThisFrameTime; - } else {// Unicast packet + } else { /* Unicast packet */ u16 AckTime; - //YJ,add,080828,for Keep alive + /* YJ,add,080828,for Keep alive */ priv->NumTxUnicast++; /* Figure out ACK rate according to BSS basic rate * and Tx rate. */ - AckTime = ComputeTxTime(14, 10, 0, 0); // AckCTSLng = 14 use 1M bps send + AckTime = ComputeTxTime(14, 10, 0, 0); /* AckCTSLng = 14 use 1M bps send */ - if (((len + sCrcLng) > priv->rts) && priv->rts) { // RTS/CTS. + if (((len + sCrcLng) > priv->rts) && priv->rts) { /* RTS/CTS. */ u16 RtsTime, CtsTime; - //u16 CtsRate; + /* u16 CtsRate; */ bRTSEnable = 1; bCTSEnable = 0; - // Rate and time required for RTS. + /* Rate and time required for RTS. */ RtsTime = ComputeTxTime(sAckCtsLng/8, priv->ieee80211->basic_rate, 0, 0); - // Rate and time required for CTS. - CtsTime = ComputeTxTime(14, 10, 0, 0); // AckCTSLng = 14 use 1M bps send + /* Rate and time required for CTS. */ + CtsTime = ComputeTxTime(14, 10, 0, 0); /* AckCTSLng = 14 use 1M bps send */ - // Figure out time required to transmit this frame. + /* Figure out time required to transmit this frame. */ ThisFrameTime = ComputeTxTime(len + sCrcLng, rtl8180_rate2rate(rate), 0, bUseShortPreamble); - // RTS-CTS-ThisFrame-ACK. + /* RTS-CTS-ThisFrame-ACK. */ RtsDur = CtsTime + ThisFrameTime + AckTime + 3*aSifsTime; TxDescDuration = RtsTime + RtsDur; - } else {// Normal case. + } else { /* Normal case. */ bCTSEnable = 0; bRTSEnable = 0; RtsDur = 0; @@ -2045,20 +2046,20 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, } if (!(frag_hdr->frame_control & IEEE80211_FCTL_MOREFRAGS)) { - // ThisFrame-ACK. + /* ThisFrame-ACK. */ Duration = aSifsTime + AckTime; - } else { // One or more fragments remained. + } else { /* One or more fragments remained. */ u16 NextFragTime; - NextFragTime = ComputeTxTime(len + sCrcLng, //pretend following packet length equal current packet + NextFragTime = ComputeTxTime(len + sCrcLng, /* pretend following packet length equal current packet */ rtl8180_rate2rate(rate), 0, bUseShortPreamble); - //ThisFrag-ACk-NextFrag-ACK. + /* ThisFrag-ACk-NextFrag-ACK. */ Duration = NextFragTime + 3*aSifsTime + 2*AckTime; } - } // End of Unicast packet + } /* End of Unicast packet */ frag_hdr->duration_id = Duration; @@ -2081,26 +2082,26 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, return remain; } - *tail = 0; // zeroes header + *tail = 0; /* zeroes header */ *(tail+1) = 0; *(tail+3) = 0; *(tail+5) = 0; *(tail+6) = 0; *(tail+7) = 0; - /*FIXME: this should be triggered by HW encryption parameters.*/ + /* FIXME: this should be triggered by HW encryption parameters.*/ *tail |= (1<<15); /* no encrypt */ if (remain == len && !descfrag) { ownbit_flag = false; - *tail = *tail | (1<<29) ; //fist segment of the packet + *tail = *tail | (1<<29) ; /* fist segment of the packet */ *tail = *tail | (len); } else { ownbit_flag = true; } for (i = 0; i < buflen && remain > 0; i++, remain--) { - ((u8 *)buf)[i] = txbuf[i]; //copy data into descriptor pointed DMAble buffer + ((u8 *)buf)[i] = txbuf[i]; /* copy data into descriptor pointed DMAble buffer */ if (remain == 4 && i+4 >= buflen) break; /* ensure the last desc has at least 4 bytes payload */ @@ -2108,23 +2109,23 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, } txbuf = txbuf + i; *(tail+3) = *(tail+3) & ~0xfff; - *(tail+3) = *(tail+3) | i; // buffer lenght - // Use short preamble or not + *(tail+3) = *(tail+3) | i; /* buffer length */ + /* Use short preamble or not */ if (priv->ieee80211->current_network.capability&WLAN_CAPABILITY_SHORT_PREAMBLE) - if (priv->plcp_preamble_mode == 1 && rate != 0) // short mode now, not long! - ;// *tail |= (1<<16); // enable short preamble mode. + if (priv->plcp_preamble_mode == 1 && rate != 0) /* short mode now, not long! */ + ; /* *tail |= (1<<16); */ /* enable short preamble mode. */ if (bCTSEnable) *tail |= (1<<18); - if (bRTSEnable) { //rts enable - *tail |= ((ieeerate2rtlrate(priv->ieee80211->basic_rate))<<19);//RTS RATE - *tail |= (1<<23);//rts enable - *(tail+1) |= (RtsDur&0xffff);//RTS Duration + if (bRTSEnable) { /* rts enable */ + *tail |= ((ieeerate2rtlrate(priv->ieee80211->basic_rate))<<19); /* RTS RATE */ + *tail |= (1<<23); /* rts enable */ + *(tail+1) |= (RtsDur&0xffff); /* RTS Duration */ } - *(tail+3) |= ((TxDescDuration&0xffff)<<16); //DURATION -// *(tail+3) |= (0xe6<<16); - *(tail+5) |= (11<<8);//(priv->retry_data<<8); //retry lim ; + *(tail+3) |= ((TxDescDuration&0xffff)<<16); /* DURATION */ + /* *(tail+3) |= (0xe6<<16); */ + *(tail+5) |= (11<<8); /* (priv->retry_data<<8); */ /* retry lim; */ *tail = *tail | ((rate&0xf) << 24); @@ -2134,20 +2135,20 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, duration = rtl8180_len2duration(len, rate, &ext); *(tail+1) = *(tail+1) | ((duration & 0x7fff)<<16); if (ext) - *(tail+1) = *(tail+1) | (1<<31); //plcp length extension + *(tail+1) = *(tail+1) | (1<<31); /* plcp length extension */ } if (morefrag) - *tail = (*tail) | (1<<17); // more fragment + *tail = (*tail) | (1<<17); /* more fragment */ if (!remain) - *tail = (*tail) | (1<<28); // last segment of frame + *tail = (*tail) | (1<<28); /* last segment of frame */ *(tail+5) = *(tail+5)|(2<<27); *(tail+7) = *(tail+7)|(1<<4); wmb(); if (ownbit_flag) - *tail = *tail | (1<<31); // descriptor ready to be txed + *tail = *tail | (1<<31); /* descriptor ready to be txed */ if ((tail - begin)/8 == count-1) tail = begin; @@ -2184,7 +2185,8 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, priv->txhpbufstail = buflist; break; case BEACON_PRIORITY: - /* the HW seems to be happy with the 1st + /* + * The HW seems to be happy with the 1st * descriptor filled and the 2nd empty... * So always update descriptor 1 and never * touch 2nd @@ -2192,7 +2194,7 @@ short rtl8180_tx(struct net_device *dev, u8* txbuf, int len, int priority, break; } } - *temp_tail = *temp_tail | (1<<31); // descriptor ready to be txed + *temp_tail = *temp_tail | (1<<31); /* descriptor ready to be txed */ rtl8180_dma_kick(dev, priority); return 0; @@ -2303,12 +2305,14 @@ void rtl8180_hw_sleep(struct net_device *dev, u32 th, u32 tl) spin_lock_irqsave(&priv->ps_lock, flags); - /* Writing HW register with 0 equals to disable + /* + * Writing HW register with 0 equals to disable * the timer, that is not really what we want */ tl -= MSECS(4+16+7); - /* If the interval in witch we are requested to sleep is too + /* + * If the interval in witch we are requested to sleep is too * short then give up and remain awake */ if (((tl >= rb) && (tl-rb) <= MSECS(MIN_SLEEP_TIME)) @@ -2323,9 +2327,10 @@ void rtl8180_hw_sleep(struct net_device *dev, u32 th, u32 tl) priv->DozePeriodInPast2Sec += jiffies_to_msecs(tmp); - queue_delayed_work(priv->ieee80211->wq, &priv->ieee80211->hw_wakeup_wq, tmp); //as tl may be less than rb + queue_delayed_work(priv->ieee80211->wq, &priv->ieee80211->hw_wakeup_wq, tmp); /* as tl may be less than rb */ } - /* if we suspect the TimerInt is gone beyond tl + /* + * If we suspect the TimerInt is gone beyond tl * while setting it, then give up */ @@ -2351,12 +2356,12 @@ void rtl8180_wmm_param_update(struct work_struct *work) u8 i; if (!ieee->current_network.QoS_Enable) { - //legacy ac_xx_param update + /* legacy ac_xx_param update */ AcParam.longData = 0; - AcParam.f.AciAifsn.f.AIFSN = 2; // Follow 802.11 DIFS. + AcParam.f.AciAifsn.f.AIFSN = 2; /* Follow 802.11 DIFS. */ AcParam.f.AciAifsn.f.ACM = 0; - AcParam.f.Ecw.f.ECWmin = 3; // Follow 802.11 CWmin. - AcParam.f.Ecw.f.ECWmax = 7; // Follow 802.11 CWmax. + AcParam.f.Ecw.f.ECWmin = 3; /* Follow 802.11 CWmin. */ + AcParam.f.Ecw.f.ECWmax = 7; /* Follow 802.11 CWmax. */ AcParam.f.TXOPLimit = 0; for (eACI = 0; eACI < AC_MAX; eACI++) { AcParam.f.AciAifsn.f.ACI = (u8)eACI; @@ -2364,7 +2369,7 @@ void rtl8180_wmm_param_update(struct work_struct *work) u8 u1bAIFS; u32 u4bAcParam; pAcParam = (PAC_PARAM)(&AcParam); - // Retrive paramters to udpate. + /* Retrive paramters to udpate. */ u1bAIFS = pAcParam->f.AciAifsn.f.AIFSN * (((mode&IEEE_G) == IEEE_G) ? 9 : 20) + aSifsTime; u4bAcParam = ((((u32)(pAcParam->f.TXOPLimit))<f.Ecw.f.ECWmax))<f.AciAifsn.f.ACI; - //Mode G/A: slotTimeTimer = 9; Mode B: 20 + /* Mode G/A: slotTimeTimer = 9; Mode B: 20 */ u1bAIFS = pAcParam->f.AciAifsn.f.AIFSN * (((mode&IEEE_G) == IEEE_G) ? 9 : 20) + aSifsTime; u4bAcParam = ((((u32)(pAcParam->f.TXOPLimit)) << AC_PARAM_TXOP_LIMIT_OFFSET) | (((u32)(pAcParam->f.Ecw.f.ECWmax)) << AC_PARAM_ECW_MAX_OFFSET) | @@ -2433,7 +2438,7 @@ void rtl8180_wmm_param_update(struct work_struct *work) void rtl8180_tx_irq_wq(struct work_struct *work); void rtl8180_restart_wq(struct work_struct *work); -//void rtl8180_rq_tx_ack(struct work_struct *work); +/* void rtl8180_rq_tx_ack(struct work_struct *work); */ void rtl8180_watch_dog_wq(struct work_struct *work); void rtl8180_hw_wakeup_wq(struct work_struct *work); void rtl8180_hw_sleep_wq(struct work_struct *work); @@ -2449,15 +2454,15 @@ void watch_dog_adaptive(unsigned long data) return; } - // Tx High Power Mechanism. + /* Tx High Power Mechanism. */ if (CheckHighPower((struct net_device *)data)) queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->tx_pw_wq); - // Tx Power Tracking on 87SE. + /* Tx Power Tracking on 87SE. */ if (CheckTxPwrTracking((struct net_device *)data)) TxPwrTracking87SE((struct net_device *)data); - // Perform DIG immediately. + /* Perform DIG immediately. */ if (CheckDig((struct net_device *)data) == true) queue_work(priv->ieee80211->wq, (void *)&priv->ieee80211->hw_dig_wq); rtl8180_watch_dog((struct net_device *)data); @@ -2469,24 +2474,24 @@ void watch_dog_adaptive(unsigned long data) } static CHANNEL_LIST ChannelPlan[] = { - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64},19}, //FCC - {{1,2,3,4,5,6,7,8,9,10,11},11}, //IC - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //ETSI - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //Spain. Change to ETSI. - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //France. Change to ETSI. - {{14,36,40,44,48,52,56,60,64},9}, //MKK - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14, 36,40,44,48,52,56,60,64},22},//MKK1 - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, //Israel. - {{1,2,3,4,5,6,7,8,9,10,11,12,13,34,38,42,46},17}, // For 11a , TELEC - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14},14}, //For Global Domain. 1-11:active scan, 12-14 passive scan. //+YJ, 080626 - {{1,2,3,4,5,6,7,8,9,10,11,12,13},13} //world wide 13: ch1~ch11 active scan, ch12~13 passive //lzm add 080826 + {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64},19}, /* FCC */ + {{1,2,3,4,5,6,7,8,9,10,11},11}, /* IC */ + {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, /* ETSI */ + {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, /* Spain. Change to ETSI. */ + {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, /* France. Change to ETSI. */ + {{14,36,40,44,48,52,56,60,64},9}, /* MKK */ + {{1,2,3,4,5,6,7,8,9,10,11,12,13,14, 36,40,44,48,52,56,60,64},22},/* MKK1 */ + {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64},21}, /* Israel. */ + {{1,2,3,4,5,6,7,8,9,10,11,12,13,34,38,42,46},17}, /* For 11a , TELEC */ + {{1,2,3,4,5,6,7,8,9,10,11,12,13,14},14}, /* For Global Domain. 1-11:active scan, 12-14 passive scan. //+YJ, 080626 */ + {{1,2,3,4,5,6,7,8,9,10,11,12,13},13} /* world wide 13: ch1~ch11 active scan, ch12~13 passive //lzm add 080826 */ }; static void rtl8180_set_channel_map(u8 channel_plan, struct ieee80211_device *ieee) { int i; - //lzm add 080826 + /* lzm add 080826 */ ieee->MinPassiveChnlNum = MAX_CHANNEL_NUMBER+1; ieee->IbssStartChnl = 0; @@ -2504,9 +2509,9 @@ static void rtl8180_set_channel_map(u8 channel_plan, struct ieee80211_device *ie Dot11d_Init(ieee); ieee->bGlobalDomain = false; if (ChannelPlan[channel_plan].Len != 0) { - // Clear old channel map + /* Clear old channel map */ memset(GET_DOT11D_INFO(ieee)->channel_map, 0, sizeof(GET_DOT11D_INFO(ieee)->channel_map)); - // Set new channel map + /* Set new channel map */ for (i = 0; i < ChannelPlan[channel_plan].Len; i++) { if (ChannelPlan[channel_plan].Channel[i] <= 14) GET_DOT11D_INFO(ieee)->channel_map[ChannelPlan[channel_plan].Channel[i]] = 1; @@ -2521,7 +2526,7 @@ static void rtl8180_set_channel_map(u8 channel_plan, struct ieee80211_device *ie ieee->bGlobalDomain = true; break; } - case COUNTRY_CODE_WORLD_WIDE_13_INDEX://lzm add 080826 + case COUNTRY_CODE_WORLD_WIDE_13_INDEX:/* lzm add 080826 */ { ieee->MinPassiveChnlNum = 12; ieee->IbssStartChnl = 10; @@ -2541,7 +2546,7 @@ static void rtl8180_set_channel_map(u8 channel_plan, struct ieee80211_device *ie void GPIOChangeRFWorkItemCallBack(struct work_struct *work); -//YJ,add,080828 +/* YJ,add,080828 */ static void rtl8180_statistics_init(struct Stats *pstats) { memset(pstats, 0, sizeof(struct Stats)); @@ -2552,8 +2557,8 @@ static void rtl8180_link_detect_init(plink_detect_t plink_detect) memset(plink_detect, 0, sizeof(link_detect_t)); plink_detect->SlotNum = DEFAULT_SLOT_NUM; } -//YJ,add,080828,end +/* YJ,add,080828,end */ static void rtl8187se_eeprom_register_read(struct eeprom_93cx6 *eeprom) { struct net_device *dev = eeprom->data; @@ -2610,11 +2615,11 @@ short rtl8180_init(struct net_device *dev) DMESG("Channel plan is %d\n", priv->channel_plan); rtl8180_set_channel_map(priv->channel_plan, priv->ieee80211); - //FIXME: these constants are placed in a bad pleace. - priv->txbuffsize = 2048;//1024; - priv->txringcount = 32;//32; - priv->rxbuffersize = 2048;//1024; - priv->rxringcount = 64;//32; + /* FIXME: these constants are placed in a bad pleace. */ + priv->txbuffsize = 2048; /* 1024; */ + priv->txringcount = 32; /* 32; */ + priv->rxbuffersize = 2048; /* 1024; */ + priv->rxringcount = 64; /* 32; */ priv->txbeaconcount = 2; priv->rx_skb_complete = 1; @@ -2635,7 +2640,7 @@ short rtl8180_init(struct net_device *dev) IEEE_SOFTMAC_ASSOCIATE | IEEE_SOFTMAC_PROBERQ | IEEE_SOFTMAC_PROBERS | IEEE_SOFTMAC_TX_QUEUE; priv->ieee80211->active_scan = 1; - priv->ieee80211->rate = 110; //11 mbps + priv->ieee80211->rate = 110; /* 11 mbps */ priv->ieee80211->modulation = IEEE80211_CCK_MODULATION; priv->ieee80211->host_encrypt = 1; priv->ieee80211->host_decrypt = 1; @@ -2653,19 +2658,19 @@ short rtl8180_init(struct net_device *dev) priv->SetRFPowerStateInProgress = false; priv->RFProgType = 0; priv->bInHctTest = false; - priv->bInactivePs = true;//false; + priv->bInactivePs = true; /* false; */ priv->ieee80211->bInactivePs = priv->bInactivePs; priv->bSwRfProcessing = false; priv->eRFPowerState = eRfOff; priv->RfOffReason = 0; priv->LedStrategy = SW_LED_MODE0; - priv->TxPollingTimes = 0;//lzm add 080826 + priv->TxPollingTimes = 0; /* lzm add 080826 */ priv->bLeisurePs = true; priv->dot11PowerSaveMode = eActive; priv->AdMinCheckPeriod = 5; priv->AdMaxCheckPeriod = 10; - priv->AdMaxRxSsThreshold = 30;//60->30 - priv->AdRxSsThreshold = 20;//50->20 + priv->AdMaxRxSsThreshold = 30; /* 60->30 */ + priv->AdRxSsThreshold = 20; /* 50->20 */ priv->AdCheckPeriod = priv->AdMinCheckPeriod; priv->AdTickCount = 0; priv->AdRxSignalStrength = -1; @@ -2686,15 +2691,15 @@ short rtl8180_init(struct net_device *dev) priv->bTxPowerTrack = false; priv->ThermalMeter = 0; priv->FalseAlarmRegValue = 0; - priv->RegDigOfdmFaUpTh = 0xc; // Upper threhold of OFDM false alarm, which is used in DIG. + priv->RegDigOfdmFaUpTh = 0xc; /* Upper threhold of OFDM false alarm, which is used in DIG. */ priv->DIG_NumberFallbackVote = 0; priv->DIG_NumberUpgradeVote = 0; priv->LastSignalStrengthInPercent = 0; priv->Stats_SignalStrength = 0; priv->LastRxPktAntenna = 0; - priv->SignalQuality = 0; // in 0-100 index. + priv->SignalQuality = 0; /* in 0-100 index. */ priv->Stats_SignalQuality = 0; - priv->RecvSignalPower = 0; // in dBm. + priv->RecvSignalPower = 0; /* in dBm. */ priv->Stats_RecvSignalPower = 0; priv->AdMainAntennaRxOkCnt = 0; priv->AdAuxAntennaRxOkCnt = 0; @@ -2824,27 +2829,27 @@ short rtl8180_init(struct net_device *dev) priv->ieee80211->modulation |= IEEE80211_OFDM_MODULATION; priv->ieee80211->short_slot = 1; - // just for sync 85 + /* just for sync 85 */ priv->enable_gpio0 = 0; eeprom_93cx6_read(&eeprom, EEPROM_SW_REVD_OFFSET, &eeprom_val); usValue = eeprom_val; DMESG("usValue is 0x%x\n", usValue); - //3Read AntennaDiversity + /* 3Read AntennaDiversity */ - // SW Antenna Diversity. + /* SW Antenna Diversity. */ if ((usValue & EEPROM_SW_AD_MASK) != EEPROM_SW_AD_ENABLE) priv->EEPROMSwAntennaDiversity = false; else priv->EEPROMSwAntennaDiversity = true; - // Default Antenna to use. + /* Default Antenna to use. */ if ((usValue & EEPROM_DEF_ANT_MASK) != EEPROM_DEF_ANT_1) priv->EEPROMDefaultAntenna1 = false; else priv->EEPROMDefaultAntenna1 = true; - if (priv->RegSwAntennaDiversityMechanism == 0) // Auto + if (priv->RegSwAntennaDiversityMechanism == 0) /* Auto */ /* 0: default from EEPROM. */ priv->bSwAntennaDiverity = priv->EEPROMSwAntennaDiversity; else @@ -2858,11 +2863,11 @@ short rtl8180_init(struct net_device *dev) /* 1: main, 2: aux. */ priv->bDefaultAntenna1 = ((priv->RegDefaultAntenna == 2) ? true : false); - /* rtl8185 can calc plcp len in HW.*/ + /* rtl8185 can calc plcp len in HW. */ priv->hw_plcp_len = 1; priv->plcp_preamble_mode = 2; - /*the eeprom type is stored in RCR register bit #6 */ + /* the eeprom type is stored in RCR register bit #6 */ if (RCR_9356SEL & read_nic_dword(dev, RCR)) priv->epromtype = EPROM_93c56; else @@ -2997,9 +3002,9 @@ void rtl8180_set_hw_wep(struct net_device *dev) void rtl8185_rf_pins_enable(struct net_device *dev) { -// u16 tmp; -// tmp = read_nic_word(dev, RFPinsEnable); - write_nic_word(dev, RFPinsEnable, 0x1fff);// | tmp); + /* u16 tmp; */ + /* tmp = read_nic_word(dev, RFPinsEnable); */ + write_nic_word(dev, RFPinsEnable, 0x1fff); /* | tmp); */ } void rtl8185_set_anaparam2(struct net_device *dev, u32 a) @@ -3047,7 +3052,7 @@ void rtl8185_write_phy(struct net_device *dev, u8 adr, u32 data) phyw = ((data<<8) | adr); - // Note that, we must write 0xff7c after 0x7d-0x7f to write BB register. + /* Note that, we must write 0xff7c after 0x7d-0x7f to write BB register. */ write_nic_byte(dev, 0x7f, ((phyw & 0xff000000) >> 24)); write_nic_byte(dev, 0x7e, ((phyw & 0x00ff0000) >> 16)); write_nic_byte(dev, 0x7d, ((phyw & 0x0000ff00) >> 8)); @@ -3056,7 +3061,7 @@ void rtl8185_write_phy(struct net_device *dev, u8 adr, u32 data) /* this is ok to fail when we write AGC table. check for AGC table might be * done by masking with 0x7f instead of 0xff */ - //if(phyr != (data&0xff)) DMESGW("Phy write timeout %x %x %x", phyr, data,adr); + /* if (phyr != (data&0xff)) DMESGW("Phy write timeout %x %x %x", phyr, data, adr); */ } inline void write_phy_ofdm(struct net_device *dev, u8 adr, u32 data) @@ -3102,7 +3107,8 @@ void rtl8180_adapter_start(struct net_device *dev) /* enable beacon timeout, beacon TX ok and err * LP tx ok and err, HP TX ok and err, NP TX ok and err, - * RX ok and ERR, and GP timer */ + * RX ok and ERR, and GP timer + */ priv->irq_mask = 0x6fcf; priv->dma_poll_mask = 0; @@ -3123,15 +3129,15 @@ void rtl8180_adapter_start(struct net_device *dev) rtl8180_set_mode(dev, EPROM_CMD_CONFIG); /* - The following is very strange. seems to be that 1 means test mode, - but we need to acknolwledges the nic when a packet is ready - although we set it to 0 - */ + * The following is very strange. seems to be that 1 means test mode, + * but we need to acknolwledges the nic when a packet is ready + * although we set it to 0 + */ write_nic_byte(dev, CONFIG2, read_nic_byte(dev, CONFIG2) & ~\ (1<ieee80211->current_network.beacon_interval * + word |= 1000; /* priv->ieee80211->current_network.beacon_interval * ((priv->txbeaconcount > 1)?(priv->txbeaconcount-1):1); // FIXME: check if correct ^^ worked with 0x3e8; */ @@ -3198,16 +3205,17 @@ static struct net_device_stats *rtl8180_stats(struct net_device *dev) return &priv->ieee80211->stats; } -// -// Change current and default preamble mode. -// + +/* + * Change current and default preamble mode. + */ bool MgntActSet_802_11_PowerSaveMode( struct r8180_priv *priv, RT_PS_MODE rtPsMode ) { - // Currently, we do not change power save mode on IBSS mode. + /* Currently, we do not change power save mode on IBSS mode. */ if (priv->ieee80211->iw_mode == IW_MODE_ADHOC) return false; @@ -3220,7 +3228,7 @@ void LeisurePSEnter(struct r8180_priv *priv) { if (priv->bLeisurePs) { if (priv->ieee80211->ps == IEEE80211_PS_DISABLED) - MgntActSet_802_11_PowerSaveMode(priv, IEEE80211_PS_MBCAST|IEEE80211_PS_UNICAST);//IEEE80211_PS_ENABLE + MgntActSet_802_11_PowerSaveMode(priv, IEEE80211_PS_MBCAST|IEEE80211_PS_UNICAST); /* IEEE80211_PS_ENABLE */ } } @@ -3256,9 +3264,9 @@ static void MgntLinkKeepAlive(struct r8180_priv *priv) return; if (priv->ieee80211->state == IEEE80211_LINKED) { - // - // Keep-Alive. - // + /* + * Keep-Alive. + */ if ((priv->keepAliveLevel == 2) || (priv->link_detect.LastNumTxUnicast == priv->NumTxUnicast && @@ -3266,9 +3274,9 @@ static void MgntLinkKeepAlive(struct r8180_priv *priv) ) { priv->link_detect.IdleCount++; - // - // Send a Keep-Alive packet packet to AP if we had been idle for a while. - // + /* + * Send a Keep-Alive packet packet to AP if we had been idle for a while. + */ if (priv->link_detect.IdleCount >= ((KEEP_ALIVE_INTERVAL / CHECK_FOR_HANG_PERIOD)-1)) { priv->link_detect.IdleCount = 0; ieee80211_sta_ps_send_null_frame(priv->ieee80211, false); @@ -3295,7 +3303,7 @@ void rtl8180_watch_dog(struct net_device *dev) if ((priv->ieee80211->iw_mode != IW_MODE_ADHOC) && (priv->ieee80211->state == IEEE80211_NOLINK) && (priv->ieee80211->beinretry == false) && (priv->eRFPowerState == eRfOn)) IPSEnter(dev); } - //YJ,add,080828,for link state check + /* YJ,add,080828,for link state check */ if ((priv->ieee80211->state == IEEE80211_LINKED) && (priv->ieee80211->iw_mode == IW_MODE_INFRA)) { SlotIndex = (priv->link_detect.SlotIndex++) % priv->link_detect.SlotNum; priv->link_detect.RxFrameNum[SlotIndex] = priv->ieee80211->NumRxDataInPeriod + priv->ieee80211->NumRxBcnInPeriod; @@ -3308,10 +3316,10 @@ void rtl8180_watch_dog(struct net_device *dev) } } - //YJ,add,080828,for KeepAlive + /* YJ,add,080828,for KeepAlive */ MgntLinkKeepAlive(priv); - //YJ,add,080828,for LPS + /* YJ,add,080828,for LPS */ if (priv->PowerProfile == POWER_PROFILE_BATTERY) priv->bLeisurePs = true; else if (priv->PowerProfile == POWER_PROFILE_AC) { @@ -3586,8 +3594,8 @@ static int __devinit rtl8180_pci_probe(struct pci_dev *pdev, goto fail1; } - dev->mem_start = ioaddr; // shared mem start - dev->mem_end = ioaddr + pci_resource_len(pdev, 0); // shared mem end + dev->mem_start = ioaddr; /* shared mem start */ + dev->mem_end = ioaddr + pci_resource_len(pdev, 0); /* shared mem end */ pci_read_config_byte(pdev, 0x05, &unit); pci_write_config_byte(pdev, 0x05, unit & (~0x04)); @@ -3756,19 +3764,19 @@ void rtl8180_try_wake_queue(struct net_device *dev, int pri) void rtl8180_tx_isr(struct net_device *dev, int pri, short error) { struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); - u32 *tail; //tail virtual addr - u32 *head; //head virtual addr - u32 *begin;//start of ring virtual addr - u32 *nicv; //nic pointer virtual addr - u32 nic; //nic pointer physical addr - u32 nicbegin;// start of ring physical addr + u32 *tail; /* tail virtual addr */ + u32 *head; /* head virtual addr */ + u32 *begin; /* start of ring virtual addr */ + u32 *nicv; /* nic pointer virtual addr */ + u32 nic; /* nic pointer physical addr */ + u32 nicbegin; /* start of ring physical addr */ unsigned long flag; - /* physical addr are ok on 32 bits since we set DMA mask*/ + /* physical addr are ok on 32 bits since we set DMA mask */ int offs; int j, i; int hd; if (error) - priv->stats.txretry++; //tony 20060601 + priv->stats.txretry++; /* tony 20060601 */ spin_lock_irqsave(&priv->tx_lock, flag); switch (pri) { case MANAGE_PRIORITY: @@ -3828,10 +3836,11 @@ void rtl8180_tx_isr(struct net_device *dev, int pri, short error) return; } - /* we check all the descriptors between the head and the nic, + /* + * We check all the descriptors between the head and the nic, * but not the currently pointed by the nic (the next to be txed) * and the previous of the pointed (might be in process ??) - */ + */ offs = (nic - nicbegin); offs = offs / 8 / 4; hd = (head - begin) / 8; @@ -3865,7 +3874,8 @@ void rtl8180_tx_isr(struct net_device *dev, int pri, short error) head += 8; } - /* the head has been moved to the last certainly TXed + /* + * The head has been moved to the last certainly TXed * (or at least processed by the nic) packet. * The driver take forcefully owning of all these packets * If the packet previous of the nic pointer has been @@ -3927,9 +3937,9 @@ irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) spin_lock_irqsave(&priv->irq_th_lock, flags); - //ISR: 4bytes - inta = read_nic_dword(dev, ISR);// & priv->IntrMask; - write_nic_dword(dev, ISR, inta); // reset int situation + /* ISR: 4bytes */ + inta = read_nic_dword(dev, ISR); /* & priv->IntrMask; */ + write_nic_dword(dev, ISR, inta); /* reset int situation */ priv->stats.shints++; @@ -3937,9 +3947,9 @@ irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) spin_unlock_irqrestore(&priv->irq_th_lock, flags); return IRQ_HANDLED; /* - most probably we can safely return IRQ_NONE, - but for now is better to avoid problems - */ + * most probably we can safely return IRQ_NONE, + * but for now is better to avoid problems + */ } if (inta == 0xffff) { @@ -3973,8 +3983,8 @@ irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) priv->ieee80211->stats.tx_errors++; } - if (inta & ISR_THPDOK) { //High priority tx ok - priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 + if (inta & ISR_THPDOK) { /* High priority tx ok */ + priv->link_detect.NumTxOkInPeriod++; /* YJ,add,080828 */ priv->stats.txhpokint++; rtl8180_tx_isr(dev, HI_PRIORITY, 0); } @@ -3982,27 +3992,27 @@ irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) if (inta & ISR_RER) priv->stats.rxerr++; - if (inta & ISR_TBKDER) { //corresponding to BK_PRIORITY + if (inta & ISR_TBKDER) { /* corresponding to BK_PRIORITY */ priv->stats.txbkperr++; priv->ieee80211->stats.tx_errors++; rtl8180_tx_isr(dev, BK_PRIORITY, 1); rtl8180_try_wake_queue(dev, BE_PRIORITY); } - if (inta & ISR_TBEDER) { //corresponding to BE_PRIORITY + if (inta & ISR_TBEDER) { /* corresponding to BE_PRIORITY */ priv->stats.txbeperr++; priv->ieee80211->stats.tx_errors++; rtl8180_tx_isr(dev, BE_PRIORITY, 1); rtl8180_try_wake_queue(dev, BE_PRIORITY); } - if (inta & ISR_TNPDER) { //corresponding to VO_PRIORITY + if (inta & ISR_TNPDER) { /* corresponding to VO_PRIORITY */ priv->stats.txnperr++; priv->ieee80211->stats.tx_errors++; rtl8180_tx_isr(dev, NORM_PRIORITY, 1); rtl8180_try_wake_queue(dev, NORM_PRIORITY); } - if (inta & ISR_TLPDER) { //corresponding to VI_PRIORITY + if (inta & ISR_TLPDER) { /* corresponding to VI_PRIORITY */ priv->stats.txlperr++; priv->ieee80211->stats.tx_errors++; rtl8180_tx_isr(dev, LOW_PRIORITY, 1); @@ -4036,29 +4046,29 @@ irqreturn_t rtl8180_interrupt(int irq, void *netdev, struct pt_regs *regs) if (inta & ISR_TXFOVW) priv->stats.txoverflow++; - if (inta & ISR_TNPDOK) { //Normal priority tx ok - priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 + if (inta & ISR_TNPDOK) { /* Normal priority tx ok */ + priv->link_detect.NumTxOkInPeriod++; /* YJ,add,080828 */ priv->stats.txnpokint++; rtl8180_tx_isr(dev, NORM_PRIORITY, 0); } - if (inta & ISR_TLPDOK) { //Low priority tx ok - priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 + if (inta & ISR_TLPDOK) { /* Low priority tx ok */ + priv->link_detect.NumTxOkInPeriod++; /* YJ,add,080828 */ priv->stats.txlpokint++; rtl8180_tx_isr(dev, LOW_PRIORITY, 0); rtl8180_try_wake_queue(dev, LOW_PRIORITY); } - if (inta & ISR_TBKDOK) { //corresponding to BK_PRIORITY + if (inta & ISR_TBKDOK) { /* corresponding to BK_PRIORITY */ priv->stats.txbkpokint++; - priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 + priv->link_detect.NumTxOkInPeriod++; /* YJ,add,080828 */ rtl8180_tx_isr(dev, BK_PRIORITY, 0); rtl8180_try_wake_queue(dev, BE_PRIORITY); } - if (inta & ISR_TBEDOK) { //corresponding to BE_PRIORITY + if (inta & ISR_TBEDOK) { /* corresponding to BE_PRIORITY */ priv->stats.txbeperr++; - priv->link_detect.NumTxOkInPeriod++; //YJ,add,080828 + priv->link_detect.NumTxOkInPeriod++; /* YJ,add,080828 */ rtl8180_tx_isr(dev, BE_PRIORITY, 0); rtl8180_try_wake_queue(dev, BE_PRIORITY); } -- cgit v0.10.2 From fdd2d9341d50f3a67fc35394e41146f30a383a6b Mon Sep 17 00:00:00 2001 From: Marin Mitov Date: Fri, 14 May 2010 11:15:38 +0300 Subject: Staging: dt3155v4l: introduce state machine This patch introduces a v4l2 state machine, so now CONFIG_DT3155_STREAMING is no more needed. Signed-off-by: Marin Mitov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155v4l/Kconfig b/drivers/staging/dt3155v4l/Kconfig index 5cef542..f49f4ac 100644 --- a/drivers/staging/dt3155v4l/Kconfig +++ b/drivers/staging/dt3155v4l/Kconfig @@ -18,11 +18,3 @@ config DT3155_CCIR ---help--- Select it for CCIR/50Hz (European region), or leave it unselected for RS-170/60Hz (North America). - -config DT3155_STREAMING - bool "Selects mmap streaming instead of read method" - depends on VIDEO_DT3155 - default y - ---help--- - Select it if you wish to try mmap streaming, or - or leave it unselected for using read method. diff --git a/drivers/staging/dt3155v4l/dt3155v4l.c b/drivers/staging/dt3155v4l/dt3155v4l.c index 4946361..308fb45 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.c +++ b/drivers/staging/dt3155v4l/dt3155v4l.c @@ -930,6 +930,7 @@ dt3155_release(struct file *filp) dt3155_stop_acq(pd); videobuf_stop(pd->vidq); pd->acq_fp = NULL; + pd->streaming = 0; } if (!pd->users) { kthread_stop(pd->thread); @@ -949,11 +950,15 @@ dt3155_read(struct file *filp, char __user *user, size_t size, loff_t *loff) if (mutex_lock_interruptible(&pd->mux) == -EINTR) return -ERESTARTSYS; - if (!pd->acq_fp) + if (!pd->acq_fp) { pd->acq_fp = filp; - else if (pd->acq_fp != filp) { + pd->streaming = 0; + } else if (pd->acq_fp != filp) { ret = -EBUSY; goto done; + } else if (pd->streaming == 1) { + ret = -EINVAL; + goto done; } ret = videobuf_read_stream(pd->vidq, user, size, loff, 0, filp->f_flags & O_NONBLOCK); @@ -1001,8 +1006,10 @@ dt3155_ioc_streamon(struct file *filp, void *p, enum v4l2_buf_type type) if (ret) goto unlock; pd->acq_fp = filp; + pd->streaming = 1; wake_up_interruptible_sync(&pd->do_dma); } else if (pd->acq_fp == filp) { + pd->streaming = 1; ret = videobuf_streamon(pd->vidq); if (!ret) wake_up_interruptible_sync(&pd->do_dma); @@ -1043,11 +1050,8 @@ dt3155_ioc_querycap(struct file *filp, void *p, struct v4l2_capability *cap) cap->version = KERNEL_VERSION(DT3155_VER_MAJ, DT3155_VER_MIN, DT3155_VER_EXT); cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | -#ifdef CONFIG_DT3155_STREAMING - V4L2_CAP_STREAMING; -#else + V4L2_CAP_STREAMING | V4L2_CAP_READWRITE; -#endif return 0; } @@ -1095,7 +1099,28 @@ dt3155_ioc_try_fmt_vid_cap(struct file *filp, void *p, struct v4l2_format *f) static int dt3155_ioc_s_fmt_vid_cap(struct file *filp, void *p, struct v4l2_format *f) { - return dt3155_ioc_g_fmt_vid_cap(filp, p, f); + struct dt3155_priv *pd = video_drvdata(filp); + int ret = -ERESTARTSYS; + + if (mutex_lock_interruptible(&pd->mux) == -EINTR) + return ret; + if (!pd->acq_fp) { + pd->acq_fp = filp; + pd->streaming = 0; + } else if (pd->acq_fp != filp) { + ret = -EBUSY; + goto done; + } +/* FIXME: we don't change the format for now + if (pd->vidq->streaming || pd->vidq->reading || pd->curr_buff) { + ret = -EBUSY; + goto done; + } +*/ + ret = dt3155_ioc_g_fmt_vid_cap(filp, p, f); +done: + mutex_unlock(&pd->mux); + return ret; } static int @@ -1103,15 +1128,33 @@ dt3155_ioc_reqbufs(struct file *filp, void *p, struct v4l2_requestbuffers *b) { struct dt3155_priv *pd = video_drvdata(filp); struct videobuf_queue *q = pd->vidq; + int ret = -ERESTARTSYS; if (b->memory != V4L2_MEMORY_MMAP) return -EINVAL; + if (mutex_lock_interruptible(&pd->mux) == -EINTR) + return ret; + if (!pd->acq_fp) + pd->acq_fp = filp; + else if (pd->acq_fp != filp) { + ret = -EBUSY; + goto done; + } + pd->streaming = 1; + ret = 0; +done: + mutex_unlock(&pd->mux); + if (ret) + return ret; if (b->count) - return videobuf_reqbufs(q, b); + ret = videobuf_reqbufs(q, b); else { /* FIXME: is it necessary? */ printk(KERN_DEBUG "dt3155: request to free buffers\n"); - return videobuf_mmap_free(q); + /* ret = videobuf_mmap_free(q); */ + ret = dt3155_ioc_streamoff(filp, p, + V4L2_BUF_TYPE_VIDEO_CAPTURE); } + return ret; } static int @@ -1128,8 +1171,12 @@ dt3155_ioc_qbuf(struct file *filp, void *p, struct v4l2_buffer *b) { struct dt3155_priv *pd = video_drvdata(filp); struct videobuf_queue *q = pd->vidq; + int ret; - return videobuf_qbuf(q, b); + ret = videobuf_qbuf(q, b); + if (ret) + return ret; + return videobuf_querybuf(q, b); } static int @@ -1170,7 +1217,12 @@ dt3155_ioc_enum_input(struct file *filp, void *p, struct v4l2_input *input) return -EINVAL; strcpy(input->name, "Coax in"); input->type = V4L2_INPUT_TYPE_CAMERA; - input->std = V4L2_STD_ALL; + /* + * FIXME: input->std = 0 according to v4l2 API + * VIDIOC_G_STD, VIDIOC_S_STD, VIDIOC_QUERYSTD and VIDIOC_ENUMSTD + * should return -EINVAL + */ + input->std = DT3155_CURRENT_NORM; input->status = 0;/* FIXME: add sync detection & V4L2_IN_ST_NO_H_LOCK */ return 0; } @@ -1200,7 +1252,7 @@ dt3155_ioc_g_parm(struct file *filp, void *p, struct v4l2_streamparm *parms) parms->parm.capture.timeperframe.numerator = 1001; parms->parm.capture.timeperframe.denominator = frames_per_sec * 1000; parms->parm.capture.extendedmode = 0; - parms->parm.capture.readbuffers = 1; + parms->parm.capture.readbuffers = 1; /* FIXME: 2 buffers? */ return 0; } @@ -1214,7 +1266,7 @@ dt3155_ioc_s_parm(struct file *filp, void *p, struct v4l2_streamparm *parms) parms->parm.capture.timeperframe.numerator = 1001; parms->parm.capture.timeperframe.denominator = frames_per_sec * 1000; parms->parm.capture.extendedmode = 0; - parms->parm.capture.readbuffers = 1; + parms->parm.capture.readbuffers = 1; /* FIXME: 2 buffers? */ return 0; } @@ -1377,7 +1429,7 @@ static struct video_device dt3155_vdev = { .ioctl_ops = &dt3155_ioctl_ops, .minor = -1, .release = video_device_release, - .tvnorms = V4L2_STD_ALL, + .tvnorms = DT3155_CURRENT_NORM, .current_norm = DT3155_CURRENT_NORM, }; diff --git a/drivers/staging/dt3155v4l/dt3155v4l.h b/drivers/staging/dt3155v4l/dt3155v4l.h index 4c6a0ee..e65a81e 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.h +++ b/drivers/staging/dt3155v4l/dt3155v4l.h @@ -30,7 +30,7 @@ #define DT3155_NAME "dt3155" #define DT3155_VER_MAJ 1 #define DT3155_VER_MIN 0 -#define DT3155_VER_EXT 2 +#define DT3155_VER_EXT 3 #define DT3155_VERSION __stringify(DT3155_VER_MAJ) "." \ __stringify(DT3155_VER_MIN) "." \ __stringify(DT3155_VER_EXT) @@ -180,6 +180,7 @@ struct dt3155_stats { * * @vdev: pointer to video_device structure * @acq_fp pointer to filp that starts acquisition + * @streaming streaming is negotiated * @pdev: pointer to pci_dev structure * @vidq pointer to videobuf_queue structure * @curr_buf: pointer to curren buffer @@ -200,6 +201,7 @@ struct dt3155_stats { struct dt3155_priv { struct video_device *vdev; struct file *acq_fp; + int streaming; struct pci_dev *pdev; struct videobuf_queue *vidq; struct videobuf_buffer *curr_buf; -- cgit v0.10.2 From b5a2104c98cb603f7053e4b0309fb88f15d6be86 Mon Sep 17 00:00:00 2001 From: Soeren Moeller Date: Fri, 14 May 2010 19:03:00 +0000 Subject: Staging: udlfb: fix coding style issues This is a patch to the file udlfb.c that fixes a missing KERN_INFO and removes one whitespace before a newline. Signed-off-by: Soeren Moeller Cc: Bernie Thompson Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/udlfb/udlfb.c b/drivers/staging/udlfb/udlfb.c index 12444f2..7fc1d61 100644 --- a/drivers/staging/udlfb/udlfb.c +++ b/drivers/staging/udlfb/udlfb.c @@ -1438,7 +1438,7 @@ static int __init dlfb_module_init(void) if (res) err("usb_register failed. Error number %d", res); - printk("VMODES initialized\n"); + printk(KERN_INFO "VMODES initialized\n"); return res; } @@ -1567,7 +1567,7 @@ static int dlfb_alloc_urb_list(struct dlfb_data *dev, int count, size_t size) kref_get(&dev->kref); /* released in free_render_urbs() */ - dl_notice("allocated %d %d byte urbs \n", i, (int) size); + dl_notice("allocated %d %d byte urbs\n", i, (int) size); return i; } -- cgit v0.10.2 From 7a6cb0d5497418599d2125b670926b75e673861c Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Thu, 13 May 2010 22:00:05 +0200 Subject: Staging: Use kcalloc or kzalloc Use kcalloc or kzalloc rather than the combination of kmalloc and memset. The semantic patch that makes this change is as follows: (http://coccinelle.lip6.fr/) // @@ expression x,y,flags; statement S; type T; @@ x = - kmalloc + kcalloc ( - y * sizeof(T), + y, sizeof(T), flags); if (x == NULL) S -memset(x, 0, y * sizeof(T)); @@ expression x,size,flags; statement S; @@ -x = kmalloc(size,flags); +x = kzalloc(size,flags); if (x == NULL) S -memset(x, 0, size); // Signed-off-by: Julia Lawall diff --git a/drivers/staging/comedi/drivers/addi-data/addi_amcc_s5933.h b/drivers/staging/comedi/drivers/addi-data/addi_amcc_s5933.h index 3682503..c3284eb 100644 --- a/drivers/staging/comedi/drivers/addi-data/addi_amcc_s5933.h +++ b/drivers/staging/comedi/drivers/addi-data/addi_amcc_s5933.h @@ -260,12 +260,10 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display) for (i_Count = 0; i_Count < 2; i_Count++) { pci_vendor = i_ADDIDATADeviceID[i_Count]; if (pcidev->vendor == pci_vendor) { - amcc = kmalloc(sizeof(*amcc), GFP_KERNEL); + amcc = kzalloc(sizeof(*amcc), GFP_KERNEL); if (amcc == NULL) continue; - memset(amcc, 0, sizeof(*amcc)); - amcc->pcidev = pcidev; if (last) last->next = amcc; diff --git a/drivers/staging/comedi/drivers/addi-data/amcc_s5933_58.h b/drivers/staging/comedi/drivers/addi-data/amcc_s5933_58.h index 49141b3..349e93c 100644 --- a/drivers/staging/comedi/drivers/addi-data/amcc_s5933_58.h +++ b/drivers/staging/comedi/drivers/addi-data/amcc_s5933_58.h @@ -253,12 +253,10 @@ void v_pci_card_list_init(unsigned short pci_vendor, char display) pci_for_each_dev(pcidev) { if (pcidev->vendor == pci_vendor) { - amcc = kmalloc(sizeof(*amcc), GFP_KERNEL); + amcc = kzalloc(sizeof(*amcc), GFP_KERNEL); if (amcc == NULL) continue; - memset(amcc, 0, sizeof(*amcc)); - amcc->pcidev = pcidev; if (last) { last->next = amcc; diff --git a/drivers/staging/comedi/drivers/icp_multi.h b/drivers/staging/comedi/drivers/icp_multi.h index 8caadc6..2bb96b1 100644 --- a/drivers/staging/comedi/drivers/icp_multi.h +++ b/drivers/staging/comedi/drivers/icp_multi.h @@ -73,14 +73,13 @@ static void pci_card_list_init(unsigned short pci_vendor, char display) pcidev != NULL; pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) { if (pcidev->vendor == pci_vendor) { - inova = kmalloc(sizeof(*inova), GFP_KERNEL); + inova = kzalloc(sizeof(*inova), GFP_KERNEL); if (!inova) { printk ("icp_multi: pci_card_list_init: allocation failed\n"); pci_dev_put(pcidev); break; } - memset(inova, 0, sizeof(*inova)); inova->pcidev = pci_dev_get(pcidev); if (last) { diff --git a/drivers/staging/dream/pmem.c b/drivers/staging/dream/pmem.c index dbd2b1d..6387365 100644 --- a/drivers/staging/dream/pmem.c +++ b/drivers/staging/dream/pmem.c @@ -1245,14 +1245,11 @@ int pmem_setup(struct android_pmem_platform_data *pdata, } pmem[id].num_entries = pmem[id].size / PMEM_MIN_ALLOC; - pmem[id].bitmap = kmalloc(pmem[id].num_entries * + pmem[id].bitmap = kcalloc(pmem[id].num_entries, sizeof(struct pmem_bits), GFP_KERNEL); if (!pmem[id].bitmap) goto err_no_mem_for_metadata; - memset(pmem[id].bitmap, 0, sizeof(struct pmem_bits) * - pmem[id].num_entries); - for (i = sizeof(pmem[id].num_entries) * 8 - 1; i >= 0; i--) { if ((pmem[id].num_entries) & 1<interlace_coding) framelen[0] += mpeg1_frame_header(go, buf + framelen[0] / 8, @@ -839,13 +837,12 @@ static int gen_mpeg4hdr_to_package(struct go7007 *go, unsigned int addr = 0x19; int i, off = 0, chunk; - buf = kmalloc(5120, GFP_KERNEL); + buf = kzalloc(5120, GFP_KERNEL); if (buf == NULL) { printk(KERN_ERR "go7007: unable to allocate 5120 bytes for " "firmware construction\n"); return -1; } - memset(buf, 0, 5120); framelen[0] = mpeg4_frame_header(go, buf, 0, PFRAME); i = 368; framelen[1] = mpeg4_frame_header(go, buf + i, 0, BFRAME_PRE); @@ -1585,13 +1582,12 @@ int go7007_construct_fw_image(struct go7007 *go, u8 **fw, int *fwlen) go->board_info->firmware); return -1; } - code = kmalloc(codespace * 2, GFP_KERNEL); + code = kzalloc(codespace * 2, GFP_KERNEL); if (code == NULL) { printk(KERN_ERR "go7007: unable to allocate %d bytes for " "firmware construction\n", codespace * 2); goto fw_failed; } - memset(code, 0, codespace * 2); src = (__le16 *)fw_entry->data; srclen = fw_entry->size / 2; while (srclen >= 2) { diff --git a/drivers/staging/go7007/go7007-usb.c b/drivers/staging/go7007/go7007-usb.c index ee278f6..20ed930 100644 --- a/drivers/staging/go7007/go7007-usb.c +++ b/drivers/staging/go7007/go7007-usb.c @@ -670,10 +670,9 @@ static int go7007_usb_onboard_write_interrupt(struct go7007 *go, "go7007-usb: WriteInterrupt: %04x %04x\n", addr, data); #endif - tbuf = kmalloc(8, GFP_KERNEL); + tbuf = kzalloc(8, GFP_KERNEL); if (tbuf == NULL) return -ENOMEM; - memset(tbuf, 0, 8); tbuf[0] = data & 0xff; tbuf[1] = data >> 8; tbuf[2] = addr & 0xff; diff --git a/drivers/staging/go7007/go7007-v4l2.c b/drivers/staging/go7007/go7007-v4l2.c index 723c1a6..46b4b9f 100644 --- a/drivers/staging/go7007/go7007-v4l2.c +++ b/drivers/staging/go7007/go7007-v4l2.c @@ -720,7 +720,7 @@ static int vidioc_reqbufs(struct file *file, void *priv, if (count > 32) count = 32; - gofh->bufs = kmalloc(count * sizeof(struct go7007_buffer), + gofh->bufs = kcalloc(count, sizeof(struct go7007_buffer), GFP_KERNEL); if (!gofh->bufs) { @@ -728,8 +728,6 @@ static int vidioc_reqbufs(struct file *file, void *priv, goto unlock_and_return; } - memset(gofh->bufs, 0, count * sizeof(struct go7007_buffer)); - for (i = 0; i < count; ++i) { gofh->bufs[i].go = go; gofh->bufs[i].index = i; diff --git a/drivers/staging/go7007/saa7134-go7007.c b/drivers/staging/go7007/saa7134-go7007.c index b25d7d2..49f0d31 100644 --- a/drivers/staging/go7007/saa7134-go7007.c +++ b/drivers/staging/go7007/saa7134-go7007.c @@ -440,10 +440,9 @@ static int saa7134_go7007_init(struct saa7134_dev *dev) printk(KERN_DEBUG "saa7134-go7007: probing new SAA713X board\n"); - saa = kmalloc(sizeof(struct saa7134_go7007), GFP_KERNEL); + saa = kzalloc(sizeof(struct saa7134_go7007), GFP_KERNEL); if (saa == NULL) return -ENOMEM; - memset(saa, 0, sizeof(struct saa7134_go7007)); /* Allocate a couple pages for receiving the compressed stream */ saa->top = (u8 *)get_zeroed_page(GFP_KERNEL); diff --git a/drivers/staging/otus/zdusb.c b/drivers/staging/otus/zdusb.c index 6509bc5..2c799a2 100644 --- a/drivers/staging/otus/zdusb.c +++ b/drivers/staging/otus/zdusb.c @@ -95,7 +95,7 @@ static int zfLnxProbe(struct usb_interface *interface, printk(KERN_NOTICE "USB 1.1 Host\n"); #endif - macp = kmalloc(sizeof(struct usbdrv_private), GFP_KERNEL); + macp = kzalloc(sizeof(struct usbdrv_private), GFP_KERNEL); if (!macp) { printk(KERN_ERR "out of memory allocating device structure\n"); @@ -103,9 +103,6 @@ static int zfLnxProbe(struct usb_interface *interface, goto fail; } - /* Zero the memory */ - memset(macp, 0, sizeof(struct usbdrv_private)); - net = alloc_etherdev(0); if (net == NULL) diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c index f9fcb2f..9ca0e9e 100644 --- a/drivers/staging/panel/panel.c +++ b/drivers/staging/panel/panel.c @@ -1906,12 +1906,11 @@ static struct logical_input *panel_bind_key(char *name, char *press, { struct logical_input *key; - key = kmalloc(sizeof(struct logical_input), GFP_KERNEL); + key = kzalloc(sizeof(struct logical_input), GFP_KERNEL); if (!key) { printk(KERN_ERR "panel: not enough memory\n"); return NULL; } - memset(key, 0, sizeof(struct logical_input)); if (!input_name2mask(name, &key->mask, &key->value, &scan_mask_i, &scan_mask_o)) return NULL; diff --git a/drivers/staging/pohmelfs/config.c b/drivers/staging/pohmelfs/config.c index 6571a6a..9fdf2de 100644 --- a/drivers/staging/pohmelfs/config.c +++ b/drivers/staging/pohmelfs/config.c @@ -238,11 +238,10 @@ static int pohmelfs_send_reply(int err, int msg_num, int action, struct cn_msg * { struct pohmelfs_cn_ack *ack; - ack = kmalloc(sizeof(struct pohmelfs_cn_ack), GFP_KERNEL); + ack = kzalloc(sizeof(struct pohmelfs_cn_ack), GFP_KERNEL); if (!ack) return -ENOMEM; - memset(ack, 0, sizeof(struct pohmelfs_cn_ack)); memcpy(&ack->msg, msg, sizeof(struct cn_msg)); if (action == POHMELFS_CTLINFO_ACK) diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c index 4c5d63f..c8dbcb9 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt.c @@ -109,11 +109,10 @@ int ieee80211_register_crypto_ops(struct ieee80211_crypto_ops *ops) if (hcrypt == NULL) return -1; - alg = kmalloc(sizeof(*alg), GFP_KERNEL); + alg = kzalloc(sizeof(*alg), GFP_KERNEL); if (alg == NULL) return -ENOMEM; - memset(alg, 0, sizeof(*alg)); alg->ops = ops; spin_lock_irqsave(&hcrypt->lock, flags); @@ -207,11 +206,10 @@ int ieee80211_crypto_init(void) { int ret = -ENOMEM; - hcrypt = kmalloc(sizeof(*hcrypt), GFP_KERNEL); + hcrypt = kzalloc(sizeof(*hcrypt), GFP_KERNEL); if (!hcrypt) goto out; - memset(hcrypt, 0, sizeof(*hcrypt)); INIT_LIST_HEAD(&hcrypt->algs); spin_lock_init(&hcrypt->lock); diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_ccmp.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_ccmp.c index 40f1b99..731d268 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_ccmp.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_ccmp.c @@ -69,10 +69,9 @@ static void * ieee80211_ccmp_init(int key_idx) { struct ieee80211_ccmp_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = key_idx; priv->tfm = (void *)crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC); diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_tkip.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_tkip.c index a525411..ee71ee9 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_tkip.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_tkip.c @@ -70,10 +70,9 @@ static void * ieee80211_tkip_init(int key_idx) { struct ieee80211_tkip_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = key_idx; priv->tx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0, diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c index c6c3bc3..f790cd6 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_crypt_wep.c @@ -45,10 +45,9 @@ static void * prism2_wep_init(int keyidx) { struct prism2_wep_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = keyidx; priv->tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); if (IS_ERR(priv->tx_tfm)) { diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_module.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_module.c index 18392fc..9d58a42 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_module.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_module.c @@ -66,8 +66,8 @@ static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee) if (ieee->networks) return 0; - ieee->networks = kmalloc( - MAX_NETWORK_COUNT * sizeof(struct ieee80211_network), + ieee->networks = kcalloc( + MAX_NETWORK_COUNT, sizeof(struct ieee80211_network), GFP_KERNEL); if (!ieee->networks) { printk(KERN_WARNING "%s: Out of memory allocating beacons\n", @@ -75,9 +75,6 @@ static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee) return -ENOMEM; } - memset(ieee->networks, 0, - MAX_NETWORK_COUNT * sizeof(struct ieee80211_network)); - return 0; } diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_wx.c index c5b80f9..aa3ba45 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_wx.c @@ -325,11 +325,10 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, struct ieee80211_crypt_data *new_crypt; /* take WEP into use */ - new_crypt = kmalloc(sizeof(struct ieee80211_crypt_data), + new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), GFP_KERNEL); if (new_crypt == NULL) return -ENOMEM; - memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); new_crypt->ops = ieee80211_get_crypto_ops("WEP"); if (!new_crypt->ops) new_crypt->ops = ieee80211_get_crypto_ops("WEP"); diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt.c index b3c9bf4..d5aa9af 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt.c @@ -109,11 +109,10 @@ int ieee80211_register_crypto_ops(struct ieee80211_crypto_ops *ops) if (hcrypt == NULL) return -1; - alg = kmalloc(sizeof(*alg), GFP_KERNEL); + alg = kzalloc(sizeof(*alg), GFP_KERNEL); if (alg == NULL) return -ENOMEM; - memset(alg, 0, sizeof(*alg)); alg->ops = ops; spin_lock_irqsave(&hcrypt->lock, flags); @@ -207,11 +206,10 @@ int __init ieee80211_crypto_init(void) { int ret = -ENOMEM; - hcrypt = kmalloc(sizeof(*hcrypt), GFP_KERNEL); + hcrypt = kzalloc(sizeof(*hcrypt), GFP_KERNEL); if (!hcrypt) goto out; - memset(hcrypt, 0, sizeof(*hcrypt)); INIT_LIST_HEAD(&hcrypt->algs); spin_lock_init(&hcrypt->lock); diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_ccmp.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_ccmp.c index 1776f7e..7165c4c 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_ccmp.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_ccmp.c @@ -96,10 +96,9 @@ static void * ieee80211_ccmp_init(int key_idx) { struct ieee80211_ccmp_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = key_idx; #if((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_tkip.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_tkip.c index 03cb21e..65f4889 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_tkip.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_tkip.c @@ -87,10 +87,9 @@ static void * ieee80211_tkip_init(int key_idx) { struct ieee80211_tkip_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = key_idx; #if((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) priv->tx_tfm_arc4 = crypto_alloc_tfm("arc4", 0); diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_wep.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_wep.c index 5678313..c4bbc8d 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_wep.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_crypt_wep.c @@ -71,10 +71,9 @@ static void * prism2_wep_init(int keyidx) { struct prism2_wep_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = keyidx; #if((LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) && (!OPENSUSE_SLED)) diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c index c7aa1c6..614a8b6 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_module.c @@ -65,8 +65,8 @@ static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee) if (ieee->networks) return 0; - ieee->networks = kmalloc( - MAX_NETWORK_COUNT * sizeof(struct ieee80211_network), + ieee->networks = kcalloc( + MAX_NETWORK_COUNT, sizeof(struct ieee80211_network), GFP_KERNEL); if (!ieee->networks) { printk(KERN_WARNING "%s: Out of memory allocating beacons\n", @@ -74,9 +74,6 @@ static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee) return -ENOMEM; } - memset(ieee->networks, 0, - MAX_NETWORK_COUNT * sizeof(struct ieee80211_network)); - return 0; } diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c index 4f6ce06..215542a 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c @@ -3079,10 +3079,9 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee) ieee->seq_ctrl[i] = 0; } #ifdef ENABLE_DOT11D - ieee->pDot11dInfo = kmalloc(sizeof(RT_DOT11D_INFO), GFP_ATOMIC); + ieee->pDot11dInfo = kzalloc(sizeof(RT_DOT11D_INFO), GFP_ATOMIC); if (!ieee->pDot11dInfo) IEEE80211_DEBUG(IEEE80211_DL_ERR, "can't alloc memory for DOT11D\n"); - memset(ieee->pDot11dInfo, 0, sizeof(RT_DOT11D_INFO)); #endif //added for AP roaming ieee->LinkDetectInfo.SlotNum = 2; diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c index de57967..fcabaf3 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c @@ -477,11 +477,10 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, struct ieee80211_crypt_data *new_crypt; /* take WEP into use */ - new_crypt = kmalloc(sizeof(struct ieee80211_crypt_data), + new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), GFP_KERNEL); if (new_crypt == NULL) return -ENOMEM; - memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); new_crypt->ops = ieee80211_get_crypto_ops("WEP"); if (!new_crypt->ops) new_crypt->ops = ieee80211_get_crypto_ops("WEP"); diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt.c index c4640e6..8019423 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt.c @@ -109,11 +109,10 @@ int ieee80211_register_crypto_ops(struct ieee80211_crypto_ops *ops) if (hcrypt == NULL) return -1; - alg = kmalloc(sizeof(*alg), GFP_KERNEL); + alg = kzalloc(sizeof(*alg), GFP_KERNEL); if (alg == NULL) return -ENOMEM; - memset(alg, 0, sizeof(*alg)); alg->ops = ops; spin_lock_irqsave(&hcrypt->lock, flags); @@ -206,11 +205,10 @@ int __init ieee80211_crypto_init(void) { int ret = -ENOMEM; - hcrypt = kmalloc(sizeof(*hcrypt), GFP_KERNEL); + hcrypt = kzalloc(sizeof(*hcrypt), GFP_KERNEL); if (!hcrypt) goto out; - memset(hcrypt, 0, sizeof(*hcrypt)); INIT_LIST_HEAD(&hcrypt->algs); spin_lock_init(&hcrypt->lock); diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_ccmp.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_ccmp.c index 8a93f7d..77de957 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_ccmp.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_ccmp.c @@ -68,10 +68,9 @@ static void * ieee80211_ccmp_init(int key_idx) { struct ieee80211_ccmp_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = key_idx; priv->tfm = (void *)crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC); diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_tkip.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_tkip.c index 7e48748..ade5f6f 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_tkip.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_tkip.c @@ -67,10 +67,9 @@ static void * ieee80211_tkip_init(int key_idx) { struct ieee80211_tkip_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = key_idx; priv->tx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0, diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_wep.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_wep.c index 64f9cf0..a1c0a59 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_wep.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_crypt_wep.c @@ -43,10 +43,9 @@ static void * prism2_wep_init(int keyidx) { struct prism2_wep_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = keyidx; priv->tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_module.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_module.c index 73de3ba..a87650a 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_module.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_module.c @@ -65,8 +65,8 @@ static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee) if (ieee->networks) return 0; - ieee->networks = kmalloc( - MAX_NETWORK_COUNT * sizeof(struct ieee80211_network), + ieee->networks = kcalloc( + MAX_NETWORK_COUNT, sizeof(struct ieee80211_network), GFP_KERNEL); if (!ieee->networks) { printk(KERN_WARNING "%s: Out of memory allocating beacons\n", @@ -74,9 +74,6 @@ static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee) return -ENOMEM; } - memset(ieee->networks, 0, - MAX_NETWORK_COUNT * sizeof(struct ieee80211_network)); - return 0; } diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c index 660aee2..b9fa15f 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c @@ -2699,10 +2699,9 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee) for(i = 0; i < 5; i++) { ieee->seq_ctrl[i] = 0; } - ieee->pDot11dInfo = kmalloc(sizeof(RT_DOT11D_INFO), GFP_ATOMIC); + ieee->pDot11dInfo = kzalloc(sizeof(RT_DOT11D_INFO), GFP_ATOMIC); if (!ieee->pDot11dInfo) IEEE80211_DEBUG(IEEE80211_DL_ERR, "can't alloc memory for DOT11D\n"); - memset(ieee->pDot11dInfo, 0, sizeof(RT_DOT11D_INFO)); //added for AP roaming ieee->LinkDetectInfo.SlotNum = 2; ieee->LinkDetectInfo.NumRecvBcnInPeriod=0; diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_wx.c index 727cc55..db54ad0 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_wx.c @@ -352,11 +352,10 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, struct ieee80211_crypt_data *new_crypt; /* take WEP into use */ - new_crypt = kmalloc(sizeof(struct ieee80211_crypt_data), + new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), GFP_KERNEL); if (new_crypt == NULL) return -ENOMEM; - memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); new_crypt->ops = ieee80211_get_crypto_ops("WEP"); if (!new_crypt->ops) new_crypt->ops = ieee80211_get_crypto_ops("WEP"); diff --git a/drivers/staging/rtl8192u/ieee80211/api.c b/drivers/staging/rtl8192u/ieee80211/api.c index c627d02..5f46e50 100644 --- a/drivers/staging/rtl8192u/ieee80211/api.c +++ b/drivers/staging/rtl8192u/ieee80211/api.c @@ -131,12 +131,10 @@ struct crypto_tfm *crypto_alloc_tfm(const char *name, u32 flags) if (alg == NULL) goto out; - tfm = kmalloc(sizeof(*tfm) + alg->cra_ctxsize, GFP_KERNEL); + tfm = kzalloc(sizeof(*tfm) + alg->cra_ctxsize, GFP_KERNEL); if (tfm == NULL) goto out_put; - memset(tfm, 0, sizeof(*tfm) + alg->cra_ctxsize); - tfm->__crt_alg = alg; if (crypto_init_flags(tfm, flags)) diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt.c index 521e7b9..8707eba 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt.c @@ -109,11 +109,10 @@ int ieee80211_register_crypto_ops(struct ieee80211_crypto_ops *ops) if (hcrypt == NULL) return -1; - alg = kmalloc(sizeof(*alg), GFP_KERNEL); + alg = kzalloc(sizeof(*alg), GFP_KERNEL); if (alg == NULL) return -ENOMEM; - memset(alg, 0, sizeof(*alg)); alg->ops = ops; spin_lock_irqsave(&hcrypt->lock, flags); @@ -206,11 +205,10 @@ int __init ieee80211_crypto_init(void) { int ret = -ENOMEM; - hcrypt = kmalloc(sizeof(*hcrypt), GFP_KERNEL); + hcrypt = kzalloc(sizeof(*hcrypt), GFP_KERNEL); if (!hcrypt) goto out; - memset(hcrypt, 0, sizeof(*hcrypt)); INIT_LIST_HEAD(&hcrypt->algs); spin_lock_init(&hcrypt->lock); diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_ccmp.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_ccmp.c index 0b57632..4b078e5 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_ccmp.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_ccmp.c @@ -68,10 +68,9 @@ static void * ieee80211_ccmp_init(int key_idx) { struct ieee80211_ccmp_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = key_idx; priv->tfm = (void*)crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC); diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_tkip.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_tkip.c index 9510507..a98584c 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_tkip.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_tkip.c @@ -67,10 +67,9 @@ static void * ieee80211_tkip_init(int key_idx) { struct ieee80211_tkip_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = key_idx; priv->tx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0, diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_wep.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_wep.c index 61ad11c..96c2c9d 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_wep.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_crypt_wep.c @@ -43,10 +43,9 @@ static void * prism2_wep_init(int keyidx) { struct prism2_wep_data *priv; - priv = kmalloc(sizeof(*priv), GFP_ATOMIC); + priv = kzalloc(sizeof(*priv), GFP_ATOMIC); if (priv == NULL) goto fail; - memset(priv, 0, sizeof(*priv)); priv->key_idx = keyidx; priv->tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c index 1111002..7455264 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_module.c @@ -65,8 +65,8 @@ static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee) if (ieee->networks) return 0; - ieee->networks = kmalloc( - MAX_NETWORK_COUNT * sizeof(struct ieee80211_network), + ieee->networks = kcalloc( + MAX_NETWORK_COUNT, sizeof(struct ieee80211_network), GFP_KERNEL); if (!ieee->networks) { printk(KERN_WARNING "%s: Out of memory allocating beacons\n", @@ -74,9 +74,6 @@ static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee) return -ENOMEM; } - memset(ieee->networks, 0, - MAX_NETWORK_COUNT * sizeof(struct ieee80211_network)); - return 0; } diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c index 6c6bf9f..a6955e2 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c @@ -2723,10 +2723,9 @@ void ieee80211_softmac_init(struct ieee80211_device *ieee) ieee->seq_ctrl[i] = 0; } #ifdef ENABLE_DOT11D - ieee->pDot11dInfo = kmalloc(sizeof(RT_DOT11D_INFO), GFP_ATOMIC); + ieee->pDot11dInfo = kzalloc(sizeof(RT_DOT11D_INFO), GFP_ATOMIC); if (!ieee->pDot11dInfo) IEEE80211_DEBUG(IEEE80211_DL_ERR, "can't alloc memory for DOT11D\n"); - memset(ieee->pDot11dInfo, 0, sizeof(RT_DOT11D_INFO)); #endif //added for AP roaming ieee->LinkDetectInfo.SlotNum = 2; diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c index 4d5348e..79b180f 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c @@ -379,11 +379,10 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee, struct ieee80211_crypt_data *new_crypt; /* take WEP into use */ - new_crypt = kmalloc(sizeof(struct ieee80211_crypt_data), + new_crypt = kzalloc(sizeof(struct ieee80211_crypt_data), GFP_KERNEL); if (new_crypt == NULL) return -ENOMEM; - memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); new_crypt->ops = ieee80211_get_crypto_ops("WEP"); if (!new_crypt->ops) { request_module("ieee80211_crypt_wep"); diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index cbbc7d3..2bede27 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -2251,13 +2251,11 @@ short rtl8192_usb_initendpoints(struct net_device *dev) #endif memset(priv->rx_urb, 0, sizeof(struct urb*) * MAX_RX_URB); - priv->pp_rxskb = kmalloc(sizeof(struct sk_buff *) * MAX_RX_URB, + priv->pp_rxskb = kcalloc(MAX_RX_URB, sizeof(struct sk_buff *), GFP_KERNEL); if (priv->pp_rxskb == NULL) goto destroy; - memset(priv->pp_rxskb, 0, sizeof(struct sk_buff*) * MAX_RX_URB); - goto _middle; diff --git a/drivers/staging/sm7xx/smtcfb.c b/drivers/staging/sm7xx/smtcfb.c index e817a20..9ffeb36 100644 --- a/drivers/staging/sm7xx/smtcfb.c +++ b/drivers/staging/sm7xx/smtcfb.c @@ -688,13 +688,11 @@ static struct smtcfb_info *smtc_alloc_fb_info(struct pci_dev *dev, { struct smtcfb_info *sfb; - sfb = kmalloc(sizeof(struct smtcfb_info), GFP_KERNEL); + sfb = kzalloc(sizeof(struct smtcfb_info), GFP_KERNEL); if (!sfb) return NULL; - memset(sfb, 0, sizeof(struct smtcfb_info)); - sfb->currcon = -1; sfb->dev = dev; diff --git a/drivers/staging/vme/bridges/vme_ca91cx42.c b/drivers/staging/vme/bridges/vme_ca91cx42.c index c35dead..0c82eb4 100644 --- a/drivers/staging/vme/bridges/vme_ca91cx42.c +++ b/drivers/staging/vme/bridges/vme_ca91cx42.c @@ -1494,7 +1494,7 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id) /* We want to support more than one of each bridge so we need to * dynamically allocate the bridge structure */ - ca91cx42_bridge = kmalloc(sizeof(struct vme_bridge), GFP_KERNEL); + ca91cx42_bridge = kzalloc(sizeof(struct vme_bridge), GFP_KERNEL); if (ca91cx42_bridge == NULL) { dev_err(&pdev->dev, "Failed to allocate memory for device " @@ -1503,9 +1503,7 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto err_struct; } - memset(ca91cx42_bridge, 0, sizeof(struct vme_bridge)); - - ca91cx42_device = kmalloc(sizeof(struct ca91cx42_driver), GFP_KERNEL); + ca91cx42_device = kzalloc(sizeof(struct ca91cx42_driver), GFP_KERNEL); if (ca91cx42_device == NULL) { dev_err(&pdev->dev, "Failed to allocate memory for device " @@ -1514,8 +1512,6 @@ static int ca91cx42_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto err_driver; } - memset(ca91cx42_device, 0, sizeof(struct ca91cx42_driver)); - ca91cx42_bridge->driver_priv = ca91cx42_device; /* Enable the device */ diff --git a/drivers/staging/vme/bridges/vme_tsi148.c b/drivers/staging/vme/bridges/vme_tsi148.c index 7539cce..cf8cf37 100644 --- a/drivers/staging/vme/bridges/vme_tsi148.c +++ b/drivers/staging/vme/bridges/vme_tsi148.c @@ -2230,7 +2230,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) /* If we want to support more than one of each bridge, we need to * dynamically generate this so we get one per device */ - tsi148_bridge = kmalloc(sizeof(struct vme_bridge), GFP_KERNEL); + tsi148_bridge = kzalloc(sizeof(struct vme_bridge), GFP_KERNEL); if (tsi148_bridge == NULL) { dev_err(&pdev->dev, "Failed to allocate memory for device " "structure\n"); @@ -2238,9 +2238,7 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto err_struct; } - memset(tsi148_bridge, 0, sizeof(struct vme_bridge)); - - tsi148_device = kmalloc(sizeof(struct tsi148_driver), GFP_KERNEL); + tsi148_device = kzalloc(sizeof(struct tsi148_driver), GFP_KERNEL); if (tsi148_device == NULL) { dev_err(&pdev->dev, "Failed to allocate memory for device " "structure\n"); @@ -2248,8 +2246,6 @@ static int tsi148_probe(struct pci_dev *pdev, const struct pci_device_id *id) goto err_driver; } - memset(tsi148_device, 0, sizeof(struct tsi148_driver)); - tsi148_bridge->driver_priv = tsi148_device; /* Enable the device */ diff --git a/drivers/staging/vt6655/hostap.c b/drivers/staging/vt6655/hostap.c index fb7775c..195cc36 100644 --- a/drivers/staging/vt6655/hostap.c +++ b/drivers/staging/vt6655/hostap.c @@ -90,10 +90,9 @@ static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name); - pDevice->apdev = kmalloc(sizeof(struct net_device), GFP_KERNEL); + pDevice->apdev = kzalloc(sizeof(struct net_device), GFP_KERNEL); if (pDevice->apdev == NULL) return -ENOMEM; - memset(pDevice->apdev, 0, sizeof(struct net_device)); apdev_priv = netdev_priv(pDevice->apdev); *apdev_priv = *pDevice; diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c index e5e618e..9f215df 100644 --- a/drivers/staging/vt6655/wpactl.c +++ b/drivers/staging/vt6655/wpactl.c @@ -681,13 +681,12 @@ static int wpa_get_scan(PSDevice pDevice, count++; }; - pBuf = kmalloc(sizeof(struct viawget_scan_result) * count, (int)GFP_ATOMIC); + pBuf = kcalloc(count, sizeof(struct viawget_scan_result), (int)GFP_ATOMIC); if (pBuf == NULL) { ret = -ENOMEM; return ret; } - memset(pBuf, 0, sizeof(struct viawget_scan_result) * count); scan_buf = (struct viawget_scan_result *)pBuf; pBSS = &(pMgmt->sBSSList[0]); for (ii = 0, jj = 0; ii < MAX_BSS_NUM ; ii++) { diff --git a/drivers/staging/vt6656/hostap.c b/drivers/staging/vt6656/hostap.c index 4438631..93e52a3 100644 --- a/drivers/staging/vt6656/hostap.c +++ b/drivers/staging/vt6656/hostap.c @@ -91,10 +91,9 @@ static int hostap_enable_hostapd(PSDevice pDevice, int rtnl_locked) DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "%s: Enabling hostapd mode\n", dev->name); - pDevice->apdev = kmalloc(sizeof(struct net_device), GFP_KERNEL); + pDevice->apdev = kzalloc(sizeof(struct net_device), GFP_KERNEL); if (pDevice->apdev == NULL) return -ENOMEM; - memset(pDevice->apdev, 0, sizeof(struct net_device)); apdev_priv = netdev_priv(pDevice->apdev); *apdev_priv = *pDevice; diff --git a/drivers/staging/vt6656/wpactl.c b/drivers/staging/vt6656/wpactl.c index 8f7ad2c..961f583 100644 --- a/drivers/staging/vt6656/wpactl.c +++ b/drivers/staging/vt6656/wpactl.c @@ -678,13 +678,12 @@ static int wpa_get_scan(PSDevice pDevice, count++; }; - pBuf = kmalloc(sizeof(struct viawget_scan_result) * count, (int)GFP_ATOMIC); + pBuf = kcalloc(count, sizeof(struct viawget_scan_result), (int)GFP_ATOMIC); if (pBuf == NULL) { ret = -ENOMEM; return ret; } - memset(pBuf, 0, sizeof(struct viawget_scan_result) * count); scan_buf = (struct viawget_scan_result *)pBuf; pBSS = &(pMgmt->sBSSList[0]); for (ii = 0, jj = 0; ii < MAX_BSS_NUM ; ii++) { diff --git a/drivers/staging/wlan-ng/p80211conv.c b/drivers/staging/wlan-ng/p80211conv.c index 71c3595..059e150 100644 --- a/drivers/staging/wlan-ng/p80211conv.c +++ b/drivers/staging/wlan-ng/p80211conv.c @@ -601,7 +601,7 @@ int p80211skb_rxmeta_attach(struct wlandevice *wlandev, struct sk_buff *skb) } /* Allocate the rxmeta */ - rxmeta = kmalloc(sizeof(p80211_rxmeta_t), GFP_ATOMIC); + rxmeta = kzalloc(sizeof(p80211_rxmeta_t), GFP_ATOMIC); if (rxmeta == NULL) { printk(KERN_ERR "%s: Failed to allocate rxmeta.\n", @@ -611,7 +611,6 @@ int p80211skb_rxmeta_attach(struct wlandevice *wlandev, struct sk_buff *skb) } /* Initialize the rxmeta */ - memset(rxmeta, 0, sizeof(p80211_rxmeta_t)); rxmeta->wlandev = wlandev; rxmeta->hosttime = jiffies; diff --git a/drivers/staging/wlan-ng/prism2fw.c b/drivers/staging/wlan-ng/prism2fw.c index fc2d8f4..d20c879 100644 --- a/drivers/staging/wlan-ng/prism2fw.c +++ b/drivers/staging/wlan-ng/prism2fw.c @@ -536,13 +536,12 @@ int mkimage(imgchunk_t *clist, unsigned int *ccnt) /* Allocate buffer space for chunks */ for (i = 0; i < *ccnt; i++) { - clist[i].data = kmalloc(clist[i].len, GFP_KERNEL); + clist[i].data = kzalloc(clist[i].len, GFP_KERNEL); if (clist[i].data == NULL) { printk(KERN_ERR "failed to allocate image space, exitting.\n"); return 1; } - memset(clist[i].data, 0, clist[i].len); pr_debug("chunk[%d]: addr=0x%06x len=%d\n", i, clist[i].addr, clist[i].len); } -- cgit v0.10.2 From 078b078f662a8e21d5a6fee81007b5337ab962cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Fri, 14 May 2010 19:37:32 -0700 Subject: Staging: vt6655: use ETH_ALEN macro instead of custom one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaced custom ethernet address length definition U_ETHER_ADDR_LEN by ETH_ALEN from . Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/aes_ccmp.c b/drivers/staging/vt6655/aes_ccmp.c index 2614ed3..fef1b91 100644 --- a/drivers/staging/vt6655/aes_ccmp.c +++ b/drivers/staging/vt6655/aes_ccmp.c @@ -277,7 +277,7 @@ int ii,jj,kk; pbyPayload = pbyIV + 8; //IV-length abyNonce[0] = 0x00; //now is 0, if Qos here will be priority - memcpy(&(abyNonce[1]), pMACHeader->abyAddr2, U_ETHER_ADDR_LEN); + memcpy(&(abyNonce[1]), pMACHeader->abyAddr2, ETH_ALEN); abyNonce[7] = pbyIV[7]; abyNonce[8] = pbyIV[6]; abyNonce[9] = pbyIV[5]; @@ -299,16 +299,16 @@ int ii,jj,kk; byTmp = (BYTE)(pMACHeader->wFrameCtl >> 8); byTmp &= 0x87; MIC_HDR1[3] = byTmp | 0x40; - memcpy(&(MIC_HDR1[4]), pMACHeader->abyAddr1, U_ETHER_ADDR_LEN); - memcpy(&(MIC_HDR1[10]), pMACHeader->abyAddr2, U_ETHER_ADDR_LEN); + memcpy(&(MIC_HDR1[4]), pMACHeader->abyAddr1, ETH_ALEN); + memcpy(&(MIC_HDR1[10]), pMACHeader->abyAddr2, ETH_ALEN); //MIC_HDR2 - memcpy(&(MIC_HDR2[0]), pMACHeader->abyAddr3, U_ETHER_ADDR_LEN); + memcpy(&(MIC_HDR2[0]), pMACHeader->abyAddr3, ETH_ALEN); byTmp = (BYTE)(pMACHeader->wSeqCtl & 0xff); MIC_HDR2[6] = byTmp & 0x0f; MIC_HDR2[7] = 0; if ( bA4 ) { - memcpy(&(MIC_HDR2[8]), pMACHeader->abyAddr4, U_ETHER_ADDR_LEN); + memcpy(&(MIC_HDR2[8]), pMACHeader->abyAddr4, ETH_ALEN); } else { MIC_HDR2[8] = 0x00; MIC_HDR2[9] = 0x00; diff --git a/drivers/staging/vt6655/card.c b/drivers/staging/vt6655/card.c index b071236..7bc2d76 100644 --- a/drivers/staging/vt6655/card.c +++ b/drivers/staging/vt6655/card.c @@ -1576,7 +1576,7 @@ CARDbAdd_PMKID_Candidate ( // Update Old Candidate for (ii = 0; ii < pDevice->gsPMKIDCandidate.NumCandidates; ii++) { pCandidateList = &pDevice->gsPMKIDCandidate.CandidateList[ii]; - if ( !memcmp(pCandidateList->BSSID, pbyBSSID, U_ETHER_ADDR_LEN)) { + if ( !memcmp(pCandidateList->BSSID, pbyBSSID, ETH_ALEN)) { if ((bRSNCapExist == TRUE) && (wRSNCap & BIT0)) { pCandidateList->Flags |= NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED; } else { @@ -1593,7 +1593,7 @@ CARDbAdd_PMKID_Candidate ( } else { pCandidateList->Flags &= ~(NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED); } - memcpy(pCandidateList->BSSID, pbyBSSID, U_ETHER_ADDR_LEN); + memcpy(pCandidateList->BSSID, pbyBSSID, ETH_ALEN); pDevice->gsPMKIDCandidate.NumCandidates++; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"NumCandidates:%d\n", (int)pDevice->gsPMKIDCandidate.NumCandidates); return TRUE; diff --git a/drivers/staging/vt6655/desc.h b/drivers/staging/vt6655/desc.h index 0e11949..cedb1e7 100644 --- a/drivers/staging/vt6655/desc.h +++ b/drivers/staging/vt6655/desc.h @@ -446,8 +446,8 @@ typedef const SRrvTime_atim *PCSRrvTime_atim; typedef struct tagSRTSData { WORD wFrameControl; WORD wDurationID; - BYTE abyRA[U_ETHER_ADDR_LEN]; - BYTE abyTA[U_ETHER_ADDR_LEN]; + BYTE abyRA[ETH_ALEN]; + BYTE abyTA[ETH_ALEN]; }__attribute__ ((__packed__)) SRTSData, *PSRTSData; typedef const SRTSData *PCSRTSData; @@ -522,7 +522,7 @@ typedef const SRTS_a_FB *PCSRTS_a_FB; typedef struct tagSCTSData { WORD wFrameControl; WORD wDurationID; - BYTE abyRA[U_ETHER_ADDR_LEN]; + BYTE abyRA[ETH_ALEN]; WORD wReserved; }__attribute__ ((__packed__)) SCTSData, *PSCTSData; diff --git a/drivers/staging/vt6655/device.h b/drivers/staging/vt6655/device.h index 0ea24f2..40ee4e1 100644 --- a/drivers/staging/vt6655/device.h +++ b/drivers/staging/vt6655/device.h @@ -103,7 +103,7 @@ #define MAC_MAX_CONTEXT_REG (256+128) #define MAX_MULTICAST_ADDRESS_NUM 32 -#define MULTICAST_ADDRESS_LIST_SIZE (MAX_MULTICAST_ADDRESS_NUM * U_ETHER_ADDR_LEN) +#define MULTICAST_ADDRESS_LIST_SIZE (MAX_MULTICAST_ADDRESS_NUM * ETH_ALEN) //#define OP_MODE_INFRASTRUCTURE 0 @@ -304,7 +304,7 @@ typedef enum { // The receive duplicate detection cache entry typedef struct tagSCacheEntry{ WORD wFmSequence; - BYTE abyAddr2[U_ETHER_ADDR_LEN]; + BYTE abyAddr2[ETH_ALEN]; } SCacheEntry, *PSCacheEntry; typedef struct tagSCache{ @@ -321,7 +321,7 @@ typedef struct tagSDeFragControlBlock { WORD wSequence; WORD wFragNum; - BYTE abyAddr2[U_ETHER_ADDR_LEN]; + BYTE abyAddr2[ETH_ALEN]; UINT uLifetime; struct sk_buff* skb; PBYTE pbyRxBuffer; @@ -484,7 +484,7 @@ typedef struct __device_info { BYTE byOriginalZonetype; BYTE abyMacContext[MAC_MAX_CONTEXT_REG]; BOOL bLinkPass; // link status: OK or fail - BYTE abyCurrentNetAddr[U_ETHER_ADDR_LEN]; + BYTE abyCurrentNetAddr[ETH_ALEN]; // Adapter statistics SStatCounter scStatistic; @@ -546,8 +546,8 @@ typedef struct __device_info { BYTE byOpMode; BOOL bBSSIDFilter; WORD wMaxTransmitMSDULifetime; - BYTE abyBSSID[U_ETHER_ADDR_LEN]; - BYTE abyDesireBSSID[U_ETHER_ADDR_LEN]; + BYTE abyBSSID[ETH_ALEN]; + BYTE abyDesireBSSID[ETH_ALEN]; WORD wCTSDuration; // update while speed change WORD wACKDuration; // update while speed change WORD wRTSTransmitLen; // update while speed change @@ -753,9 +753,9 @@ typedef struct __device_info { SEthernetHeader sTxEthHeader; SEthernetHeader sRxEthHeader; - BYTE abyBroadcastAddr[U_ETHER_ADDR_LEN]; - BYTE abySNAP_RFC1042[U_ETHER_ADDR_LEN]; - BYTE abySNAP_Bridgetunnel[U_ETHER_ADDR_LEN]; + BYTE abyBroadcastAddr[ETH_ALEN]; + BYTE abySNAP_RFC1042[ETH_ALEN]; + BYTE abySNAP_Bridgetunnel[ETH_ALEN]; BYTE abyEEPROM[EEP_MAX_CONTEXT_SIZE]; //DWORD alignment // Pre-Authentication & PMK cache SPMKID gsPMKID; diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index a401f2a..301efc5 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -429,14 +429,14 @@ pOpts->flags|=DEVICE_FLAGS_DiversityANT; static void device_set_options(PSDevice pDevice) { - BYTE abyBroadcastAddr[U_ETHER_ADDR_LEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - BYTE abySNAP_RFC1042[U_ETHER_ADDR_LEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; - BYTE abySNAP_Bridgetunnel[U_ETHER_ADDR_LEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; + BYTE abyBroadcastAddr[ETH_ALEN] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; + BYTE abySNAP_RFC1042[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; + BYTE abySNAP_Bridgetunnel[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; - memcpy(pDevice->abyBroadcastAddr, abyBroadcastAddr, U_ETHER_ADDR_LEN); - memcpy(pDevice->abySNAP_RFC1042, abySNAP_RFC1042, U_ETHER_ADDR_LEN); - memcpy(pDevice->abySNAP_Bridgetunnel, abySNAP_Bridgetunnel, U_ETHER_ADDR_LEN); + memcpy(pDevice->abyBroadcastAddr, abyBroadcastAddr, ETH_ALEN); + memcpy(pDevice->abySNAP_RFC1042, abySNAP_RFC1042, ETH_ALEN); + memcpy(pDevice->abySNAP_Bridgetunnel, abySNAP_Bridgetunnel, ETH_ALEN); pDevice->uChannel = pDevice->sOpts.channel_num; pDevice->wRTSThreshold = pDevice->sOpts.rts_thresh; @@ -1971,7 +1971,7 @@ device_init_rd0_ring(pDevice); DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "call device_init_registers\n"); device_init_registers(pDevice, DEVICE_INIT_COLD); MACvReadEtherAddress(pDevice->PortOffset, pDevice->abyCurrentNetAddr); - memcpy(pDevice->pMgmt->abyMACAddr, pDevice->abyCurrentNetAddr, U_ETHER_ADDR_LEN); + memcpy(pDevice->pMgmt->abyMACAddr, pDevice->abyCurrentNetAddr, ETH_ALEN); device_set_multi(pDevice->dev); // Init for Key Management diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 715be63..83040f4 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -236,11 +236,11 @@ s_vProcessRxMACHeader ( } } - cbHeaderSize -= (U_ETHER_ADDR_LEN * 2); + cbHeaderSize -= (ETH_ALEN * 2); pbyRxBuffer = (PBYTE) (pbyRxBufferAddr + cbHeaderSize); - for(ii=0;iisRxEthHeader.abyDstAddr[ii]; - for(ii=0;iisRxEthHeader.abySrcAddr[ii]; *pcbHeadSize = cbHeaderSize; @@ -277,14 +277,14 @@ s_vGetDASA ( if ((pMACHeader->wFrameCtl & FC_TODS) == 0) { if (pMACHeader->wFrameCtl & FC_FROMDS) { - for(ii=0;iiabyDstAddr[ii] = pMACHeader->abyAddr1[ii]; psEthHeader->abySrcAddr[ii] = pMACHeader->abyAddr3[ii]; } } else { // IBSS mode - for(ii=0;iiabyDstAddr[ii] = pMACHeader->abyAddr1[ii]; psEthHeader->abySrcAddr[ii] = pMACHeader->abyAddr2[ii]; } @@ -293,14 +293,14 @@ s_vGetDASA ( else { // Is AP mode.. if (pMACHeader->wFrameCtl & FC_FROMDS) { - for(ii=0;iiabyDstAddr[ii] = pMACHeader->abyAddr3[ii]; psEthHeader->abySrcAddr[ii] = pMACHeader->abyAddr4[ii]; cbHeaderSize += 6; } } else { - for(ii=0;iiabyDstAddr[ii] = pMACHeader->abyAddr3[ii]; psEthHeader->abySrcAddr[ii] = pMACHeader->abyAddr2[ii]; } diff --git a/drivers/staging/vt6655/ioctl.c b/drivers/staging/vt6655/ioctl.c index e36cd30..404287c 100644 --- a/drivers/staging/vt6655/ioctl.c +++ b/drivers/staging/vt6655/ioctl.c @@ -497,7 +497,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { }; if (sValue.dwValue == 1) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "up wpadev\n"); - memcpy(pDevice->wpadev->dev_addr, pDevice->dev->dev_addr, U_ETHER_ADDR_LEN); + memcpy(pDevice->wpadev->dev_addr, pDevice->dev->dev_addr, ETH_ALEN); pDevice->bWPADEVUp = TRUE; } else { diff --git a/drivers/staging/vt6655/key.c b/drivers/staging/vt6655/key.c index 2065ee2..bfc5c50 100644 --- a/drivers/staging/vt6655/key.c +++ b/drivers/staging/vt6655/key.c @@ -281,7 +281,7 @@ BOOL KeybSetKey ( } } if (j < (MAX_KEY_TABLE-1)) { - memcpy(pTable->KeyTable[j].abyBSSID,pbyBSSID,U_ETHER_ADDR_LEN); + memcpy(pTable->KeyTable[j].abyBSSID,pbyBSSID,ETH_ALEN); pTable->KeyTable[j].bInUse = TRUE; if ((dwKeyIndex & PAIRWISE_KEY) != 0) { // Pairwise key @@ -656,7 +656,7 @@ BOOL KeybSetDefaultKey ( } pTable->KeyTable[MAX_KEY_TABLE-1].bInUse = TRUE; - for(ii=0;iiKeyTable[MAX_KEY_TABLE-1].abyBSSID[ii] = 0xFF; // Group key diff --git a/drivers/staging/vt6655/key.h b/drivers/staging/vt6655/key.h index db1cbf3..39403d9 100644 --- a/drivers/staging/vt6655/key.h +++ b/drivers/staging/vt6655/key.h @@ -71,7 +71,7 @@ typedef struct tagSKeyItem typedef struct tagSKeyTable { - BYTE abyBSSID[U_ETHER_ADDR_LEN]; //6 + BYTE abyBSSID[ETH_ALEN]; //6 BYTE byReserved0[2]; //8 SKeyItem PairwiseKey; SKeyItem GroupKey[MAX_GROUP_KEY]; //64*5 = 320, 320+8=328 diff --git a/drivers/staging/vt6655/mib.c b/drivers/staging/vt6655/mib.c index fb11595..e5f0638 100644 --- a/drivers/staging/vt6655/mib.c +++ b/drivers/staging/vt6655/mib.c @@ -190,7 +190,7 @@ void STAvUpdateRDStatCounter (PSStatCounter pStatistic, pStatistic->ullRsrOK++; - if (cbFrameLength >= U_ETHER_ADDR_LEN) { + if (cbFrameLength >= ETH_ALEN) { // update counters in case that successful transmit if (byRSR & RSR_ADDRBROAD) { pStatistic->ullRxBroadcastFrames++; diff --git a/drivers/staging/vt6655/mib.h b/drivers/staging/vt6655/mib.h index 2aa2b91..2308319 100644 --- a/drivers/staging/vt6655/mib.h +++ b/drivers/staging/vt6655/mib.h @@ -78,7 +78,7 @@ typedef struct tagSMib2Counter { LONG ifType; LONG ifMtu; DWORD ifSpeed; - BYTE ifPhysAddress[U_ETHER_ADDR_LEN]; + BYTE ifPhysAddress[ETH_ALEN]; LONG ifAdminStatus; LONG ifOperStatus; DWORD ifLastChange; diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index 6cd10bd..e27fa20 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -900,16 +900,16 @@ s_vFillRTSHead ( pBuf->Data.wFrameControl = TYPE_CTL_RTS;//0x00B4 if ((pDevice->eOPMode == OP_MODE_ADHOC) || (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN); } } else { @@ -938,17 +938,17 @@ s_vFillRTSHead ( if ((pDevice->eOPMode == OP_MODE_ADHOC) || (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN); } } // if (byFBOption == AUTO_FB_NONE) @@ -969,17 +969,17 @@ s_vFillRTSHead ( if ((pDevice->eOPMode == OP_MODE_ADHOC) || (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN); } } @@ -1000,16 +1000,16 @@ s_vFillRTSHead ( if ((pDevice->eOPMode == OP_MODE_ADHOC) || (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN); } } } @@ -1029,17 +1029,17 @@ s_vFillRTSHead ( if ((pDevice->eOPMode == OP_MODE_ADHOC) || (pDevice->eOPMode == OP_MODE_AP)) { - memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } else { - memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyTA[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN); } } } @@ -1098,7 +1098,7 @@ s_vFillCTSHead ( pBuf->Data.wDurationID = pBuf->wDuration_ba; pBuf->Data.wFrameControl = TYPE_CTL_CTS;//0x00C4 pBuf->Data.wReserved = 0x0000; - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyCurrentNetAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyCurrentNetAddr[0]), ETH_ALEN); } else { //if (byFBOption != AUTO_FB_NONE && uDMAIdx != TYPE_ATIMDMA && uDMAIdx != TYPE_BEACONDMA) PSCTS pBuf = (PSCTS)pvCTS; @@ -1116,7 +1116,7 @@ s_vFillCTSHead ( pBuf->Data.wDurationID = pBuf->wDuration_ba; pBuf->Data.wFrameControl = TYPE_CTL_CTS;//0x00C4 pBuf->Data.wReserved = 0x0000; - memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyCurrentNetAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pBuf->Data.abyRA[0]), &(pDevice->abyCurrentNetAddr[0]), ETH_ALEN); } } } @@ -2287,21 +2287,21 @@ vGenerateMACHeader ( } if (pDevice->eOPMode == OP_MODE_AP) { - memcpy(&(pMACHeader->abyAddr1[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr2[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr3[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); + memcpy(&(pMACHeader->abyAddr1[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN); + memcpy(&(pMACHeader->abyAddr2[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); + memcpy(&(pMACHeader->abyAddr3[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN); pMACHeader->wFrameCtl |= FC_FROMDS; } else { if (pDevice->eOPMode == OP_MODE_ADHOC) { - memcpy(&(pMACHeader->abyAddr1[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr2[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr3[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pMACHeader->abyAddr1[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN); + memcpy(&(pMACHeader->abyAddr2[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN); + memcpy(&(pMACHeader->abyAddr3[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); } else { - memcpy(&(pMACHeader->abyAddr3[0]), &(psEthHeader->abyDstAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr2[0]), &(psEthHeader->abySrcAddr[0]), U_ETHER_ADDR_LEN); - memcpy(&(pMACHeader->abyAddr1[0]), &(pDevice->abyBSSID[0]), U_ETHER_ADDR_LEN); + memcpy(&(pMACHeader->abyAddr3[0]), &(psEthHeader->abyDstAddr[0]), ETH_ALEN); + memcpy(&(pMACHeader->abyAddr2[0]), &(psEthHeader->abySrcAddr[0]), ETH_ALEN); + memcpy(&(pMACHeader->abyAddr1[0]), &(pDevice->abyBSSID[0]), ETH_ALEN); pMACHeader->wFrameCtl |= FC_TODS; } } @@ -2518,8 +2518,8 @@ CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket) { memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); - memcpy(&(sEthHeader.abyDstAddr[0]), &(pPacket->p80211Header->sA3.abyAddr1[0]), U_ETHER_ADDR_LEN); - memcpy(&(sEthHeader.abySrcAddr[0]), &(pPacket->p80211Header->sA3.abyAddr2[0]), U_ETHER_ADDR_LEN); + memcpy(&(sEthHeader.abyDstAddr[0]), &(pPacket->p80211Header->sA3.abyAddr1[0]), ETH_ALEN); + memcpy(&(sEthHeader.abySrcAddr[0]), &(pPacket->p80211Header->sA3.abyAddr2[0]), ETH_ALEN); //========================= // No Fragmentation //========================= @@ -3062,8 +3062,8 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb, PBYTE pbMPDU, UINT cbMPDU } memset((void *)(pbyTxBufferAddr + wTxBufSize), 0, (cbHeaderSize - wTxBufSize)); - memcpy(&(sEthHeader.abyDstAddr[0]), &(p80211Header->sA3.abyAddr1[0]), U_ETHER_ADDR_LEN); - memcpy(&(sEthHeader.abySrcAddr[0]), &(p80211Header->sA3.abyAddr2[0]), U_ETHER_ADDR_LEN); + memcpy(&(sEthHeader.abyDstAddr[0]), &(p80211Header->sA3.abyAddr1[0]), ETH_ALEN); + memcpy(&(sEthHeader.abySrcAddr[0]), &(p80211Header->sA3.abyAddr2[0]), ETH_ALEN); //========================= // No Fragmentation //========================= diff --git a/drivers/staging/vt6655/srom.c b/drivers/staging/vt6655/srom.c index fb7a646..418575f 100644 --- a/drivers/staging/vt6655/srom.c +++ b/drivers/staging/vt6655/srom.c @@ -320,7 +320,7 @@ void SROMvReadEtherAddress(DWORD_PTR dwIoBase, PBYTE pbyEtherAddress) BYTE ii; /* ii = Rom Address */ - for (ii = 0; ii < U_ETHER_ADDR_LEN; ii++) { + for (ii = 0; ii < ETH_ALEN; ii++) { *pbyEtherAddress = SROMbyReadEmbedded(dwIoBase, ii); pbyEtherAddress++; } @@ -345,7 +345,7 @@ void SROMvWriteEtherAddress(DWORD_PTR dwIoBase, PBYTE pbyEtherAddress) BYTE ii; /* ii = Rom Address */ - for (ii = 0; ii < U_ETHER_ADDR_LEN; ii++) { + for (ii = 0; ii < ETH_ALEN; ii++) { SROMbWriteEmbedded(dwIoBase, ii, *pbyEtherAddress); pbyEtherAddress++; } diff --git a/drivers/staging/vt6655/tether.c b/drivers/staging/vt6655/tether.c index c90b469..d8ba673 100644 --- a/drivers/staging/vt6655/tether.c +++ b/drivers/staging/vt6655/tether.c @@ -68,7 +68,7 @@ BYTE ETHbyGetHashIndexByCrc32 (PBYTE pbyMultiAddr) BYTE byHash = 0; // get the least 6-bits from CRC generator - byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, U_ETHER_ADDR_LEN, + byTmpHash = (BYTE)(CRCdwCrc32(pbyMultiAddr, ETH_ALEN, 0xFFFFFFFFL) & 0x3F); // reverse most bit to least bit for (ii = 0; ii < (sizeof(byTmpHash) * 8); ii++) { diff --git a/drivers/staging/vt6655/tether.h b/drivers/staging/vt6655/tether.h index 5a3c326..af119dd 100644 --- a/drivers/staging/vt6655/tether.h +++ b/drivers/staging/vt6655/tether.h @@ -29,17 +29,17 @@ #ifndef __TETHER_H__ #define __TETHER_H__ +#include #include "ttype.h" /*--------------------- Export Definitions -------------------------*/ // // constants // -#define U_ETHER_ADDR_LEN 6 // Ethernet address length #define U_TYPE_LEN 2 // #define U_CRC_LEN 4 // -#define U_HEADER_LEN (U_ETHER_ADDR_LEN * 2 + U_TYPE_LEN) -#define U_ETHER_ADDR_STR_LEN (U_ETHER_ADDR_LEN * 2 + 1) +#define U_HEADER_LEN (ETH_ALEN * 2 + U_TYPE_LEN) +#define U_ETHER_ADDR_STR_LEN (ETH_ALEN * 2 + 1) // Ethernet address string length #define MIN_DATA_LEN 46 // min data length @@ -167,8 +167,8 @@ // Ethernet packet // typedef struct tagSEthernetHeader { - BYTE abyDstAddr[U_ETHER_ADDR_LEN]; - BYTE abySrcAddr[U_ETHER_ADDR_LEN]; + BYTE abyDstAddr[ETH_ALEN]; + BYTE abySrcAddr[ETH_ALEN]; WORD wType; }__attribute__ ((__packed__)) SEthernetHeader, *PSEthernetHeader; @@ -178,8 +178,8 @@ SEthernetHeader, *PSEthernetHeader; // 802_3 packet // typedef struct tagS802_3Header { - BYTE abyDstAddr[U_ETHER_ADDR_LEN]; - BYTE abySrcAddr[U_ETHER_ADDR_LEN]; + BYTE abyDstAddr[ETH_ALEN]; + BYTE abySrcAddr[ETH_ALEN]; WORD wLen; }__attribute__ ((__packed__)) S802_3Header, *PS802_3Header; @@ -190,11 +190,11 @@ S802_3Header, *PS802_3Header; typedef struct tagS802_11Header { WORD wFrameCtl; WORD wDurationID; - BYTE abyAddr1[U_ETHER_ADDR_LEN]; - BYTE abyAddr2[U_ETHER_ADDR_LEN]; - BYTE abyAddr3[U_ETHER_ADDR_LEN]; + BYTE abyAddr1[ETH_ALEN]; + BYTE abyAddr2[ETH_ALEN]; + BYTE abyAddr3[ETH_ALEN]; WORD wSeqCtl; - BYTE abyAddr4[U_ETHER_ADDR_LEN]; + BYTE abyAddr4[ETH_ALEN]; }__attribute__ ((__packed__)) S802_11Header, *PS802_11Header; diff --git a/drivers/staging/vt6655/wctl.c b/drivers/staging/vt6655/wctl.c index 4406f8c..64a66b2 100644 --- a/drivers/staging/vt6655/wctl.c +++ b/drivers/staging/vt6655/wctl.c @@ -89,7 +89,7 @@ BOOL WCTLbIsDuplicate (PSCache pCache, PS802_11Header pMACHeader) /* Not fount in cache - insert */ pCacheEntry = &pCache->asCacheEntry[pCache->uInPtr]; pCacheEntry->wFmSequence = pMACHeader->wSeqCtl; - memcpy(&(pCacheEntry->abyAddr2[0]), &(pMACHeader->abyAddr2[0]), U_ETHER_ADDR_LEN); + memcpy(&(pCacheEntry->abyAddr2[0]), &(pMACHeader->abyAddr2[0]), ETH_ALEN); ADD_ONE_WITH_WRAP_AROUND(pCache->uInPtr, DUPLICATE_RX_CACHE_LENGTH); return FALSE; } @@ -151,7 +151,7 @@ UINT ii; pDevice->sRxDFCB[ii].bInUse = TRUE; pDevice->sRxDFCB[ii].wSequence = (pMACHeader->wSeqCtl >> 4); pDevice->sRxDFCB[ii].wFragNum = (pMACHeader->wSeqCtl & 0x000F); - memcpy(&(pDevice->sRxDFCB[ii].abyAddr2[0]), &(pMACHeader->abyAddr2[0]), U_ETHER_ADDR_LEN); + memcpy(&(pDevice->sRxDFCB[ii].abyAddr2[0]), &(pMACHeader->abyAddr2[0]), ETH_ALEN); return(ii); } } diff --git a/drivers/staging/vt6655/wmgr.c b/drivers/staging/vt6655/wmgr.c index 60c00fc..8af356f 100644 --- a/drivers/staging/vt6655/wmgr.c +++ b/drivers/staging/vt6655/wmgr.c @@ -3869,7 +3869,7 @@ s_MgrMakeAssocRequest( *pwPMKID = 0; // Initialize PMKID count pbyRSN += 2; // Point to PMKID list for (ii = 0; ii < pDevice->gsPMKID.BSSIDInfoCount; ii++) { - if ( !memcmp(&pDevice->gsPMKID.BSSIDInfo[ii].BSSID[0], pMgmt->abyCurrBSSID, U_ETHER_ADDR_LEN)) { + if ( !memcmp(&pDevice->gsPMKID.BSSIDInfo[ii].BSSID[0], pMgmt->abyCurrBSSID, ETH_ALEN)) { (*pwPMKID) ++; memcpy(pbyRSN, pDevice->gsPMKID.BSSIDInfo[ii].PMKID, 16); pbyRSN += 16; @@ -4125,7 +4125,7 @@ s_MgrMakeReAssocRequest( *pwPMKID = 0; // Initialize PMKID count pbyRSN += 2; // Point to PMKID list for (ii = 0; ii < pDevice->gsPMKID.BSSIDInfoCount; ii++) { - if ( !memcmp(&pDevice->gsPMKID.BSSIDInfo[ii].BSSID[0], pMgmt->abyCurrBSSID, U_ETHER_ADDR_LEN)) { + if ( !memcmp(&pDevice->gsPMKID.BSSIDInfo[ii].BSSID[0], pMgmt->abyCurrBSSID, ETH_ALEN)) { (*pwPMKID) ++; memcpy(pbyRSN, pDevice->gsPMKID.BSSIDInfo[ii].PMKID, 16); pbyRSN += 16; @@ -4831,7 +4831,7 @@ bAdd_PMKID_Candidate ( // Update Old Candidate for (ii = 0; ii < pDevice->gsPMKIDCandidate.NumCandidates; ii++) { pCandidateList = &pDevice->gsPMKIDCandidate.CandidateList[ii]; - if ( !memcmp(pCandidateList->BSSID, pbyBSSID, U_ETHER_ADDR_LEN)) { + if ( !memcmp(pCandidateList->BSSID, pbyBSSID, ETH_ALEN)) { if ((psRSNCapObj->bRSNCapExist == TRUE) && (psRSNCapObj->wRSNCap & BIT0)) { pCandidateList->Flags |= NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED; } else { @@ -4848,7 +4848,7 @@ bAdd_PMKID_Candidate ( } else { pCandidateList->Flags &= ~(NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED); } - memcpy(pCandidateList->BSSID, pbyBSSID, U_ETHER_ADDR_LEN); + memcpy(pCandidateList->BSSID, pbyBSSID, ETH_ALEN); pDevice->gsPMKIDCandidate.NumCandidates++; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"NumCandidates:%d\n", (int)pDevice->gsPMKIDCandidate.NumCandidates); return TRUE; diff --git a/drivers/staging/vt6655/wpa2.c b/drivers/staging/vt6655/wpa2.c index ff28379..7a42a0a 100644 --- a/drivers/staging/vt6655/wpa2.c +++ b/drivers/staging/vt6655/wpa2.c @@ -346,7 +346,7 @@ WPA2uSetIEs( *pwPMKID = 0; // Initialize PMKID count pbyBuffer = &pRSNIEs->abyRSN[20]; // Point to PMKID list for (ii = 0; ii < pMgmt->gsPMKIDCache.BSSIDInfoCount; ii++) { - if ( !memcmp(&pMgmt->gsPMKIDCache.BSSIDInfo[ii].abyBSSID[0], pMgmt->abyCurrBSSID, U_ETHER_ADDR_LEN)) { + if ( !memcmp(&pMgmt->gsPMKIDCache.BSSIDInfo[ii].abyBSSID[0], pMgmt->abyCurrBSSID, ETH_ALEN)) { (*pwPMKID) ++; memcpy(pbyBuffer, pMgmt->gsPMKIDCache.BSSIDInfo[ii].abyPMKID, 16); pbyBuffer += 16; diff --git a/drivers/staging/vt6655/wpactl.c b/drivers/staging/vt6655/wpactl.c index 9f215df..22c2fab 100644 --- a/drivers/staging/vt6655/wpactl.c +++ b/drivers/staging/vt6655/wpactl.c @@ -101,7 +101,7 @@ static int wpa_init_wpadev(PSDevice pDevice) wpadev_priv = netdev_priv(pDevice->wpadev); *wpadev_priv = *pDevice; - memcpy(pDevice->wpadev->dev_addr, dev->dev_addr, U_ETHER_ADDR_LEN); + memcpy(pDevice->wpadev->dev_addr, dev->dev_addr, ETH_ALEN); pDevice->wpadev->base_addr = dev->base_addr; pDevice->wpadev->irq = dev->irq; pDevice->wpadev->mem_start = dev->mem_start; -- cgit v0.10.2 From 96fe9ee2c2dfe3268961f3873ea6098b9b9f27c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Fri, 14 May 2010 19:37:33 -0700 Subject: Staging: vt6655: use ETH_HLEN macro instead of custom one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replaced custom header length definition U_HEADER_LEN by ETH_HLEN from . Also remove unused U_TYPE_LEN. Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 301efc5..25894a2 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -2152,8 +2152,8 @@ BOOL device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, UINT uNodeIndex) { pHeadTD->m_td1TD1.byTCR = (TCR_EDP|TCR_STP); - memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)(skb->data), U_HEADER_LEN); - cbFrameBodySize = skb->len - U_HEADER_LEN; + memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)(skb->data), ETH_HLEN); + cbFrameBodySize = skb->len - ETH_HLEN; // 802.1H if (ntohs(pDevice->sTxEthHeader.wType) > MAX_DATA_LEN) { @@ -2356,8 +2356,8 @@ static int device_xmit(struct sk_buff *skb, struct net_device *dev) { pHeadTD->m_td1TD1.byTCR = (TCR_EDP|TCR_STP); - memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)(skb->data), U_HEADER_LEN); - cbFrameBodySize = skb->len - U_HEADER_LEN; + memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)(skb->data), ETH_HLEN); + cbFrameBodySize = skb->len - ETH_HLEN; // 802.1H if (ntohs(pDevice->sTxEthHeader.wType) > MAX_DATA_LEN) { cbFrameBodySize += 8; @@ -2636,10 +2636,10 @@ pDevice->byTopCCKBasicRate,pDevice->byTopOFDMBasicRate); BYTE Descriptor_type; WORD Key_info; BOOL bTxeapol_key = FALSE; - Protocol_Version = skb->data[U_HEADER_LEN]; - Packet_Type = skb->data[U_HEADER_LEN+1]; - Descriptor_type = skb->data[U_HEADER_LEN+1+1+2]; - Key_info = (skb->data[U_HEADER_LEN+1+1+2+1] << 8)|(skb->data[U_HEADER_LEN+1+1+2+2]); + Protocol_Version = skb->data[ETH_HLEN]; + Packet_Type = skb->data[ETH_HLEN+1]; + Descriptor_type = skb->data[ETH_HLEN+1+1+2]; + Key_info = (skb->data[ETH_HLEN+1+1+2+1] << 8)|(skb->data[ETH_HLEN+1+1+2+2]); if (pDevice->sTxEthHeader.wType == TYPE_PKT_802_1x) { if(((Protocol_Version==1) ||(Protocol_Version==2)) && (Packet_Type==3)) { //802.1x OR eapol-key challenge frame transfer diff --git a/drivers/staging/vt6655/tether.h b/drivers/staging/vt6655/tether.h index af119dd..4f2af35 100644 --- a/drivers/staging/vt6655/tether.h +++ b/drivers/staging/vt6655/tether.h @@ -36,19 +36,17 @@ // // constants // -#define U_TYPE_LEN 2 // #define U_CRC_LEN 4 // -#define U_HEADER_LEN (ETH_ALEN * 2 + U_TYPE_LEN) #define U_ETHER_ADDR_STR_LEN (ETH_ALEN * 2 + 1) // Ethernet address string length #define MIN_DATA_LEN 46 // min data length #define MAX_DATA_LEN 1500 // max data length -#define MIN_PACKET_LEN (MIN_DATA_LEN + U_HEADER_LEN) +#define MIN_PACKET_LEN (MIN_DATA_LEN + ETH_HLEN) // 60 // min total packet length (tx) -#define MAX_PACKET_LEN (MAX_DATA_LEN + U_HEADER_LEN) +#define MAX_PACKET_LEN (MAX_DATA_LEN + ETH_HLEN) // 1514 // max total packet length (tx) diff --git a/drivers/staging/vt6655/wroute.c b/drivers/staging/vt6655/wroute.c index 1d02040..485e105 100644 --- a/drivers/staging/vt6655/wroute.c +++ b/drivers/staging/vt6655/wroute.c @@ -91,9 +91,9 @@ BOOL ROUTEbRelay (PSDevice pDevice, PBYTE pbySkbData, UINT uDataLen, UINT uNodeI pHeadTD->m_td1TD1.byTCR = (TCR_EDP|TCR_STP); - memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)pbySkbData, U_HEADER_LEN); + memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)pbySkbData, ETH_HLEN); - cbFrameBodySize = uDataLen - U_HEADER_LEN; + cbFrameBodySize = uDataLen - ETH_HLEN; if (ntohs(pDevice->sTxEthHeader.wType) > MAX_DATA_LEN) { cbFrameBodySize += 8; -- cgit v0.10.2 From 94002c07ff0e207a883519ccc35c0b5390b29331 Mon Sep 17 00:00:00 2001 From: Julia Lawall Date: Sat, 15 May 2010 23:21:43 +0200 Subject: Staging: Use kmemdup Use kmemdup when some other buffer is immediately copied into the allocated region. A simplified version of the semantic patch that makes this change is as follows: (http://coccinelle.lip6.fr/) // @@ expression from,to,size,flag; statement S; @@ - to = \(kmalloc\|kzalloc\)(size,flag); + to = kmemdup(from,size,flag); if (to==NULL || ...) S - memcpy(to, from, size); // Signed-off-by: Julia Lawall Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/usbdux.c b/drivers/staging/comedi/drivers/usbdux.c index df71515..86f035d 100644 --- a/drivers/staging/comedi/drivers/usbdux.c +++ b/drivers/staging/comedi/drivers/usbdux.c @@ -840,13 +840,12 @@ static int firmwareUpload(struct usbduxsub *usbduxsub, } /* we generate a local buffer for the firmware */ - fwBuf = kzalloc(sizeFirmware, GFP_KERNEL); + fwBuf = kmemdup(firmwareBinary, sizeFirmware, GFP_KERNEL); if (!fwBuf) { dev_err(&usbduxsub->interface->dev, "comedi_: mem alloc for firmware failed\n"); return -ENOMEM; } - memcpy(fwBuf, firmwareBinary, sizeFirmware); ret = usbduxsub_stop(usbduxsub); if (ret < 0) { diff --git a/drivers/staging/comedi/drivers/usbduxfast.c b/drivers/staging/comedi/drivers/usbduxfast.c index 0d72c41..29c3c01 100644 --- a/drivers/staging/comedi/drivers/usbduxfast.c +++ b/drivers/staging/comedi/drivers/usbduxfast.c @@ -1368,13 +1368,12 @@ static int firmwareUpload(struct usbduxfastsub_s *usbduxfastsub, } /* we generate a local buffer for the firmware */ - fwBuf = kzalloc(sizeFirmware, GFP_KERNEL); + fwBuf = kmemdup(firmwareBinary, sizeFirmware, GFP_KERNEL); if (!fwBuf) { dev_err(&usbduxfastsub->interface->dev, "comedi_: mem alloc for firmware failed\n"); return -ENOMEM; } - memcpy(fwBuf, firmwareBinary, sizeFirmware); ret = usbduxfastsub_stop(usbduxfastsub); if (ret < 0) { diff --git a/drivers/staging/hv/vmbus.c b/drivers/staging/hv/vmbus.c index 0a9d845..007543b 100644 --- a/drivers/staging/hv/vmbus.c +++ b/drivers/staging/hv/vmbus.c @@ -185,11 +185,10 @@ static void VmbusOnMsgDPC(struct hv_driver *drv) /* no msg */ break; } else { - copied = kmalloc(sizeof(*copied), GFP_ATOMIC); + copied = kmemdup(msg, sizeof(*copied), GFP_ATOMIC); if (copied == NULL) continue; - memcpy(copied, msg, sizeof(*copied)); osd_schedule_callback(gVmbusConnection.WorkQueue, VmbusOnChannelMessage, (void *)copied); diff --git a/drivers/staging/line6/dumprequest.c b/drivers/staging/line6/dumprequest.c index bb8c9da..cd468c3 100644 --- a/drivers/staging/line6/dumprequest.c +++ b/drivers/staging/line6/dumprequest.c @@ -105,10 +105,9 @@ int line6_wait_dump(struct line6_dump_request *l6dr, int nonblock) int line6_dumpreq_initbuf(struct line6_dump_request *l6dr, const void *buf, size_t len, int num) { - l6dr->reqbufs[num].buffer = kmalloc(len, GFP_KERNEL); + l6dr->reqbufs[num].buffer = kmemdup(buf, len, GFP_KERNEL); if (l6dr->reqbufs[num].buffer == NULL) return -ENOMEM; - memcpy(l6dr->reqbufs[num].buffer, buf, len); l6dr->reqbufs[num].length = len; return 0; } diff --git a/drivers/staging/line6/pod.c b/drivers/staging/line6/pod.c index 4983f2b..28f5146 100644 --- a/drivers/staging/line6/pod.c +++ b/drivers/staging/line6/pod.c @@ -1074,7 +1074,8 @@ int pod_init(struct usb_interface *interface, struct usb_line6_pod *pod) return -ENOMEM; } - pod->buffer_versionreq = kmalloc(sizeof(pod_request_version), + pod->buffer_versionreq = kmemdup(pod_request_version, + sizeof(pod_request_version), GFP_KERNEL); if (pod->buffer_versionreq == NULL) { @@ -1083,9 +1084,6 @@ int pod_init(struct usb_interface *interface, struct usb_line6_pod *pod) return -ENOMEM; } - memcpy(pod->buffer_versionreq, pod_request_version, - sizeof(pod_request_version)); - /* create sysfs entries: */ err = pod_create_files2(&interface->dev); if (err < 0) { diff --git a/drivers/staging/line6/variax.c b/drivers/staging/line6/variax.c index 28eb899..58ddbe6 100644 --- a/drivers/staging/line6/variax.c +++ b/drivers/staging/line6/variax.c @@ -486,7 +486,8 @@ int variax_init(struct usb_interface *interface, return err; } - variax->buffer_activate = kmalloc(sizeof(variax_activate), GFP_KERNEL); + variax->buffer_activate = kmemdup(variax_activate, + sizeof(variax_activate), GFP_KERNEL); if (variax->buffer_activate == NULL) { dev_err(&interface->dev, "Out of memory\n"); @@ -494,8 +495,6 @@ int variax_init(struct usb_interface *interface, return -ENOMEM; } - memcpy(variax->buffer_activate, variax_activate, - sizeof(variax_activate)); init_timer(&variax->activate_timer); /* create sysfs entries: */ diff --git a/drivers/staging/pohmelfs/config.c b/drivers/staging/pohmelfs/config.c index 9fdf2de..8c8d1c2 100644 --- a/drivers/staging/pohmelfs/config.c +++ b/drivers/staging/pohmelfs/config.c @@ -204,18 +204,18 @@ int pohmelfs_copy_crypto(struct pohmelfs_sb *psb) } if (g->hash_keysize) { - psb->hash_key = kmalloc(g->hash_keysize, GFP_KERNEL); + psb->hash_key = kmemdup(g->hash_key, g->hash_keysize, + GFP_KERNEL); if (!psb->hash_key) goto err_out_free_cipher_string; - memcpy(psb->hash_key, g->hash_key, g->hash_keysize); psb->hash_keysize = g->hash_keysize; } if (g->cipher_keysize) { - psb->cipher_key = kmalloc(g->cipher_keysize, GFP_KERNEL); + psb->cipher_key = kmemdup(g->cipher_key, g->cipher_keysize, + GFP_KERNEL); if (!psb->cipher_key) goto err_out_free_hash; - memcpy(psb->cipher_key, g->cipher_key, g->cipher_keysize); psb->cipher_keysize = g->cipher_keysize; } @@ -454,14 +454,12 @@ static int pohmelfs_crypto_hash_init(struct pohmelfs_config_group *g, struct poh g->hash_strlen = c->strlen; g->hash_keysize = c->keysize; - g->hash_key = kmalloc(c->keysize, GFP_KERNEL); + g->hash_key = kmemdup(key, c->keysize, GFP_KERNEL); if (!g->hash_key) { kfree(g->hash_string); return -ENOMEM; } - memcpy(g->hash_key, key, c->keysize); - return 0; } @@ -479,14 +477,12 @@ static int pohmelfs_crypto_cipher_init(struct pohmelfs_config_group *g, struct p g->cipher_strlen = c->strlen; g->cipher_keysize = c->keysize; - g->cipher_key = kmalloc(c->keysize, GFP_KERNEL); + g->cipher_key = kmemdup(key, c->keysize, GFP_KERNEL); if (!g->cipher_key) { kfree(g->cipher_string); return -ENOMEM; } - memcpy(g->cipher_key, key, c->keysize); - return 0; } diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c index b7426fe..1b838a2 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_softmac.c @@ -2667,11 +2667,11 @@ static int ieee80211_wpa_set_wpa_ie(struct ieee80211_device *ieee, return -EINVAL; if (param->u.wpa_ie.len) { - buf = kmalloc(param->u.wpa_ie.len, GFP_KERNEL); + buf = kmemdup(param->u.wpa_ie.data, param->u.wpa_ie.len, + GFP_KERNEL); if (buf == NULL) return -ENOMEM; - memcpy(buf, param->u.wpa_ie.data, param->u.wpa_ie.len); kfree(ieee->wpa_ie); ieee->wpa_ie = buf; ieee->wpa_ie_len = param->u.wpa_ie.len; diff --git a/drivers/staging/rtl8187se/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8187se/ieee80211/ieee80211_wx.c index aa3ba45..07d8dbc 100644 --- a/drivers/staging/rtl8187se/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8187se/ieee80211/ieee80211_wx.c @@ -727,10 +727,9 @@ int ieee80211_wx_set_gen_ie(struct ieee80211_device *ieee, u8 *ie, size_t len) printk("len:%zu, ie:%d\n", len, ie[1]); return -EINVAL; } - buf = kmalloc(len, GFP_KERNEL); + buf = kmemdup(ie, len, GFP_KERNEL); if (buf == NULL) return -ENOMEM; - memcpy(buf, ie, len); kfree(ieee->wpa_ie); ieee->wpa_ie = buf; ieee->wpa_ie_len = len; diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c index 215542a..46b6e8c 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_softmac.c @@ -3255,11 +3255,11 @@ static int ieee80211_wpa_set_wpa_ie(struct ieee80211_device *ieee, return -EINVAL; if (param->u.wpa_ie.len) { - buf = kmalloc(param->u.wpa_ie.len, GFP_KERNEL); + buf = kmemdup(param->u.wpa_ie.data, param->u.wpa_ie.len, + GFP_KERNEL); if (buf == NULL) return -ENOMEM; - memcpy(buf, param->u.wpa_ie.data, param->u.wpa_ie.len); kfree(ieee->wpa_ie); ieee->wpa_ie = buf; ieee->wpa_ie_len = param->u.wpa_ie.len; diff --git a/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c index fcabaf3..4971b1c 100644 --- a/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8192e/ieee80211/ieee80211_wx.c @@ -979,10 +979,9 @@ int ieee80211_wx_set_gen_ie(struct ieee80211_device *ieee, u8 *ie, size_t len) printk("len:%zu, ie:%d\n", len, ie[1]); return -EINVAL; } - buf = kmalloc(len, GFP_KERNEL); + buf = kmemdup(ie, len, GFP_KERNEL); if (buf == NULL) return -ENOMEM; - memcpy(buf, ie, len); kfree(ieee->wpa_ie); ieee->wpa_ie = buf; ieee->wpa_ie_len = len; diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c index b9fa15f..4f1f2f0 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_softmac.c @@ -2844,11 +2844,11 @@ static int ieee80211_wpa_set_wpa_ie(struct ieee80211_device *ieee, return -EINVAL; if (param->u.wpa_ie.len) { - buf = kmalloc(param->u.wpa_ie.len, GFP_KERNEL); + buf = kmemdup(param->u.wpa_ie.data, param->u.wpa_ie.len, + GFP_KERNEL); if (buf == NULL) return -ENOMEM; - memcpy(buf, param->u.wpa_ie.data, param->u.wpa_ie.len); kfree(ieee->wpa_ie); ieee->wpa_ie = buf; ieee->wpa_ie_len = param->u.wpa_ie.len; diff --git a/drivers/staging/rtl8192su/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8192su/ieee80211/ieee80211_wx.c index db54ad0..2ce5bd5 100644 --- a/drivers/staging/rtl8192su/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8192su/ieee80211/ieee80211_wx.c @@ -767,10 +767,9 @@ int ieee80211_wx_set_gen_ie(struct ieee80211_device *ieee, u8 *ie, size_t len) printk("len: %Zd, ie:%d\n", len, ie[1]); return -EINVAL; } - buf = kmalloc(len, GFP_KERNEL); + buf = kmemdup(ie, len, GFP_KERNEL); if (buf == NULL) return -ENOMEM; - memcpy(buf, ie, len); kfree(ieee->wpa_ie); ieee->wpa_ie = buf; ieee->wpa_ie_len = len; diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c index a6955e2..a2e84c5 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c @@ -1579,10 +1579,9 @@ static inline u16 auth_parse(struct sk_buff *skb, u8** challenge, int *chlen) if(*(t++) == MFIE_TYPE_CHALLENGE){ *chlen = *(t++); - *challenge = kmalloc(*chlen, GFP_ATOMIC); + *challenge = kmemdup(t, *chlen, GFP_ATOMIC); if (!*challenge) return -ENOMEM; - memcpy(*challenge, t, *chlen); } } @@ -2870,11 +2869,11 @@ static int ieee80211_wpa_set_wpa_ie(struct ieee80211_device *ieee, return -EINVAL; if (param->u.wpa_ie.len) { - buf = kmalloc(param->u.wpa_ie.len, GFP_KERNEL); + buf = kmemdup(param->u.wpa_ie.data, param->u.wpa_ie.len, + GFP_KERNEL); if (buf == NULL) return -ENOMEM; - memcpy(buf, param->u.wpa_ie.data, param->u.wpa_ie.len); kfree(ieee->wpa_ie); ieee->wpa_ie = buf; ieee->wpa_ie_len = param->u.wpa_ie.len; diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c index 79b180f..fb78ed2 100644 --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c @@ -847,10 +847,9 @@ int ieee80211_wx_set_gen_ie(struct ieee80211_device *ieee, u8 *ie, size_t len) printk("len:%zu, ie:%d\n", len, ie[1]); return -EINVAL; } - buf = kmalloc(len, GFP_KERNEL); + buf = kmemdup(ie, len, GFP_KERNEL); if (buf == NULL) return -ENOMEM; - memcpy(buf, ie, len); kfree(ieee->wpa_ie); ieee->wpa_ie = buf; ieee->wpa_ie_len = len; diff --git a/drivers/staging/usbip/stub_rx.c b/drivers/staging/usbip/stub_rx.c index bc26740..feb9fd7 100644 --- a/drivers/staging/usbip/stub_rx.c +++ b/drivers/staging/usbip/stub_rx.c @@ -502,13 +502,13 @@ static void stub_recv_cmd_submit(struct stub_device *sdev, } /* set priv->urb->setup_packet */ - priv->urb->setup_packet = kzalloc(8, GFP_KERNEL); + priv->urb->setup_packet = kmemdup(&pdu->u.cmd_submit.setup, 8, + GFP_KERNEL); if (!priv->urb->setup_packet) { dev_err(&sdev->interface->dev, "allocate setup_packet\n"); usbip_event_add(ud, SDEV_EVENT_ERROR_MALLOC); return; } - memcpy(priv->urb->setup_packet, &pdu->u.cmd_submit.setup, 8); /* set other members from the base header of pdu */ priv->urb->context = (void *) priv; -- cgit v0.10.2 From 9153f7b997aef3fcfd0bf1eededfd76595c7dc0b Mon Sep 17 00:00:00 2001 From: Hank Janssen Date: Sat, 15 May 2010 14:39:58 -0700 Subject: staging: hv: Added heartbeat functionality to hv_utils Add heartbeat functionality to hv_utils/Hyper-V Signed-off-by: Haiyang Zhang Signed-off-by: Hank Janssen Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/hv/channel_mgmt.c b/drivers/staging/hv/channel_mgmt.c index 6877e8e..3f53b4d 100644 --- a/drivers/staging/hv/channel_mgmt.c +++ b/drivers/staging/hv/channel_mgmt.c @@ -33,8 +33,8 @@ struct vmbus_channel_message_table_entry { void (*messageHandler)(struct vmbus_channel_message_header *msg); }; -#define MAX_MSG_TYPES 2 -#define MAX_NUM_DEVICE_CLASSES_SUPPORTED 6 +#define MAX_MSG_TYPES 3 +#define MAX_NUM_DEVICE_CLASSES_SUPPORTED 7 static const struct hv_guid gSupportedDeviceClasses[MAX_NUM_DEVICE_CLASSES_SUPPORTED] = { @@ -89,6 +89,14 @@ static const struct hv_guid 0xad, 0xce, 0xe8, 0x0a, 0xb0, 0x17, 0x5c, 0xaf } }, + /* {57164f39-9115-4e78-ab55-382f3bd5422d} */ + /* Heartbeat */ + { + .data = { + 0x39, 0x4f, 0x16, 0x57, 0x15, 0x91, 0x78, 0x4e, + 0xab, 0x55, 0x38, 0x2f, 0x3b, 0xd5, 0x42, 0x2d + } + }, }; @@ -211,6 +219,17 @@ struct hyperv_service_callback hv_cb_utils[MAX_MSG_TYPES] = { .callback = chn_cb_negotiate, .log_msg = "Timesync channel functionality initialized" }, + /* {57164f39-9115-4e78-ab55-382f3bd5422d} */ + /* Heartbeat */ + { + .msg_type = HV_HEARTBEAT_MSG, + .data = { + 0x39, 0x4f, 0x16, 0x57, 0x15, 0x91, 0x78, 0x4e, + 0xab, 0x55, 0x38, 0x2f, 0x3b, 0xd5, 0x42, 0x2d + }, + .callback = chn_cb_negotiate, + .log_msg = "Heartbeat channel functionality initialized" + }, }; EXPORT_SYMBOL(hv_cb_utils); diff --git a/drivers/staging/hv/hv_utils.c b/drivers/staging/hv/hv_utils.c index db45d97a..8a49aaf 100644 --- a/drivers/staging/hv/hv_utils.c +++ b/drivers/staging/hv/hv_utils.c @@ -194,6 +194,62 @@ static void timesync_onchannelcallback(void *context) DPRINT_EXIT(VMBUS); } +/* + * Heartbeat functionality. + * Every two seconds, Hyper-V send us a heartbeat request message. + * we respond to this message, and Hyper-V knows we are alive. + */ +static void heartbeat_onchannelcallback(void *context) +{ + struct vmbus_channel *channel = context; + u8 *buf; + u32 buflen, recvlen; + u64 requestid; + struct icmsg_hdr *icmsghdrp; + struct heartbeat_msg_data *heartbeat_msg; + + DPRINT_ENTER(VMBUS); + + buflen = PAGE_SIZE; + buf = kmalloc(buflen, GFP_ATOMIC); + + VmbusChannelRecvPacket(channel, buf, buflen, &recvlen, &requestid); + + if (recvlen > 0) { + DPRINT_DBG(VMBUS, "heartbeat packet: len=%d, requestid=%lld", + recvlen, requestid); + + icmsghdrp = (struct icmsg_hdr *)&buf[ + sizeof(struct vmbuspipe_hdr)]; + + icmsghdrp = (struct icmsg_hdr *)&buf[ + sizeof(struct vmbuspipe_hdr)]; + + if (icmsghdrp->icmsgtype == ICMSGTYPE_NEGOTIATE) { + prep_negotiate_resp(icmsghdrp, NULL, buf); + } else { + heartbeat_msg = (struct heartbeat_msg_data *)&buf[ + sizeof(struct vmbuspipe_hdr) + + sizeof(struct icmsg_hdr)]; + + DPRINT_DBG(VMBUS, "heartbeat seq = %lld", + heartbeat_msg->seq_num); + + heartbeat_msg->seq_num += 1; + } + + icmsghdrp->icflags = ICMSGHDRFLAG_TRANSACTION + | ICMSGHDRFLAG_RESPONSE; + + VmbusChannelSendPacket(channel, buf, + recvlen, requestid, + VmbusPacketTypeDataInBand, 0); + } + + kfree(buf); + + DPRINT_EXIT(VMBUS); +} static int __init init_hyperv_utils(void) { @@ -207,6 +263,10 @@ static int __init init_hyperv_utils(void) ×ync_onchannelcallback; hv_cb_utils[HV_TIMESYNC_MSG].callback = ×ync_onchannelcallback; + hv_cb_utils[HV_HEARTBEAT_MSG].channel->OnChannelCallback = + &heartbeat_onchannelcallback; + hv_cb_utils[HV_HEARTBEAT_MSG].callback = &heartbeat_onchannelcallback; + return 0; } @@ -221,6 +281,10 @@ static void exit_hyperv_utils(void) hv_cb_utils[HV_TIMESYNC_MSG].channel->OnChannelCallback = &chn_cb_negotiate; hv_cb_utils[HV_TIMESYNC_MSG].callback = &chn_cb_negotiate; + + hv_cb_utils[HV_HEARTBEAT_MSG].channel->OnChannelCallback = + &chn_cb_negotiate; + hv_cb_utils[HV_HEARTBEAT_MSG].callback = &chn_cb_negotiate; } module_init(init_hyperv_utils); diff --git a/drivers/staging/hv/utils.h b/drivers/staging/hv/utils.h index a4b9fd0..7c07499 100644 --- a/drivers/staging/hv/utils.h +++ b/drivers/staging/hv/utils.h @@ -75,6 +75,10 @@ struct shutdown_msg_data { u8 display_message[2048]; } __attribute__((packed)); +struct heartbeat_msg_data { + u64 seq_num; + u32 reserved[8]; +} __attribute__((packed)); /* Time Sync IC defs */ #define ICTIMESYNCFLAG_PROBE 0 @@ -97,6 +101,7 @@ struct ictimesync_data{ /* Index for each IC struct in array hv_cb_utils[] */ #define HV_SHUTDOWN_MSG 0 #define HV_TIMESYNC_MSG 1 +#define HV_HEARTBEAT_MSG 2 struct hyperv_service_callback { u8 msg_type; diff --git a/drivers/staging/hv/version_info.h b/drivers/staging/hv/version_info.h index 82e74b1..35178f2 100644 --- a/drivers/staging/hv/version_info.h +++ b/drivers/staging/hv/version_info.h @@ -40,8 +40,9 @@ * Minor Number Changes when new functionality is added * to the Linux IC's that is not a bug fix. * + * 3.1 - Added completed hv_utils driver. Shutdown/Heartbeat/Timesync */ -#define HV_DRV_VERSION "3.0" +#define HV_DRV_VERSION "3.1" #endif -- cgit v0.10.2 From 59497bba59035a2b09ac21f96bb904d1101bd95f Mon Sep 17 00:00:00 2001 From: Christoph Fritz Date: Sun, 16 May 2010 23:45:59 +0200 Subject: Staging: wlan-ng prism2usb: add suspend/resume There is no need trying to load the (even in most cases) not availible firmware after suspend. This saves about 30 secounds on reset waiting for timeout. Signed-off-by: Christoph Fritz Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/wlan-ng/prism2usb.c b/drivers/staging/wlan-ng/prism2usb.c index 501d27f..f5cff75 100644 --- a/drivers/staging/wlan-ng/prism2usb.c +++ b/drivers/staging/wlan-ng/prism2usb.c @@ -285,11 +285,76 @@ exit: usb_set_intfdata(interface, NULL); } +#ifdef CONFIG_PM +static int prism2sta_suspend(struct usb_interface *interface, + pm_message_t message) +{ + hfa384x_t *hw = NULL; + wlandevice_t *wlandev; + wlandev = (wlandevice_t *) usb_get_intfdata(interface); + if (!wlandev) + return -ENODEV; + + hw = wlandev->priv; + if (!hw) + return -ENODEV; + + prism2sta_ifstate(wlandev, P80211ENUM_ifstate_disable); + + usb_kill_urb(&hw->rx_urb); + usb_kill_urb(&hw->tx_urb); + usb_kill_urb(&hw->ctlx_urb); + + return 0; +} + +static int prism2sta_resume(struct usb_interface *interface) +{ + int result = 0; + hfa384x_t *hw = NULL; + wlandevice_t *wlandev; + wlandev = (wlandevice_t *) usb_get_intfdata(interface); + if (!wlandev) + return -ENODEV; + + hw = wlandev->priv; + if (!hw) + return -ENODEV; + + /* Do a chip-level reset on the MAC */ + if (prism2_doreset) { + result = hfa384x_corereset(hw, + prism2_reset_holdtime, + prism2_reset_settletime, 0); + if (result != 0) { + unregister_wlandev(wlandev); + hfa384x_destroy(hw); + printk(KERN_ERR + "%s: hfa384x_corereset() failed.\n", dev_info); + kfree(wlandev); + kfree(hw); + wlandev = NULL; + return -ENODEV; + } + } + + prism2sta_ifstate(wlandev, P80211ENUM_ifstate_enable); + + return 0; +} +#else +#define prism2sta_suspend NULL +#define prism2sta_resume NULL +#endif /* CONFIG_PM */ + static struct usb_driver prism2_usb_driver = { .name = "prism2_usb", .probe = prism2sta_probe_usb, .disconnect = prism2sta_disconnect_usb, .id_table = usb_prism_tbl, + .suspend = prism2sta_suspend, + .resume = prism2sta_resume, + .reset_resume = prism2sta_resume, /* fops, minor? */ }; -- cgit v0.10.2 From f1d7dbbef51a624ff0ec76f022802d677fdb9888 Mon Sep 17 00:00:00 2001 From: Alexander Kurz Date: Sat, 8 May 2010 12:21:45 +0400 Subject: Staging: comedi: new Kconfig and Makefiles, drivers grouped by bustype. PC/104-drivers went into ISA, PC/104+ went into PCI, Drivers without a bustype went into "misc". In doubt drivers supporting both ISA/PCI went into PCI. Drivers without any detailed hardware info went into ISA, e.g. fl512.c Some NI drivers are used by other NI drivers from different bustypes are grouped seperately in NI_COMMON. [tweaked by gregkh to handle the new driver recently added] Signed-off-by: Alexander Kurz Acked-by: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index d63c889..283ea0c 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -9,27 +9,1296 @@ config COMEDI config COMEDI_DEBUG bool "Comedi debugging" depends on COMEDI != n - help + ---help--- This is an option for use by developers; most people should say N here. This enables comedi core and driver debugging. -config COMEDI_PCI_DRIVERS +menuconfig COMEDI_MISC_DRIVERS + tristate "Comedi misc drivers" + depends on COMEDI + default N + ---help--- + Enable comedi misc drivers to be built + + Note that the answer to this question won't directly affect the + kernel: saying N will just cause the configurator to skip all + the questions about misc non-hardware comedi drivers. + +if COMEDI_MISC_DRIVERS + +config COMEDI_KCOMEDILIB + tristate "Comedi kcomedilib" + ---help--- + Build the kcomedilib + +config COMEDI_BOND + tristate "Device bonding support" + depends on COMEDI_KCOMEDILIB + default N + ---help--- + Enable support for a driver to 'bond' (merge) multiple subdevices + from multiple devices together as one. + + To compile this driver as a module, choose M here: the module will be + called comedi_bond. + +config COMEDI_TEST + tristate "Fake waveform generator support" + select COMEDI_FC + default N + ---help--- + Enable support for the fake waveform generator. + This driver is mainly for testing purposes, but can also be used to + generate sample waveforms on systems that don't have data acquisition + hardware. + + To compile this driver as a module, choose M here: the module will be + called comedi_test. + +config COMEDI_PARPORT + tristate "Parallel port support" + depends on PARPORT_PC + default N + ---help--- + Enable support for the standard parallel port. + A cheap and easy way to get a few more digital I/O lines. Steal + additional parallel ports from old computers or your neighbors' + computers. + + To compile this driver as a module, choose M here: the module will be + called comedi_parport. + +config COMEDI_SERIAL2002 + tristate "Driver for serial connected hardware" + default N + ---help--- + Enable support for serial connected hardware + + To compile this driver as a module, choose M here: the module will be + called serial2002. + +config COMEDI_SKEL + tristate "Comedi skeleton driver" + default N + ---help--- + Build the Skeleton driver, an example for driver writers + + To compile this driver as a module, choose M here: the module will be + called skel. + +endif # COMEDI_MISC_DRIVERS + +menuconfig COMEDI_ISA_DRIVERS + tristate "Comedi ISA and PC/104 drivers" + depends on COMEDI && ISA + default N + ---help--- + Enable comedi ISA and PC/104 drivers to be built + + Note that the answer to this question won't directly affect the + kernel: saying N will just cause the configurator to skip all + the questions about ISA and PC/104 comedi drivers. + +if COMEDI_ISA_DRIVERS && ISA + +config COMEDI_8255 + tristate "Generic 8255 support" + default N + ---help--- + Enable generic 8255 support. + + To compile this driver as a module, choose M here: the module will be + called 8255. + +config COMEDI_ACL7225B + tristate "ADlink NuDAQ ACL-7225b and compatibles support" + default N + ---help--- + Enable support for ADlink NuDAQ ACL-7225b and compatibles, + ADlink ACL-7225b (acl7225b), ICP P16R16DIO (p16r16dio) + + To compile this driver as a module, choose M here: the module will be + called acl7225b. + +config COMEDI_PCL711 + tristate "Advantech PCL-711/711b and ADlink ACL-8112 ISA card support" + default N + ---help--- + Enable support for Advantech PCL-711 and 711b, ADlink ACL-8112 + + To compile this driver as a module, choose M here: the module will be + called pcl711. + +config COMEDI_PCL724 + tristate "Advantech PCL-722/724/731 and ADlink ACL-7122/7124/PET-48DIO" + default N + ---help--- + Enable support for Advantech PCL-724, PCL-722, PCL-731 and + ADlink ACL-7122, ACL-7124, PET-48DIO ISA cards + + To compile this driver as a module, choose M here: the module will be + called pcl724. + +config COMEDI_PCL725 + tristate "Advantech PCL-725 and compatible ISA card support" + default N + ---help--- + Enable support for Advantech PCL-725 and compatible ISA cards. + + To compile this driver as a module, choose M here: the module will be + called pcl725. + +config COMEDI_PCL726 + tristate "Advantech PCL-726 and compatible ISA card support" + default N + ---help--- + Enable support for Advantech PCL-726 and compatible ISA cards. + + To compile this driver as a module, choose M here: the module will be + called pcl726. + +config COMEDI_PCL730 + tristate "Advantech PCL-730 and ADlink ACL-7130 ISA card support" + default N + ---help--- + Enable support for Advantech PCL-730, ICP ISO-730 and ADlink + ACL-7130 ISA cards + + To compile this driver as a module, choose M here: the module will be + called pcl730. + +config COMEDI_PCL812 + tristate "Advantech PCL-812/813 and ADlink ACL-8112/8113/8113/8216" + default N + ---help--- + Enable support for Advantech PCL-812/PG, PCL-813/B, ADLink + ACL-8112DG/HG/PG, ACL-8113, ACL-8216, ICP DAS A-821PGH/PGL/PGL-NDA, + A-822PGH/PGL, A-823PGH/PGL, A-826PG and ICP DAS ISO-813 ISA cards + + To compile this driver as a module, choose M here: the module will be + called pcl812. + +config COMEDI_PCL816 + tristate "Advantech PCL-814 and PCL-816 ISA card support" + default N + ---help--- + Enable support for Advantech PCL-814 and PCL-816 ISA cards + + To compile this driver as a module, choose M here: the module will be + called pcl816. + +config COMEDI_PCL818 + tristate "Advantech PCL-718 and PCL-818 ISA card support" + default N + ---help--- + Enable support for Advantech PCL-818 ISA cards + PCL-818L, PCL-818H, PCL-818HD, PCL-818HG, PCL-818 and PCL-718 + + To compile this driver as a module, choose M here: the module will be + called pcl818. + +config COMEDI_PCM3724 + tristate "Advantech PCM-3724 PC/104 card support" + default N + ---help--- + Enable support for Advantech PCM-3724 PC/104 cards. + + To compile this driver as a module, choose M here: the module will be + called pcm3724. + +config COMEDI_PCM3730 + tristate "Advantech PCM-3730 and clone PC/104 board support" + default N + ---help--- + Enable support for Advantech PCM-3730 and clone PC/104 boards + + To compile this driver as a module, choose M here: the module will be + called pcm3730. + +config COMEDI_RTI800 + tristate "Analog Devices RTI-800/815 ISA card support" + default N + ---help--- + Enable support for Analog Devices RTI-800/815 ISA cards + + To compile this driver as a module, choose M here: the module will be + called rti800. + +config COMEDI_RTI802 + tristate "Analog Devices RTI-802 ISA card support" + default N + ---help--- + Enable support for Analog Devices RTI-802 ISA cards + + To compile this driver as a module, choose M here: the module will be + called rti802. + +config COMEDI_DAS08 + tristate "DAS-08 compatible ISA, PC/104 and PCMCIA card support" + default N + ---help--- + Enable support for Keithley Metrabyte/ComputerBoards DAS08 + and compatible ISA and PC/104 cards + + To compile this driver as a module, choose M here: the module will be + called das08. + +config COMEDI_DAS16M1 + tristate "MeasurementComputing CIO-DAS16/M1DAS-16 ISA card support" + select COMEDI_FC + default N + ---help--- + Enable support for Measurement Computing CIO-DAS16/M1 ISA cards. + + To compile this driver as a module, choose M here: the module will be + called das16m1. + +config COMEDI_DAS16 + tristate "DAS-16 compatible ISA and PC/104 card support" + select COMEDI_FC + default N + ---help--- + Enable support for Keithley Metrabyte/ComputerBoards DAS16 + and compatible ISA and PC/104 cards: + Keithley Metrabyte DAS-16, DAS-16G, DAS-16F, DAS-1201, DAS-1202, + DAS-1401, DAS-1402, DAS-1601, DAS-1602 and + ComputerBoards/MeasurementComputing PC104-DAS16/JR/, + PC104-DAS16JR/16, CIO-DAS16JR/16, CIO-DAS16/JR, CIO-DAS1401/12, + CIO-DAS1402/12, CIO-DAS1402/16, CIO-DAS1601/12, CIO-DAS1602/12, + CIO-DAS1602/16, CIO-DAS16/330 + + To compile this driver as a module, choose M here: the module will be + called das16. + +config COMEDI_DAS800 + tristate "DAS800 and compatible ISA card support" + select COMEDI_FC + default N + ---help--- + Enable support for Keithley Metrabyte DAS800 and compatible ISA cards + Keithley Metrabyte DAS-800, DAS-801, DAS-802 + Measurement Computing CIO-DAS800, CIO-DAS801, CIO-DAS802 and + CIO-DAS802/16 + + To compile this driver as a module, choose M here: the module will be + called das800. + +config COMEDI_DAS1800 + tristate "DAS1800 and compatible ISA card support" + select COMEDI_FC + default N + ---help--- + Enable support for DAS1800 and compatible ISA cards + Keithley Metrabyte DAS-1701ST, DAS-1701ST-DA, DAS-1701/AO, + DAS-1702ST, DAS-1702ST-DA, DAS-1702HR, DAS-1702HR-DA, DAS-1702/AO, + DAS-1801ST, DAS-1801ST-DA, DAS-1801HC, DAS-1801AO, DAS-1802ST, + DAS-1802ST-DA, DAS-1802HR, DAS-1802HR-DA, DAS-1802HC and + DAS-1802AO + + To compile this driver as a module, choose M here: the module will be + called das1800. + +config COMEDI_DAS6402 + tristate "DAS6402 and compatible ISA card support" + default N + ---help--- + Enable support for DAS6402 and compatible ISA cards + Computerboards, Keithley Metrabyte DAS6402 and compatibles + + To compile this driver as a module, choose M here: the module will be + called das6402. + +config COMEDI_DT2801 + tristate "Data Translation DT2801 ISA card support" + default N + ---help--- + Enable support for Data Translation DT2801 ISA cards + + To compile this driver as a module, choose M here: the module will be + called dt2801. + +config COMEDI_DT2811 + tristate "Data Translation DT2811 ISA card support" + default N + ---help--- + Enable support for Data Translation DT2811 ISA cards + + To compile this driver as a module, choose M here: the module will be + called dt2811. + +config COMEDI_DT2814 + tristate "Data Translation DT2814 ISA card support" + default N + ---help--- + Enable support for Data Translation DT2814 ISA cards + + To compile this driver as a module, choose M here: the module will be + called dt2814. + +config COMEDI_DT2815 + tristate "Data Translation DT2815 ISA card support" + default N + ---help--- + Enable support for Data Translation DT2815 ISA cards + + To compile this driver as a module, choose M here: the module will be + called dt2815. + +config COMEDI_DT2817 + tristate "Data Translation DT2817 ISA card support" + default N + ---help--- + Enable support for Data Translation DT2817 ISA cards + + To compile this driver as a module, choose M here: the module will be + called dt2817. + +config COMEDI_DT282X + tristate "Data Translation DT2821 series and DT-EZ ISA card support" + select COMEDI_FC + default N + ---help--- + Enable support for Data Translation DT2821 series including DT-EZ + DT2821, DT2821-F-16SE, DT2821-F-8DI, DT2821-G-16SE, DT2821-G-8DI, + DT2823 (dt2823), DT2824-PGH, DT2824-PGL, DT2825, DT2827, DT2828, + DT21-EZ, DT23-EZ, DT24-EZ and DT24-EZ-PGL + + To compile this driver as a module, choose M here: the module will be + called dt282x. + +config COMEDI_DMM32AT + tristate "Diamond Systems MM-32-AT PC/104 board support" + default N + ---help--- + Enable support for Diamond Systems MM-32-AT PC/104 boards + + To compile this driver as a module, choose M here: the module will be + called dmm32at. + +config COMEDI_FL512 + tristate "FL512 ISA card support" + default N + ---help--- + Enable support for FL512 ISA card + + To compile this driver as a module, choose M here: the module will be + called fl512. + +config COMEDI_AIO_AIO12_8 + tristate "I/O Products PC/104 AIO12-8 Analog I/O Board support" + default N + ---help--- + Enable support for I/O Products PC/104 AIO12-8 Analog I/O Board + + To compile this driver as a module, choose M here: the module will be + called aio_aio12_8. + +config COMEDI_AIO_IIRO_16 + tristate "I/O Products PC/104 IIRO16 Board support" + default N + ---help--- + Enable support for I/O Products PC/104 IIRO16 Relay And Isolated + Input Board + + To compile this driver as a module, choose M here: the module will be + called aio_iiro_16. + +config COMEDI_C6XDIGIO + tristate "Mechatronic Systems Inc. C6x_DIGIO DSP daughter card support" + default N + ---help--- + Enable support for Mechatronic Systems Inc. C6x_DIGIO DSP daughter + card + + To compile this driver as a module, choose M here: the module will be + called c6xdigio. + +config COMEDI_MPC624 + tristate "Micro/sys MPC-624 PC/104 board support" + default N + ---help--- + Enable support for Micro/sys MPC-624 PC/104 board + + To compile this driver as a module, choose M here: the module will be + called mpc624. + +config COMEDI_ADQ12B + tristate "MicroAxial ADQ12-B data acquisition and control card support" + default N + ---help--- + Enable MicroAxial ADQ12-B daq and control card support. + + To compile this driver as a module, choose M here: the module will be + called adq12b. + +config COMEDI_NI_AT_A2150 + tristate "NI AT-A2150 ISA card support" + depends on COMEDI_NI_COMMON + default N + ---help--- + Enable support for National Instruments AT-A2150 cards + + To compile this driver as a module, choose M here: the module will be + called ni_at_a2150. + +config COMEDI_NI_AT_AO + tristate "NI AT-AO-6/10 EISA card support" + depends on COMEDI_NI_COMMON + default N + ---help--- + Enable support for National Instruments AT-AO-6/10 cards + + To compile this driver as a module, choose M here: the module will be + called ni_at_ao. + +config COMEDI_NI_ATMIO + tristate "NI AT-MIO E series ISA-PNP card support" + depends on ISAPNP && COMEDI_NI_TIO && COMEDI_NI_COMMON + default N + ---help--- + Enable support for National Instruments AT-MIO E series cards + National Instruments AT-MIO-16E-1 (ni_atmio), + AT-MIO-16E-2, AT-MIO-16E-10, AT-MIO-16DE-10, AT-MIO-64E-3, + AT-MIO-16XE-50, AT-MIO-16XE-10, AT-AI-16XE-10 + + To compile this driver as a module, choose M here: the module will be + called ni_atmio. + +config COMEDI_NI_ATMIO16D + tristate "NI AT-MIO16/AT-MIO16D series ISA-PNP card support" + depends on ISAPNP && COMEDI_NI_COMMON + default N + ---help--- + Enable support for National Instruments AT-MIO16/AT-MIO16D cards. + + To compile this driver as a module, choose M here: the module will be + called ni_atmio16d. + +config COMEDI_PCMAD + tristate "Winsystems PCM-A/D12 and PCM-A/D16 PC/104 board support" + default N + ---help--- + Enable support for Winsystems PCM-A/D12 and PCM-A/D16 PC/104 boards. + + To compile this driver as a module, choose M here: the module will be + called pcmad. + +config COMEDI_PCMDA12 + tristate "Winsystems PCM-D/A-12 8-channel AO PC/104 board support" + default N + ---help--- + Enable support for Winsystems PCM-D/A-12 8-channel AO PC/104 boards. + Note that the board is not ISA-PNP capable and thus needs the I/O + port comedi_config parameter. + + To compile this driver as a module, choose M here: the module will be + called pcmda12. + +config COMEDI_PCMMIO + tristate "Winsystems PCM-MIO PC/104 board support" + default N + ---help--- + Enable support for Winsystems PCM-MIO multifunction PC/104 boards. + + To compile this driver as a module, choose M here: the module will be + called pcmmio. + +config COMEDI_PCMUIO + tristate "Winsystems PCM-UIO48A and PCM-UIO96A PC/104 board support" + default N + ---help--- + Enable support for PCM-UIO48A and PCM-UIO96A PC/104 boards. + + To compile this driver as a module, choose M here: the module will be + called pcmuio. + +config COMEDI_MULTIQ3 + tristate "Quanser Consulting MultiQ-3 ISA card support" + default N + ---help--- + Enable support for Quanser Consulting MultiQ-3 ISA cards + + To compile this driver as a module, choose M here: the module will be + called multiq3. + +config COMEDI_POC + tristate "Generic driver for very simple devices" + default N + ---help--- + Enable generic support for very simple / POC (Piece of Crap) boards, + Keithley Metrabyte DAC-02 (dac02), Advantech PCL-733 (pcl733) and + PCL-734 (pcl734) + + To compile this driver as a module, choose M here: the module will be + called poc. + +endif # COMEDI_ISA_DRIVERS + +menuconfig COMEDI_PCI_DRIVERS tristate "Comedi PCI drivers" depends on COMEDI && PCI default N ---help--- - Enable lots of comedi PCI drivers to be built + Enable comedi PCI drivers to be built + + Note that the answer to this question won't directly affect the + kernel: saying N will just cause the configurator to skip all + the questions about PCI comedi drivers. + +if COMEDI_PCI_DRIVERS && PCI + +config COMEDI_ADDI_APCI_035 + tristate "ADDI-DATA APCI_035 support" + default N + ---help--- + Enable support for ADDI-DATA APCI_035 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_035. + +config COMEDI_ADDI_APCI_1032 + tristate "ADDI-DATA APCI_1032 support" + default N + ---help--- + Enable support for ADDI-DATA APCI_1032 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_1032. + +config COMEDI_ADDI_APCI_1500 + tristate "ADDI-DATA APCI_1500 support" + default N + ---help--- + Enable support for ADDI-DATA APCI_1500 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_1500. + +config COMEDI_ADDI_APCI_1516 + tristate "ADDI-DATA APCI_1516 support" + default N + ---help--- + Enable support for ADDI-DATA APCI_1516 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_1516. + +config COMEDI_ADDI_APCI_1564 + tristate "ADDI-DATA APCI_1564 support" + default N + ---help--- + Enable support for ADDI-DATA APCI_1564 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_1564. + +config COMEDI_ADDI_APCI_16XX + tristate "ADDI-DATA APCI_16xx support" + default N + ---help--- + Enable support for ADDI-DATA APCI_16xx cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_16xx. + +config COMEDI_ADDI_APCI_2016 + tristate "ADDI-DATA APCI_2016 support" + default N + ---help--- + Enable support for ADDI-DATA APCI_2016 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_2016. + +config COMEDI_ADDI_APCI_2032 + tristate "ADDI-DATA APCI_2032 support" + default N + ---help--- + Enable support for ADDI-DATA APCI_2032 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_2032. + +config COMEDI_ADDI_APCI_2200 + tristate "ADDI-DATA APCI_2200 support" + default N + ---help--- + Enable support for ADDI-DATA APCI_2200 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_2200. + +config COMEDI_ADDI_APCI_3001 + tristate "ADDI-DATA APCI_3001 support" + select COMEDI_FC + default N + ---help--- + Enable support for ADDI-DATA APCI_3001 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_3001. + +config COMEDI_ADDI_APCI_3120 + tristate "ADDI-DATA APCI_3520 support" + select COMEDI_FC + default N + ---help--- + Enable support for ADDI-DATA APCI_3520 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_3120. + +config COMEDI_ADDI_APCI_3501 + tristate "ADDI-DATA APCI_3501 support" + default N + ---help--- + Enable support for ADDI-DATA APCI_3501 cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_3501. + +config COMEDI_ADDI_APCI_3XXX + tristate "ADDI-DATA APCI_3xxx support" + default N + ---help--- + Enable support for ADDI-DATA APCI_3xxx cards + + To compile this driver as a module, choose M here: the module will be + called addi_apci_3xxx. + +config COMEDI_ADL_PCI6208 + tristate "ADLink PCI-6208A support" + default N + ---help--- + Enable support for ADLink PCI-6208A cards + + To compile this driver as a module, choose M here: the module will be + called adl_pci6208. + +config COMEDI_ADL_PCI7230 + tristate "ADLink PCI-7230 digital io board support" + default N + ---help--- + Enable support for ADlink PCI-7230 digital io board support + + To compile this driver as a module, choose M here: the module will be + called adl_pci7230. + +config COMEDI_ADL_PCI7296 + tristate "ADLink PCI-7296 96 ch. digital io board support" + default N + ---help--- + Enable support for ADlink PCI-7296 96 ch. digital io board support + + To compile this driver as a module, choose M here: the module will be + called adl_pci7296. + +config COMEDI_ADL_PCI7432 + tristate "ADLink PCI-7432 64 ch. isolated digital io board support" + default N + ---help--- + Enable support for ADlink PCI-7432 64 ch. isolated digital io board + + To compile this driver as a module, choose M here: the module will be + called adl_pci7432. + +config COMEDI_ADL_PCI8164 + tristate "ADLink PCI-8164 4 Axes Motion Control board support" + default N + ---help--- + Enable support for ADlink PCI-8164 4 Axes Motion Control board + + To compile this driver as a module, choose M here: the module will be + called adl_pci8164. + +config COMEDI_ADL_PCI9111 + tristate "ADLink PCI-9111HR support" + select COMEDI_FC + default N + ---help--- + Enable support for ADlink PCI9111 cards + + To compile this driver as a module, choose M here: the module will be + called adl_pci9111. + +config COMEDI_ADL_PCI9118 + tristate "ADLink PCI-9118DG, PCI-9118HG, PCI-9118HR support" + select COMEDI_FC + default N + ---help--- + Enable support for ADlink PCI-9118DG, PCI-9118HG, PCI-9118HR cards + + To compile this driver as a module, choose M here: the module will be + called adl_pci9118. + +config COMEDI_ADV_PCI1710 + tristate "Advantech PCI-171x, PCI-1720 and PCI-1731 support" + default N + ---help--- + Enable support for Advantech PCI-1710, PCI-1710HG, PCI-1711, + PCI-1713, PCI-1720 and PCI-1731 + + To compile this driver as a module, choose M here: the module will be + called adv_pci1710. + +config COMEDI_ADV_PCI1723 + tristate "Advantech PCI-1723 support" + default N + ---help--- + Enable support for Advantech PCI-1723 cards + + To compile this driver as a module, choose M here: the module will be + called adv_pci1723. + +config COMEDI_ADV_PCI_DIO + tristate "Advantech PCI DIO card support" + default N + ---help--- + Enable support for Advantech PCI DIO cards + PCI-1730, PCI-1733, PCI-1734, PCI-1736UP, PCI-1750, PCI-1751, + PCI-1752, PCI-1753/E, PCI-1754, PCI-1756 and PCI-1762 + + To compile this driver as a module, choose M here: the module will be + called adv_pci_dio. + +config COMEDI_AMPLC_DIO200 + tristate "Amplicon PC272E and PCI272 DIO board support" + default N + ---help--- + Enable support for Amplicon PC272E and PCI272 DIO boards + + To compile this driver as a module, choose M here: the module will be + called amplc_dio200. + +config COMEDI_AMPLC_PC236 + tristate "Amplicon PC36AT and PCI236 DIO board support" + default N + ---help--- + Enable support for Amplicon PC36AT and PCI236 DIO boards + + To compile this driver as a module, choose M here: the module will be + called amplc_pc236. + +config COMEDI_AMPLC_PC263 + tristate "Amplicon PC263 and PCI263 relay board support" + default N + ---help--- + Enable support for Amplicon PC263 and PCI263 relay boards + + To compile this driver as a module, choose M here: the module will be + called amplc_pc263. + +config COMEDI_AMPLC_PCI224 + tristate "Amplicon PCI224 and PCI234 support" + select COMEDI_FC + default N + ---help--- + Enable support for Amplicon PCI224 and PCI234 AO boards + + To compile this driver as a module, choose M here: the module will be + called amplc_pci224. + +config COMEDI_AMPLC_PCI230 + tristate "Amplicon PCI230 and PCI260 support" + default N + ---help--- + Enable support for Amplicon PCI230 and PCI260 Multifunction I/O + boards + + To compile this driver as a module, choose M here: the module will be + called amplc_pci230. + +config COMEDI_CONTEC_PCI_DIO + tristate "Contec PIO1616L digital I/O board support" + default N + ---help--- + Enable support for the Contec PIO1616L digital I/O board + + To compile this driver as a module, choose M here: the module will be + called contec_pci_dio. + +config COMEDI_DT3000 + tristate "Data Translation DT3000 series support" + default N + ---help--- + Enable support for Data Translation DT3000 series + DT3001, DT3001-PGL, DT3002, DT3003, DT3003-PGL, DT3004, DT3005 and + DT3004-200 + + To compile this driver as a module, choose M here: the module will be + called dt3000. + +config COMEDI_UNIOXX5 + tristate "Fastwel UNIOxx-5 analog and digital io board support" + default N + ---help--- + Enable support for Fastwel UNIOxx-5 (analog and digital i/o) boards + + To compile this driver as a module, choose M here: the module will be + called unioxx5. + +config COMEDI_GSC_HPDI + tristate "General Standards PCI-HPDI32 / PMC-HPDI32 support" + select COMEDI_FC + default N + ---help--- + Enable support for General Standards Corporation high speed parallel + digital interface rs485 boards PCI-HPDI32 and PMC-HPDI32. + Only receive mode works, transmit not supported. + + To compile this driver as a module, choose M here: the module will be + called gsc_hpdi. + +config COMEDI_ICP_MULTI + tristate "Inova ICP_MULTI support" + default N + ---help--- + Enable support for Inova ICP_MULTI card + + To compile this driver as a module, choose M here: the module will be + called icp_multi. + +config COMEDI_II_PCI20KC + tristate "Intelligent Instruments PCI-20001C carrier support" + default N + ---help--- + Enable support for Intelligent Instruments PCI-20001C carrier + PCI-20001, PCI-20006 and PCI-20341 + + To compile this driver as a module, choose M here: the module will be + called ii_pci20kc. + +config COMEDI_DAQBOARD2000 + tristate "IOtech DAQboard/2000 support" + default N + ---help--- + Enable support for the IOtech DAQboard/2000 + + To compile this driver as a module, choose M here: the module will be + called daqboard2000. + +config COMEDI_JR3_PCI + tristate "JR3/PCI force sensor board support" + default N + ---help--- + Enable support for JR3/PCI force sensor boards + + To compile this driver as a module, choose M here: the module will be + called jr3_pci. + +config COMEDI_KE_COUNTER + tristate "Kolter-Electronic PCI Counter 1 card support" + default N + ---help--- + Enable support for Kolter-Electronic PCI Counter 1 cards + + To compile this driver as a module, choose M here: the module will be + called ke_counter. + +config COMEDI_CB_PCIDAS64 + tristate "MeasurementComputing PCI-DAS 64xx, 60xx, and 4020 support" + select COMEDI_FC + default N + ---help--- + Enable support for ComputerBoards/MeasurementComputing PCI-DAS 64xx, + 60xx, and 4020 series with the PLX 9080 PCI controller + + To compile this driver as a module, choose M here: the module will be + called cb_pcidas64. + +config COMEDI_CB_PCIDAS + tristate "MeasurementComputing PCI-DAS support" + select COMEDI_FC + default N + ---help--- + Enable support for ComputerBoards/MeasurementComputing PCI-DAS with + AMCC S5933 PCIcontroller: PCI-DAS1602/16, PCI-DAS1602/16jr, + PCI-DAS1602/12, PCI-DAS1200, PCI-DAS1200jr, PCI-DAS1000, PCI-DAS1001 + and PCI_DAS1002. + + To compile this driver as a module, choose M here: the module will be + called cb_pcidas. + +config COMEDI_CB_PCIDDA + tristate "MeasurementComputing PCI-DDA series support" + default N + ---help--- + Enable support for ComputerBoards/MeasurementComputing PCI-DDA + series: PCI-DDA08/12, PCI-DDA04/12, PCI-DDA02/12, PCI-DDA08/16, + PCI-DDA04/16 and PCI-DDA02/16 + + To compile this driver as a module, choose M here: the module will be + called cb_pcidda. + +config COMEDI_CB_PCIDIO + tristate "MeasurementComputing PCI-DIO series support" + default N + ---help--- + Enable support for ComputerBoards/MeasurementComputing PCI-DIO series + PCI-DIO24, PCI-DIO24H and PCI-DIO48H + + To compile this driver as a module, choose M here: the module will be + called cb_pcidio. + +config COMEDI_CB_PCIMDAS + tristate "MeasurementComputing PCIM-DAS1602/16 support" + default N + ---help--- + Enable support for ComputerBoards/MeasurementComputing PCI Migration + series PCIM-DAS1602/16 + + To compile this driver as a module, choose M here: the module will be + called cb_pcimdas. -config COMEDI_PCMCIA_DRIVERS +config COMEDI_CB_PCIMDDA + tristate "MeasurementComputing PCIM-DDA06-16 support" + default N + ---help--- + Enable support for ComputerBoards/MeasurementComputing PCIM-DDA06-16 + + To compile this driver as a module, choose M here: the module will be + called cb_pcimdda. + +config COMEDI_ME4000 + tristate "Meilhaus ME-4000 support" + default N + ---help--- + Enable support for Meilhaus PCI data acquisition cards + ME-4650, ME-4670i, ME-4680, ME-4680i and ME-4680is + + To compile this driver as a module, choose M here: the module will be + called me4000. + +config COMEDI_ME_DAQ + tristate "Meilhaus ME-2000i, ME-2600i, ME-3000vm1 support" + default N + ---help--- + Enable support for Meilhaus PCI data acquisition cards + ME-2000i, ME-2600i and ME-3000vm1 + + To compile this driver as a module, choose M here: the module will be + called me_daq. + +config COMEDI_NI_6527 + tristate "NI 6527 support" + depends on COMEDI_MITE + default N + ---help--- + Enable support for the National Instruments 6527 PCI card + + To compile this driver as a module, choose M here: the module will be + called ni_6527. + +config COMEDI_NI_65XX + tristate "NI 65xx static dio PCI card support" + depends on COMEDI_MITE + default N + ---help--- + Enable support for National Instruments 65xx static dio boards. + Supported devices: National Instruments PCI-6509 (ni_65xx), + PXI-6509, PCI-6510, PCI-6511, PXI-6511, PCI-6512, PXI-6512, PCI-6513, + PXI-6513, PCI-6514, PXI-6514, PCI-6515, PXI-6515, PCI-6516, PCI-6517, + PCI-6518, PCI-6519, PCI-6520, PCI-6521, PXI-6521, PCI-6528, PXI-6528 + + To compile this driver as a module, choose M here: the module will be + called ni_65xx. + +config COMEDI_NI_660X + tristate "NI 660x counter/timer PCI card support" + depends on COMEDI_NI_TIO && COMEDI_NI_COMMON + default N + ---help--- + Enable support for National Instruments PCI-6601 (ni_660x), PCI-6602, + PXI-6602 and PXI-6608. + + To compile this driver as a module, choose M here: the module will be + called ni_660x. + +config COMEDI_NI_670X + tristate "NI 670x PCI card support" + depends on COMEDI_MITE + default N + ---help--- + Enable support for National Instruments PCI-6703 and PCI-6704 + + To compile this driver as a module, choose M here: the module will be + called ni_670x. + +config COMEDI_NI_PCIDIO + tristate "NI PCI-DIO32HS, PCI-DIO96, PCI-6533, PCI-6503 support" + depends on COMEDI_MITE + default N + ---help--- + Enable support for National Instruments PCI-DIO-32HS, PXI-6533, + PCI-DIO-96, PCI-DIO-96B, PXI-6508, PCI-6503, PCI-6503B, PCI-6503X, + PXI-6503, PCI-6533 and PCI-6534 + The DIO-96 appears as four 8255 subdevices. See the 8255 + driver notes for details. + + To compile this driver as a module, choose M here: the module will be + called ni_pcidio. + +config COMEDI_NI_PCIMIO + tristate "NI PCI-MIO-E series and M series support" + depends on COMEDI_NI_TIO && COMEDI_NI_COMMON + default N + ---help--- + Enable support for National Instruments PCI-MIO-E series and M series + (all boards): PCI-MIO-16XE-10, PXI-6030E, PCI-MIO-16E-1, + PCI-MIO-16E-4, PCI-6014, PCI-6040E, PXI-6040E, PCI-6030E, PCI-6031E, + PCI-6032E, PCI-6033E, PCI-6071E, PCI-6023E, PCI-6024E, PCI-6025E, + PXI-6025E, PCI-6034E, PCI-6035E, PCI-6052E, PCI-6110, PCI-6111, + PCI-6220, PCI-6221, PCI-6224, PXI-6224, PCI-6225, PXI-6225, PCI-6229, + PCI-6250, PCI-6251, PCIe-6251, PCI-6254, PCI-6259, PCIe-6259, + PCI-6280, PCI-6281, PXI-6281, PCI-6284, PCI-6289, PCI-6711, PXI-6711, + PCI-6713, PXI-6713, PXI-6071E, PCI-6070E, PXI-6070E, PXI-6052E, + PCI-6036E, PCI-6731, PCI-6733, PXI-6733, PCI-6143, PXI-6143 + + To compile this driver as a module, choose M here: the module will be + called ni_pcimio. + +config COMEDI_RTD520 + tristate "Real Time Devices PCI4520/DM7520 support" + default N + ---help--- + Enable support for Real Time Devices PCI4520/DM7520 + + To compile this driver as a module, choose M here: the module will be + called rtd520. + +config COMEDI_S526 + tristate "Sensoray s526 support" + default N + ---help--- + Enable support for Sensoray s526 + + To compile this driver as a module, choose M here: the module will be + called s526. + +config COMEDI_S626 + tristate "Sensoray 626 support" + select COMEDI_FC + default N + ---help--- + Enable support for Sensoray 626 + + To compile this driver as a module, choose M here: the module will be + called s626. + +config COMEDI_SSV_DNP + tristate "SSV Embedded Systems DIL/Net-PC support" + default N + ---help--- + Enable support for SSV Embedded Systems DIL/Net-PC + + To compile this driver as a module, choose M here: the module will be + called ssv_dnp. + +endif # COMEDI_PCI_DRIVERS + +menuconfig COMEDI_PCMCIA_DRIVERS tristate "Comedi PCMCIA drivers" depends on COMEDI && PCMCIA && PCCARD default N ---help--- - Enable lots of comedi PCMCIA and PCCARD drivers to be built + Enable comedi PCMCIA and PCCARD drivers to be built + + Note that the answer to this question won't directly affect the + kernel: saying N will just cause the configurator to skip all + the questions about PCMCIA comedi drivers. + +if COMEDI_PCMCIA_DRIVERS && PCMCIA + +config COMEDI_CB_DAS16_CS + tristate "CB DAS16 series PCMCIA support" + default N + ---help--- + Enable support for the ComputerBoards/MeasurementComputing PCMCIA + cards DAS16/16, PCM-DAS16D/12 and PCM-DAS16s/16 + + To compile this driver as a module, choose M here: the module will be + called cb_das16_cs. + +config COMEDI_DAS08_CS + tristate "CB DAS08 PCMCIA support" + select COMEDI_DAS08 + default N + ---help--- + Enable support for the ComputerBoards/MeasurementComputing DAS-08 + PCMCIA card + + To compile this driver as a module, choose M here: the module will be + called das08_cs. -config COMEDI_USB_DRIVERS +config COMEDI_NI_DAQ_700_CS + tristate "NI DAQCard-700 PCMCIA support" + depends on COMEDI_NI_COMMON + default N + ---help--- + Enable support for the National Instruments PCMCIA DAQCard-700 DIO + + To compile this driver as a module, choose M here: the module will be + called ni_daq_700. + +config COMEDI_NI_DAQ_DIO24_CS + tristate "NI DAQ-Card DIO-24 PCMCIA support" + depends on COMEDI_NI_COMMON + default N + ---help--- + Enable support for the National Instruments PCMCIA DAQ-Card DIO-24 + + To compile this driver as a module, choose M here: the module will be + called ni_daq_dio24. + +config COMEDI_NI_LABPC_CS + tristate "NI DAQCard-1200 PCMCIA support" + depends on COMEDI_NI_LABPC + default N + ---help--- + Enable support for the National Instruments PCMCIA DAQCard-1200 + + To compile this driver as a module, choose M here: the module will be + called ni_labpc_cs. + +config COMEDI_NI_MIO_CS + tristate "NI DAQCard E series PCMCIA support" + depends on COMEDI_NI_TIO && COMEDI_NI_COMMON + default N + select COMEDI_FC + ---help--- + Enable support for the National Instruments PCMCIA DAQCard E series + DAQCard-ai-16xe-50, DAQCard-ai-16e-4, DAQCard-6062E, DAQCard-6024E + and DAQCard-6036E + + To compile this driver as a module, choose M here: the module will be + called ni_mio_cs. + +config COMEDI_QUATECH_DAQP_CS + tristate "Quatech DAQP PCMCIA data capture card support" + default N + ---help--- + Enable support for the Quatech DAQP PCMCIA data capture cards + DAQP-208 and DAQP-308 + + To compile this driver as a module, choose M here: the module will be + called quatech_daqp_cs. + +endif # COMEDI_PCMCIA_DRIVERS + +menuconfig COMEDI_USB_DRIVERS tristate "Comedi USB drivers" depends on COMEDI && USB default N ---help--- - Enable lots of comedi USB drivers to be built + Enable comedi USB drivers to be built + + Note that the answer to this question won't directly affect the + kernel: saying N will just cause the configurator to skip all + the questions about USB comedi drivers. + +if COMEDI_USB_DRIVERS && USB + +config COMEDI_DT9812 + tristate "DataTranslation DT9812 USB module support" + default N + ---help--- + Enable support for the Data Translation DT9812 USB module + + To compile this driver as a module, choose M here: the module will be + called dt9812. + +config COMEDI_USBDUX + tristate "ITL USBDUX support" + default N + ---help--- + Enable support for the University of Stirling USB DAQ and INCITE + Technology Limited driver + + To compile this driver as a module, choose M here: the module will be + called usbdux. + +config COMEDI_USBDUXFAST + tristate "ITL USB-DUXfast support" + select COMEDI_FC + default N + ---help--- + Enable support for the University of Stirling USB-DUXfast and INCITE + Technology Limited driver + + To compile this driver as a module, choose M here: the module will be + called usbduxfast. + +config COMEDI_VMK80XX + tristate "Velleman VM110/VM140 USB Board support" + default N + ---help--- + Build the Velleman USB Board Low-Level Driver supporting the + K8055/K8061 aka VM110/VM140 devices + + To compile this driver as a module, choose M here: the module will be + called vmk80xx. + +endif # COMEDI_USB_DRIVERS + +menuconfig COMEDI_NI_COMMON + tristate "Comedi National Instruments card support" + depends on COMEDI + default N + ---help--- + Enable comedi support for National Instruments cards. + Modules in this section are used by many comedi NI drivers. + + Note that the answer to this question won't directly affect the + kernel: saying N will just cause the configurator to skip all + the questions about National Instruments cards. + +if COMEDI_NI_COMMON + +config COMEDI_MITE + tristate "NI Mite PCI interface chip support" + depends on PCI + default N + ---help--- + Enable support for National Instruments Mite PCI interface chip + + To compile this driver as a module, choose M here: the module will be + called mite. + +config COMEDI_NI_TIO + tristate "NI general purpose counter support" + depends on COMEDI_MITE + default N + ---help--- + Enable support for National Instruments general purpose counters. + This module is not used directly by end-users. Rather, it + is used by other drivers (for example ni_660x and ni_pcimio) + to provide support for NI's general purpose counters. + + To compile this driver as a modules, choose M here: two modules will + be build: ni_tio and ni_tiocmd. + +config COMEDI_NI_LABPC + tristate "NI Lab-PC and compatibles ISA and PCI support" + select COMEDI_FC + default N + ---help--- + Enable support for National Instruments Lab-PC and compatibles + Lab-PC-1200, Lab-PC-1200AI, Lab-PC+ and PCI-1200. + Kernel-level ISA plug-and-play support for the lab-pc-1200 boards has + not yet been added to the driver. + + To compile this driver as a module, choose M here: the module will be + called ni_labpc. + +endif # COMEDI_NI_COMMON + +config COMEDI_FC + tristate "Comedi shared functions for low-level driver support" + default N + ---help--- + Enable support for shared functions for low-level drivers. + This module is not used directly by end-users. Rather, it + is used by many other comedi drivers. + + To compile this driver as a module, choose M here: the module will be + called comedi_fc. diff --git a/drivers/staging/comedi/drivers/Makefile b/drivers/staging/comedi/drivers/Makefile index be99514..bf1b29f 100644 --- a/drivers/staging/comedi/drivers/Makefile +++ b/drivers/staging/comedi/drivers/Makefile @@ -2,133 +2,136 @@ # # Comedi "helper" modules -obj-$(CONFIG_COMEDI) += comedi_fc.o -obj-$(CONFIG_COMEDI) += comedi_bond.o -obj-$(CONFIG_COMEDI) += comedi_test.o -obj-$(CONFIG_COMEDI) += comedi_parport.o obj-$(CONFIG_COMEDI) += pcm_common.o +# Comedi misc drivers +obj-$(CONFIG_COMEDI_BOND) += comedi_bond.o +obj-$(CONFIG_COMEDI_TEST) += comedi_test.o +obj-$(CONFIG_COMEDI_PARPORT) += comedi_parport.o +obj-$(CONFIG_COMEDI_SERIAL2002) += serial2002.o +obj-$(CONFIG_COMEDI_SKEL) += skel.o + +# Comedi ISA drivers +obj-$(CONFIG_COMEDI_8255) += 8255.o +obj-$(CONFIG_COMEDI_ACL7225B) += acl7225b.o +obj-$(CONFIG_COMEDI_PCL711) += pcl711.o +obj-$(CONFIG_COMEDI_PCL724) += pcl724.o +obj-$(CONFIG_COMEDI_PCL725) += pcl725.o +obj-$(CONFIG_COMEDI_PCL726) += pcl726.o +obj-$(CONFIG_COMEDI_PCL730) += pcl730.o +obj-$(CONFIG_COMEDI_PCL812) += pcl812.o +obj-$(CONFIG_COMEDI_PCL816) += pcl816.o +obj-$(CONFIG_COMEDI_PCL818) += pcl818.o +obj-$(CONFIG_COMEDI_PCM3724) += pcm3724.o +obj-$(CONFIG_COMEDI_PCM3730) += pcm3730.o +obj-$(CONFIG_COMEDI_RTI800) += rti800.o +obj-$(CONFIG_COMEDI_RTI802) += rti802.o +obj-$(CONFIG_COMEDI_DAS08) += das08.o +obj-$(CONFIG_COMEDI_DAS16M1) += das16m1.o +obj-$(CONFIG_COMEDI_DAS16) += das16.o +obj-$(CONFIG_COMEDI_DAS800) += das800.o +obj-$(CONFIG_COMEDI_DAS1800) += das1800.o +obj-$(CONFIG_COMEDI_DAS6402) += das6402.o +obj-$(CONFIG_COMEDI_DT2801) += dt2801.o +obj-$(CONFIG_COMEDI_DT2811) += dt2811.o +obj-$(CONFIG_COMEDI_DT2814) += dt2814.o +obj-$(CONFIG_COMEDI_DT2815) += dt2815.o +obj-$(CONFIG_COMEDI_DT2817) += dt2817.o +obj-$(CONFIG_COMEDI_DT282X) += dt282x.o +obj-$(CONFIG_COMEDI_DMM32AT) += dmm32at.o +obj-$(CONFIG_COMEDI_FL512) += fl512.o +obj-$(CONFIG_COMEDI_AIO_AIO12_8) += aio_aio12_8.o +obj-$(CONFIG_COMEDI_AIO_IIRO_16) += aio_iiro_16.o +obj-$(CONFIG_COMEDI_C6XDIGIO) += c6xdigio.o +obj-$(CONFIG_COMEDI_MPC624) += mpc624.o +obj-$(CONFIG_COMEDI_ADQ12B) += adq12b.o +obj-$(CONFIG_COMEDI_NI_AT_A2150) += ni_at_a2150.o +obj-$(CONFIG_COMEDI_NI_AT_AO) += ni_at_ao.o +obj-$(CONFIG_COMEDI_NI_ATMIO) += ni_atmio.o +obj-$(CONFIG_COMEDI_NI_ATMIO16D) += ni_atmio16d.o +obj-$(CONFIG_COMEDI_PCMAD) += pcmad.o +obj-$(CONFIG_COMEDI_PCMDA12) += pcmda12.o +obj-$(CONFIG_COMEDI_PCMMIO) += pcmmio.o +obj-$(CONFIG_COMEDI_PCMUIO) += pcmuio.o +obj-$(CONFIG_COMEDI_MULTIQ3) += multiq3.o +obj-$(CONFIG_COMEDI_POC) += poc.o + # Comedi PCI drivers -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += 8255.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += acl7225b.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_035.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_1032.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_1500.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_1516.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_1564.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_16xx.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_2016.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_2032.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_2200.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_3001.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_3120.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_3501.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += addi_apci_3xxx.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci6208.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci7230.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci7296.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci7432.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci8164.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci9111.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adl_pci9118.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adq12b.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adv_pci1710.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adv_pci1723.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += adv_pci_dio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += aio_aio12_8.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += aio_iiro_16.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += amplc_dio200.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += amplc_pc236.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += amplc_pc263.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += amplc_pci224.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += amplc_pci230.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += c6xdigio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += cb_pcidas64.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += cb_pcidas.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += cb_pcidda.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += cb_pcidio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += cb_pcimdas.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += cb_pcimdda.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += comedi_bond.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += comedi_parport.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += comedi_test.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += contec_pci_dio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += daqboard2000.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += das08.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += das16m1.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += das16.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += das1800.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += das6402.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += das800.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += dmm32at.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += dt2801.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += dt2811.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += dt2814.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += dt2815.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += dt2817.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += dt282x.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += dt3000.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += fl512.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += gsc_hpdi.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += icp_multi.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ii_pci20kc.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += jr3_pci.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ke_counter.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += me4000.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += me_daq.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += mite.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += mpc624.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += multiq3.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_6527.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_65xx.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_660x.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_670x.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_at_a2150.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_at_ao.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_atmio16d.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_atmio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_labpc.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_pcidio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_pcimio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_tiocmd.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ni_tio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcl711.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcl724.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcl725.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcl726.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcl730.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcl812.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcl816.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcl818.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcm3724.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcm3730.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcmad.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcmda12.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcmmio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += pcmuio.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += poc.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += rtd520.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += rti800.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += rti802.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += s526.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += s626.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += serial2002.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += skel.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += ssv_dnp.o -obj-$(CONFIG_COMEDI_PCI_DRIVERS) += unioxx5.o +obj-$(CONFIG_COMEDI_ADDI_APCI_035) += addi_apci_035.o +obj-$(CONFIG_COMEDI_ADDI_APCI_1032) += addi_apci_1032.o +obj-$(CONFIG_COMEDI_ADDI_APCI_1500) += addi_apci_1500.o +obj-$(CONFIG_COMEDI_ADDI_APCI_1516) += addi_apci_1516.o +obj-$(CONFIG_COMEDI_ADDI_APCI_1564) += addi_apci_1564.o +obj-$(CONFIG_COMEDI_ADDI_APCI_16XX) += addi_apci_16xx.o +obj-$(CONFIG_COMEDI_ADDI_APCI_2016) += addi_apci_2016.o +obj-$(CONFIG_COMEDI_ADDI_APCI_2032) += addi_apci_2032.o +obj-$(CONFIG_COMEDI_ADDI_APCI_2200) += addi_apci_2200.o +obj-$(CONFIG_COMEDI_ADDI_APCI_3001) += addi_apci_3001.o +obj-$(CONFIG_COMEDI_ADDI_APCI_3120) += addi_apci_3120.o +obj-$(CONFIG_COMEDI_ADDI_APCI_3501) += addi_apci_3501.o +obj-$(CONFIG_COMEDI_ADDI_APCI_3XXX) += addi_apci_3xxx.o +obj-$(CONFIG_COMEDI_ADL_PCI6208) += adl_pci6208.o +obj-$(CONFIG_COMEDI_ADL_PCI7230) += adl_pci7230.o +obj-$(CONFIG_COMEDI_ADL_PCI7296) += adl_pci7296.o +obj-$(CONFIG_COMEDI_ADL_PCI7432) += adl_pci7432.o +obj-$(CONFIG_COMEDI_ADL_PCI8164) += adl_pci8164.o +obj-$(CONFIG_COMEDI_ADL_PCI9111) += adl_pci9111.o +obj-$(CONFIG_COMEDI_ADL_PCI9118) += adl_pci9118.o +obj-$(CONFIG_COMEDI_ADV_PCI1710) += adv_pci1710.o +obj-$(CONFIG_COMEDI_ADV_PCI1723) += adv_pci1723.o +obj-$(CONFIG_COMEDI_ADV_PCI_DIO) += adv_pci_dio.o +obj-$(CONFIG_COMEDI_AMPLC_DIO200) += amplc_dio200.o +obj-$(CONFIG_COMEDI_AMPLC_PC236) += amplc_pc236.o +obj-$(CONFIG_COMEDI_AMPLC_PC263) += amplc_pc263.o +obj-$(CONFIG_COMEDI_AMPLC_PCI224) += amplc_pci224.o +obj-$(CONFIG_COMEDI_AMPLC_PCI230) += amplc_pci230.o +obj-$(CONFIG_COMEDI_CONTEC_PCI_DIO) += contec_pci_dio.o +obj-$(CONFIG_COMEDI_DT3000) += dt3000.o +obj-$(CONFIG_COMEDI_UNIOXX5) += unioxx5.o +obj-$(CONFIG_COMEDI_GSC_HPDI) += gsc_hpdi.o +obj-$(CONFIG_COMEDI_ICP_MULTI) += icp_multi.o +obj-$(CONFIG_COMEDI_II_PCI20KC) += ii_pci20kc.o +obj-$(CONFIG_COMEDI_DAQBOARD2000) += daqboard2000.o +obj-$(CONFIG_COMEDI_JR3_PCI) += jr3_pci.o +obj-$(CONFIG_COMEDI_KE_COUNTER) += ke_counter.o +obj-$(CONFIG_COMEDI_CB_PCIDAS64) += cb_pcidas64.o +obj-$(CONFIG_COMEDI_CB_PCIDAS) += cb_pcidas.o +obj-$(CONFIG_COMEDI_CB_PCIDDA) += cb_pcidda.o +obj-$(CONFIG_COMEDI_CB_PCIDIO) += cb_pcidio.o +obj-$(CONFIG_COMEDI_CB_PCIMDAS) += cb_pcimdas.o +obj-$(CONFIG_COMEDI_CB_PCIMDDA) += cb_pcimdda.o +obj-$(CONFIG_COMEDI_ME4000) += me4000.o +obj-$(CONFIG_COMEDI_ME_DAQ) += me_daq.o +obj-$(CONFIG_COMEDI_NI_6527) += ni_6527.o +obj-$(CONFIG_COMEDI_NI_65XX) += ni_65xx.o +obj-$(CONFIG_COMEDI_NI_660X) += ni_660x.o +obj-$(CONFIG_COMEDI_NI_670X) += ni_670x.o +obj-$(CONFIG_COMEDI_NI_PCIDIO) += ni_pcidio.o +obj-$(CONFIG_COMEDI_NI_PCIMIO) += ni_pcimio.o +obj-$(CONFIG_COMEDI_RTD520) += rtd520.o +obj-$(CONFIG_COMEDI_S526) += s526.o +obj-$(CONFIG_COMEDI_S626) += s626.o +obj-$(CONFIG_COMEDI_SSV_DNP) += ssv_dnp.o # Comedi PCMCIA drivers -obj-$(CONFIG_COMEDI_PCMCIA_DRIVERS) += cb_das16_cs.o -obj-$(CONFIG_COMEDI_PCMCIA_DRIVERS) += das08_cs.o -obj-$(CONFIG_COMEDI_PCMCIA_DRIVERS) += ni_daq_700.o -obj-$(CONFIG_COMEDI_PCMCIA_DRIVERS) += ni_daq_dio24.o -obj-$(CONFIG_COMEDI_PCMCIA_DRIVERS) += ni_labpc_cs.o -obj-$(CONFIG_COMEDI_PCMCIA_DRIVERS) += ni_mio_cs.o -obj-$(CONFIG_COMEDI_PCMCIA_DRIVERS) += quatech_daqp_cs.o +obj-$(CONFIG_COMEDI_CB_DAS16_CS) += cb_das16_cs.o +obj-$(CONFIG_COMEDI_DAS08_CS) += das08_cs.o +obj-$(CONFIG_COMEDI_NI_DAQ_700_CS) += ni_daq_700.o +obj-$(CONFIG_COMEDI_NI_DAQ_DIO24_CS) += ni_daq_dio24.o +obj-$(CONFIG_COMEDI_NI_LABPC_CS) += ni_labpc_cs.o +obj-$(CONFIG_COMEDI_NI_MIO_CS) += ni_mio_cs.o +obj-$(CONFIG_COMEDI_QUATECH_DAQP_CS) += quatech_daqp_cs.o # Comedi USB drivers -obj-$(CONFIG_COMEDI_USB_DRIVERS) += dt9812.o -obj-$(CONFIG_COMEDI_USB_DRIVERS) += usbdux.o -obj-$(CONFIG_COMEDI_USB_DRIVERS) += usbduxfast.o -obj-$(CONFIG_COMEDI_USB_DRIVERS) += vmk80xx.o +obj-$(CONFIG_COMEDI_DT9812) += dt9812.o +obj-$(CONFIG_COMEDI_USBDUX) += usbdux.o +obj-$(CONFIG_COMEDI_USBDUXFAST) += usbduxfast.o +obj-$(CONFIG_COMEDI_VMK80XX) += vmk80xx.o + +# Comedi NI drivers +obj-$(CONFIG_COMEDI_MITE) += mite.o +obj-$(CONFIG_COMEDI_NI_TIO) += ni_tio.o +obj-$(CONFIG_COMEDI_NI_TIO) += ni_tiocmd.o +obj-$(CONFIG_COMEDI_NI_LABPC) += ni_labpc.o +obj-$(CONFIG_COMEDI_FC) += comedi_fc.o diff --git a/drivers/staging/comedi/kcomedilib/Makefile b/drivers/staging/comedi/kcomedilib/Makefile index 5951f86..18ee99b 100644 --- a/drivers/staging/comedi/kcomedilib/Makefile +++ b/drivers/staging/comedi/kcomedilib/Makefile @@ -1,3 +1,3 @@ -obj-$(CONFIG_COMEDI) += kcomedilib.o +obj-$(CONFIG_COMEDI_KCOMEDILIB) += kcomedilib.o kcomedilib-objs := kcomedilib_main.o -- cgit v0.10.2 From 77f047e25716cdefae7273d4e55f2cf74144c553 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 18 May 2010 14:29:33 -0700 Subject: Staging: comedi: fix up build error from last Kconfig changes We need the 8255 module to be present for some PCI comedi modules. So for now, just build the thing. We need some better Kconfig rules to figure this out properly. Cc: Alexander Kurz Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/Makefile b/drivers/staging/comedi/drivers/Makefile index bf1b29f..5ccf246 100644 --- a/drivers/staging/comedi/drivers/Makefile +++ b/drivers/staging/comedi/drivers/Makefile @@ -57,6 +57,7 @@ obj-$(CONFIG_COMEDI_MULTIQ3) += multiq3.o obj-$(CONFIG_COMEDI_POC) += poc.o # Comedi PCI drivers +obj-$(CONFIG_COMEDI_PCI_DRIVERS) += 8255.o obj-$(CONFIG_COMEDI_ADDI_APCI_035) += addi_apci_035.o obj-$(CONFIG_COMEDI_ADDI_APCI_1032) += addi_apci_1032.o obj-$(CONFIG_COMEDI_ADDI_APCI_1500) += addi_apci_1500.o -- cgit v0.10.2 From ba2450b89bd9dce7d8926d919a67ed515be3e05f Mon Sep 17 00:00:00 2001 From: Alexander Kurz Date: Sat, 15 May 2010 16:09:01 +0400 Subject: Staging: comedi: Kconfig dependancy fixes There are three minor changes I would like to do on my last patch: * Comedi is formally not dependant on any hardware, e.g. it is possible to use comedi_test without (PCI || PCMCIA || PCCARD || USB || ISA) * comedi_parport is not dependant on PARPORT_PC. * indirect ni_mio_cs (16-bit PCMCIA) dependancy on mite PCI-chip may confuse users, thus changing COMEDI_NI_TIO depends on COMEDI_MITE to select COMEDI_MITE. Signed-off-by: Alexander Kurz Cc: Ian Abbott Cc: Frank Mori Hess Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/Kconfig b/drivers/staging/comedi/Kconfig index 283ea0c..8ce307e 100644 --- a/drivers/staging/comedi/Kconfig +++ b/drivers/staging/comedi/Kconfig @@ -1,7 +1,7 @@ config COMEDI tristate "Data acquisition support (comedi)" default N - depends on m && (PCI || PCMCIA || PCCARD || USB) + depends on m ---help--- Enable support a wide range of data acquisition devices for Linux. @@ -57,7 +57,6 @@ config COMEDI_TEST config COMEDI_PARPORT tristate "Parallel port support" - depends on PARPORT_PC default N ---help--- Enable support for the standard parallel port. @@ -1266,7 +1265,7 @@ config COMEDI_MITE config COMEDI_NI_TIO tristate "NI general purpose counter support" - depends on COMEDI_MITE + select COMEDI_MITE default N ---help--- Enable support for National Instruments general purpose counters. -- cgit v0.10.2 From 06f1962ab475bdee3ae17afbaecee5b23f3cd5f0 Mon Sep 17 00:00:00 2001 From: Barry Song Date: Sun, 16 May 2010 21:11:37 +0100 Subject: Staging: iio: adis16220 vibration sensor driver Signed-off-by: Barry Song Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/accel/Kconfig b/drivers/staging/iio/accel/Kconfig index 8f3f70f..b4e57d1 100644 --- a/drivers/staging/iio/accel/Kconfig +++ b/drivers/staging/iio/accel/Kconfig @@ -12,6 +12,13 @@ config ADIS16209 Say yes here to build support for Analog Devices adis16209 dual-axis digital inclinometer and accelerometer. +config ADIS16220 + tristate "Analog Devices ADIS16220 Programmable Digital Vibration Sensor driver" + depends on SPI + help + Say yes here to build support for Analog Devices adis16220 programmable + digital vibration sensor. + config ADIS16240 tristate "Analog Devices ADIS16240 Programmable Impact Sensor and Recorder" depends on SPI diff --git a/drivers/staging/iio/accel/Makefile b/drivers/staging/iio/accel/Makefile index 0e6762c..c34b136 100644 --- a/drivers/staging/iio/accel/Makefile +++ b/drivers/staging/iio/accel/Makefile @@ -5,6 +5,9 @@ adis16209-y := adis16209_core.o adis16209-$(CONFIG_IIO_RING_BUFFER) += adis16209_ring.o adis16209_trigger.o obj-$(CONFIG_ADIS16209) += adis16209.o +adis16220-y := adis16220_core.o +obj-$(CONFIG_ADIS16220) += adis16220.o + adis16240-y := adis16240_core.o adis16240-$(CONFIG_IIO_RING_BUFFER) += adis16240_ring.o adis16240_trigger.o obj-$(CONFIG_ADIS16240) += adis16240.o diff --git a/drivers/staging/iio/accel/accel.h b/drivers/staging/iio/accel/accel.h index 059209c..1b6e37f 100644 --- a/drivers/staging/iio/accel/accel.h +++ b/drivers/staging/iio/accel/accel.h @@ -2,6 +2,9 @@ #include "../sysfs.h" /* Accelerometer types of attribute */ +#define IIO_DEV_ATTR_ACCEL_OFFSET(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(accel_offset, _mode, _show, _store, _addr) + #define IIO_DEV_ATTR_ACCEL_X_OFFSET(_mode, _show, _store, _addr) \ IIO_DEVICE_ATTR(accel_x_offset, _mode, _show, _store, _addr) @@ -20,6 +23,9 @@ #define IIO_DEV_ATTR_ACCEL_Z_GAIN(_mode, _show, _store, _addr) \ IIO_DEVICE_ATTR(accel_z_gain, _mode, _show, _store, _addr) +#define IIO_DEV_ATTR_ACCEL(_show, _addr) \ + IIO_DEVICE_ATTR(accel_raw, S_IRUGO, _show, NULL, _addr) + #define IIO_DEV_ATTR_ACCEL_X(_show, _addr) \ IIO_DEVICE_ATTR(accel_x_raw, S_IRUGO, _show, NULL, _addr) diff --git a/drivers/staging/iio/accel/adis16220.h b/drivers/staging/iio/accel/adis16220.h new file mode 100644 index 0000000..6b49f70 --- /dev/null +++ b/drivers/staging/iio/accel/adis16220.h @@ -0,0 +1,150 @@ +#ifndef SPI_ADIS16220_H_ +#define SPI_ADIS16220_H_ + +#define ADIS16220_STARTUP_DELAY 220 /* ms */ + +#define ADIS16220_READ_REG(a) a +#define ADIS16220_WRITE_REG(a) ((a) | 0x80) + +/* Flash memory write count */ +#define ADIS16220_FLASH_CNT 0x00 +/* Control, acceleration offset adjustment control */ +#define ADIS16220_ACCL_NULL 0x02 +/* Control, AIN1 offset adjustment control */ +#define ADIS16220_AIN1_NULL 0x04 +/* Control, AIN2 offset adjustment control */ +#define ADIS16220_AIN2_NULL 0x06 +/* Output, power supply during capture */ +#define ADIS16220_CAPT_SUPPLY 0x0A +/* Output, temperature during capture */ +#define ADIS16220_CAPT_TEMP 0x0C +/* Output, peak acceleration during capture */ +#define ADIS16220_CAPT_PEAKA 0x0E +/* Output, peak AIN1 level during capture */ +#define ADIS16220_CAPT_PEAK1 0x10 +/* Output, peak AIN2 level during capture */ +#define ADIS16220_CAPT_PEAK2 0x12 +/* Output, capture buffer for acceleration */ +#define ADIS16220_CAPT_BUFA 0x14 +/* Output, capture buffer for AIN1 */ +#define ADIS16220_CAPT_BUF1 0x16 +/* Output, capture buffer for AIN2 */ +#define ADIS16220_CAPT_BUF2 0x18 +/* Control, capture buffer address pointer */ +#define ADIS16220_CAPT_PNTR 0x1A +/* Control, capture control register */ +#define ADIS16220_CAPT_CTRL 0x1C +/* Control, capture period (automatic mode) */ +#define ADIS16220_CAPT_PRD 0x1E +/* Control, Alarm A, acceleration peak threshold */ +#define ADIS16220_ALM_MAGA 0x20 +/* Control, Alarm 1, AIN1 peak threshold */ +#define ADIS16220_ALM_MAG1 0x22 +/* Control, Alarm 2, AIN2 peak threshold */ +#define ADIS16220_ALM_MAG2 0x24 +/* Control, Alarm S, peak threshold */ +#define ADIS16220_ALM_MAGS 0x26 +/* Control, alarm configuration register */ +#define ADIS16220_ALM_CTRL 0x28 +/* Control, general I/O configuration */ +#define ADIS16220_GPIO_CTRL 0x32 +/* Control, self-test control, AIN configuration */ +#define ADIS16220_MSC_CTRL 0x34 +/* Control, digital I/O configuration */ +#define ADIS16220_DIO_CTRL 0x36 +/* Control, filter configuration */ +#define ADIS16220_AVG_CNT 0x38 +/* Status, system status */ +#define ADIS16220_DIAG_STAT 0x3C +/* Control, system commands */ +#define ADIS16220_GLOB_CMD 0x3E +/* Status, self-test response */ +#define ADIS16220_ST_DELTA 0x40 +/* Lot Identification Code 1 */ +#define ADIS16220_LOT_ID1 0x52 +/* Lot Identification Code 2 */ +#define ADIS16220_LOT_ID2 0x54 +/* Product identifier; convert to decimal = 16220 */ +#define ADIS16220_PROD_ID 0x56 +/* Serial number */ +#define ADIS16220_SERIAL_NUM 0x58 + +#define ADIS16220_CAPTURE_SIZE 2048 + +/* MSC_CTRL */ +#define ADIS16220_MSC_CTRL_SELF_TEST_EN (1 << 8) +#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN1 (1 << 1) +#define ADIS16220_MSC_CTRL_POWER_SUP_COM_AIN2 (1 << 0) + +/* DIO_CTRL */ +#define ADIS16220_MSC_CTRL_DIO2_BUSY_IND (3<<4) +#define ADIS16220_MSC_CTRL_DIO1_BUSY_IND (3<<2) +#define ADIS16220_MSC_CTRL_DIO2_ACT_HIGH (1<<1) +#define ADIS16220_MSC_CTRL_DIO1_ACT_HIGH (1<<0) + +/* DIAG_STAT */ +/* AIN2 sample > ALM_MAG2 */ +#define ADIS16220_DIAG_STAT_ALM_MAG2 (1<<14) +/* AIN1 sample > ALM_MAG1 */ +#define ADIS16220_DIAG_STAT_ALM_MAG1 (1<<13) +/* Acceleration sample > ALM_MAGA */ +#define ADIS16220_DIAG_STAT_ALM_MAGA (1<<12) +/* Error condition programmed into ALM_MAGS[11:0] and ALM_CTRL[5:4] is true */ +#define ADIS16220_DIAG_STAT_ALM_MAGS (1<<11) +/* |Peak value in AIN2 data capture| > ALM_MAG2 */ +#define ADIS16220_DIAG_STAT_PEAK_AIN2 (1<<10) +/* |Peak value in AIN1 data capture| > ALM_MAG1 */ +#define ADIS16220_DIAG_STAT_PEAK_AIN1 (1<<9) +/* |Peak value in acceleration data capture| > ALM_MAGA */ +#define ADIS16220_DIAG_STAT_PEAK_ACCEL (1<<8) +/* Data ready, capture complete */ +#define ADIS16220_DIAG_STAT_DATA_RDY (1<<7) +#define ADIS16220_DIAG_STAT_FLASH_CHK (1<<6) +#define ADIS16220_DIAG_STAT_SELF_TEST (1<<5) +/* Capture period violation/interruption */ +#define ADIS16220_DIAG_STAT_VIOLATION (1<<4) +/* SPI communications failure */ +#define ADIS16220_DIAG_STAT_SPI_FAIL (1<<3) +/* Flash update failure */ +#define ADIS16220_DIAG_STAT_FLASH_UPT (1<<2) +/* Power supply above 3.625 V */ +#define ADIS16220_DIAG_STAT_POWER_HIGH (1<<1) +/* Power supply below 3.15 V */ +#define ADIS16220_DIAG_STAT_POWER_LOW (1<<0) + +/* GLOB_CMD */ +#define ADIS16220_GLOB_CMD_SW_RESET (1<<7) +#define ADIS16220_GLOB_CMD_SELF_TEST (1<<2) +#define ADIS16220_GLOB_CMD_PWR_DOWN (1<<1) + +#define ADIS16220_MAX_TX 2048 +#define ADIS16220_MAX_RX 2048 + +#define ADIS16220_SPI_BURST (u32)(1000 * 1000) +#define ADIS16220_SPI_FAST (u32)(2000 * 1000) + +/** + * struct adis16220_state - device instance specific data + * @us: actual spi_device + * @work_trigger_to_ring: bh for triggered event handling + * @work_cont_thresh: CLEAN + * @inter: used to check if new interrupt has been triggered + * @last_timestamp: passing timestamp from th to bh of interrupt handler + * @indio_dev: industrial I/O device structure + * @trig: data ready trigger registered with iio + * @tx: transmit buffer + * @rx: recieve buffer + * @buf_lock: mutex to protect tx and rx + **/ +struct adis16220_state { + struct spi_device *us; + struct iio_dev *indio_dev; + u8 *tx; + u8 *rx; + struct bin_attribute accel_bin; + struct bin_attribute adc1_bin; + struct bin_attribute adc2_bin; + struct mutex buf_lock; +}; + +#endif /* SPI_ADIS16220_H_ */ diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c new file mode 100644 index 0000000..8b845d9 --- /dev/null +++ b/drivers/staging/iio/accel/adis16220_core.c @@ -0,0 +1,664 @@ +/* + * ADIS16220 Programmable Digital Vibration Sensor driver + * + * Copyright 2010 Analog Devices Inc. + * + * Licensed under the GPL-2 or later. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "accel.h" +#include "../adc/adc.h" + +#include "adis16220.h" + +#define DRIVER_NAME "adis16220" + +static int adis16220_check_status(struct device *dev); + +/** + * adis16220_spi_write_reg_8() - write single byte to a register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the register to be written + * @val: the value to write + **/ +static int adis16220_spi_write_reg_8(struct device *dev, + u8 reg_address, + u8 val) +{ + int ret; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16220_state *st = iio_dev_get_devdata(indio_dev); + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16220_WRITE_REG(reg_address); + st->tx[1] = val; + + ret = spi_write(st->us, st->tx, 2); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16220_spi_write_reg_16() - write 2 bytes to a pair of registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: value to be written + **/ +static int adis16220_spi_write_reg_16(struct device *dev, + u8 lower_reg_address, + u16 value) +{ + int ret; + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16220_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, { + .tx_buf = st->tx + 2, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16220_WRITE_REG(lower_reg_address); + st->tx[1] = value & 0xFF; + st->tx[2] = ADIS16220_WRITE_REG(lower_reg_address + 1); + st->tx[3] = (value >> 8) & 0xFF; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16220_spi_read_reg_16() - read 2 bytes from a 16-bit register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: somewhere to pass back the value read + **/ +static int adis16220_spi_read_reg_16(struct device *dev, + u8 lower_reg_address, + u16 *val) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16220_state *st = iio_dev_get_devdata(indio_dev); + int ret; + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, { + .rx_buf = st->rx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16220_READ_REG(lower_reg_address); + st->tx[1] = 0; + st->tx[2] = 0; + st->tx[3] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + if (ret) { + dev_err(&st->us->dev, + "problem when reading 16 bit register 0x%02X", + lower_reg_address); + goto error_ret; + } + *val = (st->rx[0] << 8) | st->rx[1]; + +error_ret: + mutex_unlock(&st->buf_lock); + return ret; +} + +static ssize_t adis16220_spi_read_signed(struct device *dev, + struct device_attribute *attr, + char *buf, + unsigned bits) +{ + int ret; + s16 val = 0; + unsigned shift = 16 - bits; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16220_spi_read_reg_16(dev, this_attr->address, (u16 *)&val); + if (ret) + return ret; + + val = ((s16)(val << shift) >> shift); + return sprintf(buf, "%d\n", val); +} + +static ssize_t adis16220_read_12bit_unsigned(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret; + u16 val = 0; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16220_spi_read_reg_16(dev, this_attr->address, &val); + if (ret) + return ret; + + return sprintf(buf, "%u\n", val & 0x0FFF); +} + +static ssize_t adis16220_read_16bit(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16220_spi_read_signed(dev, attr, buf, 16); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16220_write_16bit(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + int ret; + long val; + + ret = strict_strtol(buf, 10, &val); + if (ret) + goto error_ret; + ret = adis16220_spi_write_reg_16(dev, this_attr->address, val); + +error_ret: + return ret ? ret : len; +} + +static int adis16220_capture(struct device *dev) +{ + int ret; + ret = adis16220_spi_write_reg_16(dev, + ADIS16220_GLOB_CMD, + 0xBF08); /* initiates a manual data capture */ + if (ret) + dev_err(dev, "problem beginning capture"); + + msleep(10); /* delay for capture to finish */ + + return ret; +} + +static int adis16220_reset(struct device *dev) +{ + int ret; + ret = adis16220_spi_write_reg_8(dev, + ADIS16220_GLOB_CMD, + ADIS16220_GLOB_CMD_SW_RESET); + if (ret) + dev_err(dev, "problem resetting device"); + + return ret; +} + +static ssize_t adis16220_write_reset(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + if (len < 1) + return -1; + switch (buf[0]) { + case '1': + case 'y': + case 'Y': + return adis16220_reset(dev) == 0 ? len : -EIO; + } + return -1; +} + +static ssize_t adis16220_write_capture(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + if (len < 1) + return -1; + switch (buf[0]) { + case '1': + case 'y': + case 'Y': + return adis16220_capture(dev) == 0 ? len : -EIO; + } + return -1; +} + +static int adis16220_self_test(struct device *dev) +{ + int ret; + ret = adis16220_spi_write_reg_16(dev, + ADIS16220_MSC_CTRL, + ADIS16220_MSC_CTRL_SELF_TEST_EN); + if (ret) { + dev_err(dev, "problem starting self test"); + goto err_ret; + } + + adis16220_check_status(dev); + +err_ret: + return ret; +} + +static int adis16220_check_status(struct device *dev) +{ + u16 status; + int ret; + + ret = adis16220_spi_read_reg_16(dev, ADIS16220_DIAG_STAT, &status); + + if (ret < 0) { + dev_err(dev, "Reading status failed\n"); + goto error_ret; + } + ret = status & 0x7F; + + if (status & ADIS16220_DIAG_STAT_VIOLATION) + dev_err(dev, "Capture period violation/interruption\n"); + if (status & ADIS16220_DIAG_STAT_SPI_FAIL) + dev_err(dev, "SPI failure\n"); + if (status & ADIS16220_DIAG_STAT_FLASH_UPT) + dev_err(dev, "Flash update failed\n"); + if (status & ADIS16220_DIAG_STAT_POWER_HIGH) + dev_err(dev, "Power supply above 5.25V\n"); + if (status & ADIS16220_DIAG_STAT_POWER_LOW) + dev_err(dev, "Power supply below 4.75V\n"); + +error_ret: + return ret; +} + +static int adis16220_initial_setup(struct adis16220_state *st) +{ + int ret; + struct device *dev = &st->indio_dev->dev; + + /* Do self test */ + ret = adis16220_self_test(dev); + if (ret) { + dev_err(dev, "self test failure"); + goto err_ret; + } + + /* Read status register to check the result */ + ret = adis16220_check_status(dev); + if (ret) { + adis16220_reset(dev); + dev_err(dev, "device not playing ball -> reset"); + msleep(ADIS16220_STARTUP_DELAY); + ret = adis16220_check_status(dev); + if (ret) { + dev_err(dev, "giving up"); + goto err_ret; + } + } + + printk(KERN_INFO DRIVER_NAME ": at CS%d (irq %d)\n", + st->us->chip_select, st->us->irq); + +err_ret: + return ret; +} + +static ssize_t adis16220_capture_buffer_read(struct adis16220_state *st, + char *buf, + loff_t off, + size_t count, + int addr) +{ + struct spi_message msg; + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, { + .tx_buf = st->tx, + .rx_buf = st->rx, + .bits_per_word = 8, + .cs_change = 1, + .delay_usecs = 25, + }, + }; + int ret; + int i; + + if (unlikely(!count)) + return count; + + if ((off >= ADIS16220_CAPTURE_SIZE) || (count & 1) || (off & 1)) + return -EINVAL; + + if (off + count > ADIS16220_CAPTURE_SIZE) + count = ADIS16220_CAPTURE_SIZE - off; + + /* write the begin position of capture buffer */ + ret = adis16220_spi_write_reg_16(&st->indio_dev->dev, + ADIS16220_CAPT_PNTR, + off > 1); + if (ret) + return -EIO; + + /* read count/2 values from capture buffer */ + mutex_lock(&st->buf_lock); + + for (i = 0; i < count; i += 2) { + st->tx[i] = ADIS16220_READ_REG(addr); + st->tx[i + 1] = 0; + } + xfers[1].len = count; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + if (ret) { + + mutex_unlock(&st->buf_lock); + return -EIO; + } + + memcpy(buf, st->rx, count); + + mutex_unlock(&st->buf_lock); + return count; +} + +static ssize_t adis16220_accel_bin_read(struct kobject *kobj, + struct bin_attribute *attr, + char *buf, + loff_t off, + size_t count) +{ + struct device *dev = container_of(kobj, struct device, kobj); + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16220_state *st = iio_dev_get_devdata(indio_dev); + + return adis16220_capture_buffer_read(st, buf, + off, count, + ADIS16220_CAPT_BUFA); +} + +static ssize_t adis16220_adc1_bin_read(struct kobject *kobj, + struct bin_attribute *attr, + char *buf, loff_t off, + size_t count) +{ + struct device *dev = container_of(kobj, struct device, kobj); + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16220_state *st = iio_dev_get_devdata(indio_dev); + + return adis16220_capture_buffer_read(st, buf, + off, count, + ADIS16220_CAPT_BUF1); +} + +static ssize_t adis16220_adc2_bin_read(struct kobject *kobj, + struct bin_attribute *attr, + char *buf, loff_t off, + size_t count) +{ + struct device *dev = container_of(kobj, struct device, kobj); + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16220_state *st = iio_dev_get_devdata(indio_dev); + + return adis16220_capture_buffer_read(st, buf, + off, count, + ADIS16220_CAPT_BUF2); +} + +static IIO_DEV_ATTR_IN_NAMED_RAW(supply, adis16220_read_12bit_unsigned, + ADIS16220_CAPT_SUPPLY); +static IIO_CONST_ATTR(in_supply_scale, "0.0012207"); +static IIO_DEV_ATTR_ACCEL(adis16220_read_16bit, ADIS16220_CAPT_BUFA); +static IIO_DEVICE_ATTR(accel_peak_raw, S_IRUGO, adis16220_read_16bit, + NULL, ADIS16220_CAPT_PEAKA); +static IIO_DEV_ATTR_ACCEL_OFFSET(S_IWUSR | S_IRUGO, + adis16220_read_16bit, + adis16220_write_16bit, + ADIS16220_ACCL_NULL); +static IIO_DEV_ATTR_TEMP_RAW(adis16220_read_12bit_unsigned); +static IIO_CONST_ATTR(temp_offset, "25"); +static IIO_CONST_ATTR(temp_scale, "-0.47"); + +static IIO_DEV_ATTR_IN_RAW(0, adis16220_read_16bit, ADIS16220_CAPT_BUF1); +static IIO_DEV_ATTR_IN_RAW(1, adis16220_read_16bit, ADIS16220_CAPT_BUF2); + +static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, + adis16220_write_reset, 0); + +#define IIO_DEV_ATTR_CAPTURE(_store) \ + IIO_DEVICE_ATTR(capture, S_IWUGO, NULL, _store, 0) + +static IIO_DEV_ATTR_CAPTURE(adis16220_write_capture); + +#define IIO_DEV_ATTR_CAPTURE_COUNT(_mode, _show, _store, _addr) \ + IIO_DEVICE_ATTR(capture_count, _mode, _show, _store, _addr) + +static IIO_DEV_ATTR_CAPTURE_COUNT(S_IWUSR | S_IRUGO, + adis16220_read_16bit, + adis16220_write_16bit, + ADIS16220_CAPT_PNTR); + +static IIO_CONST_ATTR_AVAIL_SAMP_FREQ("100200"); + +static IIO_CONST_ATTR(name, "adis16220"); + +static struct attribute *adis16220_attributes[] = { + &iio_dev_attr_in_supply_raw.dev_attr.attr, + &iio_const_attr_in_supply_scale.dev_attr.attr, + &iio_dev_attr_accel_raw.dev_attr.attr, + &iio_dev_attr_accel_offset.dev_attr.attr, + &iio_dev_attr_accel_peak_raw.dev_attr.attr, + &iio_dev_attr_temp_raw.dev_attr.attr, + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_dev_attr_in1_raw.dev_attr.attr, + &iio_const_attr_temp_offset.dev_attr.attr, + &iio_const_attr_temp_scale.dev_attr.attr, + &iio_const_attr_available_sampling_frequency.dev_attr.attr, + &iio_dev_attr_reset.dev_attr.attr, + &iio_dev_attr_capture.dev_attr.attr, + &iio_dev_attr_capture_count.dev_attr.attr, + &iio_const_attr_name.dev_attr.attr, + NULL +}; + +static const struct attribute_group adis16220_attribute_group = { + .attrs = adis16220_attributes, +}; + +static int __devinit adis16220_probe(struct spi_device *spi) +{ + int ret, regdone = 0; + struct adis16220_state *st = kzalloc(sizeof *st, GFP_KERNEL); + if (!st) { + ret = -ENOMEM; + goto error_ret; + } + /* this is only used for removal purposes */ + spi_set_drvdata(spi, st); + + /* Allocate the comms buffers */ + st->rx = kzalloc(sizeof(*st->rx)*ADIS16220_MAX_RX, GFP_KERNEL); + if (st->rx == NULL) { + ret = -ENOMEM; + goto error_free_st; + } + st->tx = kzalloc(sizeof(*st->tx)*ADIS16220_MAX_TX, GFP_KERNEL); + if (st->tx == NULL) { + ret = -ENOMEM; + goto error_free_rx; + } + st->us = spi; + mutex_init(&st->buf_lock); + /* setup the industrialio driver allocated elements */ + st->indio_dev = iio_allocate_device(); + if (st->indio_dev == NULL) { + ret = -ENOMEM; + goto error_free_tx; + } + + st->indio_dev->dev.parent = &spi->dev; + st->indio_dev->attrs = &adis16220_attribute_group; + st->indio_dev->dev_data = (void *)(st); + st->indio_dev->driver_module = THIS_MODULE; + st->indio_dev->modes = INDIO_DIRECT_MODE; + + ret = iio_device_register(st->indio_dev); + if (ret) + goto error_free_dev; + regdone = 1; + + st->accel_bin.attr.name = "accel_bin"; + st->accel_bin.attr.mode = S_IRUGO; + st->accel_bin.attr.owner = THIS_MODULE; + st->accel_bin.read = adis16220_accel_bin_read; + st->accel_bin.size = ADIS16220_CAPTURE_SIZE; + + ret = sysfs_create_bin_file(&st->indio_dev->dev.kobj, &st->accel_bin); + if (ret) + goto error_free_dev; + + st->adc1_bin.attr.name = "adc1_bin"; + st->adc1_bin.attr.mode = S_IRUGO; + st->adc1_bin.attr.owner = THIS_MODULE; + st->adc1_bin.read = adis16220_adc1_bin_read; + st->adc1_bin.size = ADIS16220_CAPTURE_SIZE; + + ret = sysfs_create_bin_file(&st->indio_dev->dev.kobj, &st->adc1_bin); + if (ret) + goto error_rm_accel_bin; + + st->adc2_bin.attr.name = "adc2_bin"; + st->adc2_bin.attr.mode = S_IRUGO; + st->adc2_bin.attr.owner = THIS_MODULE; + st->adc2_bin.read = adis16220_adc2_bin_read; + st->adc2_bin.size = ADIS16220_CAPTURE_SIZE; + + ret = sysfs_create_bin_file(&st->indio_dev->dev.kobj, &st->adc2_bin); + if (ret) + goto error_rm_adc1_bin; + + /* Get the device into a sane initial state */ + ret = adis16220_initial_setup(st); + if (ret) + goto error_rm_adc2_bin; + return 0; + +error_rm_adc2_bin: + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->adc2_bin); +error_rm_adc1_bin: + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->adc1_bin); +error_rm_accel_bin: + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->accel_bin); +error_free_dev: + if (regdone) + iio_device_unregister(st->indio_dev); + else + iio_free_device(st->indio_dev); +error_free_tx: + kfree(st->tx); +error_free_rx: + kfree(st->rx); +error_free_st: + kfree(st); +error_ret: + return ret; +} + +static int adis16220_remove(struct spi_device *spi) +{ + struct adis16220_state *st = spi_get_drvdata(spi); + struct iio_dev *indio_dev = st->indio_dev; + + flush_scheduled_work(); + + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->adc2_bin); + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->adc1_bin); + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->accel_bin); + iio_device_unregister(indio_dev); + kfree(st->tx); + kfree(st->rx); + kfree(st); + + return 0; +} + +static struct spi_driver adis16220_driver = { + .driver = { + .name = "adis16220", + .owner = THIS_MODULE, + }, + .probe = adis16220_probe, + .remove = __devexit_p(adis16220_remove), +}; + +static __init int adis16220_init(void) +{ + return spi_register_driver(&adis16220_driver); +} +module_init(adis16220_init); + +static __exit void adis16220_exit(void) +{ + spi_unregister_driver(&adis16220_driver); +} +module_exit(adis16220_exit); + +MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>"); +MODULE_DESCRIPTION("Analog Devices ADIS16220 Digital Vibration Sensor"); +MODULE_LICENSE("GPL v2"); -- cgit v0.10.2 From 9a3af585e7fe3df35b233977579b5ab6e4c7005f Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Sun, 16 May 2010 21:11:38 +0100 Subject: Staging: iio: adis16220 extract bin_attribute structures from state Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/accel/adis16220.h b/drivers/staging/iio/accel/adis16220.h index 6b49f70..2abf485 100644 --- a/drivers/staging/iio/accel/adis16220.h +++ b/drivers/staging/iio/accel/adis16220.h @@ -141,9 +141,6 @@ struct adis16220_state { struct iio_dev *indio_dev; u8 *tx; u8 *rx; - struct bin_attribute accel_bin; - struct bin_attribute adc1_bin; - struct bin_attribute adc2_bin; struct mutex buf_lock; }; diff --git a/drivers/staging/iio/accel/adis16220_core.c b/drivers/staging/iio/accel/adis16220_core.c index 8b845d9..6de439f 100644 --- a/drivers/staging/iio/accel/adis16220_core.c +++ b/drivers/staging/iio/accel/adis16220_core.c @@ -27,8 +27,6 @@ #define DRIVER_NAME "adis16220" -static int adis16220_check_status(struct device *dev); - /** * adis16220_spi_write_reg_8() - write single byte to a register * @dev: device associated with child of actual device (iio_dev or iio_trig) @@ -133,8 +131,6 @@ static int adis16220_spi_read_reg_16(struct device *dev, mutex_lock(&st->buf_lock); st->tx[0] = ADIS16220_READ_REG(lower_reg_address); st->tx[1] = 0; - st->tx[2] = 0; - st->tx[3] = 0; spi_message_init(&msg); spi_message_add_tail(&xfers[0], &msg); @@ -275,23 +271,6 @@ static ssize_t adis16220_write_capture(struct device *dev, return -1; } -static int adis16220_self_test(struct device *dev) -{ - int ret; - ret = adis16220_spi_write_reg_16(dev, - ADIS16220_MSC_CTRL, - ADIS16220_MSC_CTRL_SELF_TEST_EN); - if (ret) { - dev_err(dev, "problem starting self test"); - goto err_ret; - } - - adis16220_check_status(dev); - -err_ret: - return ret; -} - static int adis16220_check_status(struct device *dev) { u16 status; @@ -320,6 +299,23 @@ error_ret: return ret; } +static int adis16220_self_test(struct device *dev) +{ + int ret; + ret = adis16220_spi_write_reg_16(dev, + ADIS16220_MSC_CTRL, + ADIS16220_MSC_CTRL_SELF_TEST_EN); + if (ret) { + dev_err(dev, "problem starting self test"); + goto err_ret; + } + + adis16220_check_status(dev); + +err_ret: + return ret; +} + static int adis16220_initial_setup(struct adis16220_state *st) { int ret; @@ -433,6 +429,15 @@ static ssize_t adis16220_accel_bin_read(struct kobject *kobj, ADIS16220_CAPT_BUFA); } +static struct bin_attribute accel_bin = { + .attr = { + .name = "accel_bin", + .mode = S_IRUGO, + }, + .read = adis16220_accel_bin_read, + .size = ADIS16220_CAPTURE_SIZE, +}; + static ssize_t adis16220_adc1_bin_read(struct kobject *kobj, struct bin_attribute *attr, char *buf, loff_t off, @@ -447,6 +452,15 @@ static ssize_t adis16220_adc1_bin_read(struct kobject *kobj, ADIS16220_CAPT_BUF1); } +static struct bin_attribute adc1_bin = { + .attr = { + .name = "in0_bin", + .mode = S_IRUGO, + }, + .read = adis16220_adc1_bin_read, + .size = ADIS16220_CAPTURE_SIZE, +}; + static ssize_t adis16220_adc2_bin_read(struct kobject *kobj, struct bin_attribute *attr, char *buf, loff_t off, @@ -461,6 +475,16 @@ static ssize_t adis16220_adc2_bin_read(struct kobject *kobj, ADIS16220_CAPT_BUF2); } + +static struct bin_attribute adc2_bin = { + .attr = { + .name = "in1_bin", + .mode = S_IRUGO, + }, + .read = adis16220_adc2_bin_read, + .size = ADIS16220_CAPTURE_SIZE, +}; + static IIO_DEV_ATTR_IN_NAMED_RAW(supply, adis16220_read_12bit_unsigned, ADIS16220_CAPT_SUPPLY); static IIO_CONST_ATTR(in_supply_scale, "0.0012207"); @@ -481,12 +505,12 @@ static IIO_DEV_ATTR_IN_RAW(1, adis16220_read_16bit, ADIS16220_CAPT_BUF2); static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, adis16220_write_reset, 0); -#define IIO_DEV_ATTR_CAPTURE(_store) \ +#define IIO_DEV_ATTR_CAPTURE(_store) \ IIO_DEVICE_ATTR(capture, S_IWUGO, NULL, _store, 0) static IIO_DEV_ATTR_CAPTURE(adis16220_write_capture); -#define IIO_DEV_ATTR_CAPTURE_COUNT(_mode, _show, _store, _addr) \ +#define IIO_DEV_ATTR_CAPTURE_COUNT(_mode, _show, _store, _addr) \ IIO_DEVICE_ATTR(capture_count, _mode, _show, _store, _addr) static IIO_DEV_ATTR_CAPTURE_COUNT(S_IWUSR | S_IRUGO, @@ -563,33 +587,15 @@ static int __devinit adis16220_probe(struct spi_device *spi) goto error_free_dev; regdone = 1; - st->accel_bin.attr.name = "accel_bin"; - st->accel_bin.attr.mode = S_IRUGO; - st->accel_bin.attr.owner = THIS_MODULE; - st->accel_bin.read = adis16220_accel_bin_read; - st->accel_bin.size = ADIS16220_CAPTURE_SIZE; - - ret = sysfs_create_bin_file(&st->indio_dev->dev.kobj, &st->accel_bin); + ret = sysfs_create_bin_file(&st->indio_dev->dev.kobj, &accel_bin); if (ret) goto error_free_dev; - st->adc1_bin.attr.name = "adc1_bin"; - st->adc1_bin.attr.mode = S_IRUGO; - st->adc1_bin.attr.owner = THIS_MODULE; - st->adc1_bin.read = adis16220_adc1_bin_read; - st->adc1_bin.size = ADIS16220_CAPTURE_SIZE; - - ret = sysfs_create_bin_file(&st->indio_dev->dev.kobj, &st->adc1_bin); + ret = sysfs_create_bin_file(&st->indio_dev->dev.kobj, &adc1_bin); if (ret) goto error_rm_accel_bin; - st->adc2_bin.attr.name = "adc2_bin"; - st->adc2_bin.attr.mode = S_IRUGO; - st->adc2_bin.attr.owner = THIS_MODULE; - st->adc2_bin.read = adis16220_adc2_bin_read; - st->adc2_bin.size = ADIS16220_CAPTURE_SIZE; - - ret = sysfs_create_bin_file(&st->indio_dev->dev.kobj, &st->adc2_bin); + ret = sysfs_create_bin_file(&st->indio_dev->dev.kobj, &adc2_bin); if (ret) goto error_rm_adc1_bin; @@ -600,11 +606,11 @@ static int __devinit adis16220_probe(struct spi_device *spi) return 0; error_rm_adc2_bin: - sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->adc2_bin); + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &adc2_bin); error_rm_adc1_bin: - sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->adc1_bin); + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &adc1_bin); error_rm_accel_bin: - sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->accel_bin); + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &accel_bin); error_free_dev: if (regdone) iio_device_unregister(st->indio_dev); @@ -627,9 +633,9 @@ static int adis16220_remove(struct spi_device *spi) flush_scheduled_work(); - sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->adc2_bin); - sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->adc1_bin); - sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &st->accel_bin); + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &adc2_bin); + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &adc1_bin); + sysfs_remove_bin_file(&st->indio_dev->dev.kobj, &accel_bin); iio_device_unregister(indio_dev); kfree(st->tx); kfree(st->rx); -- cgit v0.10.2 From 81b77f94a10b64a3620e32531b5d8dbc495f1727 Mon Sep 17 00:00:00 2001 From: Jonathan Cameron Date: Sun, 16 May 2010 21:29:25 +0100 Subject: Staging: iio: max1363 Fix two bugs in single_channel_from_ring This patch contains fixes for the two bugs Michael pointed out last week. As the other suggestion Michael made is not a bug fix (just a much more sensible way of handling things), I'll do that as a separate patch soon. The bugs were introduced with the abi changes. Signed-off-by: Jonathan Cameron Reported-by: Michael Hennerich Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/adc/max1363_ring.c b/drivers/staging/iio/adc/max1363_ring.c index c8aa011..56688dc 100644 --- a/drivers/staging/iio/adc/max1363_ring.c +++ b/drivers/staging/iio/adc/max1363_ring.c @@ -51,15 +51,15 @@ int max1363_single_channel_from_ring(long mask, struct max1363_state *st) /* Need a count of channels prior to this one */ mask >>= 1; while (mask) { - if (mask && st->current_mode->modemask) + if (mask & st->current_mode->modemask) count++; mask >>= 1; } if (st->chip_info->bits != 8) - return ((int)(ring_data[count*2 + 0] & 0x0F) << 8) + ret = ((int)(ring_data[count*2 + 0] & 0x0F) << 8) + (int)(ring_data[count*2 + 1]); else - return ring_data[count]; + ret = ring_data[count]; error_free_ring_data: kfree(ring_data); -- cgit v0.10.2 From 5763dcab5cd7de27d6db50efd393c416177c56c7 Mon Sep 17 00:00:00 2001 From: Barry Song Date: Mon, 17 May 2010 11:40:20 +0100 Subject: staging: iio: adis16350 and similar IMU driver This version has the right part number in the commit message. Whilst technically the part I listed last time is also supported by the driver, the commit message might have caused confusion. Another driver from Barry at Analog. Again, I've lifted if from the blackfin tree and done the usual sparse and checkpatch fixes + the abi changes. I actually have one of these, so am particularly pleased to see it supported! Signed-off-by: Barry Song Signed-off-by: Jonathan Cameron Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/iio/imu/Kconfig b/drivers/staging/iio/imu/Kconfig index 411804f..6308d6f 100644 --- a/drivers/staging/iio/imu/Kconfig +++ b/drivers/staging/iio/imu/Kconfig @@ -13,6 +13,15 @@ config ADIS16300 Say yes here to build support for Analog Devices adis16300 four degrees of freedom inertial sensor. +config ADIS16350 + tristate "Analog Devices ADIS16350/54/55/60/62/64/65 IMU SPI driver" + depends on SPI + select IIO_TRIGGER if IIO_RING_BUFFER + select IIO_SW_RING if IIO_RING_BUFFER + help + Say yes here to build support for Analog Devices adis16350/54/55/60/62/64/65 + high precision tri-axis inertial sensor. + config ADIS16400 tristate "Analog Devices ADIS16400/5 IMU SPI driver" depends on SPI diff --git a/drivers/staging/iio/imu/Makefile b/drivers/staging/iio/imu/Makefile index de454dd..31df735 100644 --- a/drivers/staging/iio/imu/Makefile +++ b/drivers/staging/iio/imu/Makefile @@ -5,6 +5,10 @@ adis16300-y := adis16300_core.o adis16300-$(CONFIG_IIO_RING_BUFFER) += adis16300_ring.o adis16300_trigger.o obj-$(CONFIG_ADIS16300) += adis16300.o +adis16350-y := adis16350_core.o +adis16350-$(CONFIG_IIO_RING_BUFFER) += adis16350_ring.o adis16350_trigger.o +obj-$(CONFIG_ADIS16350) += adis16350.o + adis16400-y := adis16400_core.o adis16400-$(CONFIG_IIO_RING_BUFFER) += adis16400_ring.o adis16400_trigger.o obj-$(CONFIG_ADIS16400) += adis16400.o \ No newline at end of file diff --git a/drivers/staging/iio/imu/adis16350.h b/drivers/staging/iio/imu/adis16350.h new file mode 100644 index 0000000..334b18a --- /dev/null +++ b/drivers/staging/iio/imu/adis16350.h @@ -0,0 +1,193 @@ +#ifndef SPI_ADIS16350_H_ +#define SPI_ADIS16350_H_ + +#define ADIS16350_STARTUP_DELAY 220 /* ms */ + +#define ADIS16350_READ_REG(a) a +#define ADIS16350_WRITE_REG(a) ((a) | 0x80) + +#define ADIS16350_FLASH_CNT 0x00 /* Flash memory write count */ +#define ADIS16350_SUPPLY_OUT 0x02 /* Power supply measurement */ +#define ADIS16350_XGYRO_OUT 0x04 /* X-axis gyroscope output */ +#define ADIS16350_YGYRO_OUT 0x06 /* Y-axis gyroscope output */ +#define ADIS16350_ZGYRO_OUT 0x08 /* Z-axis gyroscope output */ +#define ADIS16350_XACCL_OUT 0x0A /* X-axis accelerometer output */ +#define ADIS16350_YACCL_OUT 0x0C /* Y-axis accelerometer output */ +#define ADIS16350_ZACCL_OUT 0x0E /* Z-axis accelerometer output */ +#define ADIS16350_XTEMP_OUT 0x10 /* X-axis gyroscope temperature measurement */ +#define ADIS16350_YTEMP_OUT 0x12 /* Y-axis gyroscope temperature measurement */ +#define ADIS16350_ZTEMP_OUT 0x14 /* Z-axis gyroscope temperature measurement */ +#define ADIS16350_AUX_ADC 0x16 /* Auxiliary ADC measurement */ + +/* Calibration parameters */ +#define ADIS16350_XGYRO_OFF 0x1A /* X-axis gyroscope bias offset factor */ +#define ADIS16350_YGYRO_OFF 0x1C /* Y-axis gyroscope bias offset factor */ +#define ADIS16350_ZGYRO_OFF 0x1E /* Z-axis gyroscope bias offset factor */ +#define ADIS16350_XACCL_OFF 0x20 /* X-axis acceleration bias offset factor */ +#define ADIS16350_YACCL_OFF 0x22 /* Y-axis acceleration bias offset factor */ +#define ADIS16350_ZACCL_OFF 0x24 /* Z-axis acceleration bias offset factor */ + +#define ADIS16350_GPIO_CTRL 0x32 /* Auxiliary digital input/output control */ +#define ADIS16350_MSC_CTRL 0x34 /* Miscellaneous control */ +#define ADIS16350_SMPL_PRD 0x36 /* Internal sample period (rate) control */ +#define ADIS16350_SENS_AVG 0x38 /* Dynamic range and digital filter control */ +#define ADIS16350_SLP_CNT 0x3A /* Sleep mode control */ +#define ADIS16350_DIAG_STAT 0x3C /* System status */ + +/* Alarm functions */ +#define ADIS16350_GLOB_CMD 0x3E /* System command */ +#define ADIS16350_ALM_MAG1 0x26 /* Alarm 1 amplitude threshold */ +#define ADIS16350_ALM_MAG2 0x28 /* Alarm 2 amplitude threshold */ +#define ADIS16350_ALM_SMPL1 0x2A /* Alarm 1 sample size */ +#define ADIS16350_ALM_SMPL2 0x2C /* Alarm 2 sample size */ +#define ADIS16350_ALM_CTRL 0x2E /* Alarm control */ +#define ADIS16350_AUX_DAC 0x30 /* Auxiliary DAC data */ + +#define ADIS16350_ERROR_ACTIVE (1<<14) +#define ADIS16350_NEW_DATA (1<<15) + +/* MSC_CTRL */ +#define ADIS16350_MSC_CTRL_MEM_TEST (1<<11) +#define ADIS16350_MSC_CTRL_INT_SELF_TEST (1<<10) +#define ADIS16350_MSC_CTRL_NEG_SELF_TEST (1<<9) +#define ADIS16350_MSC_CTRL_POS_SELF_TEST (1<<8) +#define ADIS16350_MSC_CTRL_GYRO_BIAS (1<<7) +#define ADIS16350_MSC_CTRL_ACCL_ALIGN (1<<6) +#define ADIS16350_MSC_CTRL_DATA_RDY_EN (1<<2) +#define ADIS16350_MSC_CTRL_DATA_RDY_POL_HIGH (1<<1) +#define ADIS16350_MSC_CTRL_DATA_RDY_DIO2 (1<<0) + +/* SMPL_PRD */ +#define ADIS16350_SMPL_PRD_TIME_BASE (1<<7) +#define ADIS16350_SMPL_PRD_DIV_MASK 0x7F + +/* DIAG_STAT */ +#define ADIS16350_DIAG_STAT_ZACCL_FAIL (1<<15) +#define ADIS16350_DIAG_STAT_YACCL_FAIL (1<<14) +#define ADIS16350_DIAG_STAT_XACCL_FAIL (1<<13) +#define ADIS16350_DIAG_STAT_XGYRO_FAIL (1<<12) +#define ADIS16350_DIAG_STAT_YGYRO_FAIL (1<<11) +#define ADIS16350_DIAG_STAT_ZGYRO_FAIL (1<<10) +#define ADIS16350_DIAG_STAT_ALARM2 (1<<9) +#define ADIS16350_DIAG_STAT_ALARM1 (1<<8) +#define ADIS16350_DIAG_STAT_FLASH_CHK (1<<6) +#define ADIS16350_DIAG_STAT_SELF_TEST (1<<5) +#define ADIS16350_DIAG_STAT_OVERFLOW (1<<4) +#define ADIS16350_DIAG_STAT_SPI_FAIL (1<<3) +#define ADIS16350_DIAG_STAT_FLASH_UPT (1<<2) +#define ADIS16350_DIAG_STAT_POWER_HIGH (1<<1) +#define ADIS16350_DIAG_STAT_POWER_LOW (1<<0) + +/* GLOB_CMD */ +#define ADIS16350_GLOB_CMD_SW_RESET (1<<7) +#define ADIS16350_GLOB_CMD_P_AUTO_NULL (1<<4) +#define ADIS16350_GLOB_CMD_FLASH_UPD (1<<3) +#define ADIS16350_GLOB_CMD_DAC_LATCH (1<<2) +#define ADIS16350_GLOB_CMD_FAC_CALIB (1<<1) +#define ADIS16350_GLOB_CMD_AUTO_NULL (1<<0) + +/* SLP_CNT */ +#define ADIS16350_SLP_CNT_POWER_OFF (1<<8) + +#define ADIS16350_MAX_TX 24 +#define ADIS16350_MAX_RX 24 + +#define ADIS16350_SPI_SLOW (u32)(300 * 1000) +#define ADIS16350_SPI_BURST (u32)(1000 * 1000) +#define ADIS16350_SPI_FAST (u32)(2000 * 1000) + +/** + * struct adis16350_state - device instance specific data + * @us: actual spi_device + * @work_trigger_to_ring: bh for triggered event handling + * @work_cont_thresh: CLEAN + * @inter: used to check if new interrupt has been triggered + * @last_timestamp: passing timestamp from th to bh of interrupt handler + * @indio_dev: industrial I/O device structure + * @trig: data ready trigger registered with iio + * @tx: transmit buffer + * @rx: recieve buffer + * @buf_lock: mutex to protect tx and rx + **/ +struct adis16350_state { + struct spi_device *us; + struct work_struct work_trigger_to_ring; + struct iio_work_cont work_cont_data_rdy; + s64 last_timestamp; + struct iio_dev *indio_dev; + struct iio_trigger *trig; + u8 *tx; + u8 *rx; + struct mutex buf_lock; +}; + +int adis16350_set_irq(struct device *dev, bool enable); + +#ifdef CONFIG_IIO_RING_BUFFER + +enum adis16350_scan { + ADIS16350_SCAN_SUPPLY, + ADIS16350_SCAN_GYRO_X, + ADIS16350_SCAN_GYRO_Y, + ADIS16350_SCAN_GYRO_Z, + ADIS16350_SCAN_ACC_X, + ADIS16350_SCAN_ACC_Y, + ADIS16350_SCAN_ACC_Z, + ADIS16350_SCAN_TEMP_X, + ADIS16350_SCAN_TEMP_Y, + ADIS16350_SCAN_TEMP_Z, + ADIS16350_SCAN_ADC_0 +}; + +void adis16350_remove_trigger(struct iio_dev *indio_dev); +int adis16350_probe_trigger(struct iio_dev *indio_dev); + +ssize_t adis16350_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf); + + +int adis16350_configure_ring(struct iio_dev *indio_dev); +void adis16350_unconfigure_ring(struct iio_dev *indio_dev); + +int adis16350_initialize_ring(struct iio_ring_buffer *ring); +void adis16350_uninitialize_ring(struct iio_ring_buffer *ring); +#else /* CONFIG_IIO_RING_BUFFER */ + +static inline void adis16350_remove_trigger(struct iio_dev *indio_dev) +{ +} + +static inline int adis16350_probe_trigger(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline ssize_t +adis16350_read_data_from_ring(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + return 0; +} + +static int adis16350_configure_ring(struct iio_dev *indio_dev) +{ + return 0; +} + +static inline void adis16350_unconfigure_ring(struct iio_dev *indio_dev) +{ +} + +static inline int adis16350_initialize_ring(struct iio_ring_buffer *ring) +{ + return 0; +} + +static inline void adis16350_uninitialize_ring(struct iio_ring_buffer *ring) +{ +} + +#endif /* CONFIG_IIO_RING_BUFFER */ +#endif /* SPI_ADIS16350_H_ */ diff --git a/drivers/staging/iio/imu/adis16350_core.c b/drivers/staging/iio/imu/adis16350_core.c new file mode 100644 index 0000000..0edde73 --- /dev/null +++ b/drivers/staging/iio/imu/adis16350_core.c @@ -0,0 +1,736 @@ +/* + * ADIS16350/54/55/60/62/64/65 high precision tri-axis inertial sensor + * + * Copyright 2010 Analog Devices Inc. + * + * Licensed under the GPL-2 or later. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../accel/accel.h" +#include "../adc/adc.h" +#include "../gyro/gyro.h" + +#include "adis16350.h" + +#define DRIVER_NAME "adis16350" + +static int adis16350_check_status(struct device *dev); + +/** + * adis16350_spi_write_reg_8() - write single byte to a register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the register to be written + * @val: the value to write + **/ +static int adis16350_spi_write_reg_8(struct device *dev, + u8 reg_address, + u8 val) +{ + int ret; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16350_state *st = iio_dev_get_devdata(indio_dev); + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16350_WRITE_REG(reg_address); + st->tx[1] = val; + + ret = spi_write(st->us, st->tx, 2); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16350_spi_write_reg_16() - write 2 bytes to a pair of registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: value to be written + **/ +static int adis16350_spi_write_reg_16(struct device *dev, + u8 lower_reg_address, + u16 value) +{ + int ret; + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16350_state *st = iio_dev_get_devdata(indio_dev); + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, { + .tx_buf = st->tx + 2, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16350_WRITE_REG(lower_reg_address); + st->tx[1] = value & 0xFF; + st->tx[2] = ADIS16350_WRITE_REG(lower_reg_address + 1); + st->tx[3] = (value >> 8) & 0xFF; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + mutex_unlock(&st->buf_lock); + + return ret; +} + +/** + * adis16350_spi_read_reg_16() - read 2 bytes from a 16-bit register + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @reg_address: the address of the lower of the two registers. Second register + * is assumed to have address one greater. + * @val: somewhere to pass back the value read + **/ +static int adis16350_spi_read_reg_16(struct device *dev, + u8 lower_reg_address, + u16 *val) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16350_state *st = iio_dev_get_devdata(indio_dev); + int ret; + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, { + .rx_buf = st->rx, + .bits_per_word = 8, + .len = 2, + .cs_change = 1, + .delay_usecs = 25, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16350_READ_REG(lower_reg_address); + st->tx[1] = 0; + st->tx[2] = 0; + st->tx[3] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + ret = spi_sync(st->us, &msg); + if (ret) { + dev_err(&st->us->dev, + "problem when reading 16 bit register 0x%02X", + lower_reg_address); + goto error_ret; + } + *val = (st->rx[0] << 8) | st->rx[1]; + +error_ret: + mutex_unlock(&st->buf_lock); + return ret; +} + + +static ssize_t adis16350_spi_read_signed(struct device *dev, + struct device_attribute *attr, + char *buf, + unsigned bits) +{ + int ret; + s16 val = 0; + unsigned shift = 16 - bits; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16350_spi_read_reg_16(dev, this_attr->address, (u16 *)&val); + if (ret) + return ret; + + if (val & ADIS16350_ERROR_ACTIVE) + adis16350_check_status(dev); + val = ((s16)(val << shift) >> shift); + return sprintf(buf, "%d\n", val); +} + +static ssize_t adis16350_read_12bit_unsigned(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret; + u16 val = 0; + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + + ret = adis16350_spi_read_reg_16(dev, this_attr->address, &val); + if (ret) + return ret; + + if (val & ADIS16350_ERROR_ACTIVE) + adis16350_check_status(dev); + + return sprintf(buf, "%u\n", val & 0x0FFF); +} + +static ssize_t adis16350_read_14bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16350_spi_read_signed(dev, attr, buf, 14); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16350_read_12bit_signed(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + ssize_t ret; + + /* Take the iio_dev status lock */ + mutex_lock(&indio_dev->mlock); + ret = adis16350_spi_read_signed(dev, attr, buf, 12); + mutex_unlock(&indio_dev->mlock); + + return ret; +} + +static ssize_t adis16350_write_16bit(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); + int ret; + long val; + + ret = strict_strtol(buf, 10, &val); + if (ret) + goto error_ret; + ret = adis16350_spi_write_reg_16(dev, this_attr->address, val); + +error_ret: + return ret ? ret : len; +} + +static ssize_t adis16350_read_frequency(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + int ret, len = 0; + u16 t; + int sps; + ret = adis16350_spi_read_reg_16(dev, + ADIS16350_SMPL_PRD, + &t); + if (ret) + return ret; + sps = (t & ADIS16350_SMPL_PRD_TIME_BASE) ? 53 : 1638; + sps /= (t & ADIS16350_SMPL_PRD_DIV_MASK) + 1; + len = sprintf(buf, "%d SPS\n", sps); + return len; +} + +static ssize_t adis16350_write_frequency(struct device *dev, + struct device_attribute *attr, + const char *buf, + size_t len) +{ + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16350_state *st = iio_dev_get_devdata(indio_dev); + long val; + int ret; + u8 t; + + ret = strict_strtol(buf, 10, &val); + if (ret) + return ret; + + mutex_lock(&indio_dev->mlock); + + t = (1638 / val); + if (t > 0) + t--; + t &= ADIS16350_SMPL_PRD_DIV_MASK; + if ((t & ADIS16350_SMPL_PRD_DIV_MASK) >= 0x0A) + st->us->max_speed_hz = ADIS16350_SPI_SLOW; + else + st->us->max_speed_hz = ADIS16350_SPI_FAST; + + ret = adis16350_spi_write_reg_8(dev, + ADIS16350_SMPL_PRD, + t); + + mutex_unlock(&indio_dev->mlock); + + return ret ? ret : len; +} + +static int adis16350_reset(struct device *dev) +{ + int ret; + ret = adis16350_spi_write_reg_8(dev, + ADIS16350_GLOB_CMD, + ADIS16350_GLOB_CMD_SW_RESET); + if (ret) + dev_err(dev, "problem resetting device"); + + return ret; +} + +static ssize_t adis16350_write_reset(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + if (len < 1) + return -1; + switch (buf[0]) { + case '1': + case 'y': + case 'Y': + return adis16350_reset(dev); + } + return -1; +} + +int adis16350_set_irq(struct device *dev, bool enable) +{ + int ret; + u16 msc; + ret = adis16350_spi_read_reg_16(dev, ADIS16350_MSC_CTRL, &msc); + if (ret) + goto error_ret; + + msc |= ADIS16350_MSC_CTRL_DATA_RDY_POL_HIGH; + msc &= ~ADIS16350_MSC_CTRL_DATA_RDY_DIO2; + + if (enable) + msc |= ADIS16350_MSC_CTRL_DATA_RDY_EN; + else + msc &= ~ADIS16350_MSC_CTRL_DATA_RDY_EN; + + ret = adis16350_spi_write_reg_16(dev, ADIS16350_MSC_CTRL, msc); + if (ret) + goto error_ret; + +error_ret: + return ret; +} + +/* Power down the device */ +static int adis16350_stop_device(struct device *dev) +{ + int ret; + u16 val = ADIS16350_SLP_CNT_POWER_OFF; + + ret = adis16350_spi_write_reg_16(dev, ADIS16350_SLP_CNT, val); + if (ret) + dev_err(dev, "problem with turning device off: SLP_CNT"); + + return ret; +} + +static int adis16350_self_test(struct device *dev) +{ + int ret; + ret = adis16350_spi_write_reg_16(dev, + ADIS16350_MSC_CTRL, + ADIS16350_MSC_CTRL_MEM_TEST); + if (ret) { + dev_err(dev, "problem starting self test"); + goto err_ret; + } + + adis16350_check_status(dev); + +err_ret: + return ret; +} + +static int adis16350_check_status(struct device *dev) +{ + u16 status; + int ret; + + ret = adis16350_spi_read_reg_16(dev, ADIS16350_DIAG_STAT, &status); + + if (ret < 0) { + dev_err(dev, "Reading status failed\n"); + goto error_ret; + } + ret = status; + if (status & ADIS16350_DIAG_STAT_ZACCL_FAIL) + dev_err(dev, "Z-axis accelerometer self-test failure\n"); + if (status & ADIS16350_DIAG_STAT_YACCL_FAIL) + dev_err(dev, "Y-axis accelerometer self-test failure\n"); + if (status & ADIS16350_DIAG_STAT_XACCL_FAIL) + dev_err(dev, "X-axis accelerometer self-test failure\n"); + if (status & ADIS16350_DIAG_STAT_XGYRO_FAIL) + dev_err(dev, "X-axis gyroscope self-test failure\n"); + if (status & ADIS16350_DIAG_STAT_YGYRO_FAIL) + dev_err(dev, "Y-axis gyroscope self-test failure\n"); + if (status & ADIS16350_DIAG_STAT_ZGYRO_FAIL) + dev_err(dev, "Z-axis gyroscope self-test failure\n"); + if (status & ADIS16350_DIAG_STAT_ALARM2) + dev_err(dev, "Alarm 2 active\n"); + if (status & ADIS16350_DIAG_STAT_ALARM1) + dev_err(dev, "Alarm 1 active\n"); + if (status & ADIS16350_DIAG_STAT_FLASH_CHK) + dev_err(dev, "Flash checksum error\n"); + if (status & ADIS16350_DIAG_STAT_SELF_TEST) + dev_err(dev, "Self test error\n"); + if (status & ADIS16350_DIAG_STAT_OVERFLOW) + dev_err(dev, "Sensor overrange\n"); + if (status & ADIS16350_DIAG_STAT_SPI_FAIL) + dev_err(dev, "SPI failure\n"); + if (status & ADIS16350_DIAG_STAT_FLASH_UPT) + dev_err(dev, "Flash update failed\n"); + if (status & ADIS16350_DIAG_STAT_POWER_HIGH) + dev_err(dev, "Power supply above 5.25V\n"); + if (status & ADIS16350_DIAG_STAT_POWER_LOW) + dev_err(dev, "Power supply below 4.75V\n"); + +error_ret: + return ret; +} + +static int adis16350_initial_setup(struct adis16350_state *st) +{ + int ret; + u16 smp_prd; + struct device *dev = &st->indio_dev->dev; + + /* use low spi speed for init */ + st->us->max_speed_hz = ADIS16350_SPI_SLOW; + st->us->mode = SPI_MODE_3; + spi_setup(st->us); + + /* Disable IRQ */ + ret = adis16350_set_irq(dev, false); + if (ret) { + dev_err(dev, "disable irq failed"); + goto err_ret; + } + + /* Do self test */ + ret = adis16350_self_test(dev); + if (ret) { + dev_err(dev, "self test failure"); + goto err_ret; + } + + /* Read status register to check the result */ + ret = adis16350_check_status(dev); + if (ret) { + adis16350_reset(dev); + dev_err(dev, "device not playing ball -> reset"); + msleep(ADIS16350_STARTUP_DELAY); + ret = adis16350_check_status(dev); + if (ret) { + dev_err(dev, "giving up"); + goto err_ret; + } + } + + printk(KERN_INFO DRIVER_NAME ": at CS%d (irq %d)\n", + st->us->chip_select, st->us->irq); + + /* use high spi speed if possible */ + ret = adis16350_spi_read_reg_16(dev, ADIS16350_SMPL_PRD, &smp_prd); + if (!ret && (smp_prd & ADIS16350_SMPL_PRD_DIV_MASK) < 0x0A) { + st->us->max_speed_hz = ADIS16350_SPI_SLOW; + spi_setup(st->us); + } + +err_ret: + return ret; +} + +static IIO_DEV_ATTR_ACCEL_X_OFFSET(S_IWUSR | S_IRUGO, + adis16350_read_12bit_signed, + adis16350_write_16bit, + ADIS16350_XACCL_OFF); + +static IIO_DEV_ATTR_ACCEL_Y_OFFSET(S_IWUSR | S_IRUGO, + adis16350_read_12bit_signed, + adis16350_write_16bit, + ADIS16350_YACCL_OFF); + +static IIO_DEV_ATTR_ACCEL_Z_OFFSET(S_IWUSR | S_IRUGO, + adis16350_read_12bit_signed, + adis16350_write_16bit, + ADIS16350_ZACCL_OFF); + +static IIO_DEV_ATTR_IN_NAMED_RAW(supply, adis16350_read_12bit_unsigned, + ADIS16350_SUPPLY_OUT); +static IIO_CONST_ATTR(in_supply_scale, "0.002418"); + +static IIO_DEV_ATTR_GYRO_X(adis16350_read_14bit_signed, + ADIS16350_XGYRO_OUT); +static IIO_DEV_ATTR_GYRO_Y(adis16350_read_14bit_signed, + ADIS16350_YGYRO_OUT); +static IIO_DEV_ATTR_GYRO_Z(adis16350_read_14bit_signed, + ADIS16350_ZGYRO_OUT); +static IIO_CONST_ATTR(gyro_scale, "0.05"); + +static IIO_DEV_ATTR_ACCEL_X(adis16350_read_14bit_signed, + ADIS16350_XACCL_OUT); +static IIO_DEV_ATTR_ACCEL_Y(adis16350_read_14bit_signed, + ADIS16350_YACCL_OUT); +static IIO_DEV_ATTR_ACCEL_Z(adis16350_read_14bit_signed, + ADIS16350_ZACCL_OUT); +static IIO_CONST_ATTR(accel_scale, "0.00333"); + +static IIO_DEVICE_ATTR(temp_x_raw, S_IRUGO, adis16350_read_12bit_signed, + NULL, ADIS16350_XTEMP_OUT); +static IIO_DEVICE_ATTR(temp_y_raw, S_IRUGO, adis16350_read_12bit_signed, + NULL, ADIS16350_YTEMP_OUT); +static IIO_DEVICE_ATTR(temp_z_raw, S_IRUGO, adis16350_read_12bit_signed, + NULL, ADIS16350_ZTEMP_OUT); +static IIO_CONST_ATTR(temp_scale, "0.0005"); + +static IIO_DEV_ATTR_IN_RAW(0, adis16350_read_12bit_unsigned, + ADIS16350_AUX_ADC); +static IIO_CONST_ATTR(in0_scale, "0.000806"); + +static IIO_DEV_ATTR_SAMP_FREQ(S_IWUSR | S_IRUGO, + adis16350_read_frequency, + adis16350_write_frequency); + +static IIO_DEVICE_ATTR(reset, S_IWUSR, NULL, + adis16350_write_reset, 0); + +static IIO_CONST_ATTR_AVAIL_SAMP_FREQ("409 546 819 1638"); + +static IIO_CONST_ATTR(name, "adis16350"); + +static struct attribute *adis16350_attributes[] = { + &iio_dev_attr_accel_x_offset.dev_attr.attr, + &iio_dev_attr_accel_y_offset.dev_attr.attr, + &iio_dev_attr_accel_z_offset.dev_attr.attr, + &iio_dev_attr_in_supply_raw.dev_attr.attr, + &iio_const_attr_in_supply_scale.dev_attr.attr, + &iio_dev_attr_gyro_x_raw.dev_attr.attr, + &iio_dev_attr_gyro_y_raw.dev_attr.attr, + &iio_dev_attr_gyro_z_raw.dev_attr.attr, + &iio_const_attr_gyro_scale.dev_attr.attr, + &iio_dev_attr_accel_x_raw.dev_attr.attr, + &iio_dev_attr_accel_y_raw.dev_attr.attr, + &iio_dev_attr_accel_z_raw.dev_attr.attr, + &iio_const_attr_accel_scale.dev_attr.attr, + &iio_dev_attr_temp_x_raw.dev_attr.attr, + &iio_dev_attr_temp_y_raw.dev_attr.attr, + &iio_dev_attr_temp_z_raw.dev_attr.attr, + &iio_const_attr_temp_scale.dev_attr.attr, + &iio_dev_attr_in0_raw.dev_attr.attr, + &iio_const_attr_in0_scale.dev_attr.attr, + &iio_dev_attr_sampling_frequency.dev_attr.attr, + &iio_const_attr_available_sampling_frequency.dev_attr.attr, + &iio_dev_attr_reset.dev_attr.attr, + &iio_const_attr_name.dev_attr.attr, + NULL +}; + +static const struct attribute_group adis16350_attribute_group = { + .attrs = adis16350_attributes, +}; + +static struct attribute *adis16350_event_attributes[] = { + NULL, +}; + +static struct attribute_group adis16350_event_attribute_group = { + .attrs = adis16350_event_attributes, +}; + +static int __devinit adis16350_probe(struct spi_device *spi) +{ + int ret, regdone = 0; + struct adis16350_state *st = kzalloc(sizeof *st, GFP_KERNEL); + if (!st) { + ret = -ENOMEM; + goto error_ret; + } + /* this is only used for removal purposes */ + spi_set_drvdata(spi, st); + + /* Allocate the comms buffers */ + st->rx = kzalloc(sizeof(*st->rx)*ADIS16350_MAX_RX, GFP_KERNEL); + if (st->rx == NULL) { + ret = -ENOMEM; + goto error_free_st; + } + st->tx = kzalloc(sizeof(*st->tx)*ADIS16350_MAX_TX, GFP_KERNEL); + if (st->tx == NULL) { + ret = -ENOMEM; + goto error_free_rx; + } + st->us = spi; + mutex_init(&st->buf_lock); + /* setup the industrialio driver allocated elements */ + st->indio_dev = iio_allocate_device(); + if (st->indio_dev == NULL) { + ret = -ENOMEM; + goto error_free_tx; + } + + st->indio_dev->dev.parent = &spi->dev; + st->indio_dev->num_interrupt_lines = 1; + st->indio_dev->event_attrs = &adis16350_event_attribute_group; + st->indio_dev->attrs = &adis16350_attribute_group; + st->indio_dev->dev_data = (void *)(st); + st->indio_dev->driver_module = THIS_MODULE; + st->indio_dev->modes = INDIO_DIRECT_MODE; + + ret = adis16350_configure_ring(st->indio_dev); + if (ret) + goto error_free_dev; + + ret = iio_device_register(st->indio_dev); + if (ret) + goto error_unreg_ring_funcs; + regdone = 1; + + ret = adis16350_initialize_ring(st->indio_dev->ring); + if (ret) { + printk(KERN_ERR "failed to initialize the ring\n"); + goto error_unreg_ring_funcs; + } + + if (spi->irq) { + ret = iio_register_interrupt_line(spi->irq, + st->indio_dev, + 0, + IRQF_TRIGGER_RISING, + "adis16350"); + if (ret) + goto error_uninitialize_ring; + + ret = adis16350_probe_trigger(st->indio_dev); + if (ret) + goto error_unregister_line; + } + + /* Get the device into a sane initial state */ + ret = adis16350_initial_setup(st); + if (ret) + goto error_remove_trigger; + return 0; + +error_remove_trigger: + adis16350_remove_trigger(st->indio_dev); +error_unregister_line: + if (spi->irq) + iio_unregister_interrupt_line(st->indio_dev, 0); +error_uninitialize_ring: + adis16350_uninitialize_ring(st->indio_dev->ring); +error_unreg_ring_funcs: + adis16350_unconfigure_ring(st->indio_dev); +error_free_dev: + if (regdone) + iio_device_unregister(st->indio_dev); + else + iio_free_device(st->indio_dev); +error_free_tx: + kfree(st->tx); +error_free_rx: + kfree(st->rx); +error_free_st: + kfree(st); +error_ret: + return ret; +} + +static int adis16350_remove(struct spi_device *spi) +{ + int ret; + struct adis16350_state *st = spi_get_drvdata(spi); + struct iio_dev *indio_dev = st->indio_dev; + + ret = adis16350_stop_device(&(indio_dev->dev)); + if (ret) + goto err_ret; + + flush_scheduled_work(); + + adis16350_remove_trigger(indio_dev); + if (spi->irq) + iio_unregister_interrupt_line(indio_dev, 0); + + adis16350_uninitialize_ring(indio_dev->ring); + iio_device_unregister(indio_dev); + adis16350_unconfigure_ring(indio_dev); + kfree(st->tx); + kfree(st->rx); + kfree(st); + + return 0; + +err_ret: + return ret; +} + +static const struct spi_device_id adis16350_id[] = { + {"adis16350", 0}, + {"adis16354", 0}, + {"adis16355", 0}, + {"adis16360", 0}, + {"adis16362", 0}, + {"adis16364", 0}, + {"adis16365", 0}, + {} +}; + +static struct spi_driver adis16350_driver = { + .driver = { + .name = "adis16350", + .owner = THIS_MODULE, + }, + .probe = adis16350_probe, + .remove = __devexit_p(adis16350_remove), + .id_table = adis16350_id, +}; + +static __init int adis16350_init(void) +{ + return spi_register_driver(&adis16350_driver); +} +module_init(adis16350_init); + +static __exit void adis16350_exit(void) +{ + spi_unregister_driver(&adis16350_driver); +} +module_exit(adis16350_exit); + +MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>"); +MODULE_DESCRIPTION("Analog Devices ADIS16350/54/55/60/62/64/65 IMU SPI driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/staging/iio/imu/adis16350_ring.c b/drivers/staging/iio/imu/adis16350_ring.c new file mode 100644 index 0000000..5e9716e --- /dev/null +++ b/drivers/staging/iio/imu/adis16350_ring.c @@ -0,0 +1,286 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../ring_sw.h" +#include "../accel/accel.h" +#include "../trigger.h" +#include "adis16350.h" + +/** + * combine_8_to_16() utility function to munge to u8s into u16 + **/ +static inline u16 combine_8_to_16(u8 lower, u8 upper) +{ + u16 _lower = lower; + u16 _upper = upper; + return _lower | (_upper << 8); +} + +static IIO_SCAN_EL_C(supply, ADIS16350_SCAN_SUPPLY, IIO_UNSIGNED(12), + ADIS16350_SUPPLY_OUT, NULL); + +static IIO_SCAN_EL_C(gyro_x, ADIS16350_SCAN_GYRO_X, IIO_SIGNED(14), + ADIS16350_XGYRO_OUT, NULL); +static IIO_SCAN_EL_C(gyro_y, ADIS16350_SCAN_GYRO_Y, IIO_SIGNED(14), + ADIS16350_YGYRO_OUT, NULL); +static IIO_SCAN_EL_C(gyro_z, ADIS16350_SCAN_GYRO_Z, IIO_SIGNED(14), + ADIS16350_ZGYRO_OUT, NULL); + +static IIO_SCAN_EL_C(accel_x, ADIS16350_SCAN_ACC_X, IIO_SIGNED(14), + ADIS16350_XACCL_OUT, NULL); +static IIO_SCAN_EL_C(accel_y, ADIS16350_SCAN_ACC_Y, IIO_SIGNED(14), + ADIS16350_YACCL_OUT, NULL); +static IIO_SCAN_EL_C(accel_z, ADIS16350_SCAN_ACC_Z, IIO_SIGNED(14), + ADIS16350_ZACCL_OUT, NULL); + +static IIO_SCAN_EL_C(temp_x, ADIS16350_SCAN_TEMP_X, IIO_SIGNED(12), + ADIS16350_XTEMP_OUT, NULL); +static IIO_SCAN_EL_C(temp_y, ADIS16350_SCAN_TEMP_Y, IIO_SIGNED(12), + ADIS16350_YTEMP_OUT, NULL); +static IIO_SCAN_EL_C(temp_z, ADIS16350_SCAN_TEMP_Z, IIO_SIGNED(12), + ADIS16350_ZTEMP_OUT, NULL); + +static IIO_SCAN_EL_C(adc_0, ADIS16350_SCAN_ADC_0, IIO_UNSIGNED(12), + ADIS16350_AUX_ADC, NULL); + +static IIO_SCAN_EL_TIMESTAMP(11); + +static struct attribute *adis16350_scan_el_attrs[] = { + &iio_scan_el_supply.dev_attr.attr, + &iio_scan_el_gyro_x.dev_attr.attr, + &iio_scan_el_gyro_y.dev_attr.attr, + &iio_scan_el_gyro_z.dev_attr.attr, + &iio_scan_el_accel_x.dev_attr.attr, + &iio_scan_el_accel_y.dev_attr.attr, + &iio_scan_el_accel_z.dev_attr.attr, + &iio_scan_el_temp_x.dev_attr.attr, + &iio_scan_el_temp_y.dev_attr.attr, + &iio_scan_el_temp_z.dev_attr.attr, + &iio_scan_el_adc_0.dev_attr.attr, + &iio_scan_el_timestamp.dev_attr.attr, + NULL, +}; + +static struct attribute_group adis16350_scan_el_group = { + .attrs = adis16350_scan_el_attrs, + .name = "scan_elements", +}; + +/** + * adis16350_poll_func_th() top half interrupt handler called by trigger + * @private_data: iio_dev + **/ +static void adis16350_poll_func_th(struct iio_dev *indio_dev) +{ + struct adis16350_state *st = iio_dev_get_devdata(indio_dev); + st->last_timestamp = indio_dev->trig->timestamp; + schedule_work(&st->work_trigger_to_ring); +} + +/** + * adis16350_spi_read_burst() - read all data registers + * @dev: device associated with child of actual device (iio_dev or iio_trig) + * @rx: somewhere to pass back the value read (min size is 24 bytes) + **/ +static int adis16350_spi_read_burst(struct device *dev, u8 *rx) +{ + struct spi_message msg; + struct iio_dev *indio_dev = dev_get_drvdata(dev); + struct adis16350_state *st = iio_dev_get_devdata(indio_dev); + u32 old_speed_hz = st->us->max_speed_hz; + int ret; + + struct spi_transfer xfers[] = { + { + .tx_buf = st->tx, + .bits_per_word = 8, + .len = 2, + .cs_change = 0, + }, { + .rx_buf = rx, + .bits_per_word = 8, + .len = 22, + .cs_change = 0, + }, + }; + + mutex_lock(&st->buf_lock); + st->tx[0] = ADIS16350_READ_REG(ADIS16350_GLOB_CMD); + st->tx[1] = 0; + + spi_message_init(&msg); + spi_message_add_tail(&xfers[0], &msg); + spi_message_add_tail(&xfers[1], &msg); + + st->us->max_speed_hz = ADIS16350_SPI_BURST; + spi_setup(st->us); + + ret = spi_sync(st->us, &msg); + if (ret) + dev_err(&st->us->dev, "problem when burst reading"); + + st->us->max_speed_hz = old_speed_hz; + spi_setup(st->us); + mutex_unlock(&st->buf_lock); + return ret; +} + +/* Whilst this makes a lot of calls to iio_sw_ring functions - it is to device + * specific to be rolled into the core. + */ +static void adis16350_trigger_bh_to_ring(struct work_struct *work_s) +{ + struct adis16350_state *st + = container_of(work_s, struct adis16350_state, + work_trigger_to_ring); + + int i = 0; + s16 *data; + size_t datasize = st->indio_dev + ->ring->access.get_bpd(st->indio_dev->ring); + + data = kmalloc(datasize , GFP_KERNEL); + if (data == NULL) { + dev_err(&st->us->dev, "memory alloc failed in ring bh"); + return; + } + + if (st->indio_dev->scan_count) + if (adis16350_spi_read_burst(&st->indio_dev->dev, st->rx) >= 0) + for (; i < st->indio_dev->scan_count; i++) { + data[i] = combine_8_to_16(st->rx[i*2+1], + st->rx[i*2]); + } + + /* Guaranteed to be aligned with 8 byte boundary */ + if (st->indio_dev->scan_timestamp) + *((s64 *)(data + ((i + 3)/4)*4)) = st->last_timestamp; + + st->indio_dev->ring->access.store_to(st->indio_dev->ring, + (u8 *)data, + st->last_timestamp); + + iio_trigger_notify_done(st->indio_dev->trig); + kfree(data); + + return; +} + +static int adis16350_data_rdy_ring_preenable(struct iio_dev *indio_dev) +{ + size_t size; + dev_dbg(&indio_dev->dev, "%s\n", __func__); + /* Check if there are any scan elements enabled, if not fail*/ + if (!(indio_dev->scan_count || indio_dev->scan_timestamp)) + return -EINVAL; + + if (indio_dev->ring->access.set_bpd) { + if (indio_dev->scan_timestamp) + if (indio_dev->scan_count) + /* Timestamp (aligned sizeof(s64) and data */ + size = (((indio_dev->scan_count * sizeof(s16)) + + sizeof(s64) - 1) + & ~(sizeof(s64) - 1)) + + sizeof(s64); + else /* Timestamp only */ + size = sizeof(s64); + else /* Data only */ + size = indio_dev->scan_count*sizeof(s16); + indio_dev->ring->access.set_bpd(indio_dev->ring, size); + } + + return 0; +} + +static int adis16350_data_rdy_ring_postenable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_attach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +static int adis16350_data_rdy_ring_predisable(struct iio_dev *indio_dev) +{ + return indio_dev->trig + ? iio_trigger_dettach_poll_func(indio_dev->trig, + indio_dev->pollfunc) + : 0; +} + +void adis16350_unconfigure_ring(struct iio_dev *indio_dev) +{ + kfree(indio_dev->pollfunc); + iio_sw_rb_free(indio_dev->ring); +} + +int adis16350_configure_ring(struct iio_dev *indio_dev) +{ + int ret = 0; + struct adis16350_state *st = indio_dev->dev_data; + struct iio_ring_buffer *ring; + INIT_WORK(&st->work_trigger_to_ring, adis16350_trigger_bh_to_ring); + /* Set default scan mode */ + + iio_scan_mask_set(indio_dev, iio_scan_el_supply.number); + iio_scan_mask_set(indio_dev, iio_scan_el_gyro_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_gyro_y.number); + iio_scan_mask_set(indio_dev, iio_scan_el_gyro_z.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_y.number); + iio_scan_mask_set(indio_dev, iio_scan_el_accel_z.number); + iio_scan_mask_set(indio_dev, iio_scan_el_temp_x.number); + iio_scan_mask_set(indio_dev, iio_scan_el_temp_y.number); + iio_scan_mask_set(indio_dev, iio_scan_el_temp_z.number); + iio_scan_mask_set(indio_dev, iio_scan_el_adc_0.number); + indio_dev->scan_timestamp = true; + + indio_dev->scan_el_attrs = &adis16350_scan_el_group; + + ring = iio_sw_rb_allocate(indio_dev); + if (!ring) { + ret = -ENOMEM; + return ret; + } + indio_dev->ring = ring; + /* Effectively select the ring buffer implementation */ + iio_ring_sw_register_funcs(&ring->access); + ring->preenable = &adis16350_data_rdy_ring_preenable; + ring->postenable = &adis16350_data_rdy_ring_postenable; + ring->predisable = &adis16350_data_rdy_ring_predisable; + ring->owner = THIS_MODULE; + + indio_dev->pollfunc = kzalloc(sizeof(*indio_dev->pollfunc), GFP_KERNEL); + if (indio_dev->pollfunc == NULL) { + ret = -ENOMEM; + goto error_iio_sw_rb_free;; + } + indio_dev->pollfunc->poll_func_main = &adis16350_poll_func_th; + indio_dev->pollfunc->private_data = indio_dev; + indio_dev->modes |= INDIO_RING_TRIGGERED; + return 0; + +error_iio_sw_rb_free: + iio_sw_rb_free(indio_dev->ring); + return ret; +} + +int adis16350_initialize_ring(struct iio_ring_buffer *ring) +{ + return iio_ring_buffer_register(ring, 0); +} + +void adis16350_uninitialize_ring(struct iio_ring_buffer *ring) +{ + iio_ring_buffer_unregister(ring); +} diff --git a/drivers/staging/iio/imu/adis16350_trigger.c b/drivers/staging/iio/imu/adis16350_trigger.c new file mode 100644 index 0000000..1ffa75d --- /dev/null +++ b/drivers/staging/iio/imu/adis16350_trigger.c @@ -0,0 +1,127 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../iio.h" +#include "../sysfs.h" +#include "../trigger.h" +#include "adis16350.h" + +/** + * adis16350_data_rdy_trig_poll() the event handler for the data rdy trig + **/ +static int adis16350_data_rdy_trig_poll(struct iio_dev *dev_info, + int index, + s64 timestamp, + int no_test) +{ + struct adis16350_state *st = iio_dev_get_devdata(dev_info); + struct iio_trigger *trig = st->trig; + + trig->timestamp = timestamp; + iio_trigger_poll(trig); + + return IRQ_HANDLED; +} + +IIO_EVENT_SH(data_rdy_trig, &adis16350_data_rdy_trig_poll); + +static DEVICE_ATTR(name, S_IRUGO, iio_trigger_read_name, NULL); + +static struct attribute *adis16350_trigger_attrs[] = { + &dev_attr_name.attr, + NULL, +}; + +static const struct attribute_group adis16350_trigger_attr_group = { + .attrs = adis16350_trigger_attrs, +}; + +/** + * adis16350_data_rdy_trigger_set_state() set datardy interrupt state + **/ +static int adis16350_data_rdy_trigger_set_state(struct iio_trigger *trig, + bool state) +{ + struct adis16350_state *st = trig->private_data; + struct iio_dev *indio_dev = st->indio_dev; + int ret = 0; + + dev_dbg(&indio_dev->dev, "%s (%d)\n", __func__, state); + ret = adis16350_set_irq(&st->indio_dev->dev, state); + if (state == false) { + iio_remove_event_from_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0] + ->ev_list); + /* possible quirk with handler currently worked around + by ensuring the work queue is empty */ + flush_scheduled_work(); + } else { + iio_add_event_to_list(&iio_event_data_rdy_trig, + &indio_dev->interrupts[0]->ev_list); + } + return ret; +} + +/** + * adis16350_trig_try_reen() try renabling irq for data rdy trigger + * @trig: the datardy trigger + **/ +static int adis16350_trig_try_reen(struct iio_trigger *trig) +{ + struct adis16350_state *st = trig->private_data; + enable_irq(st->us->irq); + /* irq reenabled so success! */ + return 0; +} + +int adis16350_probe_trigger(struct iio_dev *indio_dev) +{ + int ret; + struct adis16350_state *st = indio_dev->dev_data; + + st->trig = iio_allocate_trigger(); + st->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL); + if (!st->trig->name) { + ret = -ENOMEM; + goto error_free_trig; + } + snprintf((char *)st->trig->name, + IIO_TRIGGER_NAME_LENGTH, + "adis16350-dev%d", indio_dev->id); + st->trig->dev.parent = &st->us->dev; + st->trig->owner = THIS_MODULE; + st->trig->private_data = st; + st->trig->set_trigger_state = &adis16350_data_rdy_trigger_set_state; + st->trig->try_reenable = &adis16350_trig_try_reen; + st->trig->control_attrs = &adis16350_trigger_attr_group; + ret = iio_trigger_register(st->trig); + + /* select default trigger */ + indio_dev->trig = st->trig; + if (ret) + goto error_free_trig_name; + + return 0; + +error_free_trig_name: + kfree(st->trig->name); +error_free_trig: + iio_free_trigger(st->trig); + + return ret; +} + +void adis16350_remove_trigger(struct iio_dev *indio_dev) +{ + struct adis16350_state *state = indio_dev->dev_data; + + iio_trigger_unregister(state->trig); + kfree(state->trig->name); + iio_free_trigger(state->trig); +} -- cgit v0.10.2 From 026386976067996a6fc084b1926558522126cfdd Mon Sep 17 00:00:00 2001 From: Mark Date: Mon, 17 May 2010 19:34:27 +0800 Subject: Staging: comedi: Altered the way printk is used in 8255.c This patch moves around the use of printk calls in 8255.c to include accurate logging levels and in turn fixes a few warnings from checkpatch. Signed-off-by: Mark Rankilor Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/8255.c b/drivers/staging/comedi/drivers/8255.c index b2e80dd..fe63830 100644 --- a/drivers/staging/comedi/drivers/8255.c +++ b/drivers/staging/comedi/drivers/8255.c @@ -396,8 +396,6 @@ static int dev_8255_attach(struct comedi_device *dev, unsigned long iobase; int i; - printk("comedi%d: 8255:", dev->minor); - dev->board_name = "8255"; for (i = 0; i < COMEDI_NDEVCONFOPTS; i++) { @@ -406,13 +404,20 @@ static int dev_8255_attach(struct comedi_device *dev, break; } if (i == 0) { - printk(" no devices specified\n"); + printk(KERN_WARNING + "comedi%d: 8255: no devices specified\n", dev->minor); return -EINVAL; } ret = alloc_subdevices(dev, i); - if (ret < 0) + if (ret < 0) { + /* FIXME this printk call should give a proper message, the + * below line just maintains previous functionality */ + printk("comedi%d: 8255:", dev->minor); return ret; + } + + printk(KERN_INFO "comedi%d: 8255:", dev->minor); for (i = 0; i < dev->n_subdevices; i++) { iobase = it->options[i]; @@ -439,7 +444,7 @@ static int dev_8255_detach(struct comedi_device *dev) unsigned long iobase; struct comedi_subdevice *s; - printk("comedi%d: 8255: remove\n", dev->minor); + printk(KERN_INFO "comedi%d: 8255: remove\n", dev->minor); for (i = 0; i < dev->n_subdevices; i++) { s = dev->subdevices + i; -- cgit v0.10.2 From 213d2e9322ed509c2f80b07d7feb4427ebcd7b0b Mon Sep 17 00:00:00 2001 From: Andres More Date: Mon, 17 May 2010 21:34:00 -0300 Subject: Staging: vt6656: removed custom CHAR/SHORT/INT/LONG typedefs Cleared all checkpatch warnings but one 'do not add new typedefs' Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index 8c68e04..a10c463 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -608,7 +608,7 @@ BOOL BSSbUpdateToBSSList(void *hDeviceContext, PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); PSRxMgmtPacket pRxPacket = (PSRxMgmtPacket)pRxPacketContext; - LONG ldBm, ldBmSum; + signed long ldBm, ldBmSum; BOOL bParsingQuiet = FALSE; // BYTE abyTmpSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; @@ -1550,9 +1550,9 @@ void s_vCheckSensitivity(void *hDeviceContext) ((pMgmt->eCurrMode == WMAC_MODE_IBSS_STA) && (pMgmt->eCurrState == WMAC_STATE_JOINTED))) { pBSSList = BSSpAddrIsInBSSList(pDevice, pMgmt->abyCurrBSSID, (PWLAN_IE_SSID)pMgmt->abyCurrSSID); if (pBSSList != NULL) { - // Updata BB Reg if RSSI is too strong. - LONG LocalldBmAverage = 0; - LONG uNumofdBm = 0; + /* Update BB register if RSSI is too strong */ + signed long LocalldBmAverage = 0; + signed long uNumofdBm = 0; for (ii = 0; ii < RSSI_STAT_COUNT; ii++) { if (pBSSList->ldBmAverage[ii] != 0) { uNumofdBm ++; diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h index 8140b9b..0158b0b 100644 --- a/drivers/staging/vt6656/bssdb.h +++ b/drivers/staging/vt6656/bssdb.h @@ -109,9 +109,9 @@ typedef struct tagKnownBSS { // WORD wATIMWindow; BYTE byRSSIStatCnt; - LONG ldBmMAX; - LONG ldBmAverage[RSSI_STAT_COUNT]; - LONG ldBmAverRange; + signed long ldBmMAX; + signed long ldBmAverage[RSSI_STAT_COUNT]; + signed long ldBmAverRange; //For any BSSID selection improvment BOOL bSelected; diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index 06a213f..c9b8b19 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -116,7 +116,7 @@ static SChannelTblElement sChannelTbl[CB_MAX_CHANNEL+1] = static struct { BYTE byChannelCountryCode; /* The country code */ - CHAR chCountryCode[2]; + char chCountryCode[2]; BYTE bChannelIdxList[CB_MAX_CHANNEL]; /* Available channels Index */ BYTE byPower[CB_MAX_CHANNEL]; } ChannelRuleTab[] = diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index b507bb8..eb45ee5 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -210,7 +210,7 @@ typedef enum _CONTEXT_TYPE { typedef struct _RCB { void *Next; - LONG Ref; + signed long Ref; void *pDevice; struct urb *pUrb; SRxMgmtPacket sMngPacket; @@ -234,16 +234,15 @@ typedef struct _USB_SEND_CONTEXT { } USB_SEND_CONTEXT, *PUSB_SEND_CONTEXT; -//structure got from configuration file as user desired default setting. -typedef struct _DEFAULT_CONFIG{ - INT ZoneType; - INT eConfigMode; - INT eAuthenMode; //open/wep/wpa - INT bShareKeyAlgorithm; //open-open/open-sharekey/wep-sharekey - INT keyidx; //wepkey index - INT eEncryptionStatus; - -}DEFAULT_CONFIG,*PDEFAULT_CONFIG; +/* structure got from configuration file as user-desired default settings */ +typedef struct _DEFAULT_CONFIG { + signed int ZoneType; + signed int eConfigMode; + signed int eAuthenMode; /* open/wep/wpa */ + signed int bShareKeyAlgorithm; /* open-open/{open,wep}-sharekey */ + signed int keyidx; /* wepkey index */ + signed int eEncryptionStatus; +} DEFAULT_CONFIG, *PDEFAULT_CONFIG; // // Structure to keep track of usb interrupt packets @@ -785,7 +784,7 @@ typedef struct __device_info { BYTE byBBVGANew; BYTE byBBVGACurrent; BYTE abyBBVGA[BB_VGA_LEVEL]; - LONG ldBmThreshold[BB_VGA_LEVEL]; + signed long ldBmThreshold[BB_VGA_LEVEL]; BYTE byBBPreEDRSSI; BYTE byBBPreEDIndex; diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index 6982224..d9a02ba 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -98,7 +98,7 @@ s_vProcessRxMACHeader ( static BOOL s_bAPModeRxCtl( PSDevice pDevice, PBYTE pbyFrame, - INT iSANodeIndex + signed int iSANodeIndex ); @@ -108,8 +108,8 @@ static BOOL s_bAPModeRxData ( struct sk_buff *skb, UINT FrameSize, UINT cbHeaderOffset, - INT iSANodeIndex, - INT iDANodeIndex + signed int iSANodeIndex, + signed int iDANodeIndex ); @@ -336,8 +336,8 @@ RXbBulkInProcessData ( UINT cbHeaderOffset; UINT FrameSize; WORD wEtherType = 0; - INT iSANodeIndex = -1; - INT iDANodeIndex = -1; + signed int iSANodeIndex = -1; + signed int iDANodeIndex = -1; UINT ii; UINT cbIVOffset; PBYTE pbyRxSts; @@ -352,7 +352,7 @@ RXbBulkInProcessData ( DWORD dwRxTSC47_16 = 0; SKeyItem STempKey; // 802.11h RPI - //LONG ldBm = 0; + /* signed long ldBm = 0; */ BOOL bIsWEP = FALSE; BOOL bExtIV = FALSE; DWORD dwWbkStatus; @@ -1023,7 +1023,7 @@ RXbBulkInProcessData ( static BOOL s_bAPModeRxCtl ( PSDevice pDevice, PBYTE pbyFrame, - INT iSANodeIndex + signed int iSANodeIndex ) { PS802_11Header p802_11Header; @@ -1431,8 +1431,8 @@ static BOOL s_bAPModeRxData ( struct sk_buff *skb, UINT FrameSize, UINT cbHeaderOffset, - INT iSANodeIndex, - INT iDANodeIndex + signed int iSANodeIndex, + signed int iDANodeIndex ) { diff --git a/drivers/staging/vt6656/ioctl.c b/drivers/staging/vt6656/ioctl.c index 69d1d73..368e49f 100644 --- a/drivers/staging/vt6656/ioctl.c +++ b/drivers/staging/vt6656/ioctl.c @@ -81,7 +81,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { BYTE abyNullAddr[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; DWORD dwKeyIndex= 0; BYTE abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; - LONG ldBm; + signed long ldBm; pReq->wResult = 0; diff --git a/drivers/staging/vt6656/mib.c b/drivers/staging/vt6656/mib.c index b6f138e..efcd81c 100644 --- a/drivers/staging/vt6656/mib.c +++ b/drivers/staging/vt6656/mib.c @@ -187,87 +187,114 @@ void STAvUpdateRDStatCounter (PSStatCounter pStatistic, if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr11MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"11M: ALL[%d], OK[%d]:[%02x]\n", (INT)pStatistic->CustomStat.ullRsr11M, (INT)pStatistic->CustomStat.ullRsr11MCRCOk, byRSR); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "11M: ALL[%d], OK[%d]:[%02x]\n", + (signed int) pStatistic->CustomStat.ullRsr11M, + (signed int) pStatistic->CustomStat.ullRsr11MCRCOk, byRSR); } else if(byRxRate==11) { pStatistic->CustomStat.ullRsr5M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr5MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 5M: ALL[%d], OK[%d]:[%02x]\n", (INT)pStatistic->CustomStat.ullRsr5M, (INT)pStatistic->CustomStat.ullRsr5MCRCOk, byRSR); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 5M: ALL[%d], OK[%d]:[%02x]\n", + (signed int) pStatistic->CustomStat.ullRsr5M, + (signed int) pStatistic->CustomStat.ullRsr5MCRCOk, byRSR); } else if(byRxRate==4) { pStatistic->CustomStat.ullRsr2M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr2MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 2M: ALL[%d], OK[%d]:[%02x]\n", (INT)pStatistic->CustomStat.ullRsr2M, (INT)pStatistic->CustomStat.ullRsr2MCRCOk, byRSR); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 2M: ALL[%d], OK[%d]:[%02x]\n", + (signed int) pStatistic->CustomStat.ullRsr2M, + (signed int) pStatistic->CustomStat.ullRsr2MCRCOk, byRSR); } else if(byRxRate==2){ pStatistic->CustomStat.ullRsr1M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr1MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 1M: ALL[%d], OK[%d]:[%02x]\n", (INT)pStatistic->CustomStat.ullRsr1M, (INT)pStatistic->CustomStat.ullRsr1MCRCOk, byRSR); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 1M: ALL[%d], OK[%d]:[%02x]\n", + (signed int) pStatistic->CustomStat.ullRsr1M, + (signed int) pStatistic->CustomStat.ullRsr1MCRCOk, byRSR); } else if(byRxRate==12){ pStatistic->CustomStat.ullRsr6M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr6MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 6M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr6M, (INT)pStatistic->CustomStat.ullRsr6MCRCOk); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 6M: ALL[%d], OK[%d]\n", + (signed int) pStatistic->CustomStat.ullRsr6M, + (signed int) pStatistic->CustomStat.ullRsr6MCRCOk); } else if(byRxRate==18){ pStatistic->CustomStat.ullRsr9M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr9MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO" 9M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr9M, (INT)pStatistic->CustomStat.ullRsr9MCRCOk); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " 9M: ALL[%d], OK[%d]\n", + (signed int) pStatistic->CustomStat.ullRsr9M, + (signed int) pStatistic->CustomStat.ullRsr9MCRCOk); } else if(byRxRate==24){ pStatistic->CustomStat.ullRsr12M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr12MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"12M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr12M, (INT)pStatistic->CustomStat.ullRsr12MCRCOk); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "12M: ALL[%d], OK[%d]\n", + (signed int) pStatistic->CustomStat.ullRsr12M, + (signed int) pStatistic->CustomStat.ullRsr12MCRCOk); } else if(byRxRate==36){ pStatistic->CustomStat.ullRsr18M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr18MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"18M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr18M, (INT)pStatistic->CustomStat.ullRsr18MCRCOk); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "18M: ALL[%d], OK[%d]\n", + (signed int) pStatistic->CustomStat.ullRsr18M, + (signed int) pStatistic->CustomStat.ullRsr18MCRCOk); } else if(byRxRate==48){ pStatistic->CustomStat.ullRsr24M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr24MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"24M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr24M, (INT)pStatistic->CustomStat.ullRsr24MCRCOk); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "24M: ALL[%d], OK[%d]\n", + (signed int) pStatistic->CustomStat.ullRsr24M, + (signed int) pStatistic->CustomStat.ullRsr24MCRCOk); } else if(byRxRate==72){ pStatistic->CustomStat.ullRsr36M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr36MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"36M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr36M, (INT)pStatistic->CustomStat.ullRsr36MCRCOk); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "36M: ALL[%d], OK[%d]\n", + (signed int) pStatistic->CustomStat.ullRsr36M, + (signed int) pStatistic->CustomStat.ullRsr36MCRCOk); } else if(byRxRate==96){ pStatistic->CustomStat.ullRsr48M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr48MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"48M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr48M, (INT)pStatistic->CustomStat.ullRsr48MCRCOk); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "48M: ALL[%d], OK[%d]\n", + (signed int) pStatistic->CustomStat.ullRsr48M, + (signed int) pStatistic->CustomStat.ullRsr48MCRCOk); } else if(byRxRate==108){ pStatistic->CustomStat.ullRsr54M++; if(byRSR & RSR_CRCOK) { pStatistic->CustomStat.ullRsr54MCRCOk++; } - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"54M: ALL[%d], OK[%d]\n", (INT)pStatistic->CustomStat.ullRsr54M, (INT)pStatistic->CustomStat.ullRsr54MCRCOk); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "54M: ALL[%d], OK[%d]\n", + (signed int) pStatistic->CustomStat.ullRsr54M, + (signed int) pStatistic->CustomStat.ullRsr54MCRCOk); } else { - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Unknown: Total[%d], CRCOK[%d]\n", (INT)pStatistic->dwRsrRxPacket+1, (INT)pStatistic->dwRsrCRCOk); + DBG_PRT(MSG_LEVEL_DEBUG, + KERN_INFO "Unknown: Total[%d], CRCOK[%d]\n", + (signed int) pStatistic->dwRsrRxPacket+1, + (signed int)pStatistic->dwRsrCRCOk); } if (byRSR & RSR_BSSIDOK) diff --git a/drivers/staging/vt6656/mib.h b/drivers/staging/vt6656/mib.h index 8a532e8..8cc5b3f 100644 --- a/drivers/staging/vt6656/mib.h +++ b/drivers/staging/vt6656/mib.h @@ -85,15 +85,15 @@ typedef struct tagSDot11Counters { // MIB2 counter // typedef struct tagSMib2Counter { - LONG ifIndex; + signed long ifIndex; char ifDescr[256]; // max size 255 plus zero ending // e.g. "interface 1" - LONG ifType; - LONG ifMtu; + signed long ifType; + signed long ifMtu; DWORD ifSpeed; BYTE ifPhysAddress[ETH_ALEN]; - LONG ifAdminStatus; - LONG ifOperStatus; + signed long ifAdminStatus; + signed long ifOperStatus; DWORD ifLastChange; DWORD ifInOctets; DWORD ifInUcastPkts; @@ -124,7 +124,7 @@ typedef struct tagSMib2Counter { // RMON counter // typedef struct tagSRmonCounter { - LONG etherStatsIndex; + signed long etherStatsIndex; DWORD etherStatsDataSource; DWORD etherStatsDropEvents; DWORD etherStatsOctets; diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 1126cb4..4c4f5f6 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -962,8 +962,8 @@ RFvRSSITodBm ( ) { BYTE byIdx = (((byCurrRSSI & 0xC0) >> 6) & 0x03); - LONG b = (byCurrRSSI & 0x3F); - LONG a = 0; + signed long b = (byCurrRSSI & 0x3F); + signed long a = 0; BYTE abyAIROHARF[4] = {0, 18, 0, 40}; switch (pDevice->byRFType) { diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index 4dfe00a..3a29775 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -72,11 +72,6 @@ typedef int BOOL; /****** Simple typedefs ***************************************************/ -typedef char CHAR; -typedef signed short SHORT; -typedef signed int INT; -typedef signed long LONG; - typedef unsigned char UCHAR; typedef unsigned short USHORT; typedef unsigned int UINT; -- cgit v0.10.2 From cc856e61ee4ffb150ff352e3d6940978a2f819e8 Mon Sep 17 00:00:00 2001 From: Andres More Date: Mon, 17 May 2010 21:34:01 -0300 Subject: Staging: vt6656: removed custom UCHAR/USHORT/UINT/ULONG/ULONGLONG typedefs Cleared all checkpatch warnings but 'do not add new typedefs' ones. Signed-off-by: Andres More Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/80211mgr.h b/drivers/staging/vt6656/80211mgr.h index 50982e9..c140a95 100644 --- a/drivers/staging/vt6656/80211mgr.h +++ b/drivers/staging/vt6656/80211mgr.h @@ -524,8 +524,8 @@ typedef struct _WLAN_IE_IBSS_DFS { // prototype structure, all mgmt frame types will start with these members typedef struct tagWLAN_FR_MGMT { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; @@ -534,8 +534,8 @@ typedef struct tagWLAN_FR_MGMT { // Beacon frame typedef struct tagWLAN_FR_BEACON { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; // fixed fields @@ -566,8 +566,8 @@ typedef struct tagWLAN_FR_BEACON { // IBSS ATIM frame typedef struct tagWLAN_FR_IBSSATIM { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; @@ -580,8 +580,8 @@ typedef struct tagWLAN_FR_IBSSATIM { // Disassociation typedef struct tagWLAN_FR_DISASSOC { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ @@ -593,8 +593,8 @@ typedef struct tagWLAN_FR_DISASSOC { // Association Request typedef struct tagWLAN_FR_ASSOCREQ { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ @@ -617,8 +617,8 @@ typedef struct tagWLAN_FR_ASSOCREQ { // Association Response typedef struct tagWLAN_FR_ASSOCRESP { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ @@ -634,8 +634,8 @@ typedef struct tagWLAN_FR_ASSOCRESP { // Reassociation Request typedef struct tagWLAN_FR_REASSOCREQ { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; @@ -659,8 +659,8 @@ typedef struct tagWLAN_FR_REASSOCREQ { // Reassociation Response typedef struct tagWLAN_FR_REASSOCRESP { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ @@ -676,8 +676,8 @@ typedef struct tagWLAN_FR_REASSOCRESP { // Probe Request typedef struct tagWLAN_FR_PROBEREQ { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ @@ -691,8 +691,8 @@ typedef struct tagWLAN_FR_PROBEREQ { // Probe Response typedef struct tagWLAN_FR_PROBERESP { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ @@ -720,8 +720,8 @@ typedef struct tagWLAN_FR_PROBERESP { // Authentication typedef struct tagWLAN_FR_AUTHEN { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ @@ -736,8 +736,8 @@ typedef struct tagWLAN_FR_AUTHEN { // Deauthenication typedef struct tagWLAN_FR_DEAUTHEN { - UINT uType; - UINT len; + unsigned int uType; + unsigned int len; PBYTE pBuf; PUWLAN_80211HDR pHdr; /*-- fixed fields -----------*/ diff --git a/drivers/staging/vt6656/baseband.c b/drivers/staging/vt6656/baseband.c index 01680e6..d3de94f 100644 --- a/drivers/staging/vt6656/baseband.c +++ b/drivers/staging/vt6656/baseband.c @@ -662,11 +662,11 @@ const WORD awcFrameTime[MAX_RATE] = /* static -ULONG +unsigned long s_ulGetLowSQ3(PSDevice pDevice); static -ULONG +unsigned long s_ulGetRatio(PSDevice pDevice); static @@ -689,19 +689,19 @@ s_vClearSQ3Value(PSDevice pDevice); * Return Value: FrameTime * */ -UINT +unsigned int BBuGetFrameTime ( BYTE byPreambleType, BYTE byPktType, - UINT cbFrameLength, + unsigned int cbFrameLength, WORD wRate ) { - UINT uFrameTime; - UINT uPreamble; - UINT uTmp; - UINT uRateIdx = (UINT)wRate; - UINT uRate = 0; + unsigned int uFrameTime; + unsigned int uPreamble; + unsigned int uTmp; + unsigned int uRateIdx = (unsigned int)wRate; + unsigned int uRate = 0; if (uRateIdx > RATE_54M) { @@ -709,7 +709,7 @@ BBuGetFrameTime ( return 0; } - uRate = (UINT)awcFrameTime[uRateIdx]; + uRate = (unsigned int)awcFrameTime[uRateIdx]; if (uRateIdx <= 3) { //CCK mode @@ -759,7 +759,7 @@ BBuGetFrameTime ( void BBvCaculateParameter ( PSDevice pDevice, - UINT cbFrameLength, + unsigned int cbFrameLength, WORD wRate, BYTE byPacketType, PWORD pwPhyLen, @@ -767,9 +767,9 @@ BBvCaculateParameter ( PBYTE pbyPhySgn ) { - UINT cbBitCount; - UINT cbUsCount = 0; - UINT cbTmp; + unsigned int cbBitCount; + unsigned int cbUsCount = 0; + unsigned int cbTmp; BOOL bExtBit; BYTE byPreambleType = pDevice->byPreambleType; BOOL bCCK = pDevice->bCCK; @@ -1360,13 +1360,11 @@ BBvExitDeepSleep (PSDevice pDevice) } -static -ULONG -s_ulGetLowSQ3(PSDevice pDevice) +static unsigned long s_ulGetLowSQ3(PSDevice pDevice) { -int ii; -ULONG ulSQ3 = 0; -ULONG ulMaxPacket; + int ii; + unsigned long ulSQ3 = 0; + unsigned long ulMaxPacket; ulMaxPacket = pDevice->aulPktNum[RATE_54M]; if ( pDevice->aulPktNum[RATE_54M] != 0 ) { @@ -1382,16 +1380,12 @@ ULONG ulMaxPacket; return ulSQ3; } - - -static -ULONG -s_ulGetRatio (PSDevice pDevice) +static unsigned long s_ulGetRatio(PSDevice pDevice) { -int ii,jj; -ULONG ulRatio = 0; -ULONG ulMaxPacket; -ULONG ulPacketNum; + int ii, jj; + unsigned long ulRatio = 0; + unsigned long ulMaxPacket; + unsigned long ulPacketNum; //This is a thousand-ratio ulMaxPacket = pDevice->aulPktNum[RATE_54M]; diff --git a/drivers/staging/vt6656/baseband.h b/drivers/staging/vt6656/baseband.h index d59992c..bc4633d 100644 --- a/drivers/staging/vt6656/baseband.h +++ b/drivers/staging/vt6656/baseband.h @@ -96,18 +96,18 @@ /*--------------------- Export Functions --------------------------*/ -UINT +unsigned int BBuGetFrameTime( BYTE byPreambleType, BYTE byFreqType, - UINT cbFrameLength, + unsigned int cbFrameLength, WORD wRate ); void BBvCaculateParameter ( PSDevice pDevice, - UINT cbFrameLength, + unsigned int cbFrameLength, WORD wRate, BYTE byPacketType, PWORD pwPhyLen, diff --git a/drivers/staging/vt6656/bssdb.c b/drivers/staging/vt6656/bssdb.c index a10c463..36ed61b 100644 --- a/drivers/staging/vt6656/bssdb.c +++ b/drivers/staging/vt6656/bssdb.c @@ -129,8 +129,8 @@ PKnownBSS BSSpSearchBSSList(void *hDeviceContext, PKnownBSS pCurrBSS = NULL; PKnownBSS pSelect = NULL; BYTE ZeroBSSID[WLAN_BSSID_LEN]={0x00,0x00,0x00,0x00,0x00,0x00}; - UINT ii = 0; - UINT jj = 0; //DavidWang + unsigned int ii = 0; + unsigned int jj = 0; if (pbyDesireBSSID != NULL) { DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"BSSpSearchBSSList BSSID[%02X %02X %02X-%02X %02X %02X]\n", *pbyDesireBSSID,*(pbyDesireBSSID+1),*(pbyDesireBSSID+2), @@ -291,7 +291,7 @@ void BSSvClearBSSList(void *hDeviceContext, BOOL bKeepCurrBSSID) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT ii; + unsigned int ii; for (ii = 0; ii < MAX_BSS_NUM; ii++) { if (bKeepCurrBSSID) { @@ -336,7 +336,7 @@ PKnownBSS BSSpAddrIsInBSSList(void *hDeviceContext, PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); PKnownBSS pBSSList = NULL; - UINT ii; + unsigned int ii; for (ii = 0; ii < MAX_BSS_NUM; ii++) { pBSSList = &(pMgmt->sBSSList[ii]); @@ -381,7 +381,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, PWLAN_IE_RSN_EXT pRSNWPA, PWLAN_IE_COUNTRY pIE_Country, PWLAN_IE_QUIET pIE_Quiet, - UINT uIELength, + unsigned int uIELength, PBYTE pbyIEs, void *pRxPacketContext) { @@ -390,7 +390,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, PSMgmtObject pMgmt = &(pDevice->sMgmtObj); PSRxMgmtPacket pRxPacket = (PSRxMgmtPacket)pRxPacketContext; PKnownBSS pBSSList = NULL; - UINT ii; + unsigned int ii; BOOL bParsingQuiet = FALSE; @@ -465,24 +465,27 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, WPA_ClearRSN(pBSSList); if (pRSNWPA != NULL) { - UINT uLen = pRSNWPA->len + 2; - - if (uLen <= (uIELength - (UINT)(ULONG_PTR)((PBYTE)pRSNWPA - pbyIEs))) { - pBSSList->wWPALen = uLen; - memcpy(pBSSList->byWPAIE, pRSNWPA, uLen); - WPA_ParseRSN(pBSSList, pRSNWPA); - } + unsigned int uLen = pRSNWPA->len + 2; + + if (uLen <= (uIELength - + (unsigned int) (ULONG_PTR) ((PBYTE) pRSNWPA - pbyIEs))) { + pBSSList->wWPALen = uLen; + memcpy(pBSSList->byWPAIE, pRSNWPA, uLen); + WPA_ParseRSN(pBSSList, pRSNWPA); + } } WPA2_ClearRSN(pBSSList); if (pRSN != NULL) { - UINT uLen = pRSN->len + 2; - if (uLen <= (uIELength - (UINT)(ULONG_PTR)((PBYTE)pRSN - pbyIEs))) { - pBSSList->wRSNLen = uLen; - memcpy(pBSSList->byRSNIE, pRSN, uLen); - WPA2vParseRSN(pBSSList, pRSN); - } + unsigned int uLen = pRSN->len + 2; + + if (uLen <= (uIELength - + (unsigned int) (ULONG_PTR) ((PBYTE) pRSN - pbyIEs))) { + pBSSList->wRSNLen = uLen; + memcpy(pBSSList->byRSNIE, pRSN, uLen); + WPA2vParseRSN(pBSSList, pRSN); + } } if ((pMgmt->eAuthenMode == WMAC_AUTH_WPA2) || (pBSSList->bWPA2Valid == TRUE)) { @@ -600,7 +603,7 @@ BOOL BSSbUpdateToBSSList(void *hDeviceContext, PWLAN_IE_COUNTRY pIE_Country, PWLAN_IE_QUIET pIE_Quiet, PKnownBSS pBSSList, - UINT uIELength, + unsigned int uIELength, PBYTE pbyIEs, void *pRxPacketContext) { @@ -667,24 +670,26 @@ BOOL BSSbUpdateToBSSList(void *hDeviceContext, WPA_ClearRSN(pBSSList); //mike update - if (pRSNWPA != NULL) { - UINT uLen = pRSNWPA->len + 2; - if (uLen <= (uIELength - (UINT)(ULONG_PTR)((PBYTE)pRSNWPA - pbyIEs))) { - pBSSList->wWPALen = uLen; - memcpy(pBSSList->byWPAIE, pRSNWPA, uLen); - WPA_ParseRSN(pBSSList, pRSNWPA); - } - } + if (pRSNWPA != NULL) { + unsigned int uLen = pRSNWPA->len + 2; + if (uLen <= (uIELength - + (unsigned int) (ULONG_PTR) ((PBYTE) pRSNWPA - pbyIEs))) { + pBSSList->wWPALen = uLen; + memcpy(pBSSList->byWPAIE, pRSNWPA, uLen); + WPA_ParseRSN(pBSSList, pRSNWPA); + } + } WPA2_ClearRSN(pBSSList); //mike update if (pRSN != NULL) { - UINT uLen = pRSN->len + 2; - if (uLen <= (uIELength - (UINT)(ULONG_PTR)((PBYTE)pRSN - pbyIEs))) { - pBSSList->wRSNLen = uLen; - memcpy(pBSSList->byRSNIE, pRSN, uLen); - WPA2vParseRSN(pBSSList, pRSN); - } + unsigned int uLen = pRSN->len + 2; + if (uLen <= (uIELength - + (unsigned int) (ULONG_PTR) ((PBYTE) pRSN - pbyIEs))) { + pBSSList->wRSNLen = uLen; + memcpy(pBSSList->byRSNIE, pRSN, uLen); + WPA2vParseRSN(pBSSList, pRSN); + } } if (pRxPacket->uRSSI != 0) { @@ -754,7 +759,7 @@ BOOL BSSbIsSTAInNodeDB(void *hDeviceContext, { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT ii; + unsigned int ii; // Index = 0 reserved for AP Node for (ii = 1; ii < (MAX_NODE_NUM + 1); ii++) { @@ -786,9 +791,9 @@ void BSSvCreateOneNode(void *hDeviceContext, PUINT puNodeIndex) PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT ii; - UINT BigestCount = 0; - UINT SelectIndex; + unsigned int ii; + unsigned int BigestCount = 0; + unsigned int SelectIndex; struct sk_buff *skb; // Index = 0 reserved for AP Node (In STA mode) // Index = 0 reserved for Broadcast/MultiCast (In AP mode) @@ -843,7 +848,7 @@ void BSSvCreateOneNode(void *hDeviceContext, PUINT puNodeIndex) * -*/ -void BSSvRemoveOneNode(void *hDeviceContext, UINT uNodeIndex) +void BSSvRemoveOneNode(void *hDeviceContext, unsigned int uNodeIndex) { PSDevice pDevice = (PSDevice)hDeviceContext; @@ -879,7 +884,7 @@ void BSSvUpdateAPNode(void *hDeviceContext, { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT uRateLen = WLAN_RATES_MAXLEN; + unsigned int uRateLen = WLAN_RATES_MAXLEN; memset(&pMgmt->sNodeDBTable[0], 0, sizeof(KnownNodeDB)); @@ -967,11 +972,11 @@ void BSSvSecondCallBack(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT ii; + unsigned int ii; PWLAN_IE_SSID pItemSSID, pCurrSSID; - UINT uSleepySTACnt = 0; - UINT uNonShortSlotSTACnt = 0; - UINT uLongPreambleSTACnt = 0; + unsigned int uSleepySTACnt = 0; + unsigned int uNonShortSlotSTACnt = 0; + unsigned int uLongPreambleSTACnt = 0; viawget_wpa_header *wpahdr; //DavidWang spin_lock_irq(&pDevice->lock); @@ -1360,12 +1365,12 @@ void BSSvUpdateNodeTxCounter(void *hDeviceContext, { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT uNodeIndex = 0; + unsigned int uNodeIndex = 0; BYTE byTxRetry; WORD wRate; WORD wFallBackRate = RATE_1M; BYTE byFallBack; - UINT ii; + unsigned int ii; PBYTE pbyDestAddr; BYTE byPktNum; WORD wFIFOCtl; @@ -1516,12 +1521,12 @@ void BSSvUpdateNodeTxCounter(void *hDeviceContext, -*/ void BSSvClearNodeDBTable(void *hDeviceContext, - UINT uStartIndex) + unsigned int uStartIndex) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); struct sk_buff *skb; - UINT ii; + unsigned int ii; for (ii = uStartIndex; ii < (MAX_NODE_NUM + 1); ii++) { if (pMgmt->sNodeDBTable[ii].bActive) { @@ -1586,9 +1591,9 @@ void s_vCheckSensitivity(void *hDeviceContext) void s_uCalculateLinkQual(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; - ULONG TxOkRatio, TxCnt; - ULONG RxOkRatio,RxCnt; - ULONG RssiRatio; + unsigned long TxOkRatio, TxCnt; + unsigned long RxOkRatio, RxCnt; + unsigned long RssiRatio; long ldBm; TxCnt = pDevice->scStatistic.TxNoRetryOkCount + @@ -1633,7 +1638,7 @@ void BSSvClearAnyBSSJoinRecord(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT ii; + unsigned int ii; for (ii = 0; ii < MAX_BSS_NUM; ii++) { pMgmt->sBSSList[ii].bSelected = FALSE; diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h index 0158b0b..9686d86 100644 --- a/drivers/staging/vt6656/bssdb.h +++ b/drivers/staging/vt6656/bssdb.h @@ -97,10 +97,10 @@ typedef struct tagKnownBSS { // BSS info BOOL bActive; BYTE abyBSSID[WLAN_BSSID_LEN]; - UINT uChannel; + unsigned int uChannel; BYTE abySuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; BYTE abyExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; - UINT uRSSI; + unsigned int uRSSI; BYTE bySQ; WORD wBeaconInterval; WORD wCapInfo; @@ -141,9 +141,9 @@ typedef struct tagKnownBSS { WORD wRSNLen; // Clear count - UINT uClearCount; + unsigned int uClearCount; // BYTE abyIEs[WLAN_BEACON_FR_MAXLEN]; - UINT uIELength; + unsigned int uIELength; QWORD qwBSSTimestamp; QWORD qwLocalTSF; // local TSF timer @@ -178,7 +178,7 @@ typedef struct tagKnownNodeDB { BOOL bShortPreamble; BOOL bERPExist; BOOL bShortSlotTime; - UINT uInActiveCount; + unsigned int uInActiveCount; WORD wMaxBasicRate; //Get from byTopOFDMBasicRate or byTopCCKBasicRate which depends on packetTyp. WORD wMaxSuppRate; //Records the highest supported rate getting from SuppRates IE and ExtSuppRates IE in Beacon. WORD wSuppRate; @@ -194,35 +194,35 @@ typedef struct tagKnownNodeDB { BOOL bPSEnable; BOOL bRxPSPoll; BYTE byAuthSequence; - ULONG ulLastRxJiffer; + unsigned long ulLastRxJiffer; BYTE bySuppRate; DWORD dwFlags; WORD wEnQueueCnt; BOOL bOnFly; - ULONGLONG KeyRSC; + unsigned long long KeyRSC; BYTE byKeyIndex; DWORD dwKeyIndex; BYTE byCipherSuite; DWORD dwTSC47_16; WORD wTSC15_0; - UINT uWepKeyLength; + unsigned int uWepKeyLength; BYTE abyWepKey[WLAN_WEPMAX_KEYLEN]; // // Auto rate fallback vars BOOL bIsInFallback; - UINT uAverageRSSI; - UINT uRateRecoveryTimeout; - UINT uRatePollTimeout; - UINT uTxFailures; - UINT uTxAttempts; - - UINT uTxRetry; - UINT uFailureRatio; - UINT uRetryRatio; - UINT uTxOk[MAX_RATE+1]; - UINT uTxFail[MAX_RATE+1]; - UINT uTimeCount; + unsigned int uAverageRSSI; + unsigned int uRateRecoveryTimeout; + unsigned int uRatePollTimeout; + unsigned int uTxFailures; + unsigned int uTxAttempts; + + unsigned int uTxRetry; + unsigned int uFailureRatio; + unsigned int uRetryRatio; + unsigned int uTxOk[MAX_RATE+1]; + unsigned int uTxFail[MAX_RATE+1]; + unsigned int uTimeCount; } KnownNodeDB, *PKnownNodeDB; @@ -253,7 +253,7 @@ BOOL BSSbInsertToBSSList(void *hDeviceContext, PWLAN_IE_RSN_EXT pRSNWPA, PWLAN_IE_COUNTRY pIE_Country, PWLAN_IE_QUIET pIE_Quiet, - UINT uIELength, + unsigned int uIELength, PBYTE pbyIEs, void *pRxPacketContext); @@ -272,7 +272,7 @@ BOOL BSSbUpdateToBSSList(void *hDeviceContext, PWLAN_IE_COUNTRY pIE_Country, PWLAN_IE_QUIET pIE_Quiet, PKnownBSS pBSSList, - UINT uIELength, + unsigned int uIELength, PBYTE pbyIEs, void *pRxPacketContext); @@ -295,12 +295,12 @@ void BSSvUpdateNodeTxCounter(void *hDeviceContext, BYTE byPktNO); void BSSvRemoveOneNode(void *hDeviceContext, - UINT uNodeIndex); + unsigned int uNodeIndex); void BSSvAddMulticastNode(void *hDeviceContext); void BSSvClearNodeDBTable(void *hDeviceContext, - UINT uStartIndex); + unsigned int uStartIndex); void BSSvClearAnyBSSJoinRecord(void *hDeviceContext); diff --git a/drivers/staging/vt6656/card.c b/drivers/staging/vt6656/card.c index 6baf869..fe4ec91 100644 --- a/drivers/staging/vt6656/card.c +++ b/drivers/staging/vt6656/card.c @@ -95,7 +95,7 @@ const WORD cwRXBCNTSFOff[MAX_RATE] = * Return Value: TRUE if succeeded; FALSE if failed. * */ -BOOL CARDbSetMediaChannel(void *pDeviceHandler, UINT uConnectionChannel) +BOOL CARDbSetMediaChannel(void *pDeviceHandler, unsigned int uConnectionChannel) { PSDevice pDevice = (PSDevice) pDeviceHandler; BOOL bResult = TRUE; @@ -159,7 +159,7 @@ BOOL bResult = TRUE; static WORD swGetCCKControlRate(void *pDeviceHandler, WORD wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; - UINT ui = (UINT)wRateIdx; + unsigned int ui = (unsigned int)wRateIdx; while (ui > RATE_1M) { if (pDevice->wBasicRate & ((WORD)1 << ui)) { return (WORD)ui; @@ -185,7 +185,7 @@ static WORD swGetCCKControlRate(void *pDeviceHandler, WORD wRateIdx) static WORD swGetOFDMControlRate(void *pDeviceHandler, WORD wRateIdx) { PSDevice pDevice = (PSDevice) pDeviceHandler; - UINT ui = (UINT)wRateIdx; + unsigned int ui = (unsigned int)wRateIdx; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"BASIC RATE: %X\n", pDevice->wBasicRate); @@ -508,7 +508,7 @@ void vUpdateIFS(void *pDeviceHandler) else {// PK_TYPE_11GA & PK_TYPE_11GB BYTE byRate = 0; BOOL bOFDMRate = FALSE; - UINT ii = 0; + unsigned int ii = 0; PWLAN_IE_SUPP_RATES pItemRates = NULL; pDevice->uSIFS = C_SIFS_BG; @@ -806,9 +806,9 @@ BOOL CARDbClearCurrentTSF(void *pDeviceHandler) QWORD CARDqGetNextTBTT (QWORD qwTSF, WORD wBeaconInterval) { - UINT uLowNextTBTT; - UINT uHighRemain, uLowRemain; - UINT uBeaconInterval; + unsigned int uLowNextTBTT; + unsigned int uHighRemain, uLowRemain; + unsigned int uBeaconInterval; uBeaconInterval = wBeaconInterval * 1024; // Next TBTT = ((local_current_TSF / beacon_interval) + 1 ) * beacon_interval diff --git a/drivers/staging/vt6656/card.h b/drivers/staging/vt6656/card.h index 963c8ad..6c91343 100644 --- a/drivers/staging/vt6656/card.h +++ b/drivers/staging/vt6656/card.h @@ -60,7 +60,8 @@ typedef enum _CARD_OP_MODE { /*--------------------- Export Functions --------------------------*/ -BOOL CARDbSetMediaChannel(void *pDeviceHandler, UINT uConnectionChannel); +BOOL CARDbSetMediaChannel(void *pDeviceHandler, + unsigned int uConnectionChannel); void CARDvSetRSPINF(void *pDeviceHandler, BYTE byBBType); void vUpdateIFS(void *pDeviceHandler); void CARDvUpdateBasicTopRate(void *pDeviceHandler); diff --git a/drivers/staging/vt6656/channel.c b/drivers/staging/vt6656/channel.c index c9b8b19..f49b6e1 100644 --- a/drivers/staging/vt6656/channel.c +++ b/drivers/staging/vt6656/channel.c @@ -389,7 +389,7 @@ static struct // 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165 (Value 23 ~ 56) ************************************************************************/ BOOL -ChannelValid(UINT CountryCode, UINT ChannelIndex) +ChannelValid(unsigned int CountryCode, unsigned int ChannelIndex) { BOOL bValid; @@ -425,7 +425,7 @@ exit: ************************************************************************/ BOOL CHvChannelGetList ( - UINT uCountryCodeIdx, + unsigned int uCountryCodeIdx, PBYTE pbyChannelTable ) { @@ -441,7 +441,7 @@ void CHvInitChannelTable(void *pDeviceHandler) { PSDevice pDevice = (PSDevice) pDeviceHandler; BOOL bMultiBand = FALSE; - UINT ii; + unsigned int ii; for(ii=1;ii<=CB_MAX_CHANNEL;ii++) { sChannelTbl[ii].bValid = FALSE; diff --git a/drivers/staging/vt6656/channel.h b/drivers/staging/vt6656/channel.h index 26d12a0..91c2ffc 100644 --- a/drivers/staging/vt6656/channel.h +++ b/drivers/staging/vt6656/channel.h @@ -37,20 +37,20 @@ /*--------------------- Export Classes ----------------------------*/ typedef struct tagSChannelTblElement { BYTE byChannelNumber; - UINT uFrequency; + unsigned int uFrequency; BOOL bValid; }SChannelTblElement, *PSChannelTblElement; /*--------------------- Export Variables --------------------------*/ /*--------------------- Export Functions --------------------------*/ -BOOL ChannelValid(UINT CountryCode, UINT ChannelNum); +BOOL ChannelValid(unsigned int CountryCode, unsigned int ChannelNum); void CHvInitChannelTable(void *pDeviceHandler); BYTE CHbyGetChannelMapping(BYTE byChannelNumber); BOOL CHvChannelGetList ( - UINT uCountryCodeIdx, + unsigned int uCountryCodeIdx, PBYTE pbyChannelTable ); diff --git a/drivers/staging/vt6656/datarate.c b/drivers/staging/vt6656/datarate.c index 4d2880b..2e183dd 100644 --- a/drivers/staging/vt6656/datarate.c +++ b/drivers/staging/vt6656/datarate.c @@ -201,11 +201,11 @@ void RATEvParseMaxRate( ) { PSDevice pDevice = (PSDevice) pDeviceHandler; -UINT ii; +unsigned int ii; BYTE byHighSuppRate = 0; BYTE byRate = 0; WORD wOldBasicRate = pDevice->wBasicRate; -UINT uRateLen; +unsigned int uRateLen; if (pItemRates == NULL) @@ -241,7 +241,7 @@ UINT uRateLen; if ((pItemExtRates != NULL) && (pItemExtRates->byElementID == WLAN_EID_EXTSUPP_RATES) && (pDevice->byBBType != BB_TYPE_11B)) { - UINT uExtRateLen = pItemExtRates->len; + unsigned int uExtRateLen = pItemExtRates->len; if (uExtRateLen > WLAN_RATES_MAXLEN) uExtRateLen = WLAN_RATES_MAXLEN; @@ -311,7 +311,7 @@ PSDevice pDevice = (PSDevice) pDeviceHandler; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); #if 1 //mike fixed old: use packet lose ratio algorithm to control rate WORD wIdxDownRate = 0; -UINT ii; +unsigned int ii; BOOL bAutoRate[MAX_RATE] = {TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE}; DWORD dwThroughputTbl[MAX_RATE] = {10, 20, 55, 110, 60, 90, 120, 180, 240, 360, 480, 540}; DWORD dwThroughput = 0; @@ -392,7 +392,7 @@ DWORD dwTxDiff = 0; #else //mike fixed new: use differ-signal strength to control rate WORD wIdxUpRate = 0; BOOL bAutoRate[MAX_RATE] = {TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE}; -UINT ii; +unsigned int ii; long ldBm; if (pMgmt->eScanState != WMAC_NO_SCANNING) { @@ -468,10 +468,10 @@ BYTE RATEuSetIE ( PWLAN_IE_SUPP_RATES pSrcRates, PWLAN_IE_SUPP_RATES pDstRates, - UINT uRateLen + unsigned int uRateLen ) { - UINT ii, uu, uRateCnt = 0; + unsigned int ii, uu, uRateCnt = 0; if ((pSrcRates == NULL) || (pDstRates == NULL)) return 0; diff --git a/drivers/staging/vt6656/datarate.h b/drivers/staging/vt6656/datarate.h index 7d73a3a..c6f5163 100644 --- a/drivers/staging/vt6656/datarate.h +++ b/drivers/staging/vt6656/datarate.h @@ -92,7 +92,7 @@ BYTE RATEuSetIE( PWLAN_IE_SUPP_RATES pSrcRates, PWLAN_IE_SUPP_RATES pDstRates, - UINT uRateLen + unsigned int uRateLen ); WORD diff --git a/drivers/staging/vt6656/device.h b/drivers/staging/vt6656/device.h index eb45ee5..ef9fd97 100644 --- a/drivers/staging/vt6656/device.h +++ b/drivers/staging/vt6656/device.h @@ -225,12 +225,12 @@ typedef struct _USB_SEND_CONTEXT { void *pDevice; struct sk_buff *pPacket; struct urb *pUrb; - UINT uBufLen; + unsigned int uBufLen; CONTEXT_TYPE Type; SEthernetHeader sEthHeader; void *Next; BOOL bBoolInUse; - UCHAR Data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS]; + unsigned char Data[MAX_TOTAL_SIZE_WITH_ALL_HEADERS]; } USB_SEND_CONTEXT, *PUSB_SEND_CONTEXT; @@ -248,7 +248,7 @@ typedef struct _DEFAULT_CONFIG { // Structure to keep track of usb interrupt packets // typedef struct { - UINT uDataLen; + unsigned int uDataLen; PBYTE pDataBuf; // struct urb *pUrb; BOOL bInUse; @@ -295,7 +295,7 @@ typedef enum __DEVICE_NDIS_STATUS { #define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 // PMKID Structures -typedef UCHAR NDIS_802_11_PMKID_VALUE[16]; +typedef unsigned char NDIS_802_11_PMKID_VALUE[16]; typedef enum _NDIS_802_11_WEP_STATUS @@ -327,7 +327,7 @@ typedef enum _NDIS_802_11_STATUS_TYPE //Added new types for PMKID Candidate lists. typedef struct _PMKID_CANDIDATE { NDIS_802_11_MAC_ADDRESS BSSID; - ULONG Flags; + unsigned long Flags; } PMKID_CANDIDATE, *PPMKID_CANDIDATE; @@ -338,15 +338,15 @@ typedef struct _BSSID_INFO } BSSID_INFO, *PBSSID_INFO; typedef struct tagSPMKID { - ULONG Length; - ULONG BSSIDInfoCount; + unsigned long Length; + unsigned long BSSIDInfoCount; BSSID_INFO BSSIDInfo[MAX_BSSIDINFO_4_PMKID]; } SPMKID, *PSPMKID; typedef struct tagSPMKIDCandidateEvent { NDIS_802_11_STATUS_TYPE StatusType; - ULONG Version; // Version of the structure - ULONG NumCandidates; // No. of pmkid candidates + unsigned long Version; /* Version of the structure */ + unsigned long NumCandidates; /* No. of pmkid candidates */ PMKID_CANDIDATE CandidateList[MAX_PMKIDLIST]; } SPMKIDCandidateEvent, *PSPMKIDCandidateEvent; @@ -376,7 +376,7 @@ typedef struct tagSCache{ /* The receive cache is updated circularly. The next entry to be written is * indexed by the "InPtr". */ - UINT uInPtr; // Place to use next + unsigned int uInPtr; /* Place to use next */ SCacheEntry asCacheEntry[DUPLICATE_RX_CACHE_LENGTH]; } SCache, *PSCache; @@ -387,10 +387,10 @@ typedef struct tagSDeFragControlBlock WORD wSequence; WORD wFragNum; BYTE abyAddr2[ETH_ALEN]; - UINT uLifetime; + unsigned int uLifetime; struct sk_buff* skb; PBYTE pbyRxBuffer; - UINT cbFrameLength; + unsigned int cbFrameLength; BOOL bInUse; } SDeFragControlBlock, *PSDeFragControlBlock; @@ -463,14 +463,14 @@ typedef struct __device_info { BYTE byRevId; u32 flags; - ULONG Flags; + unsigned long Flags; SCache sDupRxCache; SDeFragControlBlock sRxDFCB[CB_MAX_RX_FRAG]; - UINT cbDFCB; - UINT cbFreeDFCB; - UINT uCurrentDFCBIdx; + unsigned int cbDFCB; + unsigned int cbFreeDFCB; + unsigned int uCurrentDFCBIdx; // +++USB @@ -478,29 +478,29 @@ typedef struct __device_info { struct urb *pInterruptURB; struct usb_ctrlrequest sUsbCtlRequest; - UINT int_interval; + unsigned int int_interval; // // Variables to track resources for the BULK In Pipe // PRCB pRCBMem; PRCB apRCB[CB_MAX_RX_DESC]; - UINT cbRD; + unsigned int cbRD; PRCB FirstRecvFreeList; PRCB LastRecvFreeList; - UINT NumRecvFreeList; + unsigned int NumRecvFreeList; PRCB FirstRecvMngList; PRCB LastRecvMngList; - UINT NumRecvMngList; + unsigned int NumRecvMngList; BOOL bIsRxWorkItemQueued; BOOL bIsRxMngWorkItemQueued; - ULONG ulRcvRefCount; // number of packets that have not been returned back + unsigned long ulRcvRefCount; /* packets that have not returned back */ // // Variables to track resources for the BULK Out Pipe // PUSB_SEND_CONTEXT apTD[CB_MAX_TX_DESC]; - UINT cbTD; + unsigned int cbTD; // // Variables to track resources for the Interript In Pipe @@ -517,20 +517,20 @@ typedef struct __device_info { // // Statistic for USB // protect with spinlock - ULONG ulBulkInPosted; - ULONG ulBulkInError; - ULONG ulBulkInContCRCError; - ULONG ulBulkInBytesRead; + unsigned long ulBulkInPosted; + unsigned long ulBulkInError; + unsigned long ulBulkInContCRCError; + unsigned long ulBulkInBytesRead; - ULONG ulBulkOutPosted; - ULONG ulBulkOutError; - ULONG ulBulkOutContCRCError; - ULONG ulBulkOutBytesWrite; + unsigned long ulBulkOutPosted; + unsigned long ulBulkOutError; + unsigned long ulBulkOutContCRCError; + unsigned long ulBulkOutBytesWrite; - ULONG ulIntInPosted; - ULONG ulIntInError; - ULONG ulIntInContCRCError; - ULONG ulIntInBytesRead; + unsigned long ulIntInPosted; + unsigned long ulIntInError; + unsigned long ulIntInContCRCError; + unsigned long ulIntInBytesRead; // Version control @@ -560,24 +560,24 @@ typedef struct __device_info { // // Maintain statistical debug info. // - ULONG packetsReceived; - ULONG packetsReceivedDropped; - ULONG packetsReceivedOverflow; - ULONG packetsSent; - ULONG packetsSentDropped; - ULONG SendContextsInUse; - ULONG RcvBuffersInUse; + unsigned long packetsReceived; + unsigned long packetsReceivedDropped; + unsigned long packetsReceivedOverflow; + unsigned long packetsSent; + unsigned long packetsSentDropped; + unsigned long SendContextsInUse; + unsigned long RcvBuffersInUse; // 802.11 management SMgmtObject sMgmtObj; QWORD qwCurrTSF; - UINT cbBulkInMax; + unsigned int cbBulkInMax; BOOL bPSRxBeacon; // 802.11 MAC specific - UINT uCurrRSSI; + unsigned int uCurrRSSI; BYTE byCurrSQ; @@ -598,30 +598,31 @@ typedef struct __device_info { BOOL bDiversityRegCtlON; BOOL bDiversityEnable; - ULONG ulDiversityNValue; - ULONG ulDiversityMValue; + unsigned long ulDiversityNValue; + unsigned long ulDiversityMValue; BYTE byTMax; BYTE byTMax2; BYTE byTMax3; - ULONG ulSQ3TH; + unsigned long ulSQ3TH; - ULONG uDiversityCnt; + unsigned long uDiversityCnt; BYTE byAntennaState; - ULONG ulRatio_State0; - ULONG ulRatio_State1; - ULONG ulSQ3_State0; - ULONG ulSQ3_State1; - - ULONG aulSQ3Val[MAX_RATE]; - ULONG aulPktNum[MAX_RATE]; - - // IFS & Cw - UINT uSIFS; //Current SIFS - UINT uDIFS; //Current DIFS - UINT uEIFS; //Current EIFS - UINT uSlot; //Current SlotTime - UINT uCwMin; //Current CwMin - UINT uCwMax; //CwMax is fixed on 1023. + unsigned long ulRatio_State0; + unsigned long ulRatio_State1; + unsigned long ulSQ3_State0; + unsigned long ulSQ3_State1; + + unsigned long aulSQ3Val[MAX_RATE]; + unsigned long aulPktNum[MAX_RATE]; + + /* IFS & Cw */ + unsigned int uSIFS; /* Current SIFS */ + unsigned int uDIFS; /* Current DIFS */ + unsigned int uEIFS; /* Current EIFS */ + unsigned int uSlot; /* Current SlotTime */ + unsigned int uCwMin; /* Current CwMin */ + unsigned int uCwMax; /* CwMax is fixed on 1023 */ + // PHY parameter BYTE bySIFS; BYTE byDIFS; @@ -646,7 +647,7 @@ typedef struct __device_info { BYTE byMinChannel; BYTE byMaxChannel; - UINT uConnectionRate; + unsigned int uConnectionRate; BYTE byPreambleType; BYTE byShortPreamble; @@ -700,7 +701,7 @@ typedef struct __device_info { WORD wListenInterval; BOOL bPWBitOn; WMAC_POWER_MODE ePSMode; - ULONG ulPSModeWaitTx; + unsigned long ulPSModeWaitTx; BOOL bPSModeTxBurst; // Beacon releated @@ -709,7 +710,7 @@ typedef struct __device_info { BOOL bBeaconSent; BOOL bFixRate; BYTE byCurrentCh; - UINT uScanTime; + unsigned int uScanTime; CMD_STATE eCommandState; @@ -720,15 +721,15 @@ typedef struct __device_info { BOOL bStopBeacon; BOOL bStopDataPkt; BOOL bStopTx0Pkt; - UINT uAutoReConnectTime; - UINT uIsroamingTime; + unsigned int uAutoReConnectTime; + unsigned int uIsroamingTime; // 802.11 counter CMD_ITEM eCmdQueue[CMD_Q_SIZE]; - UINT uCmdDequeueIdx; - UINT uCmdEnqueueIdx; - UINT cbFreeCmdQueue; + unsigned int uCmdDequeueIdx; + unsigned int uCmdEnqueueIdx; + unsigned int cbFreeCmdQueue; BOOL bCmdRunning; BOOL bCmdClear; BOOL bNeedRadioOFF; @@ -740,7 +741,7 @@ typedef struct __device_info { BYTE bSameBSSCurNum; //DavidWang BOOL bRoaming; BOOL b11hEable; - ULONG ulTxPower; + unsigned long ulTxPower; // Encryption NDIS_802_11_WEP_STATUS eEncryptionStatus; @@ -761,11 +762,11 @@ typedef struct __device_info { BOOL bAES; BYTE byCntMeasure; - UINT uKeyLength; + unsigned int uKeyLength; BYTE abyKey[WLAN_WEP232_KEYLEN]; // for AP mode - UINT uAssocCount; + unsigned int uAssocCount; BOOL bMoreData; // QoS @@ -780,7 +781,7 @@ typedef struct __device_info { // For Update BaseBand VGA Gain Offset BOOL bUpdateBBVGA; - UINT uBBVGADiffCount; + unsigned int uBBVGADiffCount; BYTE byBBVGANew; BYTE byBBVGACurrent; BYTE abyBBVGA[BB_VGA_LEVEL]; @@ -812,7 +813,7 @@ typedef struct __device_info { //2007-0115-01by MikeLiu #ifdef TxInSleep struct timer_list sTimerTxData; - ULONG nTxDataTimeCout; + unsigned long nTxDataTimeCout; BOOL fTxDataInSleep; BOOL IsTxDataTrigger; #endif @@ -863,7 +864,7 @@ typedef struct __device_info { struct net_device *apdev; int (*tx_80211)(struct sk_buff *skb, struct net_device *dev); #endif - UINT uChannel; + unsigned int uChannel; struct iw_statistics wstats; // wireless stats BOOL bCommit; @@ -928,7 +929,9 @@ typedef struct __device_info { /*--------------------- Export Functions --------------------------*/ -//BOOL device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, UINT uNodeIndex); +/* BOOL device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, + * unsigned int uNodeIndex); + */ BOOL device_alloc_frag_buf(PSDevice pDevice, PSDeFragControlBlock pDeF); #endif diff --git a/drivers/staging/vt6656/dpc.c b/drivers/staging/vt6656/dpc.c index d9a02ba..9afe76c 100644 --- a/drivers/staging/vt6656/dpc.c +++ b/drivers/staging/vt6656/dpc.c @@ -89,7 +89,7 @@ void s_vProcessRxMACHeader ( PSDevice pDevice, PBYTE pbyRxBufferAddr, - UINT cbPacketSize, + unsigned int cbPacketSize, BOOL bIsWEP, BOOL bExtIV, PUINT pcbHeadSize @@ -106,8 +106,8 @@ static BOOL s_bAPModeRxCtl( static BOOL s_bAPModeRxData ( PSDevice pDevice, struct sk_buff *skb, - UINT FrameSize, - UINT cbHeaderOffset, + unsigned int FrameSize, + unsigned int cbHeaderOffset, signed int iSANodeIndex, signed int iDANodeIndex ); @@ -116,7 +116,7 @@ static BOOL s_bAPModeRxData ( static BOOL s_bHandleRxEncryption( PSDevice pDevice, PBYTE pbyFrame, - UINT FrameSize, + unsigned int FrameSize, PBYTE pbyRsr, PBYTE pbyNewRsr, PSKeyItem * pKeyOut, @@ -129,7 +129,7 @@ static BOOL s_bHostWepRxEncryption( PSDevice pDevice, PBYTE pbyFrame, - UINT FrameSize, + unsigned int FrameSize, PBYTE pbyRsr, BOOL bOnFly, PSKeyItem pKey, @@ -164,14 +164,14 @@ void s_vProcessRxMACHeader ( PSDevice pDevice, PBYTE pbyRxBufferAddr, - UINT cbPacketSize, + unsigned int cbPacketSize, BOOL bIsWEP, BOOL bExtIV, PUINT pcbHeadSize ) { PBYTE pbyRxBuffer; - UINT cbHeaderSize = 0; + unsigned int cbHeaderSize = 0; PWORD pwType; PS802_11Header pMACHeader; int ii; @@ -266,7 +266,7 @@ s_vGetDASA ( PSEthernetHeader psEthHeader ) { - UINT cbHeaderSize = 0; + unsigned int cbHeaderSize = 0; PS802_11Header pMACHeader; int ii; @@ -318,7 +318,7 @@ BOOL RXbBulkInProcessData ( PSDevice pDevice, PRCB pRCB, - ULONG BytesToIndicate + unsigned long BytesToIndicate ) { @@ -333,20 +333,20 @@ RXbBulkInProcessData ( PQWORD pqwTSFTime; PBYTE pbyFrame; BOOL bDeFragRx = FALSE; - UINT cbHeaderOffset; - UINT FrameSize; + unsigned int cbHeaderOffset; + unsigned int FrameSize; WORD wEtherType = 0; signed int iSANodeIndex = -1; signed int iDANodeIndex = -1; - UINT ii; - UINT cbIVOffset; + unsigned int ii; + unsigned int cbIVOffset; PBYTE pbyRxSts; PBYTE pbyRxRate; PBYTE pbySQ; #ifdef Calcu_LinkQual PBYTE pby3SQ; #endif - UINT cbHeaderSize; + unsigned int cbHeaderSize; PSKeyItem pKey = NULL; WORD wRxTSC15_0 = 0; DWORD dwRxTSC47_16 = 0; @@ -372,7 +372,7 @@ RXbBulkInProcessData ( //[31:16]RcvByteCount ( not include 4-byte Status ) dwWbkStatus = *( (PDWORD)(skb->data) ); - FrameSize = (UINT)(dwWbkStatus >> 16); + FrameSize = (unsigned int)(dwWbkStatus >> 16); FrameSize += 4; if (BytesToIndicate != FrameSize) { @@ -934,9 +934,9 @@ RXbBulkInProcessData ( if (bIsWEP) { WORD wLocalTSC15_0 = 0; DWORD dwLocalTSC47_16 = 0; - ULONGLONG RSC = 0; + unsigned long long RSC = 0; // endian issues - RSC = *((ULONGLONG *) &(pKey->KeyRSC)); + RSC = *((unsigned long long *) &(pKey->KeyRSC)); wLocalTSC15_0 = (WORD) RSC; dwLocalTSC47_16 = (DWORD) (RSC>>16); @@ -1151,7 +1151,7 @@ static BOOL s_bAPModeRxCtl ( static BOOL s_bHandleRxEncryption ( PSDevice pDevice, PBYTE pbyFrame, - UINT FrameSize, + unsigned int FrameSize, PBYTE pbyRsr, PBYTE pbyNewRsr, PSKeyItem * pKeyOut, @@ -1160,7 +1160,7 @@ static BOOL s_bHandleRxEncryption ( PDWORD pdwRxTSC47_16 ) { - UINT PayloadLen = FrameSize; + unsigned int PayloadLen = FrameSize; PBYTE pbyIV; BYTE byKeyIdx; PSKeyItem pKey = NULL; @@ -1297,7 +1297,7 @@ static BOOL s_bHandleRxEncryption ( static BOOL s_bHostWepRxEncryption ( PSDevice pDevice, PBYTE pbyFrame, - UINT FrameSize, + unsigned int FrameSize, PBYTE pbyRsr, BOOL bOnFly, PSKeyItem pKey, @@ -1308,7 +1308,7 @@ static BOOL s_bHostWepRxEncryption ( ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT PayloadLen = FrameSize; + unsigned int PayloadLen = FrameSize; PBYTE pbyIV; BYTE byKeyIdx; BYTE byDecMode = KEY_CTL_WEP; @@ -1429,8 +1429,8 @@ static BOOL s_bHostWepRxEncryption ( static BOOL s_bAPModeRxData ( PSDevice pDevice, struct sk_buff *skb, - UINT FrameSize, - UINT cbHeaderOffset, + unsigned int FrameSize, + unsigned int cbHeaderOffset, signed int iSANodeIndex, signed int iDANodeIndex ) @@ -1503,7 +1503,8 @@ static BOOL s_bAPModeRxData ( iDANodeIndex = 0; if ((pDevice->uAssocCount > 1) && (iDANodeIndex >= 0)) { - bRelayPacketSend(pDevice, (PBYTE)(skb->data + cbHeaderOffset), FrameSize, (UINT)iDANodeIndex); + bRelayPacketSend(pDevice, (PBYTE) (skb->data + cbHeaderOffset), + FrameSize, (unsigned int) iDANodeIndex); } if (bRelayOnly) diff --git a/drivers/staging/vt6656/dpc.h b/drivers/staging/vt6656/dpc.h index 7ea3ad9..d4fca43 100644 --- a/drivers/staging/vt6656/dpc.h +++ b/drivers/staging/vt6656/dpc.h @@ -55,7 +55,7 @@ BOOL RXbBulkInProcessData( PSDevice pDevice, PRCB pRCB, - ULONG BytesToIndicate + unsigned long BytesToIndicate ); #endif /* __RXTX_H__ */ diff --git a/drivers/staging/vt6656/hostap.c b/drivers/staging/vt6656/hostap.c index 93e52a3..f70e922 100644 --- a/drivers/staging/vt6656/hostap.c +++ b/drivers/staging/vt6656/hostap.c @@ -210,7 +210,7 @@ int vt6656_hostap_set_hostapd(PSDevice pDevice, int val, int rtnl_locked) static int hostap_remove_sta(PSDevice pDevice, struct viawget_hostapd_param *param) { - UINT uNodeIndex; + unsigned int uNodeIndex; if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) { @@ -239,7 +239,7 @@ static int hostap_add_sta(PSDevice pDevice, struct viawget_hostapd_param *param) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT uNodeIndex; + unsigned int uNodeIndex; if (!BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) { @@ -299,7 +299,7 @@ static int hostap_get_info_sta(PSDevice pDevice, struct viawget_hostapd_param *param) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT uNodeIndex; + unsigned int uNodeIndex; if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) { param->u.get_info_sta.inactive_sec = @@ -333,7 +333,7 @@ static int hostap_reset_txexc_sta(PSDevice pDevice, struct viawget_hostapd_param *param) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT uNodeIndex; + unsigned int uNodeIndex; if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) { pMgmt->sNodeDBTable[uNodeIndex].uTxAttempts = 0; @@ -363,13 +363,13 @@ static int hostap_set_flags_sta(PSDevice pDevice, struct viawget_hostapd_param *param) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT uNodeIndex; + unsigned int uNodeIndex; if (BSSbIsSTAInNodeDB(pDevice, param->sta_addr, &uNodeIndex)) { pMgmt->sNodeDBTable[uNodeIndex].dwFlags |= param->u.set_flags_sta.flags_or; pMgmt->sNodeDBTable[uNodeIndex].dwFlags &= param->u.set_flags_sta.flags_and; - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " dwFlags = %x \n", - (UINT)pMgmt->sNodeDBTable[uNodeIndex].dwFlags); + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " dwFlags = %x\n", + (unsigned int) pMgmt->sNodeDBTable[uNodeIndex].dwFlags); } else { return -ENOENT; diff --git a/drivers/staging/vt6656/ioctl.c b/drivers/staging/vt6656/ioctl.c index 368e49f..19a84b6 100644 --- a/drivers/staging/vt6656/ioctl.c +++ b/drivers/staging/vt6656/ioctl.c @@ -72,10 +72,10 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { SNodeList sNodeList; PSBSSIDList pList; PSNodeList pNodeList; - UINT cbListCount; + unsigned int cbListCount; PKnownBSS pBSS; PKnownNodeDB pNode; - UINT ii, jj; + unsigned int ii, jj; SCmdLinkStatus sLinkStatus; BYTE abySuppRates[] = {WLAN_EID_SUPP_RATES, 4, 0x02, 0x04, 0x0B, 0x16}; BYTE abyNullAddr[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; @@ -337,7 +337,7 @@ int private_ioctl(PSDevice pDevice, struct ifreq *rq) { pList->sBSSIDList[ii].wBeaconInterval = pBSS->wBeaconInterval; pList->sBSSIDList[ii].wCapInfo = pBSS->wCapInfo; RFvRSSITodBm(pDevice, (BYTE)(pBSS->uRSSI), &ldBm); - pList->sBSSIDList[ii].uRSSI = (UINT)ldBm; + pList->sBSSIDList[ii].uRSSI = (unsigned int) ldBm; // pList->sBSSIDList[ii].uRSSI = pBSS->uRSSI; memcpy(pList->sBSSIDList[ii].abyBSSID, pBSS->abyBSSID, WLAN_BSSID_LEN); pItemSSID = (PWLAN_IE_SSID)pBSS->abySSID; diff --git a/drivers/staging/vt6656/ioctl.h b/drivers/staging/vt6656/ioctl.h index b307980..caa4ac9 100644 --- a/drivers/staging/vt6656/ioctl.h +++ b/drivers/staging/vt6656/ioctl.h @@ -47,7 +47,7 @@ void vConfigWEPKey ( PSDevice pDevice, DWORD dwKeyIndex, PBYTE pbyKey, - ULONG uKeyLength + unsigned long uKeyLength ); */ diff --git a/drivers/staging/vt6656/iwctl.c b/drivers/staging/vt6656/iwctl.c index 4d0db21..fa40522 100644 --- a/drivers/staging/vt6656/iwctl.c +++ b/drivers/staging/vt6656/iwctl.c @@ -769,7 +769,7 @@ int iwctl_siwap(struct net_device *dev, //mike add: if desired AP is hidden ssid(there are two same BSSID in list), // then ignore,because you don't known which one to be connect with?? { - UINT ii , uSameBssidNum=0; + unsigned int ii, uSameBssidNum = 0; for (ii = 0; ii < MAX_BSS_NUM; ii++) { if (pMgmt->sBSSList[ii].bActive && IS_ETH_ADDRESS_EQUAL(pMgmt->sBSSList[ii].abyBSSID,pMgmt->abyDesireBSSID)) { @@ -933,7 +933,7 @@ int iwctl_siwessid(struct net_device *dev, { PKnownBSS pCurr = NULL; BYTE abyTmpDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; - UINT ii , uSameBssidNum=0; + unsigned int ii, uSameBssidNum = 0; memcpy(abyTmpDesireSSID,pMgmt->abyDesireSSID,sizeof(abyTmpDesireSSID)); pCurr = BSSpSearchBSSList(pDevice, @@ -1440,7 +1440,7 @@ int iwctl_giwencode(struct net_device *dev, PSMgmtObject pMgmt = &(pDevice->sMgmtObj); int rc = 0; char abyKey[WLAN_WEP232_KEYLEN]; - UINT index = (UINT)(wrq->flags & IW_ENCODE_INDEX); + unsigned int index = (unsigned int)(wrq->flags & IW_ENCODE_INDEX); PSKeyItem pKey = NULL; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWENCODE\n"); @@ -1486,7 +1486,7 @@ int iwctl_giwencode(struct net_device *dev, PSMgmtObject pMgmt = &(pDevice->sMgmtObj); char abyKey[WLAN_WEP232_KEYLEN]; - UINT index = (UINT)(wrq->flags & IW_ENCODE_INDEX); + unsigned int index = (unsigned int)(wrq->flags & IW_ENCODE_INDEX); PSKeyItem pKey = NULL; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO " SIOCGIWENCODE\n"); diff --git a/drivers/staging/vt6656/key.c b/drivers/staging/vt6656/key.c index 7ff420d..b0890c1 100644 --- a/drivers/staging/vt6656/key.c +++ b/drivers/staging/vt6656/key.c @@ -223,7 +223,7 @@ BOOL KeybSetKey( PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex, - ULONG uKeyLength, + unsigned long uKeyLength, PQWORD pKeyRSC, PBYTE pbyKey, BYTE byKeyDecMode @@ -231,9 +231,9 @@ BOOL KeybSetKey( { PSDevice pDevice = (PSDevice) pDeviceHandler; int i,j; - UINT ii; + unsigned int ii; PSKeyItem pKey; - UINT uKeyIdx; + unsigned int uKeyIdx; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetKey: %lX\n", dwKeyIndex); @@ -670,19 +670,19 @@ BOOL KeybSetDefaultKey( void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex, - ULONG uKeyLength, + unsigned long uKeyLength, PQWORD pKeyRSC, PBYTE pbyKey, BYTE byKeyDecMode ) { PSDevice pDevice = (PSDevice) pDeviceHandler; - UINT ii; + unsigned int ii; PSKeyItem pKey; - UINT uKeyIdx; - - DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetDefaultKey: %1x, %d \n", (int)dwKeyIndex, (int)uKeyLength); + unsigned int uKeyIdx; + DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "Enter KeybSetDefaultKey: %1x, %d\n", + (int) dwKeyIndex, (int) uKeyLength); if ((dwKeyIndex & PAIRWISE_KEY) != 0) { // Pairwise key return (FALSE); @@ -778,7 +778,7 @@ BOOL KeybSetAllGroupKey( void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex, - ULONG uKeyLength, + unsigned long uKeyLength, PQWORD pKeyRSC, PBYTE pbyKey, BYTE byKeyDecMode @@ -786,9 +786,9 @@ BOOL KeybSetAllGroupKey( { PSDevice pDevice = (PSDevice) pDeviceHandler; int i; - UINT ii; + unsigned int ii; PSKeyItem pKey; - UINT uKeyIdx; + unsigned int uKeyIdx; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"Enter KeybSetAllGroupKey: %lX\n", dwKeyIndex); diff --git a/drivers/staging/vt6656/key.h b/drivers/staging/vt6656/key.h index 11fc41e..f749c7a 100644 --- a/drivers/staging/vt6656/key.h +++ b/drivers/staging/vt6656/key.h @@ -58,7 +58,7 @@ typedef struct tagSKeyItem { BOOL bKeyValid; - ULONG uKeyLength; + unsigned long uKeyLength; BYTE abyKey[MAX_KEY_LEN]; QWORD KeyRSC; DWORD dwTSC47_16; @@ -107,7 +107,7 @@ BOOL KeybSetKey( PSKeyManagement pTable, PBYTE pbyBSSID, DWORD dwKeyIndex, - ULONG uKeyLength, + unsigned long uKeyLength, PQWORD pKeyRSC, PBYTE pbyKey, BYTE byKeyDecMode @@ -146,7 +146,7 @@ BOOL KeybSetDefaultKey( void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex, - ULONG uKeyLength, + unsigned long uKeyLength, PQWORD pKeyRSC, PBYTE pbyKey, BYTE byKeyDecMode @@ -156,7 +156,7 @@ BOOL KeybSetAllGroupKey( void *pDeviceHandler, PSKeyManagement pTable, DWORD dwKeyIndex, - ULONG uKeyLength, + unsigned long uKeyLength, PQWORD pKeyRSC, PBYTE pbyKey, BYTE byKeyDecMode diff --git a/drivers/staging/vt6656/mac.c b/drivers/staging/vt6656/mac.c index 71f0966..0ab3db0 100644 --- a/drivers/staging/vt6656/mac.c +++ b/drivers/staging/vt6656/mac.c @@ -70,7 +70,7 @@ static int msglevel =MSG_LEVEL_INFO; */ void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx) { - UINT uByteIdx; + unsigned int uByteIdx; BYTE byBitMask; BYTE pbyData[2]; @@ -110,7 +110,7 @@ void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx) * Return Value: none * */ -void MACvWriteMultiAddr(PSDevice pDevice, UINT uByteIdx, BYTE byData) +void MACvWriteMultiAddr(PSDevice pDevice, unsigned int uByteIdx, BYTE byData) { BYTE byData1; @@ -199,7 +199,7 @@ BYTE pbyData[4]; * Return Value: none * */ -void MACvDisableKeyEntry (PSDevice pDevice, UINT uEntryIdx) +void MACvDisableKeyEntry(PSDevice pDevice, unsigned int uEntryIdx) { WORD wOffset; BYTE byData; @@ -239,7 +239,9 @@ BYTE byData; * Return Value: none * */ -void MACvSetKeyEntry (PSDevice pDevice, WORD wKeyCtl, UINT uEntryIdx, UINT uKeyIdx, PBYTE pbyAddr, PDWORD pdwKey) +void MACvSetKeyEntry(PSDevice pDevice, WORD wKeyCtl, + unsigned int uEntryIdx, unsigned int uKeyIdx, + PBYTE pbyAddr, PDWORD pdwKey) { PBYTE pbyKey; WORD wOffset; @@ -247,10 +249,6 @@ DWORD dwData1,dwData2; int ii; BYTE pbyData[24]; - - - - if ( pDevice->byLocalID <= MAC_REVISION_A1 ) { if ( pDevice->sMgmtObj.byCSSPK == KEY_CTL_CCMP ) return; diff --git a/drivers/staging/vt6656/mac.h b/drivers/staging/vt6656/mac.h index 4e3d11b..775c709 100644 --- a/drivers/staging/vt6656/mac.h +++ b/drivers/staging/vt6656/mac.h @@ -421,12 +421,13 @@ /*--------------------- Export Functions --------------------------*/ void MACvSetMultiAddrByHash (PSDevice pDevice, BYTE byHashIdx); -void MACvWriteMultiAddr(PSDevice pDevice, UINT uByteIdx, BYTE byData); +void MACvWriteMultiAddr(PSDevice pDevice, unsigned int uByteIdx, BYTE byData); BOOL MACbShutdown(PSDevice pDevice);; void MACvSetBBType(PSDevice pDevice,BYTE byType); void MACvSetMISCFifo (PSDevice pDevice, WORD wOffset, DWORD dwData); -void MACvDisableKeyEntry(PSDevice pDevice, UINT uEntryIdx); -void MACvSetKeyEntry(PSDevice pDevice, WORD wKeyCtl, UINT uEntryIdx, UINT uKeyIdx, PBYTE pbyAddr, PDWORD pdwKey); +void MACvDisableKeyEntry(PSDevice pDevice, unsigned int uEntryIdx); +void MACvSetKeyEntry(PSDevice pDevice, WORD wKeyCtl, unsigned int uEntryIdx, + unsigned int uKeyIdx, PBYTE pbyAddr, PDWORD pdwKey); void MACvRegBitsOff(PSDevice pDevice, BYTE byRegOfs, BYTE byBits); void MACvRegBitsOn(PSDevice pDevice, BYTE byRegOfs, BYTE byBits); diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index e4dc27d..4e465c4 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -277,8 +277,10 @@ static void device_free_frag_bufs(PSDevice pDevice); static BOOL device_alloc_bufs(PSDevice pDevice); static int Read_config_file(PSDevice pDevice); -static UCHAR *Config_FileOperation(PSDevice pDevice); -static int Config_FileGetParameter(UCHAR *string, UCHAR *dest,UCHAR *source); +static unsigned char *Config_FileOperation(PSDevice pDevice); +static int Config_FileGetParameter(unsigned char *string, + unsigned char *dest, + unsigned char *source); //2008-0714by Mike Liu static BOOL device_release_WPADEV(PSDevice pDevice); @@ -334,17 +336,17 @@ device_set_options(PSDevice pDevice) { static void device_init_diversity_timer(PSDevice pDevice) { init_timer(&pDevice->TimerSQ3Tmax1); - pDevice->TimerSQ3Tmax1.data = (ULONG)pDevice; + pDevice->TimerSQ3Tmax1.data = (unsigned long)pDevice; pDevice->TimerSQ3Tmax1.function = (TimerFunction)TimerSQ3CallBack; pDevice->TimerSQ3Tmax1.expires = RUN_AT(HZ); init_timer(&pDevice->TimerSQ3Tmax2); - pDevice->TimerSQ3Tmax2.data = (ULONG)pDevice; + pDevice->TimerSQ3Tmax2.data = (unsigned long)pDevice; pDevice->TimerSQ3Tmax2.function = (TimerFunction)TimerSQ3CallBack; pDevice->TimerSQ3Tmax2.expires = RUN_AT(HZ); init_timer(&pDevice->TimerSQ3Tmax3); - pDevice->TimerSQ3Tmax3.data = (ULONG)pDevice; + pDevice->TimerSQ3Tmax3.data = (unsigned long)pDevice; pDevice->TimerSQ3Tmax3.function = (TimerFunction)TimerSQ3Tmax3CallBack; pDevice->TimerSQ3Tmax3.expires = RUN_AT(HZ); @@ -362,7 +364,7 @@ static BOOL device_init_registers(PSDevice pDevice, DEVICE_INIT_TYPE InitType) u8 abySNAP_RFC1042[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; u8 abySNAP_Bridgetunnel[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; BYTE byAntenna; - UINT ii; + unsigned int ii; CMD_CARD_INIT sInitCmd; NTSTATUS ntStatus = STATUS_SUCCESS; RSP_CARD_INIT sInitRsp; @@ -1336,7 +1338,7 @@ device_release_WPADEV(pDevice); static int device_dma0_tx_80211(struct sk_buff *skb, struct net_device *dev) { PSDevice pDevice=netdev_priv(dev); PBYTE pbMPDU; - UINT cbMPDULen = 0; + unsigned int cbMPDULen = 0; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO "device_dma0_tx_80211\n"); @@ -1411,24 +1413,27 @@ static inline u32 ether_crc(int length, unsigned char *data) } //find out the start position of str2 from str1 -static UCHAR *kstrstr(const UCHAR *str1,const UCHAR *str2) { - int str1_len=strlen(str1); - int str2_len=strlen(str2); +static unsigned char *kstrstr(const unsigned char *str1, + const unsigned char *str2) { + int str1_len = strlen(str1); + int str2_len = strlen(str2); while (str1_len >= str2_len) { str1_len--; if(memcmp(str1,str2,str2_len)==0) - return (UCHAR *)str1; + return (unsigned char *) str1; str1++; } return NULL; } -static int Config_FileGetParameter(UCHAR *string, UCHAR *dest,UCHAR *source) +static int Config_FileGetParameter(unsigned char *string, + unsigned char *dest, + unsigned char *source) { - UCHAR buf1[100]; - UCHAR buf2[100]; - UCHAR *start_p=NULL,*end_p=NULL,*tmp_p=NULL; + unsigned char buf1[100]; + unsigned char buf2[100]; + unsigned char *start_p = NULL, *end_p = NULL, *tmp_p = NULL; int ii; memset(buf1,0,100); @@ -1480,13 +1485,14 @@ for(ii=1;;ii++) { } //if read fail,return NULL,or return data pointer; -static UCHAR *Config_FileOperation(PSDevice pDevice) { - UCHAR *config_path=CONFIG_PATH; - UCHAR *buffer=NULL; +static unsigned char *Config_FileOperation(PSDevice pDevice) +{ + unsigned char *config_path = CONFIG_PATH; + unsigned char *buffer = NULL; struct file *filp=NULL; mm_segment_t old_fs = get_fs(); //int oldfsuid=0,oldfsgid=0; - int result=0; + int result = 0; set_fs (KERNEL_DS); /* Can't do this anymore, so we rely on correct filesystem permissions: @@ -1545,9 +1551,9 @@ if(result!=0) { //return --->-1:fail; >=0:successful static int Read_config_file(PSDevice pDevice) { - int result=0; - UCHAR tmpbuffer[100]; - UCHAR *buffer=NULL; + int result = 0; + unsigned char tmpbuffer[100]; + unsigned char *buffer = NULL; //init config setting pDevice->config_file.ZoneType = -1; diff --git a/drivers/staging/vt6656/mib.c b/drivers/staging/vt6656/mib.c index efcd81c..b694fc8 100644 --- a/drivers/staging/vt6656/mib.c +++ b/drivers/staging/vt6656/mib.c @@ -152,9 +152,10 @@ void STAvUpdateIsrStatCounter (PSStatCounter pStatistic, BYTE byIsr0, BYTE byIsr * Return Value: none * */ -void STAvUpdateRDStatCounter (PSStatCounter pStatistic, - BYTE byRSR, BYTE byNewRSR, BYTE byRxSts, BYTE byRxRate, - PBYTE pbyBuffer, UINT cbFrameLength) +void STAvUpdateRDStatCounter(PSStatCounter pStatistic, + BYTE byRSR, BYTE byNewRSR, + BYTE byRxSts, BYTE byRxRate, + PBYTE pbyBuffer, unsigned int cbFrameLength) { /* need change */ PS802_11Header pHeader = (PS802_11Header)pbyBuffer; @@ -169,15 +170,18 @@ void STAvUpdateRDStatCounter (PSStatCounter pStatistic, /* update counters in case of successful transmission */ if (byRSR & RSR_ADDRBROAD) { pStatistic->ullRxBroadcastFrames++; - pStatistic->ullRxBroadcastBytes += (ULONGLONG)cbFrameLength; + pStatistic->ullRxBroadcastBytes += + (unsigned long long) cbFrameLength; } else if (byRSR & RSR_ADDRMULTI) { pStatistic->ullRxMulticastFrames++; - pStatistic->ullRxMulticastBytes += (ULONGLONG)cbFrameLength; + pStatistic->ullRxMulticastBytes += + (unsigned long long) cbFrameLength; } else { pStatistic->ullRxDirectedFrames++; - pStatistic->ullRxDirectedBytes += (ULONGLONG)cbFrameLength; + pStatistic->ullRxDirectedBytes += + (unsigned long long) cbFrameLength; } } } @@ -396,7 +400,7 @@ STAvUpdateRDStatCounterEx ( BYTE byRxSts, BYTE byRxRate, PBYTE pbyBuffer, - UINT cbFrameLength + unsigned int cbFrameLength ) { STAvUpdateRDStatCounter( @@ -536,19 +540,22 @@ STAvUpdate802_11Counter( ) { //p802_11Counter->TransmittedFragmentCount - p802_11Counter->MulticastTransmittedFrameCount = (ULONGLONG) (pStatistic->dwTsrBroadcast + - pStatistic->dwTsrMulticast); - p802_11Counter->FailedCount = (ULONGLONG) (pStatistic->dwTsrErr); - p802_11Counter->RetryCount = (ULONGLONG) (pStatistic->dwTsrRetry); - p802_11Counter->MultipleRetryCount = (ULONGLONG) (pStatistic->dwTsrMoreThanOnceRetry); + p802_11Counter->MulticastTransmittedFrameCount = + (unsigned long long) (pStatistic->dwTsrBroadcast + + pStatistic->dwTsrMulticast); + p802_11Counter->FailedCount = (unsigned long long) (pStatistic->dwTsrErr); + p802_11Counter->RetryCount = (unsigned long long) (pStatistic->dwTsrRetry); + p802_11Counter->MultipleRetryCount = + (unsigned long long) (pStatistic->dwTsrMoreThanOnceRetry); //p802_11Counter->FrameDuplicateCount - p802_11Counter->RTSSuccessCount += (ULONGLONG) byRTSSuccess; - p802_11Counter->RTSFailureCount += (ULONGLONG) byRTSFail; - p802_11Counter->ACKFailureCount += (ULONGLONG) byACKFail; - p802_11Counter->FCSErrorCount += (ULONGLONG) byFCSErr; + p802_11Counter->RTSSuccessCount += (unsigned long long) byRTSSuccess; + p802_11Counter->RTSFailureCount += (unsigned long long) byRTSFail; + p802_11Counter->ACKFailureCount += (unsigned long long) byACKFail; + p802_11Counter->FCSErrorCount += (unsigned long long) byFCSErr; //p802_11Counter->ReceivedFragmentCount - p802_11Counter->MulticastReceivedFrameCount = (ULONGLONG) (pStatistic->dwRsrBroadcast + - pStatistic->dwRsrMulticast); + p802_11Counter->MulticastReceivedFrameCount = + (unsigned long long) (pStatistic->dwRsrBroadcast + + pStatistic->dwRsrMulticast); } /* diff --git a/drivers/staging/vt6656/mib.h b/drivers/staging/vt6656/mib.h index 8cc5b3f..0455ec9 100644 --- a/drivers/staging/vt6656/mib.h +++ b/drivers/staging/vt6656/mib.h @@ -52,32 +52,34 @@ typedef struct tagSUSBCounter { typedef struct tagSDot11Counters { -// ULONG Length; // Length of structure - ULONGLONG TransmittedFragmentCount; - ULONGLONG MulticastTransmittedFrameCount; - ULONGLONG FailedCount; - ULONGLONG RetryCount; - ULONGLONG MultipleRetryCount; - ULONGLONG RTSSuccessCount; - ULONGLONG RTSFailureCount; - ULONGLONG ACKFailureCount; - ULONGLONG FrameDuplicateCount; - ULONGLONG ReceivedFragmentCount; - ULONGLONG MulticastReceivedFrameCount; - ULONGLONG FCSErrorCount; - ULONGLONG TKIPLocalMICFailures; - ULONGLONG TKIPRemoteMICFailures; - ULONGLONG TKIPICVErrors; - ULONGLONG TKIPCounterMeasuresInvoked; - ULONGLONG TKIPReplays; - ULONGLONG CCMPFormatErrors; - ULONGLONG CCMPReplays; - ULONGLONG CCMPDecryptErrors; - ULONGLONG FourWayHandshakeFailures; -// ULONGLONG WEPUndecryptableCount; -// ULONGLONG WEPICVErrorCount; -// ULONGLONG DecryptSuccessCount; -// ULONGLONG DecryptFailureCount; + /* unsigned long Length; // Length of structure */ + unsigned long long TransmittedFragmentCount; + unsigned long long MulticastTransmittedFrameCount; + unsigned long long FailedCount; + unsigned long long RetryCount; + unsigned long long MultipleRetryCount; + unsigned long long RTSSuccessCount; + unsigned long long RTSFailureCount; + unsigned long long ACKFailureCount; + unsigned long long FrameDuplicateCount; + unsigned long long ReceivedFragmentCount; + unsigned long long MulticastReceivedFrameCount; + unsigned long long FCSErrorCount; + unsigned long long TKIPLocalMICFailures; + unsigned long long TKIPRemoteMICFailures; + unsigned long long TKIPICVErrors; + unsigned long long TKIPCounterMeasuresInvoked; + unsigned long long TKIPReplays; + unsigned long long CCMPFormatErrors; + unsigned long long CCMPReplays; + unsigned long long CCMPDecryptErrors; + unsigned long long FourWayHandshakeFailures; + /* + * unsigned long long WEPUndecryptableCount; + * unsigned long long WEPICVErrorCount; + * unsigned long long DecryptSuccessCount; + * unsigned long long DecryptFailureCount; + */ } SDot11Counters, *PSDot11Counters; @@ -151,37 +153,37 @@ typedef struct tagSRmonCounter { // Custom counter // typedef struct tagSCustomCounters { - ULONG Length; - - ULONGLONG ullTsrAllOK; - - ULONGLONG ullRsr11M; - ULONGLONG ullRsr5M; - ULONGLONG ullRsr2M; - ULONGLONG ullRsr1M; - - ULONGLONG ullRsr11MCRCOk; - ULONGLONG ullRsr5MCRCOk; - ULONGLONG ullRsr2MCRCOk; - ULONGLONG ullRsr1MCRCOk; - - ULONGLONG ullRsr54M; - ULONGLONG ullRsr48M; - ULONGLONG ullRsr36M; - ULONGLONG ullRsr24M; - ULONGLONG ullRsr18M; - ULONGLONG ullRsr12M; - ULONGLONG ullRsr9M; - ULONGLONG ullRsr6M; - - ULONGLONG ullRsr54MCRCOk; - ULONGLONG ullRsr48MCRCOk; - ULONGLONG ullRsr36MCRCOk; - ULONGLONG ullRsr24MCRCOk; - ULONGLONG ullRsr18MCRCOk; - ULONGLONG ullRsr12MCRCOk; - ULONGLONG ullRsr9MCRCOk; - ULONGLONG ullRsr6MCRCOk; + unsigned long Length; + + unsigned long long ullTsrAllOK; + + unsigned long long ullRsr11M; + unsigned long long ullRsr5M; + unsigned long long ullRsr2M; + unsigned long long ullRsr1M; + + unsigned long long ullRsr11MCRCOk; + unsigned long long ullRsr5MCRCOk; + unsigned long long ullRsr2MCRCOk; + unsigned long long ullRsr1MCRCOk; + + unsigned long long ullRsr54M; + unsigned long long ullRsr48M; + unsigned long long ullRsr36M; + unsigned long long ullRsr24M; + unsigned long long ullRsr18M; + unsigned long long ullRsr12M; + unsigned long long ullRsr9M; + unsigned long long ullRsr6M; + + unsigned long long ullRsr54MCRCOk; + unsigned long long ullRsr48MCRCOk; + unsigned long long ullRsr36MCRCOk; + unsigned long long ullRsr24MCRCOk; + unsigned long long ullRsr18MCRCOk; + unsigned long long ullRsr12MCRCOk; + unsigned long long ullRsr9MCRCOk; + unsigned long long ullRsr6MCRCOk; } SCustomCounters, *PSCustomCounters; @@ -190,7 +192,7 @@ typedef struct tagSCustomCounters { // Custom counter // typedef struct tagSISRCounters { - ULONG Length; + unsigned long Length; DWORD dwIsrTx0OK; DWORD dwIsrAC0TxOK; @@ -277,15 +279,15 @@ typedef struct tagSStatCounter { DWORD dwRsrMulticast; DWORD dwRsrDirected; // 64-bit OID - ULONGLONG ullRsrOK; + unsigned long long ullRsrOK; // for some optional OIDs (64 bits) and DMI support - ULONGLONG ullRxBroadcastBytes; - ULONGLONG ullRxMulticastBytes; - ULONGLONG ullRxDirectedBytes; - ULONGLONG ullRxBroadcastFrames; - ULONGLONG ullRxMulticastFrames; - ULONGLONG ullRxDirectedFrames; + unsigned long long ullRxBroadcastBytes; + unsigned long long ullRxMulticastBytes; + unsigned long long ullRxDirectedBytes; + unsigned long long ullRxBroadcastFrames; + unsigned long long ullRxMulticastFrames; + unsigned long long ullRxDirectedFrames; DWORD dwRsrRxFragment; DWORD dwRsrRxFrmLen64; @@ -330,15 +332,15 @@ typedef struct tagSStatCounter { // 64-bit OID - ULONGLONG ullTsrOK; + unsigned long long ullTsrOK; // for some optional OIDs (64 bits) and DMI support - ULONGLONG ullTxBroadcastFrames; - ULONGLONG ullTxMulticastFrames; - ULONGLONG ullTxDirectedFrames; - ULONGLONG ullTxBroadcastBytes; - ULONGLONG ullTxMulticastBytes; - ULONGLONG ullTxDirectedBytes; + unsigned long long ullTxBroadcastFrames; + unsigned long long ullTxMulticastFrames; + unsigned long long ullTxDirectedFrames; + unsigned long long ullTxBroadcastBytes; + unsigned long long ullTxMulticastBytes; + unsigned long long ullTxDirectedBytes; // for autorate DWORD dwTxOk[MAX_RATE+1]; @@ -356,15 +358,15 @@ typedef struct tagSStatCounter { #ifdef Calcu_LinkQual //Tx count: - ULONG TxNoRetryOkCount; //success tx no retry ! - ULONG TxRetryOkCount; //success tx but retry ! - ULONG TxFailCount; //fail tx ? + unsigned long TxNoRetryOkCount; /* success tx no retry ! */ + unsigned long TxRetryOkCount; /* success tx but retry ! */ + unsigned long TxFailCount; /* fail tx ? */ //Rx count: - ULONG RxOkCnt; //success rx ! - ULONG RxFcsErrCnt; //fail rx ? + unsigned long RxOkCnt; /* success rx ! */ + unsigned long RxFcsErrCnt; /* fail rx ? */ //statistic - ULONG SignalStren; - ULONG LinkQuality; + unsigned long SignalStren; + unsigned long LinkQuality; #endif } SStatCounter, *PSStatCounter; @@ -382,13 +384,14 @@ void STAvClearAllCounter(PSStatCounter pStatistic); void STAvUpdateIsrStatCounter (PSStatCounter pStatistic, BYTE byIsr0, BYTE byIsr1); void STAvUpdateRDStatCounter(PSStatCounter pStatistic, - BYTE byRSR, BYTE byNewRSR, BYTE byRxSts, BYTE byRxRate, - PBYTE pbyBuffer, UINT cbFrameLength); + BYTE byRSR, BYTE byNewRSR, BYTE byRxSts, + BYTE byRxRate, PBYTE pbyBuffer, + unsigned int cbFrameLength); void STAvUpdateRDStatCounterEx(PSStatCounter pStatistic, - BYTE byRSR, BYTE byNewRSR, BYTE byRxSts, BYTE byRxRate, - PBYTE pbyBuffer, UINT cbFrameLength); - + BYTE byRSR, BYTE byNewRSR, BYTE byRxSts, + BYTE byRxRate, PBYTE pbyBuffer, + unsigned int cbFrameLength); void STAvUpdateTDStatCounter ( diff --git a/drivers/staging/vt6656/michael.c b/drivers/staging/vt6656/michael.c index d45333f..671a8cf 100644 --- a/drivers/staging/vt6656/michael.c +++ b/drivers/staging/vt6656/michael.c @@ -64,7 +64,7 @@ static void s_vAppendByte(BYTE b); /* Add a single byte to the internal static DWORD L, R; /* Current state */ static DWORD K0, K1; /* Key */ static DWORD M; /* Message accumulator (single word) */ -static UINT nBytesInM; /* # bytes in M */ +static unsigned int nBytesInM; /* # bytes in M */ /*--------------------- Export Functions --------------------------*/ @@ -73,7 +73,7 @@ static DWORD s_dwGetUINT32 (BYTE * p) // Convert from BYTE[] to DWORD in a portable way { DWORD res = 0; - UINT i; + unsigned int i; for(i=0; i<4; i++ ) res |= (*p++) << (8*i); return res; @@ -82,7 +82,7 @@ static DWORD s_dwGetUINT32 (BYTE * p) static void s_vPutUINT32(BYTE *p, DWORD val) // Convert from DWORD to BYTE[] in a portable way { - UINT i; + unsigned int i; for(i=0; i<4; i++ ) { *p++ = (BYTE) (val & 0xff); val >>= 8; @@ -148,7 +148,7 @@ void MIC_vUnInit(void) s_vClear(); } -void MIC_vAppend(PBYTE src, UINT nBytes) +void MIC_vAppend(PBYTE src, unsigned int nBytes) { /* This is simple */ while (nBytes > 0) { diff --git a/drivers/staging/vt6656/michael.h b/drivers/staging/vt6656/michael.h index 52270d3..3ab6092 100644 --- a/drivers/staging/vt6656/michael.h +++ b/drivers/staging/vt6656/michael.h @@ -40,7 +40,7 @@ void MIC_vInit(DWORD dwK0, DWORD dwK1); void MIC_vUnInit(void); // Append bytes to the message to be MICed -void MIC_vAppend(PBYTE src, UINT nBytes); +void MIC_vAppend(PBYTE src, unsigned int nBytes); // Get the MIC result. Destination should accept 8 bytes of result. // This also resets the message to empty. diff --git a/drivers/staging/vt6656/rc4.c b/drivers/staging/vt6656/rc4.c index 487f1dc..5c3c2d0 100644 --- a/drivers/staging/vt6656/rc4.c +++ b/drivers/staging/vt6656/rc4.c @@ -32,13 +32,13 @@ #include "rc4.h" -void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len) +void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, unsigned int cbKey_len) { - UINT ust1, ust2; - UINT keyindex; - UINT stateindex; + unsigned int ust1, ust2; + unsigned int keyindex; + unsigned int stateindex; PBYTE pbyst; - UINT idx; + unsigned int idx; pbyst = pRC4->abystate; pRC4->ux = 0; @@ -58,11 +58,11 @@ void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len) } } -UINT rc4_byte(PRC4Ext pRC4) +unsigned int rc4_byte(PRC4Ext pRC4) { - UINT ux; - UINT uy; - UINT ustx, usty; + unsigned int ux; + unsigned int uy; + unsigned int ustx, usty; PBYTE pbyst; pbyst = pRC4->abystate; @@ -79,9 +79,9 @@ UINT rc4_byte(PRC4Ext pRC4) } void rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, - PBYTE pbySrc, UINT cbData_len) + PBYTE pbySrc, unsigned int cbData_len) { - UINT ii; + unsigned int ii; for (ii = 0; ii < cbData_len; ii++) pbyDest[ii] = (BYTE)(pbySrc[ii] ^ rc4_byte(pRC4)); } diff --git a/drivers/staging/vt6656/rc4.h b/drivers/staging/vt6656/rc4.h index 9cd1db9..d447879c 100644 --- a/drivers/staging/vt6656/rc4.h +++ b/drivers/staging/vt6656/rc4.h @@ -35,13 +35,14 @@ /*--------------------- Export Definitions -------------------------*/ /*--------------------- Export Types ------------------------------*/ typedef struct { - UINT ux; - UINT uy; + unsigned int ux; + unsigned int uy; BYTE abystate[256]; } RC4Ext, *PRC4Ext; -void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, UINT cbKey_len); -UINT rc4_byte(PRC4Ext pRC4); -void rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, PBYTE pbySrc, UINT cbData_len); +void rc4_init(PRC4Ext pRC4, PBYTE pbyKey, unsigned int cbKey_len); +unsigned int rc4_byte(PRC4Ext pRC4); +void rc4_encrypt(PRC4Ext pRC4, PBYTE pbyDest, PBYTE pbySrc, + unsigned int cbData_len); #endif /* __RC4_H__ */ diff --git a/drivers/staging/vt6656/rf.c b/drivers/staging/vt6656/rf.c index 4c4f5f6..3fd0478 100644 --- a/drivers/staging/vt6656/rf.c +++ b/drivers/staging/vt6656/rf.c @@ -758,8 +758,8 @@ BOOL IFRFbWriteEmbeded (PSDevice pDevice, DWORD dwData) */ BOOL RFbSetPower ( PSDevice pDevice, - UINT uRATE, - UINT uCH + unsigned int uRATE, + unsigned int uCH ) { BOOL bResult = TRUE; @@ -813,7 +813,7 @@ BYTE byPwr = pDevice->byCCKPwr; BOOL RFbRawSetPower ( PSDevice pDevice, BYTE byPwr, - UINT uRATE + unsigned int uRATE ) { BOOL bResult = TRUE; diff --git a/drivers/staging/vt6656/rf.h b/drivers/staging/vt6656/rf.h index 7423d4d..d4f8b94 100644 --- a/drivers/staging/vt6656/rf.h +++ b/drivers/staging/vt6656/rf.h @@ -66,14 +66,14 @@ extern const BYTE RFaby11aChannelIndex[200]; BOOL IFRFbWriteEmbeded(PSDevice pDevice, DWORD dwData); BOOL RFbSetPower ( PSDevice pDevice, - UINT uRATE, - UINT uCH + unsigned int uRATE, + unsigned int uCH ); BOOL RFbRawSetPower( PSDevice pDevice, BYTE byPwr, - UINT uRATE + unsigned int uRATE ); void diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index bfc7860..6a4b87f 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -139,26 +139,24 @@ s_vGenerateTxParameter( void *pvRrvTime, void *pvRTS, void *pvCTS, - UINT cbFrameSize, + unsigned int cbFrameSize, BOOL bNeedACK, - UINT uDMAIdx, + unsigned int uDMAIdx, PSEthernetHeader psEthHeader ); -static -UINT -s_uFillDataHead ( +static unsigned int s_uFillDataHead( PSDevice pDevice, BYTE byPktType, WORD wCurrentRate, void *pTxDataHead, - UINT cbFrameLength, - UINT uDMAIdx, + unsigned int cbFrameLength, + unsigned int uDMAIdx, BOOL bNeedAck, - UINT uFragIdx, - UINT cbLastFragmentSize, - UINT uMACfragNum, + unsigned int uFragIdx, + unsigned int cbLastFragmentSize, + unsigned int uMACfragNum, BYTE byFBOption ); @@ -174,8 +172,8 @@ s_vGenerateMACHeader ( PSEthernetHeader psEthHeader, BOOL bNeedEncrypt, WORD wFragType, - UINT uDMAIdx, - UINT uFragIdx + unsigned int uDMAIdx, + unsigned int uFragIdx ); static @@ -199,24 +197,20 @@ s_vSWencryption ( WORD wPayloadSize ); -static -UINT -s_uGetTxRsvTime ( +static unsigned int s_uGetTxRsvTime( PSDevice pDevice, BYTE byPktType, - UINT cbFrameLength, + unsigned int cbFrameLength, WORD wRate, BOOL bNeedAck ); -static -UINT -s_uGetRTSCTSRsvTime ( +static unsigned int s_uGetRTSCTSRsvTime( PSDevice pDevice, BYTE byRTSRsvType, BYTE byPktType, - UINT cbFrameLength, + unsigned int cbFrameLength, WORD wCurrentRate ); @@ -224,10 +218,10 @@ static void s_vFillCTSHead ( PSDevice pDevice, - UINT uDMAIdx, + unsigned int uDMAIdx, BYTE byPktType, void *pvCTS, - UINT cbFrameLength, + unsigned int cbFrameLength, BOOL bNeedAck, BOOL bDisCRC, WORD wCurrentRate, @@ -240,7 +234,7 @@ s_vFillRTSHead( PSDevice pDevice, BYTE byPktType, void *pvRTS, - UINT cbFrameLength, + unsigned int cbFrameLength, BOOL bNeedAck, BOOL bDisCRC, PSEthernetHeader psEthHeader, @@ -248,28 +242,26 @@ s_vFillRTSHead( BYTE byFBOption ); -static -UINT -s_uGetDataDuration ( +static unsigned int s_uGetDataDuration( PSDevice pDevice, BYTE byDurType, - UINT cbFrameLength, + unsigned int cbFrameLength, BYTE byPktType, WORD wRate, BOOL bNeedAck, - UINT uFragIdx, - UINT cbLastFragmentSize, - UINT uMACfragNum, + unsigned int uFragIdx, + unsigned int cbLastFragmentSize, + unsigned int uMACfragNum, BYTE byFBOption ); static -UINT +unsigned int s_uGetRTSCTSDuration ( PSDevice pDevice, BYTE byDurType, - UINT cbFrameLength, + unsigned int cbFrameLength, BYTE byPktType, WORD wRate, BOOL bNeedAck, @@ -287,7 +279,7 @@ s_vGetFreeContext( { PUSB_SEND_CONTEXT pContext = NULL; PUSB_SEND_CONTEXT pReturnContext = NULL; - UINT ii; + unsigned int ii; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"GetFreeContext()\n"); @@ -456,7 +448,7 @@ s_vSWencryption ( WORD wPayloadSize ) { - UINT cbICVlen = 4; + unsigned int cbICVlen = 4; DWORD dwICV = 0xFFFFFFFFL; PDWORD pdwICV; @@ -497,16 +489,16 @@ s_vSWencryption ( PK_TYPE_11GA 3 */ static -UINT +unsigned int s_uGetTxRsvTime ( PSDevice pDevice, BYTE byPktType, - UINT cbFrameLength, + unsigned int cbFrameLength, WORD wRate, BOOL bNeedAck ) { - UINT uDataTime, uAckTime; + unsigned int uDataTime, uAckTime; uDataTime = BBuGetFrameTime(pDevice->byPreambleType, byPktType, cbFrameLength, wRate); if (byPktType == PK_TYPE_11B) {//llb,CCK mode @@ -525,16 +517,16 @@ s_uGetTxRsvTime ( //byFreqType: 0=>5GHZ 1=>2.4GHZ static -UINT +unsigned int s_uGetRTSCTSRsvTime ( PSDevice pDevice, BYTE byRTSRsvType, BYTE byPktType, - UINT cbFrameLength, + unsigned int cbFrameLength, WORD wCurrentRate ) { - UINT uRrvTime , uRTSTime, uCTSTime, uAckTime, uDataTime; + unsigned int uRrvTime , uRTSTime, uCTSTime, uAckTime, uDataTime; uRrvTime = uRTSTime = uCTSTime = uAckTime = uDataTime = 0; @@ -567,23 +559,22 @@ s_uGetRTSCTSRsvTime ( //byFreqType 0: 5GHz, 1:2.4Ghz static -UINT +unsigned int s_uGetDataDuration ( PSDevice pDevice, BYTE byDurType, - UINT cbFrameLength, + unsigned int cbFrameLength, BYTE byPktType, WORD wRate, BOOL bNeedAck, - UINT uFragIdx, - UINT cbLastFragmentSize, - UINT uMACfragNum, + unsigned int uFragIdx, + unsigned int cbLastFragmentSize, + unsigned int uMACfragNum, BYTE byFBOption ) { BOOL bLastFrag = 0; - UINT uAckTime =0, uNextPktTime = 0; - + unsigned int uAckTime = 0, uNextPktTime = 0; if (uFragIdx == (uMACfragNum-1)) { bLastFrag = 1; @@ -737,18 +728,18 @@ s_uGetDataDuration ( //byFreqType: 0=>5GHZ 1=>2.4GHZ static -UINT +unsigned int s_uGetRTSCTSDuration ( PSDevice pDevice, BYTE byDurType, - UINT cbFrameLength, + unsigned int cbFrameLength, BYTE byPktType, WORD wRate, BOOL bNeedAck, BYTE byFBOption ) { - UINT uCTSTime = 0, uDurTime = 0; + unsigned int uCTSTime = 0, uDurTime = 0; switch (byDurType) { @@ -836,18 +827,18 @@ s_uGetRTSCTSDuration ( static -UINT +unsigned int s_uFillDataHead ( PSDevice pDevice, BYTE byPktType, WORD wCurrentRate, void *pTxDataHead, - UINT cbFrameLength, - UINT uDMAIdx, + unsigned int cbFrameLength, + unsigned int uDMAIdx, BOOL bNeedAck, - UINT uFragIdx, - UINT cbLastFragmentSize, - UINT uMACfragNum, + unsigned int uFragIdx, + unsigned int cbLastFragmentSize, + unsigned int uMACfragNum, BYTE byFBOption ) { @@ -986,7 +977,7 @@ s_vFillRTSHead ( PSDevice pDevice, BYTE byPktType, void *pvRTS, - UINT cbFrameLength, + unsigned int cbFrameLength, BOOL bNeedAck, BOOL bDisCRC, PSEthernetHeader psEthHeader, @@ -994,7 +985,7 @@ s_vFillRTSHead ( BYTE byFBOption ) { - UINT uRTSFrameLen = 20; + unsigned int uRTSFrameLen = 20; WORD wLen = 0x0000; if (pvRTS == NULL) @@ -1212,17 +1203,17 @@ static void s_vFillCTSHead ( PSDevice pDevice, - UINT uDMAIdx, + unsigned int uDMAIdx, BYTE byPktType, void *pvCTS, - UINT cbFrameLength, + unsigned int cbFrameLength, BOOL bNeedAck, BOOL bDisCRC, WORD wCurrentRate, BYTE byFBOption ) { - UINT uCTSFrameLen = 14; + unsigned int uCTSFrameLen = 14; WORD wLen = 0x0000; if (pvCTS == NULL) { @@ -1307,7 +1298,7 @@ s_vFillCTSHead ( * Return Value: none * -*/ -// UINT cbFrameSize,//Hdr+Payload+FCS + static void s_vGenerateTxParameter ( @@ -1318,13 +1309,13 @@ s_vGenerateTxParameter ( void *pvRrvTime, void *pvRTS, void *pvCTS, - UINT cbFrameSize, + unsigned int cbFrameSize, BOOL bNeedACK, - UINT uDMAIdx, + unsigned int uDMAIdx, PSEthernetHeader psEthHeader ) { - UINT cbMACHdLen = WLAN_HDR_ADDR3_LEN; //24 + unsigned int cbMACHdLen = WLAN_HDR_ADDR3_LEN; /* 24 */ WORD wFifoCtl; BOOL bDisCRC = FALSE; BYTE byFBOption = AUTO_FB_NONE; @@ -1422,7 +1413,7 @@ s_vGenerateTxParameter ( /* PBYTE pbyBuffer,//point to pTxBufHead WORD wFragType,//00:Non-Frag, 01:Start, 02:Mid, 03:Last - UINT cbFragmentSize,//Hdr+payoad+FCS + unsigned int cbFragmentSize,//Hdr+payoad+FCS */ @@ -1432,29 +1423,30 @@ s_bPacketToWirelessUsb( BYTE byPktType, PBYTE usbPacketBuf, BOOL bNeedEncryption, - UINT uSkbPacketLen, - UINT uDMAIdx, + unsigned int uSkbPacketLen, + unsigned int uDMAIdx, PSEthernetHeader psEthHeader, PBYTE pPacket, PSKeyItem pTransmitKey, - UINT uNodeIndex, + unsigned int uNodeIndex, WORD wCurrentRate, - UINT *pcbHeaderLen, - UINT *pcbTotalLen + unsigned int *pcbHeaderLen, + unsigned int *pcbTotalLen ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT cbFrameSize,cbFrameBodySize; + unsigned int cbFrameSize, cbFrameBodySize; PTX_BUFFER pTxBufHead; - UINT cb802_1_H_len; - UINT cbIVlen=0,cbICVlen=0,cbMIClen=0,cbMACHdLen=0,cbFCSlen=4; - UINT cbMICHDR = 0; + unsigned int cb802_1_H_len; + unsigned int cbIVlen = 0, cbICVlen = 0, cbMIClen = 0, + cbMACHdLen = 0, cbFCSlen = 4; + unsigned int cbMICHDR = 0; BOOL bNeedACK,bRTS; PBYTE pbyType,pbyMacHdr,pbyIVHead,pbyPayloadHead,pbyTxBufferAddr; - BYTE abySNAP_RFC1042[6] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; - BYTE abySNAP_Bridgetunnel[6] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; - UINT uDuration; - UINT cbHeaderLength= 0,uPadding = 0; + BYTE abySNAP_RFC1042[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00}; + BYTE abySNAP_Bridgetunnel[ETH_ALEN] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8}; + unsigned int uDuration; + unsigned int cbHeaderLength = 0, uPadding = 0; void *pvRrvTime; PSMICHDRHead pMICHDR; void *pvRTS; @@ -1809,7 +1801,7 @@ s_bPacketToWirelessUsb( } if (pDevice->bSoftwareGenCrcErr == TRUE) { - UINT cbLen; + unsigned int cbLen; PDWORD pdwCRC; dwCRC = 0xFFFFFFFFL; @@ -1865,8 +1857,8 @@ s_vGenerateMACHeader ( PSEthernetHeader psEthHeader, BOOL bNeedEncrypt, WORD wFragType, - UINT uDMAIdx, - UINT uFragIdx + unsigned int uDMAIdx, + unsigned int uFragIdx ) { PS802_11Header pMACHeader = (PS802_11Header)pbyBufferAddr; @@ -1968,22 +1960,22 @@ CMD_STATUS csMgmt_xmit( void *pvRTS; PSCTS pCTS; void *pvTxDataHd; - UINT uDuration; - UINT cbReqCount; + unsigned int uDuration; + unsigned int cbReqCount; PS802_11Header pMACHeader; - UINT cbHeaderSize; - UINT cbFrameBodySize; + unsigned int cbHeaderSize; + unsigned int cbFrameBodySize; BOOL bNeedACK; BOOL bIsPSPOLL = FALSE; PSTxBufHead pTxBufHead; - UINT cbFrameSize; - UINT cbIVlen = 0; - UINT cbICVlen = 0; - UINT cbMIClen = 0; - UINT cbFCSlen = 4; - UINT uPadding = 0; + unsigned int cbFrameSize; + unsigned int cbIVlen = 0; + unsigned int cbICVlen = 0; + unsigned int cbMIClen = 0; + unsigned int cbFCSlen = 4; + unsigned int uPadding = 0; WORD wTxBufSize; - UINT cbMacHdLen; + unsigned int cbMacHdLen; SEthernetHeader sEthHeader; void *pvRrvTime; void *pMICHDR; @@ -2258,15 +2250,15 @@ csBeacon_xmit( ) { - UINT cbFrameSize = pPacket->cbMPDULen + WLAN_FCS_LEN; - UINT cbHeaderSize = 0; + unsigned int cbFrameSize = pPacket->cbMPDULen + WLAN_FCS_LEN; + unsigned int cbHeaderSize = 0; WORD wTxBufSize = sizeof(STxShortBufHead); PSTxShortBufHead pTxBufHead; PS802_11Header pMACHeader; PSTxDataHead_ab pTxDataHead; WORD wCurrentRate; - UINT cbFrameBodySize; - UINT cbReqCount; + unsigned int cbFrameBodySize; + unsigned int cbReqCount; PBEACON_BUFFER pTX_Buffer; PBYTE pbyTxBufferAddr; PUSB_SEND_CONTEXT pContext; @@ -2353,41 +2345,41 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb) { void *pvRTS; void *pvCTS; void *pvTxDataHd; - UINT uDuration; - UINT cbReqCount; + unsigned int uDuration; + unsigned int cbReqCount; PS802_11Header pMACHeader; - UINT cbHeaderSize; - UINT cbFrameBodySize; + unsigned int cbHeaderSize; + unsigned int cbFrameBodySize; BOOL bNeedACK; BOOL bIsPSPOLL = FALSE; PSTxBufHead pTxBufHead; - UINT cbFrameSize; - UINT cbIVlen = 0; - UINT cbICVlen = 0; - UINT cbMIClen = 0; - UINT cbFCSlen = 4; - UINT uPadding = 0; - UINT cbMICHDR = 0; - UINT uLength = 0; + unsigned int cbFrameSize; + unsigned int cbIVlen = 0; + unsigned int cbICVlen = 0; + unsigned int cbMIClen = 0; + unsigned int cbFCSlen = 4; + unsigned int uPadding = 0; + unsigned int cbMICHDR = 0; + unsigned int uLength = 0; DWORD dwMICKey0, dwMICKey1; DWORD dwMIC_Priority; PDWORD pdwMIC_L; PDWORD pdwMIC_R; WORD wTxBufSize; - UINT cbMacHdLen; + unsigned int cbMacHdLen; SEthernetHeader sEthHeader; void *pvRrvTime; void *pMICHDR; WORD wCurrentRate = RATE_1M; PUWLAN_80211HDR p80211Header; - UINT uNodeIndex = 0; + unsigned int uNodeIndex = 0; BOOL bNodeExist = FALSE; SKeyItem STempKey; PSKeyItem pTransmitKey = NULL; PBYTE pbyIVHead; PBYTE pbyPayloadHead; PBYTE pbyMacHdr; - UINT cbExtSuppRate = 0; + unsigned int cbExtSuppRate = 0; PTX_BUFFER pTX_Buffer; PUSB_SEND_CONTEXT pContext; // PWLAN_IE pItem; @@ -2754,20 +2746,20 @@ vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb) { NTSTATUS nsDMA_tx_packet( PSDevice pDevice, - UINT uDMAIdx, + unsigned int uDMAIdx, struct sk_buff *skb ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT BytesToWrite =0,uHeaderLen = 0; - UINT uNodeIndex = 0; + unsigned int BytesToWrite = 0, uHeaderLen = 0; + unsigned int uNodeIndex = 0; BYTE byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80}; WORD wAID; BYTE byPktType; BOOL bNeedEncryption = FALSE; PSKeyItem pTransmitKey = NULL; SKeyItem STempKey; - UINT ii; + unsigned int ii; BOOL bTKIP_UseGTK = FALSE; BOOL bNeedDeAuth = FALSE; PBYTE pbyBSSID; @@ -2775,7 +2767,7 @@ nsDMA_tx_packet( PUSB_SEND_CONTEXT pContext; BOOL fConvertedPacket; PTX_BUFFER pTX_Buffer; - UINT status; + unsigned int status; WORD wKeepRate = pDevice->wCurrentRate; struct net_device_stats* pStats = &pDevice->stats; //#ifdef WPA_SM_Transtatus @@ -3177,12 +3169,12 @@ BOOL bRelayPacketSend ( PSDevice pDevice, PBYTE pbySkbData, - UINT uDataLen, - UINT uNodeIndex + unsigned int uDataLen, + unsigned int uNodeIndex ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT BytesToWrite =0,uHeaderLen = 0; + unsigned int BytesToWrite = 0, uHeaderLen = 0; BYTE byPktType = PK_TYPE_11B; BOOL bNeedEncryption = FALSE; SKeyItem STempKey; @@ -3192,7 +3184,7 @@ bRelayPacketSend ( BYTE byPktTyp; BOOL fConvertedPacket; PTX_BUFFER pTX_Buffer; - UINT status; + unsigned int status; WORD wKeepRate = pDevice->wCurrentRate; diff --git a/drivers/staging/vt6656/rxtx.h b/drivers/staging/vt6656/rxtx.h index 64df4a3..f90de42 100644 --- a/drivers/staging/vt6656/rxtx.h +++ b/drivers/staging/vt6656/rxtx.h @@ -671,21 +671,24 @@ bPacketToWirelessUsb( BYTE byPktType, PBYTE usbPacketBuf, BOOL bNeedEncrypt, - UINT cbPayloadSize, - UINT uDMAIdx, + unsigned int cbPayloadSize, + unsigned int uDMAIdx, PSEthernetHeader psEthHeader, PBYTE pPacket, PSKeyItem pTransmitKey, - UINT uNodeIndex, + unsigned int uNodeIndex, WORD wCurrentRate, - UINT *pcbHeaderLen, - UINT *pcbTotalLen + unsigned int *pcbHeaderLen, + unsigned int *pcbTotalLen ); void vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb); -NTSTATUS nsDMA_tx_packet(PSDevice pDevice, UINT uDMAIdx, struct sk_buff *skb); +NTSTATUS nsDMA_tx_packet(PSDevice pDevice, + unsigned int uDMAIdx, + struct sk_buff *skb); CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); CMD_STATUS csBeacon_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); -BOOL bRelayPacketSend(PSDevice pDevice, PBYTE pbySkbData, UINT uDataLen, UINT uNodeIndex); +BOOL bRelayPacketSend(PSDevice pDevice, PBYTE pbySkbData, + unsigned int uDataLen, unsigned int uNodeIndex); #endif /* __RXTX_H__ */ diff --git a/drivers/staging/vt6656/tcrc.c b/drivers/staging/vt6656/tcrc.c index 3464801..e25021e 100644 --- a/drivers/staging/vt6656/tcrc.c +++ b/drivers/staging/vt6656/tcrc.c @@ -132,7 +132,7 @@ static const DWORD s_adwCrc32Table[256] = { * Return Value: CRC-32 * -*/ -DWORD CRCdwCrc32(PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed) +DWORD CRCdwCrc32(PBYTE pbyData, unsigned int cbByte, DWORD dwCrcSeed) { DWORD dwCrc; @@ -165,7 +165,7 @@ DWORD CRCdwCrc32(PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed) * Return Value: CRC-32 * -*/ -DWORD CRCdwGetCrc32(PBYTE pbyData, UINT cbByte) +DWORD CRCdwGetCrc32(PBYTE pbyData, unsigned int cbByte) { return ~CRCdwCrc32(pbyData, cbByte, 0xFFFFFFFFL); } @@ -191,7 +191,7 @@ DWORD CRCdwGetCrc32(PBYTE pbyData, UINT cbByte) * Return Value: CRC-32 * -*/ -DWORD CRCdwGetCrc32Ex(PBYTE pbyData, UINT cbByte, DWORD dwPreCRC) +DWORD CRCdwGetCrc32Ex(PBYTE pbyData, unsigned int cbByte, DWORD dwPreCRC) { return CRCdwCrc32(pbyData, cbByte, dwPreCRC); } diff --git a/drivers/staging/vt6656/tcrc.h b/drivers/staging/vt6656/tcrc.h index a41fc9b..4dfd01e 100644 --- a/drivers/staging/vt6656/tcrc.h +++ b/drivers/staging/vt6656/tcrc.h @@ -43,8 +43,8 @@ /*--------------------- Export Functions --------------------------*/ -DWORD CRCdwCrc32(PBYTE pbyData, UINT cbByte, DWORD dwCrcSeed); -DWORD CRCdwGetCrc32(PBYTE pbyData, UINT cbByte); -DWORD CRCdwGetCrc32Ex(PBYTE pbyData, UINT cbByte, DWORD dwPreCRC); +DWORD CRCdwCrc32(PBYTE pbyData, unsigned int cbByte, DWORD dwCrcSeed); +DWORD CRCdwGetCrc32(PBYTE pbyData, unsigned int cbByte); +DWORD CRCdwGetCrc32Ex(PBYTE pbyData, unsigned int cbByte, DWORD dwPreCRC); #endif /* __TCRC_H__ */ diff --git a/drivers/staging/vt6656/tether.c b/drivers/staging/vt6656/tether.c index a7c716f..4f368f1 100644 --- a/drivers/staging/vt6656/tether.c +++ b/drivers/staging/vt6656/tether.c @@ -96,7 +96,7 @@ BYTE ETHbyGetHashIndexByCrc32(PBYTE pbyMultiAddr) * Return Value: TRUE if ok; FALSE if error. * */ -BOOL ETHbIsBufferCrc32Ok(PBYTE pbyBuffer, UINT cbFrameLength) +BOOL ETHbIsBufferCrc32Ok(PBYTE pbyBuffer, unsigned int cbFrameLength) { DWORD dwCRC; diff --git a/drivers/staging/vt6656/tether.h b/drivers/staging/vt6656/tether.h index 9b26033..f5819a7 100644 --- a/drivers/staging/vt6656/tether.h +++ b/drivers/staging/vt6656/tether.h @@ -228,6 +228,6 @@ S802_11Header, *PS802_11Header; BYTE ETHbyGetHashIndexByCrc32(PBYTE pbyMultiAddr); //BYTE ETHbyGetHashIndexByCrc(PBYTE pbyMultiAddr); -BOOL ETHbIsBufferCrc32Ok(PBYTE pbyBuffer, UINT cbFrameLength); +BOOL ETHbIsBufferCrc32Ok(PBYTE pbyBuffer, unsigned int cbFrameLength); #endif /* __TETHER_H__ */ diff --git a/drivers/staging/vt6656/ttype.h b/drivers/staging/vt6656/ttype.h index 3a29775..c27f985 100644 --- a/drivers/staging/vt6656/ttype.h +++ b/drivers/staging/vt6656/ttype.h @@ -72,12 +72,6 @@ typedef int BOOL; /****** Simple typedefs ***************************************************/ -typedef unsigned char UCHAR; -typedef unsigned short USHORT; -typedef unsigned int UINT; -typedef unsigned long ULONG; -typedef unsigned long long ULONGLONG; //64 bit - typedef unsigned char BYTE; // 8-bit typedef unsigned short WORD; // 16-bit typedef unsigned long DWORD; // 32-bit diff --git a/drivers/staging/vt6656/upc.h b/drivers/staging/vt6656/upc.h index be386ed..b33aba4 100644 --- a/drivers/staging/vt6656/upc.h +++ b/drivers/staging/vt6656/upc.h @@ -141,7 +141,7 @@ #define PCAvDelayByIO(uDelayUnit) { \ BYTE byData; \ - ULONG ii; \ + unsigned long ii; \ \ if (uDelayUnit <= 50) { \ udelay(uDelayUnit); \ diff --git a/drivers/staging/vt6656/usbpipe.c b/drivers/staging/vt6656/usbpipe.c index ce71f18..fd2355e 100644 --- a/drivers/staging/vt6656/usbpipe.c +++ b/drivers/staging/vt6656/usbpipe.c @@ -484,12 +484,11 @@ s_nsInterruptUsbIoCompleteRead( pDevice->fKillEventPollingThread = TRUE; // } DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"IntUSBIoCompleteControl STATUS = %d\n", ntStatus ); - } - else { - pDevice->ulIntInBytesRead += (ULONG)urb->actual_length; - pDevice->ulIntInContCRCError = 0; - pDevice->bEventAvailable = TRUE; - INTnsProcessData(pDevice); + } else { + pDevice->ulIntInBytesRead += (unsigned long) urb->actual_length; + pDevice->ulIntInContCRCError = 0; + pDevice->bEventAvailable = TRUE; + INTnsProcessData(pDevice); } STAvUpdateUSBCounter(&pDevice->scStatistic.USB_InterruptStat, ntStatus); @@ -614,7 +613,7 @@ s_nsBulkInUsbIoCompleteRead( { PRCB pRCB = (PRCB)urb->context; PSDevice pDevice = (PSDevice)pRCB->pDevice; - ULONG bytesRead; + unsigned long bytesRead; BOOL bIndicateReceive = FALSE; BOOL bReAllocSkb = FALSE; NTSTATUS status; @@ -774,7 +773,7 @@ s_nsBulkOutIoCompleteWrite( PSDevice pDevice; NTSTATUS status; CONTEXT_TYPE ContextType; - ULONG ulBufLen; + unsigned long ulBufLen; PUSB_SEND_CONTEXT pContext; diff --git a/drivers/staging/vt6656/wcmd.c b/drivers/staging/vt6656/wcmd.c index 6fec9094..72e21b6 100644 --- a/drivers/staging/vt6656/wcmd.c +++ b/drivers/staging/vt6656/wcmd.c @@ -219,7 +219,7 @@ s_vProbeChannel( PBYTE pbyRate; PSTxMgmtPacket pTxPacket; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - UINT ii; + unsigned int ii; if (pDevice->byBBType == BB_TYPE_11A) { @@ -316,15 +316,15 @@ s_MgrMakeProbeRequest( return pTxPacket; } -void vCommandTimerWait(void *hDeviceContext, UINT MSecond) +void vCommandTimerWait(void *hDeviceContext, unsigned int MSecond) { PSDevice pDevice = (PSDevice)hDeviceContext; init_timer(&pDevice->sTimerCommand); - pDevice->sTimerCommand.data = (ULONG)pDevice; + pDevice->sTimerCommand.data = (unsigned long)pDevice; pDevice->sTimerCommand.function = (TimerFunction)vRunCommand; // RUN_AT :1 msec ~= (HZ/1024) - pDevice->sTimerCommand.expires = (UINT)RUN_AT((MSecond * HZ) >> 10); + pDevice->sTimerCommand.expires = (unsigned int)RUN_AT((MSecond * HZ) >> 10); add_timer(&pDevice->sTimerCommand); return; } @@ -336,7 +336,7 @@ void vRunCommand(void *hDeviceContext) PWLAN_IE_SSID pItemSSID; PWLAN_IE_SSID pItemSSIDCurr; CMD_STATUS Status; - UINT ii; + unsigned int ii; BYTE byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80}; struct sk_buff *skb; BYTE byData; @@ -760,7 +760,7 @@ void vRunCommand(void *hDeviceContext) // printk("Re-initial TxDataTimer****\n"); del_timer(&pDevice->sTimerTxData); init_timer(&pDevice->sTimerTxData); - pDevice->sTimerTxData.data = (ULONG)pDevice; + pDevice->sTimerTxData.data = (unsigned long) pDevice; pDevice->sTimerTxData.function = (TimerFunction)BSSvSecondTxData; pDevice->sTimerTxData.expires = RUN_AT(10*HZ); //10s callback pDevice->fTxDataInSleep = FALSE; @@ -1264,8 +1264,8 @@ BOOL bScheduleCommand(void *hDeviceContext, static BOOL s_bClearBSSID_SCAN(void *hDeviceContext) { PSDevice pDevice = (PSDevice)hDeviceContext; - UINT uCmdDequeueIdx = pDevice->uCmdDequeueIdx; - UINT ii; + unsigned int uCmdDequeueIdx = pDevice->uCmdDequeueIdx; + unsigned int ii; if ((pDevice->cbFreeCmdQueue < CMD_Q_SIZE) && (uCmdDequeueIdx != pDevice->uCmdEnqueueIdx)) { for (ii = 0; ii < (CMD_Q_SIZE - pDevice->cbFreeCmdQueue); ii ++) { @@ -1289,7 +1289,7 @@ void vResetCommandTimer(void *hDeviceContext) del_timer(&pDevice->sTimerCommand); //init timer init_timer(&pDevice->sTimerCommand); - pDevice->sTimerCommand.data = (ULONG)pDevice; + pDevice->sTimerCommand.data = (unsigned long)pDevice; pDevice->sTimerCommand.function = (TimerFunction)vRunCommand; pDevice->sTimerCommand.expires = RUN_AT(HZ); pDevice->cbFreeCmdQueue = CMD_Q_SIZE; diff --git a/drivers/staging/vt6656/wctl.c b/drivers/staging/vt6656/wctl.c index 956add6..857ce0b 100644 --- a/drivers/staging/vt6656/wctl.c +++ b/drivers/staging/vt6656/wctl.c @@ -69,8 +69,8 @@ BOOL WCTLbIsDuplicate (PSCache pCache, PS802_11Header pMACHeader) { - UINT uIndex; - UINT ii; + unsigned int uIndex; + unsigned int ii; PSCacheEntry pCacheEntry; if (IS_FC_RETRY(pMACHeader)) { @@ -111,9 +111,9 @@ BOOL WCTLbIsDuplicate (PSCache pCache, PS802_11Header pMACHeader) * Return Value: index number in Defragment Database * */ -UINT WCTLuSearchDFCB (PSDevice pDevice, PS802_11Header pMACHeader) +unsigned int WCTLuSearchDFCB(PSDevice pDevice, PS802_11Header pMACHeader) { -UINT ii; + unsigned int ii; for(ii=0;iicbDFCB;ii++) { if ((pDevice->sRxDFCB[ii].bInUse == TRUE) && @@ -141,9 +141,9 @@ UINT ii; * Return Value: index number in Defragment Database * */ -UINT WCTLuInsertDFCB (PSDevice pDevice, PS802_11Header pMACHeader) +unsigned int WCTLuInsertDFCB(PSDevice pDevice, PS802_11Header pMACHeader) { -UINT ii; + unsigned int ii; if (pDevice->cbFreeDFCB == 0) return(pDevice->cbDFCB); @@ -180,9 +180,10 @@ UINT ii; * Return Value: TRUE if it is valid fragment packet and we have resource to defragment; otherwise FALSE * */ -BOOL WCTLbHandleFragment (PSDevice pDevice, PS802_11Header pMACHeader, UINT cbFrameLength, BOOL bWEP, BOOL bExtIV) +BOOL WCTLbHandleFragment(PSDevice pDevice, PS802_11Header pMACHeader, + unsigned int cbFrameLength, BOOL bWEP, BOOL bExtIV) { -UINT uHeaderSize; +unsigned int uHeaderSize; if (bWEP == TRUE) { diff --git a/drivers/staging/vt6656/wctl.h b/drivers/staging/vt6656/wctl.h index c81dff7..7270af6 100644 --- a/drivers/staging/vt6656/wctl.h +++ b/drivers/staging/vt6656/wctl.h @@ -90,7 +90,6 @@ (uVar)++; \ } - /*--------------------- Export Classes ----------------------------*/ /*--------------------- Export Variables --------------------------*/ @@ -98,8 +97,9 @@ /*--------------------- Export Functions --------------------------*/ BOOL WCTLbIsDuplicate(PSCache pCache, PS802_11Header pMACHeader); -BOOL WCTLbHandleFragment(PSDevice pDevice, PS802_11Header pMACHeader, UINT cbFrameLength, BOOL bWEP, BOOL bExtIV); -UINT WCTLuSearchDFCB(PSDevice pDevice, PS802_11Header pMACHeader); -UINT WCTLuInsertDFCB(PSDevice pDevice, PS802_11Header pMACHeader); +BOOL WCTLbHandleFragment(PSDevice pDevice, PS802_11Header pMACHeader, + unsigned int cbFrameLength, BOOL bWEP, BOOL bExtIV); +unsigned int WCTLuSearchDFCB(PSDevice pDevice, PS802_11Header pMACHeader); +unsigned int WCTLuInsertDFCB(PSDevice pDevice, PS802_11Header pMACHeader); #endif /* __WCTL_H__ */ diff --git a/drivers/staging/vt6656/wmgr.c b/drivers/staging/vt6656/wmgr.c index aaba522..93c15f0 100644 --- a/drivers/staging/vt6656/wmgr.c +++ b/drivers/staging/vt6656/wmgr.c @@ -118,7 +118,7 @@ s_vMgrRxAssocRequest( PSDevice pDevice, PSMgmtObject pMgmt, PSRxMgmtPacket pRxPacket, - UINT uNodeIndex + unsigned int uNodeIndex ); static @@ -242,7 +242,7 @@ s_MgrMakeBeacon( PSMgmtObject pMgmt, WORD wCurrCapInfo, WORD wCurrBeaconPeriod, - UINT uCurrChannel, + unsigned int uCurrChannel, WORD wCurrATIMWinodw, PWLAN_IE_SSID pCurrSSID, PBYTE pCurrBSSID, @@ -287,7 +287,7 @@ s_MgrMakeProbeResponse( PSMgmtObject pMgmt, WORD wCurrCapInfo, WORD wCurrBeaconPeriod, - UINT uCurrChannel, + unsigned int uCurrChannel, WORD wCurrATIMWinodw, PBYTE pDstAddr, PWLAN_IE_SSID pCurrSSID, @@ -310,7 +310,7 @@ static void s_vMgrSynchBSS ( PSDevice pDevice, - UINT uBSSMode, + unsigned int uBSSMode, PKnownBSS pCurr, PCMD_STATUS pStatus ); @@ -364,19 +364,19 @@ void vMgrObjectInit(void *hDeviceContext) BSSvClearBSSList((void *) pDevice, FALSE); init_timer(&pMgmt->sTimerSecondCallback); - pMgmt->sTimerSecondCallback.data = (ULONG)pDevice; + pMgmt->sTimerSecondCallback.data = (unsigned long)pDevice; pMgmt->sTimerSecondCallback.function = (TimerFunction)BSSvSecondCallBack; pMgmt->sTimerSecondCallback.expires = RUN_AT(HZ); init_timer(&pDevice->sTimerCommand); - pDevice->sTimerCommand.data = (ULONG)pDevice; + pDevice->sTimerCommand.data = (unsigned long)pDevice; pDevice->sTimerCommand.function = (TimerFunction)vRunCommand; pDevice->sTimerCommand.expires = RUN_AT(HZ); //2007-0115-10by MikeLiu #ifdef TxInSleep init_timer(&pDevice->sTimerTxData); - pDevice->sTimerTxData.data = (ULONG)pDevice; + pDevice->sTimerTxData.data = (unsigned long)pDevice; pDevice->sTimerTxData.function = (TimerFunction)BSSvSecondTxData; pDevice->sTimerTxData.expires = RUN_AT(10*HZ); //10s callback pDevice->fTxDataInSleep = FALSE; @@ -619,7 +619,7 @@ s_vMgrRxAssocRequest( PSDevice pDevice, PSMgmtObject pMgmt, PSRxMgmtPacket pRxPacket, - UINT uNodeIndex + unsigned int uNodeIndex ) { WLAN_FR_ASSOCREQ sFrame; @@ -627,7 +627,7 @@ s_vMgrRxAssocRequest( PSTxMgmtPacket pTxPacket; WORD wAssocStatus = 0; WORD wAssocAID = 0; - UINT uRateLen = WLAN_RATES_MAXLEN; + unsigned int uRateLen = WLAN_RATES_MAXLEN; BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; @@ -775,7 +775,7 @@ s_vMgrRxReAssocRequest( PSDevice pDevice, PSMgmtObject pMgmt, PSRxMgmtPacket pRxPacket, - UINT uNodeIndex + unsigned int uNodeIndex ) { WLAN_FR_REASSOCREQ sFrame; @@ -783,7 +783,7 @@ s_vMgrRxReAssocRequest( PSTxMgmtPacket pTxPacket; WORD wAssocStatus = 0; WORD wAssocAID = 0; - UINT uRateLen = WLAN_RATES_MAXLEN; + unsigned int uRateLen = WLAN_RATES_MAXLEN; BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; @@ -1257,7 +1257,7 @@ s_vMgrRxAuthenSequence_1( ) { PSTxMgmtPacket pTxPacket = NULL; - UINT uNodeIndex; + unsigned int uNodeIndex; WLAN_FR_AUTHEN sFrame; PSKeyItem pTransmitKey; @@ -1464,8 +1464,8 @@ s_vMgrRxAuthenSequence_3( ) { PSTxMgmtPacket pTxPacket = NULL; - UINT uStatusCode = 0 ; - UINT uNodeIndex = 0; + unsigned int uStatusCode = 0 ; + unsigned int uNodeIndex = 0; WLAN_FR_AUTHEN sFrame; if (!WLAN_GET_FC_ISWEP(pFrame->pHdr->sA3.wFrameCtl)) { @@ -1590,7 +1590,7 @@ s_vMgrRxDisassociation( ) { WLAN_FR_DISASSOC sFrame; - UINT uNodeIndex = 0; + unsigned int uNodeIndex = 0; CMD_STATUS CmdStatus; viawget_wpa_header *wpahdr; @@ -1680,7 +1680,7 @@ s_vMgrRxDeauthentication( ) { WLAN_FR_DEAUTHEN sFrame; - UINT uNodeIndex = 0; + unsigned int uNodeIndex = 0; viawget_wpa_header *wpahdr; @@ -1817,17 +1817,17 @@ s_vMgrRxBeacon( BOOL bUpdateTSF = FALSE; BOOL bIsAPBeacon = FALSE; BOOL bIsChannelEqual = FALSE; - UINT uLocateByteIndex; + unsigned int uLocateByteIndex; BYTE byTIMBitOn = 0; WORD wAIDNumber = 0; - UINT uNodeIndex; + unsigned int uNodeIndex; QWORD qwTimestamp, qwLocalTSF; QWORD qwCurrTSF; WORD wStartIndex = 0; WORD wAIDIndex = 0; BYTE byCurrChannel = pRxPacket->byRxChannel; ERPObject sERP; - UINT uRateLen = WLAN_RATES_MAXLEN; + unsigned int uRateLen = WLAN_RATES_MAXLEN; BOOL bChannelHit = FALSE; BYTE byOldPreambleType; @@ -2336,7 +2336,7 @@ void vMgrCreateOwnIBSS(void *hDeviceContext, BYTE byTopCCKBasicRate; BYTE byTopOFDMBasicRate; QWORD qwCurrTSF; - UINT ii; + unsigned int ii; BYTE abyRATE[] = {0x82, 0x84, 0x8B, 0x96, 0x24, 0x30, 0x48, 0x6C, 0x0C, 0x12, 0x18, 0x60}; BYTE abyCCK_RATE[] = {0x82, 0x84, 0x8B, 0x96}; BYTE abyOFDM_RATE[] = {0x0C, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6C}; @@ -2601,11 +2601,11 @@ void vMgrJoinBSSBegin(void *hDeviceContext, PCMD_STATUS pStatus) PSDevice pDevice = (PSDevice)hDeviceContext; PSMgmtObject pMgmt = &(pDevice->sMgmtObj); PKnownBSS pCurr = NULL; - UINT ii, uu; + unsigned int ii, uu; PWLAN_IE_SUPP_RATES pItemRates = NULL; PWLAN_IE_SUPP_RATES pItemExtRates = NULL; PWLAN_IE_SSID pItemSSID; - UINT uRateLen = WLAN_RATES_MAXLEN; + unsigned int uRateLen = WLAN_RATES_MAXLEN; WORD wMaxBasicRate = RATE_1M; WORD wMaxSuppRate = RATE_1M; WORD wSuppRate; @@ -2705,9 +2705,10 @@ void vMgrJoinBSSBegin(void *hDeviceContext, PCMD_STATUS pStatus) uRateLen); // Stuffing Rate IE if ((pItemExtRates->len > 0) && (pItemRates->len < 8)) { - for (ii = 0; ii < (UINT)(8 - pItemRates->len); ) { - pItemRates->abyRates[pItemRates->len + ii] = pItemExtRates->abyRates[ii]; - ii ++; + for (ii = 0; ii < (unsigned int) (8 - pItemRates->len); ) { + pItemRates->abyRates[pItemRates->len + ii] = + pItemExtRates->abyRates[ii]; + ii++; if (pItemExtRates->len <= ii) break; } @@ -2931,7 +2932,7 @@ static void s_vMgrSynchBSS ( PSDevice pDevice, - UINT uBSSMode, + unsigned int uBSSMode, PKnownBSS pCurr, PCMD_STATUS pStatus ) @@ -3096,7 +3097,7 @@ s_vMgrSynchBSS ( ) { PSMgmtObject pMgmt = &(pDevice->sMgmtObj); - // UINT ii , uSameBssidNum=0; + /* unsigned int ii, uSameBssidNum=0; */ // for (ii = 0; ii < MAX_BSS_NUM; ii++) { // if (pMgmt->sBSSList[ii].bActive && @@ -3155,7 +3156,7 @@ s_vMgrFormatTIM( { BYTE byMask[8] = {1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80}; BYTE byMap; - UINT ii, jj; + unsigned int ii, jj; BOOL bStartFound = FALSE; BOOL bMulticast = FALSE; WORD wStartIndex = 0; @@ -3228,7 +3229,7 @@ s_MgrMakeBeacon( PSMgmtObject pMgmt, WORD wCurrCapInfo, WORD wCurrBeaconPeriod, - UINT uCurrChannel, + unsigned int uCurrChannel, WORD wCurrATIMWinodw, PWLAN_IE_SSID pCurrSSID, PBYTE pCurrBSSID, @@ -3402,7 +3403,7 @@ s_MgrMakeProbeResponse( PSMgmtObject pMgmt, WORD wCurrCapInfo, WORD wCurrBeaconPeriod, - UINT uCurrChannel, + unsigned int uCurrChannel, WORD wCurrATIMWinodw, PBYTE pDstAddr, PWLAN_IE_SSID pCurrSSID, @@ -3672,7 +3673,7 @@ s_MgrMakeAssocRequest( } else if (((pMgmt->eAuthenMode == WMAC_AUTH_WPA2) || (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK)) && (pMgmt->pCurrBSS != NULL)) { - UINT ii; + unsigned int ii; PWORD pwPMKID; // WPA IE @@ -3932,7 +3933,7 @@ s_MgrMakeReAssocRequest( } else if (((pMgmt->eAuthenMode == WMAC_AUTH_WPA2) || (pMgmt->eAuthenMode == WMAC_AUTH_WPA2PSK)) && (pMgmt->pCurrBSS != NULL)) { - UINT ii; + unsigned int ii; PWORD pwPMKID; /* WPA IE */ @@ -4422,7 +4423,7 @@ void vMgrRxManagePacket(void *hDeviceContext, { PSDevice pDevice = (PSDevice)hDeviceContext; BOOL bInScan = FALSE; - UINT uNodeIndex = 0; + unsigned int uNodeIndex = 0; NODE_STATE eNodeState = 0; CMD_STATUS Status; @@ -4689,7 +4690,7 @@ BOOL bAdd_PMKID_Candidate(void *hDeviceContext, { PSDevice pDevice = (PSDevice)hDeviceContext; PPMKID_CANDIDATE pCandidateList; - UINT ii = 0; + unsigned int ii = 0; DBG_PRT(MSG_LEVEL_DEBUG, KERN_INFO"bAdd_PMKID_Candidate START: (%d)\n", (int)pDevice->gsPMKIDCandidate.NumCandidates); diff --git a/drivers/staging/vt6656/wmgr.h b/drivers/staging/vt6656/wmgr.h index ec2ee78..1e5b916 100644 --- a/drivers/staging/vt6656/wmgr.h +++ b/drivers/staging/vt6656/wmgr.h @@ -84,37 +84,37 @@ //mike define: make timer to expire after desired times #define timer_expire(timer,next_tick) mod_timer(&timer, RUN_AT(next_tick)) -typedef void (*TimerFunction)(ULONG); +typedef void (*TimerFunction)(unsigned long); //+++ NDIS related -typedef UCHAR NDIS_802_11_MAC_ADDRESS[6]; +typedef unsigned char NDIS_802_11_MAC_ADDRESS[ETH_ALEN]; typedef struct _NDIS_802_11_AI_REQFI { - USHORT Capabilities; - USHORT ListenInterval; + unsigned short Capabilities; + unsigned short ListenInterval; NDIS_802_11_MAC_ADDRESS CurrentAPAddress; } NDIS_802_11_AI_REQFI, *PNDIS_802_11_AI_REQFI; typedef struct _NDIS_802_11_AI_RESFI { - USHORT Capabilities; - USHORT StatusCode; - USHORT AssociationId; + unsigned short Capabilities; + unsigned short StatusCode; + unsigned short AssociationId; } NDIS_802_11_AI_RESFI, *PNDIS_802_11_AI_RESFI; typedef struct _NDIS_802_11_ASSOCIATION_INFORMATION { - ULONG Length; - USHORT AvailableRequestFixedIEs; + unsigned long Length; + unsigned short AvailableRequestFixedIEs; NDIS_802_11_AI_REQFI RequestFixedIEs; - ULONG RequestIELength; - ULONG OffsetRequestIEs; - USHORT AvailableResponseFixedIEs; + unsigned long RequestIELength; + unsigned long OffsetRequestIEs; + unsigned short AvailableResponseFixedIEs; NDIS_802_11_AI_RESFI ResponseFixedIEs; - ULONG ResponseIELength; - ULONG OffsetResponseIEs; + unsigned long ResponseIELength; + unsigned long OffsetResponseIEs; } NDIS_802_11_ASSOCIATION_INFORMATION, *PNDIS_802_11_ASSOCIATION_INFORMATION; @@ -123,7 +123,7 @@ typedef struct tagSAssocInfo { NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; BYTE abyIEs[WLAN_BEACON_FR_MAXLEN+WLAN_BEACON_FR_MAXLEN]; // store ReqIEs set by OID_802_11_ASSOCIATION_INFORMATION - ULONG RequestIELength; + unsigned long RequestIELength; BYTE abyReqIEs[WLAN_BEACON_FR_MAXLEN]; } SAssocInfo, *PSAssocInfo; //--- @@ -222,8 +222,8 @@ typedef enum tagWMAC_POWER_MODE { typedef struct tagSTxMgmtPacket { PUWLAN_80211HDR p80211Header; - UINT cbMPDULen; - UINT cbPayloadLen; + unsigned int cbMPDULen; + unsigned int cbPayloadLen; } STxMgmtPacket, *PSTxMgmtPacket; @@ -233,9 +233,9 @@ typedef struct tagSRxMgmtPacket { PUWLAN_80211HDR p80211Header; QWORD qwLocalTSF; - UINT cbMPDULen; - UINT cbPayloadLen; - UINT uRSSI; + unsigned int cbMPDULen; + unsigned int cbPayloadLen; + unsigned int uRSSI; BYTE bySQ; BYTE byRxRate; BYTE byRxChannel; @@ -272,21 +272,21 @@ typedef struct tagSMgmtObject BOOL bCurrBSSIDFilterOn; // Current state vars - UINT uCurrChannel; + unsigned int uCurrChannel; BYTE abyCurrSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; BYTE abyCurrExtSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; BYTE abyCurrSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; BYTE abyCurrBSSID[WLAN_BSSID_LEN]; WORD wCurrCapInfo; WORD wCurrAID; - UINT uRSSITrigger; + unsigned int uRSSITrigger; WORD wCurrATIMWindow; WORD wCurrBeaconPeriod; BOOL bIsDS; BYTE byERPContext; CMD_STATE eCommandState; - UINT uScanChannel; + unsigned int uScanChannel; // Desire joinning BSS vars BYTE abyDesireSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; @@ -301,22 +301,22 @@ typedef struct tagSMgmtObject // Adhoc or AP configuration vars WORD wIBSSBeaconPeriod; WORD wIBSSATIMWindow; - UINT uIBSSChannel; + unsigned int uIBSSChannel; BYTE abyIBSSSuppRates[WLAN_IEHDR_LEN + WLAN_RATES_MAXLEN + 1]; BYTE byAPBBType; BYTE abyWPAIE[MAX_WPA_IE_LEN]; WORD wWPAIELen; - UINT uAssocCount; + unsigned int uAssocCount; BOOL bMoreData; // Scan state vars WMAC_SCAN_STATE eScanState; WMAC_SCAN_TYPE eScanType; - UINT uScanStartCh; - UINT uScanEndCh; + unsigned int uScanStartCh; + unsigned int uScanEndCh; WORD wScanSteps; - UINT uScanBSSType; + unsigned int uScanBSSType; // Desire scannig vars BYTE abyScanSSID[WLAN_IEHDR_LEN + WLAN_SSID_MAXLEN + 1]; BYTE abyScanBSSID[WLAN_BSSID_LEN]; @@ -344,8 +344,8 @@ typedef struct tagSMgmtObject BYTE abyPSTxMap[MAX_NODE_NUM + 1]; // managment command related - UINT uCmdBusy; - UINT uCmdHostAPBusy; + unsigned int uCmdBusy; + unsigned int uCmdHostAPBusy; // managment packet pool PBYTE pbyMgmtPacketPool; @@ -389,7 +389,7 @@ typedef struct tagSMgmtObject BOOL bSwitchChannel; BYTE byNewChannel; PWLAN_IE_MEASURE_REP pCurrMeasureEIDRep; - UINT uLengthOfRepEIDs; + unsigned int uLengthOfRepEIDs; BYTE abyCurrentMSRReq[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; BYTE abyCurrentMSRRep[sizeof(STxMgmtPacket) + WLAN_A3FR_MAXLEN]; BYTE abyIECountry[WLAN_A3FR_MAXLEN]; diff --git a/drivers/staging/vt6656/wpa2.c b/drivers/staging/vt6656/wpa2.c index 9bd6bf5..6d13190 100644 --- a/drivers/staging/vt6656/wpa2.c +++ b/drivers/staging/vt6656/wpa2.c @@ -260,14 +260,14 @@ WPA2vParseRSN ( * Return Value: length of IEs. * -*/ -UINT +unsigned int WPA2uSetIEs(void *pMgmtHandle, PWLAN_IE_RSN pRSNIEs ) { PSMgmtObject pMgmt = (PSMgmtObject) pMgmtHandle; PBYTE pbyBuffer = NULL; - UINT ii = 0; + unsigned int ii = 0; PWORD pwPMKID = NULL; if (pRSNIEs == NULL) { diff --git a/drivers/staging/vt6656/wpa2.h b/drivers/staging/vt6656/wpa2.h index 79305a7..429a910 100644 --- a/drivers/staging/vt6656/wpa2.h +++ b/drivers/staging/vt6656/wpa2.h @@ -45,7 +45,7 @@ typedef struct tagsPMKIDInfo { } PMKIDInfo, *PPMKIDInfo; typedef struct tagSPMKIDCache { - ULONG BSSIDInfoCount; + unsigned long BSSIDInfoCount; PMKIDInfo BSSIDInfo[MAX_PMKID_CACHE]; } SPMKIDCache, *PSPMKIDCache; @@ -69,7 +69,7 @@ WPA2vParseRSN ( PWLAN_IE_RSN pRSN ); -UINT +unsigned int WPA2uSetIEs( void *pMgmtHandle, PWLAN_IE_RSN pRSNIEs diff --git a/drivers/staging/vt6656/wpactl.h b/drivers/staging/vt6656/wpactl.h index 3a2f15f..00c8451 100644 --- a/drivers/staging/vt6656/wpactl.h +++ b/drivers/staging/vt6656/wpactl.h @@ -52,9 +52,7 @@ typedef enum { KEY_MGMT_802_1X, KEY_MGMT_PSK, KEY_MGMT_NONE, #define GENERIC_INFO_ELEM 0xdd #define RSN_INFO_ELEM 0x30 - - -typedef ULONGLONG NDIS_802_11_KEY_RSC; +typedef unsigned long long NDIS_802_11_KEY_RSC; /*--------------------- Export Classes ----------------------------*/ -- cgit v0.10.2 From 973267a212a6f28c26cbb7929a7ffdd963c16861 Mon Sep 17 00:00:00 2001 From: Adam Latham Date: Sat, 15 May 2010 09:38:44 +0100 Subject: Staging: winbond: Fix for pointer name format issue in mds.c This patch fixes the unnecessary whitespace found in pointer names in the mds.c file found by the checkpatch.pl tool Signed-off-by: Adam Latham Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/winbond/mds.c b/drivers/staging/winbond/mds.c index 65063c3..e8320a6 100644 --- a/drivers/staging/winbond/mds.c +++ b/drivers/staging/winbond/mds.c @@ -6,7 +6,7 @@ #include "wblinux_f.h" unsigned char -Mds_initial(struct wbsoft_priv * adapter) +Mds_initial(struct wbsoft_priv *adapter) { struct wb35_mds *pMds = &adapter->Mds; @@ -18,7 +18,7 @@ Mds_initial(struct wbsoft_priv * adapter) } void -Mds_Destroy(struct wbsoft_priv * adapter) +Mds_Destroy(struct wbsoft_priv *adapter) { } @@ -318,7 +318,7 @@ static u16 Mds_BodyCopy(struct wbsoft_priv *adapter, struct wb35_descriptor *pDe return Size; } -static void Mds_HeaderCopy(struct wbsoft_priv * adapter, struct wb35_descriptor *pDes, u8 *TargetBuffer) +static void Mds_HeaderCopy(struct wbsoft_priv *adapter, struct wb35_descriptor *pDes, u8 *TargetBuffer) { struct wb35_mds *pMds = &adapter->Mds; u8 *src_buffer = pDes->buffer_address[0]; /* 931130.5.g */ @@ -414,9 +414,9 @@ static void Mds_HeaderCopy(struct wbsoft_priv * adapter, struct wb35_descriptor } void -Mds_Tx(struct wbsoft_priv * adapter) +Mds_Tx(struct wbsoft_priv *adapter) { - struct hw_data * pHwData = &adapter->sHwData; + struct hw_data *pHwData = &adapter->sHwData; struct wb35_mds *pMds = &adapter->Mds; struct wb35_descriptor TxDes; struct wb35_descriptor *pTxDes = &TxDes; @@ -550,10 +550,10 @@ Mds_Tx(struct wbsoft_priv * adapter) } void -Mds_SendComplete(struct wbsoft_priv * adapter, PT02_DESCRIPTOR pT02) +Mds_SendComplete(struct wbsoft_priv *adapter, PT02_DESCRIPTOR pT02) { struct wb35_mds *pMds = &adapter->Mds; - struct hw_data * pHwData = &adapter->sHwData; + struct hw_data *pHwData = &adapter->sHwData; u8 PacketId = (u8)pT02->T02_Tx_PktID; unsigned char SendOK = true; u8 RetryCount, TxRate; -- cgit v0.10.2 From abfc768d9e374dc30b98206aff99d790e36d06dd Mon Sep 17 00:00:00 2001 From: Lior Dotan Date: Tue, 18 May 2010 12:46:42 +0300 Subject: Staging: crystalhd: Remove typedefs from driver Remove typedefs from driver Signed-of-by: Lior Dotan Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/crystalhd/bc_dts_defs.h b/drivers/staging/crystalhd/bc_dts_defs.h index f9dd0e3..778e76a 100644 --- a/drivers/staging/crystalhd/bc_dts_defs.h +++ b/drivers/staging/crystalhd/bc_dts_defs.h @@ -26,12 +26,10 @@ #ifndef _BC_DTS_DEFS_H_ #define _BC_DTS_DEFS_H_ -#include "bc_dts_types.h" - /* BIT Mask */ #define BC_BIT(_x) (1 << (_x)) -typedef enum _BC_STATUS { +enum BC_STATUS { BC_STS_SUCCESS = 0, BC_STS_INV_ARG = 1, BC_STS_BUSY = 2, @@ -62,7 +60,7 @@ typedef enum _BC_STATUS { /* Must be the last one.*/ BC_STS_ERROR = -1 -} BC_STATUS; +}; /*------------------------------------------------------* * Registry Key Definitions * @@ -81,14 +79,14 @@ typedef enum _BC_STATUS { * */ -typedef enum _BC_SW_OPTIONS { +enum BC_SW_OPTIONS { BC_OPT_DOSER_OUT_ENCRYPT = BC_BIT(3), BC_OPT_LINK_OUT_ENCRYPT = BC_BIT(29), -} BC_SW_OPTIONS; +}; -typedef struct _BC_REG_CONFIG{ +struct BC_REG_CONFIG{ uint32_t DbgOptions; -} BC_REG_CONFIG; +}; #if defined(__KERNEL__) || defined(__LINUX_USER__) #else @@ -108,7 +106,7 @@ typedef struct _BC_REG_CONFIG{ */ /* To allow multiple apps to open the device. */ -enum _DtsDeviceOpenMode { +enum DtsDeviceOpenMode { DTS_PLAYBACK_MODE = 0, DTS_DIAG_MODE, DTS_MONITOR_MODE, @@ -116,7 +114,7 @@ enum _DtsDeviceOpenMode { }; /* To enable the filter to selectively enable/disable fixes or erratas */ -enum _DtsDeviceFixMode { +enum DtsDeviceFixMode { DTS_LOAD_NEW_FW = BC_BIT(8), DTS_LOAD_FILE_PLAY_FW = BC_BIT(9), DTS_DISK_FMT_BD = BC_BIT(10), @@ -133,7 +131,7 @@ enum _DtsDeviceFixMode { #define DTS_DFLT_CLOCK(x) (x<<19) /* F/W File Version corresponding to S/W Releases */ -enum _FW_FILE_VER { +enum FW_FILE_VER { /* S/W release: 02.04.02 F/W release 2.12.2.0 */ BC_FW_VER_020402 = ((12<<16) | (2<<8) | (0)) }; @@ -141,7 +139,7 @@ enum _FW_FILE_VER { /*------------------------------------------------------* * Stream Types for DtsOpenDecoder() * *------------------------------------------------------*/ -enum _DtsOpenDecStreamTypes { +enum DtsOpenDecStreamTypes { BC_STREAM_TYPE_ES = 0, BC_STREAM_TYPE_PES = 1, BC_STREAM_TYPE_TS = 2, @@ -151,7 +149,7 @@ enum _DtsOpenDecStreamTypes { /*------------------------------------------------------* * Video Algorithms for DtsSetVideoParams() * *------------------------------------------------------*/ -enum _DtsSetVideoParamsAlgo { +enum DtsSetVideoParamsAlgo { BC_VID_ALGO_H264 = 0, BC_VID_ALGO_MPEG2 = 1, BC_VID_ALGO_VC1 = 4, @@ -163,7 +161,7 @@ enum _DtsSetVideoParamsAlgo { *------------------------------------------------------*/ #define BC_MPEG_VALID_PANSCAN (1) -typedef struct _BC_PIB_EXT_MPEG { +struct BC_PIB_EXT_MPEG { uint32_t valid; /* Always valid, defaults to picture size if no * sequence display extension in the stream. */ @@ -175,8 +173,7 @@ typedef struct _BC_PIB_EXT_MPEG { uint32_t offset_count; int32_t horizontal_offset[3]; int32_t vertical_offset[3]; - -} BC_PIB_EXT_MPEG; +}; /*------------------------------------------------------* * H.264 Extension to the PPB * @@ -186,7 +183,7 @@ typedef struct _BC_PIB_EXT_MPEG { #define H264_VALID_SPS_CROP (2) #define H264_VALID_VUI (4) -typedef struct _BC_PIB_EXT_H264 { +struct BC_PIB_EXT_H264 { /* 'valid' specifies which fields (or sets of * fields) below are valid. If the corresponding * bit in 'valid' is NOT set then that field(s) @@ -209,15 +206,14 @@ typedef struct _BC_PIB_EXT_H264 { /* H264_VALID_VUI */ uint32_t chroma_top; uint32_t chroma_bottom; - -} BC_PIB_EXT_H264; +}; /*------------------------------------------------------* * VC1 Extension to the PPB * *------------------------------------------------------*/ #define VC1_VALID_PANSCAN (1) -typedef struct _BC_PIB_EXT_VC1 { +struct BC_PIB_EXT_VC1 { uint32_t valid; /* Always valid, defaults to picture size if no @@ -231,9 +227,7 @@ typedef struct _BC_PIB_EXT_VC1 { int32_t ps_vert_offset[4]; int32_t ps_width[4]; int32_t ps_height[4]; - -} BC_PIB_EXT_VC1; - +}; /*------------------------------------------------------* * Picture Information Block * @@ -366,7 +360,7 @@ enum _BC_OUTPUT_FORMAT { MODE422_UYVY = 0x2, }; -typedef struct _BC_PIC_INFO_BLOCK { +struct BC_PIC_INFO_BLOCK { /* Common fields. */ uint64_t timeStamp; /* Timestamp */ uint32_t picture_number; /* Ordinal display number */ @@ -386,18 +380,18 @@ typedef struct _BC_PIC_INFO_BLOCK { /* Protocol-specific extensions. */ union { - BC_PIB_EXT_H264 h264; - BC_PIB_EXT_MPEG mpeg; - BC_PIB_EXT_VC1 vc1; + struct BC_PIB_EXT_H264 h264; + struct BC_PIB_EXT_MPEG mpeg; + struct BC_PIB_EXT_VC1 vc1; } other; -} BC_PIC_INFO_BLOCK, *PBC_PIC_INFO_BLOCK; +}; /*------------------------------------------------------* * ProcOut Info * *------------------------------------------------------*/ /* Optional flags for ProcOut Interface.*/ -enum _POUT_OPTIONAL_IN_FLAGS_{ +enum POUT_OPTIONAL_IN_FLAGS_{ /* Flags from App to Device */ BC_POUT_FLAGS_YV12 = 0x01, /* Copy Data in YV12 format */ BC_POUT_FLAGS_STRIDE = 0x02, /* Stride size is valid. */ @@ -412,17 +406,13 @@ enum _POUT_OPTIONAL_IN_FLAGS_{ BC_POUT_FLAGS_FLD_BOT = 0x80000, /* Bottom Field data */ }; -#if defined(__KERNEL__) || defined(__LINUX_USER__) -typedef BC_STATUS(*dts_pout_callback)(void *shnd, uint32_t width, uint32_t height, uint32_t stride, void *pOut); -#else -typedef BC_STATUS(*dts_pout_callback)(void *shnd, uint32_t width, uint32_t height, uint32_t stride, struct _BC_DTS_PROC_OUT *pOut); -#endif +typedef enum BC_STATUS(*dts_pout_callback)(void *shnd, uint32_t width, uint32_t height, uint32_t stride, void *pOut); /* Line 21 Closed Caption */ /* User Data */ #define MAX_UD_SIZE 1792 /* 1920 - 128 */ -typedef struct _BC_DTS_PROC_OUT { +struct BC_DTS_PROC_OUT { uint8_t *Ybuff; /* Caller Supplied buffer for Y data */ uint32_t YbuffSz; /* Caller Supplied Y buffer size */ uint32_t YBuffDoneSz; /* Transferred Y datasize */ @@ -436,7 +426,7 @@ typedef struct _BC_DTS_PROC_OUT { uint32_t discCnt; /* Picture discontinuity count */ - BC_PIC_INFO_BLOCK PicInfo; /* Picture Information Block Data */ + struct BC_PIC_INFO_BLOCK PicInfo; /* Picture Information Block Data */ /* Line 21 Closed Caption */ /* User Data */ @@ -450,9 +440,9 @@ typedef struct _BC_DTS_PROC_OUT { uint8_t bPibEnc; /* PIB encrypted */ uint8_t bRevertScramble; -} BC_DTS_PROC_OUT; +}; -typedef struct _BC_DTS_STATUS { +struct BC_DTS_STATUS { uint8_t ReadyListCount; /* Number of frames in ready list (reported by driver) */ uint8_t FreeListCount; /* Number of frame buffers free. (reported by driver) */ uint8_t PowerStateChange; /* Number of active state power transitions (reported by driver) */ @@ -479,7 +469,7 @@ typedef struct _BC_DTS_STATUS { * back from the driver */ uint8_t reserved__[16]; -} BC_DTS_STATUS; +}; #define BC_SWAP32(_v) \ ((((_v) & 0xFF000000)>>24)| \ diff --git a/drivers/staging/crystalhd/bc_dts_glob_lnx.h b/drivers/staging/crystalhd/bc_dts_glob_lnx.h index 0fd34e2..80b7a73 100644 --- a/drivers/staging/crystalhd/bc_dts_glob_lnx.h +++ b/drivers/staging/crystalhd/bc_dts_glob_lnx.h @@ -58,7 +58,7 @@ * These are SW stack tunable parameters shared * between the driver and the application. */ -enum _BC_DTS_GLOBALS { +enum BC_DTS_GLOBALS { BC_MAX_FW_CMD_BUFF_SZ = 0x40, /* FW passthrough cmd/rsp buffer size */ PCI_CFG_SIZE = 256, /* PCI config size buffer */ BC_IOCTL_DATA_POOL_SIZE = 8, /* BC_IOCTL_DATA Pool size */ @@ -70,62 +70,62 @@ enum _BC_DTS_GLOBALS { BC_INFIFO_THRESHOLD = 0x10000, }; -typedef struct _BC_CMD_REG_ACC { +struct BC_CMD_REG_ACC { uint32_t Offset; uint32_t Value; -} BC_CMD_REG_ACC; +}; -typedef struct _BC_CMD_DEV_MEM { +struct BC_CMD_DEV_MEM { uint32_t StartOff; uint32_t NumDwords; uint32_t Rsrd; -} BC_CMD_DEV_MEM; +}; /* FW Passthrough command structure */ -enum _bc_fw_cmd_flags { +enum bc_fw_cmd_flags { BC_FW_CMD_FLAGS_NONE = 0, BC_FW_CMD_PIB_QS = 0x01, }; -typedef struct _BC_FW_CMD { +struct BC_FW_CMD { uint32_t cmd[BC_MAX_FW_CMD_BUFF_SZ]; uint32_t rsp[BC_MAX_FW_CMD_BUFF_SZ]; uint32_t flags; uint32_t add_data; -} BC_FW_CMD, *PBC_FW_CMD; +}; -typedef struct _BC_HW_TYPE { +struct BC_HW_TYPE { uint16_t PciDevId; uint16_t PciVenId; uint8_t HwRev; uint8_t Align[3]; -} BC_HW_TYPE; +}; -typedef struct _BC_PCI_CFG { +struct BC_PCI_CFG { uint32_t Size; uint32_t Offset; uint8_t pci_cfg_space[PCI_CFG_SIZE]; -} BC_PCI_CFG; +}; -typedef struct _BC_VERSION_INFO_ { +struct BC_VERSION_INFO { uint8_t DriverMajor; uint8_t DriverMinor; uint16_t DriverRevision; -} BC_VERSION_INFO; +}; -typedef struct _BC_START_RX_CAP_ { +struct BC_START_RX_CAP { uint32_t Rsrd; uint32_t StartDeliveryThsh; uint32_t PauseThsh; uint32_t ResumeThsh; -} BC_START_RX_CAP; +}; -typedef struct _BC_FLUSH_RX_CAP_ { +struct BC_FLUSH_RX_CAP { uint32_t Rsrd; uint32_t bDiscardOnly; -} BC_FLUSH_RX_CAP; +}; -typedef struct _BC_DTS_STATS { +struct BC_DTS_STATS { uint8_t drvRLL; uint8_t drvFLL; uint8_t eosDetected; @@ -154,18 +154,18 @@ typedef struct _BC_DTS_STATS { uint32_t DrvRepeatedFrms; uint32_t res1[13]; -} BC_DTS_STATS; +}; -typedef struct _BC_PROC_INPUT_ { +struct BC_PROC_INPUT { uint8_t *pDmaBuff; uint32_t BuffSz; uint8_t Mapped; uint8_t Encrypted; uint8_t Rsrd[2]; uint32_t DramOffset; /* For debug use only */ -} BC_PROC_INPUT, *PBC_PROC_INPUT; +}; -typedef struct _BC_DEC_YUV_BUFFS { +struct BC_DEC_YUV_BUFFS { uint32_t b422Mode; uint8_t *YuvBuff; uint32_t YuvBuffSz; @@ -173,9 +173,9 @@ typedef struct _BC_DEC_YUV_BUFFS { uint32_t YBuffDoneSz; uint32_t UVBuffDoneSz; uint32_t RefCnt; -} BC_DEC_YUV_BUFFS; +}; -enum _DECOUT_COMPLETION_FLAGS{ +enum DECOUT_COMPLETION_FLAGS{ COMP_FLAG_NO_INFO = 0x00, COMP_FLAG_FMT_CHANGE = 0x01, COMP_FLAG_PIB_VALID = 0x02, @@ -184,47 +184,47 @@ enum _DECOUT_COMPLETION_FLAGS{ COMP_FLAG_DATA_BOT = 0x10, }; -typedef struct _BC_DEC_OUT_BUFF{ - BC_DEC_YUV_BUFFS OutPutBuffs; - BC_PIC_INFO_BLOCK PibInfo; +struct BC_DEC_OUT_BUFF{ + struct BC_DEC_YUV_BUFFS OutPutBuffs; + struct BC_PIC_INFO_BLOCK PibInfo; uint32_t Flags; uint32_t BadFrCnt; -} BC_DEC_OUT_BUFF; +}; -typedef struct _BC_NOTIFY_MODE { +struct BC_NOTIFY_MODE { uint32_t Mode; uint32_t Rsvr[3]; -} BC_NOTIFY_MODE; +}; -typedef struct _BC_CLOCK { +struct BC_CLOCK { uint32_t clk; uint32_t Rsvr[3]; -} BC_CLOCK; +}; -typedef struct _BC_IOCTL_DATA { - BC_STATUS RetSts; +struct BC_IOCTL_DATA { + enum BC_STATUS RetSts; uint32_t IoctlDataSz; uint32_t Timeout; union { - BC_CMD_REG_ACC regAcc; - BC_CMD_DEV_MEM devMem; - BC_FW_CMD fwCmd; - BC_HW_TYPE hwType; - BC_PCI_CFG pciCfg; - BC_VERSION_INFO VerInfo; - BC_PROC_INPUT ProcInput; - BC_DEC_YUV_BUFFS RxBuffs; - BC_DEC_OUT_BUFF DecOutData; - BC_START_RX_CAP RxCap; - BC_FLUSH_RX_CAP FlushRxCap; - BC_DTS_STATS drvStat; - BC_NOTIFY_MODE NotifyMode; - BC_CLOCK clockValue; + struct BC_CMD_REG_ACC regAcc; + struct BC_CMD_DEV_MEM devMem; + struct BC_FW_CMD fwCmd; + struct BC_HW_TYPE hwType; + struct BC_PCI_CFG pciCfg; + struct BC_VERSION_INFO VerInfo; + struct BC_PROC_INPUT ProcInput; + struct BC_DEC_YUV_BUFFS RxBuffs; + struct BC_DEC_OUT_BUFF DecOutData; + struct BC_START_RX_CAP RxCap; + struct BC_FLUSH_RX_CAP FlushRxCap; + struct BC_DTS_STATS drvStat; + struct BC_NOTIFY_MODE NotifyMode; + struct BC_CLOCK clockValue; } u; struct _BC_IOCTL_DATA *next; -} BC_IOCTL_DATA; +}; -typedef enum _BC_DRV_CMD{ +enum BC_DRV_CMD { DRV_CMD_VERSION = 0, /* Get SW version */ DRV_CMD_GET_HWTYPE, /* Get HW version and type Dozer/Tank */ DRV_CMD_REG_RD, /* Read Device Register */ @@ -249,12 +249,12 @@ typedef enum _BC_DRV_CMD{ /* MUST be the last one.. */ DRV_CMD_END, /* End of the List.. */ -} BC_DRV_CMD; +}; #define BC_IOC_BASE 'b' #define BC_IOC_VOID _IOC_NONE #define BC_IOC_IOWR(nr, type) _IOWR(BC_IOC_BASE, nr, type) -#define BC_IOCTL_MB BC_IOCTL_DATA +#define BC_IOCTL_MB struct BC_IOCTL_DATA #define BCM_IOC_GET_VERSION BC_IOC_IOWR(DRV_CMD_VERSION, BC_IOCTL_MB) #define BCM_IOC_GET_HWTYPE BC_IOC_IOWR(DRV_CMD_GET_HWTYPE, BC_IOCTL_MB) @@ -280,17 +280,16 @@ typedef enum _BC_DRV_CMD{ #define BCM_IOC_END BC_IOC_VOID /* Wrapper for main IOCTL data */ -typedef struct _crystalhd_ioctl_data { - BC_IOCTL_DATA udata; /* IOCTL from App..*/ +struct crystalhd_ioctl_data { + struct BC_IOCTL_DATA udata; /* IOCTL from App..*/ uint32_t u_id; /* Driver specific user ID */ uint32_t cmd; /* Cmd ID for driver's use. */ void *add_cdata; /* Additional command specific data..*/ uint32_t add_cdata_sz; /* Additional command specific data size */ - struct _crystalhd_ioctl_data *next; /* List/Fifo management */ -} crystalhd_ioctl_data; - + struct crystalhd_ioctl_data *next; /* List/Fifo management */ +}; -enum _crystalhd_kmod_ver{ +enum crystalhd_kmod_ver{ crystalhd_kmod_major = 0, crystalhd_kmod_minor = 9, crystalhd_kmod_rev = 27, diff --git a/drivers/staging/crystalhd/crystalhd_cmds.c b/drivers/staging/crystalhd/crystalhd_cmds.c index 1a7ca8b..14296085 100644 --- a/drivers/staging/crystalhd/crystalhd_cmds.c +++ b/drivers/staging/crystalhd/crystalhd_cmds.c @@ -69,8 +69,8 @@ static void bc_cproc_mark_pwr_state(struct crystalhd_cmd *ctx) } } -static BC_STATUS bc_cproc_notify_mode(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_notify_mode(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { int rc = 0, i = 0; @@ -111,8 +111,8 @@ static BC_STATUS bc_cproc_notify_mode(struct crystalhd_cmd *ctx, return crystalhd_hw_setup_dma_rings(&ctx->hw_ctx); } -static BC_STATUS bc_cproc_get_version(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_get_version(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { if (!ctx || !idata) { @@ -126,7 +126,8 @@ static BC_STATUS bc_cproc_get_version(struct crystalhd_cmd *ctx, } -static BC_STATUS bc_cproc_get_hwtype(struct crystalhd_cmd *ctx, crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_get_hwtype(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { if (!ctx || !idata) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -143,8 +144,8 @@ static BC_STATUS bc_cproc_get_hwtype(struct crystalhd_cmd *ctx, crystalhd_ioctl_ return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_reg_rd(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_reg_rd(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { if (!ctx || !idata) return BC_STS_INV_ARG; @@ -153,8 +154,8 @@ static BC_STATUS bc_cproc_reg_rd(struct crystalhd_cmd *ctx, return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_reg_wr(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_reg_wr(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { if (!ctx || !idata) return BC_STS_INV_ARG; @@ -165,8 +166,8 @@ static BC_STATUS bc_cproc_reg_wr(struct crystalhd_cmd *ctx, return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_link_reg_rd(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_link_reg_rd(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { if (!ctx || !idata) return BC_STS_INV_ARG; @@ -176,8 +177,8 @@ static BC_STATUS bc_cproc_link_reg_rd(struct crystalhd_cmd *ctx, return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_link_reg_wr(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_link_reg_wr(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { if (!ctx || !idata) return BC_STS_INV_ARG; @@ -188,10 +189,10 @@ static BC_STATUS bc_cproc_link_reg_wr(struct crystalhd_cmd *ctx, return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_mem_rd(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_mem_rd(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; if (!ctx || !idata || !idata->add_cdata) return BC_STS_INV_ARG; @@ -207,10 +208,10 @@ static BC_STATUS bc_cproc_mem_rd(struct crystalhd_cmd *ctx, } -static BC_STATUS bc_cproc_mem_wr(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_mem_wr(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; if (!ctx || !idata || !idata->add_cdata) return BC_STS_INV_ARG; @@ -226,11 +227,11 @@ static BC_STATUS bc_cproc_mem_wr(struct crystalhd_cmd *ctx, return sts; } -static BC_STATUS bc_cproc_cfg_rd(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_cfg_rd(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { uint32_t ix, cnt, off, len; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; uint32_t *temp; if (!ctx || !idata) @@ -258,11 +259,11 @@ static BC_STATUS bc_cproc_cfg_rd(struct crystalhd_cmd *ctx, return sts; } -static BC_STATUS bc_cproc_cfg_wr(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_cfg_wr(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { uint32_t ix, cnt, off, len; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; uint32_t *temp; if (!ctx || !idata) @@ -290,10 +291,10 @@ static BC_STATUS bc_cproc_cfg_wr(struct crystalhd_cmd *ctx, return sts; } -static BC_STATUS bc_cproc_download_fw(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_download_fw(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; if (!ctx || !idata || !idata->add_cdata || !idata->add_cdata_sz) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -329,9 +330,10 @@ static BC_STATUS bc_cproc_download_fw(struct crystalhd_cmd *ctx, * Abort pending input transfers and issue decoder flush command. * */ -static BC_STATUS bc_cproc_do_fw_cmd(struct crystalhd_cmd *ctx, crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_do_fw_cmd(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { - BC_STATUS sts; + enum BC_STATUS sts; uint32_t *cmd; if (!(ctx->state & BC_LINK_INIT)) { @@ -371,8 +373,8 @@ static BC_STATUS bc_cproc_do_fw_cmd(struct crystalhd_cmd *ctx, crystalhd_ioctl_d return sts; } -static void bc_proc_in_completion(crystalhd_dio_req *dio_hnd, - wait_queue_head_t *event, BC_STATUS sts) +static void bc_proc_in_completion(struct crystalhd_dio_req *dio_hnd, + wait_queue_head_t *event, enum BC_STATUS sts) { if (!dio_hnd || !event) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -386,7 +388,7 @@ static void bc_proc_in_completion(crystalhd_dio_req *dio_hnd, crystalhd_set_event(event); } -static BC_STATUS bc_cproc_codein_sleep(struct crystalhd_cmd *ctx) +static enum BC_STATUS bc_cproc_codein_sleep(struct crystalhd_cmd *ctx) { wait_queue_head_t sleep_ev; int rc = 0; @@ -406,12 +408,12 @@ static BC_STATUS bc_cproc_codein_sleep(struct crystalhd_cmd *ctx) return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_hw_txdma(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata, - crystalhd_dio_req *dio) +static enum BC_STATUS bc_cproc_hw_txdma(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata, + struct crystalhd_dio_req *dio) { uint32_t tx_listid = 0; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; wait_queue_head_t event; int rc = 0; @@ -471,7 +473,7 @@ static BC_STATUS bc_cproc_hw_txdma(struct crystalhd_cmd *ctx, } /* Helper function to check on user buffers */ -static BC_STATUS bc_cproc_check_inbuffs(bool pin, void *ubuff, uint32_t ub_sz, +static enum BC_STATUS bc_cproc_check_inbuffs(bool pin, void *ubuff, uint32_t ub_sz, uint32_t uv_off, bool en_422) { if (!ubuff || !ub_sz) { @@ -502,12 +504,13 @@ static BC_STATUS bc_cproc_check_inbuffs(bool pin, void *ubuff, uint32_t ub_sz, return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_proc_input(struct crystalhd_cmd *ctx, crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_proc_input(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { void *ubuff; uint32_t ub_sz; - crystalhd_dio_req *dio_hnd = NULL; - BC_STATUS sts = BC_STS_SUCCESS; + struct crystalhd_dio_req *dio_hnd = NULL; + enum BC_STATUS sts = BC_STS_SUCCESS; if (!ctx || !idata) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -537,14 +540,14 @@ static BC_STATUS bc_cproc_proc_input(struct crystalhd_cmd *ctx, crystalhd_ioctl_ return sts; } -static BC_STATUS bc_cproc_add_cap_buff(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_add_cap_buff(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { void *ubuff; uint32_t ub_sz, uv_off; bool en_422; - crystalhd_dio_req *dio_hnd = NULL; - BC_STATUS sts = BC_STS_SUCCESS; + struct crystalhd_dio_req *dio_hnd = NULL; + enum BC_STATUS sts = BC_STS_SUCCESS; if (!ctx || !idata) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -579,10 +582,10 @@ static BC_STATUS bc_cproc_add_cap_buff(struct crystalhd_cmd *ctx, return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_fmt_change(struct crystalhd_cmd *ctx, - crystalhd_dio_req *dio) +static enum BC_STATUS bc_cproc_fmt_change(struct crystalhd_cmd *ctx, + struct crystalhd_dio_req *dio) { - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; sts = crystalhd_hw_add_cap_buffer(&ctx->hw_ctx, dio, 0); if (sts != BC_STS_SUCCESS) @@ -595,12 +598,12 @@ static BC_STATUS bc_cproc_fmt_change(struct crystalhd_cmd *ctx, return sts; } -static BC_STATUS bc_cproc_fetch_frame(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_fetch_frame(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { - crystalhd_dio_req *dio = NULL; - BC_STATUS sts = BC_STS_SUCCESS; - BC_DEC_OUT_BUFF *frame; + struct crystalhd_dio_req *dio = NULL; + enum BC_STATUS sts = BC_STS_SUCCESS; + struct BC_DEC_OUT_BUFF *frame; if (!ctx || !idata) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -636,8 +639,8 @@ static BC_STATUS bc_cproc_fetch_frame(struct crystalhd_cmd *ctx, return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_start_capture(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_start_capture(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { ctx->state |= BC_LINK_CAP_EN; if (ctx->state == BC_LINK_READY) @@ -646,12 +649,12 @@ static BC_STATUS bc_cproc_start_capture(struct crystalhd_cmd *ctx, return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_flush_cap_buffs(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_flush_cap_buffs(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { - crystalhd_dio_req *dio = NULL; - BC_STATUS sts = BC_STS_SUCCESS; - BC_DEC_OUT_BUFF *frame; + struct crystalhd_dio_req *dio = NULL; + enum BC_STATUS sts = BC_STS_SUCCESS; + struct BC_DEC_OUT_BUFF *frame; uint32_t count; if (!ctx || !idata) { @@ -681,10 +684,10 @@ static BC_STATUS bc_cproc_flush_cap_buffs(struct crystalhd_cmd *ctx, return crystalhd_hw_stop_capture(&ctx->hw_ctx); } -static BC_STATUS bc_cproc_get_stats(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_get_stats(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { - BC_DTS_STATS *stats; + struct BC_DTS_STATS *stats; struct crystalhd_hw_stats hw_stats; if (!ctx || !idata) { @@ -713,20 +716,20 @@ static BC_STATUS bc_cproc_get_stats(struct crystalhd_cmd *ctx, return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_reset_stats(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_reset_stats(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { crystalhd_hw_stats(&ctx->hw_ctx, NULL); return BC_STS_SUCCESS; } -static BC_STATUS bc_cproc_chg_clk(struct crystalhd_cmd *ctx, - crystalhd_ioctl_data *idata) +static enum BC_STATUS bc_cproc_chg_clk(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { - BC_CLOCK *clock; + struct BC_CLOCK *clock; uint32_t oldClk; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; if (!ctx || !idata) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -749,7 +752,7 @@ static BC_STATUS bc_cproc_chg_clk(struct crystalhd_cmd *ctx, } /*=============== Cmd Proc Table.. ======================================*/ -static const crystalhd_cmd_tbl_t g_crystalhd_cproc_tbl[] = { +static const struct crystalhd_cmd_tbl g_crystalhd_cproc_tbl[] = { { BCM_IOC_GET_VERSION, bc_cproc_get_version, 0}, { BCM_IOC_GET_HWTYPE, bc_cproc_get_hwtype, 0}, { BCM_IOC_REG_RD, bc_cproc_reg_rd, 0}, @@ -796,9 +799,10 @@ static const crystalhd_cmd_tbl_t g_crystalhd_cproc_tbl[] = { * we pass on the power mangement notification to our plug-in by completing * all outstanding requests with BC_STS_IO_USER_ABORT return code. */ -BC_STATUS crystalhd_suspend(struct crystalhd_cmd *ctx, crystalhd_ioctl_data *idata) +enum BC_STATUS crystalhd_suspend(struct crystalhd_cmd *ctx, + struct crystalhd_ioctl_data *idata) { - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; if (!ctx || !idata) { BCMLOG_ERR("Invalid Parameters\n"); @@ -854,7 +858,7 @@ BC_STATUS crystalhd_suspend(struct crystalhd_cmd *ctx, crystalhd_ioctl_data *ida * start a new playback session from the pre-suspend clip position. * */ -BC_STATUS crystalhd_resume(struct crystalhd_cmd *ctx) +enum BC_STATUS crystalhd_resume(struct crystalhd_cmd *ctx) { BCMLOG(BCMLOG_DBG, "crystalhd_resume Success %x\n", ctx->state); @@ -875,7 +879,7 @@ BC_STATUS crystalhd_resume(struct crystalhd_cmd *ctx) * application specific resources. HW layer initialization * is done for the first open request. */ -BC_STATUS crystalhd_user_open(struct crystalhd_cmd *ctx, +enum BC_STATUS crystalhd_user_open(struct crystalhd_cmd *ctx, struct crystalhd_user **user_ctx) { struct crystalhd_user *uc; @@ -913,7 +917,7 @@ BC_STATUS crystalhd_user_open(struct crystalhd_cmd *ctx, * Closer aplication handle and release app specific * resources. */ -BC_STATUS crystalhd_user_close(struct crystalhd_cmd *ctx, struct crystalhd_user *uc) +enum BC_STATUS crystalhd_user_close(struct crystalhd_cmd *ctx, struct crystalhd_user *uc) { uint32_t mode = uc->mode; @@ -948,7 +952,7 @@ BC_STATUS crystalhd_user_close(struct crystalhd_cmd *ctx, struct crystalhd_user * * Called at the time of driver load. */ -BC_STATUS __devinit crystalhd_setup_cmd_context(struct crystalhd_cmd *ctx, +enum BC_STATUS __devinit crystalhd_setup_cmd_context(struct crystalhd_cmd *ctx, struct crystalhd_adp *adp) { int i = 0; @@ -983,7 +987,7 @@ BC_STATUS __devinit crystalhd_setup_cmd_context(struct crystalhd_cmd *ctx, * * Called at the time of driver un-load. */ -BC_STATUS __devexit crystalhd_delete_cmd_context(struct crystalhd_cmd *ctx) +enum BC_STATUS __devexit crystalhd_delete_cmd_context(struct crystalhd_cmd *ctx) { BCMLOG(BCMLOG_DBG, "Deleting Command context..\n"); @@ -1021,7 +1025,7 @@ crystalhd_cmd_proc crystalhd_get_cmd_proc(struct crystalhd_cmd *ctx, uint32_t cm return NULL; } - tbl_sz = sizeof(g_crystalhd_cproc_tbl) / sizeof(crystalhd_cmd_tbl_t); + tbl_sz = sizeof(g_crystalhd_cproc_tbl) / sizeof(struct crystalhd_cmd_tbl); for (i = 0; i < tbl_sz; i++) { if (g_crystalhd_cproc_tbl[i].cmd_id == cmd) { if ((uc->mode == DTS_MONITOR_MODE) && diff --git a/drivers/staging/crystalhd/crystalhd_cmds.h b/drivers/staging/crystalhd/crystalhd_cmds.h index 9989038..1013029 100644 --- a/drivers/staging/crystalhd/crystalhd_cmds.h +++ b/drivers/staging/crystalhd/crystalhd_cmds.h @@ -36,7 +36,7 @@ #include "crystalhd_misc.h" #include "crystalhd_hw.h" -enum _crystalhd_state{ +enum crystalhd_state{ BC_LINK_INVALID = 0x00, BC_LINK_INIT = 0x01, BC_LINK_CAP_EN = 0x02, @@ -66,23 +66,22 @@ struct crystalhd_cmd { struct crystalhd_hw hw_ctx; }; -typedef BC_STATUS(*crystalhd_cmd_proc)(struct crystalhd_cmd *, crystalhd_ioctl_data *); +typedef enum BC_STATUS(*crystalhd_cmd_proc)(struct crystalhd_cmd *, struct crystalhd_ioctl_data *); -typedef struct _crystalhd_cmd_tbl { +struct crystalhd_cmd_tbl { uint32_t cmd_id; const crystalhd_cmd_proc cmd_proc; uint32_t block_mon; -} crystalhd_cmd_tbl_t; - +}; -BC_STATUS crystalhd_suspend(struct crystalhd_cmd *ctx, crystalhd_ioctl_data *idata); -BC_STATUS crystalhd_resume(struct crystalhd_cmd *ctx); +enum BC_STATUS crystalhd_suspend(struct crystalhd_cmd *ctx, struct crystalhd_ioctl_data *idata); +enum BC_STATUS crystalhd_resume(struct crystalhd_cmd *ctx); crystalhd_cmd_proc crystalhd_get_cmd_proc(struct crystalhd_cmd *ctx, uint32_t cmd, struct crystalhd_user *uc); -BC_STATUS crystalhd_user_open(struct crystalhd_cmd *ctx, struct crystalhd_user **user_ctx); -BC_STATUS crystalhd_user_close(struct crystalhd_cmd *ctx, struct crystalhd_user *uc); -BC_STATUS crystalhd_setup_cmd_context(struct crystalhd_cmd *ctx, struct crystalhd_adp *adp); -BC_STATUS crystalhd_delete_cmd_context(struct crystalhd_cmd *ctx); +enum BC_STATUS crystalhd_user_open(struct crystalhd_cmd *ctx, struct crystalhd_user **user_ctx); +enum BC_STATUS crystalhd_user_close(struct crystalhd_cmd *ctx, struct crystalhd_user *uc); +enum BC_STATUS crystalhd_setup_cmd_context(struct crystalhd_cmd *ctx, struct crystalhd_adp *adp); +enum BC_STATUS crystalhd_delete_cmd_context(struct crystalhd_cmd *ctx); bool crystalhd_cmd_interrupt(struct crystalhd_cmd *ctx); #endif diff --git a/drivers/staging/crystalhd/crystalhd_fw_if.h b/drivers/staging/crystalhd/crystalhd_fw_if.h index 261cd19..77560d4 100644 --- a/drivers/staging/crystalhd/crystalhd_fw_if.h +++ b/drivers/staging/crystalhd/crystalhd_fw_if.h @@ -29,21 +29,17 @@ /* TBD: Pull in only required defs into this file.. */ - - /* User Data Header */ -typedef struct user_data { +struct user_data { struct user_data *next; uint32_t type; uint32_t size; -} UD_HDR; - - +}; /*------------------------------------------------------* * MPEG Extension to the PPB * *------------------------------------------------------*/ -typedef struct { +struct ppb_mpeg { uint32_t to_be_defined; uint32_t valid; @@ -61,15 +57,15 @@ typedef struct { /* MPEG_VALID_USERDATA User data is in the form of a linked list. */ int32_t userDataSize; - UD_HDR *userData; + struct user_data *userData; -} PPB_MPEG; +}; /*------------------------------------------------------* * VC1 Extension to the PPB * *------------------------------------------------------*/ -typedef struct { +struct ppb_vc1 { uint32_t to_be_defined; uint32_t valid; @@ -88,9 +84,9 @@ typedef struct { /* VC1_VALID_USERDATA User data is in the form of a linked list. */ int32_t userDataSize; - UD_HDR *userData; + struct user_data *userData; -} PPB_VC1; +}; /*------------------------------------------------------* * H.264 Extension to the PPB * @@ -108,8 +104,8 @@ typedef struct { /* maximum number of intervals(as many as 256 intervals?) */ #define MAX_FGT_VALUE_INTERVAL (256) -typedef struct FGT_SEI { - struct FGT_SEI *next; +struct fgt_sei { + struct fgt_sei *next; unsigned char model_values[3][MAX_FGT_VALUE_INTERVAL][MAX_FGT_MODEL_VALUE]; unsigned char upper_bound[3][MAX_FGT_VALUE_INTERVAL]; unsigned char lower_bound[3][MAX_FGT_VALUE_INTERVAL]; @@ -134,9 +130,9 @@ typedef struct FGT_SEI { unsigned char num_model_values[3]; /* Number of model values. */ uint16_t repetition_period; /* Repetition period (0-16384) */ -} FGT_SEI; +}; -typedef struct { +struct ppb_h264 { /* 'valid' specifies which fields (or sets of * fields) below are valid. If the corresponding * bit in 'valid' is NOT set then that field(s) @@ -170,14 +166,14 @@ typedef struct { /* H264_VALID_USER */ uint32_t user_data_size; - UD_HDR *user_data; + struct user_data *user_data; /* H264 VALID FGT */ - FGT_SEI *pfgt; + struct fgt_sei *pfgt; -} PPB_H264; +}; -typedef struct { +struct ppb { /* Common fields. */ uint32_t picture_number; /* Ordinal display number */ uint32_t video_buffer; /* Video (picbuf) number */ @@ -215,14 +211,14 @@ typedef struct { /* Protocol-specific extensions. */ union { - PPB_H264 h264; - PPB_MPEG mpeg; - PPB_VC1 vc1; + struct ppb_h264 h264; + struct ppb_mpeg mpeg; + struct ppb_vc1 vc1; } other; -} PPB; +}; -typedef struct { +struct c011_pib { uint32_t bFormatChange; uint32_t resolution; uint32_t channelId; @@ -231,13 +227,11 @@ typedef struct { uint32_t zeroPanscanValid; uint32_t dramOutBufAddr; uint32_t yComponent; - PPB ppb; - -} C011_PIB; - + struct ppb ppb; +}; -typedef struct { +struct dec_rsp_channel_start_video { uint32_t command; uint32_t sequence; uint32_t status; @@ -251,12 +245,12 @@ typedef struct { uint32_t transportStreamCaptureAddr; uint32_t asyncEventQ; -} DecRspChannelStartVideo; +}; #define eCMD_C011_CMD_BASE (0x73763000) /* host commands */ -typedef enum { +enum c011_ts_cmd { eCMD_TS_GET_NEXT_PIC = 0x7376F100, /* debug get next picture */ eCMD_TS_GET_LAST_PIC = 0x7376F102, /* debug get last pic status */ eCMD_TS_READ_WRITE_MEM = 0x7376F104, /* debug read write memory */ @@ -364,6 +358,6 @@ typedef enum { eNOTIFY_C011_ENC_CHAN_EVENT = eCMD_C011_CMD_BASE + 0x210, -} eC011_TS_CMD; +}; #endif diff --git a/drivers/staging/crystalhd/crystalhd_hw.c b/drivers/staging/crystalhd/crystalhd_hw.c index 56d1e42..f631857 100644 --- a/drivers/staging/crystalhd/crystalhd_hw.c +++ b/drivers/staging/crystalhd/crystalhd_hw.c @@ -61,8 +61,8 @@ static void crystalhd_start_dram(struct crystalhd_adp *adp) static bool crystalhd_bring_out_of_rst(struct crystalhd_adp *adp) { - link_misc_perst_deco_ctrl rst_deco_cntrl; - link_misc_perst_clk_ctrl rst_clk_cntrl; + union link_misc_perst_deco_ctrl rst_deco_cntrl; + union link_misc_perst_clk_ctrl rst_clk_cntrl; uint32_t temp; /* @@ -122,8 +122,8 @@ static bool crystalhd_bring_out_of_rst(struct crystalhd_adp *adp) static bool crystalhd_put_in_reset(struct crystalhd_adp *adp) { - link_misc_perst_deco_ctrl rst_deco_cntrl; - link_misc_perst_clk_ctrl rst_clk_cntrl; + union link_misc_perst_deco_ctrl rst_deco_cntrl; + union link_misc_perst_clk_ctrl rst_clk_cntrl; uint32_t temp; /* @@ -178,7 +178,7 @@ static bool crystalhd_put_in_reset(struct crystalhd_adp *adp) static void crystalhd_disable_interrupts(struct crystalhd_adp *adp) { - intr_mask_reg intr_mask; + union intr_mask_reg intr_mask; intr_mask.whole_reg = crystalhd_reg_rd(adp, INTR_INTR_MSK_STS_REG); intr_mask.mask_pcie_err = 1; intr_mask.mask_pcie_rbusmast_err = 1; @@ -194,7 +194,7 @@ static void crystalhd_disable_interrupts(struct crystalhd_adp *adp) static void crystalhd_enable_interrupts(struct crystalhd_adp *adp) { - intr_mask_reg intr_mask; + union intr_mask_reg intr_mask; intr_mask.whole_reg = crystalhd_reg_rd(adp, INTR_INTR_MSK_STS_REG); intr_mask.mask_pcie_err = 1; intr_mask.mask_pcie_rbusmast_err = 1; @@ -348,10 +348,10 @@ static bool crystalhd_stop_device(struct crystalhd_adp *adp) return true; } -static crystalhd_rx_dma_pkt *crystalhd_hw_alloc_rx_pkt(struct crystalhd_hw *hw) +static struct crystalhd_rx_dma_pkt *crystalhd_hw_alloc_rx_pkt(struct crystalhd_hw *hw) { unsigned long flags = 0; - crystalhd_rx_dma_pkt *temp = NULL; + struct crystalhd_rx_dma_pkt *temp = NULL; if (!hw) return NULL; @@ -370,7 +370,7 @@ static crystalhd_rx_dma_pkt *crystalhd_hw_alloc_rx_pkt(struct crystalhd_hw *hw) } static void crystalhd_hw_free_rx_pkt(struct crystalhd_hw *hw, - crystalhd_rx_dma_pkt *pkt) + struct crystalhd_rx_dma_pkt *pkt) { unsigned long flags = 0; @@ -406,7 +406,7 @@ static void crystalhd_tx_desc_rel_call_back(void *context, void *data) static void crystalhd_rx_pkt_rel_call_back(void *context, void *data) { struct crystalhd_hw *hw = (struct crystalhd_hw *)context; - crystalhd_rx_dma_pkt *pkt = (crystalhd_rx_dma_pkt *)data; + struct crystalhd_rx_dma_pkt *pkt = (struct crystalhd_rx_dma_pkt *)data; if (!pkt || !hw) { BCMLOG_ERR("Invalid arg - %p %p\n", hw, pkt); @@ -453,9 +453,9 @@ do { \ * TX - Active & Free * RX - Active, Ready and Free. */ -static BC_STATUS crystalhd_hw_create_ioqs(struct crystalhd_hw *hw) +static enum BC_STATUS crystalhd_hw_create_ioqs(struct crystalhd_hw *hw) { - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; if (!hw) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -523,10 +523,10 @@ static bool crystalhd_code_in_full(struct crystalhd_adp *adp, uint32_t needed_sz return false; } -static BC_STATUS crystalhd_hw_tx_req_complete(struct crystalhd_hw *hw, - uint32_t list_id, BC_STATUS cs) +static enum BC_STATUS crystalhd_hw_tx_req_complete(struct crystalhd_hw *hw, + uint32_t list_id, enum BC_STATUS cs) { - tx_dma_pkt *tx_req; + struct tx_dma_pkt *tx_req; if (!hw || !list_id) { BCMLOG_ERR("Invalid Arg..\n"); @@ -535,7 +535,7 @@ static BC_STATUS crystalhd_hw_tx_req_complete(struct crystalhd_hw *hw, hw->pwr_lock--; - tx_req = (tx_dma_pkt *)crystalhd_dioq_find_and_fetch(hw->tx_actq, list_id); + tx_req = (struct tx_dma_pkt *)crystalhd_dioq_find_and_fetch(hw->tx_actq, list_id); if (!tx_req) { if (cs != BC_STS_IO_USER_ABORT) BCMLOG_ERR("Find and Fetch Did not find req\n"); @@ -654,7 +654,7 @@ static void crystalhd_tx_isr(struct crystalhd_hw *hw, uint32_t int_sts) hw->stats.tx_errors++; } -static void crystalhd_hw_dump_desc(pdma_descriptor p_dma_desc, +static void crystalhd_hw_dump_desc(struct dma_descriptor *p_dma_desc, uint32_t ul_desc_index, uint32_t cnt) { uint32_t ix, ll = 0; @@ -682,15 +682,15 @@ static void crystalhd_hw_dump_desc(pdma_descriptor p_dma_desc, } -static BC_STATUS crystalhd_hw_fill_desc(crystalhd_dio_req *ioreq, - dma_descriptor *desc, +static enum BC_STATUS crystalhd_hw_fill_desc(struct crystalhd_dio_req *ioreq, + struct dma_descriptor *desc, dma_addr_t desc_paddr_base, uint32_t sg_cnt, uint32_t sg_st_ix, uint32_t sg_st_off, uint32_t xfr_sz) { uint32_t count = 0, ix = 0, sg_ix = 0, len = 0, last_desc_ix = 0; dma_addr_t desc_phy_addr = desc_paddr_base; - addr_64 addr_temp; + union addr_64 addr_temp; if (!ioreq || !desc || !desc_paddr_base || !xfr_sz || (!sg_cnt && !ioreq->uinfo.dir_tx)) { @@ -721,7 +721,7 @@ static BC_STATUS crystalhd_hw_fill_desc(crystalhd_dio_req *ioreq, desc[ix].dma_dir = ioreq->uinfo.dir_tx; /* Chain DMA descriptor. */ - addr_temp.full_addr = desc_phy_addr + sizeof(dma_descriptor); + addr_temp.full_addr = desc_phy_addr + sizeof(struct dma_descriptor); desc[ix].next_desc_addr_low = addr_temp.low_part; desc[ix].next_desc_addr_high = addr_temp.high_part; @@ -740,7 +740,7 @@ static BC_STATUS crystalhd_hw_fill_desc(crystalhd_dio_req *ioreq, crystalhd_hw_dump_desc(desc, ix, 1); count += len; - desc_phy_addr += sizeof(dma_descriptor); + desc_phy_addr += sizeof(struct dma_descriptor); } last_desc_ix = ix - 1; @@ -773,15 +773,15 @@ static BC_STATUS crystalhd_hw_fill_desc(crystalhd_dio_req *ioreq, return BC_STS_SUCCESS; } -static BC_STATUS crystalhd_xlat_sgl_to_dma_desc(crystalhd_dio_req *ioreq, - pdma_desc_mem pdesc_mem, +static enum BC_STATUS crystalhd_xlat_sgl_to_dma_desc(struct crystalhd_dio_req *ioreq, + struct dma_desc_mem *pdesc_mem, uint32_t *uv_desc_index) { - dma_descriptor *desc = NULL; + struct dma_descriptor *desc = NULL; dma_addr_t desc_paddr_base = 0; uint32_t sg_cnt = 0, sg_st_ix = 0, sg_st_off = 0; uint32_t xfr_sz = 0; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; /* Check params.. */ if (!ioreq || !pdesc_mem || !uv_desc_index) { @@ -821,7 +821,7 @@ static BC_STATUS crystalhd_xlat_sgl_to_dma_desc(crystalhd_dio_req *ioreq, /* Prepare for UV mapping.. */ desc = &pdesc_mem->pdma_desc_start[sg_cnt]; desc_paddr_base = pdesc_mem->phy_addr + - (sg_cnt * sizeof(dma_descriptor)); + (sg_cnt * sizeof(struct dma_descriptor)); /* Done with desc addr.. now update sg stuff.*/ sg_cnt = ioreq->sg_cnt - ioreq->uinfo.uv_sg_ix; @@ -858,7 +858,7 @@ static void crystalhd_start_tx_dma_engine(struct crystalhd_hw *hw) * Verify if the Stop generates a completion interrupt or not. * if it does not generate an interrupt, then add polling here. */ -static BC_STATUS crystalhd_stop_tx_dma_engine(struct crystalhd_hw *hw) +static enum BC_STATUS crystalhd_stop_tx_dma_engine(struct crystalhd_hw *hw) { uint32_t dma_cntrl, cnt = 30; uint32_t l1 = 1, l2 = 1; @@ -1021,7 +1021,7 @@ static bool crystalhd_rel_addr_to_pib_Q(struct crystalhd_hw *hw, uint32_t addr_t return true; } -static void cpy_pib_to_app(C011_PIB *src_pib, BC_PIC_INFO_BLOCK *dst_pib) +static void cpy_pib_to_app(struct c011_pib *src_pib, struct BC_PIC_INFO_BLOCK *dst_pib) { if (!src_pib || !dst_pib) { BCMLOG_ERR("Invalid Arguments\n"); @@ -1046,10 +1046,10 @@ static void cpy_pib_to_app(C011_PIB *src_pib, BC_PIC_INFO_BLOCK *dst_pib) static void crystalhd_hw_proc_pib(struct crystalhd_hw *hw) { unsigned int cnt; - C011_PIB src_pib; + struct c011_pib src_pib; uint32_t pib_addr, pib_cnt; - BC_PIC_INFO_BLOCK *AppPib; - crystalhd_rx_dma_pkt *rx_pkt = NULL; + struct BC_PIC_INFO_BLOCK *AppPib; + struct crystalhd_rx_dma_pkt *rx_pkt = NULL; pib_cnt = crystalhd_get_pib_avail_cnt(hw); @@ -1059,11 +1059,11 @@ static void crystalhd_hw_proc_pib(struct crystalhd_hw *hw) for (cnt = 0; cnt < pib_cnt; cnt++) { pib_addr = crystalhd_get_addr_from_pib_Q(hw); - crystalhd_mem_rd(hw->adp, pib_addr, sizeof(C011_PIB) / 4, + crystalhd_mem_rd(hw->adp, pib_addr, sizeof(struct c011_pib) / 4, (uint32_t *)&src_pib); if (src_pib.bFormatChange) { - rx_pkt = (crystalhd_rx_dma_pkt *)crystalhd_dioq_fetch(hw->rx_freeq); + rx_pkt = (struct crystalhd_rx_dma_pkt *)crystalhd_dioq_fetch(hw->rx_freeq); if (!rx_pkt) return; rx_pkt->flags = 0; @@ -1168,11 +1168,11 @@ static void crystalhd_stop_rx_dma_engine(struct crystalhd_hw *hw) count, hw->rx_list_sts[0], hw->rx_list_sts[1]); } -static BC_STATUS crystalhd_hw_prog_rxdma(struct crystalhd_hw *hw, crystalhd_rx_dma_pkt *rx_pkt) +static enum BC_STATUS crystalhd_hw_prog_rxdma(struct crystalhd_hw *hw, struct crystalhd_rx_dma_pkt *rx_pkt) { uint32_t y_low_addr_reg, y_high_addr_reg; uint32_t uv_low_addr_reg, uv_high_addr_reg; - addr_64 desc_addr; + union addr_64 desc_addr; unsigned long flags; if (!hw || !rx_pkt) { @@ -1228,10 +1228,10 @@ static BC_STATUS crystalhd_hw_prog_rxdma(struct crystalhd_hw *hw, crystalhd_rx_d return BC_STS_SUCCESS; } -static BC_STATUS crystalhd_hw_post_cap_buff(struct crystalhd_hw *hw, - crystalhd_rx_dma_pkt *rx_pkt) +static enum BC_STATUS crystalhd_hw_post_cap_buff(struct crystalhd_hw *hw, + struct crystalhd_rx_dma_pkt *rx_pkt) { - BC_STATUS sts = crystalhd_hw_prog_rxdma(hw, rx_pkt); + enum BC_STATUS sts = crystalhd_hw_prog_rxdma(hw, rx_pkt); if (sts == BC_STS_BUSY) crystalhd_dioq_add(hw->rx_freeq, (void *)rx_pkt, @@ -1287,12 +1287,12 @@ static void crystalhd_hw_finalize_pause(struct crystalhd_hw *hw) crystalhd_reg_wr(hw->adp, PCIE_DLL_DATA_LINK_CONTROL, aspm); } -static BC_STATUS crystalhd_rx_pkt_done(struct crystalhd_hw *hw, uint32_t list_index, - BC_STATUS comp_sts) +static enum BC_STATUS crystalhd_rx_pkt_done(struct crystalhd_hw *hw, uint32_t list_index, + enum BC_STATUS comp_sts) { - crystalhd_rx_dma_pkt *rx_pkt = NULL; + struct crystalhd_rx_dma_pkt *rx_pkt = NULL; uint32_t y_dw_dnsz, uv_dw_dnsz; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; if (!hw || list_index >= DMA_ENGINE_CNT) { BCMLOG_ERR("Invalid Arguments\n"); @@ -1328,7 +1328,7 @@ static bool crystalhd_rx_list0_handler(struct crystalhd_hw *hw, uint32_t int_sts uint32_t y_err_sts, uint32_t uv_err_sts) { uint32_t tmp; - list_sts tmp_lsts; + enum list_sts tmp_lsts; if (!(y_err_sts & GET_Y0_ERR_MSK) && !(uv_err_sts & GET_UV0_ERR_MSK)) return false; @@ -1396,7 +1396,7 @@ static bool crystalhd_rx_list1_handler(struct crystalhd_hw *hw, uint32_t int_sts uint32_t y_err_sts, uint32_t uv_err_sts) { uint32_t tmp; - list_sts tmp_lsts; + enum list_sts tmp_lsts; if (!(y_err_sts & GET_Y1_ERR_MSK) && !(uv_err_sts & GET_UV1_ERR_MSK)) return false; @@ -1467,7 +1467,7 @@ static void crystalhd_rx_isr(struct crystalhd_hw *hw, uint32_t intr_sts) { unsigned long flags; uint32_t i, list_avail = 0; - BC_STATUS comp_sts = BC_STS_NO_DATA; + enum BC_STATUS comp_sts = BC_STS_NO_DATA; uint32_t y_err_sts, uv_err_sts, y_dn_sz = 0, uv_dn_sz = 0; bool ret = 0; @@ -1535,15 +1535,15 @@ static void crystalhd_rx_isr(struct crystalhd_hw *hw, uint32_t intr_sts) } } -static BC_STATUS crystalhd_fw_cmd_post_proc(struct crystalhd_hw *hw, - BC_FW_CMD *fw_cmd) +static enum BC_STATUS crystalhd_fw_cmd_post_proc(struct crystalhd_hw *hw, + struct BC_FW_CMD *fw_cmd) { - BC_STATUS sts = BC_STS_SUCCESS; - DecRspChannelStartVideo *st_rsp = NULL; + enum BC_STATUS sts = BC_STS_SUCCESS; + struct dec_rsp_channel_start_video *st_rsp = NULL; switch (fw_cmd->cmd[0]) { case eCMD_C011_DEC_CHAN_START_VIDEO: - st_rsp = (DecRspChannelStartVideo *)fw_cmd->rsp; + st_rsp = (struct dec_rsp_channel_start_video *)fw_cmd->rsp; hw->pib_del_Q_addr = st_rsp->picInfoDeliveryQ; hw->pib_rel_Q_addr = st_rsp->picInfoReleaseQ; BCMLOG(BCMLOG_DBG, "DelQAddr:%x RelQAddr:%x\n", @@ -1561,10 +1561,10 @@ static BC_STATUS crystalhd_fw_cmd_post_proc(struct crystalhd_hw *hw, return sts; } -static BC_STATUS crystalhd_put_ddr2sleep(struct crystalhd_hw *hw) +static enum BC_STATUS crystalhd_put_ddr2sleep(struct crystalhd_hw *hw) { uint32_t reg; - link_misc_perst_decoder_ctrl rst_cntrl_reg; + union link_misc_perst_decoder_ctrl rst_cntrl_reg; /* Pulse reset pin of 7412 (MISC_PERST_DECODER_CTRL) */ rst_cntrl_reg.whole_reg = crystalhd_reg_rd(hw->adp, MISC_PERST_DECODER_CTRL); @@ -1622,7 +1622,7 @@ static BC_STATUS crystalhd_put_ddr2sleep(struct crystalhd_hw *hw) ** *************************************************/ -BC_STATUS crystalhd_download_fw(struct crystalhd_adp *adp, void *buffer, uint32_t sz) +enum BC_STATUS crystalhd_download_fw(struct crystalhd_adp *adp, void *buffer, uint32_t sz) { uint32_t reg_data, cnt, *temp_buff; uint32_t fw_sig_len = 36; @@ -1714,13 +1714,14 @@ BC_STATUS crystalhd_download_fw(struct crystalhd_adp *adp, void *buffer, uint32_ return BC_STS_SUCCESS;; } -BC_STATUS crystalhd_do_fw_cmd(struct crystalhd_hw *hw, BC_FW_CMD *fw_cmd) +enum BC_STATUS crystalhd_do_fw_cmd(struct crystalhd_hw *hw, + struct BC_FW_CMD *fw_cmd) { uint32_t cnt = 0, cmd_res_addr; uint32_t *cmd_buff, *res_buff; wait_queue_head_t fw_cmd_event; int rc = 0; - BC_STATUS sts; + enum BC_STATUS sts; crystalhd_create_event(&fw_cmd_event); @@ -1854,7 +1855,7 @@ bool crystalhd_hw_interrupt(struct crystalhd_adp *adp, struct crystalhd_hw *hw) return rc; } -BC_STATUS crystalhd_hw_open(struct crystalhd_hw *hw, struct crystalhd_adp *adp) +enum BC_STATUS crystalhd_hw_open(struct crystalhd_hw *hw, struct crystalhd_adp *adp) { if (!hw || !adp) { BCMLOG_ERR("Invalid Arguments\n"); @@ -1886,7 +1887,7 @@ BC_STATUS crystalhd_hw_open(struct crystalhd_hw *hw, struct crystalhd_adp *adp) return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_close(struct crystalhd_hw *hw) +enum BC_STATUS crystalhd_hw_close(struct crystalhd_hw *hw) { if (!hw) { BCMLOG_ERR("Invalid Arguments\n"); @@ -1903,14 +1904,14 @@ BC_STATUS crystalhd_hw_close(struct crystalhd_hw *hw) return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *hw) +enum BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *hw) { unsigned int i; void *mem; size_t mem_len; dma_addr_t phy_addr; - BC_STATUS sts = BC_STS_SUCCESS; - crystalhd_rx_dma_pkt *rpkt; + enum BC_STATUS sts = BC_STS_SUCCESS; + struct crystalhd_rx_dma_pkt *rpkt; if (!hw || !hw->adp) { BCMLOG_ERR("Invalid Arguments\n"); @@ -1923,7 +1924,7 @@ BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *hw) return sts; } - mem_len = BC_LINK_MAX_SGLS * sizeof(dma_descriptor); + mem_len = BC_LINK_MAX_SGLS * sizeof(struct dma_descriptor); for (i = 0; i < BC_TX_LIST_CNT; i++) { mem = bc_kern_dma_alloc(hw->adp, mem_len, &phy_addr); @@ -1938,7 +1939,7 @@ BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *hw) hw->tx_pkt_pool[i].desc_mem.pdma_desc_start = mem; hw->tx_pkt_pool[i].desc_mem.phy_addr = phy_addr; hw->tx_pkt_pool[i].desc_mem.sz = BC_LINK_MAX_SGLS * - sizeof(dma_descriptor); + sizeof(struct dma_descriptor); hw->tx_pkt_pool[i].list_tag = 0; /* Add TX dma requests to Free Queue..*/ @@ -1968,7 +1969,7 @@ BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *hw) } rpkt->desc_mem.pdma_desc_start = mem; rpkt->desc_mem.phy_addr = phy_addr; - rpkt->desc_mem.sz = BC_LINK_MAX_SGLS * sizeof(dma_descriptor); + rpkt->desc_mem.sz = BC_LINK_MAX_SGLS * sizeof(struct dma_descriptor); rpkt->pkt_tag = hw->rx_pkt_tag_seed + i; crystalhd_hw_free_rx_pkt(hw, rpkt); } @@ -1976,10 +1977,10 @@ BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *hw) return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_free_dma_rings(struct crystalhd_hw *hw) +enum BC_STATUS crystalhd_hw_free_dma_rings(struct crystalhd_hw *hw) { unsigned int i; - crystalhd_rx_dma_pkt *rpkt = NULL; + struct crystalhd_rx_dma_pkt *rpkt = NULL; if (!hw || !hw->adp) { BCMLOG_ERR("Invalid Arguments\n"); @@ -2014,16 +2015,16 @@ BC_STATUS crystalhd_hw_free_dma_rings(struct crystalhd_hw *hw) return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_post_tx(struct crystalhd_hw *hw, crystalhd_dio_req *ioreq, +enum BC_STATUS crystalhd_hw_post_tx(struct crystalhd_hw *hw, struct crystalhd_dio_req *ioreq, hw_comp_callback call_back, wait_queue_head_t *cb_event, uint32_t *list_id, uint8_t data_flags) { - tx_dma_pkt *tx_dma_packet = NULL; + struct tx_dma_pkt *tx_dma_packet = NULL; uint32_t first_desc_u_addr, first_desc_l_addr; uint32_t low_addr, high_addr; - addr_64 desc_addr; - BC_STATUS sts, add_sts; + union addr_64 desc_addr; + enum BC_STATUS sts, add_sts; uint32_t dummy_index = 0; unsigned long flags; bool rc; @@ -2048,7 +2049,7 @@ BC_STATUS crystalhd_hw_post_tx(struct crystalhd_hw *hw, crystalhd_dio_req *ioreq } /* Get a list from TxFreeQ */ - tx_dma_packet = (tx_dma_pkt *)crystalhd_dioq_fetch(hw->tx_freeq); + tx_dma_packet = (struct tx_dma_pkt *)crystalhd_dioq_fetch(hw->tx_freeq); if (!tx_dma_packet) { BCMLOG_ERR("No empty elements..\n"); return BC_STS_ERR_USAGE; @@ -2121,7 +2122,7 @@ BC_STATUS crystalhd_hw_post_tx(struct crystalhd_hw *hw, crystalhd_dio_req *ioreq * * FIX_ME: Not Tested the actual condition.. */ -BC_STATUS crystalhd_hw_cancel_tx(struct crystalhd_hw *hw, uint32_t list_id) +enum BC_STATUS crystalhd_hw_cancel_tx(struct crystalhd_hw *hw, uint32_t list_id) { if (!hw || !list_id) { BCMLOG_ERR("Invalid Arguments\n"); @@ -2134,12 +2135,12 @@ BC_STATUS crystalhd_hw_cancel_tx(struct crystalhd_hw *hw, uint32_t list_id) return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_add_cap_buffer(struct crystalhd_hw *hw, - crystalhd_dio_req *ioreq, bool en_post) +enum BC_STATUS crystalhd_hw_add_cap_buffer(struct crystalhd_hw *hw, + struct crystalhd_dio_req *ioreq, bool en_post) { - crystalhd_rx_dma_pkt *rpkt; + struct crystalhd_rx_dma_pkt *rpkt; uint32_t tag, uv_desc_ix = 0; - BC_STATUS sts; + enum BC_STATUS sts; if (!hw || !ioreq) { BCMLOG_ERR("Invalid Arguments\n"); @@ -2164,7 +2165,7 @@ BC_STATUS crystalhd_hw_add_cap_buffer(struct crystalhd_hw *hw, /* Store the address of UV in the rx packet for post*/ if (uv_desc_ix) rpkt->uv_phy_addr = rpkt->desc_mem.phy_addr + - (sizeof(dma_descriptor) * (uv_desc_ix + 1)); + (sizeof(struct dma_descriptor) * (uv_desc_ix + 1)); if (en_post) sts = crystalhd_hw_post_cap_buff(hw, rpkt); @@ -2174,11 +2175,11 @@ BC_STATUS crystalhd_hw_add_cap_buffer(struct crystalhd_hw *hw, return sts; } -BC_STATUS crystalhd_hw_get_cap_buffer(struct crystalhd_hw *hw, - BC_PIC_INFO_BLOCK *pib, - crystalhd_dio_req **ioreq) +enum BC_STATUS crystalhd_hw_get_cap_buffer(struct crystalhd_hw *hw, + struct BC_PIC_INFO_BLOCK *pib, + struct crystalhd_dio_req **ioreq) { - crystalhd_rx_dma_pkt *rpkt; + struct crystalhd_rx_dma_pkt *rpkt; uint32_t timeout = BC_PROC_OUTPUT_TIMEOUT / 1000; uint32_t sig_pending = 0; @@ -2210,10 +2211,10 @@ BC_STATUS crystalhd_hw_get_cap_buffer(struct crystalhd_hw *hw, return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_start_capture(struct crystalhd_hw *hw) +enum BC_STATUS crystalhd_hw_start_capture(struct crystalhd_hw *hw) { - crystalhd_rx_dma_pkt *rx_pkt; - BC_STATUS sts; + struct crystalhd_rx_dma_pkt *rx_pkt; + enum BC_STATUS sts; uint32_t i; if (!hw) { @@ -2235,7 +2236,7 @@ BC_STATUS crystalhd_hw_start_capture(struct crystalhd_hw *hw) return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_stop_capture(struct crystalhd_hw *hw) +enum BC_STATUS crystalhd_hw_stop_capture(struct crystalhd_hw *hw) { void *temp = NULL; @@ -2255,7 +2256,7 @@ BC_STATUS crystalhd_hw_stop_capture(struct crystalhd_hw *hw) return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_pause(struct crystalhd_hw *hw) +enum BC_STATUS crystalhd_hw_pause(struct crystalhd_hw *hw) { hw->stats.pause_cnt++; hw->stop_pending = 1; @@ -2267,9 +2268,9 @@ BC_STATUS crystalhd_hw_pause(struct crystalhd_hw *hw) return BC_STS_SUCCESS; } -BC_STATUS crystalhd_hw_unpause(struct crystalhd_hw *hw) +enum BC_STATUS crystalhd_hw_unpause(struct crystalhd_hw *hw) { - BC_STATUS sts; + enum BC_STATUS sts; uint32_t aspm; hw->stop_pending = 0; @@ -2283,9 +2284,9 @@ BC_STATUS crystalhd_hw_unpause(struct crystalhd_hw *hw) return sts; } -BC_STATUS crystalhd_hw_suspend(struct crystalhd_hw *hw) +enum BC_STATUS crystalhd_hw_suspend(struct crystalhd_hw *hw) { - BC_STATUS sts; + enum BC_STATUS sts; if (!hw) { BCMLOG_ERR("Invalid Arguments\n"); @@ -2324,7 +2325,7 @@ void crystalhd_hw_stats(struct crystalhd_hw *hw, struct crystalhd_hw_stats *stat memcpy(stats, &hw->stats, sizeof(*stats)); } -BC_STATUS crystalhd_hw_set_core_clock(struct crystalhd_hw *hw) +enum BC_STATUS crystalhd_hw_set_core_clock(struct crystalhd_hw *hw) { uint32_t reg, n, i; uint32_t vco_mg, refresh_reg; diff --git a/drivers/staging/crystalhd/crystalhd_hw.h b/drivers/staging/crystalhd/crystalhd_hw.h index 1c6318e..3efbf9d 100644 --- a/drivers/staging/crystalhd/crystalhd_hw.h +++ b/drivers/staging/crystalhd/crystalhd_hw.h @@ -109,7 +109,7 @@ #define DecHt_HostSwReset 0x340000 #define BC_DRAM_FW_CFG_ADDR 0x001c2000 -typedef union _addr_64_ { +union addr_64 { struct { uint32_t low_part; uint32_t high_part; @@ -117,9 +117,9 @@ typedef union _addr_64_ { uint64_t full_addr; -} addr_64; +}; -typedef union _intr_mask_reg_ { +union intr_mask_reg { struct { uint32_t mask_tx_done:1; uint32_t mask_tx_err:1; @@ -133,9 +133,9 @@ typedef union _intr_mask_reg_ { uint32_t whole_reg; -} intr_mask_reg; +}; -typedef union _link_misc_perst_deco_ctrl_ { +union link_misc_perst_deco_ctrl { struct { uint32_t bcm7412_rst:1; /* 1 -> BCM7412 is held in reset. Reset value 1.*/ uint32_t reserved0:3; /* Reserved.No Effect*/ @@ -145,9 +145,9 @@ typedef union _link_misc_perst_deco_ctrl_ { uint32_t whole_reg; -} link_misc_perst_deco_ctrl; +}; -typedef union _link_misc_perst_clk_ctrl_ { +union link_misc_perst_clk_ctrl { struct { uint32_t sel_alt_clk:1; /* When set, selects a 6.75MHz clock as the source of core_clk */ uint32_t stop_core_clk:1; /* When set, stops the branch of core_clk that is not needed for low power operation */ @@ -161,10 +161,9 @@ typedef union _link_misc_perst_clk_ctrl_ { uint32_t whole_reg; -} link_misc_perst_clk_ctrl; - +}; -typedef union _link_misc_perst_decoder_ctrl_ { +union link_misc_perst_decoder_ctrl { struct { uint32_t bcm_7412_rst:1; /* 1 -> BCM7412 is held in reset. Reset value 1.*/ uint32_t res0:3; /* Reserved.No Effect*/ @@ -174,10 +173,9 @@ typedef union _link_misc_perst_decoder_ctrl_ { uint32_t whole_reg; -} link_misc_perst_decoder_ctrl; - +}; -typedef union _desc_low_addr_reg_ { +union desc_low_addr_reg { struct { uint32_t list_valid:1; uint32_t reserved:4; @@ -186,9 +184,9 @@ typedef union _desc_low_addr_reg_ { uint32_t whole_reg; -} desc_low_addr_reg; +}; -typedef struct _dma_descriptor_ { /* 8 32-bit values */ +struct dma_descriptor { /* 8 32-bit values */ /* 0th u32 */ uint32_t sdram_buff_addr:28; /* bits 0-27: SDRAM Address */ uint32_t res0:4; /* bits 28-31: Reserved */ @@ -220,24 +218,22 @@ typedef struct _dma_descriptor_ { /* 8 32-bit values */ /* 7th u32 */ uint32_t res8; /* Last 32bits reserved */ -} dma_descriptor, *pdma_descriptor; +}; /* * We will allocate the memory in 4K pages * the linked list will be a list of 32 byte descriptors. * The virtual address will determine what should be freed. */ -typedef struct _dma_desc_mem_ { - pdma_descriptor pdma_desc_start; /* 32-bytes for dma descriptor. should be first element */ +struct dma_desc_mem { + struct dma_descriptor *pdma_desc_start; /* 32-bytes for dma descriptor. should be first element */ dma_addr_t phy_addr; /* physical address of each DMA desc */ uint32_t sz; struct _dma_desc_mem_ *Next; /* points to Next Descriptor in chain */ -} dma_desc_mem, *pdma_desc_mem; - - +}; -typedef enum _list_sts_ { +enum list_sts { sts_free = 0, /* RX-Y Bits 0:7 */ @@ -253,30 +249,27 @@ typedef enum _list_sts_ { rx_y_mask = 0x000000FF, rx_uv_mask = 0x0000FF00, +}; -} list_sts; - -typedef struct _tx_dma_pkt_ { - dma_desc_mem desc_mem; +struct tx_dma_pkt { + struct dma_desc_mem desc_mem; hw_comp_callback call_back; - crystalhd_dio_req *dio_req; + struct crystalhd_dio_req *dio_req; wait_queue_head_t *cb_event; uint32_t list_tag; +}; -} tx_dma_pkt; - -typedef struct _crystalhd_rx_dma_pkt { - dma_desc_mem desc_mem; - crystalhd_dio_req *dio_req; +struct crystalhd_rx_dma_pkt { + struct dma_desc_mem desc_mem; + struct crystalhd_dio_req *dio_req; uint32_t pkt_tag; uint32_t flags; - BC_PIC_INFO_BLOCK pib; + struct BC_PIC_INFO_BLOCK pib; dma_addr_t uv_phy_addr; - struct _crystalhd_rx_dma_pkt *next; - -} crystalhd_rx_dma_pkt; + struct crystalhd_rx_dma_pkt *next; +}; -struct crystalhd_hw_stats{ +struct crystalhd_hw_stats { uint32_t rx_errors; uint32_t tx_errors; uint32_t freeq_count; @@ -288,13 +281,13 @@ struct crystalhd_hw_stats{ }; struct crystalhd_hw { - tx_dma_pkt tx_pkt_pool[DMA_ENGINE_CNT]; + struct tx_dma_pkt tx_pkt_pool[DMA_ENGINE_CNT]; spinlock_t lock; uint32_t tx_ioq_tag_seed; uint32_t tx_list_post_index; - crystalhd_rx_dma_pkt *rx_pkt_pool_head; + struct crystalhd_rx_dma_pkt *rx_pkt_pool_head; uint32_t rx_pkt_tag_seed; bool dev_started; @@ -306,16 +299,16 @@ struct crystalhd_hw { uint32_t pib_del_Q_addr; uint32_t pib_rel_Q_addr; - crystalhd_dioq_t *tx_freeq; - crystalhd_dioq_t *tx_actq; + struct crystalhd_dioq *tx_freeq; + struct crystalhd_dioq *tx_actq; /* Rx DMA Engine Specific Locks */ spinlock_t rx_lock; uint32_t rx_list_post_index; - list_sts rx_list_sts[DMA_ENGINE_CNT]; - crystalhd_dioq_t *rx_rdyq; - crystalhd_dioq_t *rx_freeq; - crystalhd_dioq_t *rx_actq; + enum list_sts rx_list_sts[DMA_ENGINE_CNT]; + struct crystalhd_dioq *rx_rdyq; + struct crystalhd_dioq *rx_freeq; + struct crystalhd_dioq *rx_actq; uint32_t stop_pending; /* HW counters.. */ @@ -364,35 +357,35 @@ struct crystalhd_hw { /**** API Exposed to the other layers ****/ -BC_STATUS crystalhd_download_fw(struct crystalhd_adp *adp, +enum BC_STATUS crystalhd_download_fw(struct crystalhd_adp *adp, void *buffer, uint32_t sz); -BC_STATUS crystalhd_do_fw_cmd(struct crystalhd_hw *hw, BC_FW_CMD *fw_cmd); +enum BC_STATUS crystalhd_do_fw_cmd(struct crystalhd_hw *hw, struct BC_FW_CMD *fw_cmd); bool crystalhd_hw_interrupt(struct crystalhd_adp *adp, struct crystalhd_hw *hw); -BC_STATUS crystalhd_hw_open(struct crystalhd_hw *, struct crystalhd_adp *); -BC_STATUS crystalhd_hw_close(struct crystalhd_hw *); -BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *); -BC_STATUS crystalhd_hw_free_dma_rings(struct crystalhd_hw *); +enum BC_STATUS crystalhd_hw_open(struct crystalhd_hw *, struct crystalhd_adp *); +enum BC_STATUS crystalhd_hw_close(struct crystalhd_hw *); +enum BC_STATUS crystalhd_hw_setup_dma_rings(struct crystalhd_hw *); +enum BC_STATUS crystalhd_hw_free_dma_rings(struct crystalhd_hw *); -BC_STATUS crystalhd_hw_post_tx(struct crystalhd_hw *hw, crystalhd_dio_req *ioreq, +enum BC_STATUS crystalhd_hw_post_tx(struct crystalhd_hw *hw, struct crystalhd_dio_req *ioreq, hw_comp_callback call_back, wait_queue_head_t *cb_event, uint32_t *list_id, uint8_t data_flags); -BC_STATUS crystalhd_hw_pause(struct crystalhd_hw *hw); -BC_STATUS crystalhd_hw_unpause(struct crystalhd_hw *hw); -BC_STATUS crystalhd_hw_suspend(struct crystalhd_hw *hw); -BC_STATUS crystalhd_hw_cancel_tx(struct crystalhd_hw *hw, uint32_t list_id); -BC_STATUS crystalhd_hw_add_cap_buffer(struct crystalhd_hw *hw, - crystalhd_dio_req *ioreq, bool en_post); -BC_STATUS crystalhd_hw_get_cap_buffer(struct crystalhd_hw *hw, - BC_PIC_INFO_BLOCK *pib, - crystalhd_dio_req **ioreq); -BC_STATUS crystalhd_hw_stop_capture(struct crystalhd_hw *hw); -BC_STATUS crystalhd_hw_start_capture(struct crystalhd_hw *hw); +enum BC_STATUS crystalhd_hw_pause(struct crystalhd_hw *hw); +enum BC_STATUS crystalhd_hw_unpause(struct crystalhd_hw *hw); +enum BC_STATUS crystalhd_hw_suspend(struct crystalhd_hw *hw); +enum BC_STATUS crystalhd_hw_cancel_tx(struct crystalhd_hw *hw, uint32_t list_id); +enum BC_STATUS crystalhd_hw_add_cap_buffer(struct crystalhd_hw *hw, + struct crystalhd_dio_req *ioreq, bool en_post); +enum BC_STATUS crystalhd_hw_get_cap_buffer(struct crystalhd_hw *hw, + struct BC_PIC_INFO_BLOCK *pib, + struct crystalhd_dio_req **ioreq); +enum BC_STATUS crystalhd_hw_stop_capture(struct crystalhd_hw *hw); +enum BC_STATUS crystalhd_hw_start_capture(struct crystalhd_hw *hw); void crystalhd_hw_stats(struct crystalhd_hw *hw, struct crystalhd_hw_stats *stats); /* API to program the core clock on the decoder */ -BC_STATUS crystalhd_hw_set_core_clock(struct crystalhd_hw *); +enum BC_STATUS crystalhd_hw_set_core_clock(struct crystalhd_hw *); #endif diff --git a/drivers/staging/crystalhd/crystalhd_lnx.c b/drivers/staging/crystalhd/crystalhd_lnx.c index 141a3e3..a4ec891 100644 --- a/drivers/staging/crystalhd/crystalhd_lnx.c +++ b/drivers/staging/crystalhd/crystalhd_lnx.c @@ -73,10 +73,10 @@ static int chd_dec_disable_int(struct crystalhd_adp *adp) return 0; } -crystalhd_ioctl_data *chd_dec_alloc_iodata(struct crystalhd_adp *adp, bool isr) +struct crystalhd_ioctl_data *chd_dec_alloc_iodata(struct crystalhd_adp *adp, bool isr) { unsigned long flags = 0; - crystalhd_ioctl_data *temp; + struct crystalhd_ioctl_data *temp; if (!adp) return NULL; @@ -93,7 +93,7 @@ crystalhd_ioctl_data *chd_dec_alloc_iodata(struct crystalhd_adp *adp, bool isr) return temp; } -void chd_dec_free_iodata(struct crystalhd_adp *adp, crystalhd_ioctl_data *iodata, +void chd_dec_free_iodata(struct crystalhd_adp *adp, struct crystalhd_ioctl_data *iodata, bool isr) { unsigned long flags = 0; @@ -129,7 +129,7 @@ static inline int crystalhd_user_data(unsigned long ud, void *dr, int size, int return rc; } -static int chd_dec_fetch_cdata(struct crystalhd_adp *adp, crystalhd_ioctl_data *io, +static int chd_dec_fetch_cdata(struct crystalhd_adp *adp, struct crystalhd_ioctl_data *io, uint32_t m_sz, unsigned long ua) { unsigned long ua_off; @@ -163,7 +163,7 @@ static int chd_dec_fetch_cdata(struct crystalhd_adp *adp, crystalhd_ioctl_data * } static int chd_dec_release_cdata(struct crystalhd_adp *adp, - crystalhd_ioctl_data *io, unsigned long ua) + struct crystalhd_ioctl_data *io, unsigned long ua) { unsigned long ua_off; int rc; @@ -193,7 +193,7 @@ static int chd_dec_release_cdata(struct crystalhd_adp *adp, } static int chd_dec_proc_user_data(struct crystalhd_adp *adp, - crystalhd_ioctl_data *io, + struct crystalhd_ioctl_data *io, unsigned long ua, int set) { int rc; @@ -231,8 +231,8 @@ static int chd_dec_api_cmd(struct crystalhd_adp *adp, unsigned long ua, uint32_t uid, uint32_t cmd, crystalhd_cmd_proc func) { int rc; - crystalhd_ioctl_data *temp; - BC_STATUS sts = BC_STS_SUCCESS; + struct crystalhd_ioctl_data *temp; + enum BC_STATUS sts = BC_STS_SUCCESS; temp = chd_dec_alloc_iodata(adp, 0); if (!temp) { @@ -296,7 +296,7 @@ static int chd_dec_open(struct inode *in, struct file *fd) { struct crystalhd_adp *adp = chd_get_adp(); int rc = 0; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; struct crystalhd_user *uc = NULL; BCMLOG_ENTER; @@ -356,7 +356,7 @@ static const struct file_operations chd_dec_fops = { static int __devinit chd_dec_init_chdev(struct crystalhd_adp *adp) { - crystalhd_ioctl_data *temp; + struct crystalhd_ioctl_data *temp; struct device *dev; int rc = -ENODEV, i = 0; @@ -394,7 +394,7 @@ static int __devinit chd_dec_init_chdev(struct crystalhd_adp *adp) /* Allocate general purpose ioctl pool. */ for (i = 0; i < CHD_IODATA_POOL_SZ; i++) { /* FIXME: jarod: why atomic? */ - temp = kzalloc(sizeof(crystalhd_ioctl_data), GFP_ATOMIC); + temp = kzalloc(sizeof(struct crystalhd_ioctl_data), GFP_ATOMIC); if (!temp) { BCMLOG_ERR("ioctl data pool kzalloc failed\n"); rc = -ENOMEM; @@ -418,7 +418,7 @@ fail: static void __devexit chd_dec_release_chdev(struct crystalhd_adp *adp) { - crystalhd_ioctl_data *temp = NULL; + struct crystalhd_ioctl_data *temp = NULL; if (!adp) return; @@ -513,7 +513,7 @@ static void __devexit chd_pci_release_mem(struct crystalhd_adp *pinfo) static void __devexit chd_dec_pci_remove(struct pci_dev *pdev) { struct crystalhd_adp *pinfo; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; BCMLOG_ENTER; @@ -543,7 +543,7 @@ static int __devinit chd_dec_pci_probe(struct pci_dev *pdev, { struct crystalhd_adp *pinfo; int rc; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; BCMLOG(BCMLOG_DBG, "PCI_INFO: Vendor:0x%04x Device:0x%04x " "s_vendor:0x%04x s_device: 0x%04x\n", @@ -623,8 +623,8 @@ static int __devinit chd_dec_pci_probe(struct pci_dev *pdev, int chd_dec_pci_suspend(struct pci_dev *pdev, pm_message_t state) { struct crystalhd_adp *adp; - crystalhd_ioctl_data *temp; - BC_STATUS sts = BC_STS_SUCCESS; + struct crystalhd_ioctl_data *temp; + enum BC_STATUS sts = BC_STS_SUCCESS; adp = (struct crystalhd_adp *)pci_get_drvdata(pdev); if (!adp) { @@ -657,7 +657,7 @@ int chd_dec_pci_suspend(struct pci_dev *pdev, pm_message_t state) int chd_dec_pci_resume(struct pci_dev *pdev) { struct crystalhd_adp *adp; - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; int rc; adp = (struct crystalhd_adp *)pci_get_drvdata(pdev); diff --git a/drivers/staging/crystalhd/crystalhd_lnx.h b/drivers/staging/crystalhd/crystalhd_lnx.h index eee4926..c951e43 100644 --- a/drivers/staging/crystalhd/crystalhd_lnx.h +++ b/drivers/staging/crystalhd/crystalhd_lnx.h @@ -79,12 +79,12 @@ struct crystalhd_adp { unsigned int chd_dec_major; unsigned int cfg_users; - crystalhd_ioctl_data *idata_free_head; /* ioctl data pool */ - crystalhd_elem_t *elem_pool_head; /* Queue element pool */ + struct crystalhd_ioctl_data *idata_free_head; /* ioctl data pool */ + struct crystalhd_elem *elem_pool_head; /* Queue element pool */ struct crystalhd_cmd cmds; - crystalhd_dio_req *ua_map_free_head; + struct crystalhd_dio_req *ua_map_free_head; struct pci_pool *fill_byte_pool; }; diff --git a/drivers/staging/crystalhd/crystalhd_misc.c b/drivers/staging/crystalhd/crystalhd_misc.c index 548dc09..2c5138e 100644 --- a/drivers/staging/crystalhd/crystalhd_misc.c +++ b/drivers/staging/crystalhd/crystalhd_misc.c @@ -43,15 +43,15 @@ static inline void crystalhd_dram_wr(struct crystalhd_adp *adp, uint32_t mem_off bc_dec_reg_wr(adp, (0x00380000 | (mem_off & 0x0007FFFF)), val); } -static inline BC_STATUS bc_chk_dram_range(struct crystalhd_adp *adp, uint32_t start_off, uint32_t cnt) +static inline enum BC_STATUS bc_chk_dram_range(struct crystalhd_adp *adp, uint32_t start_off, uint32_t cnt) { return BC_STS_SUCCESS; } -static crystalhd_dio_req *crystalhd_alloc_dio(struct crystalhd_adp *adp) +static struct crystalhd_dio_req *crystalhd_alloc_dio(struct crystalhd_adp *adp) { unsigned long flags = 0; - crystalhd_dio_req *temp = NULL; + struct crystalhd_dio_req *temp = NULL; if (!adp) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -67,7 +67,7 @@ static crystalhd_dio_req *crystalhd_alloc_dio(struct crystalhd_adp *adp) return temp; } -static void crystalhd_free_dio(struct crystalhd_adp *adp, crystalhd_dio_req *dio) +static void crystalhd_free_dio(struct crystalhd_adp *adp, struct crystalhd_dio_req *dio) { unsigned long flags = 0; @@ -83,10 +83,10 @@ static void crystalhd_free_dio(struct crystalhd_adp *adp, crystalhd_dio_req *dio spin_unlock_irqrestore(&adp->lock, flags); } -static crystalhd_elem_t *crystalhd_alloc_elem(struct crystalhd_adp *adp) +static struct crystalhd_elem *crystalhd_alloc_elem(struct crystalhd_adp *adp) { unsigned long flags = 0; - crystalhd_elem_t *temp = NULL; + struct crystalhd_elem *temp = NULL; if (!adp) return temp; @@ -100,7 +100,7 @@ static crystalhd_elem_t *crystalhd_alloc_elem(struct crystalhd_adp *adp) return temp; } -static void crystalhd_free_elem(struct crystalhd_adp *adp, crystalhd_elem_t *elem) +static void crystalhd_free_elem(struct crystalhd_adp *adp, struct crystalhd_elem *elem) { unsigned long flags = 0; @@ -230,7 +230,7 @@ void crystalhd_reg_wr(struct crystalhd_adp *adp, uint32_t reg_off, uint32_t val) * * 7412's Dram read routine. */ -BC_STATUS crystalhd_mem_rd(struct crystalhd_adp *adp, uint32_t start_off, +enum BC_STATUS crystalhd_mem_rd(struct crystalhd_adp *adp, uint32_t start_off, uint32_t dw_cnt, uint32_t *rd_buff) { uint32_t ix = 0; @@ -258,7 +258,7 @@ BC_STATUS crystalhd_mem_rd(struct crystalhd_adp *adp, uint32_t start_off, * * 7412's Dram write routine. */ -BC_STATUS crystalhd_mem_wr(struct crystalhd_adp *adp, uint32_t start_off, +enum BC_STATUS crystalhd_mem_wr(struct crystalhd_adp *adp, uint32_t start_off, uint32_t dw_cnt, uint32_t *wr_buff) { uint32_t ix = 0; @@ -286,10 +286,10 @@ BC_STATUS crystalhd_mem_wr(struct crystalhd_adp *adp, uint32_t start_off, * * Get value from Link's PCIe config space. */ -BC_STATUS crystalhd_pci_cfg_rd(struct crystalhd_adp *adp, uint32_t off, +enum BC_STATUS crystalhd_pci_cfg_rd(struct crystalhd_adp *adp, uint32_t off, uint32_t len, uint32_t *val) { - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; int rc = 0; if (!adp || !val) { @@ -331,10 +331,10 @@ BC_STATUS crystalhd_pci_cfg_rd(struct crystalhd_adp *adp, uint32_t off, * * Set value to Link's PCIe config space. */ -BC_STATUS crystalhd_pci_cfg_wr(struct crystalhd_adp *adp, uint32_t off, +enum BC_STATUS crystalhd_pci_cfg_wr(struct crystalhd_adp *adp, uint32_t off, uint32_t len, uint32_t val) { - BC_STATUS sts = BC_STS_SUCCESS; + enum BC_STATUS sts = BC_STS_SUCCESS; int rc = 0; if (!adp || !val) { @@ -429,11 +429,11 @@ void bc_kern_dma_free(struct crystalhd_adp *adp, uint32_t sz, void *ka, * Initialize Generic DIO queue to hold any data. Callback * will be used to free elements while deleting the queue. */ -BC_STATUS crystalhd_create_dioq(struct crystalhd_adp *adp, - crystalhd_dioq_t **dioq_hnd, +enum BC_STATUS crystalhd_create_dioq(struct crystalhd_adp *adp, + struct crystalhd_dioq **dioq_hnd, crystalhd_data_free_cb cb, void *cbctx) { - crystalhd_dioq_t *dioq = NULL; + struct crystalhd_dioq *dioq = NULL; if (!adp || !dioq_hnd) { BCMLOG_ERR("Invalid arg!!\n"); @@ -446,8 +446,8 @@ BC_STATUS crystalhd_create_dioq(struct crystalhd_adp *adp, spin_lock_init(&dioq->lock); dioq->sig = BC_LINK_DIOQ_SIG; - dioq->head = (crystalhd_elem_t *)&dioq->head; - dioq->tail = (crystalhd_elem_t *)&dioq->head; + dioq->head = (struct crystalhd_elem *)&dioq->head; + dioq->tail = (struct crystalhd_elem *)&dioq->head; crystalhd_create_event(&dioq->event); dioq->adp = adp; dioq->data_rel_cb = cb; @@ -470,7 +470,7 @@ BC_STATUS crystalhd_create_dioq(struct crystalhd_adp *adp, * by calling the call back provided during creation. * */ -void crystalhd_delete_dioq(struct crystalhd_adp *adp, crystalhd_dioq_t *dioq) +void crystalhd_delete_dioq(struct crystalhd_adp *adp, struct crystalhd_dioq *dioq) { void *temp; @@ -498,11 +498,11 @@ void crystalhd_delete_dioq(struct crystalhd_adp *adp, crystalhd_dioq_t *dioq) * * Insert new element to Q tail. */ -BC_STATUS crystalhd_dioq_add(crystalhd_dioq_t *ioq, void *data, +enum BC_STATUS crystalhd_dioq_add(struct crystalhd_dioq *ioq, void *data, bool wake, uint32_t tag) { unsigned long flags = 0; - crystalhd_elem_t *tmp; + struct crystalhd_elem *tmp; if (!ioq || (ioq->sig != BC_LINK_DIOQ_SIG) || !data) { BCMLOG_ERR("Invalid arg!!\n"); @@ -518,7 +518,7 @@ BC_STATUS crystalhd_dioq_add(crystalhd_dioq_t *ioq, void *data, tmp->data = data; tmp->tag = tag; spin_lock_irqsave(&ioq->lock, flags); - tmp->flink = (crystalhd_elem_t *)&ioq->head; + tmp->flink = (struct crystalhd_elem *)&ioq->head; tmp->blink = ioq->tail; tmp->flink->blink = tmp; tmp->blink->flink = tmp; @@ -540,11 +540,11 @@ BC_STATUS crystalhd_dioq_add(crystalhd_dioq_t *ioq, void *data, * * Remove an element from Queue. */ -void *crystalhd_dioq_fetch(crystalhd_dioq_t *ioq) +void *crystalhd_dioq_fetch(struct crystalhd_dioq *ioq) { unsigned long flags = 0; - crystalhd_elem_t *tmp; - crystalhd_elem_t *ret = NULL; + struct crystalhd_elem *tmp; + struct crystalhd_elem *ret = NULL; void *data = NULL; if (!ioq || (ioq->sig != BC_LINK_DIOQ_SIG)) { @@ -554,7 +554,7 @@ void *crystalhd_dioq_fetch(crystalhd_dioq_t *ioq) spin_lock_irqsave(&ioq->lock, flags); tmp = ioq->head; - if (tmp != (crystalhd_elem_t *)&ioq->head) { + if (tmp != (struct crystalhd_elem *)&ioq->head) { ret = tmp; tmp->flink->blink = tmp->blink; tmp->blink->flink = tmp->flink; @@ -578,11 +578,11 @@ void *crystalhd_dioq_fetch(crystalhd_dioq_t *ioq) * * Search TAG and remove the element. */ -void *crystalhd_dioq_find_and_fetch(crystalhd_dioq_t *ioq, uint32_t tag) +void *crystalhd_dioq_find_and_fetch(struct crystalhd_dioq *ioq, uint32_t tag) { unsigned long flags = 0; - crystalhd_elem_t *tmp; - crystalhd_elem_t *ret = NULL; + struct crystalhd_elem *tmp; + struct crystalhd_elem *ret = NULL; void *data = NULL; if (!ioq || (ioq->sig != BC_LINK_DIOQ_SIG)) { @@ -592,7 +592,7 @@ void *crystalhd_dioq_find_and_fetch(crystalhd_dioq_t *ioq, uint32_t tag) spin_lock_irqsave(&ioq->lock, flags); tmp = ioq->head; - while (tmp != (crystalhd_elem_t *)&ioq->head) { + while (tmp != (struct crystalhd_elem *)&ioq->head) { if (tmp->tag == tag) { ret = tmp; tmp->flink->blink = tmp->blink; @@ -623,7 +623,7 @@ void *crystalhd_dioq_find_and_fetch(crystalhd_dioq_t *ioq, uint32_t tag) * Return element from head if Q is not empty. Wait for new element * if Q is empty for Timeout seconds. */ -void *crystalhd_dioq_fetch_wait(crystalhd_dioq_t *ioq, uint32_t to_secs, +void *crystalhd_dioq_fetch_wait(struct crystalhd_dioq *ioq, uint32_t to_secs, uint32_t *sig_pend) { unsigned long flags = 0; @@ -673,12 +673,12 @@ out: * This routine maps user address and lock pages for DMA. * */ -BC_STATUS crystalhd_map_dio(struct crystalhd_adp *adp, void *ubuff, +enum BC_STATUS crystalhd_map_dio(struct crystalhd_adp *adp, void *ubuff, uint32_t ubuff_sz, uint32_t uv_offset, bool en_422mode, bool dir_tx, - crystalhd_dio_req **dio_hnd) + struct crystalhd_dio_req **dio_hnd) { - crystalhd_dio_req *dio; + struct crystalhd_dio_req *dio; /* FIXME: jarod: should some of these unsigned longs be uint32_t or uintptr_t? */ unsigned long start = 0, end = 0, uaddr = 0, count = 0; unsigned long spsz = 0, uv_start = 0; @@ -820,7 +820,7 @@ BC_STATUS crystalhd_map_dio(struct crystalhd_adp *adp, void *ubuff, * * This routine is to unmap the user buffer pages. */ -BC_STATUS crystalhd_unmap_dio(struct crystalhd_adp *adp, crystalhd_dio_req *dio) +enum BC_STATUS crystalhd_unmap_dio(struct crystalhd_adp *adp, struct crystalhd_dio_req *dio) { struct page *page = NULL; int j = 0; @@ -864,7 +864,7 @@ int crystalhd_create_dio_pool(struct crystalhd_adp *adp, uint32_t max_pages) { uint32_t asz = 0, i = 0; uint8_t *temp; - crystalhd_dio_req *dio; + struct crystalhd_dio_req *dio; if (!adp || !max_pages) { BCMLOG_ERR("Invalid Arg!!\n"); @@ -893,7 +893,7 @@ int crystalhd_create_dio_pool(struct crystalhd_adp *adp, uint32_t max_pages) return -ENOMEM; } - dio = (crystalhd_dio_req *)temp; + dio = (struct crystalhd_dio_req *)temp; temp += sizeof(*dio); dio->pages = (struct page **)temp; temp += (sizeof(*dio->pages) * max_pages); @@ -923,7 +923,7 @@ int crystalhd_create_dio_pool(struct crystalhd_adp *adp, uint32_t max_pages) */ void crystalhd_destroy_dio_pool(struct crystalhd_adp *adp) { - crystalhd_dio_req *dio; + struct crystalhd_dio_req *dio; int count = 0; if (!adp) { @@ -965,7 +965,7 @@ int __devinit crystalhd_create_elem_pool(struct crystalhd_adp *adp, uint32_t pool_size) { uint32_t i; - crystalhd_elem_t *temp; + struct crystalhd_elem *temp; if (!adp || !pool_size) return -EINVAL; @@ -993,7 +993,7 @@ int __devinit crystalhd_create_elem_pool(struct crystalhd_adp *adp, */ void crystalhd_delete_elem_pool(struct crystalhd_adp *adp) { - crystalhd_elem_t *temp; + struct crystalhd_elem *temp; int dbg_cnt = 0; if (!adp) diff --git a/drivers/staging/crystalhd/crystalhd_misc.h b/drivers/staging/crystalhd/crystalhd_misc.h index 84331cd..382078e 100644 --- a/drivers/staging/crystalhd/crystalhd_misc.h +++ b/drivers/staging/crystalhd/crystalhd_misc.h @@ -54,7 +54,7 @@ extern uint32_t g_linklog_level; /* Scatter Gather memory pool size for Tx and Rx */ #define BC_LINK_SG_POOL_SZ (BC_TX_LIST_CNT + BC_RX_LIST_CNT) -enum _crystalhd_dio_sig { +enum crystalhd_dio_sig { crystalhd_dio_inv = 0, crystalhd_dio_locked, crystalhd_dio_sg_mapped, @@ -76,7 +76,7 @@ struct crystalhd_dio_user_info { bool b422mode; }; -typedef struct _crystalhd_dio_req { +struct crystalhd_dio_req { uint32_t sig; uint32_t max_pages; struct page **pages; @@ -88,34 +88,34 @@ typedef struct _crystalhd_dio_req { void *fb_va; uint32_t fb_size; dma_addr_t fb_pa; - struct _crystalhd_dio_req *next; -} crystalhd_dio_req; + struct crystalhd_dio_req *next; +}; #define BC_LINK_DIOQ_SIG (0x09223280) -typedef struct _crystalhd_elem_s { - struct _crystalhd_elem_s *flink; - struct _crystalhd_elem_s *blink; +struct crystalhd_elem { + struct crystalhd_elem *flink; + struct crystalhd_elem *blink; void *data; uint32_t tag; -} crystalhd_elem_t; +}; typedef void (*crystalhd_data_free_cb)(void *context, void *data); -typedef struct _crystalhd_dioq_s { +struct crystalhd_dioq { uint32_t sig; struct crystalhd_adp *adp; - crystalhd_elem_t *head; - crystalhd_elem_t *tail; + struct crystalhd_elem *head; + struct crystalhd_elem *tail; uint32_t count; spinlock_t lock; wait_queue_head_t event; crystalhd_data_free_cb data_rel_cb; void *cb_context; -} crystalhd_dioq_t; +}; -typedef void (*hw_comp_callback)(crystalhd_dio_req *, - wait_queue_head_t *event, BC_STATUS sts); +typedef void (*hw_comp_callback)(struct crystalhd_dio_req *, + wait_queue_head_t *event, enum BC_STATUS sts); /*========= Decoder (7412) register access routines.================= */ uint32_t bc_dec_reg_rd(struct crystalhd_adp *, uint32_t); @@ -126,12 +126,12 @@ uint32_t crystalhd_reg_rd(struct crystalhd_adp *, uint32_t); void crystalhd_reg_wr(struct crystalhd_adp *, uint32_t, uint32_t); /*========= Decoder (7412) memory access routines..=================*/ -BC_STATUS crystalhd_mem_rd(struct crystalhd_adp *, uint32_t, uint32_t, uint32_t *); -BC_STATUS crystalhd_mem_wr(struct crystalhd_adp *, uint32_t, uint32_t, uint32_t *); +enum BC_STATUS crystalhd_mem_rd(struct crystalhd_adp *, uint32_t, uint32_t, uint32_t *); +enum BC_STATUS crystalhd_mem_wr(struct crystalhd_adp *, uint32_t, uint32_t, uint32_t *); /*==========Link (70012) PCIe Config access routines.================*/ -BC_STATUS crystalhd_pci_cfg_rd(struct crystalhd_adp *, uint32_t, uint32_t, uint32_t *); -BC_STATUS crystalhd_pci_cfg_wr(struct crystalhd_adp *, uint32_t, uint32_t, uint32_t); +enum BC_STATUS crystalhd_pci_cfg_rd(struct crystalhd_adp *, uint32_t, uint32_t, uint32_t *); +enum BC_STATUS crystalhd_pci_cfg_wr(struct crystalhd_adp *, uint32_t, uint32_t, uint32_t); /*========= Linux Kernel Interface routines. ======================= */ void *bc_kern_dma_alloc(struct crystalhd_adp *, uint32_t, dma_addr_t *); @@ -167,20 +167,20 @@ do { \ /*================ Direct IO mapping routines ==================*/ extern int crystalhd_create_dio_pool(struct crystalhd_adp *, uint32_t); extern void crystalhd_destroy_dio_pool(struct crystalhd_adp *); -extern BC_STATUS crystalhd_map_dio(struct crystalhd_adp *, void *, uint32_t, - uint32_t, bool, bool, crystalhd_dio_req**); +extern enum BC_STATUS crystalhd_map_dio(struct crystalhd_adp *, void *, uint32_t, + uint32_t, bool, bool, struct crystalhd_dio_req**); -extern BC_STATUS crystalhd_unmap_dio(struct crystalhd_adp *, crystalhd_dio_req*); +extern enum BC_STATUS crystalhd_unmap_dio(struct crystalhd_adp *, struct crystalhd_dio_req*); #define crystalhd_get_sgle_paddr(_dio, _ix) (cpu_to_le64(sg_dma_address(&_dio->sg[_ix]))) #define crystalhd_get_sgle_len(_dio, _ix) (cpu_to_le32(sg_dma_len(&_dio->sg[_ix]))) /*================ General Purpose Queues ==================*/ -extern BC_STATUS crystalhd_create_dioq(struct crystalhd_adp *, crystalhd_dioq_t **, crystalhd_data_free_cb , void *); -extern void crystalhd_delete_dioq(struct crystalhd_adp *, crystalhd_dioq_t *); -extern BC_STATUS crystalhd_dioq_add(crystalhd_dioq_t *ioq, void *data, bool wake, uint32_t tag); -extern void *crystalhd_dioq_fetch(crystalhd_dioq_t *ioq); -extern void *crystalhd_dioq_find_and_fetch(crystalhd_dioq_t *ioq, uint32_t tag); -extern void *crystalhd_dioq_fetch_wait(crystalhd_dioq_t *ioq, uint32_t to_secs, uint32_t *sig_pend); +extern enum BC_STATUS crystalhd_create_dioq(struct crystalhd_adp *, struct crystalhd_dioq **, crystalhd_data_free_cb , void *); +extern void crystalhd_delete_dioq(struct crystalhd_adp *, struct crystalhd_dioq *); +extern enum BC_STATUS crystalhd_dioq_add(struct crystalhd_dioq *ioq, void *data, bool wake, uint32_t tag); +extern void *crystalhd_dioq_fetch(struct crystalhd_dioq *ioq); +extern void *crystalhd_dioq_find_and_fetch(struct crystalhd_dioq *ioq, uint32_t tag); +extern void *crystalhd_dioq_fetch_wait(struct crystalhd_dioq *ioq, uint32_t to_secs, uint32_t *sig_pend); #define crystalhd_dioq_count(_ioq) ((_ioq) ? _ioq->count : 0) -- cgit v0.10.2 From a57941c2e7a79d5143a63c06c06be36f786d5241 Mon Sep 17 00:00:00 2001 From: Marin Mitov Date: Tue, 18 May 2010 13:05:29 +0300 Subject: Staging: dt3155v4l: remove private memory allocator This patch removes the private memory allocator and all conjugated functions. Now the driver uses videobuf-dma-contig module for allocations. Added reserving 4MB coherent memory for private per device allocations at probe time. Signed-off-by: Marin Mitov Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/dt3155v4l/Kconfig b/drivers/staging/dt3155v4l/Kconfig index f49f4ac..5cd5a57 100644 --- a/drivers/staging/dt3155v4l/Kconfig +++ b/drivers/staging/dt3155v4l/Kconfig @@ -9,7 +9,7 @@ config VIDEO_DT3155 In doubt, say N. To compile this driver as a module, choose M here: the - module will be called dt3155_v4l. + module will be called dt3155v4l. config DT3155_CCIR bool "Selects CCIR/50Hz vertical refresh" diff --git a/drivers/staging/dt3155v4l/Makefile b/drivers/staging/dt3155v4l/Makefile index 3a207cc..ce7a3ec 100644 --- a/drivers/staging/dt3155v4l/Makefile +++ b/drivers/staging/dt3155v4l/Makefile @@ -1,4 +1 @@ -obj-$(CONFIG_VIDEO_DT3155) += dt3155_v4l.o -dt3155_v4l-objs := \ - dt3155-bufs.o \ - dt3155v4l.o +obj-$(CONFIG_VIDEO_DT3155) += dt3155v4l.o diff --git a/drivers/staging/dt3155v4l/dt3155-bufs.c b/drivers/staging/dt3155v4l/dt3155-bufs.c deleted file mode 100644 index f93e431..0000000 --- a/drivers/staging/dt3155v4l/dt3155-bufs.c +++ /dev/null @@ -1,256 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2006-2010 by Marin Mitov * - * mitov@issp.bas.bg * - * * - * 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. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include "dt3155-bufs.h" - -/** - * dt3155_init_chunks_buf - creates a chunk buffer and allocates memory for it - * - * returns: a pointer to the struct dt3155_buf or NULL if failed - * - * Creates a struct dt3155_buf, then allocates a chunk of memory of - * size DT3155_CHUNK_SIZE and sets all the pages in it as Reserved. - * This is done to be able to use remap_pfn_range() on these buffers - * (which do not work on normal memory if Reserved bit is not set) - */ -struct dt3155_buf * -dt3155_init_chunks_buf(void) -{ /* could sleep */ - struct dt3155_buf *buf; - int i; - - buf = kzalloc(sizeof(*buf), GFP_KERNEL); - if (!buf) - return NULL; - buf->cpu = (void *)__get_free_pages(DT3155_CHUNK_FLAGS, - get_order(DT3155_CHUNK_SIZE)); - if (!buf->cpu) { - kfree(buf); - return NULL; - } - for (i = 0; i < DT3155_CHUNK_SIZE; i += PAGE_SIZE) - SetPageReserved(virt_to_page(buf->cpu + i)); - return buf; /* success */ -} - -/** - * dt3155_free_chunks_buf - destroys the specified buffer - * - * @buf: the buffer to be freed - * - * Clears Reserved bit of all pages in the chunk, frees the chunk memory - * and destroys struct dt3155_buf. - */ -void -dt3155_free_chunks_buf(struct dt3155_buf *buf) -{ - int i; - - for (i = 0; i < DT3155_CHUNK_SIZE; i += PAGE_SIZE) - ClearPageReserved(virt_to_page(buf->cpu + i)); - free_pages((unsigned long)buf->cpu, get_order(DT3155_CHUNK_SIZE)); - kfree(buf); -} - -/** - * dt3155_init_fifo - creates and initializes a fifo - * - * returns: a pointer to the crated and initialized struct dt3155_fifo - * or NULL if failed - */ -struct dt3155_fifo * -dt3155_init_fifo(void) -{ /* could sleep */ - struct dt3155_fifo *fifo = kzalloc(sizeof(*fifo), GFP_KERNEL); - if (fifo) - spin_lock_init(&fifo->lock); - return fifo; -} - -/* dt3155_free_fifo(x) defined as macro in dt3155.h */ - -/** - * dt3155_get_buf - gets a buffer from the fifo - * - * @fifo: the fifo to get a buffer from - * - * returns: a pointer to the buffer or NULL if failed - * - * dt3155_get_buf gets the fifo's spin_lock and returns the - * buffer pointed by the head. Could be used in any context. - */ -struct dt3155_buf * -dt3155_get_buf(struct dt3155_fifo *fifo) -{ - unsigned long flags; - struct dt3155_buf *tmp_buf; - - spin_lock_irqsave(&fifo->lock, flags); - tmp_buf = fifo->head; - if (fifo->head) - fifo->head = fifo->head->next; - if (!fifo->head) - fifo->tail = NULL; - spin_unlock_irqrestore(&fifo->lock, flags); - return tmp_buf; -} - -/** - * dt3155_put_buf - puts a buffer into a fifo - * - * @buf: the buffer to put - * @fifo: the fifo to put the buffer in - * - * dt3155_put_buf gets the fifo's spin_lock and puts the buf - * at the tail of the fifo. Could be used in any context. - */ -void -dt3155_put_buf(struct dt3155_buf *buf, struct dt3155_fifo *fifo) -{ - unsigned long flags; - - spin_lock_irqsave(&fifo->lock, flags); - buf->next = NULL; - if (fifo->tail) - fifo->tail->next = buf; - fifo->tail = buf; - if (!fifo->head) - fifo->head = buf; - spin_unlock_irqrestore(&fifo->lock, flags); -} - -/** - * dt3155_init_chunks_fifo - creates and fills a chunks_fifo - * - * returns: a pointer to the fifo or NULL if failed - * - * dt3155_init_chunks_fifo creates and fills the fifo with - * a number of chunks <= DT3155_CHUNK_NUM. The returned fifo - * contains at least one chunk. - */ -struct dt3155_fifo * -dt3155_init_chunks_fifo(void) -{ /* could sleep */ - int i; - - struct dt3155_fifo *chunks; - struct dt3155_buf *tmp_buf; - - chunks = dt3155_init_fifo(); - if (!chunks) - return NULL; - tmp_buf = dt3155_init_chunks_buf(); - if (!tmp_buf) { - dt3155_free_fifo(chunks); - return NULL; - } - dt3155_put_buf(tmp_buf, chunks); - for (i = 1; i < DT3155_CHUNK_NUM; i++) { - tmp_buf = dt3155_init_chunks_buf(); - if (!tmp_buf) - break; - dt3155_put_buf(tmp_buf, chunks); - } - return chunks; -} - -/** - * dt3155_free_chunks_fifo - empties and destroys the chunks_fifo - * - * @chunks: the chunks_fifo to be freed - * - * dt3155_free_chunks_fifo deallocates all chunks in the fifo and - * destroys it. - */ -void -dt3155_free_chunks_fifo(struct dt3155_fifo *chunks) -{ - int buf_count = 0; - struct dt3155_buf *buf; - - while ((buf = dt3155_get_buf(chunks))) { - dt3155_free_chunks_buf(buf); - buf_count++; - } - dt3155_free_fifo(chunks); - printk(KERN_INFO "dt3155: %i chunks freed\n", buf_count); -} - -/** - * dt3155_init_ibufs_fifo - creates and fills an image buffer fifo - * - * @chunks: chunks_fifo to take memory from - * @buf_size: the size of image buffers - * - * returns: a pointer to the fifo filled with image buffers - * - * dt3155_init_ibufs_fifo takes chunks from chunks_fifo, chops them - * into pieces of size buf_size and fills image fifo with them. - */ -struct dt3155_fifo * -dt3155_init_ibufs_fifo(struct dt3155_fifo *chunks, int buf_size) -{ /* could sleep */ - int i, buf_count = 0; - struct dt3155_buf *tmp_ibuf, *chunks_buf, *last_chunk; - struct dt3155_fifo *tmp_fifo; - - tmp_fifo = dt3155_init_fifo(); - if (!tmp_fifo) - return NULL; - last_chunk = chunks->tail; - do { - chunks_buf = dt3155_get_buf(chunks); - dt3155_put_buf(chunks_buf, chunks); - for (i = 0; i < DT3155_CHUNK_SIZE / buf_size; i++) { - tmp_ibuf = kzalloc(sizeof(*tmp_ibuf), GFP_KERNEL); - if (tmp_ibuf) { - tmp_ibuf->cpu = - chunks_buf->cpu + DT3155_BUF_SIZE * i; - dt3155_put_buf(tmp_ibuf, tmp_fifo); - buf_count++; - } else { - if (buf_count) { - goto print_num_bufs; - } else { - dt3155_free_fifo(tmp_fifo); - return NULL; - } - } - } - } while (chunks_buf != last_chunk); -print_num_bufs: - printk(KERN_INFO "dt3155: %i image buffers available\n", buf_count); - return tmp_fifo; -} - -/** - * dt3155_free_ibufs_fifo - empties and destroys an image fifo - * - * @fifo: the fifo to free - */ -void -dt3155_free_ibufs_fifo(struct dt3155_fifo *fifo) -{ - struct dt3155_buf *tmp_ibuf; - - while ((tmp_ibuf = dt3155_get_buf(fifo))) - kfree(tmp_ibuf); - kfree(fifo); -} diff --git a/drivers/staging/dt3155v4l/dt3155-bufs.h b/drivers/staging/dt3155v4l/dt3155-bufs.h deleted file mode 100644 index db6d387..0000000 --- a/drivers/staging/dt3155v4l/dt3155-bufs.h +++ /dev/null @@ -1,88 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2006-2010 by Marin Mitov * - * mitov@issp.bas.bg * - * * - * 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. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef _DT3155_BUFS_H_ -#define _DT3155_BUFS_H_ - -#include - -/* 4 chunks of 4MB, 9 buffers each = 36 buffers (> VIDEO_MAX_FRAME) */ -#define DT3155_CHUNK_NUM 4 - -/* DT3155_CHUNK_SIZE should be 4M (2^22) or less, but more than image size */ -#define DT3155_CHUNK_SIZE (1U << 22) -#define DT3155_CHUNK_FLAGS (GFP_KERNEL | GFP_DMA32 | __GFP_COLD | __GFP_NOWARN) - -/* DT3155_BUF_SIZE = 108 * PAGE_SIZE, so each buf is PAGE_SIZE alligned */ -#define DT3155_BUF_SIZE (768 * 576) - -/** - * struct dt3155_buf - image buffer structure - * - * @cpu: virtual kernel address of the buffer - * @dma: dma (bus) address of the buffer - * @next: pointer to the next buffer in the fifo - * @tv: time value when the image has been acquired - */ -struct dt3155_buf { - void *cpu; - dma_addr_t dma; - struct dt3155_buf *next; - struct timeval tv; -}; - -/** - * struct dt3155_fifo - fifo structure - * - * @head: pointer to the head of the fifo - * @tail: pionter to the tail of the fifo - * @lock: spin_lock to protect the fifo - */ -struct dt3155_fifo { - struct dt3155_buf *head; - struct dt3155_buf *tail; - spinlock_t lock; -}; - -struct dt3155_buf * __must_check -dt3155_init_chunks_buf(void); -void -dt3155_free_chunks_buf(struct dt3155_buf *buf); - -struct dt3155_fifo * __must_check -dt3155_init_fifo(void); -#define dt3155_free_fifo(x) kfree(x) - -struct dt3155_buf * __must_check -dt3155_get_buf(struct dt3155_fifo *fifo); -void -dt3155_put_buf(struct dt3155_buf *buf, struct dt3155_fifo *fifo); - -struct dt3155_fifo * __must_check -dt3155_init_chunks_fifo(void); -void -dt3155_free_chunks_fifo(struct dt3155_fifo *chunks); - -struct dt3155_fifo * __must_check -dt3155_init_ibufs_fifo(struct dt3155_fifo *chunks, int buf_size); -void -dt3155_free_ibufs_fifo(struct dt3155_fifo *fifo); - -#endif /* _DT3155_BUFS_H_ */ diff --git a/drivers/staging/dt3155v4l/dt3155v4l.c b/drivers/staging/dt3155v4l/dt3155v4l.c index 308fb45..6dc3af6 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.c +++ b/drivers/staging/dt3155v4l/dt3155v4l.c @@ -18,22 +18,26 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include -#include -#include -#include #include #include #include -#include #include +#include +#include +#include #include "dt3155v4l.h" -#include "dt3155-bufs.h" #define DT3155_VENDOR_ID 0x8086 #define DT3155_DEVICE_ID 0x1223 +/* DT3155_CHUNK_SIZE is 4M (2^22) 8 full size buffers */ +#define DT3155_CHUNK_SIZE (1U << 22) + +#define DT3155_COH_FLAGS (GFP_KERNEL | GFP_DMA32 | __GFP_COLD | __GFP_NOWARN) + +#define DT3155_BUF_SIZE (768 * 576) + /* global initializers (for all boards) */ #ifdef CONFIG_DT3155_CCIR static const u8 csr2_init = VT_50HZ; @@ -190,441 +194,6 @@ static int wait_i2c_reg(void __iomem *addr) return 0; } -/* - * global pointers to a list of 4MB chunks reserved at driver - * load, broken down to contiguous buffers of 768 * 576 bytes - * each to form a pool of buffers for allocations - * FIXME: add spinlock to protect moves between alloc/free lists - */ -static struct dt3155_fifo *dt3155_chunks; /* list of 4MB chuncks */ -static struct dt3155_fifo *dt3155_free_bufs; /* list of free buffers */ -static struct dt3155_fifo *dt3155_alloc_bufs; /* list of allocated buffers */ - -/* same as in */ -struct videobuf_dma_contig_memory { - u32 magic; - void *vaddr; - dma_addr_t dma_handle; - unsigned long size; - int is_userptr; -}; - -#define MAGIC_DC_MEM 0x0733ac61 -#define MAGIC_CHECK(is, should) \ - if (unlikely((is) != (should))) { \ - pr_err("magic mismatch: %x expected %x\n", (is), (should)); \ - BUG(); \ - } - -/* helper functions to allocate/free buffers from the pool */ -static void * -dt3155_alloc_buffer(struct device *dev, size_t size, dma_addr_t *dma_handle, - gfp_t flag) -{ - struct dt3155_buf *buf; - - if (size > DT3155_BUF_SIZE) - return NULL; - size = DT3155_BUF_SIZE; /* same for CCIR & RS-170 */ - buf = dt3155_get_buf(dt3155_free_bufs); - if (!buf) - return NULL; - buf->dma = dma_map_single(dev, buf->cpu, size, DMA_FROM_DEVICE); - if (dma_mapping_error(dev, buf->dma)) { - dt3155_put_buf(buf, dt3155_free_bufs); - return NULL; - } - dt3155_put_buf(buf, dt3155_alloc_bufs); - *dma_handle = buf->dma; - return buf->cpu; -} - -static void -dt3155_free_buffer(struct device *dev, size_t size, void *cpu_addr, - dma_addr_t dma_handle) -{ - struct dt3155_buf *buf, *last; - int found = 0; - - if (!cpu_addr) /* to free NULL is OK */ - return; - last = dt3155_get_buf(dt3155_alloc_bufs); - if (!last) { - printk(KERN_ERR "dt3155: %s(): no alloc buffers\n", __func__); - return; - } - dt3155_put_buf(last, dt3155_alloc_bufs); - do { - buf = dt3155_get_buf(dt3155_alloc_bufs); - if (buf->cpu == cpu_addr && buf->dma == dma_handle) { - found = 1; - break; - } - dt3155_put_buf(buf, dt3155_alloc_bufs); - } while (buf != last); - if (!found) { - printk(KERN_ERR "dt3155: %s(): buffer not found\n", __func__); - return; - } - size = DT3155_BUF_SIZE; /* same for CCIR & RS-170 */ - dma_unmap_single(dev, dma_handle, size, DMA_FROM_DEVICE); - dt3155_put_buf(buf, dt3155_free_bufs); -} - -/* same as videobuf_dma_contig_user_get() */ -static int -dt3155_dma_contig_user_get(struct videobuf_dma_contig_memory *mem, - struct videobuf_buffer *vb) -{ - struct mm_struct *mm = current->mm; - struct vm_area_struct *vma; - unsigned long prev_pfn, this_pfn; - unsigned long pages_done, user_address; - unsigned int offset; - int ret; - - offset = vb->baddr & ~PAGE_MASK; - mem->size = PAGE_ALIGN(vb->size + offset); - mem->is_userptr = 0; - ret = -EINVAL; - - down_read(&mm->mmap_sem); - - vma = find_vma(mm, vb->baddr); - if (!vma) - goto out_up; - - if ((vb->baddr + mem->size) > vma->vm_end) - goto out_up; - - pages_done = 0; - prev_pfn = 0; /* kill warning */ - user_address = vb->baddr; - - while (pages_done < (mem->size >> PAGE_SHIFT)) { - ret = follow_pfn(vma, user_address, &this_pfn); - if (ret) - break; - - if (pages_done == 0) - mem->dma_handle = (this_pfn << PAGE_SHIFT) + offset; - else if (this_pfn != (prev_pfn + 1)) - ret = -EFAULT; - - if (ret) - break; - - prev_pfn = this_pfn; - user_address += PAGE_SIZE; - pages_done++; - } - - if (!ret) - mem->is_userptr = 1; - - out_up: - up_read(¤t->mm->mmap_sem); - - return ret; -} - -/* same as videobuf_dma_contig_user_put() */ -static void -dt3155_dma_contig_user_put(struct videobuf_dma_contig_memory *mem) -{ - mem->is_userptr = 0; - mem->dma_handle = 0; - mem->size = 0; -} - -/* same as videobuf_iolock() but uses allocations from the pool */ -static int -dt3155_iolock(struct videobuf_queue *q, struct videobuf_buffer *vb, - struct v4l2_framebuffer *fbuf) -{ - struct videobuf_dma_contig_memory *mem = vb->priv; - - BUG_ON(!mem); - MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); - - switch (vb->memory) { - case V4L2_MEMORY_MMAP: - dev_dbg(q->dev, "%s memory method MMAP\n", __func__); - - /* All handling should be done by __videobuf_mmap_mapper() */ - if (!mem->vaddr) { - dev_err(q->dev, "memory is not alloced/mmapped.\n"); - return -EINVAL; - } - break; - case V4L2_MEMORY_USERPTR: - dev_dbg(q->dev, "%s memory method USERPTR\n", __func__); - - /* handle pointer from user space */ - if (vb->baddr) - return dt3155_dma_contig_user_get(mem, vb); - - /* allocate memory for the read() method */ - mem->size = PAGE_ALIGN(vb->size); - mem->vaddr = dt3155_alloc_buffer(q->dev, mem->size, - &mem->dma_handle, GFP_KERNEL); - if (!mem->vaddr) { - dev_err(q->dev, "dma_alloc_coherent %ld failed\n", - mem->size); - return -ENOMEM; - } - - dev_dbg(q->dev, "dma_alloc_coherent data is at %p (%ld)\n", - mem->vaddr, mem->size); - break; - case V4L2_MEMORY_OVERLAY: - default: - dev_dbg(q->dev, "%s memory method OVERLAY/unknown\n", - __func__); - return -EINVAL; - } - - return 0; -} - -/* same as videobuf_dma_contig_free() but uses the pool */ -void -dt3155_dma_contig_free(struct videobuf_queue *q, struct videobuf_buffer *buf) -{ - struct videobuf_dma_contig_memory *mem = buf->priv; - - /* mmapped memory can't be freed here, otherwise mmapped region - would be released, while still needed. In this case, the memory - release should happen inside videobuf_vm_close(). - So, it should free memory only if the memory were allocated for - read() operation. - */ - if (buf->memory != V4L2_MEMORY_USERPTR) - return; - - if (!mem) - return; - - MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); - - /* handle user space pointer case */ - if (buf->baddr) { - dt3155_dma_contig_user_put(mem); - return; - } - - /* read() method */ - dt3155_free_buffer(q->dev, mem->size, mem->vaddr, mem->dma_handle); - mem->vaddr = NULL; -} - -/* same as videobuf_vm_open() */ -static void -dt3155_vm_open(struct vm_area_struct *vma) -{ - struct videobuf_mapping *map = vma->vm_private_data; - - dev_dbg(map->q->dev, "vm_open %p [count=%u,vma=%08lx-%08lx]\n", - map, map->count, vma->vm_start, vma->vm_end); - - map->count++; -} - -/* same as videobuf_vm_close(), but free to the pool */ -static void -dt3155_vm_close(struct vm_area_struct *vma) -{ - struct videobuf_mapping *map = vma->vm_private_data; - struct videobuf_queue *q = map->q; - int i; - - dev_dbg(q->dev, "vm_close %p [count=%u,vma=%08lx-%08lx]\n", - map, map->count, vma->vm_start, vma->vm_end); - - map->count--; - if (0 == map->count) { - struct videobuf_dma_contig_memory *mem; - - dev_dbg(q->dev, "munmap %p q=%p\n", map, q); - mutex_lock(&q->vb_lock); - - /* We need first to cancel streams, before unmapping */ - if (q->streaming) - videobuf_queue_cancel(q); - - for (i = 0; i < VIDEO_MAX_FRAME; i++) { - if (NULL == q->bufs[i]) - continue; - - if (q->bufs[i]->map != map) - continue; - - mem = q->bufs[i]->priv; - if (mem) { - /* This callback is called only if kernel has - allocated memory and this memory is mmapped. - In this case, memory should be freed, - in order to do memory unmap. - */ - - MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); - - /* vfree is not atomic - can't be - called with IRQ's disabled - */ - dev_dbg(q->dev, "buf[%d] freeing %p\n", - i, mem->vaddr); - - dt3155_free_buffer(q->dev, mem->size, - mem->vaddr, mem->dma_handle); - mem->vaddr = NULL; - } - - q->bufs[i]->map = NULL; - q->bufs[i]->baddr = 0; - } - - kfree(map); - - mutex_unlock(&q->vb_lock); - } -} - -static const struct vm_operations_struct dt3155_vm_ops = { - .open = dt3155_vm_open, - .close = dt3155_vm_close, -}; - -/* same as videobuf_mmap_mapper(), but allocates from the pool */ -static int -dt3155_mmap_mapper(struct videobuf_queue *q, struct videobuf_buffer *buf, - struct vm_area_struct *vma) -{ - struct videobuf_dma_contig_memory *mem; - struct videobuf_mapping *map; - int retval; - unsigned long size; - - dev_dbg(q->dev, "%s\n", __func__); - - /* create mapping + update buffer list */ - map = kzalloc(sizeof(struct videobuf_mapping), GFP_KERNEL); - if (!map) - return -ENOMEM; - - buf->map = map; - map->start = vma->vm_start; - map->end = vma->vm_end; - map->q = q; - - buf->baddr = vma->vm_start; - - mem = buf->priv; - BUG_ON(!mem); - MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); - - mem->size = PAGE_ALIGN(buf->bsize); - mem->vaddr = dt3155_alloc_buffer(q->dev, mem->size, - &mem->dma_handle, GFP_KERNEL); - if (!mem->vaddr) { - dev_err(q->dev, "dma_alloc_coherent size %ld failed\n", - mem->size); - goto error; - } - dev_dbg(q->dev, "dma_alloc_coherent data is at addr %p (size %ld)\n", - mem->vaddr, mem->size); - - /* Try to remap memory */ - - size = vma->vm_end - vma->vm_start; - size = (size < mem->size) ? size : mem->size; - - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - retval = remap_pfn_range(vma, vma->vm_start, - mem->dma_handle >> PAGE_SHIFT, - size, vma->vm_page_prot); - if (retval) { - dev_err(q->dev, "mmap: remap failed with error %d. ", retval); - dt3155_free_buffer(q->dev, mem->size, - mem->vaddr, mem->dma_handle); - goto error; - } - - vma->vm_ops = &dt3155_vm_ops; - vma->vm_flags |= VM_DONTEXPAND; - vma->vm_private_data = map; - - dev_dbg(q->dev, "mmap %p: q=%p %08lx-%08lx (%lx) pgoff %08lx buf %d\n", - map, q, vma->vm_start, vma->vm_end, - (long int)buf->bsize, - vma->vm_pgoff, buf->i); - - dt3155_vm_open(vma); - - return 0; - -error: - kfree(map); - return -ENOMEM; -} - -static int -dt3155_sync_for_cpu(struct videobuf_queue *q, struct videobuf_buffer *vb) -{ - struct dt3155_priv *pd = q->priv_data; - struct videobuf_dma_contig_memory *mem = vb->priv; - - BUG_ON(!mem); - MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); - - pci_dma_sync_single_for_cpu(pd->pdev, mem->dma_handle, - mem->size, PCI_DMA_FROMDEVICE); - return 0; -} - -static int -dt3155_sync_for_device(struct videobuf_queue *q, struct videobuf_buffer *vb) -{ - struct dt3155_priv *pd = q->priv_data; - struct videobuf_dma_contig_memory *mem = vb->priv; - - BUG_ON(!mem); - MAGIC_CHECK(mem->magic, MAGIC_DC_MEM); - - pci_dma_sync_single_for_device(pd->pdev, mem->dma_handle, - mem->size, PCI_DMA_FROMDEVICE); - return 0; -} - -/* - * same as videobuf_queue_dma_contig_init(), but after - * initialisation overwrites videobuf_iolock() and - * videobuf_mmap_mapper() with our customized versions - * as well as adds sync() method - */ -static void -dt3155_queue_dma_contig_init(struct videobuf_queue *q, - struct videobuf_queue_ops *ops, - struct device *dev, - spinlock_t *irqlock, - enum v4l2_buf_type type, - enum v4l2_field field, - unsigned int msize, - void *priv) -{ - struct dt3155_priv *pd = priv; - - videobuf_queue_dma_contig_init(q, ops, dev, irqlock, - type, field, msize, priv); - /* replace with local copy */ - pd->qt_ops = *q->int_ops; - q->int_ops = &pd->qt_ops; - /* and overwrite with our methods */ - q->int_ops->iolock = dt3155_iolock; - q->int_ops->mmap_mapper = dt3155_mmap_mapper; - q->int_ops->sync = dt3155_sync_for_cpu; -} - static int dt3155_start_acq(struct dt3155_priv *pd) { @@ -699,7 +268,7 @@ dt3155_buf_prepare(struct videobuf_queue *q, struct videobuf_buffer *vb, if (ret) { vb->state = VIDEOBUF_ERROR; printk(KERN_ERR "ERROR: videobuf_iolock() failed\n"); - videobuf_dma_contig_free(q, vb); + videobuf_dma_contig_free(q, vb); /* FIXME: needed? */ } else vb->state = VIDEOBUF_PREPARED; return ret; @@ -713,7 +282,6 @@ dt3155_buf_queue(struct videobuf_queue *q, struct videobuf_buffer *vb) if (vb->state != VIDEOBUF_NEEDS_INIT) { vb->state = VIDEOBUF_QUEUED; - dt3155_sync_for_device(q, vb); list_add_tail(&vb->queue, &pd->dmaq); wake_up_interruptible_sync(&pd->do_dma); } else @@ -726,7 +294,7 @@ dt3155_buf_release(struct videobuf_queue *q, struct videobuf_buffer *vb) { if (vb->state == VIDEOBUF_ACTIVE) videobuf_waiton(vb, 0, 0); /* FIXME: cannot be interrupted */ - dt3155_dma_contig_free(q, vb); + videobuf_dma_contig_free(q, vb); vb->state = VIDEOBUF_NEEDS_INIT; } @@ -869,7 +437,7 @@ dt3155_open(struct file *filp) ret = -ENOMEM; goto err_alloc_queue; } - dt3155_queue_dma_contig_init(pd->vidq, &vbq_ops, + videobuf_queue_dma_contig_init(pd->vidq, &vbq_ops, &pd->pdev->dev, &pd->lock, V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_FIELD_NONE, sizeof(struct videobuf_buffer), pd); @@ -1317,11 +885,13 @@ static const struct v4l2_ioctl_ops dt3155_ioctl_ops = { static int __devinit dt3155_init_board(struct pci_dev *dev) { + struct dt3155_priv *pd = pci_get_drvdata(dev); + void *buf_cpu; + dma_addr_t buf_dma; int i; u8 tmp; - struct dt3155_buf *buf; - struct dt3155_priv *pd = pci_get_drvdata(dev); - pci_set_master(dev); /* dt3155 needs it */ + + pci_set_master(dev); /* dt3155 needs it */ /* resetting the adapter */ iowrite32(FLD_CRPT_ODD | FLD_CRPT_EVEN | FLD_DN_ODD | FLD_DN_EVEN, @@ -1381,22 +951,16 @@ dt3155_init_board(struct pci_dev *dev) write_i2c_reg(pd->regs, AD_ADDR, AD_CMD_REG); write_i2c_reg(pd->regs, AD_CMD, VIDEO_CNL_1 | SYNC_CNL_1 | SYNC_LVL_3); - /* allocate and pci_map memory, and initialize the DMA machine */ - buf = dt3155_get_buf(dt3155_free_bufs); - if (!buf) { - printk(KERN_ERR "dt3155: dt3155_get_buf " + /* allocate memory, and initialize the DMA machine */ + buf_cpu = dma_alloc_coherent(&dev->dev, DT3155_BUF_SIZE, &buf_dma, + GFP_KERNEL); + if (!buf_cpu) { + printk(KERN_ERR "dt3155: dma_alloc_coherent " "(in dt3155_init_board) failed\n"); return -ENOMEM; } - buf->dma = pci_map_single(dev, buf->cpu, - DT3155_BUF_SIZE, PCI_DMA_FROMDEVICE); - if (pci_dma_mapping_error(dev, buf->dma)) { - printk(KERN_ERR "dt3155: pci_map_single failed\n"); - dt3155_put_buf(buf, dt3155_free_bufs); - return -ENOMEM; - } - iowrite32(buf->dma, pd->regs + EVEN_DMA_START); - iowrite32(buf->dma, pd->regs + ODD_DMA_START); + iowrite32(buf_dma, pd->regs + EVEN_DMA_START); + iowrite32(buf_dma, pd->regs + ODD_DMA_START); iowrite32(0, pd->regs + EVEN_DMA_STRIDE); iowrite32(0, pd->regs + ODD_DMA_STRIDE); @@ -1413,9 +977,8 @@ dt3155_init_board(struct pci_dev *dev) write_i2c_reg(pd->regs, CSR2, pd->csr2); iowrite32(FIFO_EN | SRST | FLD_DN_EVEN | FLD_DN_ODD, pd->regs + CSR1); - /* pci_unmap and deallocate memory */ - pci_unmap_single(dev, buf->dma, DT3155_BUF_SIZE, PCI_DMA_FROMDEVICE); - dt3155_put_buf(buf, dt3155_free_bufs); + /* deallocate memory */ + dma_free_coherent(&dev->dev, DT3155_BUF_SIZE, buf_cpu, buf_dma); if (tmp & BUSY_EVEN) { printk(KERN_ERR "dt3155: BUSY_EVEN not cleared\n"); return -EIO; @@ -1433,17 +996,82 @@ static struct video_device dt3155_vdev = { .current_norm = DT3155_CURRENT_NORM, }; +/* same as in drivers/base/dma-coherent.c */ +struct dma_coherent_mem { + void *virt_base; + u32 device_base; + int size; + int flags; + unsigned long *bitmap; +}; + +static int __devinit +dt3155_alloc_coherent(struct device *dev, size_t size, int flags) +{ + int pages = size >> PAGE_SHIFT; + int bitmap_size = BITS_TO_LONGS(pages) * sizeof(long); + + if ((flags & DMA_MEMORY_MAP) == 0) + goto out; + if (!size) + goto out; + if (dev->dma_mem) + goto out; + + dev->dma_mem = kzalloc(sizeof(struct dma_coherent_mem), GFP_KERNEL); + if (!dev->dma_mem) + goto out; + dev->dma_mem->bitmap = kzalloc(bitmap_size, GFP_KERNEL); + if (!dev->dma_mem->bitmap) + goto err_bitmap; + + dev->dma_mem->virt_base = dma_alloc_coherent(dev, size, + &dev->dma_mem->device_base, DT3155_COH_FLAGS); + if (!dev->dma_mem->virt_base) + goto err_coherent; + dev->dma_mem->size = pages; + dev->dma_mem->flags = flags; + return DMA_MEMORY_MAP; + +err_coherent: + kfree(dev->dma_mem->bitmap); +err_bitmap: + kfree(dev->dma_mem); +out: + return 0; +} + +static void __devexit +dt3155_free_coherent(struct device *dev) +{ + struct dma_coherent_mem *mem = dev->dma_mem; + + if (!mem) + return; + dev->dma_mem = NULL; + dma_free_coherent(dev, mem->size << PAGE_SHIFT, + mem->virt_base, mem->device_base); + kfree(mem->bitmap); + kfree(mem); +} + static int __devinit dt3155_probe(struct pci_dev *dev, const struct pci_device_id *id) { - int err = -ENODEV; + int err; struct dt3155_priv *pd; printk(KERN_INFO "dt3155: probe()\n"); - if (pci_set_dma_mask(dev, DMA_BIT_MASK(32))) { + err = dma_set_mask(&dev->dev, DMA_BIT_MASK(32)); + if (err) { printk(KERN_ERR "dt3155: cannot set dma_mask\n"); return -ENODEV; } + err = dma_set_coherent_mask(&dev->dev, DMA_BIT_MASK(32)); + if (err) { + printk(KERN_ERR "dt3155: cannot set dma_coherent_mask\n"); + return -ENODEV; + } pd = kzalloc(sizeof(*pd), GFP_KERNEL); if (!pd) { printk(KERN_ERR "dt3155: cannot allocate dt3155_priv\n"); @@ -1451,12 +1079,12 @@ dt3155_probe(struct pci_dev *dev, const struct pci_device_id *id) } pd->vdev = video_device_alloc(); if (!pd->vdev) { - printk(KERN_ERR "dt3155: cannot allocate vdp structure\n"); + printk(KERN_ERR "dt3155: cannot allocate vdev structure\n"); goto err_video_device_alloc; } *pd->vdev = dt3155_vdev; - pci_set_drvdata(dev, pd); /* for use in dt3155_remove() */ - video_set_drvdata(pd->vdev, pd); /* for use in video_fops */ + pci_set_drvdata(dev, pd); /* for use in dt3155_remove() */ + video_set_drvdata(pd->vdev, pd); /* for use in video_fops */ pd->users = 0; pd->acq_fp = NULL; pd->pdev = dev; @@ -1489,6 +1117,10 @@ dt3155_probe(struct pci_dev *dev, const struct pci_device_id *id) printk(KERN_ERR "dt3155: Cannot register video device\n"); goto err_init_board; } + err = dt3155_alloc_coherent(&dev->dev, DT3155_CHUNK_SIZE, + DMA_MEMORY_MAP); + if (err) + printk(KERN_INFO "dt3155: preallocated 8 buffers\n"); printk(KERN_INFO "dt3155: /dev/video%i is ready\n", pd->vdev->minor); return 0; /* success */ @@ -1511,6 +1143,7 @@ dt3155_remove(struct pci_dev *dev) struct dt3155_priv *pd = pci_get_drvdata(dev); printk(KERN_INFO "dt3155: remove()\n"); + dt3155_free_coherent(&dev->dev); video_unregister_device(pd->vdev); pci_iounmap(dev, pd->regs); pci_release_region(pd->pdev, 0); @@ -1542,48 +1175,18 @@ dt3155_init_module(void) printk(KERN_INFO "dt3155: ==================\n"); printk(KERN_INFO "dt3155: init()\n"); - dt3155_chunks = dt3155_init_chunks_fifo(); - if (!dt3155_chunks) { - err = -ENOMEM; - printk(KERN_ERR "dt3155: cannot init dt3155_chunks_fifo\n"); - goto err_init_chunks_fifo; - } - dt3155_free_bufs = dt3155_init_ibufs_fifo(dt3155_chunks, - DT3155_BUF_SIZE); - if (!dt3155_free_bufs) { - err = -ENOMEM; - printk(KERN_ERR "dt3155: cannot dt3155_init_ibufs_fifo\n"); - goto err_init_ibufs_fifo; - } - dt3155_alloc_bufs = dt3155_init_fifo(); - if (!dt3155_alloc_bufs) { - err = -ENOMEM; - printk(KERN_ERR "dt3155: cannot dt3155_init_fifo\n"); - goto err_init_fifo; - } err = pci_register_driver(&pci_driver); if (err) { printk(KERN_ERR "dt3155: cannot register pci_driver\n"); - goto err_register_driver; + return err; } return 0; /* succes */ -err_register_driver: - dt3155_free_fifo(dt3155_alloc_bufs); -err_init_fifo: - dt3155_free_ibufs_fifo(dt3155_free_bufs); -err_init_ibufs_fifo: - dt3155_free_chunks_fifo(dt3155_chunks); -err_init_chunks_fifo: - return err; } static void __exit dt3155_exit_module(void) { pci_unregister_driver(&pci_driver); - dt3155_free_fifo(dt3155_alloc_bufs); - dt3155_free_ibufs_fifo(dt3155_free_bufs); - dt3155_free_chunks_fifo(dt3155_chunks); printk(KERN_INFO "dt3155: exit()\n"); printk(KERN_INFO "dt3155: ==================\n"); } diff --git a/drivers/staging/dt3155v4l/dt3155v4l.h b/drivers/staging/dt3155v4l/dt3155v4l.h index e65a81e..aa68a6f 100644 --- a/drivers/staging/dt3155v4l/dt3155v4l.h +++ b/drivers/staging/dt3155v4l/dt3155v4l.h @@ -29,8 +29,8 @@ #define DT3155_NAME "dt3155" #define DT3155_VER_MAJ 1 -#define DT3155_VER_MIN 0 -#define DT3155_VER_EXT 3 +#define DT3155_VER_MIN 1 +#define DT3155_VER_EXT 0 #define DT3155_VERSION __stringify(DT3155_VER_MAJ) "." \ __stringify(DT3155_VER_MIN) "." \ __stringify(DT3155_VER_EXT) -- cgit v0.10.2 From 7ec52ed25013533248d929d4405225d30c4272b2 Mon Sep 17 00:00:00 2001 From: Alessio Igor Bogani Date: Tue, 18 May 2010 13:12:32 +0200 Subject: Staging: comedi: quatech_daqp_cs.c Replace eos semaphore with a completion. Build tested only. Signed-off-by: Alessio Igor Bogani Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/comedi/drivers/quatech_daqp_cs.c b/drivers/staging/comedi/drivers/quatech_daqp_cs.c index be62fac..d77ae81 100644 --- a/drivers/staging/comedi/drivers/quatech_daqp_cs.c +++ b/drivers/staging/comedi/drivers/quatech_daqp_cs.c @@ -55,6 +55,8 @@ Devices: [Quatech] DAQP-208 (daqp), DAQP-308 #include #include +#include + /* Maximum number of separate DAQP devices we'll allow */ #define MAX_DEV 4 @@ -67,7 +69,7 @@ struct local_info_t { enum { semaphore, buffer } interrupt_mode; - struct semaphore eos; + struct completion eos; struct comedi_device *dev; struct comedi_subdevice *s; @@ -238,7 +240,7 @@ static int daqp_ai_cancel(struct comedi_device *dev, struct comedi_subdevice *s) /* Interrupt handler * * Operates in one of two modes. If local->interrupt_mode is - * 'semaphore', just signal the local->eos semaphore and return + * 'semaphore', just signal the local->eos completion and return * (one-shot mode). Otherwise (continuous mode), read data in from * the card, transfer it to the buffer provided by the higher-level * comedi kernel module, and signal various comedi callback routines, @@ -287,7 +289,7 @@ static enum irqreturn daqp_interrupt(int irq, void *dev_id) case semaphore: - up(&local->eos); + complete(&local->eos); break; case buffer: @@ -401,8 +403,7 @@ static int daqp_ai_insn_read(struct comedi_device *dev, return -1; } - /* Make sure semaphore is blocked */ - sema_init(&local->eos, 0); + init_completion(&local->eos); local->interrupt_mode = semaphore; local->dev = dev; local->s = s; @@ -413,9 +414,9 @@ static int daqp_ai_insn_read(struct comedi_device *dev, outb(DAQP_COMMAND_ARM | DAQP_COMMAND_FIFO_DATA, dev->iobase + DAQP_COMMAND); - /* Wait for interrupt service routine to unblock semaphore */ + /* Wait for interrupt service routine to unblock completion */ /* Maybe could use a timeout here, but it's interruptible */ - if (down_interruptible(&local->eos)) + if (wait_for_completion_interruptible(&local->eos)) return -EINTR; data[i] = inb(dev->iobase + DAQP_FIFO); -- cgit v0.10.2 From 21ec51f3df9fd3c83ce0a4ac6a18e5083984b8ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Tue, 18 May 2010 10:08:14 -0700 Subject: Staging: vt6656: use ETH_HLEN macro instead of custom one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace custom header length definition U_HEADER_LEN by ETH_HLEN from . Also remove unused U_TYPE_LEN. Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6656/rxtx.c b/drivers/staging/vt6656/rxtx.c index 6a4b87f..c411055 100644 --- a/drivers/staging/vt6656/rxtx.c +++ b/drivers/staging/vt6656/rxtx.c @@ -1483,7 +1483,7 @@ s_bPacketToWirelessUsb( cb802_1_H_len = 0; } - cbFrameBodySize = uSkbPacketLen - U_HEADER_LEN + cb802_1_H_len; + cbFrameBodySize = uSkbPacketLen - ETH_HLEN + cb802_1_H_len; //Set packet type pTxBufHead->wFIFOCtl |= (WORD)(byPktType<<8); @@ -1729,13 +1729,13 @@ s_bPacketToWirelessUsb( if (pPacket != NULL) { // Copy the Packet into a tx Buffer memcpy((pbyPayloadHead + cb802_1_H_len), - (pPacket + U_HEADER_LEN), - uSkbPacketLen - U_HEADER_LEN + (pPacket + ETH_HLEN), + uSkbPacketLen - ETH_HLEN ); } else { // while bRelayPacketSend psEthHeader is point to header+payload - memcpy((pbyPayloadHead + cb802_1_H_len), ((PBYTE)psEthHeader)+U_HEADER_LEN, uSkbPacketLen - U_HEADER_LEN); + memcpy((pbyPayloadHead + cb802_1_H_len), ((PBYTE)psEthHeader) + ETH_HLEN, uSkbPacketLen - ETH_HLEN); } ASSERT(uLength == cbNdisBodySize); @@ -2849,7 +2849,7 @@ nsDMA_tx_packet( return STATUS_RESOURCES; } - memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)(skb->data), U_HEADER_LEN); + memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)(skb->data), ETH_HLEN); //mike add:station mode check eapol-key challenge---> { @@ -2858,10 +2858,10 @@ nsDMA_tx_packet( BYTE Descriptor_type; WORD Key_info; - Protocol_Version = skb->data[U_HEADER_LEN]; - Packet_Type = skb->data[U_HEADER_LEN+1]; - Descriptor_type = skb->data[U_HEADER_LEN+1+1+2]; - Key_info = (skb->data[U_HEADER_LEN+1+1+2+1] << 8)|(skb->data[U_HEADER_LEN+1+1+2+2]); + Protocol_Version = skb->data[ETH_HLEN]; + Packet_Type = skb->data[ETH_HLEN+1]; + Descriptor_type = skb->data[ETH_HLEN+1+1+2]; + Key_info = (skb->data[ETH_HLEN+1+1+2+1] << 8)|(skb->data[ETH_HLEN+1+1+2+2]); if (pDevice->sTxEthHeader.wType == TYPE_PKT_802_1x) { if(((Protocol_Version==1) ||(Protocol_Version==2)) && (Packet_Type==3)) { //802.1x OR eapol-key challenge frame transfer @@ -3195,7 +3195,7 @@ bRelayPacketSend ( return FALSE; } - memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)pbySkbData, U_HEADER_LEN); + memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)pbySkbData, ETH_HLEN); if (pDevice->bEncryptionEnable == TRUE) { bNeedEncryption = TRUE; diff --git a/drivers/staging/vt6656/tether.h b/drivers/staging/vt6656/tether.h index f5819a7..d63586d 100644 --- a/drivers/staging/vt6656/tether.h +++ b/drivers/staging/vt6656/tether.h @@ -36,19 +36,17 @@ // // constants // -#define U_TYPE_LEN 2 // #define U_CRC_LEN 4 // -#define U_HEADER_LEN (ETH_ALEN * 2 + U_TYPE_LEN) #define U_ETHER_ADDR_STR_LEN (ETH_ALEN * 2 + 1) // Ethernet address string length #define MIN_DATA_LEN 46 // min data length #define MAX_DATA_LEN 1500 // max data length -#define MIN_PACKET_LEN (MIN_DATA_LEN + U_HEADER_LEN) +#define MIN_PACKET_LEN (MIN_DATA_LEN + ETH_HLEN) // 60 // min total packet length (tx) -#define MAX_PACKET_LEN (MAX_DATA_LEN + U_HEADER_LEN) +#define MAX_PACKET_LEN (MAX_DATA_LEN + ETH_HLEN) // 1514 // max total packet length (tx) -- cgit v0.10.2 From 855181f51558dca10c8acc27f1f81e0809ddf057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Tue, 18 May 2010 10:19:36 -0700 Subject: Staging: vt6655: use ETH_FCS_LEN macro instead of custom one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace custom FCS/CRC length definition U_CRC_LEN by ETH_FCS_LEN from . Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/dpc.c b/drivers/staging/vt6655/dpc.c index 83040f4..6b758a8 100644 --- a/drivers/staging/vt6655/dpc.c +++ b/drivers/staging/vt6655/dpc.c @@ -569,7 +569,7 @@ device_receive_frame ( // RX OK // //remove the CRC length - FrameSize -= U_CRC_LEN; + FrameSize -= ETH_FCS_LEN; if (( !(*pbyRsr & (RSR_ADDRBROAD | RSR_ADDRMULTI))) && // unicast address (IS_FRAGMENT_PKT((skb->data+4))) diff --git a/drivers/staging/vt6655/tether.h b/drivers/staging/vt6655/tether.h index 4f2af35..bc82a6b 100644 --- a/drivers/staging/vt6655/tether.h +++ b/drivers/staging/vt6655/tether.h @@ -36,7 +36,6 @@ // // constants // -#define U_CRC_LEN 4 // #define U_ETHER_ADDR_STR_LEN (ETH_ALEN * 2 + 1) // Ethernet address string length -- cgit v0.10.2 From 31c21b779181140e0b7eadadbd5e0f518e131488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Tue, 18 May 2010 11:30:19 -0700 Subject: Staging: vt6655: use ETH_DATA_LEN macro instead of custom one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace custom maximum data lenght definition MAX_DATA_LEN by ETH_DATA_LEN from . Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 25894a2..3005892 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c @@ -2156,7 +2156,7 @@ BOOL device_dma0_xmit(PSDevice pDevice, struct sk_buff *skb, UINT uNodeIndex) { cbFrameBodySize = skb->len - ETH_HLEN; // 802.1H - if (ntohs(pDevice->sTxEthHeader.wType) > MAX_DATA_LEN) { + if (ntohs(pDevice->sTxEthHeader.wType) > ETH_DATA_LEN) { cbFrameBodySize += 8; } uMACfragNum = cbGetFragCount(pDevice, pTransmitKey, cbFrameBodySize, &pDevice->sTxEthHeader); @@ -2359,7 +2359,7 @@ static int device_xmit(struct sk_buff *skb, struct net_device *dev) { memcpy(pDevice->sTxEthHeader.abyDstAddr, (PBYTE)(skb->data), ETH_HLEN); cbFrameBodySize = skb->len - ETH_HLEN; // 802.1H - if (ntohs(pDevice->sTxEthHeader.wType) > MAX_DATA_LEN) { + if (ntohs(pDevice->sTxEthHeader.wType) > ETH_DATA_LEN) { cbFrameBodySize += 8; } diff --git a/drivers/staging/vt6655/rxtx.c b/drivers/staging/vt6655/rxtx.c index e27fa20..efd758e 100644 --- a/drivers/staging/vt6655/rxtx.c +++ b/drivers/staging/vt6655/rxtx.c @@ -1622,7 +1622,7 @@ s_cbFillTxBufHead ( // 802.1H - if (ntohs(psEthHeader->wType) > MAX_DATA_LEN) { + if (ntohs(psEthHeader->wType) > ETH_DATA_LEN) { if ((psEthHeader->wType == TYPE_PKT_IPX) || (psEthHeader->wType == cpu_to_le16(0xF380))) { memcpy((PBYTE) (pbyPayloadHead), &pDevice->abySNAP_Bridgetunnel[0], 6); @@ -1986,7 +1986,7 @@ s_cbFillTxBufHead ( } // 802.1H - if (ntohs(psEthHeader->wType) > MAX_DATA_LEN) { + if (ntohs(psEthHeader->wType) > ETH_DATA_LEN) { if ((psEthHeader->wType == TYPE_PKT_IPX) || (psEthHeader->wType == cpu_to_le16(0xF380))) { memcpy((PBYTE) (pbyPayloadHead), &pDevice->abySNAP_Bridgetunnel[0], 6); diff --git a/drivers/staging/vt6655/tether.h b/drivers/staging/vt6655/tether.h index bc82a6b..5ade9b6 100644 --- a/drivers/staging/vt6655/tether.h +++ b/drivers/staging/vt6655/tether.h @@ -40,12 +40,11 @@ // Ethernet address string length #define MIN_DATA_LEN 46 // min data length -#define MAX_DATA_LEN 1500 // max data length #define MIN_PACKET_LEN (MIN_DATA_LEN + ETH_HLEN) // 60 // min total packet length (tx) -#define MAX_PACKET_LEN (MAX_DATA_LEN + ETH_HLEN) +#define MAX_PACKET_LEN (ETH_DATA_LEN + ETH_HLEN) // 1514 // max total packet length (tx) diff --git a/drivers/staging/vt6655/wroute.c b/drivers/staging/vt6655/wroute.c index 485e105..bf92fb9 100644 --- a/drivers/staging/vt6655/wroute.c +++ b/drivers/staging/vt6655/wroute.c @@ -95,7 +95,7 @@ BOOL ROUTEbRelay (PSDevice pDevice, PBYTE pbySkbData, UINT uDataLen, UINT uNodeI cbFrameBodySize = uDataLen - ETH_HLEN; - if (ntohs(pDevice->sTxEthHeader.wType) > MAX_DATA_LEN) { + if (ntohs(pDevice->sTxEthHeader.wType) > ETH_DATA_LEN) { cbFrameBodySize += 8; } -- cgit v0.10.2 From f4a68b9388c7f647ba2fd43faf69cad26ca03206 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charles=20Cl=C3=A9ment?= Date: Tue, 18 May 2010 11:30:20 -0700 Subject: Staging: vt6655: use ETH_FRAME_LEN macro instead of custom one MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace custom maximum packet lenght definition MAX_PACKET_LEN by ETH_FRAME_LEN from . Signed-off-by: Charles Clément Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/vt6655/mib.c b/drivers/staging/vt6655/mib.c index e5f0638..4ca7877 100644 --- a/drivers/staging/vt6655/mib.c +++ b/drivers/staging/vt6655/mib.c @@ -359,9 +359,9 @@ void STAvUpdateRDStatCounter (PSStatCounter pStatistic, else if ((512 <= cbFrameLength) && (cbFrameLength <= 1023)) { pStatistic->dwRsrRxFrmLen512_1023++; } - else if ((1024 <= cbFrameLength) && (cbFrameLength <= MAX_PACKET_LEN + 4)) { + else if ((1024 <= cbFrameLength) && (cbFrameLength <= ETH_FRAME_LEN + 4)) { pStatistic->dwRsrRxFrmLen1024_1518++; - } else if (cbFrameLength > MAX_PACKET_LEN + 4) { + } else if (cbFrameLength > ETH_FRAME_LEN + 4) { pStatistic->dwRsrLong++; } diff --git a/drivers/staging/vt6655/tether.h b/drivers/staging/vt6655/tether.h index 5ade9b6..3c9acd7 100644 --- a/drivers/staging/vt6655/tether.h +++ b/drivers/staging/vt6655/tether.h @@ -44,11 +44,8 @@ #define MIN_PACKET_LEN (MIN_DATA_LEN + ETH_HLEN) // 60 // min total packet length (tx) -#define MAX_PACKET_LEN (ETH_DATA_LEN + ETH_HLEN) - // 1514 - // max total packet length (tx) -#define MAX_LOOKAHEAD_SIZE MAX_PACKET_LEN +#define MAX_LOOKAHEAD_SIZE ETH_FRAME_LEN #define U_MULTI_ADDR_LEN 8 // multicast address length -- cgit v0.10.2 From b27256439568950f30864ccecaeb6dfb588089d5 Mon Sep 17 00:00:00 2001 From: Nitin Gupta Date: Mon, 17 May 2010 11:02:42 +0530 Subject: swap: Add flag to identify block swap devices Added SWP_BLKDEV flag to distinguish block and regular file backed swap devices. We could also check if a swap is entire block device, rather than a file, by: S_ISBLK(swap_info_struct->swap_file->f_mapping->host->i_mode) but, I think, simply checking this flag is more convenient. Signed-off-by: Nitin Gupta Acked-by: Linus Torvalds Acked-by: Nigel Cunningham Acked-by: Pekka Enberg Reviewed-by: Minchan Kim Signed-off-by: Greg Kroah-Hartman diff --git a/include/linux/swap.h b/include/linux/swap.h index 1f59d93..ec2b7a4 100644 --- a/include/linux/swap.h +++ b/include/linux/swap.h @@ -146,6 +146,7 @@ enum { SWP_DISCARDING = (1 << 3), /* now discarding a free cluster */ SWP_SOLIDSTATE = (1 << 4), /* blkdev seeks are cheap */ SWP_CONTINUED = (1 << 5), /* swap_map has count continuation */ + SWP_BLKDEV = (1 << 6), /* its a block device */ /* add others here before... */ SWP_SCANNING = (1 << 8), /* refcount in scan_swap_map */ }; diff --git a/mm/swapfile.c b/mm/swapfile.c index 6cd0a8f..ecb069e 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -1884,6 +1884,7 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) if (error < 0) goto bad_swap; p->bdev = bdev; + p->flags |= SWP_BLKDEV; } else if (S_ISREG(inode->i_mode)) { p->bdev = inode->i_sb->s_bdev; mutex_lock(&inode->i_mutex); -- cgit v0.10.2 From b3a27d0529c6e5206f1b60f60263e3ecfd0d77cb Mon Sep 17 00:00:00 2001 From: Nitin Gupta Date: Mon, 17 May 2010 11:02:43 +0530 Subject: swap: Add swap slot free callback to block_device_operations This callback is required when RAM based devices are used as swap disks. One such device is ramzswap which is used as compressed in-memory swap disk. For such devices, we need a callback as soon as a swap slot is no longer used to allow freeing memory allocated for this slot. Without this callback, stale data can quickly accumulate in memory defeating the whole purpose of such devices. Signed-off-by: Nitin Gupta Acked-by: Linus Torvalds Acked-by: Nigel Cunningham Acked-by: Pekka Enberg Reviewed-by: Minchan Kim Signed-off-by: Greg Kroah-Hartman diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index 6690e8b..413284a 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -1287,6 +1287,8 @@ struct block_device_operations { unsigned long long); int (*revalidate_disk) (struct gendisk *); int (*getgeo)(struct block_device *, struct hd_geometry *); + /* this callback is with swap_lock and sometimes page table lock held */ + void (*swap_slot_free_notify) (struct block_device *, unsigned long); struct module *owner; }; diff --git a/mm/swapfile.c b/mm/swapfile.c index ecb069e..f5ccc47 100644 --- a/mm/swapfile.c +++ b/mm/swapfile.c @@ -574,6 +574,7 @@ static unsigned char swap_entry_free(struct swap_info_struct *p, /* free if no reference */ if (!usage) { + struct gendisk *disk = p->bdev->bd_disk; if (offset < p->lowest_bit) p->lowest_bit = offset; if (offset > p->highest_bit) @@ -583,6 +584,9 @@ static unsigned char swap_entry_free(struct swap_info_struct *p, swap_list.next = p->type; nr_swap_pages++; p->inuse_pages--; + if ((p->flags & SWP_BLKDEV) && + disk->fops->swap_slot_free_notify) + disk->fops->swap_slot_free_notify(p->bdev, offset); } return usage; -- cgit v0.10.2 From 107c161b7ddeeb7da43509cc6b29211885ccd9af Mon Sep 17 00:00:00 2001 From: Nitin Gupta Date: Mon, 17 May 2010 11:02:44 +0530 Subject: Staging: ramzswap: Handler for swap slot free callback Install handler for swap_slot_free_notify callback which is called when a swap slot is no longer used. This handler immediately frees memory allocated corresponding to the given swap slot. Signed-off-by: Nitin Gupta Acked-by: Linus Torvalds Acked-by: Nigel Cunningham Acked-by: Pekka Enberg Reviewed-by: Minchan Kim Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/ramzswap/TODO b/drivers/staging/ramzswap/TODO deleted file mode 100644 index 8d64e28..0000000 --- a/drivers/staging/ramzswap/TODO +++ /dev/null @@ -1,5 +0,0 @@ -TODO: - - Add support for swap notifiers - -Please send patches to Greg Kroah-Hartman and -Nitin Gupta diff --git a/drivers/staging/ramzswap/ramzswap_drv.c b/drivers/staging/ramzswap/ramzswap_drv.c index 167f8d1..d14bf91 100644 --- a/drivers/staging/ramzswap/ramzswap_drv.c +++ b/drivers/staging/ramzswap/ramzswap_drv.c @@ -335,14 +335,6 @@ static int ramzswap_write(struct ramzswap *rzs, struct bio *bio) src = rzs->compress_buffer; - /* - * System swaps to same sector again when the stored page - * is no longer referenced by any process. So, its now safe - * to free the memory that was allocated for this page. - */ - if (rzs->table[index].page || rzs_test_flag(rzs, index, RZS_ZERO)) - ramzswap_free_page(rzs, index); - mutex_lock(&rzs->lock); user_mem = kmap_atomic(page, KM_USER0); @@ -690,9 +682,21 @@ out: return ret; } +void ramzswap_slot_free_notify(struct block_device *bdev, unsigned long index) +{ + struct ramzswap *rzs; + + rzs = bdev->bd_disk->private_data; + ramzswap_free_page(rzs, index); + rzs_stat64_inc(rzs, &rzs->stats.notify_free); + + return; +} + static struct block_device_operations ramzswap_devops = { .ioctl = ramzswap_ioctl, - .owner = THIS_MODULE, + .swap_slot_free_notify = ramzswap_slot_free_notify, + .owner = THIS_MODULE }; static int create_device(struct ramzswap *rzs, int device_id) -- cgit v0.10.2