You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(9) |
Aug
(16) |
Sep
(11) |
Oct
(113) |
Nov
(136) |
Dec
(123) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(61) |
Feb
(42) |
Mar
(114) |
Apr
(34) |
May
(5) |
Jun
(26) |
Jul
(4) |
Aug
(29) |
Sep
(62) |
Oct
(24) |
Nov
(3) |
Dec
(9) |
2005 |
Jan
(23) |
Feb
(8) |
Mar
(36) |
Apr
(75) |
May
(10) |
Jun
(109) |
Jul
(54) |
Aug
(135) |
Sep
(163) |
Oct
(83) |
Nov
(32) |
Dec
(44) |
2006 |
Jan
(134) |
Feb
(78) |
Mar
(27) |
Apr
(10) |
May
(16) |
Jun
(5) |
Jul
(6) |
Aug
(3) |
Sep
(6) |
Oct
(2) |
Nov
|
Dec
(9) |
2007 |
Jan
(8) |
Feb
(4) |
Mar
(2) |
Apr
|
May
(7) |
Jun
(14) |
Jul
(16) |
Aug
(4) |
Sep
(2) |
Oct
(1) |
Nov
(2) |
Dec
(1) |
2008 |
Jan
|
Feb
|
Mar
(3) |
Apr
|
May
(27) |
Jun
(2) |
Jul
(29) |
Aug
(5) |
Sep
|
Oct
(2) |
Nov
(3) |
Dec
(5) |
2009 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(3) |
Nov
|
Dec
|
2010 |
Jan
(9) |
Feb
|
Mar
(7) |
Apr
(5) |
May
(2) |
Jun
|
Jul
|
Aug
(1) |
Sep
(3) |
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
(152) |
May
(248) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2013 |
Jan
(8) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(3) |
Oct
|
Nov
|
Dec
|
2014 |
Jan
(2) |
Feb
(3) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(4) |
Nov
|
Dec
|
From: Jim C. <jim...@gm...> - 2012-05-20 18:40:38
|
grep -P '_[esl]_' * shows lots of out-of-date comments, update them. Leave a few _e_(suspend|resume) which are actual functions, they also point out an unfinished merge. Signed-off-by: Jim Cromie <jim...@gm...> --- mem.c | 23 +++++++++++------------ merge.c | 2 +- pci.c | 35 ++++++++++++----------------------- usb.c | 25 +++++++++++++------------ 4 files changed, 37 insertions(+), 48 deletions(-) diff --git a/mem.c b/mem.c index 9a7d554..41e092f 100644 --- a/mem.c +++ b/mem.c @@ -439,7 +439,7 @@ void acxmem_chaincopy_from_slavemem(acx_device_t *adev, u8 *destination, */ /* - * acxmem_s_issue_cmd_timeo + * acxmem_issue_cmd_timeo_debug * * Sends command to fw, extract result * @@ -734,14 +734,14 @@ static int acxmem_complete_hw_reset(acx_device_t *adev) return -2; acx_parse_configoption(adev, &co); - acx_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */ + acx_get_firmware_version(adev); /* needs to be after acx_init_mac() */ acx_display_hardware_details(adev); return 0; } /* - * acxmem_l_reset_mac + * acxmem_reset_mac * * MAC will be reset * Call context: reset_dev @@ -1031,7 +1031,7 @@ int acxmem_proc_diag_output(struct seq_file *file, #if 0 /* - * acxmem_l_process_rxdesc + * acxmem_process_rxdesc * * Called directly and only from the IRQ handler */ @@ -1250,7 +1250,7 @@ u32 acxmem_allocate_acx_txbuf_space(acx_device_t *adev, int count) static void acxmem_init_acx_txbuf(acx_device_t *adev) { /* - * acx100_s_init_memory_pools set up txbuf_start and + * acx100_init_memory_pools set up txbuf_start and * txbuf_numblocks for us. All we need to do is reset the * rest of the bookeeping. */ @@ -1470,10 +1470,9 @@ static irqreturn_t acxmem_interrupt(int irq, void *dev_id) * bit unless we're going towards full, in * which case we do it immediately, too * (otherwise we might lockup with a full Tx - * buffer if we go into - * acxmem_l_clean_txdesc() at a time when we - * won't wakeup the net queue in there for - * some reason...) */ + * buffer if we go into acxmem_clean_txdesc() + * at a time when we won't wakeup the net + * queue in there for some reason...) */ if (adev->tx_free <= TX_START_CLEAN) { #if TX_CLEANUP_IN_SOFTIRQ acx_schedule_task(adev, ACX_AFTER_IRQ_TX_CLEANUP); @@ -2151,7 +2150,7 @@ static int __devinit acxmem_probe(struct platform_device *pdev) irq_set_irq_type(adev->irq, IRQF_TRIGGER_FALLING); #endif log(L_ANY, "request_irq %d successful\n", adev->irq); - /* Acx irqs shall be off and are enabled later in acxpci_s_up */ + /* Acx irqs shall be off and are enabled later in acx_up */ acxmem_lock(); acx_irq_disable(adev); acxmem_unlock(); @@ -2439,7 +2438,7 @@ static int acxmem_e_resume(struct platform_device *pdev) acxmem_complete_hw_reset(adev); /* - * done by acx_s_set_defaults for initial startup + * done by acx_set_defaults for initial startup */ acx_set_interrupt_mask(adev); @@ -2452,7 +2451,7 @@ static int acxmem_e_resume(struct platform_device *pdev) * suspend, and possibly be back in the network again already * :-) */ - /* - most settings updated in acxmem_s_up() */ + /* - most settings updated in acx_up() */ if (ACX_STATE_IFACE_UP & adev->dev_state_mask) { adev->set_mask = GETSET_ALL; acx_update_card_settings(adev); diff --git a/merge.c b/merge.c index c4bb9a1..e4808de 100644 --- a/merge.c +++ b/merge.c @@ -104,7 +104,7 @@ none: } /* - * modified from acxmem_s_upload_radio, and wrapped below + * modified from acxmem_upload_radio, and wrapped below */ static int acx_upload_radio(acx_device_t *adev, char *filename) { diff --git a/pci.c b/pci.c index 991add6..43fab72 100644 --- a/pci.c +++ b/pci.c @@ -133,17 +133,6 @@ static void vlynq_remove(struct vlynq_device *vdev); #include "inlines.h" -/* ----- */ - -/* - * acxpci_s_create_rx_host_desc_queue - * - * the whole size of a data buffer (header plus data body) - * plus 32 bytes safety offset at the end - */ - - -/* static inline */ void acxpci_free_coherent(struct pci_dev *hwdev, size_t size, void *vaddr, dma_addr_t dma_handle) { @@ -162,7 +151,7 @@ void acxpci_free_coherent(struct pci_dev *hwdev, size_t size, */ /* - * acxpci_s_issue_cmd_timeo + * acxpci_issue_cmd_timeo_debug * * Sends command to fw, extract result * @@ -374,7 +363,7 @@ acxpci_issue_cmd_timeo_debug(acx_device_t * adev, unsigned cmd, /* - * acxpci_l_reset_mac + * acxpci_reset_mac * * MAC will be reset * Call context: reset_dev @@ -527,7 +516,7 @@ int acxpci_proc_diag_output(struct seq_file *file, acx_device_t *adev) */ /* - * acxpci_l_alloc_tx + * acxpci_alloc_tx * Actually returns a txdesc_t* ptr * * FIXME: in case of fragments, should allocate multiple descrs after @@ -981,7 +970,7 @@ acx100pci_ioctl_set_phy_amp_bias(struct net_device *ndev, */ /* - * acxpci_e_probe + * acxpci_probe * * Probe routine called when a PCI device w/ matching ID is found. * Here's the sequence: @@ -1193,7 +1182,7 @@ static int __devinit acxpci_probe(struct pci_dev *pdev, } log(L_IRQ | L_INIT, "using IRQ %d: OK\n", pdev->irq); - /* Acx irqs shall be off and are enabled later in acxpci_s_up */ + /* Acx irqs shall be off and are enabled later in acx_up */ acx_irq_disable(adev); /* to find crashes due to weird driver access @@ -1244,7 +1233,7 @@ static int __devinit acxpci_probe(struct pci_dev *pdev, acx_parse_configoption(adev, &co); acx_set_defaults(adev); // TODO OW may put this after acx_display_hardware_details(adev); - acx_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */ + acx_get_firmware_version(adev); /* needs to be after acx_init_mac() */ acx_display_hardware_details(adev); /* Register the card, AFTER everything else has been set up, @@ -1305,10 +1294,10 @@ fail_proc_register_entries: /* acxpci_read_eeprom_byte(adev, 0x05, &adev->eeprom_version) */ fail_read_eeprom_byte: - /* acx_s_init_mac(adev) */ + /* acx_init_mac(adev) */ fail_init_mac: - /* acxpci_s_reset_dev(adev) */ + /* acx_reset_dev(adev) */ fail_reset_dev: /* request_irq(adev->irq, acxpci_i_interrupt, IRQF_SHARED, KBUILD_MODNAME, */ @@ -1356,7 +1345,7 @@ done: /* - * acxpci_e_remove + * acxpci_remove * * Shut device down (if not hot unplugged) * and deallocate PCI resources for the acx chip. @@ -1487,7 +1476,7 @@ static int acxpci_e_suspend(struct pci_dev *pdev, pm_message_t state) acx_sem_lock(adev); ieee80211_unregister_hw(hw); /* this one cannot sleep */ - /* OW 20100603 FIXME acxpci_s_down(hw); */ + /* OW 20100603 FIXME acx_down(hw); */ /* down() does not set it to 0xffff, but here we really want that */ write_reg16(adev, IO_ACX_IRQ_MASK, 0xffff); write_reg16(adev, IO_ACX_FEMR, 0x0); @@ -1811,7 +1800,7 @@ static __devinit int vlynq_probe(struct vlynq_device *vdev, } log(L_IRQ | L_INIT, "using IRQ %d\n", adev->irq); - /* Acx irqs shall be off and are enabled later in acxpci_s_up */ + /* Acx irqs shall be off and are enabled later in acx_up */ acx_irq_disable(adev); /* to find crashes due to weird driver access @@ -1845,7 +1834,7 @@ static __devinit int vlynq_probe(struct vlynq_device *vdev, acx_parse_configoption(adev, &co); acx_set_defaults(adev); - acx_get_firmware_version(adev); /* needs to be after acx_s_init_mac() */ + acx_get_firmware_version(adev); /* needs to be after acx_init_mac() */ acx_display_hardware_details(adev); /* Register the card, AFTER everything else has been set up, diff --git a/usb.c b/usb.c index b50407f..f5b833e 100644 --- a/usb.c +++ b/usb.c @@ -165,7 +165,7 @@ int acxusb_read_phy_reg(acx_device_t * adev, u32 reg, u8 * charbuf) mem.addr = cpu_to_le16(reg); mem.type = cpu_to_le16(0x82); mem.len = cpu_to_le32(4); - acx_s_issue_cmd(adev, ACX1xx_CMD_MEM_READ, &mem, sizeof(mem)); + acx_issue_cmd(adev, ACX1xx_CMD_MEM_READ, &mem, sizeof(mem)); *charbuf = mem.data; log(L_DEBUG, "read radio PHY[0x%04X]=0x%02X\n", reg, *charbuf); */ @@ -490,7 +490,7 @@ acxusb_boot(struct usb_device *usbdev, int is_tnetw1450, int *radio_type) */ /* - * acxusb_s_issue_cmd_timeo + * acxusb_issue_cmd_timeo_debug * Excecutes a command in the command mailbox * * buffer = a pointer to the data. @@ -666,7 +666,7 @@ acxusb_issue_cmd_timeo_debug(acx_device_t * adev, */ /* - * acxusb_s_fill_configoption + * acxusb_fill_configoption * * temporary helper function to at least fill important cfgopt members with * useful replacement values until we figure out how one manages to fetch @@ -1054,7 +1054,7 @@ static void acxusb_complete_rx(struct urb *urb) } /* - * acxusb_l_poll_rx + * acxusb_poll_rx * This function (re)initiates a bulk-in USB transfer on a given urb */ static void acxusb_poll_rx(acx_device_t * adev, usb_rx_t * rx) @@ -1172,7 +1172,7 @@ static void acxusb_complete_tx(struct urb *urb) } /* - * acxusb_l_alloc_tx + * acxusb_alloc_tx * Actually returns a usb_tx_t* ptr */ tx_t *acxusb_alloc_tx(acx_device_t *adev) @@ -1219,13 +1219,14 @@ void *acxusb_get_txbuf(acx_device_t * adev, tx_t * tx_opaque) } /* - * acxusb_l_tx_data + * acxusb_tx_data * * Can be called from IRQ (rx -> (AP bridging or mgmt response) -> tx). * Can be called from acx_i_start_xmit (data frames from net core). */ void acxusb_tx_data(acx_device_t *adev, tx_t *tx_opaque, int wlanpkt_len, - struct ieee80211_tx_info *ieeectl, struct sk_buff *skb) { + struct ieee80211_tx_info *ieeectl, struct sk_buff *skb) +{ struct usb_device *usbdev; struct urb *txurb; usb_tx_t *tx; @@ -1396,7 +1397,7 @@ void acxusb_irq_work(struct work_struct *work) /* - * acxusb_e_start() + * acxusb_op_start() * This function is called when the user sets up the network interface. * It initializes a management timer, sets up the USB card and starts * the network tx queue and USB receive. @@ -1430,7 +1431,7 @@ static int acxusb_op_start(struct ieee80211_hw *hw) adev->mgmt_timer.function = acx_timer; adev->mgmt_timer.data = (unsigned long)adev; - /* acx_s_start needs it */ + /* acx_start needs it */ SET_BIT(adev->dev_state_mask, ACX_STATE_IFACE_UP); acx_start(adev); @@ -1447,7 +1448,7 @@ static int acxusb_op_start(struct ieee80211_hw *hw) } /* - * acxusb_e_stop() + * acxusb_op_stop() * * This function stops the network functionality of the interface (invoked * when the user calls ifconfig <wlan> down). The tx queue is halted and @@ -1539,7 +1540,7 @@ static const struct ieee80211_ops acxusb_hw_ops = { */ /* - * acxusb_e_probe() + * acxusb_probe() * * This function is invoked by the kernel's USB core whenever a new device is * attached to the system or the module is loaded. It is presented a usb_device @@ -1828,7 +1829,7 @@ acxusb_probe(struct usb_interface *intf, const struct usb_device_id *devID) } /* - * acxusb_e_disconnect() + * acxusb_disconnect() * * This function is invoked whenever the user pulls the plug from the USB * device or the module is removed from the kernel. In these cases, the -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-20 18:40:36
|
Signed-off-by: Jim Cromie <jim...@gm...> --- merge.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/merge.c b/merge.c index c73f3d9..c4bb9a1 100644 --- a/merge.c +++ b/merge.c @@ -704,22 +704,22 @@ out: void acx_free_desc_queues(acx_device_t *adev) { -#define ACX_FREE_QUEUE(adev, size, ptr, phyaddr) \ - if (ptr) { \ - if (IS_PCI(adev)) \ +#define ACX_FREE_QUEUE(adev, size, ptr, phyaddr) \ + if (ptr) { \ + if (IS_PCI(adev)) \ acxpci_free_coherent(NULL, size, ptr, phyaddr); \ - else \ - kfree(ptr); \ - ptr = NULL; \ - size = 0; \ + else \ + kfree(ptr); \ + ptr = NULL; \ + size = 0; \ } #ifndef ACX_FREE_QUEUES -#define ACX_FREE_QUEUES(adev, _dir_) \ - ACX_FREE_QUEUE(adev, adev->_dir_.host.size, \ - adev->_dir_.host.start, adev->_dir_.host.phy); \ - ACX_FREE_QUEUE(adev, adev->_dir_.buf.size, \ - adev->_dir_.buf.start, adev->_dir_.buf.phy); +#define ACX_FREE_QUEUES(adev, _dir_) \ + ACX_FREE_QUEUE(adev, adev->_dir_.host.size, \ + adev->_dir_.host.start, adev->_dir_.host.phy); \ + ACX_FREE_QUEUE(adev, adev->_dir_.buf.size, \ + adev->_dir_.buf.start, adev->_dir_.buf.phy) #endif // ACX_FREE_QUEUES FN_ENTER; -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-20 18:40:35
|
Fix lifecycle issues by dropping acx_proc_(un)?register_entries() from debugfs.c. Leave procfs lifecycle as is, whether or not its correct, is is independent. - drop debugfs.c:acx_proc_(un)?register_entries() - add empty acx_proc_exit() call and function (to conform to convention) - move acx_proc_(show|write)_funcs[] after funcs they reference - drop fn-protos not needed after *_funcs[] move - consolidate CONFIG_DEBUG_FS, CONFIG_PROC_FS, etc #ifdefs - in acx_funcs.h, use DECL_OR_STUB for acx_proc_(un)?register_entries() Signed-off-by: Jim Cromie <jim...@gm...> --- acx_func.h | 20 +++++---- common.c | 146 ++++++++++++++++++++++++------------------------------------- debugfs.c | 20 +-------- merge.h | 2 +- 4 files changed, 70 insertions(+), 118 deletions(-) diff --git a/acx_func.h b/acx_func.h index a6f12f0..fbad144 100644 --- a/acx_func.h +++ b/acx_func.h @@ -310,16 +310,18 @@ int acx_setup_modes(acx_device_t *adev); /* BOM Proc, Debug (Common) * ----- */ -#ifdef CONFIG_PROC_FS -int acx_proc_register_entries(struct ieee80211_hw *ieee); -int acx_proc_unregister_entries(struct ieee80211_hw *ieee); -#else -/* - static inline int - * - acx_proc_register_entries(const struct ieee80211_hw *ieee) { return OK; } - * - static inline int - * - acx_proc_unregister_entries(const struct ieee80211_hw *ieee) { return OK; } - */ + +#if defined CONFIG_PROC_FS && defined ACX_WANT_PROC_FILES_ANYWAY +# define PROC_ENTRIES #endif + +DECL_OR_STUB(PROC_ENTRIES, + int acx_proc_register_entries(struct ieee80211_hw *ieee), + { return 0; }) +DECL_OR_STUB(PROC_ENTRIES, + int acx_proc_unregister_entries(struct ieee80211_hw *ieee), + { return 0; }) + /* - * BOM Rx Path (Common) * ----- diff --git a/common.c b/common.c index 9b957f7..bf2279c 100644 --- a/common.c +++ b/common.c @@ -225,44 +225,6 @@ static void acx_update_ratevector(acx_device_t *adev); static void acx_s_update_80211_powersave_mode(acx_device_t *adev) #endif -/* Proc, Debug */ -#ifdef CONFIG_PROC_FS -static int acx_proc_show_diag(struct seq_file *file, void *v); -static ssize_t acx_proc_write_diag(struct file *file, - const char __user *buf, size_t count, - loff_t *ppos); -static int acx_proc_show_acx(struct seq_file *file, void *v); -static int acx_proc_show_eeprom(struct seq_file *file, void *v); -static int acx_proc_show_phy(struct seq_file *file, void *v); -static int acx_proc_show_debug(struct seq_file *file, void *v); -static ssize_t acx_proc_write_debug(struct file *file, - const char __user *buf, size_t count, - loff_t *ppos); -static int acx_proc_show_sensitivity(struct seq_file *file, void *v); -static ssize_t acx_proc_write_sensitivity(struct file *file, - const char __user *buf, - size_t count, loff_t *ppos); -static int acx_proc_show_tx_level(struct seq_file *file, void *v); -static ssize_t acx111_proc_write_tx_level(struct file *file, - const char __user *buf, - size_t count, loff_t *ppos); -static int acx_proc_show_reg_domain(struct seq_file *file, void *v); -static ssize_t acx_proc_write_reg_domain(struct file *file, - const char __user *buf, - size_t count, loff_t *ppos); -static int acx_proc_show_antenna(struct seq_file *file, void *v); -static ssize_t acx_proc_write_antenna(struct file *file, - const char __user *buf, size_t count, - loff_t *ppos); -/* - obsoleted by debugfs.c -static int acx_proc_open(struct inode *inode, struct file *file); -static void acx_proc_init(void); -int acx_proc_register_entries(struct ieee80211_hw *ieee); -int acx_proc_unregister_entries(struct ieee80211_hw *ieee); -*/ -#endif - /* Rx Path */ void acx_process_rxbuf(acx_device_t *adev, rxbuffer_t * rxbuf); static void acx_rx(acx_device_t *adev, rxbuffer_t *rxbuf); @@ -703,48 +665,6 @@ u16 acx_rate111_hwvalue_to_bitrate(u16 hw_value) return (bitrate); } -#if defined CONFIG_PROC_FS || defined CONFIG_PROC_FS -/* - * debugfs.c provides new interface to the "files", procfs interface - * is deprecated for new stuff. Keep PROC_FS facility for users with - * non-DEBUG_FS kernels, so keep handlers themselves here. - */ -#ifdef ACX_WANT_PROC_FILES_ANYWAY -/* obsoleted by debugfs.c */ -static const char *const proc_files[] = { - "info", "diag", "eeprom", "phy", "debug", - "sensitivity", "tx_level", "antenna", "reg_domain", -}; -static struct file_operations acx_e_proc_ops[ARRAY_SIZE(proc_files)]; -#endif /* ACX_WANT_PROC_FILES_ANYWAY */ - -acx_proc_show_t *const acx_proc_show_funcs[] = { - acx_proc_show_acx, - acx_proc_show_diag, - acx_proc_show_eeprom, - acx_proc_show_phy, - acx_proc_show_debug, - acx_proc_show_sensitivity, - acx_proc_show_tx_level, - acx_proc_show_antenna, - acx_proc_show_reg_domain, -}; - -acx_proc_write_t *const acx_proc_write_funcs[] = { - NULL, - acx_proc_write_diag, - NULL, - NULL, - acx_proc_write_debug, - acx_proc_write_sensitivity, - acx111_proc_write_tx_level, - acx_proc_write_antenna, - acx_proc_write_reg_domain, -}; -BUILD_BUG_DECL(SHOW, ARRAY_SIZE(acx_proc_show_funcs) - != ARRAY_SIZE(acx_proc_write_funcs)); - -#endif /* CONFIG_PROC_FS */ /* * BOM Locking @@ -4142,12 +4062,17 @@ static u8 acx_rate111to100(u16 r) } */ -/* - * BOM Proc, Debug - * ================================================== +/* ################################################## + * Proc, Debug: + * + * File read/write handlers for both procfs, debugfs. Procfs is + * deprecated for new files, so proc-files are disabled by default; + * ACX_WANT_PROC_FILES_ANYWAY enables them. Debugfs is enabled, it + * can be disabled by ACX_NO_DEBUG_FILES. */ -#if defined(CONFIG_PROC_FS) || defined(CONFIG_DEBUGC_FS) +#if (defined CONFIG_PROC_FS && defined ACX_WANT_PROC_FILES_ANYWAY) \ + || (defined CONFIG_DEBUG_FS && !defined ACX_NO_DEBUG_FILES) static int acx_proc_show_diag(struct seq_file *file, void *v) { @@ -4886,7 +4811,6 @@ out: return ret; } - static int acx_proc_show_antenna(struct seq_file *file, void *v) { acx_device_t *adev = (acx_device_t *) file->private; @@ -4941,7 +4865,45 @@ out: return ret; } -#if defined CONFIG_PROC_FS && defined ACX_WANT_PROC_FILES_ANYWAY +acx_proc_show_t *const acx_proc_show_funcs[] = { + acx_proc_show_acx, + acx_proc_show_diag, + acx_proc_show_eeprom, + acx_proc_show_phy, + acx_proc_show_debug, + acx_proc_show_sensitivity, + acx_proc_show_tx_level, + acx_proc_show_antenna, + acx_proc_show_reg_domain, +}; + +acx_proc_write_t *const acx_proc_write_funcs[] = { + NULL, + acx_proc_write_diag, + NULL, + NULL, + acx_proc_write_debug, + acx_proc_write_sensitivity, + acx111_proc_write_tx_level, + acx_proc_write_antenna, + acx_proc_write_reg_domain, +}; +BUILD_BUG_DECL(acx_proc_show_funcs__VS__acx_proc_write_funcs, + ARRAY_SIZE(acx_proc_show_funcs) != ARRAY_SIZE(acx_proc_write_funcs)); + + +#if (defined CONFIG_PROC_FS && defined ACX_WANT_PROC_FILES_ANYWAY) +/* + * procfs has been explicitly enabled + */ +static const char *const proc_files[] = { + "info", "diag", "eeprom", "phy", "debug", + "sensitivity", "tx_level", "antenna", "reg_domain", +}; +BUILD_BUG_DECL(acx_proc_show_funcs__VS__proc_files, + ARRAY_SIZE(acx_proc_show_funcs) != ARRAY_SIZE(proc_files)); + +static struct file_operations acx_e_proc_ops[ARRAY_SIZE(proc_files)]; static int acx_proc_open(struct inode *inode, struct file *file) { @@ -5045,11 +5007,14 @@ int acx_proc_unregister_entries(struct ieee80211_hw *hw) FN_EXIT0; return OK; } -#else /* ACX_WANT_PROC_FILES_ANYWAY */ -static void acx_proc_init(void) { } /* stub */ -#endif /* ACX_WANT_PROC_FILES_ANYWAY */ +#else +static inline void acx_proc_init(void) {} + +#endif /* ACX_WANT_PROC_FILES_ANYWAY */ +#endif /* defined(CONFIG_PROC_FS) || defined(CONFIG_DEBUG_FS) */ -#endif /* defined(CONFIG_PROC_FS) || defined(CONFIG_DEBUGC_FS) */ +/* should have a real cleanup func */ +static inline void acx_proc_exit(void) {} /* * BOM Rx Path @@ -6893,6 +6858,7 @@ static void __exit acx_cleanup_module(void) { /* TODO Check, that interface isn't still up */ acx_debugfs_exit(); + acx_proc_exit(); acxpci_cleanup_module(); acxusb_cleanup_module(); diff --git a/debugfs.c b/debugfs.c index c3012ce..89fa2e1 100644 --- a/debugfs.c +++ b/debugfs.c @@ -2,7 +2,7 @@ * debugfs API to rest of driver is prototyped in merge.h, including * the stubs. */ -#if defined CONFIG_DEBUG_FS && !defined ACX_NO_DEBUG_FS +#if defined CONFIG_DEBUG_FS && !defined ACX_NO_DEBUG_FILES #define pr_fmt(fmt) "acx.%s: " fmt, __func__ @@ -169,22 +169,6 @@ void acx_debugfs_remove_adev(struct acx_device *adev) adev->debugfs_dir = NULL; } -/* compat funcs, also address lifecycle issues */ -int acx_proc_register_entries(struct ieee80211_hw *hw) -{ - acx_device_t *adev = ieee2adev(hw); - pr_info("compat wrapper\n"); - return acx_debugfs_add_adev(adev); -} - -int acx_proc_unregister_entries(struct ieee80211_hw *hw) -{ - acx_device_t *adev = ieee2adev(hw); - pr_info("compat wrapper\n"); - acx_debugfs_remove_adev(adev); - return 0; -} - int __init acx_debugfs_init(void) { acx_dbgfs_dir = debugfs_create_dir(KBUILD_MODNAME, NULL); @@ -199,4 +183,4 @@ void __exit acx_debugfs_exit(void) debugfs_remove_recursive(acx_dbgfs_dir); } -#endif /* CONFIG_DEBUG_FS */ +#endif /* CONFIG_DEBUG_FS && ! ACX_NO_DEBUG_FILES */ diff --git a/merge.h b/merge.h index 4f30bad..6fdac68 100644 --- a/merge.h +++ b/merge.h @@ -15,7 +15,7 @@ extern acx_proc_show_t *const acx_proc_show_funcs[]; extern acx_proc_write_t *const acx_proc_write_funcs[]; /* debugfs.c API used by common.c */ -#if defined CONFIG_DEBUG_FS && !defined ACX_NO_DEBUG_FS +#if defined CONFIG_DEBUG_FS && !defined ACX_NO_DEBUG_FILES int acx_debugfs_add_adev(struct acx_device *adev); void acx_debugfs_remove_adev(struct acx_device *adev); int __init acx_debugfs_init(void); -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-20 18:40:34
|
Signed-off-by: Jim Cromie <jim...@gm...> --- inlines.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/inlines.h b/inlines.h index 868f20e..ead3ae7 100644 --- a/inlines.h +++ b/inlines.h @@ -66,11 +66,15 @@ #define acxmem_lock_flags unsigned long flags = 0 #define acxmem_lock() \ if (IS_MEM(adev)) \ - spin_lock_irqsave(&adev->spinlock, flags) - -#define acxmem_unlock() \ - if (IS_MEM(adev)) \ - spin_unlock_irqrestore(&adev->spinlock, flags) + spin_lock_irqsave(&adev->spinlock, flags); \ + else \ + __acquire(&adev->spinlock) + +#define acxmem_unlock() \ + if (IS_MEM(adev)) \ + spin_unlock_irqrestore(&adev->spinlock, flags); \ + else \ + __release(&adev->spinlock) /* Endianess: read[lw], write[lw] do little-endian conversion internally */ #define acx_readl(v) readl((v)) -- 1.7.10.1.487.ga3935e6 |
From: Oliver W. <oli...@ol...> - 2012-05-19 19:30:57
|
Hi Jim, Ok, Thanks again! I'll check them soon. Just for info, the regarding the remaining sparse warnings, those were actually already there also before the patch (at least in my runs). Best Regards, Oliver On 05/19/2012 09:37 AM, Jim Cromie wrote: > Hi Oliver, Larry, > > Another batch: > > 1- revisit debugfs.c typecasts again. I used size_t, since its an > integer type (like fidx), and changes size with platform (like > uintptr_t) > > 2- corrects broken patch from previous batch > 3- fixes incomplete patch which Oliver had to fix up for 2.6.32-3 > hopefully this finishes it. > > 4- candy > 5- DECL_OR_STUB reduces double prototypes > > 10- I think acxpci-upload-fw has some cruft that could be removed, > after you (Oliver) fixed the separate firmware loading in > _acx_upload_fw, needed by mem > > 0001-debugfs.c-fix-types-warnings.patch > 0002-common.c-set-debug-flags-by-symbolic-names.patch > 0003-abstract-ieee80211_VIF-changes-in-acx_op_-add-remove.patch > 0004-common.c-replace-if-then-else-with-min-in-switch-cas.patch > 0005-add-DECL_OR_STUB-macro-to-acx.h-use-it-in-merge.h.patch > 0006-pci.h-drop-acxpci_upload_fw-prototypes.patch > 0007-drop-STATick-no-longer-needed.patch > 0008-cleanup-ifdefs-in-common.c-init-exit-funcs.patch > 0009-merge.c-make-acx_process_rxdesc-static.patch > 0010-cleanup-upload_fw.patch > 0011-add-MACSTR_SIZE.patch > 0012-hide-acx_op_tx-iface-change-in-acx_compat.h.patch > 0013-cleanup-debugfs.c-fn-protos.patch > 0014-scripts-wifi-probe.rc-loads-wifi-probe.prefs.patch > > acx-mac80211$ git diff --stat master > acx.h | 61 ++++++++++++++++++++++++++- > acx_compat.h | 32 +++++++++++--- > acx_func.h | 1 + > acx_struct_dev.h | 2 +- > common.c | 113 ++++++++++++++++---------------------------------- > debugfs.c | 31 ++++++-------- > mem.c | 27 ++++++------ > mem.h | 3 -- > merge.c | 10 ++--- > merge.h | 74 ++++++++++++++++----------------- > pci.c | 88 +-------------------------------------- > pci.h | 16 ++++--- > scripts/wifi-probe.rc | 19 ++++++++- > usb.c | 4 +- > > > > Other Items: > > Im certain that debugfs files livecycle is not quite correct. In > addition to expected /dbg/acx_mac80211/phyX, Im seeing /dbg/phyX show > up also (on ifup I think), and theyre not going away on ifdown. > > I cleaned up PROC_FS vs DEBUG_FS a bit, but theres more to be done. > EXTRA_CFLAGS:= -g -DACX_WANT_PROC_FILES_ANYWAY \ breaks currently. > I think this one simplifies once lifecycle issues are fixed. > > your __acquire/__release patch seems to fix sparse complaints. > Of course, its now thowing new ones. > > CHECK /home/jimc/projects/lx/acx-mac80211/merge.c > merge.c:463:48: warning: cast removes address space of expression > merge.c:563:20: warning: cast removes address space of expression > merge.c:1618:32: warning: incorrect type in assignment (different address spaces) > merge.c:1618:32: expected unsigned char [noderef] [usertype] <asn:2>*[usertype] cmd_area > merge.c:1618:32: got unsigned char [usertype] *<noident> > merge.c:1619:33: warning: incorrect type in assignment (different address spaces) > merge.c:1619:33: expected unsigned char [noderef] [usertype] <asn:2>*[usertype] info_area > merge.c:1619:33: got unsigned char [usertype] *<noident> > interrupt-masks.h:10:5: warning: symbol 'interrupt_masks' was not declared. Should it be static? > interrupt-masks.h:99:12: warning: symbol 'devtype_names' was not declared. Should it be static? > interrupt-masks.h:100:12: warning: symbol 'chiptype_names' was not declared. Should it be static? > interrupt-masks.h:109:29: warning: symbol 'interrupt_descs' was not declared. Should it be static? > interrupt-masks.h:165:6: warning: symbol 'interrupt_show_flags' was not declared. Should it be static? > include/linux/spinlock.h:340:9: warning: context imbalance in 'acx_reset_dev' - unexpected unlock > interrupt-masks.h:33:25: warning: cast truncates bits from constant value (ffff10fc becomes 10fc) > CHECK /home/jimc/projects/lx/acx-mac80211/debugfs.c > > > Im mildly concerned about playing with lock *hooks* > > linux-2.6$ more Documentation/lockstat.txt > > LOCK STATISTICS > > <ascii art> > > lock, unlock - the regular lock functions > __* - the hooks > <> - states > > With these hooks we provide the following statistics: > > con-bounces - number of lock contention that involved x-cpu data > contentions - number of lock acquisitions that had to wait > wait time min - shortest (non-0) time we ever had to wait for a lock > max - longest time we ever had to wait for a lock > total - total time we spend waiting on this lock > acq-bounces - number of lock acquisitions that involved x-cpu data > acquisitions - number of times we took the lock > hold time min - shortest (non-0) time we ever held the lock > max - longest time we ever held the lock > total - total time this lock was held > > > I just rebuilt my kernels with CONFIG_LOCK_STAT, to see if theres > anything surprising in there, will try driver before/after the patch, > idle/under-load, and let you know what I see. > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Acx100-devel mailing list > Acx...@li... > https://lists.sourceforge.net/lists/listinfo/acx100-devel > |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:28
|
Load preferences from user-provided file, to override defaults in script (which are for my setup, and wont help anyone else). Doing much more with loading options is overkill (creeping featurism), as user can always dot in new settings for another test scenario. Signed-off-by: Jim Cromie <jim...@gm...> --- scripts/wifi-probe.rc | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/scripts/wifi-probe.rc b/scripts/wifi-probe.rc index 995f10e..994b3db 100644 --- a/scripts/wifi-probe.rc +++ b/scripts/wifi-probe.rc @@ -4,12 +4,20 @@ devs="wlan0 wlan1" # I have 2 cards drvname="acx" # 1st driver (rtl8180) doesnt log logdir=~/wifi-test-data # write files here, must exist -apmac=00:11:22:33:44:55 +apmac=00:14:d1:e8:65:0a chan=11 -macs="00:11:22:33:44:55 00:AA:BB:CC:DD:EE 00:1A:2B:3C:4D:5E" +macs="00:18:DE:06:B2:0C 00:30:BD:4D:E2:47 00:18:4D:24:B3:FA" iperfsvrs="192.168.10.127 192.168.10.128" iperfargs="-t30 -i5" others="eth0 wlan0" +dbgfs="/dbg" + +for f in ~/wifi-probe.prefs ../wifi-probe.prefs ./wifi-probe.prefs ; do + if [ -f $f ] ; then + echo loading $f + . $f + fi +done wifi-help () { echo @@ -29,6 +37,8 @@ echo " iperfsvrs: $iperfsvrs # iperf server addresses" echo " iperfargs: $iperfargs" echo " others: $others # ifdown these in wifi-ent" echo +echo "you can set these permanently in ./wifi-probe.prefs" +echo } echo wifi-help for info @@ -124,5 +134,10 @@ wifi-save () { svdir=`modinfo acx-mac80211 | grep -E ^version: | cut -c17-` mkdir -p $svdir mv iw* ifconfig* dmesg e_n_a fish*dump iperf-* ping-* traceroute-* $svdir + cp -r $dbgfs/ieee80211 $svdir + cp -r $dbgfs/acx_mac80211 $svdir } +# shorthands, for: cat $fdebug; echo "" > $fdebug, etc +fdebug=/sys/module/acx_mac80211/parameters/debug +fdebugflags=/sys/module/acx_mac80211/parameters/debugflags -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:27
|
Drop redundant fn-protos, rely only on those at top of merge.h Modify #ifdef ACX_WANT_PROC_FILES_ANYWAY, add CONFIG_PROC_FS, Modify #ifdef CONFIG_DEBUG_FS, add !ACX_NO_DEBUG_FS, to allow suppression of debug files, mostly to broaden range of possible configs, and to allow testing them. Signed-off-by: Jim Cromie <jim...@gm...> --- common.c | 7 +------ debugfs.c | 15 +++++---------- merge.h | 4 +--- 3 files changed, 7 insertions(+), 19 deletions(-) diff --git a/common.c b/common.c index ce51d8d..9b957f7 100644 --- a/common.c +++ b/common.c @@ -4941,7 +4941,7 @@ out: return ret; } -#ifdef ACX_WANT_PROC_FILES_ANYWAY +#if defined CONFIG_PROC_FS && defined ACX_WANT_PROC_FILES_ANYWAY static int acx_proc_open(struct inode *inode, struct file *file) { @@ -6235,8 +6235,6 @@ end: * BOM Mac80211 Ops * ================================================== */ -int acx_debugfs_add_adev(struct acx_device *adev); -void acx_debugfs_remove_adev(struct acx_device *adev); int acx_op_add_interface(struct ieee80211_hw *ieee, struct ieee80211_VIF *vif) { @@ -6853,8 +6851,6 @@ void great_inquisitor(acx_device_t * adev) * BOM Driver, Module * ================================================== */ -int __init acx_debugfs_init(void); -void __init acx_debugfs_exit(void); static int __init acx_init_module(void) { @@ -6893,7 +6889,6 @@ static int __init acx_init_module(void) return 0; } -void acx_debugfs_exit(void); static void __exit acx_cleanup_module(void) { /* TODO Check, that interface isn't still up */ diff --git a/debugfs.c b/debugfs.c index e47757b..c3012ce 100644 --- a/debugfs.c +++ b/debugfs.c @@ -1,13 +1,8 @@ - -#ifndef CONFIG_DEBUG_FS - -/* API: not static inline - must be available for linking */ -int __init acx_debugfs_init(void) { return 0; } -void __exit acx_debugfs_exit(void) {} -int acx_debugfs_add_adev (struct acx_device *adev) { return 0; } -void acx_debugfs_remove_adev(struct acx_device *adev) { return 0; } - -#else /* CONFIG_DEBUG_FS */ +/* + * debugfs API to rest of driver is prototyped in merge.h, including + * the stubs. + */ +#if defined CONFIG_DEBUG_FS && !defined ACX_NO_DEBUG_FS #define pr_fmt(fmt) "acx.%s: " fmt, __func__ diff --git a/merge.h b/merge.h index 337aa46..4f30bad 100644 --- a/merge.h +++ b/merge.h @@ -15,16 +15,14 @@ extern acx_proc_show_t *const acx_proc_show_funcs[]; extern acx_proc_write_t *const acx_proc_write_funcs[]; /* debugfs.c API used by common.c */ -#if defined CONFIG_DEBUG_FS +#if defined CONFIG_DEBUG_FS && !defined ACX_NO_DEBUG_FS int acx_debugfs_add_adev(struct acx_device *adev); void acx_debugfs_remove_adev(struct acx_device *adev); -int acx_proc_register_entries(struct ieee80211_hw *hw); int __init acx_debugfs_init(void); void __exit acx_debugfs_exit(void); #else static int acx_debugfs_add_adev(struct acx_device *adev) { return 0; } static void acx_debugfs_remove_adev(struct acx_device *adev) { } -static int acx_proc_register_entries(struct ieee80211_hw *hw) { return 0; } static int __init acx_debugfs_init(void) { return 0; } static void __exit acx_debugfs_exit(void) { } #endif /* defined CONFIG_DEBUG_FS */ -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:25
|
Add 2 macros: OP_TX_RET_TYPE, OP_TX_RET_OK to hide acx_op_tx() interface changes inside acx_compat.h Signed-off-by: Jim Cromie <jim...@gm...> --- acx_compat.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/acx_compat.h b/acx_compat.h index 3caacba..dba1040 100644 --- a/acx_compat.h +++ b/acx_compat.h @@ -46,3 +46,14 @@ do { \ # define VIF_vif(vif) vif # define VIF_addr(vif) vif->addr #endif + +/* hide some of the version dependent function signature changes in + * struct ieee80211_ops; starting with acx_op_tx(). + */ +#if CONFIG_ACX_MAC80211_VERSION < KERNEL_VERSION(2, 6, 39) +# define OP_TX_RET_TYPE int +# define OP_TX_RET_OK NETDEV_TX_OK +#else +# define OP_TX_RET_TYPE void +# define OP_TX_RET_OK /* void */ +#endif -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:24
|
Signed-off-by: Jim Cromie <jim...@gm...> --- acx_func.h | 1 + common.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/acx_func.h b/acx_func.h index 1247f52..a6f12f0 100644 --- a/acx_func.h +++ b/acx_func.h @@ -491,6 +491,7 @@ static inline int mac_is_mcast(const u8 *mac) } #define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X" +#define MACSTR_SIZE 3*6 /* 2 chars plus ':' per byte, trailing ':' is \0 */ #define MAC(bytevector) \ ((unsigned char *)bytevector)[0], \ ((unsigned char *)bytevector)[1], \ diff --git a/common.c b/common.c index ab4cec7..ce51d8d 100644 --- a/common.c +++ b/common.c @@ -6244,7 +6244,7 @@ int acx_op_add_interface(struct ieee80211_hw *ieee, struct ieee80211_VIF *vif) int err = -EOPNOTSUPP; u8 *mac_vif; - char mac[] = MACSTR; // approximate max length + char mac[MACSTR_SIZE]; int vif_type; @@ -6320,7 +6320,7 @@ void acx_op_remove_interface(struct ieee80211_hw *hw, struct ieee80211_VIF *vif) { acx_device_t *adev = ieee2adev(hw); - char mac[] = MACSTR; // approximate max length + char mac[MACSTR_SIZE]; u8 *mac_vif; FN_ENTER; -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:23
|
- drop #if0d pci.c:acxpci_upload_fw() - make merge.c:acxpci_upload_fw() static - make merge.c:acxmem_upload_fw() static Signed-off-by: Jim Cromie <jim...@gm...> --- merge.c | 4 +-- pci.c | 86 ----------------------------------------------------------------- 2 files changed, 2 insertions(+), 88 deletions(-) diff --git a/merge.c b/merge.c index 228a9c4..c73f3d9 100644 --- a/merge.c +++ b/merge.c @@ -1414,7 +1414,7 @@ static int _acx_upload_fw(acx_device_t *adev, char *filename) return res; } -int acxmem_upload_fw(acx_device_t *adev) +static int acxmem_upload_fw(acx_device_t *adev) { char *filename = "WLANGEN.BIN"; int rc; @@ -1427,7 +1427,7 @@ int acxmem_upload_fw(acx_device_t *adev) return rc; } -int acxpci_upload_fw(acx_device_t *adev) +static int acxpci_upload_fw(acx_device_t *adev) { char filename[sizeof("tiacx1NNcNN")]; int rc; diff --git a/pci.c b/pci.c index 2e852d4..991add6 100644 --- a/pci.c +++ b/pci.c @@ -157,92 +157,6 @@ void acxpci_free_coherent(struct pci_dev *hwdev, size_t size, */ /* - * acxpci_s_upload_fw - * - * Called from acx_reset_dev - * - * Origin: Derived from FW dissection - */ -/* static */ -#if 0 // acxpci_upload_fw() -int acxpci_upload_fw(acx_device_t *adev) -{ - firmware_image_t *fw_image = NULL; - int res = NOT_OK; - int try; - u32 file_size; - char filename[sizeof("tiacx1NNcNN")]; - - FN_ENTER; - - /* print exact chipset and radio ID to make sure people really - * get a clue on which files exactly they need to provide. - * Firmware loading is a frequent end-user PITA with these - * chipsets. - */ - pr_acx("need firmware for acx1%02d chipset with radio ID %02X\n" - "Please provide via firmware hotplug:\n" - "either combined firmware (single file named 'tiacx1%02dc%02X')\n" - "or two files (base firmware file 'tiacx1%02d' " - "+ radio fw 'tiacx1%02dr%02X')\n", - IS_ACX111(adev)*11, adev->radio_type, - IS_ACX111(adev)*11, adev->radio_type, - IS_ACX111(adev)*11, - IS_ACX111(adev)*11, adev->radio_type - ); - - /* print exact chipset and radio ID to make sure people really - * get a clue on which files exactly they are supposed to - * provide, since firmware loading is the biggest enduser PITA - * with these chipsets. Not printing radio ID in 0xHEX in - * order to not confuse them into wrong file naming */ - pr_acx("need to load firmware for acx1%02d chipset with radio ID %02x, please provide via firmware hotplug:\n" - "acx: either one file only (<c>ombined firmware image file, radio-specific) or two files (radio-less base image file *plus* separate <r>adio-specific extension file)\n", - IS_ACX111(adev)*11, adev->radio_type); - - /* Try combined, then main image */ - adev->need_radio_fw = 0; - snprintf(filename, sizeof(filename), "tiacx1%02dc%02X", - IS_ACX111(adev) * 11, adev->radio_type); - - fw_image = acx_read_fw(adev->bus_dev, filename, &file_size); - if (!fw_image) { - adev->need_radio_fw = 1; - filename[sizeof("tiacx1NN") - 1] = '\0'; - fw_image = - acx_read_fw(adev->bus_dev, filename, &file_size); - if (!fw_image) { - FN_EXIT1(NOT_OK); - return NOT_OK; - } - } - - for (try = 1; try <= 5; try++) { - res = acx_write_fw(adev, fw_image, 0); - log(L_DEBUG | L_INIT, "acx_write_fw (main/combined): %d\n", res); - if (OK == res) { - res = acx_validate_fw(adev, fw_image, 0); - log(L_DEBUG | L_INIT, "acx_validate_fw " - "(main/combined): %d\n", res); - } - - if (OK == res) { - SET_BIT(adev->dev_state_mask, ACX_STATE_FW_LOADED); - break; - } - pr_acx("firmware upload attempt #%d FAILED, " - "retrying...\n", try); - acx_mwait(1000); /* better wait for a while... */ - } - - vfree(fw_image); - - FN_EXIT1(res); - return res; -} -#endif - -/* * BOM CMDs (Control Path) * ================================================== */ -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:22
|
Create a better version of decl_or_stub macro added previously to merge.h. This version accepts an arg which chooses whether result expands to a declaration (of a function defined elsewhere), or a static inline stub function. Its purpose is to avoid double entries in 2 legs of a big #if/#else/#endif. Signed-off-by: Jim Cromie <jim...@gm...> --- acx.h | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ merge.h | 70 ++++++++++++++++++++++++++++++++--------------------------------- 2 files changed, 93 insertions(+), 36 deletions(-) diff --git a/acx.h b/acx.h index d96f123..6557cef 100644 --- a/acx.h +++ b/acx.h @@ -23,6 +23,65 @@ * #define CONFIG_PM 0 // in include/generated/autoconf.h */ +/* + DECL_OR_STUB(X, proto, stubret) macro: expands as either a + prototype declaring a function defined elsewhere, or a static + inline function stub. + + It reads like if (X) ? proto : stubret; + if X is true, expand as declaration matching the fn-defn elsewhere + if X is false, expand as a stub function, returning stubret. + + stubret: body of function used in stub expansion. + For void use { }, for int use { return 0; }, etc + + proto: full function prototype, excluding "static inline" which is + added in stub expansion. Ex: int foo(void), void bar(int). + + X: condition. if X is true, expansion is a declaration. + if X is NOTHING, expands as an static inline stub. + Note that defined(X) expands as 0 or 1, so cant be used directly. + + How It Works: + 4 macros; 3 xDECL_OR_STUB, and __unshift_A + 2nd assembles args: "proto;", "static inline proto subret" + 3rd selects one of them. + 1st is key: it concats symbol to "__unshift_". + If symbol is true, result is __unshift_<true>, it expands as empty, + If symbol NOTHING, result is __unshift_, which expands to add + another arg, shifting others, thus 4th macro selects decl, + not inline defn + + Usage: avoid direct use of defined(X) conditions, instead do: + #if (complex CPP expression) + # define X + #else + // dont even mention X, best just drop the #else + #endif + + Based upon: + commit 69349c2dc01c489eccaa4c472542c08e370c6d7e + Author: Paul Gortmaker <pau...@wi...> + Date: Thu Apr 12 19:46:32 2012 -0400 +*/ + +#define __unshift_1 /* if cat expands to this, no shift */ +#define __unshift_ 0, +/* if cat expands to this, unshift arg (ala perl) */ + +#define DECL_OR_STUB(_X_, proto, stubret) \ + _DECL_OR_STUB(_X_, proto, stubret) \ + +#define _DECL_OR_STUB(_X_, proto, stubret) \ + __DECL_OR_STUB(__unshift_##_X_, proto, stubret) + +#define __DECL_OR_STUB(arg1_or_empty, proto, stubret) \ + ___DECL_OR_STUB(arg1_or_empty proto; , static inline proto stubret) + +#define ___DECL_OR_STUB(__ignored, val, ...) val + + + #include "acx_config.h" #include "acx_struct_hw.h" #include "acx_struct_dev.h" diff --git a/merge.h b/merge.h index 296efdb..337aa46 100644 --- a/merge.h +++ b/merge.h @@ -2,6 +2,7 @@ #define _MERGE_H_ #include <linux/irq.h> +#include "acx.h" /* these 2 externs are defined in common.c (but we dont have a * common.h), so expose them here. Theyre used in debugfs.c @@ -29,142 +30,140 @@ static void __exit acx_debugfs_exit(void) { } #endif /* defined CONFIG_DEBUG_FS */ #if defined CONFIG_ACX_MAC80211_PCI || defined CONFIG_ACX_MAC80211_MEM -#define decl_or_stub(proto, stubret) proto; -#else -#define decl_or_stub(proto, stubret) static inline proto stubret +# define PCI_OR_MEM #endif -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_create_desc_queues(acx_device_t *adev, u32 tx_queue_start, u32 rx_queue_start), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int acx_create_hostdesc_queues(acx_device_t *adev), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_free_desc_queues(acx_device_t *adev), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int _acx_read_phy_reg(acx_device_t *adev, u32 reg, u8 *charbuf), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int _acx_write_phy_reg(acx_device_t *adev, u32 reg, u8 value), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_irq_enable(acx_device_t *adev), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_irq_disable(acx_device_t *adev), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int acx_read_eeprom_byte(acx_device_t *adev, u32 addr, u8 *charbuf), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, char *acx_proc_eeprom_output(int *length, acx_device_t *adev), { return (char*) NULL; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_up(struct ieee80211_hw *hw), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_set_interrupt_mask(acx_device_t *adev), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_show_card_eeprom_id(acx_device_t *adev), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, unsigned int acx_tx_clean_txdesc(acx_device_t *adev), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int acx_reset_dev(acx_device_t *adev), { return 0; } ) /* wrappers on acx_upload_radio(adev, filename */ -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int acxmem_upload_radio(acx_device_t *adev), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int acxpci_upload_radio(acx_device_t *adev), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acxmem_update_queue_indicator(acx_device_t *adev, int txqueue), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void _acx_tx_data(acx_device_t *adev, tx_t *tx_opaque, int len, struct ieee80211_tx_info *info, struct sk_buff *skb), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_irq_work(struct work_struct *work), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int acx_write_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int acx_validate_fw(acx_device_t *adev, const firmware_image_t *fw_image, u32 offset), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, u32 acx_read_cmd_type_status(acx_device_t *adev), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, int acx_op_start(struct ieee80211_hw *hw), { return 0; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_op_stop(struct ieee80211_hw *hw), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, irqreturn_t acx_interrupt(int irq, void *dev_id), { return (irqreturn_t) NULL; } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_delete_dma_regions(acx_device_t *adev), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_power_led(acx_device_t * adev, int enable), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_clean_txdesc_emergency(acx_device_t *adev), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_log_rxbuffer(const acx_device_t *adev), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void acx_log_txbuffer(acx_device_t *adev), { } ) -decl_or_stub( +DECL_OR_STUB ( PCI_OR_MEM, void *_acx_get_txbuf(acx_device_t * adev, tx_t * tx_opaque), { return (void*) NULL; } ) @@ -201,5 +200,4 @@ static inline txdesc_t* acx_advance_txdesc(acx_device_t *adev, #endif /* !(CONFIG_ACX_MAC80211_PCI || CONFIG_ACX_MAC80211_MEM) */ - #endif /* _MERGE_H_ */ -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:21
|
Signed-off-by: Jim Cromie <jim...@gm...> --- merge.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/merge.c b/merge.c index 3529390..228a9c4 100644 --- a/merge.c +++ b/merge.c @@ -2480,11 +2480,11 @@ int acxmem_proc_diag_output(struct seq_file *file, */ /* - * acxmem_l_process_rxdesc + * acx_process_rxdesc * - * Called directly and only from the IRQ handler + * Called from IRQ handlers (acx_irq_work, #if0d acxmem_interrupt) */ -void acx_process_rxdesc(acx_device_t *adev) +static void acx_process_rxdesc(acx_device_t *adev) { register rxhostdesc_t *hostdesc; register rxdesc_t *rxdesc = NULL; // silence uninit warning -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:20
|
drop ifdefs in common.c init & exit functions, rely on fn-stubs (add them to pci.h, other headers already have them. Move the pr-infos to the real bodies. Signed-off-by: Jim Cromie <jim...@gm...> --- common.c | 24 ++---------------------- mem.c | 1 + pci.c | 2 +- pci.h | 9 ++++++--- usb.c | 4 ++-- 5 files changed, 12 insertions(+), 28 deletions(-) diff --git a/common.c b/common.c index 8f57dbe..ab4cec7 100644 --- a/common.c +++ b/common.c @@ -6877,20 +6877,9 @@ static int __init acx_init_module(void) r1 = r2 = r3 = -EINVAL; -#if defined(CONFIG_ACX_MAC80211_PCI) - pr_info("built with CONFIG_ACX_MAC80211_PCI\n"); r1 = acxpci_init_module(); -#endif - -#if defined(CONFIG_ACX_MAC80211_USB) - pr_info("built with CONFIG_ACX_MAC80211_USB\n"); r2 = acxusb_init_module(); -#endif - -#if defined(CONFIG_ACX_MAC80211_MEM) - pr_info("built with CONFIG_ACX_MAC80211_MEM\n"); r3 = acxmem_init_module(); -#endif if (r3 && r2 && r1) { /* all three failed! */ pr_info("r1_pci=%i, r2_usb=%i, r3_mem=%i\n", r1, r2, r3); @@ -6910,18 +6899,9 @@ static void __exit acx_cleanup_module(void) /* TODO Check, that interface isn't still up */ acx_debugfs_exit(); -#if defined(CONFIG_ACX_MAC80211_PCI) acxpci_cleanup_module(); -#endif - -#if defined(CONFIG_ACX_MAC80211_USB) acxusb_cleanup_module(); -#endif - -#if defined(CONFIG_ACX_MAC80211_MEM) acxmem_cleanup_module(); -#endif - } /* @@ -6929,8 +6909,8 @@ static void __exit acx_cleanup_module(void) * ================================================== */ -module_init(acx_init_module) -module_exit(acx_cleanup_module) +module_init(acx_init_module); +module_exit(acx_cleanup_module); #if ACX_DEBUG diff --git a/mem.c b/mem.c index 3d71764..9a7d554 100644 --- a/mem.c +++ b/mem.c @@ -2495,6 +2495,7 @@ int __init acxmem_init_module(void) FN_ENTER; + pr_info("built with CONFIG_ACX_MAC80211_MEM\n"); #if (ACX_IO_WIDTH==32) pr_acx("compiled to use 32bit I/O access. " "I/O timing issues might occur, such as " diff --git a/pci.c b/pci.c index c6d5131..2e852d4 100644 --- a/pci.c +++ b/pci.c @@ -2100,7 +2100,7 @@ int __init acxpci_init_module(void) FN_ENTER; - printk(KERN_EMERG); + pr_info("built with CONFIG_ACX_MAC80211_PCI\n"); #if (ACX_IO_WIDTH==32) log(L_INIT, "compiled to use 32bit I/O access. " diff --git a/pci.h b/pci.h index dc41ea3..ee6f573 100644 --- a/pci.h +++ b/pci.h @@ -40,19 +40,22 @@ tx_t *acxpci_alloc_tx(acx_device_t *adev); * Driver, Module */ -int __init acxpci_init_module(void); -void __exit acxpci_cleanup_module(void); - u32 acxpci_read_cmd_type_status(acx_device_t *adev); void acxpci_write_cmd_type_status(acx_device_t *adev, u16 type, u16 status); #if defined(CONFIG_ACX_MAC80211_PCI) +int __init acxpci_init_module(void); +void __exit acxpci_cleanup_module(void); + void acxpci_reset_mac(acx_device_t *adev); #else /* !CONFIG_ACX_MAC80211_PCI */ +static inline int __init acxpci_init_module(void) { return 0; } +static inline void __exit acxpci_cleanup_module(void) { } + static inline void acxpci_reset_mac(acx_device_t *adev) {} #endif /* CONFIG_ACX_MAC80211_PCI */ diff --git a/usb.c b/usb.c index 0ab156c..b50407f 100644 --- a/usb.c +++ b/usb.c @@ -1905,8 +1905,8 @@ static struct usb_driver */ int __init acxusb_init_module(void) { - log(L_INIT, "USB module initialized, " - "probing for devices...\n"); + pr_info("built with CONFIG_ACX_MAC80211_USB\n"); + log(L_INIT, "USB module initialized, probing for devices...\n"); return usb_register(&acxusb_driver); } -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:20
|
In acx_get_packet_type_string(), add "*/UNKNOWN" strings to const arrays, and use min() to clamp the array index to it in assignements. This produces no real change in object size, but does reduce line count. Casts are slightly annoying, but needed to silence sparse. Signed-off-by: Jim Cromie <jim...@gm...> --- common.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/common.c b/common.c index ed143e4..8f57dbe 100644 --- a/common.c +++ b/common.c @@ -6789,16 +6789,17 @@ const char* acx_get_packet_type_string(u16 fc) "MGMT/AssocReq", "MGMT/AssocResp", "MGMT/ReassocReq", "MGMT/ReassocResp", "MGMT/ProbeReq", "MGMT/ProbeResp", "MGMT/UNKNOWN", "MGMT/UNKNOWN", "MGMT/Beacon", "MGMT/ATIM", - "MGMT/Disassoc", "MGMT/Authen", "MGMT/Deauthen" + "MGMT/Disassoc", "MGMT/Authen", "MGMT/Deauthen", + "MGMT/UNKNOWN" }; static const char * const ctl_arr[] = { "CTL/PSPoll", "CTL/RTS", "CTL/CTS", "CTL/Ack", "CTL/CFEnd", - "CTL/CFEndCFAck" + "CTL/CFEndCFAck", "CTL/UNKNOWN" }; static const char * const data_arr[] = { "DATA/DataOnly", "DATA/Data CFAck", "DATA/Data CFPoll", "DATA/Data CFAck/CFPoll", "DATA/Null", "DATA/CFAck", - "DATA/CFPoll", "DATA/CFAck/CFPoll" + "DATA/CFPoll", "DATA/CFAck/CFPoll", "DATA/UNKNOWN" }; const char *str; u8 fstype = (IEEE80211_FCTL_STYPE & fc) >> 4; @@ -6806,23 +6807,14 @@ const char* acx_get_packet_type_string(u16 fc) switch (IEEE80211_FCTL_FTYPE & fc) { case IEEE80211_FTYPE_MGMT: - if (fstype < ARRAY_SIZE(mgmt_arr)) - str = mgmt_arr[fstype]; - else - str = "MGMT/UNKNOWN"; + str = mgmt_arr[min((size_t)fstype, ARRAY_SIZE(mgmt_arr) - 1)]; break; case IEEE80211_FTYPE_CTL: ctl = fstype - 0x0a; - if (ctl < ARRAY_SIZE(ctl_arr)) - str = ctl_arr[ctl]; - else - str = "CTL/UNKNOWN"; + str = ctl_arr[min((size_t)ctl, ARRAY_SIZE(ctl_arr) - 1)]; break; case IEEE80211_FTYPE_DATA: - if (fstype < ARRAY_SIZE(data_arr)) - str = data_arr[fstype]; - else - str = "DATA/UNKNOWN"; + str = data_arr[min((size_t)fstype, ARRAY_SIZE(data_arr) - 1)]; break; default: str = "UNKNOWN"; -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:19
|
drop STATick macro from mem.h, pci.h, restore static on function prototypes and definitions, and remove it where its wrong. Also drop unused INLINE_IO in mem.c, and comment out acxmem_get_txhostdesc() prototype, now merged. Signed-off-by: Jim Cromie <jim...@gm...> --- mem.c | 26 +++++++++++++------------- mem.h | 3 --- pci.h | 3 --- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/mem.c b/mem.c index 76e69d4..3d71764 100644 --- a/mem.c +++ b/mem.c @@ -69,9 +69,7 @@ #include "acx.h" #include "merge.h" -#include "mem.h" // which has STATick defn - -#define INLINE_IO static inline +#include "mem.h" /* * BOM Config @@ -114,8 +112,8 @@ void acxmem_copy_from_slavemem(acx_device_t *adev, u8 *destination, u32 source, int count); static void acxmem_init_acx_txbuf(acx_device_t *adev); -txhostdesc_t *acxmem_get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc); -char acxmem_printable(char c); +// txhostdesc_t *acxmem_get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc); +static char acxmem_printable(char c); /* * BOM Defines, static vars, etc. @@ -748,7 +746,7 @@ static int acxmem_complete_hw_reset(acx_device_t *adev) * MAC will be reset * Call context: reset_dev */ -STATick void acxmem_reset_mac(acx_device_t *adev) +void acxmem_reset_mac(acx_device_t *adev) { int count; FN_ENTER; @@ -792,7 +790,7 @@ STATick void acxmem_reset_mac(acx_device_t *adev) ** FIXME: most likely needs refinement */ #if 0 // or mem.c:2019:2: error: implicit declaration of function 'ndev2adev' -STATick void acxmem_i_set_multicast_list(struct net_device *ndev) +static void acxmem_i_set_multicast_list(struct net_device *ndev) { acx_device_t *adev = ndev2adev(ndev); unsigned long flags; @@ -1299,7 +1297,8 @@ void acxmem_init_acx_txbuf2(acx_device_t *adev) } #endif -STATick txhostdesc_t* +#if 0 // acxmem_get_txhostdesc() +static txhostdesc_t* acxmem_get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc) { int index = (u8*) txdesc - (u8*) adev->tx.desc_start; @@ -1314,6 +1313,7 @@ acxmem_get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc) } return &adev->tx.host.txstart[index * 2]; } +#endif // acxmem_get_txhostdesc() /* OW TODO See if this is usable with mac80211 */ /*********************************************************************** @@ -1323,7 +1323,7 @@ acxmem_get_txhostdesc(acx_device_t *adev, txdesc_t* txdesc) */ #if 0 // or mem.c:3242:3: warning: passing argument 1 of 'acx_wake_queue' /* from incompatible pointer type [enabled by default] */ -STATick void acxmem_i_tx_timeout(struct net_device *ndev) +static void acxmem_i_tx_timeout(struct net_device *ndev) { acx_device_t *adev = ndev2adev(ndev); unsigned long flags; @@ -1397,7 +1397,7 @@ STATick void acxmem_i_tx_timeout(struct net_device *ndev) * --- */ #if 0 // or mem.c:3579:4: error: implicit declaration of function 'acxmem_log_unusual_irq' -STATick irqreturn_t acxmem_interrupt(int irq, void *dev_id) +static irqreturn_t acxmem_interrupt(int irq, void *dev_id) { acx_device_t *adev = dev_id; unsigned long flags; @@ -1613,14 +1613,14 @@ INLINE_IO int acxmem_adev_present(acx_device_t *adev) return acx_readl(adev->iobase) != 0xffffffff; } -STATick char acxmem_printable(char c) +static char acxmem_printable(char c) { return ((c >= 20) && (c < 127)) ? c : '.'; } /* OW TODO */ #if 0 // or mem.c:3695:42: error: 'acx_device_t' has no member named 'wstats' -STATick void update_link_quality_led(acx_device_t *adev) +static void update_link_quality_led(acx_device_t *adev) { int qual; @@ -2409,7 +2409,7 @@ static int acxmem_e_suspend(struct platform_device *pdev, return OK; } -STATick int acxmem_e_resume(struct platform_device *pdev) +static int acxmem_e_resume(struct platform_device *pdev) { struct ieee80211_hw *hw = (struct ieee80211_hw *) platform_get_drvdata(pdev); diff --git a/mem.h b/mem.h index b7872bc..9988dfd 100644 --- a/mem.h +++ b/mem.h @@ -9,9 +9,6 @@ #if defined(CONFIG_ACX_MAC80211_MEM) -#define STATick -/* ick: suppress static, let linker find fns in mem.o pci.o */ - #define DUMP_MEM_DEFINED 1 // to insure export of dump* fns too /* Logging */ diff --git a/pci.h b/pci.h index 8a71471..dc41ea3 100644 --- a/pci.h +++ b/pci.h @@ -6,9 +6,6 @@ * inside pci.c, thus reducing set of forward declarations needed there. */ -#define STATick /* ick - suppress static, and thus a raft of warnings - let linker find the fns in mem.o, pci.o */ - /* Logging */ void acxpci_free_coherent(struct pci_dev *hwdev, size_t size, -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:19
|
In acx_compat.h, add kernel-version dependent macros (2.6.34) which define ieee80211_VIF as ieee80211_vif or ieee80211_if_init_conf, and accessor macros for vif and addr fields. Use them to declutter acx_op_(add|remove)_interface(), and function bodies. Change include order in acx.h so that acx_compat.h can use CONFIG_ACX_MAC80211_VERSION defined in acx_func.h This reworks commit 8ebaf7dc, which was both bold and sloppy, and required a fixup commit cd12434adb. Hopefully I got it right this time. Signed-off-by: Jim Cromie <jim...@gm...> --- acx.h | 2 +- acx_compat.h | 21 +++++++++++++++------ common.c | 19 +++++-------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/acx.h b/acx.h index 5f764a8..d96f123 100644 --- a/acx.h +++ b/acx.h @@ -23,10 +23,10 @@ * #define CONFIG_PM 0 // in include/generated/autoconf.h */ -#include "acx_compat.h" #include "acx_config.h" #include "acx_struct_hw.h" #include "acx_struct_dev.h" #include "acx_func.h" +#include "acx_compat.h" #endif /* _ACX_H_ */ diff --git a/acx_compat.h b/acx_compat.h index b9f73b3..3caacba 100644 --- a/acx_compat.h +++ b/acx_compat.h @@ -29,11 +29,20 @@ do { \ #include <generated/utsrelease.h> #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 34) +#if CONFIG_ACX_MAC80211_VERSION < KERNEL_VERSION(2, 6, 34) /* - Unsure about this one, its rather unselective. - Done to fix up acx_op_add_interface(..) in main code, - leaning towards mainline. TBD -*/ -# define ieee80211_vif ieee80211_if_init_conf + * v2.6.34 added ieee80211_vif, and obsoleted ieee80211_if_init_conf. + * To declutter acx_op_(add|remove)_interface(..), define macros to + * hide this struct change, naming them close to new one. This is + * surely not a solution for every conceivable _vif situation (the new + * struct surely holds a different set of fields), but is sufficient + * here. + */ +# define ieee80211_VIF ieee80211_if_init_conf +# define VIF_vif(vif) vif->vif +# define VIF_addr(vif) vif->mac_addr +#else +# define ieee80211_VIF ieee80211_vif +# define VIF_vif(vif) vif +# define VIF_addr(vif) vif->addr #endif diff --git a/common.c b/common.c index 6d90d3f..ed143e4 100644 --- a/common.c +++ b/common.c @@ -6238,7 +6238,7 @@ end: int acx_debugfs_add_adev(struct acx_device *adev); void acx_debugfs_remove_adev(struct acx_device *adev); -int acx_op_add_interface(struct ieee80211_hw *ieee, struct ieee80211_vif *vif) +int acx_op_add_interface(struct ieee80211_hw *ieee, struct ieee80211_VIF *vif) { acx_device_t *adev = ieee2adev(ieee); int err = -EOPNOTSUPP; @@ -6261,13 +6261,8 @@ int acx_op_add_interface(struct ieee80211_hw *ieee, struct ieee80211_vif *vif) goto out_unlock; adev->vif_operating = 1; -#if CONFIG_ACX_MAC80211_VERSION < KERNEL_VERSION(2, 6, 34) - adev->vif = vif->vif; - mac_vif = vif->mac_addr; -#else - adev->vif = vif; - mac_vif = vif->addr; -#endif + adev->vif = VIF_vif(vif); + mac_vif = VIF_addr(vif); switch (adev->vif_type) { case NL80211_IFTYPE_AP: @@ -6321,7 +6316,7 @@ out_unlock: return err; } -void acx_op_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) +void acx_op_remove_interface(struct ieee80211_hw *hw, struct ieee80211_VIF *vif) { acx_device_t *adev = ieee2adev(hw); @@ -6332,11 +6327,7 @@ void acx_op_remove_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) acx_sem_lock(adev); acx_debugfs_remove_adev(adev); -#if CONFIG_ACX_MAC80211_VERSION < KERNEL_VERSION(2, 6, 34) - mac_vif = vif->mac_addr; -#else - mac_vif = vif->addr; -#endif + mac_vif = VIF_addr(vif); if (vif->type == NL80211_IFTYPE_MONITOR) adev->vif_monitor--; -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:17
|
This function was moved to merge.c, so its prototype is determined by both MEM and PCI. This makes it fit better in merge.h than pci.h. As it turns out, we dont need a prototype at all (its only called from within merge.c, but the current prototype is wrong in a USB-only config, so just drop it. Signed-off-by: Jim Cromie <jim...@gm...> --- pci.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pci.h b/pci.h index 71a2f26..8a71471 100644 --- a/pci.h +++ b/pci.h @@ -53,12 +53,10 @@ void acxpci_write_cmd_type_status(acx_device_t *adev, u16 type, #if defined(CONFIG_ACX_MAC80211_PCI) void acxpci_reset_mac(acx_device_t *adev); -int acxpci_upload_fw(acx_device_t *adev); #else /* !CONFIG_ACX_MAC80211_PCI */ -static inline void acxpci_reset_mac(acx_device_t *adev) -{} +static inline void acxpci_reset_mac(acx_device_t *adev) {} #endif /* CONFIG_ACX_MAC80211_PCI */ #endif /* _PCI_H_ */ -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:17
|
Support writing symbolic names to debugflags. $> echo +L_CTL,-L_BUFR > /sys/modules/acx_mac80211/parameters/debugflags Names accepted are same as those printed by catting the file, prefixed by +/- to turn on/off the bit. Multiple names can be given, separated by commas. Maybe should drop the L_ prefix. Put supporting functions inside ifdef for callback decl. name enum containing debug_flag masks, not used as such, but its good practice. Signed-off-by: Jim Cromie <jim...@gm...> --- acx_struct_dev.h | 2 +- common.c | 37 ++++++++++++++++++------------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/acx_struct_dev.h b/acx_struct_dev.h index 4aa8058..7202939 100644 --- a/acx_struct_dev.h +++ b/acx_struct_dev.h @@ -24,7 +24,7 @@ * BOM Debug / log functionality * ================================================== */ -enum { +enum debug_flags { L_LOCK = (ACX_DEBUG>1)*0x0001, /* locking debug log */ L_INIT = (ACX_DEBUG>0)*0x0002, /* special card initialization logging */ L_IRQ = (ACX_DEBUG>0)*0x0004, /* interrupt stuff */ diff --git a/common.c b/common.c index 1be68b5..6d90d3f 100644 --- a/common.c +++ b/common.c @@ -6957,11 +6957,16 @@ unsigned int acx_debug = ACX_DEFAULT_MSG; module_param_named(debug, acx_debug, uint, 0644); MODULE_PARM_DESC(debug, "Debug level mask (see L_xxx constants)"); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) +/* implement /sys/module/acx_mac80211/parameters/debugflags */ + static const char *flag_names[] = { "L_LOCK", "L_INIT", "L_IRQ", "L_ASSOC", "L_FUNC", "L_XFER", "L_DATA", "L_DEBUG", "L_IOCTL", "L_CTL", "L_BUFR", "L_XFER_BEACON", "L_BUFT", "L_USBRXTX", "L_BUF", }; +/* should check enum debug_flags, but no suitable val is set */ +BUILD_BUG_DECL(flag_names, ARRAY_SIZE(flag_names) != 15); static int acx_debug_flag_get(char *buf, const struct kernel_param *kp) { @@ -6981,11 +6986,14 @@ static int acx_debug_flag_get(char *buf, const struct kernel_param *kp) static int acx_debug_flag_set(const char *val, const struct kernel_param *kp) { - int i, len = strlen(val); - char sign, *e, *p = (char*) val; + int i; + char sign, *e, *p = (char*) val; /* cast away const */ - pr_info("val: %s len:%d\n", val, len); - while (*p) { + if ((e = strchr(p, '\n'))) + *e = '\0'; /* trim trailing newline */ + + pr_info("parsing flags: %s\n", p); + for (; p; p = e) { sign = *p++; switch (sign) { case '+': @@ -6995,43 +7003,34 @@ static int acx_debug_flag_set(const char *val, const struct kernel_param *kp) return -EINVAL; } if ((e = strchr(p, ','))) - *e = '\0'; + *e++ = '\0'; /* end 1st term, ready next */ for (i = 0; i < ARRAY_SIZE(flag_names); i++) { - if (strcmp(p, flag_names[i])) { - - pr_info("found: %s flags:0x%x\n", - p, acx_debug); + if (!strcmp(p, flag_names[i])) { if (sign == '+') acx_debug |= (1 << i); else acx_debug &= ~(1 << i); - - pr_info("new:%x\n", acx_debug); - p = ++e; - continue; + break; } } if (i == ARRAY_SIZE(flag_names)) { - pr_err("no match on val: %s len:%d\n", p, len); + pr_err("no match on val: %s\n", p); return -EINVAL; } - p = ++e; } return 0; } -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 36) static struct kernel_param_ops acx_debug_flag_ops = { .get = acx_debug_flag_get, .set = acx_debug_flag_set, }; - module_param_cb(debugflags, &acx_debug_flag_ops, "str", 0644); -#endif -#endif +#endif /* implement /sys/module/acx_mac80211/parameters/debugflags */ +#endif /* ACX_DEBUG */ #ifdef MODULE_LICENSE MODULE_LICENSE("Dual MPL/GPL"); -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:16
|
Building commit 6a98cf032b on an x86_64 box, I get the following errors. Attached patch fixes them, and builds clean on 32 bit also. I used size_t, which changes size like uintptr_t, but is an integer type. Also changed return typ of acx_dbgfs_write(), to comport with actual type expected in struct file_operations (not the type in acx_proc_write_*) CC [M] /home/jimc/projects/lx/acx-mac80211/debugfs.o /home/jimc/projects/lx/acx-mac80211/debugfs.c: In function 'acx_dbgfs_open': /home/jimc/projects/lx/acx-mac80211/debugfs.c:61:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] /home/jimc/projects/lx/acx-mac80211/debugfs.c: In function 'acx_dbgfs_write': /home/jimc/projects/lx/acx-mac80211/debugfs.c:90:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] /home/jimc/projects/lx/acx-mac80211/debugfs.c: At top level: /home/jimc/projects/lx/acx-mac80211/debugfs.c:117:2: warning: initialization from incompatible pointer type [enabled by default] /home/jimc/projects/lx/acx-mac80211/debugfs.c:117:2: warning: (near initialization for 'acx_fops.write') [enabled by default] /home/jimc/projects/lx/acx-mac80211/debugfs.c: In function 'acx_debugfs_add_adev': /home/jimc/projects/lx/acx-mac80211/debugfs.c:158:6: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] Signed-off-by: Jim Cromie <jim...@gm...> --- debugfs.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/debugfs.c b/debugfs.c index cd403bc..e47757b 100644 --- a/debugfs.c +++ b/debugfs.c @@ -58,7 +58,7 @@ BUILD_BUG_DECL(dbgfs_files__VS__enum_REG_DOMAIN, static int acx_dbgfs_open(struct inode *inode, struct file *file) { - int fidx = (int) inode->i_private; + size_t fidx = (size_t) inode->i_private; struct acx_device *adev = (struct acx_device *) file->f_path.dentry->d_parent->d_inode->i_private; @@ -73,21 +73,21 @@ static int acx_dbgfs_open(struct inode *inode, struct file *file) case ANTENNA: case REG_DOMAIN: pr_info("opening filename=%s fmode=%o fidx=%d adev=%p\n", - dbgfs_files[fidx], file->f_mode, fidx, adev); + dbgfs_files[fidx], file->f_mode, (int)fidx, adev); break; default: - pr_err("unknown file @ %d: %s\n", fidx, + pr_err("unknown file @ %d: %s\n", (int)fidx, file->f_path.dentry->d_name.name); return -ENOENT; } return single_open(file, acx_proc_show_funcs[fidx], adev); } -static int acx_dbgfs_write(struct file *file, const char __user *buf, +static ssize_t acx_dbgfs_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { /* retrieve file-index and adev from private fields */ - int fidx = (int) file->f_path.dentry->d_inode->i_private; + size_t fidx = (size_t) file->f_path.dentry->d_inode->i_private; struct acx_device *adev = (struct acx_device *) file->f_path.dentry->d_parent->d_inode->i_private; @@ -102,10 +102,10 @@ static int acx_dbgfs_write(struct file *file, const char __user *buf, case ANTENNA: case REG_DOMAIN: pr_info("opening filename=%s fmode=%o fidx=%d adev=%p\n", - dbgfs_files[fidx], file->f_mode, fidx, adev); + dbgfs_files[fidx], file->f_mode, (int)fidx, adev); break; default: - pr_err("unknown file @ %d: %s\n", fidx, + pr_err("unknown file @ %d: %s\n", (int)fidx, file->f_path.dentry->d_name.name); return -ENOENT; } @@ -125,7 +125,7 @@ static struct dentry *acx_dbgfs_dir; int acx_debugfs_add_adev(struct acx_device *adev) { - int i; + size_t i; int fmode; struct dentry *file; const char *devname = wiphy_name(adev->ieee->wiphy); -- 1.7.10.1.487.ga3935e6 |
From: Jim C. <jim...@gm...> - 2012-05-19 07:38:15
|
Hi Oliver, Larry, Another batch: 1- revisit debugfs.c typecasts again. I used size_t, since its an integer type (like fidx), and changes size with platform (like uintptr_t) 2- corrects broken patch from previous batch 3- fixes incomplete patch which Oliver had to fix up for 2.6.32-3 hopefully this finishes it. 4- candy 5- DECL_OR_STUB reduces double prototypes 10- I think acxpci-upload-fw has some cruft that could be removed, after you (Oliver) fixed the separate firmware loading in _acx_upload_fw, needed by mem 0001-debugfs.c-fix-types-warnings.patch 0002-common.c-set-debug-flags-by-symbolic-names.patch 0003-abstract-ieee80211_VIF-changes-in-acx_op_-add-remove.patch 0004-common.c-replace-if-then-else-with-min-in-switch-cas.patch 0005-add-DECL_OR_STUB-macro-to-acx.h-use-it-in-merge.h.patch 0006-pci.h-drop-acxpci_upload_fw-prototypes.patch 0007-drop-STATick-no-longer-needed.patch 0008-cleanup-ifdefs-in-common.c-init-exit-funcs.patch 0009-merge.c-make-acx_process_rxdesc-static.patch 0010-cleanup-upload_fw.patch 0011-add-MACSTR_SIZE.patch 0012-hide-acx_op_tx-iface-change-in-acx_compat.h.patch 0013-cleanup-debugfs.c-fn-protos.patch 0014-scripts-wifi-probe.rc-loads-wifi-probe.prefs.patch acx-mac80211$ git diff --stat master acx.h | 61 ++++++++++++++++++++++++++- acx_compat.h | 32 +++++++++++--- acx_func.h | 1 + acx_struct_dev.h | 2 +- common.c | 113 ++++++++++++++++---------------------------------- debugfs.c | 31 ++++++-------- mem.c | 27 ++++++------ mem.h | 3 -- merge.c | 10 ++--- merge.h | 74 ++++++++++++++++----------------- pci.c | 88 +-------------------------------------- pci.h | 16 ++++--- scripts/wifi-probe.rc | 19 ++++++++- usb.c | 4 +- Other Items: Im certain that debugfs files livecycle is not quite correct. In addition to expected /dbg/acx_mac80211/phyX, Im seeing /dbg/phyX show up also (on ifup I think), and theyre not going away on ifdown. I cleaned up PROC_FS vs DEBUG_FS a bit, but theres more to be done. EXTRA_CFLAGS:= -g -DACX_WANT_PROC_FILES_ANYWAY \ breaks currently. I think this one simplifies once lifecycle issues are fixed. your __acquire/__release patch seems to fix sparse complaints. Of course, its now thowing new ones. CHECK /home/jimc/projects/lx/acx-mac80211/merge.c merge.c:463:48: warning: cast removes address space of expression merge.c:563:20: warning: cast removes address space of expression merge.c:1618:32: warning: incorrect type in assignment (different address spaces) merge.c:1618:32: expected unsigned char [noderef] [usertype] <asn:2>*[usertype] cmd_area merge.c:1618:32: got unsigned char [usertype] *<noident> merge.c:1619:33: warning: incorrect type in assignment (different address spaces) merge.c:1619:33: expected unsigned char [noderef] [usertype] <asn:2>*[usertype] info_area merge.c:1619:33: got unsigned char [usertype] *<noident> interrupt-masks.h:10:5: warning: symbol 'interrupt_masks' was not declared. Should it be static? interrupt-masks.h:99:12: warning: symbol 'devtype_names' was not declared. Should it be static? interrupt-masks.h:100:12: warning: symbol 'chiptype_names' was not declared. Should it be static? interrupt-masks.h:109:29: warning: symbol 'interrupt_descs' was not declared. Should it be static? interrupt-masks.h:165:6: warning: symbol 'interrupt_show_flags' was not declared. Should it be static? include/linux/spinlock.h:340:9: warning: context imbalance in 'acx_reset_dev' - unexpected unlock interrupt-masks.h:33:25: warning: cast truncates bits from constant value (ffff10fc becomes 10fc) CHECK /home/jimc/projects/lx/acx-mac80211/debugfs.c Im mildly concerned about playing with lock *hooks* linux-2.6$ more Documentation/lockstat.txt LOCK STATISTICS <ascii art> lock, unlock - the regular lock functions __* - the hooks <> - states With these hooks we provide the following statistics: con-bounces - number of lock contention that involved x-cpu data contentions - number of lock acquisitions that had to wait wait time min - shortest (non-0) time we ever had to wait for a lock max - longest time we ever had to wait for a lock total - total time we spend waiting on this lock acq-bounces - number of lock acquisitions that involved x-cpu data acquisitions - number of times we took the lock hold time min - shortest (non-0) time we ever held the lock max - longest time we ever held the lock total - total time this lock was held I just rebuilt my kernels with CONFIG_LOCK_STAT, to see if theres anything surprising in there, will try driver before/after the patch, idle/under-load, and let you know what I see. |
From: Oliver W. <oli...@ol...> - 2012-05-18 21:26:33
|
Hi, The following fixes the sparse warnings: "context imbalance in 'xyz()' - different lock contexts for basic block". I tried different possibilities, but finally it boiled down to a conditional __acquire(), which achieves a balanced count on the "&adev->spinlock"-context for all cases (I suppose). If that's Ok, I'll commit it. -Oliver --- > diff --git a/inlines.h b/inlines.h > index 868f20e..803015d 100644 > --- a/inlines.h > +++ b/inlines.h > @@ -66,11 +66,15 @@ > #define acxmem_lock_flags unsigned long flags = 0 > #define acxmem_lock() \ > if (IS_MEM(adev)) \ > - spin_lock_irqsave(&adev->spinlock, flags) > + spin_lock_irqsave(&adev->spinlock, flags); \ > + else \ > + __acquire(&adev->spinlock) > > -#define acxmem_unlock() \ > - if (IS_MEM(adev)) \ > - spin_unlock_irqrestore(&adev->spinlock, flags) > +#define acxmem_unlock() \ > + if (IS_MEM(adev)) \ > + spin_unlock_irqrestore(&adev->spinlock, flags);\ > + else \ > + __release(&adev->spinlock) > > /* Endianess: read[lw], write[lw] do little-endian conversion internally */ > #define acx_readl(v) readl((v)) --- |
From: Larry F. <Lar...@lw...> - 2012-05-17 14:43:55
|
On 05/17/2012 07:10 AM, Oliver Winker wrote: > Hi Jim, Larry, > > Ok, the series and pushed! Thanks a lot again for this heap of work :)!! > > There are several changes regarding builds and some functional fixes. > You'll see in the commits messages. > > I had also to revert b4661bf5 (CONFIG_PCI vs. CONFIG_ACX_MAC80211_PCI, > see commit message). Maybe a runtime check would still be better here. > > The sparse checks are interesting. I'll have also a look at some one time. > > There regarding debugfs.c: > > There were warnings, which have been fixed in 740058 and then seem to > have been rolled back again due to sparse warnings. > > I checked those and, at least from my perspective, could fix them for > both gcc and sparse - see patch below. > > Is this ok to commit, or is there something, that missed maybe ? > > Best Regards, Oliver > > --- >> CC [M] /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.o >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c: In function ‘acx_dbgfs_open’: >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:61:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c: In function ‘acx_dbgfs_write’: >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:90:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c: At top level: >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:2: warning: initialization from incompatible pointer type [enabled by default] >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:2: warning: (near initialization for ‘acx_fops.write’) [enabled by default] >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c: In function ‘acx_debugfs_add_adev’: >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:158:6: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] > --- > > Then I get also still these sparse warning in debugfs.c: > --- >> CHECK /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:27: warning: incorrect type in initializer (different type sizes) >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:27: expected long ( *write )( ... ) >> /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:27: got int ( static [toplevel] *<noident> )( ... ) > --- > > This patch seems to satisfy both, gcc and sparse for x86_32 and x86_64: > --- >> diff --git a/debugfs.c b/debugfs.c >> index cd403bc..d6bbe7e 100644 >> --- a/debugfs.c >> +++ b/debugfs.c >> @@ -58,7 +58,7 @@ BUILD_BUG_DECL(dbgfs_files__VS__enum_REG_DOMAIN, >> >> static int acx_dbgfs_open(struct inode *inode, struct file *file) >> { >> - int fidx = (int) inode->i_private; >> + int fidx = (uintptr_t) inode->i_private; >> struct acx_device *adev = (struct acx_device *) >> file->f_path.dentry->d_parent->d_inode->i_private; >> >> @@ -83,11 +83,11 @@ static int acx_dbgfs_open(struct inode *inode, struct file *file) >> return single_open(file, acx_proc_show_funcs[fidx], adev); >> } >> >> -static int acx_dbgfs_write(struct file *file, const char __user *buf, >> +static ssize_t acx_dbgfs_write(struct file *file, const char __user *buf, >> size_t count, loff_t *ppos) >> { >> /* retrieve file-index and adev from private fields */ >> - int fidx = (int) file->f_path.dentry->d_inode->i_private; >> + int fidx = (uintptr_t) file->f_path.dentry->d_inode->i_private; >> struct acx_device *adev = (struct acx_device *) >> file->f_path.dentry->d_parent->d_inode->i_private; >> >> @@ -155,7 +155,7 @@ int acx_debugfs_add_adev(struct acx_device *adev) >> /* save file-index in in file's private field */ >> file = debugfs_create_file(dbgfs_files[i], fmode, >> acx_dbgfs_devdir, >> - (void*) i,&acx_fops); >> + (void *) (uintptr_t) i,&acx_fops); >> if (!file) >> goto fail; >> } > --- > I had noticed the warnings from debugfs on x86_64 and prepared a patch. As I decided that you had enough to test and merge, I have been holding it back. Your solution looks like mine with one exception. In acx-debugfs_add_adev(), I changed "i" to a long rather than using the uintptr_t cast. AFAIK, the solutions are equal. I purchased a DWL-120+ on E-bay yesterday. When it arrives, I hope that turns out to be an acx100. The one labeled as DWL-120 that I asked you about turns out to use at76c50x-usb as a driver. It wasn't a total loss, as that driver crashes my kernels, thus it needs some work. I hope to get to it someday. Thanks for your efforts on merging the code. |
From: Oliver W. <oli...@ol...> - 2012-05-17 12:10:30
|
Hi Jim, Larry, Ok, the series and pushed! Thanks a lot again for this heap of work :)!! There are several changes regarding builds and some functional fixes. You'll see in the commits messages. I had also to revert b4661bf5 (CONFIG_PCI vs. CONFIG_ACX_MAC80211_PCI, see commit message). Maybe a runtime check would still be better here. The sparse checks are interesting. I'll have also a look at some one time. There regarding debugfs.c: There were warnings, which have been fixed in 740058 and then seem to have been rolled back again due to sparse warnings. I checked those and, at least from my perspective, could fix them for both gcc and sparse - see patch below. Is this ok to commit, or is there something, that missed maybe ? Best Regards, Oliver --- > CC [M] /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.o > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c: In function ‘acx_dbgfs_open’: > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:61:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c: In function ‘acx_dbgfs_write’: > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:90:13: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c: At top level: > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:2: warning: initialization from incompatible pointer type [enabled by default] > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:2: warning: (near initialization for ‘acx_fops.write’) [enabled by default] > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c: In function ‘acx_debugfs_add_adev’: > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:158:6: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] --- Then I get also still these sparse warning in debugfs.c: --- > CHECK /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:27: warning: incorrect type in initializer (different type sizes) > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:27: expected long ( *write )( ... ) > /media/OE/Devel/Git-acx-mac80211/acx-mac80211/debugfs.c:117:27: got int ( static [toplevel] *<noident> )( ... ) --- This patch seems to satisfy both, gcc and sparse for x86_32 and x86_64: --- > diff --git a/debugfs.c b/debugfs.c > index cd403bc..d6bbe7e 100644 > --- a/debugfs.c > +++ b/debugfs.c > @@ -58,7 +58,7 @@ BUILD_BUG_DECL(dbgfs_files__VS__enum_REG_DOMAIN, > > static int acx_dbgfs_open(struct inode *inode, struct file *file) > { > - int fidx = (int) inode->i_private; > + int fidx = (uintptr_t) inode->i_private; > struct acx_device *adev = (struct acx_device *) > file->f_path.dentry->d_parent->d_inode->i_private; > > @@ -83,11 +83,11 @@ static int acx_dbgfs_open(struct inode *inode, struct file *file) > return single_open(file, acx_proc_show_funcs[fidx], adev); > } > > -static int acx_dbgfs_write(struct file *file, const char __user *buf, > +static ssize_t acx_dbgfs_write(struct file *file, const char __user *buf, > size_t count, loff_t *ppos) > { > /* retrieve file-index and adev from private fields */ > - int fidx = (int) file->f_path.dentry->d_inode->i_private; > + int fidx = (uintptr_t) file->f_path.dentry->d_inode->i_private; > struct acx_device *adev = (struct acx_device *) > file->f_path.dentry->d_parent->d_inode->i_private; > > @@ -155,7 +155,7 @@ int acx_debugfs_add_adev(struct acx_device *adev) > /* save file-index in in file's private field */ > file = debugfs_create_file(dbgfs_files[i], fmode, > acx_dbgfs_devdir, > - (void*) i, &acx_fops); > + (void *) (uintptr_t) i, &acx_fops); > if (!file) > goto fail; > } --- On 05/15/2012 09:50 AM, Jim Cromie wrote: > hi Oliver, Larry, > > heres another batch of merges, sparse fixes, comment wraps and grammar > fixes, and various other stuff. Another chance to amortize your testing efforts over more changes ;-) > > > common.c | 188 +++++++++++++++++++---------- > debugfs.c | 26 ++-- > inlines.h | 75 +++++------- > mem.c | 55 +++++---- > mem.h | 4 +- > merge.c | 408 +++++++++++++++++++++++++++++++------------------------------- > merge.h | 204 +++++++++++++++++++++++-------- > pci.c | 23 ++-- > 8 files changed, 569 insertions(+), 414 deletions(-) > |
From: Jim C. <jim...@gm...> - 2012-05-15 20:47:36
|
hey, this one seems to have problems: Ive gotten a couple null-pointer oopses. common.c: set debug-flags by symbolic names I'll look into it. |
From: Larry F. <Lar...@lw...> - 2012-05-15 20:02:31
|
On 05/15/2012 02:17 PM, Oliver Winker wrote: > On 05/15/2012 09:00 PM, Jim Cromie wrote: >>> >>> Im attaching a test script Ive been using to bang on the driver >>> Dot it into your shell, and go from there. >>> > > How about putting the script into a 'scripts' sub-dir in the tree ? For > me that's fine. Sounds good to me. Larry |